8 files modified
1 files added
| | |
| | | }) |
| | | } |
| | | |
| | | export const getAssessors = (userId) => { |
| | | return request({ |
| | | url: `/assessment/assessmentConfig/list/${userId}`, |
| | | method: 'get', |
| | | // data: row |
| | | }) |
| | | } |
| | | |
| | |
| | | export default { |
| | | height:'auto', |
| | | const option = { |
| | | height: 'auto', |
| | | calcHeight: 30, |
| | | tip: false, |
| | | searchShow: true, |
| | |
| | | viewBtn: true, |
| | | selection: true, |
| | | dialogClickModal: false, |
| | | labelWidth: 130, |
| | | column: [ |
| | | { |
| | | label: "主键", |
| | | prop: "id", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: "租户ID", |
| | | prop: "tenantId", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: "被考核人", |
| | | prop: "userId", |
| | | type: "input", |
| | | }, |
| | | { |
| | | label: "被考核人名称", |
| | | prop: "userName", |
| | | type: "input", |
| | | type: "cascader", |
| | | expandTrigger: 'click', |
| | | dicData: [], |
| | | props: { |
| | | label: 'title', |
| | | value: 'id', |
| | | children: 'children' |
| | | }, |
| | | lazy: true, |
| | | lazyLoad: (node, resolve) => {}, |
| | | change: () => {}, |
| | | emitPath: false, |
| | | showAllLevels: false, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择被考核人', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: "被考核人部门id", |
| | | prop: "deptId", |
| | | type: "input", |
| | | }, |
| | | { |
| | | label: "被考核人部门名称", |
| | | label: "被考核人部门", |
| | | prop: "deptName", |
| | | type: "input", |
| | | disabled: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择考核人部门', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: "被考核人职位名称", |
| | | label: "被考核人职位", |
| | | prop: "postName", |
| | | type: "input", |
| | | disabled: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择被考核人职位', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: "考核人", |
| | | prop: "assessorUserId", |
| | | type: "input", |
| | | }, |
| | | { |
| | | label: "考核人名称", |
| | | prop: "assessorUserName", |
| | | type: "input", |
| | | type: "cascader", |
| | | expandTrigger: 'click', |
| | | dicData: [], |
| | | props: { |
| | | label: 'title', |
| | | value: 'id', |
| | | children: 'children' |
| | | }, |
| | | lazy: true, |
| | | lazyLoad: (node, resolve) => {}, |
| | | emitPath: false, |
| | | showAllLevels: false, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择考核人', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: "考核人部门id", |
| | | prop: "assessorDeptId", |
| | | type: "input", |
| | | }, |
| | | { |
| | | label: "考核人部门名称", |
| | | label: "考核人部门", |
| | | prop: "assessorDeptName", |
| | | type: "input", |
| | | disabled: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择被考核人部门', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: "考核人职位名称", |
| | | label: "考核人职位", |
| | | prop: "assessorPostName", |
| | | type: "input", |
| | | disabled: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择考核人职位', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: "权值", |
| | | prop: "weight", |
| | | type: "input", |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入权值', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: "范围", |
| | | prop: "rangeVal", |
| | | type: "input", |
| | | }, |
| | | { |
| | | label: "创建人", |
| | | prop: "createUser", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: "创建部门", |
| | | prop: "createDept", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: "创建时间", |
| | | prop: "createTime", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: "修改人", |
| | | prop: "updateUser", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: "修改时间", |
| | | prop: "updateTime", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: "状态", |
| | | prop: "status", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: "是否已删除", |
| | | prop: "isDeleted", |
| | | type: "input", |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | hide: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入范围', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | ] |
| | | } |
| | | |
| | | |
| | | export default option |
| | |
| | | <template> |
| | | <basic-container> |
| | | <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"> |
| | | <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 #menu-left> |
| | | <el-button type="danger" |
| | | icon="el-icon-delete" |
| | | plain |
| | | v-if="permission.assessmentConfig_delete" |
| | | @click="handleDelete">删 除 |
| | | <el-button |
| | | type="danger" |
| | | icon="el-icon-delete" |
| | | plain |
| | | v-if="permission.assessmentConfig_delete" |
| | | @click="handleDelete" |
| | | >删 除 |
| | | </el-button> |
| | | <el-button type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | @click="handleExport">导 出 |
| | | <el-button type="success" plain icon="el-icon-download" @click="handleImport"> |
| | | 权重导入 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <el-dialog title="权重数据导入" append-to-body v-model="excelBox" width="555px"> |
| | | <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter"> |
| | | <template #excelTemplate> |
| | | <el-button type="primary" @click="handleTemplate"> |
| | | 点击下载<i class="el-icon-download el-icon--right"></i> |
| | | </el-button> |
| | | </template> |
| | | </avue-form> |
| | | </el-dialog> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import {getList, getDetail, add, update, remove} from "@/api/assessment/assessmentConfig"; |
| | | import option from "@/option/assessment/assessmentConfig"; |
| | | 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 axios from 'axios'; |
| | | import _ from 'lodash' |
| | | import { getList, getDetail, add, update, remove } from '@/api/assessment/assessmentConfig'; |
| | | import option from '@/option/assessment/assessmentConfig'; |
| | | 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 website from '@/config/website'; |
| | | import { getDeptTree, getDeptLazyTree } from '@/api/system/dept'; |
| | | import { getList as getUserList } from '@/api/system/user.js'; |
| | | import { copy } from '@/api/tool/code'; |
| | | |
| | | export default { |
| | | data() { |
| | | export default { |
| | | data() { |
| | | return { |
| | | form: {}, |
| | | query: {}, |
| | | search: {}, |
| | | loading: true, |
| | | excelBox: false, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | selectionList: [], |
| | | option: option, |
| | | data: [], |
| | | excelForm: {}, |
| | | excelOption: { |
| | | submitBtn: false, |
| | | emptyBtn: false, |
| | | column: [ |
| | | { |
| | | label: '模板上传', |
| | | prop: 'excelFile', |
| | | type: 'upload', |
| | | drag: true, |
| | | loadText: '模板上传中,请稍等', |
| | | span: 24, |
| | | propsHttp: { |
| | | res: 'data', |
| | | }, |
| | | tip: '请上传 .xls,.xlsx 标准格式文件', |
| | | action: '/assessment/assessmentConfig/import-assessmentConfig', |
| | | }, |
| | | { |
| | | label: '数据覆盖', |
| | | prop: 'isCovered', |
| | | type: 'switch', |
| | | align: 'center', |
| | | width: 80, |
| | | dicData: [ |
| | | { |
| | | label: '否', |
| | | value: 0, |
| | | }, |
| | | { |
| | | label: '是', |
| | | value: 1, |
| | | }, |
| | | ], |
| | | value: 0, |
| | | slot: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择是否覆盖', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '模板下载', |
| | | prop: 'excelTemplate', |
| | | formslot: true, |
| | | span: 24, |
| | | }, |
| | | ], |
| | | }, |
| | | userList: [], |
| | | }; |
| | | }, |
| | | watch: { |
| | | 'excelForm.isCovered'() { |
| | | if (this.excelForm.isCovered !== '') { |
| | | const column = this.findObject(this.excelOption.column, 'excelFile'); |
| | | column.action = `/assessment/assessmentConfig/import-assessmentConfig?isCovered=${this.excelForm.isCovered}`; |
| | | } |
| | | }, |
| | | 'form.userName': { |
| | | handler(newVal) { |
| | | if (!newVal || newVal === void 0 || newVal === '' || newVal.length === 0) return; |
| | | const data = this.userList.find(ele => ele.id === newVal); |
| | | this.form.deptName = data.deptName; |
| | | this.form.postName = data.postName; |
| | | }, |
| | | deep: true, |
| | | }, |
| | | 'form.assessorUserName': { |
| | | handler(newVal) { |
| | | if (!newVal || newVal === void 0 || newVal === '' || newVal.length === 0) return; |
| | | const data = this.userList.find(ele => ele.id === newVal); |
| | | this.form.assessorDeptName = data.deptName; |
| | | this.form.assessorPostName = data.postName; |
| | | }, |
| | | deep: true, |
| | | }, |
| | | }, |
| | | computed: { |
| | | ...mapGetters(['permission']), |
| | | permissionList() { |
| | | return { |
| | | form: {}, |
| | | query: {}, |
| | | search: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0 |
| | | }, |
| | | selectionList: [], |
| | | option: option, |
| | | data: [] |
| | | addBtn: this.validData(this.permission.assessmentConfig_add, false), |
| | | viewBtn: this.validData(this.permission.assessmentConfig_view, false), |
| | | delBtn: this.validData(this.permission.assessmentConfig_delete, false), |
| | | editBtn: this.validData(this.permission.assessmentConfig_edit, false), |
| | | }; |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["permission"]), |
| | | permissionList() { |
| | | return { |
| | | addBtn: this.validData(this.permission.assessmentConfig_add, false), |
| | | viewBtn: this.validData(this.permission.assessmentConfig_view, false), |
| | | delBtn: this.validData(this.permission.assessmentConfig_delete, false), |
| | | editBtn: this.validData(this.permission.assessmentConfig_edit, false) |
| | | }; |
| | | }, |
| | | ids() { |
| | | let ids = []; |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id); |
| | | }); |
| | | return ids.join(","); |
| | | } |
| | | ids() { |
| | | let ids = []; |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id); |
| | | }); |
| | | return ids.join(','); |
| | | }, |
| | | methods: { |
| | | rowSave(row, done, loading) { |
| | | add(row).then(() => { |
| | | }, |
| | | methods: { |
| | | rowSave(row, done, loading) { |
| | | const { userName, assessorUserName} = row |
| | | const usernameData = this.userList.find(ele => ele.id === userName); |
| | | const assessorUserNameData = this.userList.find(ele => ele.id === assessorUserName); |
| | | const copyRow = _.cloneDeep(row) |
| | | copyRow.userId = usernameData.id; |
| | | copyRow.userName = usernameData.name; |
| | | copyRow.deptId = usernameData.deptId; |
| | | copyRow.assessorUserId = assessorUserNameData.id; |
| | | copyRow.assessorDeptId = usernameData.deptId; |
| | | copyRow.assessorUserName = assessorUserNameData.name; |
| | | add(copyRow).then( |
| | | () => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | done(); |
| | | }, error => { |
| | | }, |
| | | error => { |
| | | loading(); |
| | | window.console.log(error); |
| | | }); |
| | | }, |
| | | rowUpdate(row, index, done, loading) { |
| | | update(row).then(() => { |
| | | } |
| | | ); |
| | | }, |
| | | rowUpdate(row, index, done, loading) { |
| | | const { userName, assessorUserName} = row |
| | | const usernameData = this.userList.find(ele => ele.id === userName); |
| | | const assessorUserNameData = this.userList.find(ele => ele.id === assessorUserName); |
| | | const copyRow = _.cloneDeep(row) |
| | | copyRow.userId = usernameData.id; |
| | | copyRow.userName = usernameData.name; |
| | | copyRow.deptId = usernameData.deptId; |
| | | copyRow.assessorUserId = assessorUserNameData.id; |
| | | copyRow.assessorDeptId = usernameData.deptId; |
| | | copyRow.assessorUserName = assessorUserNameData.name; |
| | | update(copyRow).then( |
| | | () => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | done(); |
| | | }, error => { |
| | | }, |
| | | 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" |
| | | ); |
| | | }, |
| | | rowDel(row) { |
| | | this.$confirm('确定将选择数据删除?', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id); |
| | | }) |
| | | .then(() => { |
| | | return remove(this.ids); |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }); |
| | | this.$refs.crud.toggleSelection(); |
| | | .then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | }, |
| | | handleExport() { |
| | | let downloadUrl = `/blade-assessmentConfig/assessmentConfig/export-assessmentConfig?${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; |
| | | }, |
| | | 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: '操作成功!', |
| | | }); |
| | | } |
| | | done(); |
| | | }, |
| | | searchReset() { |
| | | this.query = {}; |
| | | this.onLoad(this.page); |
| | | }, |
| | | searchChange(params, done) { |
| | | this.query = params; |
| | | this.page.currentPage = 1; |
| | | this.onLoad(this.page, params); |
| | | done(); |
| | | }, |
| | | selectionChange(list) { |
| | | this.selectionList = list; |
| | | }, |
| | | 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 = { |
| | | }; |
| | | |
| | | 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(); |
| | | this.$refs.crud.toggleSelection(); |
| | | }); |
| | | }, |
| | | handleExport() { |
| | | let downloadUrl = `/blade-assessmentConfig/assessmentConfig/export-assessmentConfig?${ |
| | | 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 = params; |
| | | this.page.currentPage = 1; |
| | | this.onLoad(this.page, params); |
| | | done(); |
| | | }, |
| | | selectionChange(list) { |
| | | this.selectionList = list; |
| | | }, |
| | | 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 = {}; |
| | | |
| | | 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(); |
| | | }); |
| | | }, |
| | | handleImport() { |
| | | this.excelBox = true; |
| | | }, |
| | | uploadAfter(res, done, loading, column) { |
| | | window.console.log(column); |
| | | this.excelBox = false; |
| | | this.refreshChange(); |
| | | done(); |
| | | }, |
| | | handleTemplate() { |
| | | const url = window.location.origin + '/excel/中图员工考核导入模板表.xlsx'; |
| | | axios({ |
| | | url: url, |
| | | method: 'get', |
| | | responseType: 'blob', |
| | | }).then(res => { |
| | | downloadXls(res.data, `中图员工考核导入模板表.xlsx`); |
| | | }); |
| | | }, |
| | | initData() { |
| | | // 获取所属部门数据 |
| | | |
| | | getDeptTree(website.tenantId).then(res => { |
| | | const column = this.option.column; |
| | | const userNameColumn = column.find(item => item.prop === 'userName'); |
| | | const assessorUserName = column.find(item => item.prop === 'assessorUserName'); |
| | | userNameColumn.dicData = res.data.data; |
| | | userNameColumn.lazyLoad = lazyLoad; |
| | | assessorUserName.dicData = res.data.data; |
| | | assessorUserName.lazyLoad = lazyLoad; |
| | | }); |
| | | |
| | | const lazyLoad = (node, resolve) => { |
| | | const column = this.option.column; |
| | | const userNameColumn = column.find(item => item.prop === 'userName'); |
| | | const assessorUserName = column.find(item => item.prop === 'assessorUserName'); |
| | | let stop_level = 2; |
| | | let level = node.level; |
| | | let data = node.data || {}; |
| | | let code = data.code; |
| | | let list = []; |
| | | let callback = () => { |
| | | resolve( |
| | | (list || []).map(ele => { |
| | | return Object.assign(ele, { |
| | | leaf: level >= stop_level, |
| | | }); |
| | | }) |
| | | ); |
| | | }; |
| | | if (level === 2) { |
| | | const deptId = node.value; |
| | | getUserList( |
| | | 1, |
| | | 1000, |
| | | { |
| | | userType: 2, |
| | | }, |
| | | deptId |
| | | ).then(userRes => { |
| | | const userData = userRes.data.data; |
| | | if (userData.records.length === 0) { |
| | | this.$message.warning('当前部门人数为空,请选择其他部门!!'); |
| | | resolve([]); |
| | | callback(); |
| | | } else { |
| | | const records = userData.records.map(item => { |
| | | item.title = item.name; |
| | | return item; |
| | | }); |
| | | list = records; |
| | | records.forEach(item => { |
| | | const is = this.userList.findIndex(v => item.id === v.id); |
| | | if (is == -1) { |
| | | this.userList.push(item); |
| | | } |
| | | }); |
| | | callback(); |
| | | } |
| | | }); |
| | | } |
| | | }; |
| | | }, |
| | | }, |
| | | mounted() { |
| | | this.initData(); |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style> |
| | | </style> |
| | | <style></style> |
| | |
| | | <template> |
| | | <basic-container> |
| | | <template v-if="curIndex === 0"> |
| | | <avue-tabs ref="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 #isAssessmentOk="{ row }"> |
| | | <el-tag :type="setTaskState(row.isAssessmentOk).type" effect="dark"> |
| | | {{ setTaskState(row.isAssessmentOk).text }} |
| | | </el-tag> |
| | | </template> |
| | | <template #menu-left> |
| | | <el-button type="danger" icon="el-icon-delete" plain v-if="permission.assessmentTask_delete" |
| | | @click="handleDelete"> |
| | | 删除 |
| | | </el-button> |
| | | <el-button |
| | | type="success" |
| | | plain |
| | | icon="el-icon-upload" |
| | | @click="handleImport" |
| | | >权重导入 |
| | | </el-button> |
| | | <!-- <el-button type="warning" plain icon="el-icon-download" @click="handleExport"> |
| | | <basic-container> |
| | | <template v-if="curIndex === 0"> |
| | | <avue-tabs ref="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 #isAssessmentOk="{ row }"> |
| | | <el-tag :type="setTaskState(row.isAssessmentOk).type" effect="dark"> |
| | | {{ setTaskState(row.isAssessmentOk).text }} |
| | | </el-tag> |
| | | </template> |
| | | <template #menu-left> |
| | | <el-button |
| | | type="danger" |
| | | icon="el-icon-delete" |
| | | plain |
| | | v-if="permission.assessmentTask_delete" |
| | | @click="handleDelete" |
| | | > |
| | | 删除 |
| | | </el-button> |
| | | <!-- <el-button type="warning" plain icon="el-icon-download" @click="handleExport"> |
| | | 导出 |
| | | </el-button> --> |
| | | </template> |
| | | <template #menu="{ row, index, size }"> |
| | | <el-button type="primary" icon="el-icon-setting" text @click="handleTaskSetting(row)"> |
| | | 考核设置 |
| | | </el-button> |
| | | <el-button type="primary" icon="el-icon-view" text @click="handleAssessorDetails(row)"> |
| | | 考核结果 |
| | | </el-button> |
| | | <el-button type="primary" icon="el-icon-view" text @click="handleAssessorList(row)"> |
| | | 考核详情 |
| | | </el-button> |
| | | <el-button type="success" icon="el-icon-edit" text v-if="row.isAssessmentOk === -1" |
| | | @click="$refs.crud.rowEdit(row,index)"> |
| | | 编辑 |
| | | </el-button> |
| | | <!-- <el-button type="primary" icon="el-icon-view" text @click="handleTaskResult(row)"> |
| | | </template> |
| | | <template #menu="{ row, index, size }"> |
| | | <el-button type="primary" icon="el-icon-setting" text @click="handleTaskSetting(row)"> |
| | | 考核设置 |
| | | </el-button> |
| | | <el-button type="primary" icon="el-icon-view" text @click="handleAssessorDetails(row)"> |
| | | 考核结果 |
| | | </el-button> |
| | | <el-button type="primary" icon="el-icon-view" text @click="handleAssessorList(row)"> |
| | | 考核详情 |
| | | </el-button> |
| | | <el-button |
| | | type="success" |
| | | icon="el-icon-edit" |
| | | text |
| | | v-if="row.isAssessmentOk === -1" |
| | | @click="$refs.crud.rowEdit(row, index)" |
| | | > |
| | | 编辑 |
| | | </el-button> |
| | | <!-- <el-button type="primary" icon="el-icon-view" text @click="handleTaskResult(row)"> |
| | | 考核结果 |
| | | </el-button> --> |
| | | <el-button type="danger" icon="el-icon-delete" text @click="rowDel(row)"> |
| | | 删除 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <el-button type="danger" icon="el-icon-delete" text @click="rowDel(row)"> |
| | | 删除 |
| | | </el-button> |
| | | </template> |
| | | <template v-else-if="curIndex === 1"> |
| | | <assessmentTaskSetting :params="resultParams" @changeIs="changeIs"/> |
| | | </template> |
| | | <!-- <template v-else> |
| | | </avue-crud> |
| | | </template> |
| | | <template v-else-if="curIndex === 1"> |
| | | <assessmentTaskSetting :params="resultParams" @changeIs="changeIs" /> |
| | | </template> |
| | | <!-- <template v-else> |
| | | <taskResult :params="resultParams" @changeIs="changeIs" /> |
| | | </template> --> |
| | | <!-- 考核结果详情 --> |
| | | <assessorDetails :params="detailsParams"/> |
| | | <!-- 考核人员详情 --> |
| | | <assessorDialog :params="assessorDialogParams"/> |
| | | <el-dialog title="权重数据导入" append-to-body v-model="excelBox" width="555px"> |
| | | <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter"> |
| | | <template #excelTemplate> |
| | | <el-button type="primary" @click="handleTemplate"> |
| | | 点击下载<i class="el-icon-download el-icon--right"></i> |
| | | </el-button> |
| | | </template> |
| | | </avue-form> |
| | | </el-dialog> |
| | | </basic-container> |
| | | <!-- 考核结果详情 --> |
| | | <assessorDetails :params="detailsParams" /> |
| | | <!-- 考核人员详情 --> |
| | | <assessorDialog :params="assessorDialogParams" /> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import {getList, getDetail, add, update, remove} from "@/api/assessment/assessmentTask"; |
| | | import option from "@/option/assessmentTask/assessmentTask"; |
| | | 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 { getList, getDetail, add, update, remove } from '@/api/assessment/assessmentTask'; |
| | | import option from '@/option/assessmentTask/assessmentTask'; |
| | | 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 taskResult from './components/taskResult.vue' |
| | | import addTaskDialog from "./components/addTaskDialog.vue"; |
| | | import assessmentTaskSetting from "./components/assessmentTaskSetting.vue"; |
| | | import assessorDetails from "./components/assessorDetails.vue"; |
| | | import assessorDialog from "./components/assessorDialog.vue"; |
| | | import taskResult from './components/taskResult.vue'; |
| | | import addTaskDialog from './components/addTaskDialog.vue'; |
| | | import assessmentTaskSetting from './components/assessmentTaskSetting.vue'; |
| | | import assessorDetails from './components/assessorDetails.vue'; |
| | | import assessorDialog from './components/assessorDialog.vue'; |
| | | |
| | | export default { |
| | | components: { |
| | | taskResult, |
| | | addTaskDialog, |
| | | assessmentTaskSetting, |
| | | assessorDetails, |
| | | assessorDialog |
| | | }, |
| | | data() { |
| | | return { |
| | | curIndex: 0, |
| | | form: {}, |
| | | query: {}, |
| | | search: {}, |
| | | loading: true, |
| | | excelBox: false, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0 |
| | | }, |
| | | selectionList: [], |
| | | option: option, |
| | | data: [], |
| | | // 考核结果参数 |
| | | resultParams: {}, |
| | | defaultTaskType: 0, |
| | | taskTypeList: { |
| | | column: [ |
| | | { |
| | | label: '个人考核任务', |
| | | prop: 0 |
| | | }, |
| | | { |
| | | label: '部门考核任务', |
| | | prop: 1 |
| | | } |
| | | ] |
| | | }, |
| | | detailsParams: {}, |
| | | assessorDialogParams: {}, |
| | | excelForm: {}, |
| | | excelOption: { |
| | | submitBtn: false, |
| | | emptyBtn: false, |
| | | column: [ |
| | | { |
| | | label: '模板上传', |
| | | prop: 'excelFile', |
| | | type: 'upload', |
| | | drag: true, |
| | | loadText: '模板上传中,请稍等', |
| | | span: 24, |
| | | propsHttp: { |
| | | res: 'data', |
| | | }, |
| | | tip: '请上传 .xls,.xlsx 标准格式文件', |
| | | action: '/assessment/assessmentConfig/import-assessmentConfig', |
| | | }, |
| | | { |
| | | label: '数据覆盖', |
| | | prop: 'isCovered', |
| | | type: 'switch', |
| | | align: 'center', |
| | | width: 80, |
| | | dicData: [ |
| | | { |
| | | label: '否', |
| | | value: 0, |
| | | }, |
| | | { |
| | | label: '是', |
| | | value: 1, |
| | | }, |
| | | ], |
| | | value: 0, |
| | | slot: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择是否覆盖', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '模板下载', |
| | | prop: 'excelTemplate', |
| | | formslot: true, |
| | | span: 24, |
| | | }, |
| | | ], |
| | | }, |
| | | components: { |
| | | taskResult, |
| | | addTaskDialog, |
| | | assessmentTaskSetting, |
| | | assessorDetails, |
| | | assessorDialog, |
| | | }, |
| | | data() { |
| | | return { |
| | | curIndex: 0, |
| | | form: {}, |
| | | query: {}, |
| | | search: {}, |
| | | loading: true, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | selectionList: [], |
| | | option: option, |
| | | data: [], |
| | | // 考核结果参数 |
| | | resultParams: {}, |
| | | defaultTaskType: 0, |
| | | taskTypeList: { |
| | | column: [ |
| | | { |
| | | label: '个人考核任务', |
| | | prop: 0, |
| | | }, |
| | | { |
| | | label: '部门考核任务', |
| | | prop: 1, |
| | | }, |
| | | ], |
| | | }, |
| | | detailsParams: {}, |
| | | assessorDialogParams: {}, |
| | | }; |
| | | }, |
| | | watch: { |
| | | |
| | | defaultTaskType: { |
| | | handler(n) { |
| | | this.query = {}; |
| | | this.query['type'] = n; |
| | | let params = { |
| | | type: n, |
| | | }; |
| | | // 设置默认值 |
| | | const column = this.option.column; |
| | | column.some(item => { |
| | | if (item.prop === 'type') { |
| | | item.value = n; |
| | | return true; |
| | | } |
| | | }); |
| | | this.page.currentPage = 1; |
| | | this.onLoad(this.page, params); |
| | | }, |
| | | immediate: true, |
| | | }, |
| | | watch: { |
| | | 'excelForm.isCovered'() { |
| | | if (this.excelForm.isCovered !== '') { |
| | | const column = this.findObject(this.excelOption.column, 'excelFile'); |
| | | column.action = `/assessment/assessmentConfig/import-assessmentConfig?isCovered=${this.excelForm.isCovered}`; |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters(['permission']), |
| | | permissionList() { |
| | | return { |
| | | addBtn: this.validData(this.permission.assessmentTask_add, false), |
| | | viewBtn: this.validData(this.permission.assessmentTask_view, false), |
| | | delBtn: this.validData(this.permission.assessmentTask_delete, false), |
| | | editBtn: this.validData(this.permission.assessmentTask_edit, false), |
| | | }; |
| | | }, |
| | | ids() { |
| | | let ids = []; |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id); |
| | | }); |
| | | return ids.join(','); |
| | | }, |
| | | }, |
| | | provide() { |
| | | return { |
| | | type: () => this.defaultTaskType, |
| | | }; |
| | | }, |
| | | methods: { |
| | | handleTaskSetting(row) { |
| | | this.curIndex = 1; |
| | | this.resultParams = row; |
| | | this.resultParams.type = this.defaultTaskType; |
| | | }, |
| | | // handleTaskResult(row) { |
| | | // this.curIndex = 2; |
| | | // this.resultParams = row |
| | | // this.resultParams.type = this.defaultTaskType |
| | | // }, |
| | | changeIs(num) { |
| | | this.curIndex = num; |
| | | this.$nextTick(() => { |
| | | this.$refs.tabs.active = this.defaultTaskType.toString(); |
| | | }); |
| | | }, |
| | | rowSave(row, done, loading) { |
| | | const { startTime, endTime } = row; |
| | | const startDate = new Date(startTime).getTime(); |
| | | const endDate = new Date(endTime).getTime(); |
| | | if (startDate >= endDate) { |
| | | this.$message.warning('结束时间不可小于或等于开始时间'); |
| | | loading(); |
| | | return; |
| | | } |
| | | add(row).then( |
| | | () => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | done(); |
| | | }, |
| | | defaultTaskType: { |
| | | handler(n) { |
| | | this.query = {} |
| | | this.query['type'] = n |
| | | let params = { |
| | | type: n |
| | | } |
| | | // 设置默认值 |
| | | const column = this.option.column |
| | | column.some(item => { |
| | | if (item.prop === 'type') { |
| | | item.value = n |
| | | return true |
| | | } |
| | | }) |
| | | this.page.currentPage = 1; |
| | | this.onLoad(this.page, params); |
| | | }, |
| | | immediate: true, |
| | | error => { |
| | | loading(); |
| | | window.console.log(error); |
| | | } |
| | | ); |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["permission"]), |
| | | permissionList() { |
| | | return { |
| | | addBtn: this.validData(this.permission.assessmentTask_add, false), |
| | | viewBtn: this.validData(this.permission.assessmentTask_view, false), |
| | | delBtn: this.validData(this.permission.assessmentTask_delete, false), |
| | | editBtn: this.validData(this.permission.assessmentTask_edit, false) |
| | | }; |
| | | rowUpdate(row, index, done, loading) { |
| | | update(row).then( |
| | | () => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | done(); |
| | | }, |
| | | ids() { |
| | | let ids = []; |
| | | this.selectionList.forEach(ele => { |
| | | ids.push(ele.id); |
| | | }); |
| | | return ids.join(","); |
| | | error => { |
| | | loading(); |
| | | console.log(error); |
| | | } |
| | | ); |
| | | }, |
| | | provide() { |
| | | return { |
| | | type: () => this.defaultTaskType |
| | | } |
| | | rowDel(row) { |
| | | this.$confirm('确定将选择数据删除?', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id); |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | }); |
| | | }, |
| | | methods: { |
| | | handleTaskSetting(row) { |
| | | this.curIndex = 1; |
| | | this.resultParams = row |
| | | this.resultParams.type = this.defaultTaskType |
| | | }, |
| | | // handleTaskResult(row) { |
| | | // this.curIndex = 2; |
| | | // this.resultParams = row |
| | | // this.resultParams.type = this.defaultTaskType |
| | | // }, |
| | | changeIs(num) { |
| | | this.curIndex = num |
| | | this.$nextTick(() => { |
| | | this.$refs.tabs.active = this.defaultTaskType.toString() |
| | | }) |
| | | }, |
| | | rowSave(row, done, loading) { |
| | | const {startTime, endTime} = row |
| | | const startDate = new Date(startTime).getTime() |
| | | const endDate = new Date(endTime).getTime() |
| | | if (startDate >= endDate) { |
| | | this.$message.warning('结束时间不可小于或等于开始时间') |
| | | loading() |
| | | return |
| | | } |
| | | add(row).then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }); |
| | | done(); |
| | | }, error => { |
| | | loading(); |
| | | window.console.log(error); |
| | | }); |
| | | }, |
| | | 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 = `/assessmentTask/assessmentTask/export-assessmentTask?${this.website.tokenHeader}=${getToken()}`; |
| | | const {} = this.query; |
| | | let values = { |
| | | ...this.query |
| | | }; |
| | | 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 (type === 'add') { |
| | | this.form.assessmentNo = new Date().getFullYear() + '-' + (Number(this.page.total) + 1) |
| | | } |
| | | if (["edit", "view"].includes(type)) { |
| | | getDetail(this.form.id).then(res => { |
| | | this.form = res.data.data; |
| | | }); |
| | | } |
| | | done(); |
| | | }, |
| | | searchReset() { |
| | | this.query = {}; |
| | | this.onLoad(this.page, {type: this.defaultTaskType}); |
| | | }, |
| | | searchChange(params, done) { |
| | | params.type = this.defaultTaskType |
| | | this.query = params; |
| | | this.page.currentPage = 1; |
| | | this.onLoad(this.page, params); |
| | | done(); |
| | | }, |
| | | selectionChange(list) { |
| | | this.selectionList = list; |
| | | }, |
| | | 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; |
| | | 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 = `/assessmentTask/assessmentTask/export-assessmentTask?${ |
| | | this.website.tokenHeader |
| | | }=${getToken()}`; |
| | | const {} = this.query; |
| | | let values = { |
| | | ...this.query, |
| | | }; |
| | | 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 (type === 'add') { |
| | | this.form.assessmentNo = new Date().getFullYear() + '-' + (Number(this.page.total) + 1); |
| | | } |
| | | if (['edit', 'view'].includes(type)) { |
| | | getDetail(this.form.id).then(res => { |
| | | this.form = res.data.data; |
| | | }); |
| | | } |
| | | done(); |
| | | }, |
| | | searchReset() { |
| | | this.query = {}; |
| | | this.onLoad(this.page, { type: this.defaultTaskType }); |
| | | }, |
| | | searchChange(params, done) { |
| | | params.type = this.defaultTaskType; |
| | | this.query = params; |
| | | this.page.currentPage = 1; |
| | | this.onLoad(this.page, params); |
| | | done(); |
| | | }, |
| | | selectionChange(list) { |
| | | this.selectionList = list; |
| | | }, |
| | | 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; |
| | | const {} = this.query; |
| | | |
| | | let values = { |
| | | ...this.query, |
| | | ...params |
| | | }; |
| | | 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(); |
| | | }); |
| | | 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(); |
| | | }); |
| | | }, |
| | | tabChange(value) { |
| | | this.defaultTaskType = value.prop; |
| | | }, |
| | | setTaskState(state) { |
| | | const status = { |
| | | '-1': { |
| | | text: '未开始', |
| | | type: 'warning', |
| | | }, |
| | | tabChange(value) { |
| | | this.defaultTaskType = value.prop |
| | | 0: { |
| | | text: '进行中', |
| | | type: '', |
| | | }, |
| | | setTaskState(state) { |
| | | const status = { |
| | | '-1': { |
| | | text: '未开始', |
| | | type: 'warning' |
| | | }, |
| | | '0': { |
| | | text: '进行中', |
| | | type: '' |
| | | }, |
| | | '1': { |
| | | text: '已完成', |
| | | type: 'success' |
| | | }, |
| | | } |
| | | return status[state] |
| | | 1: { |
| | | text: '已完成', |
| | | type: 'success', |
| | | }, |
| | | handleAssessorDetails(row) { |
| | | this.detailsParams = { |
| | | visible: true, |
| | | data: row |
| | | } |
| | | }, |
| | | handleAssessorList(row) { |
| | | this.assessorDialogParams = { |
| | | visible: true, |
| | | data: row |
| | | } |
| | | }, |
| | | handleImport() { |
| | | this.excelBox = true; |
| | | }, |
| | | uploadAfter(res, done, loading, column) { |
| | | window.console.log(column); |
| | | this.excelBox = false; |
| | | this.refreshChange(); |
| | | done(); |
| | | }, |
| | | handleTemplate() { |
| | | // 本地资源 |
| | | }, |
| | | } |
| | | }; |
| | | return status[state]; |
| | | }, |
| | | handleAssessorDetails(row) { |
| | | this.detailsParams = { |
| | | visible: true, |
| | | data: row, |
| | | }; |
| | | }, |
| | | handleAssessorList(row) { |
| | | this.assessorDialogParams = { |
| | | visible: true, |
| | | data: row, |
| | | }; |
| | | }, |
| | | handleTemplate() { |
| | | // 本地资源 |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | |
| | | style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="范围" prop="rangeVal"> |
| | | <el-input v-model="form.rangeVal" :placeholder="`请输入范围`" |
| | | style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | |
| | | deptId: '', |
| | | deptName: '', |
| | | postName: '', |
| | | weight: '' |
| | | weight: '', |
| | | rangeVal: '' |
| | | }) |
| | | |
| | | const isLoading = ref(true) |
| | |
| | | validator: weightValidator, |
| | | trigger: 'click', |
| | | } |
| | | ], |
| | | rangeVal: [ |
| | | { |
| | | required: true, |
| | | message: '请输入范围', |
| | | trigger: 'click', |
| | | } |
| | | ] |
| | | }) |
| | | |
| | |
| | | deptId: '', |
| | | deptName: '', |
| | | postName: '', |
| | | weight: 0 |
| | | weight: 0, |
| | | rangeVal: '' |
| | | }) |
| | | |
| | | |
| | |
| | | currentDeptId.value = id |
| | | const userList = await initUserList(id) |
| | | userSelectOption.value = userList |
| | | if (userList.length <= 0) ElMessage.warning('当前部门人员为空,请选择其他部门!!') |
| | | } |
| | | |
| | | // 级联配置 |
| | |
| | | formRef.value.validate(valid => { |
| | | if (!valid) return ElMessage.error('添加候选人失败') |
| | | requestParams.weight = form.weight |
| | | requestParams.rangeVal = form.rangeVal |
| | | addAssessorList(requestParams).then(res => { |
| | | ElMessage.success('添加候选人成功') |
| | | props.dialogParams.visible = false |
| | |
| | | if (!val) return |
| | | const { id } = props.dialogParams.taskParams |
| | | requestParams.assessmentSetId = id |
| | | console.log(props.dialogParams.weightRange); |
| | | // console.log(props.dialogParams.weightRange); |
| | | weightRange.value = props.dialogParams.weightRange |
| | | }, { |
| | | deep: true |
| | |
| | | ...params, |
| | | assessmentTaskId: id |
| | | }; |
| | | console.log(values); |
| | | this.data = [] |
| | | getList(page.currentPage, page.pageSize, values).then(res => { |
| | | const data = res.data.data; |
| | |
| | | @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"> |
| | | <template #menu-left> |
| | | <el-button type="primary" icon="el-icon-plus" @click="rowSave">添加考核人</el-button> |
| | | <el-button type="primary" icon="el-icon-plus" @click="configDialogShow = true">导入权重配置中的数据</el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <add-weight :dialogParams="dialogParams" @refresh="onLoad"></add-weight> |
| | | <el-dialog title="权重配置数据" v-model="configDialogShow" @open="configDialogOpen"> |
| | | <el-table v-loading="addLoading" :element-loading-text="addTipsText" :data="configUserList" @selection-change="handleSelectionChange" style="width: 100%" border |
| | | max-height="700" class="custom-table"> |
| | | <el-table-column type="selection" width="38" /> |
| | | <el-table-column prop="assessorUserName" label="考核人姓名" /> |
| | | <el-table-column prop="assessorPostName" label="考核人职位" /> |
| | | <el-table-column prop="assessorDeptName" label="考核人部门" /> |
| | | <el-table-column prop="weight" label="权重" /> |
| | | <el-table-column prop="rangeVal" label="范围" /> |
| | | </el-table> |
| | | <template #footer> |
| | | <el-button type="primary" icon="el-icon-circle-check" @click="addConfigUsers">确认添加</el-button> |
| | | <el-button icon="el-icon-close" @click="configDialogShow = false">取消</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | |
| | | <script> |
| | | import { getAssessorList, getAssessorDetail, removeAssessor, updateAssessor } from '@/api/assessment/assessmentSet.js' |
| | | import addWeight from './addWeight.vue' |
| | | import { |
| | | getAssessorList, |
| | | getAssessorDetail, |
| | | removeAssessor, |
| | | updateAssessor, |
| | | } from '@/api/assessment/assessmentSet.js'; |
| | | import addWeight from './addWeight.vue'; |
| | | import { getAssessors as getExportExcelData } from '@/api/assessment/assessmentConfig'; |
| | | import { addAssessorList } from '@/api/assessment/assessmentSet'; |
| | | |
| | | export default { |
| | | props: { |
| | | params: { |
| | | type: Object, |
| | | default() { |
| | | return {} |
| | | } |
| | | } |
| | | return {}; |
| | | }, |
| | | }, |
| | | }, |
| | | components: { |
| | | addWeight |
| | | addWeight, |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | labelWidth: 120, |
| | | column: [ |
| | | { |
| | | label: "考核人", |
| | | prop: "userName", |
| | | type: "select", |
| | | label: '考核人', |
| | | prop: 'userName', |
| | | type: 'select', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | |
| | | ], |
| | | }, |
| | | { |
| | | label: "考核人部门", |
| | | prop: "deptName", |
| | | type: "input", |
| | | label: '考核人部门', |
| | | prop: 'deptName', |
| | | type: 'input', |
| | | disabled: true, |
| | | rules: [ |
| | | { |
| | |
| | | ], |
| | | }, |
| | | { |
| | | label: "考核人职务", |
| | | prop: "postName", |
| | | type: "input", |
| | | label: '考核人职务', |
| | | prop: 'postName', |
| | | type: 'input', |
| | | disabled: true, |
| | | // hide: true, |
| | | rules: [ |
| | |
| | | ], |
| | | }, |
| | | { |
| | | label: "权值", |
| | | prop: "weight", |
| | | type: "input", |
| | | label: '权值', |
| | | prop: 'weight', |
| | | type: 'input', |
| | | rules: [ |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | if (value === '') { |
| | | callback(new Error('请输入权值')) |
| | | callback(new Error('请输入权值')); |
| | | } else { |
| | | if (value > this.weightRange) { |
| | | callback(new Error('输入的权值不可超过' + this.weightRange)) |
| | | callback(new Error('输入的权值不可超过' + this.weightRange)); |
| | | } else { |
| | | callback() |
| | | callback(); |
| | | } |
| | | } |
| | | }, |
| | |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '范围', |
| | | prop: 'rangeVal', |
| | | type: 'input', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请填写范围', |
| | | trigger: 'click', |
| | | }, |
| | | ], |
| | | } |
| | | ] |
| | | ], |
| | | }, |
| | | page: { |
| | | pageSize: 10, |
| | |
| | | }, |
| | | selectList: [], |
| | | weightRange: 100, |
| | | dialogParams: {} |
| | | } |
| | | dialogParams: {}, |
| | | configDialogShow: false, |
| | | configUserList: [], |
| | | checkedUsers: [], |
| | | addLoading: false, |
| | | addTipsText: '' |
| | | }; |
| | | }, |
| | | watch: { |
| | | }, |
| | | watch: {}, |
| | | methods: { |
| | | back() { |
| | | this.$emit('changeIs', true) |
| | | this.$emit('changeIs', true); |
| | | }, |
| | | rowSave() { |
| | | this.dialogParams = { |
| | | visible: true, |
| | | isDept: false, |
| | | taskParams: this.params, |
| | | weightRange: this.weightRange |
| | | } |
| | | weightRange: this.weightRange, |
| | | }; |
| | | }, |
| | | rowUpdate(row, index, done, loading) { |
| | | updateAssessor(row).then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | }); |
| | | done(); |
| | | }, error => { |
| | | loading(); |
| | | console.log(error); |
| | | }); |
| | | updateAssessor(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" |
| | | this.$confirm('确定将选择数据删除?', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | }) |
| | | .then(() => { |
| | | // return remove(row.id); |
| | | return removeAssessor(row.id) |
| | | return removeAssessor(row.id); |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | }); |
| | | }, |
| | | handleDelete() { |
| | | if (this.selectionList.length === 0) { |
| | | this.$message.warning("请选择至少一条数据"); |
| | | this.$message.warning('请选择至少一条数据'); |
| | | return; |
| | | } |
| | | this.$confirm("确定将选择数据删除?", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | this.$confirm('确定将选择数据删除?', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | }) |
| | | .then(() => { |
| | | // return remove(this.ids); |
| | | return removeAssessor(this.ids) |
| | | return removeAssessor(this.ids); |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "操作成功!" |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | this.$refs.crud.toggleSelection(); |
| | | }); |
| | | }, |
| | | handleExport() { |
| | | let downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${this.website.tokenHeader}=${getToken()}`; |
| | | const { |
| | | } = this.query; |
| | | let values = { |
| | | }; |
| | | this.$confirm("是否导出数据?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | let downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${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)) { |
| | | if (['edit', 'view'].includes(type)) { |
| | | getAssessorDetail(this.form.id).then(res => { |
| | | this.form = res.data.data; |
| | | }); |
| | | if (type === "edit") { |
| | | |
| | | this.weightRange += this.form.weight |
| | | this.defaults.weight.placeholder = `请输入权重(输入的权值大于等于${this.weightRange})` |
| | | if (type === 'edit') { |
| | | this.weightRange += this.form.weight; |
| | | this.defaults.weight.placeholder = `请输入权重(输入的权值大于等于${this.weightRange})`; |
| | | } |
| | | } |
| | | done(); |
| | |
| | | onLoad(page, params = {}) { |
| | | this.loading = true; |
| | | |
| | | const { |
| | | } = this.query; |
| | | const { } = this.query; |
| | | |
| | | const { userId, deptId, type, id } = this.params |
| | | const { userId, deptId, type, id } = this.params; |
| | | |
| | | let values = { |
| | | // userId: !type ? userId : deptId |
| | | assessmentSetId: id |
| | | assessmentSetId: id, |
| | | }; |
| | | getAssessorList(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.setDefaultWeightRange(data.records) |
| | | this.setDefaultWeightRange(data.records); |
| | | this.selectionClear(); |
| | | }); |
| | | }, |
| | | setDefaultWeightRange(data) { |
| | | let weightrange = 100 |
| | | let weightrange = 100; |
| | | data.forEach(item => { |
| | | weightrange -= item.weight |
| | | }) |
| | | this.weightRange = weightrange |
| | | this.defaults.weight.placeholder = `请输入权重(当前权重最大不可超过${weightrange})` |
| | | weightrange -= item.weight; |
| | | }); |
| | | this.weightRange = weightrange; |
| | | this.defaults.weight.placeholder = `请输入权重(当前权重最大不可超过${weightrange})`; |
| | | }, |
| | | configDialogOpen() { |
| | | getExportExcelData(this.params.userId).then(excelRes => { |
| | | if (excelRes.data.code !== 200) return this.$message.error('获取相关配置失败!!'); |
| | | const list = excelRes.data.data; |
| | | this.configUserList = list; |
| | | }); |
| | | }, |
| | | handleSelectionChange(value) { |
| | | this.checkedUsers = value; |
| | | }, |
| | | addConfigUsers() { |
| | | if (this.checkedUsers.length === 0) { |
| | | this.$message.warning('暂未选取任何数据!!'); |
| | | } else { |
| | | let currentAllWeight = 0; |
| | | this.checkedUsers.forEach(item => { |
| | | currentAllWeight += item.weight; |
| | | }); |
| | | if (currentAllWeight > 100) { |
| | | return this.$message.warning('当前权重超过100,请重新选择或在权重配置中修改后重新选择'); |
| | | } |
| | | this.addLoading = true |
| | | |
| | | const dataList = this.checkedUsers.map(item => { |
| | | const { |
| | | assessorUserId, |
| | | assessorUserName, |
| | | assessorPostName, |
| | | assessorDeptId, |
| | | assessorDeptName, |
| | | weight, |
| | | rangeVal, |
| | | } = item; |
| | | return { |
| | | assessmentSetId: this.params.id, |
| | | deptId: assessorDeptId, |
| | | deptName: assessorDeptName, |
| | | postName: assessorPostName, |
| | | userId: assessorUserId, |
| | | userName: assessorUserName, |
| | | weight, |
| | | rangeVal, |
| | | } |
| | | }); |
| | | |
| | | const promiseArr = [] |
| | | const createAssessorPromise = (data, userName) => { |
| | | return addAssessorList(data).then(res => { |
| | | this.addTipsText = `数据"${userName}"添加中...` |
| | | if (res.data.code !== 200) { |
| | | return `${userName}添加失败`; |
| | | } |
| | | return `${userName}添加成功`; |
| | | }) |
| | | } |
| | | |
| | | dataList.forEach(item => { |
| | | promiseArr.push(createAssessorPromise(item, item.userName)) |
| | | }) |
| | | |
| | | Promise.allSettled(promiseArr).then((responses) => { |
| | | const message = responses.map(item => item.value).join('、') |
| | | this.$message.success(message) |
| | | this.addLoading = false |
| | | this.configDialogShow = false |
| | | this.refreshChange() |
| | | }, error => { |
| | | this.$message.error(error) |
| | | }) |
| | | } |
| | | }, |
| | | }, |
| | | mounted() { |
| | | } |
| | | } |
| | | mounted() { }, |
| | | }; |
| | | </script> |
| | | |
| | | |
| | | <style lang="scss" scoped> |
| | | .header { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .table-search { |
| | | margin-bottom: 15px; |
| | | width: 250px; |
| | | float: right; |
| | | } |
| | | |
| | | :deep() { |
| | | .custom-table { |
| | | .el-table__header { |
| | | thead { |
| | | color: black; |
| | | |
| | | .el-table__cell { |
| | | background-color: #fafafa; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .info { |
| | |
| | | } |
| | | } |
| | | </style> |
| | | |
| | |
| | | this.loading = true; |
| | | |
| | | const { userId, deptId, type, id } = this.params |
| | | |
| | | |
| | | |
| | | const { |
| | | } = this.query; |
| | | |
| | |
| | | // userId: !type ? userId : deptId |
| | | assessmentSetId: id |
| | | }; |
| | | |
| | | getAssessorList(page.currentPage, page.pageSize, values).then(res => { |
| | | const data = res.data.data; |
| | | this.page.total = data.total; |