From ba58e189e4ad320f1ff1ed4b1d91877f3fa70d78 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Tue, 09 Jan 2024 18:28:43 +0800
Subject: [PATCH] 评优结果更新

---
 src/views/evaluate/evaluateResult.vue                |   19 ++
 src/views/evaluate/components/evaluateTypeResult.vue |  153 +++++++++++++++++++++
 src/views/evaluate/components/firstRoundResult.vue   |   11 +
 src/views/evaluate/components/referrerPopover.vue    |    4 
 src/views/evaluate/components/viewEvaluateDetail.vue |   12 +
 src/api/evaluate/evaluateResult.js                   |    9 
 src/views/evaluate/components/secondRoundResult.vue  |   73 ++++++---
 src/api/evaluate/evaluateTask.js                     |   31 +++-
 src/views/evaluate/components/typeDetails.vue        |  108 +++++++++++++++
 9 files changed, 370 insertions(+), 50 deletions(-)

diff --git a/src/api/evaluate/evaluateResult.js b/src/api/evaluate/evaluateResult.js
index d786db8..e11a085 100755
--- a/src/api/evaluate/evaluateResult.js
+++ b/src/api/evaluate/evaluateResult.js
@@ -50,14 +50,13 @@
   })
 }
 
-export const getReferrer = (type, beId, evaluateTaskId) => {
+export const getReferrer = (current, size, evaluateTaskId, userId) => {
   return request({
-    url: '/evaluate/evaluateResult/list',
+    url: `/evaluate/evaluateTaskReferrer/listInfo/${evaluateTaskId}/${userId}`,
     method: 'get',
     params: {
-      type,
-      beId,
-      evaluateTaskId
+      current,
+      size
     }
   })
 }
diff --git a/src/api/evaluate/evaluateTask.js b/src/api/evaluate/evaluateTask.js
index d5358b3..c4a1eab 100644
--- a/src/api/evaluate/evaluateTask.js
+++ b/src/api/evaluate/evaluateTask.js
@@ -117,25 +117,38 @@
 }
 
 // 获取最终结果
-//  url: '/evaluate/evaluateCandidate/page',
-export const getFinallyResult = (params) => {
+export const getFinallyResult = (current, size, evaluateTaskId) => {
   return request({
-    url: '/evaluate/evaluateCandidate/page',
+    url: `/evaluate/evaluateTaskCategory/listByResult`,
     method: 'get',
     params: {
-      ...params,
-      descs: 'vote_num'
+      evaluateTaskId,
+      current,
+      size
     }
   })
 }
 
-export const getSectionFinallyResult = (params) => {
+// 获取最终结果
+export const getFinallyTypeResult = (current, size, params) => {
   return request({
-    url: '/evaluate/evaluateTaskSet/page',
+    url: `/evaluate/evaluateCandidateResult/listByCategoryId`,
     method: 'get',
     params: {
       ...params,
-      descs: 'vote_num'
+      current,
+      size
     }
   })
-}
\ No newline at end of file
+}
+
+// export const getSectionFinallyResult = (params) => {
+//   return request({
+//     url: '/evaluate/evaluateTaskSet/page',
+//     method: 'get',
+//     params: {
+//       ...params,
+//       descs: 'vote_num'
+//     }
+//   })
+// }
\ No newline at end of file
diff --git a/src/views/evaluate/components/evaluateTypeResult.vue b/src/views/evaluate/components/evaluateTypeResult.vue
new file mode 100644
index 0000000..47408a0
--- /dev/null
+++ b/src/views/evaluate/components/evaluateTypeResult.vue
@@ -0,0 +1,153 @@
+<template>
+    <div class="container">
+        <ul class="type-list">
+            <li class="type-item">
+                <div class="title">类别</div>
+                <div class="introduction">认定标准</div>
+                <div class="number">名额</div>
+                <div class="tool">操作</div>
+            </li>
+            <li class="type-item" v-for="(item, index) in 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>
+                <div class="tool">
+                    <el-button type="primary" icon="el-icon-view" text
+                        @click="viewEcCandidateHandler(item)">查看详情</el-button>
+                </div>
+            </li>
+        </ul>
+        <typeDetails :params="typeDetailsParams" />
+    </div>
+</template>
+
+<script>
+import { getEcList } from '@/api/evaluate/evaluateTask'
+import typeDetails from './typeDetails.vue'
+
+export default {
+    components: {
+        typeDetails
+    },
+    props: {
+        params: {
+            type: Object,
+            default: () => {
+                return {
+                    data: {}
+                }
+            }
+        }
+    },
+    data() {
+        return {
+            categoryEntities: [],
+            pageParams: {
+                current: 1,
+                size: 10,
+                total: 0
+            },
+            typeDetailsParams: {}
+        }
+    },
+    watch: {
+        'params.data': {
+            handler(value) {
+                this.pageParams.current = 1
+                this.initEccList()
+            },
+            deep: true
+        }
+    },
+    methods: {
+        initEccList() {
+            const { id } = this.params.data
+            const { current, size } = this.pageParams
+            getEcList(current, size, id).then(ecResult => {
+                const { code, data: { records } } = ecResult.data
+                if (code !== 200) return this.$message.error('评优类别加载失败')
+                this.categoryEntities = records
+            })
+        },
+        viewEcCandidateHandler(row) {
+            const evaluateTaskId = this.params.data.id
+            const evaluateTaskCategoryId = row.id
+            this.typeDetailsParams = {
+                visible: true,
+                data: {
+                    evaluateTaskId,
+                    evaluateTaskCategoryId
+                }
+            }
+        }
+    },
+    mounted() {
+        this.initEccList()
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+$borderColor: var(--el-border-color);
+
+.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
diff --git a/src/views/evaluate/components/firstRoundResult.vue b/src/views/evaluate/components/firstRoundResult.vue
index bc7e95b..a87b3b0 100644
--- a/src/views/evaluate/components/firstRoundResult.vue
+++ b/src/views/evaluate/components/firstRoundResult.vue
@@ -1,13 +1,22 @@
 <template>
     <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}">
+            <referrerPopover :params="{ userId: row.id, evaluateTaskId: params.data.id }">
+                <el-button type="success" icon="el-icon-view" text>推荐人预览</el-button>
+            </referrerPopover>
+        </template>
     </avue-crud>
 </template>
 
 <script>
+import referrerPopover from './referrerPopover.vue'
 import { getCandidateResult } from '@/api/evaluate/evaluateTask'
 
 export default {
+    components: {
+        referrerPopover
+    },
     props: {
         params: {
             type: Object,
@@ -42,7 +51,7 @@
                 viewBtn: false,
                 header: false,
                 menuWidth: 150,
-                menu: false,
+                // menu: false,
                 dialogClickModal: false,
                 column: [
                     {
diff --git a/src/views/evaluate/components/referrerPopover.vue b/src/views/evaluate/components/referrerPopover.vue
index b7eb31e..3a0193c 100644
--- a/src/views/evaluate/components/referrerPopover.vue
+++ b/src/views/evaluate/components/referrerPopover.vue
@@ -69,8 +69,8 @@
 })
 
 const init = () => {
-    const { userId, type, evaluateTaskId } = props.params
-    getReferrer(type, userId, evaluateTaskId).then(res => {
+    const { userId, evaluateTaskId } = props.params
+    getReferrer(page.currentPage, page.pageSize, evaluateTaskId, userId).then(res => {
         const { data } = res
         const referrerRes = _.cloneDeep(data.data.records)
         tableData.value = referrerRes
diff --git a/src/views/evaluate/components/secondRoundResult.vue b/src/views/evaluate/components/secondRoundResult.vue
index a9dfe01..6fac6ff 100644
--- a/src/views/evaluate/components/secondRoundResult.vue
+++ b/src/views/evaluate/components/secondRoundResult.vue
@@ -5,9 +5,10 @@
 </template>
 
 <script>
-import { getCandidateResult } from '@/api/evaluate/evaluateTask'
+import { getFinallyResult } from '@/api/evaluate/evaluateTask'
 
 export default {
+    inject: ['type'],
     props: {
         params: {
             type: Object,
@@ -42,30 +43,44 @@
                 viewBtn: false,
                 header: false,
                 menuWidth: 150,
+                menu: false,
                 dialogClickModal: false,
-                column: [
-                    {
-                        label: '姓名',
-                        prop: 'user_name',
-                        type: 'input'
-                    },
-                    {
-                        label: '部门',
-                        prop: 'user_name',
-                        type: 'input'
-                    },
-                    {
-                        label: '职位',
-                        prop: 'dept_name',
-                        type: 'input'
-                    },
-                    {
-                        label: '票数',
-                        prop: 'voteNum',
-                        type: 'input'
-                    },
-                ]
+                column: []
             },
+            defaultColumn: [
+                {
+                    label: '姓名',
+                    prop: 'user_name',
+                    type: 'input'
+                },
+                {
+                    label: '部门',
+                    prop: 'user_name',
+                    type: 'input'
+                },
+                {
+                    label: '职位',
+                    prop: 'dept_name',
+                    type: 'input'
+                },
+                {
+                    label: '票数',
+                    prop: 'voteNum',
+                    type: 'input'
+                },
+            ],
+            sectionColumn: [
+                {
+                    label: '部门',
+                    prop: 'user_name',
+                    type: 'input'
+                },
+                {
+                    label: '票数',
+                    prop: 'voteNum',
+                    type: 'input'
+                },
+            ],
             data: []
         }
     },
@@ -91,14 +106,22 @@
                 ...this.query,
                 ...params
             };
-            getCandidateResult(page.currentPage, page.pageSize, id).then(res => {
+            getFinallyResult(page.currentPage, page.pageSize, id).then(res => {
                 const data = res.data.data;
                 this.page.total = data.total;
                 this.data = data.records;
                 this.loading = false;
-                this.selectionClear();
             });
         },
+    },
+    watch: {
+        'params.data': {
+            handler(value) {
+                this.onLoad(this.page)
+                this.option.column = (this.type() ? this.sectionColumn : this.defaultColumn)
+            },
+            deep: true
+        }
     }
 }
 </script>
diff --git a/src/views/evaluate/components/typeDetails.vue b/src/views/evaluate/components/typeDetails.vue
new file mode 100644
index 0000000..c7c5c7a
--- /dev/null
+++ b/src/views/evaluate/components/typeDetails.vue
@@ -0,0 +1,108 @@
+<template>
+    <el-dialog v-model="params.visible" title="详情" @open="openDialog">
+        <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">
+        </avue-crud>
+    </el-dialog>
+</template>
+
+<script>
+import { getFinallyTypeResult } from '@/api/evaluate/evaluateTask'
+
+export default {
+    props: {
+        params: {
+            type: Object,
+            default: () => {
+                return {
+                    visible: false,
+                    data: {}
+                }
+            }
+        }
+    },
+    data() {
+        return {
+            data: [],
+            loading: true,
+            query: {},
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0
+            },
+            option: {
+                height: '400',
+                calcHeight: 30,
+                tip: false,
+                searchShow: true,
+                searchMenuSpan: 6,
+                border: true,
+                index: true,
+                viewBtn: false,
+                addBtn: false,
+                editBtn: false,
+                delBtn: false,
+                viewBtn: false,
+                header: false,
+                menuWidth: 150,
+                menu: false,
+                dialogClickModal: false,
+                column: [
+                    {
+                        label: '姓名',
+                        prop: 'user_name',
+                        type: 'input'
+                    },
+                    {
+                        label: '部门',
+                        prop: 'user_name',
+                        type: 'input'
+                    },
+                    {
+                        label: '职位',
+                        prop: 'dept_name',
+                        type: 'input'
+                    }
+                ]
+            },
+        }
+    },
+    methods: {
+        openDialog() {
+            this.onLoad(this.page)
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            this.loading = true;
+
+            const {
+                evaluateTaskId,
+                evaluateTaskCategoryId
+            } = this.params.data
+
+            const {
+            } = this.query;
+
+            let values = {
+                ...this.query,
+                ...params
+            };
+            getFinallyTypeResult(page.currentPage, page.pageSize, { evaluateTaskId, evaluateTaskCategoryId }).then(res => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+            });
+        },
+    }
+}
+</script>
\ No newline at end of file
diff --git a/src/views/evaluate/components/viewEvaluateDetail.vue b/src/views/evaluate/components/viewEvaluateDetail.vue
index 2a96c69..d28c2ec 100644
--- a/src/views/evaluate/components/viewEvaluateDetail.vue
+++ b/src/views/evaluate/components/viewEvaluateDetail.vue
@@ -4,7 +4,7 @@
             <div class="drawer-title">{{ this.params.data?.taskName || '评优任务详情' }}</div>
         </template>
         <el-collapse v-model="collapseParams.activeNames">
-            <el-collapse-item title="当前任务评优类别" name="1">
+            <el-collapse-item v-if="!type()" title="当前任务评优类别" name="1">
                 <ul class="type-list">
                     <li class="type-item">
                         <div class="title">类别</div>
@@ -26,11 +26,11 @@
                     </li>
                 </ul>
             </el-collapse-item>
-            <el-collapse-item title="第一轮候选结果" name="2">
+            <el-collapse-item v-if="!type()" title="第一轮候选结果" name="2">
                 <firstRoundResult :params="{ data: props.params.data }" />
             </el-collapse-item>
             <el-collapse-item title="最终评优结果" name="3">
-
+                <secondRoundResult :params="{ data: props.params.data }" />
             </el-collapse-item>
         </el-collapse>
     </el-drawer>
@@ -38,7 +38,8 @@
 
 <script setup>
 import firstRoundResult from './firstRoundResult.vue';
-import { reactive } from 'vue';
+import secondRoundResult from './secondRoundResult.vue';
+import { inject, reactive } from 'vue';
 import { getEcList } from '@/api/evaluate/evaluateTask'
 
 const props = defineProps({
@@ -53,6 +54,8 @@
         }
     }
 })
+
+const type = inject('type')
 
 const collapseParams = reactive({
     activeNames: ['1'],
@@ -78,6 +81,7 @@
         collapseParams.categoryEntities = records
     })
     currentTaskParams.data = props.params.data
+    collapseParams.activeNames =  !type() ? ['1'] : ['3']
 }
 
 
diff --git a/src/views/evaluate/evaluateResult.vue b/src/views/evaluate/evaluateResult.vue
index cbf6a7e..2fa8f21 100755
--- a/src/views/evaluate/evaluateResult.vue
+++ b/src/views/evaluate/evaluateResult.vue
@@ -3,11 +3,11 @@
     <avue-tabs :option="taskTypeList" @change="tabChange"></avue-tabs>
     <el-container class="container">
       <el-aside width="250px">
-        <el-input v-model="taskWord" class="search-box" clearable placeholder="请输入任务名称">
+        <!-- <el-input v-model="taskWord" class="search-box" clearable placeholder="请输入任务名称">
           <template #append>
             <el-button icon="el-icon-search"></el-button>
           </template>
-        </el-input>
+        </el-input> -->
         <ul class="aside-box">
           <template v-if="this.taskList.length > 0">
             <li v-for="(item, index) in this.taskList" :key="item.id" :class="{ 'is-active': taskActive === index }"
@@ -34,10 +34,13 @@
       <el-main>
         <template v-if="this.taskList.length > 0">
           <el-collapse v-model="activeNames">
-            <el-collapse-item title="第一轮评优结果" name="1">
+            <el-collapse-item title="当前任务评优类别详情" name="1" v-if="!defaultTaskType">
+              <evaluateTypeResult :params="{ data: taskList[taskActive] }" />
+            </el-collapse-item>
+            <el-collapse-item title="第一轮候选结果" name="2" v-if="!defaultTaskType">
               <firstRoundResult :params="{ data: taskList[taskActive] }" />
             </el-collapse-item>
-            <el-collapse-item title="第二轮评优结果" name="2">
+            <el-collapse-item title="最终评优结果" name="3">
               <secondRoundResult :params="{ data: taskList[taskActive] }" />
             </el-collapse-item>
           </el-collapse>
@@ -52,11 +55,13 @@
 
 <script>
 import { getList } from '@/api/evaluate/evaluateTask'
+import evaluateTypeResult from './components/evaluateTypeResult.vue'
 import firstRoundResult from './components/firstRoundResult.vue'
 import secondRoundResult from './components/secondRoundResult.vue'
 
 export default {
   components: {
+    evaluateTypeResult,
     firstRoundResult,
     secondRoundResult
   },
@@ -106,6 +111,7 @@
     tabChange(value) {
       this.defaultTaskType = value.prop;
       this.getTaskList()
+      this.defaultTaskType ? this.activeNames = ['3'] : this.activeNames = ['1']
     },
     handleActive(index) {
       this.taskActive = index
@@ -113,6 +119,11 @@
   },
   mounted() {
     this.initData()
+  },
+  provide() {
+    return {
+      type: () => this.defaultTaskType
+    }
   }
 }
 </script>

--
Gitblit v1.9.3