From d13cebe7fbadd396e91a989af331df8a8e7b40f8 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Tue, 21 Jan 2025 11:40:42 +0800
Subject: [PATCH] 考核结果查看详情
---
src/views/evaluate/evaluateResult.vue | 382 ++++++++++++++++++++++++------------------------------
1 files changed, 170 insertions(+), 212 deletions(-)
diff --git a/src/views/evaluate/evaluateResult.vue b/src/views/evaluate/evaluateResult.vue
index 3b1828f..477f414 100755
--- a/src/views/evaluate/evaluateResult.vue
+++ b/src/views/evaluate/evaluateResult.vue
@@ -1,256 +1,214 @@
<template>
<basic-container>
<avue-tabs :option="taskTypeList" @change="tabChange"></avue-tabs>
- <avue-crud :option="option" v-model:search="search" v-model:page="page" v-model="form" :table-loading="loading"
- :data="data" :permission="permissionList" :before-open="beforeOpen" ref="crud" @row-update="rowUpdate"
- @row-save="rowSave" @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
- @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
- @refresh-change="refreshChange" @on-load="onLoad">
- <template #referrer="{row}">
- <template v-if="row.voteNum !== 0">
- <referrerPopover :params="row">
- <template #default>
- <el-button type="success" text icon="el-icon-pointer">推荐人预览</el-button>
- </template>
- </referrerPopover>
+ <el-container class="container">
+ <el-aside width="300px">
+ <el-input v-model="taskWord" class="search-box" clearable placeholder="请输入任务名称" @change="searchChange">
+ <template #append>
+ <el-button icon="el-icon-search"></el-button>
+ </template>
+ </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 }"
+ @click="handleActive(index)">
+ <div class="text">
+ <el-icon size="20px">
+ <Document />
+ </el-icon>
+ {{ item.taskName }}
+ </div>
+ </li>
+ </template>
+ <template v-else>
+ <el-empty description="暂无任务" />
+ </template>
+ </ul>
+ <div class="pagination">
+ <el-pagination v-model:current-page="page.current" v-model:page-size="page.size" background :pager-count="5"
+ layout="prev, pager, next" :total="page.total" @current-change="handleCurrentChange" small
+ hide-on-single-page/>
+ </div>
+ </el-aside>
+ <el-main>
+ <template v-if="this.taskList.length > 0">
+ <el-collapse v-model="activeNames">
+ <el-collapse-item title="当前任务评优奖项候选人详情" name="1" v-if="!defaultTaskType">
+ <evaluateTypeResult :params="{ data: taskList[taskActive] }" @initAsideData="initData" />
+ </el-collapse-item>
+ <el-collapse-item name="2" v-if="!defaultTaskType">
+ <template #title>
+ 第一轮候选结果
+ <el-tag
+ style="margin-left: 10px;"
+ :type="status[taskList[taskActive].candidateState].type">
+ 当前状态:{{ status[taskList[taskActive].candidateState].text }}
+ </el-tag>
+ </template>
+ <firstRoundResult :params="{ data: taskList[taskActive] }" />
+ </el-collapse-item>
+ <el-collapse-item name="3">
+ <template #title>
+ 最终评优结果
+ <el-tag
+ style="margin-left: 10px;"
+ :type="status[taskList[taskActive].evaluateState].type">
+ 当前状态:{{ status[taskList[taskActive].evaluateState].text }}
+ </el-tag>
+ </template>
+ <secondRoundResult :params="{ data: taskList[taskActive] }" />
+ </el-collapse-item>
+ </el-collapse>
</template>
<template v-else>
- <el-button type="warning" text icon="el-icon-circle-close">暂无推荐人</el-button>
+ <el-empty description="暂无任务信息" />
</template>
- </template>
- </avue-crud>
+ </el-main>
+ </el-container>
</basic-container>
</template>
<script>
-import { getList, getDetail, add, update, remove } from "@/api/evaluate/evaluateResult";
-import { option, personColumn, sectionColumn } from "@/option/evaluate/evaluateResult";
-import { mapGetters } from "vuex";
-import { exportBlob } from "@/api/common";
-import { getToken } from '@/utils/auth';
-import { downloadXls } from "@/utils/util";
-import { dateNow } from "@/utils/date";
-import NProgress from 'nprogress';
-import 'nprogress/nprogress.css';
-import referrerPopover from './components/referrerPopover.vue'
+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: {
- referrerPopover
+ evaluateTypeResult,
+ firstRoundResult,
+ secondRoundResult
},
data() {
return {
- form: {},
- query: {},
- search: {},
- loading: true,
+ activeNames: ['1'],
+ taskList: [],
+ taskWord: '',
+ taskActive: 0,
page: {
- pageSize: 10,
- currentPage: 1,
- total: 0
+ current: 1,
+ size: 10,
+ total: 20
},
- selectionList: [],
- option: option,
- data: [],
- // 考核结果参数
defaultTaskType: 0,
taskTypeList: {
column: [
{
- label: '个人评优结果',
+ label: '个人评优',
prop: 0,
},
{
- label: '部门评优结果',
+ label: '部门评优',
prop: 1,
},
],
},
+ status: {
+ 0: {
+ text: '未开始',
+ type: 'warning'
+ },
+ 1: {
+ text: '进行中',
+ type: 'success'
+ },
+ 2: {
+ text: '已完成',
+ type: ''
+ },
+ }
+ // firstRounParams: {},
+ // secondRounParams: {}
};
},
- computed: {
- ...mapGetters(["permission"]),
- permissionList() {
- return {
- addBtn: this.validData(this.permission.evaluateResult_add, false),
- viewBtn: this.validData(this.permission.evaluateResult_view, false),
- delBtn: this.validData(this.permission.evaluateResult_delete, false),
- editBtn: this.validData(this.permission.evaluateResult_edit, false)
- };
- },
- ids() {
- let ids = [];
- this.selectionList.forEach(ele => {
- ids.push(ele.id);
- });
- return ids.join(",");
- }
- },
- watch: {
- defaultTaskType: {
- handler(n) {
- this.query = {};
- this.query['type'] = n;
- let params = {
- type: n,
- };
- console.log(option.column.length);
- if (n) {
- this.option.column = sectionColumn
- } else {
- this.option.column = personColumn
- }
- this.page.currentPage = 1;
- this.onLoad(this.page, params);
- },
- immediate: true,
- },
- },
methods: {
- rowSave(row, done, loading) {
- add(row).then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- loading();
- window.console.log(error);
- });
+ initData() {
+ this.getTaskList()
},
- rowUpdate(row, index, done, loading) {
- update(row).then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- loading();
- console.log(error);
- });
- },
- rowDel(row) {
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return remove(row.id);
- })
- .then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- });
- },
- handleDelete() {
- if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
- }
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return remove(this.ids);
- })
- .then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- this.$refs.crud.toggleSelection();
- });
- },
- handleExport() {
- let downloadUrl = `/evaluate/evaluateResult/export-evaluateResult?${this.website.tokenHeader}=${getToken()}`;
- const {
- } = this.query;
- let values = {
- };
- this.$confirm("是否导出数据?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- NProgress.start();
- exportBlob(downloadUrl, values).then(res => {
- downloadXls(res.data, `评优结果${dateNow()}.xlsx`);
- NProgress.done();
- })
- });
- },
- beforeOpen(done, type) {
- if (["edit", "view"].includes(type)) {
- getDetail(this.form.id).then(res => {
- this.form = res.data.data;
- });
- }
- done();
- },
- searchReset() {
- this.query = {};
- this.onLoad(this.page);
- },
- searchChange(params, done) {
- this.query = {
+ getTaskList(params) {
+ this.page.current = 1
+ const { current, size } = this.page
+ const values = {
type: this.defaultTaskType,
...params
- };
- this.page.currentPage = 1;
- this.onLoad(this.page, params);
- done();
+ }
+ getList(current, size, values).then(res => {
+ const result = res.data.data
+ this.page.total = result.total
+ this.taskList = result.records
+ })
},
- selectionChange(list) {
- this.selectionList = list;
+ searchChange() {
+ this.page.current = 1
+ this.getTaskList({ taskName: this.taskWord })
},
- selectionClear() {
- this.selectionList = [];
- this.$refs.crud.toggleSelection();
- },
- 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 {
- } = this.query;
-
- let values = {
- ...this.query,
- ...params
- };
-
- getList(page.currentPage, page.pageSize, values).then(res => {
- const data = res.data.data;
- this.page.total = data.total;
- this.data = data.records;
- this.loading = false;
- this.selectionClear();
- });
+ handleCurrentChange(value) {
+ this.page.current = value
+ this.getTaskList({ taskName: this.taskWord })
},
tabChange(value) {
+ this.taskActive = 0
this.defaultTaskType = value.prop;
+ this.getTaskList()
+ this.defaultTaskType ? this.activeNames = ['3'] : this.activeNames = ['1']
},
+ handleActive(index) {
+ this.taskActive = index
+ }
+ },
+ mounted() {
+ this.initData()
+ },
+ provide() {
+ return {
+ type: () => this.defaultTaskType
+ }
}
-};
+}
</script>
-<style></style>
+<style lang="scss" scoped>
+.container {
+ .el-aside {
+ margin-right: 10px;
+ padding-right: 10px;
+ border-right: 1px solid var(--el-card-border-color);
+
+ .aside-box {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+
+ li {
+ cursor: pointer;
+ padding: 10px 0;
+ margin-top: 10px;
+
+ .text {
+ display: flex;
+ align-items: center;
+ border-left: 3px solid var(--el-color-primary);
+ padding-left: 10px;
+ }
+
+ .el-icon {
+ margin-right: 5px;
+ }
+ }
+ }
+
+ .pagination {
+ margin-top: 10px;
+ display: flex;
+ justify-content: center;
+ }
+ }
+
+}
+
+.is-active {
+ color: var(--el-color-primary);
+ background-color: rgba(var(--el-color-primary-rgb), .1);
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.3