From 5832e4ce53d30bc282bb2c0add421d5f0a6b091d Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Tue, 09 Jan 2024 14:54:25 +0800
Subject: [PATCH] 详情提交

---
 src/views/evaluate/components/firstRoundResult.vue   |   15 +++
 src/views/evaluate/components/viewEvaluateDetail.vue |  119 ++++++++++++++++++++++++++++-
 src/views/evaluate/components/candidateResult.vue    |   66 ++++++++++++++--
 3 files changed, 186 insertions(+), 14 deletions(-)

diff --git a/src/views/evaluate/components/candidateResult.vue b/src/views/evaluate/components/candidateResult.vue
index f8eb7fc..286ff37 100644
--- a/src/views/evaluate/components/candidateResult.vue
+++ b/src/views/evaluate/components/candidateResult.vue
@@ -1,16 +1,26 @@
 <template>
     <el-dialog v-model="params.visible" title="第一轮评优结果">
-        <avue-crud v-model:page="page" :option="option" :table-loading="loading" :data="data" @current-change="currentChange"
-            @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
-            <template #menu="{row}">
-                <el-button type="primary" icon="el-icon-plus" text>添加至第二轮</el-button>
+        <avue-crud v-model:page="page" :option="option" :table-loading="loading" :data="data"
+            @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+            <template #menu="{ row }">
+                <el-button type="primary" icon="el-icon-plus" text @click="addEvaluateTypeHandler(row)">添加至第二轮</el-button>
             </template>
         </avue-crud>
+        <el-dialog v-model="addEvaluateTypeVisible" width="400px" title="请选择添加至评优类别" append-to-body
+            @open="evaluateTypeOpen">
+            <el-select v-model="selectEvaluateType" placeholder="请选择要添加至的评优类别" style="width: 100%;">
+                <el-option v-for="item in evaluateTypeList" :key="item.id" :label="item.categoryName" :value="item.id" />
+            </el-select>
+            <template #footer>
+                <el-button @click="addEvaluateTypeVisible = false">取消</el-button>
+                <el-button type="primary" @click="addSecondRoundHandler">确定</el-button>
+            </template>
+        </el-dialog>
     </el-dialog>
 </template>
 
 <script>
-import { getCandidateResult } from '@/api/evaluate/evaluateTask'
+import { getCandidateResult, getEcList, addEtaskCc } from '@/api/evaluate/evaluateTask'
 
 export default {
     props: {
@@ -68,11 +78,18 @@
                     {
                         label: '票数',
                         prop: 'voteNum',
-                        type: 'input'
+                        type: 'input',
+                        formatter: (_row, value) => {
+                            return value + '票'
+                        }
                     },
                 ]
             },
-            data: []
+            data: [],
+            currentRow: {},
+            selectEvaluateType: '',
+            evaluateTypeList: [],
+            addEvaluateTypeVisible: false,
         }
     },
     methods: {
@@ -102,9 +119,42 @@
                 this.page.total = data.total;
                 this.data = data.records;
                 this.loading = false;
-                this.selectionClear();
             });
         },
+        initEvalutateType() {
+            const { id } = this.params.data
+            getEcList(1, 10, id).then(ecResult => {
+                const { code, data: { records } } = ecResult.data
+                if (code !== 200) return this.$message.error('评优类别加载失败')
+                this.evaluateTypeList = records
+            })
+        },
+        evaluateTypeOpen() {
+            this.initEvalutateType()
+        },
+        addEvaluateTypeHandler(row) {
+            this.addEvaluateTypeVisible = true;
+            this.currentRow = row
+        },
+        addSecondRoundHandler() {
+            if (!this.selectEvaluateType) return this.$message.warning('请选择当前候选人要填至的评优类别')
+            const { user_id, user_name, dept_id, dept_name, post_name } = this.currentRow
+            const requestParams = {
+                evaluateTaskCategoryId: this.selectEvaluateType,
+                userId: user_id,
+                userName: user_name,
+                deptId: dept_id,
+                deptName: dept_name,
+                postName: post_name,
+            }
+            addEtaskCc(requestParams).then(res => {
+                this.$message.success('添加成功')
+                this.addEvaluateTypeVisible = false
+                this.selectEvaluateType = ''
+            }, error => {
+                this.$message.error(error)
+            })
+        }
     }
 }
 </script>
diff --git a/src/views/evaluate/components/firstRoundResult.vue b/src/views/evaluate/components/firstRoundResult.vue
index a9dfe01..bc7e95b 100644
--- a/src/views/evaluate/components/firstRoundResult.vue
+++ b/src/views/evaluate/components/firstRoundResult.vue
@@ -42,6 +42,7 @@
                 viewBtn: false,
                 header: false,
                 menuWidth: 150,
+                menu: false,
                 dialogClickModal: false,
                 column: [
                     {
@@ -62,7 +63,10 @@
                     {
                         label: '票数',
                         prop: 'voteNum',
-                        type: 'input'
+                        type: 'input',
+                        formatter: (_row, value) => {
+                            return value + '票'
+                        }
                     },
                 ]
             },
@@ -96,9 +100,16 @@
                 this.page.total = data.total;
                 this.data = data.records;
                 this.loading = false;
-                this.selectionClear();
             });
         },
+    },
+    watch: {
+        'params.data': {
+            handler(value) {
+                this.onLoad(this.page)
+            },
+            deep: true
+        }
     }
 }
 </script>
diff --git a/src/views/evaluate/components/viewEvaluateDetail.vue b/src/views/evaluate/components/viewEvaluateDetail.vue
index 797ff5b..2a96c69 100644
--- a/src/views/evaluate/components/viewEvaluateDetail.vue
+++ b/src/views/evaluate/components/viewEvaluateDetail.vue
@@ -1,12 +1,45 @@
 <template>
-    <el-drawer v-model="props.params.visible" open="openDrawer" direction="rtl" size="50%">
+    <el-drawer v-model="props.params.visible" @open="openDrawer" direction="rtl" size="50%">
         <template #header>
-            <div class="title">评优任务详情</div>
+            <div class="drawer-title">{{ this.params.data?.taskName || '评优任务详情' }}</div>
         </template>
+        <el-collapse v-model="collapseParams.activeNames">
+            <el-collapse-item title="当前任务评优类别" name="1">
+                <ul class="type-list">
+                    <li class="type-item">
+                        <div class="title">类别</div>
+                        <div class="introduction">认定标准</div>
+                        <div class="number">名额</div>
+                    </li>
+                    <li class="type-item" v-for="(item, index) in collapseParams.categoryEntities" :key="index">
+                        <div class="title">{{ item.categoryName }}</div>
+                        <el-tooltip effect="dark" placement="top">
+                            <template #content>
+                                <p style="max-width: 500px;">{{ item.standard }}</p>
+                            </template>
+                            <div class="introduction">
+                                {{ item.standard }}
+                            </div>
+                        </el-tooltip>
+
+                        <div class="number">{{ item.peopleNum }}人</div>
+                    </li>
+                </ul>
+            </el-collapse-item>
+            <el-collapse-item title="第一轮候选结果" name="2">
+                <firstRoundResult :params="{ data: props.params.data }" />
+            </el-collapse-item>
+            <el-collapse-item title="最终评优结果" name="3">
+
+            </el-collapse-item>
+        </el-collapse>
     </el-drawer>
 </template>
 
 <script setup>
+import firstRoundResult from './firstRoundResult.vue';
+import { reactive } from 'vue';
+import { getEcList } from '@/api/evaluate/evaluateTask'
 
 const props = defineProps({
     params: {
@@ -21,8 +54,30 @@
     }
 })
 
-const openDrawer = () => {
+const collapseParams = reactive({
+    activeNames: ['1'],
+    categoryEntities: []
+})
 
+const pageParams = reactive({
+    current: 1,
+    size: 10,
+    total: 0
+})
+
+const currentTaskParams = reactive({
+    data: {}
+})
+
+const openDrawer = () => {
+    const { id } = props.params.data
+    const { current, size } = pageParams
+    getEcList(current, size, id).then(ecResult => {
+        const { code, data: { records } } = ecResult.data
+        if (code !== 200) return this.$message.error('评优类别加载失败')
+        collapseParams.categoryEntities = records
+    })
+    currentTaskParams.data = props.params.data
 }
 
 
@@ -30,8 +85,64 @@
 </script>
 
 <style lang="scss" scoped>
-.title {
+$borderColor: var(--el-border-color);
+
+.drawer-title {
     border-left: 3px solid #409eff;
     padding-left: 10px;
 }
+
+.type-list {
+    margin: 0;
+    padding: 0;
+    list-style-type: none;
+    width: 100%;
+    border: 1px solid $borderColor;
+    border-radius: var(--el-border-radius-base);
+    box-sizing: border-box;
+
+    .type-item {
+        display: flex;
+        height: 40px;
+        line-height: 40px;
+        text-align: center;
+
+        div {
+            border-bottom: 1px solid $borderColor;
+            flex-shrink: 0;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+        }
+
+        .title {
+            flex: 2;
+        }
+
+        .introduction {
+            flex: 5;
+            flex-shrink: 0;
+
+            border: {
+                right: 1px solid $borderColor;
+                left: 1px solid $borderColor;
+            }
+        }
+
+        .number {
+            flex: 1;
+        }
+
+        .tool {
+            flex: 2;
+            border-left: 1px solid $borderColor;
+        }
+
+        &:last-child {
+            div {
+                border-bottom: 0;
+            }
+        }
+    }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3