From c417319fe54054252ee1d45a5379f3e712d32c8d Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Mon, 26 Feb 2024 11:53:19 +0800
Subject: [PATCH] 权重配置更新
---
src/views/assessment/assessmentConfig.vue | 84 ++++++++++-
src/option/assessment/assessmentConfig.js | 7
src/views/assessment/components/configEdit.vue | 326 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 406 insertions(+), 11 deletions(-)
diff --git a/src/option/assessment/assessmentConfig.js b/src/option/assessment/assessmentConfig.js
index 2471b50..6fca30c 100644
--- a/src/option/assessment/assessmentConfig.js
+++ b/src/option/assessment/assessmentConfig.js
@@ -2,11 +2,13 @@
height: 'auto',
calcHeight: 30,
tip: false,
- searchShow: true,
+ searchShow: false,
searchMenuSpan: 6,
+ searchLabelWidth: 100,
border: true,
index: true,
- viewBtn: true,
+ editBtn: false,
+ viewBtn: false,
selection: true,
dialogClickModal: false,
labelWidth: 130,
@@ -65,6 +67,7 @@
label: "考核人",
prop: "assessorUserName",
type: "cascader",
+ search: true,
expandTrigger: 'click',
dicData: [],
props: {
diff --git a/src/views/assessment/assessmentConfig.vue b/src/views/assessment/assessmentConfig.vue
index a3a09f1..6934b40 100644
--- a/src/views/assessment/assessmentConfig.vue
+++ b/src/views/assessment/assessmentConfig.vue
@@ -1,5 +1,24 @@
<template>
<basic-container>
+ <div class="search">
+ <div class="input-box">
+ <div class="label">被考核人:</div>
+ <el-input v-model="query.userName" placeholder="请输入被考核人" class="e-input" clearable />
+ </div>
+ <div class="input-box">
+ <div class="label">考核人:</div>
+ <el-input
+ v-model="query.assessorUserName"
+ placeholder="请输入考核人"
+ class="e-input"
+ clearable
+ />
+ </div>
+ <div>
+ <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
+ <el-button plain icon="el-icon-delete" @click="handleReset">清空</el-button>
+ </div>
+ </div>
<avue-crud
:option="option"
v-model:search="search"
@@ -34,6 +53,10 @@
权重导入
</el-button>
</template>
+ <template #menu="{ row, index, size }">
+ <el-button text type="primary" icon="el-icon-view" plain @click="handleEdit(row, 'view')">查看</el-button>
+ <el-button text type="primary" icon="el-icon-edit" plain @click="handleEdit(row, 'edit')">编辑</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">
@@ -44,12 +67,14 @@
</template>
</avue-form>
</el-dialog>
+ <configEdit :params="configDialogParmas" @refresh="onLoad" />
</basic-container>
</template>
<script>
import axios from 'axios';
-import _ from 'lodash'
+import configEdit from './components/configEdit.vue';
+import _ from 'lodash';
import { getList, getDetail, add, update, remove } from '@/api/assessment/assessmentConfig';
import option from '@/option/assessment/assessmentConfig';
import { mapGetters } from 'vuex';
@@ -60,11 +85,13 @@
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import website from '@/config/website';
-import { getDeptTree, getDeptLazyTree } from '@/api/system/dept';
+import { getDeptTree } from '@/api/system/dept';
import { getList as getUserList } from '@/api/system/user.js';
-import { copy } from '@/api/tool/code';
export default {
+ components: {
+ configEdit,
+ },
data() {
return {
form: {},
@@ -133,6 +160,7 @@
],
},
userList: [],
+ configDialogParmas: {},
};
},
watch: {
@@ -181,10 +209,10 @@
},
methods: {
rowSave(row, done, loading) {
- const { userName, assessorUserName} = row
+ 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)
+ const copyRow = _.cloneDeep(row);
copyRow.userId = usernameData.id;
copyRow.userName = usernameData.name;
copyRow.deptId = usernameData.deptId;
@@ -207,10 +235,10 @@
);
},
rowUpdate(row, index, done, loading) {
- const { userName, assessorUserName} = row
+ 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)
+ const copyRow = _.cloneDeep(row);
copyRow.userId = usernameData.id;
copyRow.userName = usernameData.name;
copyRow.deptId = usernameData.deptId;
@@ -307,6 +335,15 @@
this.onLoad(this.page, params);
done();
},
+ handleSearch() {
+ this.page.currentPage = 1;
+ this.onLoad(this.page);
+ },
+ handleReset() {
+ this.query = {};
+ this.page.currentPage = 1;
+ this.onLoad(this.page);
+ },
selectionChange(list) {
this.selectionList = list;
},
@@ -328,7 +365,9 @@
const {} = this.query;
- let values = {};
+ let values = {
+ ...this.query,
+ };
getList(page.currentPage, page.pageSize, values).then(res => {
const data = res.data.data;
@@ -421,6 +460,13 @@
}
};
},
+ handleEdit(row, type) {
+ this.configDialogParmas = {
+ dialogVisible: true,
+ isEdit: type === 'edit',
+ ...row
+ }
+ }
},
mounted() {
this.initData();
@@ -428,4 +474,24 @@
};
</script>
-<style></style>
+<style lang="scss" scoped>
+.search {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+ margin-bottom: 20px;
+ .input-box {
+ width: 300px;
+ display: flex;
+ align-items: center;
+ .label {
+ width: 80px;
+ font-size: 14px;
+ color: #606266;
+ }
+ .e-input {
+ width: 250px;
+ }
+ }
+}
+</style>
diff --git a/src/views/assessment/components/configEdit.vue b/src/views/assessment/components/configEdit.vue
new file mode 100644
index 0000000..766ef8e
--- /dev/null
+++ b/src/views/assessment/components/configEdit.vue
@@ -0,0 +1,326 @@
+<template>
+ <el-dialog v-model="params.dialogVisible" :title="params.isEdit ? '编辑' : '预览'" width="60%">
+ <el-form
+ :model="form"
+ :rules="rules"
+ label-width="120px"
+ v-loading="isLoading"
+ element-loading-text="数据加载中"
+ ref="formRef"
+ :disabled="!params.isEdit"
+ >
+ <div class="form-content">
+ <div class="form-item">
+ <el-form-item label="被考核人部门:" prop="cDeptId">
+ <el-cascader
+ v-model="form.cDeptId"
+ :props="{
+ value: 'value',
+ label: 'title',
+ lazy: false,
+ }"
+ :options="cascaderOptions"
+ :show-all-levels="false"
+ @change="handleDeptChange"
+ style="width: 100%"
+ placeholder="请选择被考核人部门"
+ />
+ </el-form-item>
+ </div>
+ <div class="form-item">
+ <el-form-item label="被考核人" prop="userId">
+ <!-- <el-input v-model="form.userName" placeholder="请输入被考核人" /> -->
+ <el-select
+ v-model="form.userId"
+ placeholder="请选择被考核人"
+ @change="handleUserNameChange"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in userList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div class="form-item">
+ <el-form-item label="被考核人职位:" prop="postName">
+ <el-input v-model="form.postName" disabled placeholder="请输入被考核人职位" />
+ </el-form-item>
+ </div>
+ <div class="form-item">
+ <el-form-item label="考核人部门:" prop="cAssessorDeptId">
+ <el-cascader
+ v-model="form.cAssessorDeptId"
+ :props="{
+ value: 'value',
+ label: 'title',
+ lazy: false,
+ }"
+ :options="cascaderOptions"
+ :show-all-levels="false"
+ @change="handleAssessorDeptChange"
+ style="width: 100%"
+ placeholder="请选择考核人部门"
+ />
+ </el-form-item>
+ </div>
+ <div class="form-item">
+ <el-form-item label="考核人:" prop="assessorUserId">
+ <!-- <el-input v-model="form.assessorUserName" placeholder="请输入被考核人部门" /> -->
+ <el-select
+ v-model="form.assessorUserId"
+ placeholder="请选择被考核人"
+ style="width: 100%"
+ @change="handleAssessorUserChange"
+ >
+ <el-option
+ v-for="item in assessorUserList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div class="form-item">
+ <el-form-item label="考核人职位:" prop="assessorPostName">
+ <el-input v-model="form.assessorPostName" disabled placeholder="请输入考核人职位" />
+ </el-form-item>
+ </div>
+ <div class="form-item">
+ <el-form-item label="权值:" prop="weight">
+ <el-input v-model="form.weight" placeholder="请输入权值" />
+ </el-form-item>
+ </div>
+ <div class="form-item">
+ <el-form-item label="范围:" prop="rangeVal">
+ <el-input v-model="form.rangeVal" placeholder="请输入范围" />
+ </el-form-item>
+ </div>
+ </div>
+ </el-form>
+ <template #footer v-if="params.isEdit">
+ <el-button type="primary" icon="el-icon-edit" :disabled="isLoading" @click="infoUpdate"
+ >修改</el-button
+ >
+ <el-button icon="el-icon-close" @click="params.dialogVisible = false">取消</el-button>
+ </template>
+ </el-dialog>
+</template>
+
+<script setup>
+import { reactive, ref, watch } from 'vue';
+import website from '@/config/website';
+import { getDeptTree } from '@/api/system/dept';
+import { getList as getUserList } from '@/api/system/user.js';
+import { ElMessage } from 'element-plus';
+import { update } from '@/api/assessment/assessmentConfig';
+
+const props = defineProps({
+ params: {
+ type: Object,
+ default: () => {},
+ },
+});
+
+const emits = defineEmits(['refresh']);
+
+const isLoading = ref(false);
+
+const valueArr = ['id'];
+
+const form = reactive({
+ id: '',
+ userId: '',
+ userName: '',
+ postId: '',
+ postName: '',
+ deptId: '',
+ deptName: '',
+ assessorUserId: '',
+ assessorUserName: '',
+ assessorDeptId: '',
+ assessorDeptName: '',
+ assessorPostId: '',
+ assessorPostName: '',
+ weight: '',
+ rangeVal: '',
+ cDeptId: '',
+ cAssessorDeptId: '',
+});
+const formRef = ref(null);
+
+const rules = {
+ userId: [
+ {
+ required: true,
+ message: '请选择被考核人',
+ trigger: 'change',
+ },
+ ],
+ assessorUserId: [
+ {
+ required: true,
+ message: '请选择考核人',
+ trigger: 'change',
+ },
+ ],
+ weight: [
+ {
+ required: true,
+ message: '请输入权值',
+ trigger: 'change',
+ },
+ ],
+ rangeVal: [
+ {
+ required: true,
+ message: '请输入范围',
+ trigger: 'change',
+ },
+ ],
+ cDeptId: [
+ {
+ required: true,
+ message: '请选择被考核人部门',
+ trigger: 'change',
+ },
+ ],
+ cAssessorDeptId: [
+ {
+ required: true,
+ message: '请选择考核人部门',
+ trigger: 'change',
+ },
+ ],
+ postName: [
+ {
+ required: true,
+ message: '请填写被考核人部门',
+ trigger: 'change',
+ },
+ ],
+ assessorPostName: [
+ {
+ required: true,
+ message: '请填写考核人部门',
+ trigger: 'change',
+ },
+ ],
+};
+
+const userList = ref([]);
+const handleDeptChange = deptId => {
+ const cdeptId = deptId[deptId.length - 1];
+ getUsers(deptId, 1);
+ form.deptId = cdeptId;
+};
+const handleUserNameChange = userId => {
+ const user = userList.value.find(userItem => userItem.id === userId);
+ form.userName = user.name;
+ form.postId = user.postId;
+ form.deptName = user.deptName;
+ form.postName = user.postName;
+};
+
+const assessorUserList = ref([]);
+const handleAssessorDeptChange = deptId => {
+ const cdeptId = deptId[deptId.length - 1];
+ getUsers(cdeptId, 2);
+ form.assessorDeptId = cdeptId;
+};
+const handleAssessorUserChange = userId => {
+ const user = assessorUserList.value.find(userItem => userItem.id === userId);
+ form.assessorUserName = user.name;
+ form.assessorPostId = user.postId;
+ form.assessorDeptName = user.deptName;
+ form.assessorPostName = user.postName;
+};
+
+const getUsers = (deptId, type) => {
+ isLoading.value = true;
+ getUserList(
+ 1,
+ 1000,
+ {
+ userType: 2,
+ },
+ deptId
+ ).then(usersRes => {
+ if (usersRes.data.code !== 200) return ElMessage.error('获取用户信息失败!!!');
+ if (type === 1) {
+ userList.value = usersRes.data.data.records;
+ } else {
+ assessorUserList.value = usersRes.data.data.records;
+ }
+ isLoading.value = false;
+ });
+};
+
+const infoUpdate = () => {
+ formRef.value.validate(valid => {
+ if (!valid) return;
+ update(form).then(res => {
+ if (res.data.code !== 200) return ElMessage.error(res.data.msg);
+ props.params.dialogVisible = false;
+ const page = {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0,
+ };
+ emits('refresh', page);
+ });
+ });
+};
+
+const cascaderOptions = ref([]);
+const getDeptList = defaultParams => {
+ isLoading.value = true;
+ getDeptTree(website.tenantId).then(deptRes => {
+ const deptData = deptRes.data;
+ if (deptData.code !== 200) return ElMessage.error('获取部门信息失败!!!');
+ cascaderOptions.value = deptData.data;
+
+ Object.keys(form).forEach(key => {
+ form[key] = defaultParams[key];
+ if (key === 'cDeptId') {
+ form[key] = [cascaderOptions.value[0].value, form['deptId']];
+ handleDeptChange(form[key]);
+ }
+ if (key === 'cAssessorDeptId') {
+ form[key] = [cascaderOptions.value[0].value, form['assessorDeptId']];
+ handleAssessorDeptChange(form[key]);
+ }
+ });
+
+ isLoading.value = false;
+ });
+};
+
+watch(
+ () => props.params,
+ val => {
+ if (val.dialogVisible === false) return;
+ getDeptList(val);
+ },
+ {
+ deep: true,
+ immediate: true,
+ }
+);
+</script>
+
+<style lang="scss" scoped>
+.form-content {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+
+ .form-item {
+ width: 50%;
+ }
+}
+</style>
--
Gitblit v1.9.3