From 4c8e9a0c4dc32be637a244e8d97cdea709a2c08c Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Thu, 14 Dec 2023 17:12:24 +0800
Subject: [PATCH] 评优任务页面修改
---
src/option/evaluate/evaluateTask.js | 17 +++
src/views/assessment/components/assessmentWeight.vue | 43 ++++---
src/api/assessment/assessmentSet.js | 28 +++++
src/option/assessmentTask/assessmentTask.js | 2
src/views/evaluate/components/addDialog.vue | 170 ++++++++++++++++++++++------------
src/views/evaluate/evaluateTask.vue | 29 ++---
src/views/assessment/assessmentTask.vue | 8 +
7 files changed, 201 insertions(+), 96 deletions(-)
diff --git a/src/api/assessment/assessmentSet.js b/src/api/assessment/assessmentSet.js
index 5a568af..cb0d222 100644
--- a/src/api/assessment/assessmentSet.js
+++ b/src/api/assessment/assessmentSet.js
@@ -35,9 +35,29 @@
})
}
+export const getDeptDetail = (id) => {
+ return request({
+ url: '/assessment/assessmentSetDept/detail',
+ method: 'get',
+ params: {
+ id
+ }
+ })
+}
+
export const remove = (ids) => {
return request({
url: '/assessment/assessmentSet/remove',
+ method: 'post',
+ params: {
+ ids,
+ }
+ })
+}
+
+export const removeDept = (ids) => {
+ return request({
+ url: '/assessment/assessmentSetDept/remove',
method: 'post',
params: {
ids,
@@ -69,3 +89,11 @@
})
}
+export const updateDept = (row) => {
+ return request({
+ url: '/assessment/assessmentSetDept/submit',
+ method: 'post',
+ data: row
+ })
+}
+
diff --git a/src/option/assessmentTask/assessmentTask.js b/src/option/assessmentTask/assessmentTask.js
index 6d9fc3d..7988b33 100644
--- a/src/option/assessmentTask/assessmentTask.js
+++ b/src/option/assessmentTask/assessmentTask.js
@@ -53,9 +53,11 @@
label: "考核类型",
prop: "type",
type: "select",
+ disabled: true,
formatter: (res) => {
return res.type === 0? '个人考核' : '部门考核';
},
+ value: 0,
dicData: [
{
label: '人员考核任务',
diff --git a/src/option/evaluate/evaluateTask.js b/src/option/evaluate/evaluateTask.js
index c406616..56ffc56 100644
--- a/src/option/evaluate/evaluateTask.js
+++ b/src/option/evaluate/evaluateTask.js
@@ -5,7 +5,7 @@
}
export default {
- height:'auto',
+ height: 'auto',
calcHeight: 30,
tip: false,
searchShow: true,
@@ -76,7 +76,20 @@
}
return num + '人'
},
-
+ },
+ {
+ label: "类型",
+ prop: 'type',
+ type: 'select',
+ hide: true,
+ dicData: [{
+ label: '个人评优',
+ value: 0,
+ },
+ {
+ label: '部门评优',
+ value: 1,
+ }]
},
{
label: "候选人截止日期",
diff --git a/src/views/assessment/assessmentTask.vue b/src/views/assessment/assessmentTask.vue
index a57bc29..15d01af 100644
--- a/src/views/assessment/assessmentTask.vue
+++ b/src/views/assessment/assessmentTask.vue
@@ -85,6 +85,14 @@
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);
},
diff --git a/src/views/assessment/components/assessmentWeight.vue b/src/views/assessment/components/assessmentWeight.vue
index 87c07a6..be220b3 100644
--- a/src/views/assessment/components/assessmentWeight.vue
+++ b/src/views/assessment/components/assessmentWeight.vue
@@ -5,7 +5,7 @@
<ul class="info">
<li>考核权重</li>
<li v-if="!params.isDept">
- <el-tag size="large">被考核人:{{ params.name}}</el-tag>
+ <el-tag size="large">被考核人:{{ params.name }}</el-tag>
</li>
<li>
<el-tag size="large">部门:{{ params.deptName }}</el-tag>
@@ -25,7 +25,7 @@
</template>
<script>
-import { getList, getDeptList, getDetail, remove, add, addDept, update } from '@/api/assessment/assessmentSet'
+import { getList, getDeptList, getDetail, getDeptDetail, remove, removeDept, add, addDept, update, updateDept } from '@/api/assessment/assessmentSet'
export default {
props: {
@@ -52,7 +52,7 @@
index: true,
addBtn: true,
viewBtn: true,
- editBtn: false,
+ editBtn: true,
delBtn: true,
menuWidth: 200,
labelWidth: 120,
@@ -184,21 +184,21 @@
!this.params.isDept ? row.userId = this.params.id : row.deptId = this.params.id
const toUser = this.selectList.find(option => row.toUserName === option.name)
row.toUserId = toUser.id
- console.log(row);
- (this.params.isDept ? addDept(row) : add(row)).then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
+ (this.params.isDept ? addDept(row) : add(row)).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ window.console.log(error);
});
- done();
- }, error => {
- loading();
- window.console.log(error);
- });
},
rowUpdate(row, index, done, loading) {
- update(row).then(() => {
+ console.log(row);
+ (this.params.isDept ? updateDept(row) : update(row)).then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
@@ -217,7 +217,8 @@
type: "warning"
})
.then(() => {
- return remove(row.id);
+ // return remove(row.id);
+ return (this.params.isDept ? removeDept(row.id) : remove(row.id))
})
.then(() => {
this.onLoad(this.page);
@@ -238,7 +239,8 @@
type: "warning"
})
.then(() => {
- return remove(this.ids);
+ // return remove(this.ids);
+ return (this.params.isDept ? removeDept(this.ids) : remove(this.ids))
})
.then(() => {
this.onLoad(this.page);
@@ -269,9 +271,12 @@
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
- getDetail(this.form.id).then(res => {
+ (this.params.isDept ? getDeptDetail(this.form.id) : getDetail(this.form.id)).then(res => {
this.form = res.data.data;
});
+ // getDetail(this.form.id).then(res => {
+ // this.form = res.data.data;
+ // });
}
done();
},
@@ -306,7 +311,7 @@
const {
} = this.query;
-
+
let values = {
// toUserId: this.params.id
// userId: this.params.id
diff --git a/src/views/evaluate/components/addDialog.vue b/src/views/evaluate/components/addDialog.vue
index 962129f..670b741 100644
--- a/src/views/evaluate/components/addDialog.vue
+++ b/src/views/evaluate/components/addDialog.vue
@@ -1,37 +1,51 @@
<template>
<el-dialog v-model="params.visible" :title="params.title" width="600px" destroyOnClose>
- <el-form :model="addForm" label-width="130px" :rules="rules" ref="addFormRef">
- <el-form-item label="任务名称:" prop="taskName">
- <el-input v-model="addForm.taskName" placeholder="请输入任务名称"></el-input>
- </el-form-item>
- <el-form-item label="任务类别:" prop="taskType">
- <el-input v-model="addForm.taskType" placeholder="请输入任务类别"></el-input>
- </el-form-item>
- <el-form-item label="认定标准描述:" prop="remark">
- <el-input v-model="addForm.remark" placeholder="请输入任务名称"></el-input>
- </el-form-item>
- <el-form-item label="候选人数量:" prop="candidateNum">
- <ul class="select-group">
- <li v-for="(dept, index) in depts" :key="dept.id">
- <el-form-item :label="`${dept.title}:`">
- <el-input-number v-model="addForm.candidateNum[index].val" placeholder="请输入当前部门评优人数"
- controls-position="right" class="input-number" />
+ <div class="content">
+ <el-form :model="addForm" label-width="130px" :rules="rules" ref="addFormRef">
+ <el-form-item label="任务名称:" prop="taskName">
+ <el-input v-model="addForm.taskName" placeholder="请输入任务名称"></el-input>
+ </el-form-item>
+ <el-form-item label="任务类别:" prop="taskType">
+ <el-input v-model="addForm.taskType" placeholder="请输入任务类别"></el-input>
+ </el-form-item>
+ <el-form-item label="认定标准描述:" prop="remark">
+ <el-input v-model="addForm.remark" placeholder="请输入任务名称"></el-input>
+ </el-form-item>
+ <el-form-item label="评优类型:" prop="type">
+ <el-select disabled v-model="addForm.type" placeholder="请选择评优类型" style="width: 100%;">
+ <el-option label="个人评优" value="0" />
+ <el-option label="部门评优" value="1" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="候选人数量:" prop="candidateNum">
+ <el-select v-model="selectGroup" value-key="deptId" multiple style="width: 100%;">
+ <el-option v-for="dept in depts" :key="dept.deptId" :label="dept.deptName" :value="dept">
+ </el-option>
+ </el-select>
+ <div class="select-list">
+ <el-form-item v-for="content in selectGroup" :key="content.deptId" :label="content.deptName"
+ class="select-item">
+ <el-select v-model="content.users" value-key="id" multiple>
+ <el-option v-for="employee in content.employees" :key="employee.id" :label="employee.name"
+ :value="employee">
+ </el-option>
+ </el-select>
</el-form-item>
- </li>
- </ul>
- </el-form-item>
- <el-form-item label="候选人截止日期:" prop="candidateCutoffTime">
- <el-date-picker v-model="addForm.candidateCutoffTime" type="datetime" placeholder="请选择截止时间"
- format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
- </el-form-item>
- <el-form-item label="评优数量:" prop="evaluateNum">
- <el-input v-model="addForm.evaluateNum" placeholder="请输入评优数量"></el-input>
- </el-form-item>
- <el-form-item label="候选人截止日期:" prop="evaluateCutoffTime">
- <el-date-picker v-model="addForm.evaluateCutoffTime" type="datetime" placeholder="请选择截止时间"
- format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
- </el-form-item>
- </el-form>
+ </div>
+ </el-form-item>
+ <el-form-item label="候选人截止日期:" prop="candidateCutoffTime">
+ <el-date-picker v-model="addForm.candidateCutoffTime" type="datetime" placeholder="请选择截止时间"
+ format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
+ </el-form-item>
+ <el-form-item label="评优数量:" prop="evaluateNum">
+ <el-input v-model="addForm.evaluateNum" placeholder="请输入评优数量"></el-input>
+ </el-form-item>
+ <el-form-item label="评优截止日期:" prop="evaluateCutoffTime">
+ <el-date-picker v-model="addForm.evaluateCutoffTime" type="datetime" placeholder="请选择截止时间"
+ format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
+ </el-form-item>
+ </el-form>
+ </div>
<template #footer>
<span class="dialog-footer">
<el-button @click="params.visible = false">取消</el-button>
@@ -45,6 +59,8 @@
import website from '@/config/website';
import { getDeptTree } from '@/api/system/dept';
import { add, update } from "@/api/evaluate/evaluateTask";
+import { getList } from '@/api/system/user.js'
+import _ from 'lodash';
export default {
props: {
@@ -55,6 +71,7 @@
visible: false,
title: '新增',
isEdit: false,
+ type: 0,
addForm: {}
};
}
@@ -63,12 +80,14 @@
data() {
return {
depts: [],
+ selectGroup: [],
addForm: {
id: "",
tenantId: "",
taskName: "",
taskType: "",
remark: "",
+ type: "",
candidateNum: [],
candidateCutoffTime: "",
candidateState: "",
@@ -93,6 +112,9 @@
remark: [
{ required: true, message: '请输入认定标准描述', trigger: 'blur' },
],
+ type: [
+ { required: true, message: '请选择评优类型', trigger: 'blur' },
+ ],
candidateNum: [
{ required: true, message: '请选择候选人截止日期', trigger: 'click' },
],
@@ -109,19 +131,43 @@
}
},
watch: {
- 'params.addForm': {
- handler(val) {
- this.addForm = val
- },
- deep: true
- },
'params.visible': {
handler(val) {
val && this.initData(website.tenantId);
+ this.addForm.type = this.params.type + ''
+ if (this.params.isEdit) {
+ this.addForm = this.params.addForm
+ this.addForm.type = this.params.type + ''
+ }
},
deep: true,
immediate: true
},
+ // 拦截candidateNum
+ 'selectGroup': {
+ handler(val) {
+ this.addForm.candidateNum = []
+ let evaluateNums = 0
+ val.forEach(item => {
+ const users = []
+ evaluateNums += item.selected?.length
+ item.selected.forEach(user => {
+ users.push({
+ id: user.id,
+ name: user.name
+ })
+ })
+ this.addForm.candidateNum.push({
+ deptId: item.deptId,
+ deptName: item.deptName,
+ val: item.selected.length,
+ users
+ })
+ })
+ this.addForm.evaluateNum = evaluateNums + ''
+ },
+ deep: true
+ }
},
methods: {
handleSubmit() {
@@ -165,23 +211,30 @@
this.params.visible = false
},
initData(tenantId) {
+ // 读取部门列表
getDeptTree(tenantId).then(res => {
- const result = res.data.data;
- this.depts = []
+ const result = _.cloneDeep(res.data.data);
+ let deptList = []
result.forEach(item => {
+ deptList.push(item)
if (item.children) {
- this.depts = result.concat(item.children)
+ deptList = result.concat(item.children)
delete item.children
- } else {
- this.depts.push(item)
}
})
- if (this.params.isEdit) return
- this.addForm.candidateNum = []
- this.depts.forEach(dept => {
- this.addForm.candidateNum.push({
- deptId: dept.id,
- val: 0
+ return deptList
+ }).then(deptList => {
+ const depts_list = _.cloneDeep(deptList)
+ this.depts = []
+ depts_list.forEach(dept => {
+ getList(1, 99999, {}, dept.id).then(employeeRes => {
+ const { records } = employeeRes.data.data
+ this.depts.push({
+ deptId: dept.id,
+ deptName: dept.title,
+ users: [],
+ employees: records
+ })
})
})
})
@@ -194,20 +247,17 @@
</script>
<style lang="scss" scoped>
-.select-group {
- list-style: none;
- margin: 0;
- padding: 0;
+.content {
+ height: 400px;
+ overflow: auto;
+}
+.select-list {
width: 100%;
+ .select-item {
+ width: 100%;
+ margin-top: 15px;
- li {
- margin-top: 20px;
-
- &:first-child {
- margin-top: 0;
- }
-
- .input-number {
+ .el-select {
width: 100%;
}
}
diff --git a/src/views/evaluate/evaluateTask.vue b/src/views/evaluate/evaluateTask.vue
index e0f7ad6..15e5d19 100644
--- a/src/views/evaluate/evaluateTask.vue
+++ b/src/views/evaluate/evaluateTask.vue
@@ -107,18 +107,18 @@
};
},
watch: {
- // defaultTaskType: {
- // handler(n) {
- // this.query = {}
- // this.query['type'] = n
- // let params = {
- // type: n
- // }
- // this.page.currentPage = 1;
- // this.onLoad(this.page, params);
- // },
- // immediate: true,
- // }
+ defaultTaskType: {
+ handler(n) {
+ this.query = {}
+ this.query['type'] = n
+ let params = {
+ type: n
+ }
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ },
+ immediate: true,
+ }
},
computed: {
...mapGetters(["permission"]),
@@ -144,11 +144,11 @@
visible: true,
title: '添加',
isEdit: false,
+ type: this.defaultTaskType,
addForm: {}
}
},
rowSave(row, done, loading) {
- console.log(row);
add(row).then(() => {
this.onLoad(this.page);
this.$message({
@@ -166,6 +166,7 @@
visible: true,
title: '编辑',
isEdit: true,
+ type: this.defaultTaskType,
addForm: {
...row
}
@@ -299,8 +300,6 @@
...params,
taskName_like: taskName,
};
- console.log(values);
-
getList(page.currentPage, page.pageSize, values).then(res => {
const data = res.data.data;
this.page.total = data.total;
--
Gitblit v1.9.3