From 0ee82baedf5e7611b978040f7285ddfbc436bc34 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Thu, 04 Jan 2024 11:25:24 +0800
Subject: [PATCH] 评优任务页面修改
---
src/option/evaluate/evaluateTask.js | 2
/dev/null | 218 ------------------------
src/api/dict.js | 11 +
src/option/assessmentTask/assessmentTask.js | 15 +
src/views/evaluate/evaluateTask.vue | 82 ++------
src/option/employee/list.js | 17 +
src/views/evaluate/components/addSectionTask.vue | 132 ++++++++++++++
src/views/evaluate/components/addIndividualTask.vue | 15
8 files changed, 202 insertions(+), 290 deletions(-)
diff --git a/src/api/dict.js b/src/api/dict.js
new file mode 100644
index 0000000..b5b3395
--- /dev/null
+++ b/src/api/dict.js
@@ -0,0 +1,11 @@
+import request from '@/axios';
+
+export const getDict = (code) => {
+ return request({
+ url: '/blade-system/dict/dictionary',
+ method: 'get',
+ params: {
+ code
+ }
+ })
+};
\ No newline at end of file
diff --git a/src/option/assessmentTask/assessmentTask.js b/src/option/assessmentTask/assessmentTask.js
index 6e6be6c..fc0b794 100644
--- a/src/option/assessmentTask/assessmentTask.js
+++ b/src/option/assessmentTask/assessmentTask.js
@@ -18,8 +18,9 @@
index: false,
viewBtn: false,
delBtn: false,
- editBtn: false,
+ editBtn: true,
selection: true,
+ menuWidth: 250,
dialogClickModal: false,
column: [
// {
@@ -39,7 +40,7 @@
prop: "assessmentNo",
type: "input",
search: true,
- width: 100,
+ minWidth: 100,
disabled: true,
rules: [
{
@@ -54,6 +55,8 @@
label: "考核种类",
prop: "assessmentPurpose",
type: "select",
+ minWidth: 100,
+ overHidden: true,
dicData: [
{
label: '月度考核',
@@ -113,7 +116,7 @@
disabled: true,
format: "YYYY-MM-DD HH:mm:ss",
// valueFormat: "YYYY-MM-DD HH:mm:ss",
- width: 200,
+ minWidth: 200,
rules: [
{
required: true,
@@ -128,7 +131,7 @@
type: "date",
format: "YYYY-MM-DD HH:mm:ss",
valueFormat: "YYYY-MM-DD HH:mm:ss",
- width: 200,
+ minWidth: 200,
rules: [
{
required: true,
@@ -140,7 +143,9 @@
{
label: "备注",
prop: "remark",
- type: "textarea"
+ type: "textarea",
+ overHidden: true,
+ minWidth: 300
},
{
label: "任务状态",
diff --git a/src/option/employee/list.js b/src/option/employee/list.js
index f33a4a3..b5387cc 100644
--- a/src/option/employee/list.js
+++ b/src/option/employee/list.js
@@ -257,6 +257,23 @@
// ],
// },
{
+ label: '员工类型',
+ prop: 'employeeType',
+ type: 'select',
+ dicUrl: '/blade-system/dict/dictionary?code=employee_type',
+ props: {
+ label: 'dictValue',
+ value: 'dictKey',
+ },
+ rules: [
+ {
+ required: true,
+ message: '请选择员工类型',
+ trigger: 'click',
+ },
+ ],
+ },
+ {
label: '所属部门',
prop: 'deptId',
type: 'tree',
diff --git a/src/option/evaluate/evaluateTask.js b/src/option/evaluate/evaluateTask.js
index e0d57c7..a407a7d 100644
--- a/src/option/evaluate/evaluateTask.js
+++ b/src/option/evaluate/evaluateTask.js
@@ -68,7 +68,7 @@
// label: "title",
// },
formatter: (row, value) => {
- return 0
+ return value
},
},
{
diff --git a/src/views/evaluate/components/addAssessors.vue b/src/views/evaluate/components/addAssessors.vue
deleted file mode 100644
index e2ac71b..0000000
--- a/src/views/evaluate/components/addAssessors.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
- <el-dialog v-model="props.params.visible" :title="`${tipInfo.evaluateTaskName}-评定人列表`" width="50%" destroy-on-close>
- <div class="tips">
- <el-tag style="width: 100%;" size="large">当前评优任务:{{ tipInfo.evaluateTaskName }}</el-tag>
- <div class="tags">
- <el-tag size="large" class="item" v-if="!curType">候选人姓名:{{ tipInfo.userName }}</el-tag>
- <el-tag size="large" class="item" >候选人部门:{{ tipInfo.deptName }}</el-tag>
- <el-tag size="large" class="item" v-if="!curType">候选人职位:{{ tipInfo.postName }}</el-tag>
- </div>
- </div>
- <avue-crud :data="table.data" :option="tableOption" v-model:page="table.page">
- <template #menu-left>
- <el-button type="primary" icon="el-icon-plus" @click="assessorDialog">新增评定人</el-button>
- </template>
- </avue-crud>
- <selectAssessor v-model:params="selectAssessorParams" @refresh="refresh" />
- </el-dialog>
-</template>
-
-<script setup>
-import { getAssessorList } from '@/api/evaluate/evaluateTask'
-import { ElMessage } from 'element-plus';
-import { markRaw, reactive, watch } from 'vue';
-import selectAssessor from './selectAssessor.vue';
-
-
-const props = defineProps({
- params: {
- type: Object,
- default: () => {
- return {
- visible: false,
- taskInfo: {},
- candidateInfo: {}
- }
- }
- }
-})
-
-const type = inject('type')
-const curType = computed(() => type())
-
-const tableOption = markRaw({
- height: '240',
- calcHeight: 30,
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- viewBtn: false,
- addBtn: false,
- editBtn: false,
- delBtn: false,
- selection: false,
- dialogClickModal: false,
- menuFixed: 'right',
- labelWidth: '70',
- menu: false,
- column: [
- {
- label: '任务id',
- prop: 'evaluateTaskId',
- type: 'input',
- hide: true,
- },
- {
- label: '候选人id',
- prop: 'userId',
- type: 'input',
- hide: true,
- },
- {
- label: '候选人姓名',
- prop: 'userName',
- type: 'input'
- },
- {
- label: '部门id',
- prop: 'deptId',
- type: 'input',
- hide: true,
- },
- {
- label: '部门名称',
- prop: 'deptName',
- type: 'input'
- },
- {
- label: '职位名称',
- prop: 'postName',
- type: 'input'
- }
- ]
-})
-
-const tipInfo = reactive({})
-
-const table = reactive({
- data: [],
- page: {
- current: 1,
- size: 10,
- total: 10
- },
-})
-
-const selectAssessorParams = reactive({
- visible: false,
- evaluateCandidateId: ''
-})
-
-const initData = () => {
- const { current, size } = table.page
- const { id } = props.params.candidateInfo
- getAssessorList(current, size, id).then(res => {
- const result = res.data.data
- table.data = result.records
- table.page.total = result.total
- }, error => {
- ElMessage.error(error)
- })
-}
-
-const refresh = () => {
- table.page.total = 0
- initData()
-}
-
-const assessorDialog = () => {
- selectAssessorParams.visible = true
- selectAssessorParams.evaluateCandidateId = props.params.candidateInfo.id
-}
-
-watch(() => props.params.visible, (val) => {
- if (!val) return
- const { evaluateTaskName } = props.params.taskInfo
- const { postName, deptName, userName } = props.params.candidateInfo
- tipInfo.evaluateTaskName = evaluateTaskName
- tipInfo.postName = postName
- tipInfo.deptName = deptName
- tipInfo.userName = userName
- initData()
-
-}, {
- deep: true
-})
-
-</script>
-
-<style lang="scss" scoped>
-.tips {
- margin-bottom: 15px;
-
- .tags {
- display: flex;
- width: 100%;
- margin: 5px 0;
-
- .item {
- flex: 1;
-
- &:nth-child(2) {
- margin: 0 5px;
- }
- }
- }
-}
-</style>
\ No newline at end of file
diff --git a/src/views/evaluate/components/addCandidate.vue b/src/views/evaluate/components/addCandidate.vue
deleted file mode 100644
index 06d10ea..0000000
--- a/src/views/evaluate/components/addCandidate.vue
+++ /dev/null
@@ -1,253 +0,0 @@
-<template>
- <el-dialog v-model="props.dialogParams.visible" :title="`${curType ? '添加候选部门' : '添加候选人'}`" @close="dialogClose">
- <div style="margin-bottom: 20px;" v-if="!form.deptId">
- <el-alert title="请先选择部门信息" type="warning" />
- </div>
- <el-form :model="form" ref="formRef" :rules="rules" label-width="70px">
- <el-row>
- <el-col :span="!curType ? 12 : 24">
- <el-form-item label="部门" prop="deptId">
- <el-cascader v-model="form.deptId" :props="cascaderProps" placeholder="请选择部门" @change="deptChange"
- style="width: 100%;" />
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="!curType">
- <el-form-item label="候选人" prop="userId">
- <el-select v-model="form.userId" placeholder="请选择候选人"
- :disabled="userSelectOption.length > 0 ? false : true" @change="userSelectChange"
- style="width: 100%;">
- <el-option v-for="item in userSelectOption" :label="item.name" :key="item.id"
- :value="item.id" />
- <div class="loading-more" @click="loadMore">{{ loadingMoreText }}</div>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="!curType">
- <el-form-item label="职务">
- <el-input v-model="form.postName" placeholder="请填写职务" disabled />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <el-button @click="() => props.dialogParams.visible = false">取消</el-button>
- <el-button type="primary" @click="submit">确定</el-button>
- </template>
- </el-dialog>
-</template>
-
-<script setup>
-import { computed, inject, markRaw, reactive, ref, watch } from 'vue';
-import { getDeptLazyTree } from '@/api/system/dept.js'
-import { getList } from '@/api/system/user.js'
-import { addCandidate } from '@/api/evaluate/evaluateTask'
-import { ElMessage } from 'element-plus';
-
-const props = defineProps({
- dialogParams: {
- type: Object,
- default: () => { }
- },
-})
-
-const emits = defineEmits(['refresh'])
-
-const formRef = ref(null)
-
-const form = reactive({
- userId: '',
- userName: '',
- deptId: '',
- deptName: '',
- postName: ''
-})
-
-const type = inject('type')
-const curType = computed(() => type())
-
-const rules = markRaw({
- userId: [
- {
- required: true,
- message: '请选择候选人',
- trigger: 'click',
- }
- ],
- deptId: [
- {
- required: true,
- message: '请选择部门',
- trigger: 'click',
- }
- ]
-})
-
-const requestParams = reactive({
- evaluateTaskId: '',
- evaluateTaskName: '',
- userId: '',
- userName: '',
- deptId: '',
- deptName: '',
- postName: ''
-})
-
-const requestSectionParams = reactive({
- evaluateTaskId: '',
- evaluateTaskName: '',
- deptId: '',
- deptName: ''
-})
-
-// 当前部门
-const currentDeptId = ref('')
-
-
-const deptList = ref([])
-
-// options 数据
-const userSelectOption = ref([])
-
-// 懒加载
-const isOptionsLoading = ref(false)
-
-const loadingMoreText = computed(() => {
- if (userSelectOption.value.length >= page.total) {
- return '数据已全部加载完成'
- }
- if (isOptionsLoading.value) {
- return '加载中...'
- }
- if (!isOptionsLoading.value) {
- return '点击加载更多'
- }
-})
-// 分页
-const page = reactive({
- current: 1,
- size: 10,
- total: 0
-})
-
-const loadMore = async () => {
- isOptionsLoading.value = true
- page.current += 1
- const res = await initUserList(currentDeptId.value)
- userSelectOption.value = [...userSelectOption.value, ...res]
- isOptionsLoading.value = false
-}
-
-// 初始化部门数据
-const initDept = async (parentId) => {
- const deptResult = await getDeptLazyTree(parentId)
- return deptResult.data.data
-}
-
-// 初始化用户列表
-const initUserList = (deptId) => {
- return getList(
- page.current,
- page.size,
- {
- userType: 2,
- },
- deptId,
- ).then(res => {
- page.total = res.data.data.total
- return res.data.data.records
- })
-}
-
-
-// 选择部门改变
-const deptChange = async (value) => {
- const id = value[value.length - 1]
- currentDeptId.value = id
- if (!curType.value) {
- const userList = await initUserList(id)
- userSelectOption.value = userList
- } else {
- const dept = deptList.value.find(item => item.id == id)
- requestSectionParams.deptId = dept.value || ''
- requestSectionParams.deptName = dept.title || ''
- }
-}
-
-// 级联配置
-const cascaderProps = {
- lazy: true,
- label: 'title',
- value: 'id',
- multiple: false,
- lazyLoad: async (node, resovle) => {
- const level = node.level || 0
- if (level == 0) {
- const res = await initDept(level)
- deptList.value = res
- resovle(res)
- } else {
- const { value } = node
- const res = await initDept(value)
- deptList.value = res
- resovle(res)
- }
- },
- leaf(node) {
- const { hasChildren } = node
- return !hasChildren
- }
-}
-
-const userSelectChange = (value) => {
- const obj = userSelectOption.value.find(item => item.id == value)
- const { id, deptName, deptId, postName, realName } = obj
- requestParams.userId = id
- requestParams.deptId = deptId
- requestParams.userName = realName
- requestParams.deptName = deptName
- requestParams.postName = postName
-
- form.deptName = deptName
- form.postName = postName
-}
-
-const submit = () => {
- formRef.value.validate(valid => {
- if (!valid) return ElMessage.error('添加候选人失败')
- const params = curType? requestSectionParams : requestParams
- addCandidate(params).then(res => {
- ElMessage.success('添加候选人成功')
- props.dialogParams.visible = false
- emits('refresh')
- }, error => {
- ElMessage.error(error)
- })
- })
-}
-
-const dialogClose = () => {
- formRef.value.resetFields()
-}
-
-watch(() => props.dialogParams.visible, (val) => {
- if (!val) return
- const { evaluateTaskId, evaluateTaskName } = props.dialogParams.taskParams
- if (!curType.value) {
- requestParams.evaluateTaskName = evaluateTaskName
- requestParams.evaluateTaskId = evaluateTaskId
- } else {
- requestSectionParams.evaluateTaskName = evaluateTaskName
- requestSectionParams.evaluateTaskId = evaluateTaskId
- }
-
-}, {
- deep: true
-})
-</script>
-
-<style lang="scss" scoped>
-.loading-more {
- text-align: center;
- cursor: pointer;
-}
-</style>
\ No newline at end of file
diff --git a/src/views/evaluate/components/addDialog.vue b/src/views/evaluate/components/addIndividualTask.vue
similarity index 95%
rename from src/views/evaluate/components/addDialog.vue
rename to src/views/evaluate/components/addIndividualTask.vue
index d8c13e5..7e98c76 100644
--- a/src/views/evaluate/components/addDialog.vue
+++ b/src/views/evaluate/components/addIndividualTask.vue
@@ -1,11 +1,11 @@
<template>
<el-dialog v-model="params.visible" :title="params.title" width="50%" @close="dialogClose">
<div class="content">
- <el-form :model="form" ref="formRef" :rules="rules" label-width="120px" label-position="top">
- <el-form-item label="任务名称:" prop="taskName">
+ <el-form :model="form" ref="formRef" :rules="rules" label-position="top">
+ <el-form-item label="任务名称" prop="taskName">
<el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
</el-form-item>
- <el-form-item label="任务类别:" prop="taskType">
+ <el-form-item label="任务类别" prop="taskType">
<ul class="type-list">
<li class="type-item">
<div class="title">类别</div>
@@ -38,15 +38,15 @@
</li>
</ul>
</el-form-item>
- <el-form-item label="第一轮任务结束时间:" required>
+ <el-form-item label="第一轮任务结束时间" required>
<el-form-item class="time-box" prop="candidateCutoffTimeStart">
<el-date-picker v-model="form.candidateCutoffTimeStart" type="datetime" placeholder="请选择任务开始时间"
- style="width: 100%;" />
+ value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
</el-form-item>
<span class="time-span">至</span>
<el-form-item class="time-box" prop="candidateCutoffTimeEnd">
<el-date-picker v-model="form.candidateCutoffTimeEnd" type="datetime" placeholder="请选择任务结束时间"
- style="width: 100%;" />
+ value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
</el-form-item>
</el-form-item>
</el-form>
@@ -86,9 +86,8 @@
default: () => {
return {
visible: false,
- title: '新增',
+ title: '添加个人评优任务',
isEdit: false,
- type: 0,
addForm: {},
};
},
diff --git a/src/views/evaluate/components/addSectionTask.vue b/src/views/evaluate/components/addSectionTask.vue
new file mode 100644
index 0000000..54669e0
--- /dev/null
+++ b/src/views/evaluate/components/addSectionTask.vue
@@ -0,0 +1,132 @@
+<template>
+ <el-dialog v-model="params.visible" :title="params.title" width="50%" @close="dialogClose">
+ <div class="content">
+ <el-form :model="form" ref="formRef" :rules="rules" label-width="130px">
+ <el-form-item label="任务名称" prop="taskName">
+ <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
+ </el-form-item>
+ <el-form-item label="评优奖项" prop="awards">
+ <el-input v-model="form.awards" placeholder="请输入评优奖项"></el-input>
+ </el-form-item>
+ <el-form-item label="认定标准描述" prop="remark">
+ <el-input v-model="form.remark" type="textarea" placeholder="请输入认定标准描述"></el-input>
+ </el-form-item>
+ <el-form-item label="投票人员" prop="employees">
+ <el-checkbox-group v-model="form.employees">
+ <el-checkbox v-for="item in employeeDict" :key="item.id" :label="item.dictKey">
+ {{ item.dictValue }}
+ </el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ <el-form-item label="投票时间" required>
+ <el-form-item class="time-box" prop="candidateCutoffTimeStart">
+ <el-date-picker v-model="form.candidateCutoffTimeStart" type="datetime" placeholder="请选择任务开始时间"
+ style="width: 100%;" />
+ </el-form-item>
+ <span class="time-span">至</span>
+ <el-form-item class="time-box" prop="candidateCutoffTimeEnd">
+ <el-date-picker v-model="form.candidateCutoffTimeEnd" type="datetime" placeholder="请选择任务结束时间"
+ style="width: 100%;" />
+ </el-form-item>
+ </el-form-item>
+ </el-form>
+ </div>
+ <template #footer>
+ <el-button @click="() => params.visible = false">取消</el-button>
+ <el-button type="primary" @click="submit">确定</el-button>
+ </template>
+ </el-dialog>
+</template>
+
+<script>
+import { getDict } from '@/api/dict'
+import _ from 'lodash';
+
+export default {
+ props: {
+ params: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ title: '新增部门评优任务',
+ isEdit: false,
+ addForm: {},
+ };
+ },
+ },
+ },
+ data() {
+ return {
+ form: {
+ taskName: '',
+ awards: '',
+ remark: '',
+ employees: [],
+ candidateCutoffTimeStart: '',
+ candidateCutoffTimeEnd: ''
+ },
+ rules: {
+ taskName: [
+ { required: true, message: '请输入任务名称', trigger: 'click' },
+ ],
+ awards: [
+ { required: true, message: '请输入评优奖项', trigger: 'click' },
+ ],
+ remark: [
+ { required: true, message: '请输入认定标准', trigger: 'click' },
+ ],
+ employees: [
+ { required: true, message: '请选择评定人员', trigger: 'click' },
+ ],
+ candidateCutoffTimeStart: [
+ { required: true, message: '请选择任务开始时间', trigger: 'click' },
+ ],
+ candidateCutoffTimeEnd: [
+ { required: true, message: '请选择任务开始时间', trigger: 'click' },
+ ]
+ },
+ employeeDict: []
+ }
+ },
+ methods: {
+ dialogClose() {
+ this.$refs.formRef.resetFields()
+ },
+ submit() {
+ this.$refs.formRef.validate(vaild => {
+ console.log(this.form);
+ })
+ },
+ initDict() {
+ getDict('employee_type').then(res => {
+ const { code, data } = res.data
+ if (code !== 200) {
+ return this.$message.error('人员类型字典加载失败')
+ }
+ this.employeeDict = data
+ })
+ }
+ },
+ mounted() {
+ this.initDict()
+ }
+};
+</script>
+
+<style lang="scss" scoped>
+$borderColor: var(--el-border-color);
+
+.content {
+ max-height: 400px;
+ overflow-y: auto;
+
+ .time-span {
+ margin: 0 10px;
+ }
+
+ .time-box {
+ width: calc(100% / 2 - 20px);
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/evaluate/components/selectAssessor.vue b/src/views/evaluate/components/selectAssessor.vue
deleted file mode 100644
index f2e0e2e..0000000
--- a/src/views/evaluate/components/selectAssessor.vue
+++ /dev/null
@@ -1,226 +0,0 @@
-<template>
- <el-dialog v-model="props.params.visible" title="添加评选人" @close="dialogClose">
- <div style="margin-bottom: 20px;" v-if="!form.deptId">
- <el-alert title="请先选择部门信息" type="warning" />
- </div>
- <el-form :model="form" ref="formRef" :rules="rules" label-width="70px">
- <el-row>
- <el-col :span="12">
- <el-form-item label="部门" prop="deptId">
- <el-cascader v-model="form.deptId" :props="cascaderProps" placeholder="请选择部门" @change="deptChange" style="width: 100%;" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="评定人" prop="userId">
- <el-select v-model="form.userId" placeholder="请选择评选人"
- :disabled="userSelectOption.length > 0 ? false : true" @change="userSelectChange"
- style="width: 100%;">
- <el-option v-for="item in userSelectOption" :label="item.name" :key="item.id"
- :value="item.id" />
- <div class="loading-more" @click="loadMore">{{ loadingMoreText }}</div>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="职务">
- <el-input v-model="form.postName" placeholder="请填写职务" disabled />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <el-button @click="() => props.params.visible = false">取消</el-button>
- <el-button type="primary" @click="submit">确定</el-button>
- </template>
- </el-dialog>
-</template>
-
-<script setup>
-import { computed, markRaw, reactive, ref, watch } from 'vue';
-import { getDeptLazyTree } from '@/api/system/dept.js'
-import { getList } from '@/api/system/user.js'
-import { addAssessorSubmit } from '@/api/evaluate/evaluateTask'
-import { ElMessage } from 'element-plus';
-
-const props = defineProps({
- params: {
- type: Object,
- default: () => {
- return {
- visible: false,
- evaluateCandidateId: ''
- }
- }
- },
-})
-
-const emits = defineEmits(['refresh'])
-
-const formRef = ref(null)
-
-const form = reactive({
- userId: '',
- userName: '',
- deptId: '',
- deptName: '',
- postName: ''
-})
-
-const rules = markRaw({
- userId: [
- {
- required: true,
- message: '请选择候选人',
- trigger: 'click',
- }
- ],
- deptId: [
- {
- required: true,
- message: '请选择部门',
- trigger: 'click',
- }
- ]
-})
-
-const requestParams = reactive({
- evaluateCandidateId: '',
- userId: '',
- userName: '',
- deptId: '',
- deptName: '',
- postName: ''
-})
-
-// 当前部门
-const currentDeptId = ref('')
-
-// options 数据
-const userSelectOption = ref([])
-
-// 懒加载
-const isOptionsLoading = ref(false)
-
-const loadingMoreText = computed(() => {
- if (userSelectOption.value.length >= page.total) {
- return '数据已全部加载完成'
- }
- if (isOptionsLoading.value) {
- return '加载中...'
- }
- if (!isOptionsLoading.value) {
- return '点击加载更多'
- }
-})
-// 分页
-const page = reactive({
- current: 1,
- size: 10,
- total: 0
-})
-
-const loadMore = async () => {
- isOptionsLoading.value = true
- page.current += 1
- const res = await initUserList(currentDeptId.value)
- userSelectOption.value = [...userSelectOption.value, ...res]
- isOptionsLoading.value = false
-}
-
-// 初始化部门数据
-const initDept = async (parentId) => {
- const deptResult = await getDeptLazyTree(parentId)
- return deptResult.data.data
-}
-
-// 初始化用户列表
-const initUserList = (deptId) => {
- return getList(
- page.current,
- page.size,
- {
- userType: 2,
- },
- deptId,
- ).then(res => {
- page.total = res.data.data.total
- return res.data.data.records
- })
-}
-
-// 选择部门改变
-const deptChange = async (value) => {
- const id = value[value.length - 1]
- currentDeptId.value = id
- const userList = await initUserList(id)
- userSelectOption.value = userList
-}
-
-// 级联配置
-const cascaderProps = {
- lazy: true,
- label: 'title',
- value: 'id',
- multiple: false,
- lazyLoad: async (node, resovle) => {
- const level = node.level || 0
- if (level == 0) {
- const res = await initDept(level)
- resovle(res)
- } else {
- const { value } = node
- const res = await initDept(value)
- resovle(res)
- }
- },
- leaf(node) {
- const { hasChildren } = node
- return !hasChildren
- }
-}
-
-const userSelectChange = (value) => {
- const obj = userSelectOption.value.find(item => item.id == value)
- const { id, deptName, deptId, postName, realName } = obj
- requestParams.userId = id
- requestParams.deptId = deptId
- requestParams.userName = realName
- requestParams.deptName = deptName
- requestParams.postName = postName
-
- form.deptName = deptName
- form.postName = postName
-}
-
-const submit = () => {
- formRef.value.validate(valid => {
- console.log(requestParams);
- if (!valid) return ElMessage.error('添加评选人失败')
- addAssessorSubmit(requestParams).then(res => {
- ElMessage.success('添加评选人成功')
- props.params.visible = false
- emits('refresh')
- }, error => {
- ElMessage.error(error)
- })
- })
-}
-
-const dialogClose = () => {
- formRef.value.resetFields()
-}
-
-watch(() => props.params.visible, (val) => {
- if (!val) return
- requestParams.evaluateCandidateId = props.params.evaluateCandidateId
-}, {
- deep: true
-})
-</script>
-
-<style lang="scss" scoped>
-.loading-more {
- text-align: center;
- cursor: pointer;
-}
-</style>
\ No newline at end of file
diff --git a/src/views/evaluate/components/taskPublic.vue b/src/views/evaluate/components/taskPublic.vue
deleted file mode 100644
index 2510a81..0000000
--- a/src/views/evaluate/components/taskPublic.vue
+++ /dev/null
@@ -1,196 +0,0 @@
-<template>
- <el-drawer v-model="props.params.visible" open="openDrawer" direction="rtl" size="50%">
- <template #header>
- <div class="title">评优任务发布</div>
- </template>
- <div class="content">
- <el-descriptions :column="2" border>
- <el-descriptions-item label="任务名称">
- {{ props.params.data.taskName }}
- </el-descriptions-item>
- <el-descriptions-item label="任务类别">
- {{ props.params.data.taskType }}
- </el-descriptions-item>
- <el-descriptions-item label="评定描述">
- {{ props.params.data.remark }}
- </el-descriptions-item>
- </el-descriptions>
- <el-collapse v-model="activeNames" @change="handleChange">
- <el-collapse-item title="候选详情人" name="1">
- <avue-crud :data="table.data" :option="option" v-model:page="table.page" @refresh-change="refreshChange"></avue-crud>
- </el-collapse-item>
- <el-collapse-item title="添加候选人" name="2">
- <avue-crud :data="table.data" :option="option" v-model:page="table.page" @refresh-change="refreshChange"></avue-crud>
- </el-collapse-item>
- </el-collapse>
- </div>
- </el-drawer>
-</template>
-
-<script setup>
-import { getCandidateList } from '@/api/evaluate/evaluateTask';
-import { ref, watch } from 'vue';
-
-const props = defineProps({
- params: {
- type: Object,
- default: () => {
- return {
- visible: false,
- data: {}
- }
- }
- }
-})
-
-const type = inject('type')
-
-const activeNames = ref([])
-
-const taskData = ref({})
-
-const table = reactive({
- data: [],
- page: {
- current: 1,
- size: 10,
- total: 10
- }
-})
-
-const candidatesOptions = markRaw({
- height: '300',
- calcHeight: 30,
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- viewBtn: false,
- addBtn: false,
- editBtn: false,
- delBtn: false,
- selection: false,
- dialogClickModal: false,
- menuFixed: 'right',
- labelWidth: '70',
- header: false,
- column: [
- {
- label: '任务id',
- prop: 'evaluateTaskId',
- type: 'input',
- hide: true,
- },
- {
- label: '任务名称',
- prop: 'evaluateTaskName',
- type: 'input'
- },
- {
- label: '候选人id',
- prop: 'userId',
- type: 'input',
- hide: true,
- },
- {
- label: '候选人姓名',
- prop: 'userName',
- type: 'input'
- },
- {
- label: '部门id',
- prop: 'deptId',
- type: 'input',
- hide: true,
- },
- {
- label: '部门名称',
- prop: 'deptName',
- type: 'input'
- },
- {
- label: '职位名称',
- prop: 'postName',
- type: 'input'
- }
- ]
-})
-
-const setcionOptions = markRaw({
- height: '300',
- calcHeight: 30,
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- viewBtn: false,
- addBtn: false,
- editBtn: false,
- delBtn: false,
- selection: false,
- dialogClickModal: false,
- menuFixed: 'right',
- labelWidth: '70',
- column: [
- {
- label: '任务id',
- prop: 'evaluateTaskId',
- type: 'input',
- hide: true,
- },
- {
- label: '任务名称',
- prop: 'evaluateTaskName',
- type: 'input'
- },
- {
- label: '部门id',
- prop: 'deptId',
- type: 'input',
- hide: true,
- },
- {
- label: '部门名称',
- prop: 'deptName',
- type: 'input'
- },
- ]
-})
-
-const option = computed(() => type() ? setcionOptions : candidatesOptions)
-
-const handleChange = () => {
-
-}
-
-const openDrawer = () => {
-
-}
-
-const initCandidates = async () => {
- const { current, size } = table.page
- console.log(current, size);
- const res = await getCandidateList(current, size)
- console.log(res);
- // taskData.value = res
-}
-
-watch(() => props.params.visible, val => {
- if (val) {
- initCandidates()
- }
-})
-
-</script>
-
-<style lang="scss" scoped>
-.title {
- border-left: 3px solid #409eff;
- padding-left: 10px;
-}
-
-.content {
-}
-</style>
\ No newline at end of file
diff --git a/src/views/evaluate/components/taskSetting.vue b/src/views/evaluate/components/taskSetting.vue
deleted file mode 100644
index ee062c9..0000000
--- a/src/views/evaluate/components/taskSetting.vue
+++ /dev/null
@@ -1,218 +0,0 @@
-<template>
- <el-dialog v-model="props.params.visible" :title="`${taskParams.evaluateTaskName}-${curType ? '部门列表' : '候选人列表'}`" width="60%" destroy-on-close
- align-center>
- <avue-crud :data="table.data" :option="option" v-model:page="table.page" @refresh-change="refreshChange">
- <template #menu-left>
- <el-button type="primary" icon="el-icon-plus" @click="addCandidateDialog">
- {{ curType? '添加部门' : '添加候选人' }}
- </el-button>
- </template>
- <template #menu="{ row }">
- <el-button type="primary" icon="el-icon-plus" text plain @click="addAssessor(row)">添加评定人</el-button>
- <el-popconfirm width="200px" title="是否删除当前候选人?" @confirm="rowDel(row)">
- <template #reference>
- <el-button type="danger" icon="el-icon-delete" text plain>删除</el-button>
- </template>
- </el-popconfirm>
- </template>
- </avue-crud>
- <addCandidate v-model:dialogParams="dialogParams" @refresh="refreshChange" />
- <addAssessors v-model:params="dialogAssessorParams" @refresh="refreshChange" />
- </el-dialog>
-</template>
-
-<script setup>
-import addCandidate from './addCandidate.vue';
-import addAssessors from './addAssessors.vue';
-import { computed, inject, markRaw, reactive, watch } from 'vue';
-import { getCandidateList, removeCandidate } from '@/api/evaluate/evaluateTask'
-import { ElMessage } from 'element-plus';
-
-const dialogParams = reactive({
- visible: false,
- taskParams: {}
-})
-
-const type = inject('type')
-
-const props = defineProps({
- params: {
- type: Object,
- default: () => ({
- visible: false,
- task: {}
- }),
- },
-})
-
-const candidatesOptions = markRaw({
- height: '400',
- calcHeight: 30,
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- viewBtn: false,
- addBtn: false,
- editBtn: false,
- delBtn: false,
- selection: false,
- dialogClickModal: false,
- menuFixed: 'right',
- labelWidth: '70',
- column: [
- {
- label: '任务id',
- prop: 'evaluateTaskId',
- type: 'input',
- hide: true,
- },
- {
- label: '任务名称',
- prop: 'evaluateTaskName',
- type: 'input'
- },
- {
- label: '候选人id',
- prop: 'userId',
- type: 'input',
- hide: true,
- },
- {
- label: '候选人姓名',
- prop: 'userName',
- type: 'input'
- },
- {
- label: '部门id',
- prop: 'deptId',
- type: 'input',
- hide: true,
- },
- {
- label: '部门名称',
- prop: 'deptName',
- type: 'input'
- },
- {
- label: '职位名称',
- prop: 'postName',
- type: 'input'
- }
- ]
-})
-
-const setcionOptions = markRaw({
- height: '400',
- calcHeight: 30,
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- viewBtn: false,
- addBtn: false,
- editBtn: false,
- delBtn: false,
- selection: false,
- dialogClickModal: false,
- menuFixed: 'right',
- labelWidth: '70',
- column: [
- {
- label: '任务id',
- prop: 'evaluateTaskId',
- type: 'input',
- hide: true,
- },
- {
- label: '任务名称',
- prop: 'evaluateTaskName',
- type: 'input'
- },
- {
- label: '部门id',
- prop: 'deptId',
- type: 'input',
- hide: true,
- },
- {
- label: '部门名称',
- prop: 'deptName',
- type: 'input'
- },
- ]
-})
-
-const option = computed(() => type() ? setcionOptions : candidatesOptions)
-
-const table = reactive({
- data: [],
- page: {
- current: 1,
- size: 10,
- total: 0
- }
-})
-
-const taskParams = reactive({
- evaluateTaskId: '',
- evaluateTaskName: '',
-})
-
-const addCandidateDialog = () => {
- dialogParams.visible = true
- dialogParams.taskParams = taskParams
-}
-
-const initTableData = () => {
- const { current, size } = table.page
- getCandidateList(current, size, { evaluateTaskId: taskParams.evaluateTaskId }).then(res => {
- const resultData = res.data.data
- table.data = resultData.records
- table.page.total = resultData.total
- })
-}
-
-const refreshChange = () => {
- table.data = [],
- table.page.total = 0
- initTableData()
-}
-
-const dialogAssessorParams = reactive({
- visible: false,
- taskInfo: {},
- candidateInfo: {}
-})
-
-const curType = computed(() => type())
-
-const addAssessor = (row) => {
- dialogAssessorParams.visible = true
- dialogAssessorParams.taskInfo = taskParams
- dialogAssessorParams.candidateInfo = row
-}
-
-const rowDel = (row) => {
- removeCandidate(row.id).then(res => {
- ElMessage.success('删除候选人成功')
- refreshChange()
- }, error => {
- ElMessage.error(error)
- })
-}
-
-watch(() => props.params.visible, (val) => {
- if (!val) return
- const { id, taskName } = props.params.task
- taskParams.evaluateTaskId = id
- taskParams.evaluateTaskName = taskName
- initTableData()
-}, {
- deep: true
-})
-</script>
-
-<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/evaluate/evaluateTask.vue b/src/views/evaluate/evaluateTask.vue
index 83ab08b..e932947 100644
--- a/src/views/evaluate/evaluateTask.vue
+++ b/src/views/evaluate/evaluateTask.vue
@@ -5,7 +5,8 @@
: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">
+ @refresh-change="refreshChange" >
+ <!-- @on-load="onLoad" -->
<template #candidateCutoffTimeEnd="{ row }">
{{ row.candidateCutoffTimeStart || '开始时间未完善' }}
<div style="text-align: center;">-</div>
@@ -17,30 +18,21 @@
{{ row.candidateCutoffTimeEnd || '结束时间未完善' }}
</template>
<template #menu-left>
- <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+ <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增评优任务</el-button>
<el-button type="danger" icon="el-icon-delete" plain v-if="permission.evaluateTask_delete"
@click="handleDelete">删除</el-button>
<!-- <el-button type="warning" plain icon="el-icon-download" @click="handleExport">导出</el-button> -->
</template>
<template #menu="{ size, row, index }">
- <el-button type="primary" text plain icon="el-icon-setting" @click="taskSettingDialog(row)">任务配置</el-button>
<el-button type="primary" text plain icon="el-icon-view" @click="viewDateilDialog(row)">详情</el-button>
- <!-- <el-button type="primary" text plain icon="el-icon-edit" @click="editDialog(row)">编辑</el-button> -->
- <!-- v-if="row.candidateState === 2 && row.evaluateState === 0" -->
- <el-button type="primary" text plain icon="el-icon-position" @click="taskPublicHandler(row)"
- >发布</el-button>
- <!-- <el-button type="primary" text plain icon="el-icon-download">导出</el-button> -->
<el-button type="danger" text plain icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
</template>
</avue-crud>
- <!-- 新增编辑弹窗 -->
- <add-dialog :params="addParams" @refreshTable="this.onLoad" />
- <!-- 候选人添加及配置 -->
- <task-setting :params="taskSettingParams" />
+ <!-- 新增个人评优任务弹窗 -->
+ <addIndividualTask :params="addIndividualParams" @refreshTable="this.onLoad" />
+ <addSectionTask :params="addSectionParams" @refreshTable="this.onLoad" />
<!-- 预览 -->
<viewEvaluateDetail :params="viewEvaluateDetailParams" />
- <!-- 发布 -->
- <taskPublic :params="taskPublicParams"></taskPublic>
</basic-container>
</template>
@@ -54,17 +46,15 @@
import { dateNow } from '@/utils/date';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
-import addDialog from './components/addDialog.vue';;
+import addIndividualTask from './components/addIndividualTask.vue';
+import addSectionTask from './components/addSectionTask.vue';
import viewEvaluateDetail from './components/viewEvaluateDetail.vue';
-import taskSetting from './components/taskSetting.vue';
-import taskPublic from './components/taskPublic.vue';
export default {
components: {
- addDialog,
- taskSetting,
- viewEvaluateDetail,
- taskPublic
+ addIndividualTask,
+ addSectionTask,
+ viewEvaluateDetail
},
data() {
return {
@@ -81,8 +71,8 @@
selectionList: [],
option: option,
data: [],
- isAddDialogVisible: false,
- addParams: {},
+ addIndividualParams: {},
+ addSectionParams: {},
viewParams: {},
depts: [],
// 考核结果参数
@@ -99,12 +89,8 @@
},
],
},
- // 任务设置参数
- taskSettingParams: {},
// 信息预览弹窗
viewEvaluateDetailParams: {},
- // 发布
- taskPublicParams: {},
};
},
watch: {
@@ -118,7 +104,7 @@
// 更改option
!n ? (this.option = option) : (this.option = sectionOption)
this.page.currentPage = 1;
- this.onLoad(this.page, params);
+ // this.onLoad(this.page, params);
},
immediate: true,
},
@@ -143,13 +129,17 @@
},
methods: {
handleAdd() {
- this.addParams = {
+ if (!this.defaultTaskType) {
+ this.addIndividualParams = {
+ visible: true,
+ title: '添加个人评优任务'
+ }
+ return
+ }
+ this.addSectionParams = {
visible: true,
- title: '添加',
- isEdit: false,
- type: this.defaultTaskType,
- addForm: {},
- };
+ title: '添加部门评优任务'
+ }
},
rowSave(row, done, loading) {
add(row).then(
@@ -166,17 +156,6 @@
window.console.log(error);
}
);
- },
- editDialog(row) {
- this.addParams = {
- visible: true,
- title: '编辑',
- isEdit: true,
- type: this.defaultTaskType,
- addForm: {
- ...row,
- },
- };
},
viewDateilDialog(row) {
this.viewEvaluateDetailParams = {
@@ -325,19 +304,6 @@
},
tabChange(value) {
this.defaultTaskType = value.prop;
- },
- taskSettingDialog(row) {
- this.taskSettingParams = {
- visible: true,
- type: this.defaultTaskType,
- task: row
- }
- },
- taskPublicHandler(row) {
- this.taskPublicParams = {
- visible: true,
- data: row
- }
}
},
provide() {
--
Gitblit v1.9.3