From d3cb9dc762b0bd5acbaa59d146afb2cb9f2017e4 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Sat, 23 Dec 2023 18:32:06 +0800
Subject: [PATCH] 页面修改提交

---
 src/option/evaluate/evaluateTask.js                  |    4 
 src/views/evaluate/components/viewEvaluateDetail.vue |  233 ++++++++++++++++++++++++++++++++++++++++++++++
 src/api/evaluate/evaluateTask.js                     |   12 ++
 src/views/evaluate/evaluateTask.vue                  |   15 ++
 4 files changed, 261 insertions(+), 3 deletions(-)

diff --git a/src/api/evaluate/evaluateTask.js b/src/api/evaluate/evaluateTask.js
index 2b63fd9..b0e8f3c 100644
--- a/src/api/evaluate/evaluateTask.js
+++ b/src/api/evaluate/evaluateTask.js
@@ -77,4 +77,16 @@
       ids,
     }
   })
+}
+
+export const getFinallyResult = (params) => {
+  return request({
+    url: '/evaluate/evaluateTaskSet/page',
+    method: 'get',
+    params: {
+      ...params,
+      type: 2,
+      descs: 'vote_num'
+    }
+  })
 }
\ No newline at end of file
diff --git a/src/option/evaluate/evaluateTask.js b/src/option/evaluate/evaluateTask.js
index 3c1f268..3262348 100644
--- a/src/option/evaluate/evaluateTask.js
+++ b/src/option/evaluate/evaluateTask.js
@@ -12,7 +12,7 @@
   searchMenuSpan: 6,
   border: true,
   index: true,
-  viewBtn: true,
+  viewBtn: false,
   addBtn: false,
   editBtn: false,
   selection: true,
@@ -218,7 +218,7 @@
   searchMenuSpan: 6,
   border: true,
   index: true,
-  viewBtn: true,
+  viewBtn: false,
   addBtn: false,
   editBtn: false,
   selection: true,
diff --git a/src/views/evaluate/components/viewEvaluateDetail.vue b/src/views/evaluate/components/viewEvaluateDetail.vue
new file mode 100644
index 0000000..53203bd
--- /dev/null
+++ b/src/views/evaluate/components/viewEvaluateDetail.vue
@@ -0,0 +1,233 @@
+<template>
+    <el-dialog title="信息预览" v-model="params.visible" width="800px">
+        <div class="descriptions">
+            <div class="descriptions-item" v-for="item in taskDateil" :key="item.prop" :style="{ width: item.width }">
+                <div class="label">{{ item.title }}</div>
+                <div class="value" v-if="!item.isSlot">{{ item.value }}</div>
+                <div class="table" v-else>
+                    <avue-crud :option="item.option" :data="item.data" ref="crud" @current-change="currentChange"
+                        @size-change="sizeChange" @refresh-change="refreshChange"></avue-crud>
+                </div>
+            </div>
+        </div>
+    </el-dialog>
+</template>
+
+<script setup>
+import { reactive, watch } from 'vue';
+import {
+    getCandidateList,
+    getFinallyResult
+} from '@/api/evaluate/evaluateTask'
+
+const props = defineProps({
+    params: {
+        type: Object,
+        default: () => ({
+            visible: false,
+            data: {},
+        }),
+    }
+})
+
+const page = reactive({
+    current: 1,
+    size: 10,
+    total: 0
+})
+
+const taskDateil = reactive([
+    {
+        title: '任务名称',
+        prop: 'taskName',
+        value: '',
+        width: 'calc(100% / 3)'
+    },
+    {
+        title: '任务类别',
+        prop: 'taskType',
+        value: '',
+        width: 'calc(100% / 3)'
+    },
+    {
+        title: '评定标准',
+        prop: 'remark',
+        value: '',
+        width: 'calc(100% / 3)'
+    },
+    {
+        title: '候选人截止日期',
+        prop: 'candidateCutoffTime',
+        value: '',
+        width: '50%'
+    },
+    {
+        title: '评优截止日期',
+        prop: 'evaluateCutoffTime',
+        value: '',
+        width: '50%'
+    },
+    {
+        title: '候选人状态',
+        prop: 'candidateState',
+        value: '',
+        width: '50%'
+    },
+    {
+        title: '评优评先状态',
+        prop: 'evaluateState',
+        value: '',
+        width: '50%'
+    },
+    {
+        title: '候选结果',
+        prop: 'candidateResult',
+        value: '',
+        width: '100%'
+    },
+    {
+        title: '最终评定结果',
+        prop: 'finallyResult',
+        isSlot: true,
+        width: '100%',
+        data: [],
+        option: {
+            height: '200',
+            calcHeight: 30,
+            tip: false,
+            searchShow: true,
+            border: true,
+            index: true,
+            viewBtn: false,
+            addBtn: false,
+            editBtn: false,
+            selection: false,
+            dialogClickModal: false,
+            menu: false,
+            menuLeft: false,
+            header: false,
+            menuFixed: 'right',
+            labelWidth: '120',
+            span: 1,
+            colums: [
+                {
+                    lable: '评优项目',
+                    prop: '',
+                    type: 'input',
+                },
+                {
+                    lable: '名称',
+                    prop: '',
+                    type: 'input',
+                },
+                {
+                    lable: '候选人',
+                    prop: '',
+                    type: 'input',
+                },
+                {
+                    lable: '部门',
+                    prop: '',
+                    type: 'input'
+                },
+                {
+                    lable: '票数',
+                    prop: '',
+                    type: 'input'
+                }
+            ]
+        }
+    }
+])
+
+watch(() => props.params.visible, (val) => {
+    val && initData()
+}, {
+    deep: true
+})
+
+const candidateList = () => {
+    let values = {
+        evaluateTaskId: props.params.data.id
+    };
+    return getCandidateList(1, 99999, values).then(res => {
+        const candidateRes = res.data.data.records;
+        return candidateRes
+    });
+}
+
+const getFinallyList = () => {
+    const params = {
+        evaluateTaskId: props.params.data.id,
+        current: page.current,
+        size: page.size
+    }
+    return getFinallyResult(params).then(res => {
+        return res.data.data.records
+    })
+}
+
+const initData = async () => {
+    const data = props.params.data
+    for (const item of taskDateil) {
+        item.value = data[item.prop] || '暂未完善'
+
+        if (item.prop === 'candidateResult') {
+            const res = await candidateList()
+            if (res.length == 0) {
+                item.value = '暂无候选人'
+            }
+        }
+
+        if (item.prop === 'finallyResult') {
+            const res = await getFinallyList()
+            item.data = res
+        }
+    }
+
+    // 获取当前数据
+}
+</script>
+
+<style lang="scss" scoped>
+.descriptions {
+    width: 100%;
+    display: flex;
+    flex-wrap: wrap;
+
+    border: {
+        top: 1px solid #eeeded;
+        right: 1px solid #eeeded;
+    }
+
+    ;
+
+    .descriptions-item {
+        display: flex;
+        box-sizing: border-box;
+        border: {
+            bottom: 1px solid #eeeded;
+            left: 1px solid #eeeded;
+        }
+
+        .label,
+        .value {
+            flex-shrink: 0;
+            padding: 10px 5px;
+        }
+
+        .label {
+            width: 100px;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            background-color: aliceblue;
+            border-right: 1px solid #eeeded;
+        }
+
+        .table {
+            width: 100%;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/evaluate/evaluateTask.vue b/src/views/evaluate/evaluateTask.vue
index ba5437d..7eb8338 100644
--- a/src/views/evaluate/evaluateTask.vue
+++ b/src/views/evaluate/evaluateTask.vue
@@ -13,6 +13,7 @@
         <el-button type="warning" plain icon="el-icon-download" @click="handleExport">导出</el-button>
       </template>
       <template #menu="{ size, row, index }">
+        <el-button type="primary" text plain icon="el-icon-view" @click="viewDateilDialog(row)">详情</el-button>
         <el-button type="primary" text plain icon="el-icon-edit" @click="editDialog(row)">编辑</el-button>
         <el-button type="primary" text plain icon="el-icon-position" @click="publicTimeBtn(row)"
           v-if="row.candidateState === 2">发布</el-button>
@@ -39,6 +40,8 @@
     <addDialog :params="addParams" @refreshTable="this.onLoad" />
     <!-- 新增候选人 -->
     <addCandidate :params="addCandidateParams" @refreshTable="this.onLoad" />
+    <!-- 预览弹窗 -->
+    <viewEvaluateDetail :params="viewEvaluateDetailParams" />
   </basic-container>
 </template>
 
@@ -54,12 +57,14 @@
 import 'nprogress/nprogress.css';
 import addDialog from './components/addDialog.vue';
 import addCandidate from './components/addCandidate.vue';
+import viewEvaluateDetail from './components/viewEvaluateDetail.vue';
 import { getDeptTree } from '@/api/system/dept';
 
 export default {
   components: {
     addDialog,
-    addCandidate
+    addCandidate,
+    viewEvaluateDetail
   },
   data() {
     return {
@@ -101,6 +106,8 @@
       },
       // 新增候选人params
       addCandidateParams: {},
+      // 信息预览弹窗
+      viewEvaluateDetailParams: {},
     };
   },
   watch: {
@@ -174,6 +181,12 @@
         },
       };
     },
+    viewDateilDialog(row) {
+      this.viewEvaluateDetailParams = {
+        visible: true,
+        data: row
+      }
+    },
     rowUpdate(row, index, done, loading) {
       update(row).then(
         () => {

--
Gitblit v1.9.3