From 42dfeb9667d4f367f1bd8cc1e01e00f3173c8418 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Thu, 04 Jan 2024 17:33:42 +0800
Subject: [PATCH] 新增弹窗

---
 src/views/evaluate/components/IndividualTaskPublic.vue |  188 +++++++++++++++++++++++++++++++++++++++++++++++
 src/views/evaluate/evaluateTask.vue                    |   24 ++++-
 src/views/evaluate/components/addSectionTask.vue       |    8 +-
 3 files changed, 209 insertions(+), 11 deletions(-)

diff --git a/src/views/evaluate/components/IndividualTaskPublic.vue b/src/views/evaluate/components/IndividualTaskPublic.vue
new file mode 100644
index 0000000..fe04100
--- /dev/null
+++ b/src/views/evaluate/components/IndividualTaskPublic.vue
@@ -0,0 +1,188 @@
+<template>
+    <el-dialog v-model="params.visible" title="评优任务发布" width="50%" @open="openDialog" @close="dialogClose">
+        <div class="content">
+            <el-form :model="form" ref="formRef" :rules="rules" label-position="top">
+                <el-form-item label="任务类别" prop="taskType">
+                    <ul class="type-list">
+                        <li class="type-item">
+                            <div class="title">类别</div>
+                            <div class="introduction">认定标准</div>
+                            <div class="number">名额</div>
+                            <div class="tool">操作</div>
+                        </li>
+                        <li class="type-item" v-for="(item, index) in form.taskType" :key="index">
+                            <div class="title">{{ item.title }}</div>
+                            <el-tooltip effect="dark" placement="top">
+                                <template #content>
+                                    <p style="width: 500px;">{{ item.introduction }}</p>
+                                </template>
+                                <div class="introduction">
+                                    {{ item.introduction }}
+                                </div>
+                            </el-tooltip>
+
+                            <div class="number">{{ item.number }}</div>
+                            <div class="tool">
+                               <el-button type="primary" icon="el-icon-plus" text>添加候选人</el-button>
+                            </div>
+                        </li>
+                    </ul>
+                </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="请选择任务开始时间"
+                            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="请选择任务结束时间"
+                            value-format="YYYY-MM-DD HH:mm:ss" 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">确定发布</el-button>
+        </template>
+    </el-dialog>
+</template>
+
+<script>
+import _ from 'lodash';
+import { getDict } from '@/api/dict'
+
+export default {
+    props: {
+        params: {
+            type: Object,
+            default: () => {
+                return {
+                    visible: false,
+                    data: {}
+                };
+            },
+        },
+    },
+    data() {
+        return {
+            employeeDict: [],
+            form: {
+                taskType: [],
+                employees: [],
+                candidateCutoffTimeStart: '',
+                candidateCutoffTimeEnd: ''
+            },
+            rules: {
+                taskType: [
+                    { required: true, message: '任务类别不可为空', trigger: 'click' },
+                ],
+                employees: [
+                    { required: true, message: '请选择评定人员', trigger: 'click' },
+                ],
+                candidateCutoffTimeStart: [
+                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
+                ],
+                candidateCutoffTimeEnd: [
+                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
+                ]
+            }
+        }
+    },
+    methods: {
+        dialogClose() {
+            this.$refs.formRef.resetFields()
+        },
+        openDialog() {
+            this.initDict()
+        },
+        initDict() {
+            getDict('employee_type').then(res => {
+                const { code, data } = res.data
+                if (code !== 200) {
+                    return this.$message.error('人员类型字典加载失败')
+                }
+                this.employeeDict = data
+            })
+        }
+    }
+};
+</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);
+    }
+
+    .type-list {
+        margin: 0;
+        padding: 0;
+        list-style-type: none;
+        width: 100%;
+        border: 1px solid $borderColor;
+        border-radius: var(--el-border-radius-base);
+        box-sizing: border-box;
+
+        .type-item {
+            display: flex;
+            height: 40px;
+            line-height: 40px;
+            text-align: center;
+
+            div {
+                border-bottom: 1px solid $borderColor;
+                flex-shrink: 0;
+                white-space: nowrap;
+                overflow: hidden;
+                text-overflow: ellipsis;
+            }
+
+            .title {
+                flex: 2;
+            }
+
+            .introduction {
+                flex: 5;
+                flex-shrink: 0;
+
+                border: {
+                    right: 1px solid $borderColor;
+                    left: 1px solid $borderColor;
+                }
+            }
+
+            .number {
+                flex: 1;
+            }
+
+            .tool {
+                flex: 2;
+                border-left: 1px solid $borderColor;
+            }
+
+            &:last-child {
+                div {
+                    border-bottom: 0;
+                }
+            }
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/evaluate/components/addSectionTask.vue b/src/views/evaluate/components/addSectionTask.vue
index 54669e0..6e61728 100644
--- a/src/views/evaluate/components/addSectionTask.vue
+++ b/src/views/evaluate/components/addSectionTask.vue
@@ -1,5 +1,5 @@
 <template>
-    <el-dialog v-model="params.visible" :title="params.title" width="50%" @close="dialogClose">
+    <el-dialog v-model="params.visible" :title="params.title" width="50%" @open="openDialog" @close="dialogClose">
         <div class="content">
             <el-form :model="form" ref="formRef" :rules="rules" label-width="130px">
                 <el-form-item label="任务名称" prop="taskName">
@@ -93,6 +93,9 @@
         dialogClose() {
             this.$refs.formRef.resetFields()
         },
+        openDialog() {
+            this.initDict()
+        },
         submit() {
             this.$refs.formRef.validate(vaild => {
                 console.log(this.form);
@@ -107,9 +110,6 @@
                 this.employeeDict = data
             })
         }
-    },
-    mounted() {
-        this.initDict()
     }
 };
 </script>
diff --git a/src/views/evaluate/evaluateTask.vue b/src/views/evaluate/evaluateTask.vue
index e932947..36e4c07 100644
--- a/src/views/evaluate/evaluateTask.vue
+++ b/src/views/evaluate/evaluateTask.vue
@@ -5,17 +5,16 @@
       :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 || '开始时间未完善' }}
+        {{ row.candidateCutoffTimeStart}}
         <div style="text-align: center;">-</div>
-        {{ row.candidateCutoffTimeEnd || '结束时间未完善' }}
+        {{ row.candidateCutoffTimeEnd}}
       </template>
       <template #evaluateCutoffTimeEnd="{ row }">
-        {{ row.evaluateCutoffTimeStart || '开始时间未完善' }}
+        {{ row.evaluateCutoffTimeStart}}
         <div style="text-align: center;">-</div>
-        {{ row.candidateCutoffTimeEnd || '结束时间未完善' }}
+        {{ row.candidateCutoffTimeEnd}}
       </template>
       <template #menu-left>
         <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增评优任务</el-button>
@@ -25,12 +24,15 @@
       </template>
       <template #menu="{ size, row, index }">
         <el-button type="primary" text plain icon="el-icon-view" @click="viewDateilDialog(row)">详情</el-button>
+        <el-button type="primary" text plain icon="el-icon-send" @click="taskPublicDialog(row)">发布</el-button>
         <el-button type="danger" text plain icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
       </template>
     </avue-crud>
     <!-- 新增个人评优任务弹窗 -->
     <addIndividualTask :params="addIndividualParams" @refreshTable="this.onLoad" />
     <addSectionTask :params="addSectionParams" @refreshTable="this.onLoad" />
+    <!-- 发布 -->
+    <individualTaskPublic :params="taskPublicParams" @refreshTable="this.onLoad" />
     <!-- 预览 -->
     <viewEvaluateDetail :params="viewEvaluateDetailParams" />
   </basic-container>
@@ -49,11 +51,13 @@
 import addIndividualTask from './components/addIndividualTask.vue';
 import addSectionTask from './components/addSectionTask.vue';
 import viewEvaluateDetail from './components/viewEvaluateDetail.vue';
+import individualTaskPublic from './components/IndividualTaskPublic.vue';
 
 export default {
   components: {
     addIndividualTask,
     addSectionTask,
+    individualTaskPublic,
     viewEvaluateDetail
   },
   data() {
@@ -74,7 +78,6 @@
       addIndividualParams: {},
       addSectionParams: {},
       viewParams: {},
-      depts: [],
       // 考核结果参数
       defaultTaskType: 0,
       taskTypeList: {
@@ -91,6 +94,7 @@
       },
       // 信息预览弹窗
       viewEvaluateDetailParams: {},
+      taskPublicParams: {}
     };
   },
   watch: {
@@ -164,6 +168,12 @@
         data: row
       }
     },
+    taskPublicDialog(row) {
+      this.taskPublicParams = {
+        visible: true,
+        data: row
+      }
+    },
     rowUpdate(row, index, done, loading) {
       update(row).then(
         () => {

--
Gitblit v1.9.3