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