From 0a8bebe2edbb55eab98e3559eedf5303a417b73c Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Thu, 22 Feb 2024 16:47:42 +0800
Subject: [PATCH] 更新权限配置批量导入数据

---
 src/views/assessment/components/assessmentWeight.vue      |  300 ++++++--
 src/api/assessment/assessmentConfig.js                    |    8 
 public/excel/中图员工考核导入模板表.xlsx                             |    0 
 src/views/assessment/assessmentConfig.vue                 |  582 ++++++++++++-----
 src/views/assessment/components/assessmentTaskSetting.vue |    1 
 src/option/assessment/assessmentConfig.js                 |  204 ++---
 src/views/assessment/components/popoverTable.vue          |    4 
 src/views/assessment/components/addWeight.vue             |   23 
 src/views/assessment/assessmentTask.vue                   |  785 +++++++++++-------------
 9 files changed, 1,099 insertions(+), 808 deletions(-)

diff --git "a/public/excel/\344\270\255\345\233\276\345\221\230\345\267\245\350\200\203\346\240\270\345\257\274\345\205\245\346\250\241\346\235\277\350\241\250.xlsx" "b/public/excel/\344\270\255\345\233\276\345\221\230\345\267\245\350\200\203\346\240\270\345\257\274\345\205\245\346\250\241\346\235\277\350\241\250.xlsx"
new file mode 100644
index 0000000..76521f5
--- /dev/null
+++ "b/public/excel/\344\270\255\345\233\276\345\221\230\345\267\245\350\200\203\346\240\270\345\257\274\345\205\245\346\250\241\346\235\277\350\241\250.xlsx"
Binary files differ
diff --git a/src/api/assessment/assessmentConfig.js b/src/api/assessment/assessmentConfig.js
index 3db26fe..f65219c 100644
--- a/src/api/assessment/assessmentConfig.js
+++ b/src/api/assessment/assessmentConfig.js
@@ -48,3 +48,11 @@
   })
 }
 
+export const getAssessors  = (userId) => {
+  return request({
+    url: `/assessment/assessmentConfig/list/${userId}`,
+    method: 'get',
+    // data: row
+  })
+}
+
diff --git a/src/option/assessment/assessmentConfig.js b/src/option/assessment/assessmentConfig.js
index 8cfbb30..2471b50 100644
--- a/src/option/assessment/assessmentConfig.js
+++ b/src/option/assessment/assessmentConfig.js
@@ -1,5 +1,5 @@
-export default {
-  height:'auto',
+const option = {
+  height: 'auto',
   calcHeight: 30,
   tip: false,
   searchShow: true,
@@ -9,147 +9,133 @@
   viewBtn: true,
   selection: true,
   dialogClickModal: false,
+  labelWidth: 130,
   column: [
     {
-      label: "主键",
-      prop: "id",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
-    },
-    {
-      label: "租户ID",
-      prop: "tenantId",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
-    },
-    {
       label: "被考核人",
-      prop: "userId",
-      type: "input",
-    },
-    {
-      label: "被考核人名称",
       prop: "userName",
-      type: "input",
+      type: "cascader",
+      expandTrigger: 'click',
+      dicData: [],
+      props: {
+        label: 'title',
+        value: 'id',
+        children: 'children'
+      },
+      lazy: true,
+      lazyLoad: (node, resolve) => {},
+      change: () => {},
+      emitPath: false,
+      showAllLevels: false,
+      rules: [
+        {
+          required: true,
+          message: '请选择被考核人',
+          trigger: 'click',
+        },
+      ],
     },
     {
-      label: "被考核人部门id",
-      prop: "deptId",
-      type: "input",
-    },
-    {
-      label: "被考核人部门名称",
+      label: "被考核人部门",
       prop: "deptName",
       type: "input",
+      disabled: true,
+      rules: [
+        {
+          required: true,
+          message: '请选择考核人部门',
+          trigger: 'click',
+        },
+      ],
     },
     {
-      label: "被考核人职位名称",
+      label: "被考核人职位",
       prop: "postName",
       type: "input",
+      disabled: true,
+      rules: [
+        {
+          required: true,
+          message: '请选择被考核人职位',
+          trigger: 'click',
+        },
+      ],
     },
     {
       label: "考核人",
-      prop: "assessorUserId",
-      type: "input",
-    },
-    {
-      label: "考核人名称",
       prop: "assessorUserName",
-      type: "input",
+      type: "cascader",
+      expandTrigger: 'click',
+      dicData: [],
+      props: {
+        label: 'title',
+        value: 'id',
+        children: 'children'
+      },
+      lazy: true,
+      lazyLoad: (node, resolve) => {},
+      emitPath: false,
+      showAllLevels: false,
+      rules: [
+        {
+          required: true,
+          message: '请选择考核人',
+          trigger: 'click',
+        },
+      ],
     },
     {
-      label: "考核人部门id",
-      prop: "assessorDeptId",
-      type: "input",
-    },
-    {
-      label: "考核人部门名称",
+      label: "考核人部门",
       prop: "assessorDeptName",
       type: "input",
+      disabled: true,
+      rules: [
+        {
+          required: true,
+          message: '请选择被考核人部门',
+          trigger: 'click',
+        },
+      ],
     },
     {
-      label: "考核人职位名称",
+      label: "考核人职位",
       prop: "assessorPostName",
       type: "input",
+      disabled: true,
+      rules: [
+        {
+          required: true,
+          message: '请选择考核人职位',
+          trigger: 'click',
+        },
+      ],
     },
     {
       label: "权值",
       prop: "weight",
       type: "input",
+      rules: [
+        {
+          required: true,
+          message: '请输入权值',
+          trigger: 'click',
+        },
+      ],
     },
     {
       label: "范围",
       prop: "rangeVal",
       type: "input",
-    },
-    {
-      label: "创建人",
-      prop: "createUser",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
-    },
-    {
-      label: "创建部门",
-      prop: "createDept",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
-    },
-    {
-      label: "创建时间",
-      prop: "createTime",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
-    },
-    {
-      label: "修改人",
-      prop: "updateUser",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
-    },
-    {
-      label: "修改时间",
-      prop: "updateTime",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
-    },
-    {
-      label: "状态",
-      prop: "status",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
-    },
-    {
-      label: "是否已删除",
-      prop: "isDeleted",
-      type: "input",
-      addDisplay: false,
-      editDisplay: false,
-      viewDisplay: false,
-      hide: true,
+      rules: [
+        {
+          required: true,
+          message: '请输入范围',
+          trigger: 'click',
+        },
+      ],
     },
   ]
 }
+
+
+export default option
\ No newline at end of file
diff --git a/src/views/assessment/assessmentConfig.vue b/src/views/assessment/assessmentConfig.vue
index 1241ab4..a3a09f1 100644
--- a/src/views/assessment/assessmentConfig.vue
+++ b/src/views/assessment/assessmentConfig.vue
@@ -1,225 +1,431 @@
 <template>
   <basic-container>
-    <avue-crud :option="option"
-               v-model:search="search"
-               v-model:page="page"
-               v-model="form"
-               :table-loading="loading"
-               :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">
+    <avue-crud
+      :option="option"
+      v-model:search="search"
+      v-model:page="page"
+      v-model="form"
+      :table-loading="loading"
+      :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"
+    >
       <template #menu-left>
-        <el-button type="danger"
-                   icon="el-icon-delete"
-                   plain
-                   v-if="permission.assessmentConfig_delete"
-                   @click="handleDelete">删 除
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          plain
+          v-if="permission.assessmentConfig_delete"
+          @click="handleDelete"
+          >删 除
         </el-button>
-        <el-button type="warning"
-                   plain
-                   icon="el-icon-download"
-                   @click="handleExport">导 出
+        <el-button type="success" plain icon="el-icon-download" @click="handleImport">
+          权重导入
         </el-button>
       </template>
     </avue-crud>
+    <el-dialog title="权重数据导入" append-to-body v-model="excelBox" width="555px">
+      <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+        <template #excelTemplate>
+          <el-button type="primary" @click="handleTemplate">
+            点击下载<i class="el-icon-download el-icon--right"></i>
+          </el-button>
+        </template>
+      </avue-form>
+    </el-dialog>
   </basic-container>
 </template>
 
 <script>
-  import {getList, getDetail, add, update, remove} from "@/api/assessment/assessmentConfig";
-  import option from "@/option/assessment/assessmentConfig";
-  import {mapGetters} from "vuex";
-  import {exportBlob} from "@/api/common";
-  import {getToken} from '@/utils/auth';
-  import {downloadXls} from "@/utils/util";
-  import {dateNow} from "@/utils/date";
-  import NProgress from 'nprogress';
-  import 'nprogress/nprogress.css';
+import axios from 'axios';
+import _ from 'lodash'
+import { getList, getDetail, add, update, remove } from '@/api/assessment/assessmentConfig';
+import option from '@/option/assessment/assessmentConfig';
+import { mapGetters } from 'vuex';
+import { exportBlob } from '@/api/common';
+import { getToken } from '@/utils/auth';
+import { downloadXls } from '@/utils/util';
+import { dateNow } from '@/utils/date';
+import NProgress from 'nprogress';
+import 'nprogress/nprogress.css';
+import website from '@/config/website';
+import { getDeptTree, getDeptLazyTree } from '@/api/system/dept';
+import { getList as getUserList } from '@/api/system/user.js';
+import { copy } from '@/api/tool/code';
 
-  export default {
-    data() {
+export default {
+  data() {
+    return {
+      form: {},
+      query: {},
+      search: {},
+      loading: true,
+      excelBox: false,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+      },
+      selectionList: [],
+      option: option,
+      data: [],
+      excelForm: {},
+      excelOption: {
+        submitBtn: false,
+        emptyBtn: false,
+        column: [
+          {
+            label: '模板上传',
+            prop: 'excelFile',
+            type: 'upload',
+            drag: true,
+            loadText: '模板上传中,请稍等',
+            span: 24,
+            propsHttp: {
+              res: 'data',
+            },
+            tip: '请上传 .xls,.xlsx 标准格式文件',
+            action: '/assessment/assessmentConfig/import-assessmentConfig',
+          },
+          {
+            label: '数据覆盖',
+            prop: 'isCovered',
+            type: 'switch',
+            align: 'center',
+            width: 80,
+            dicData: [
+              {
+                label: '否',
+                value: 0,
+              },
+              {
+                label: '是',
+                value: 1,
+              },
+            ],
+            value: 0,
+            slot: true,
+            rules: [
+              {
+                required: true,
+                message: '请选择是否覆盖',
+                trigger: 'blur',
+              },
+            ],
+          },
+          {
+            label: '模板下载',
+            prop: 'excelTemplate',
+            formslot: true,
+            span: 24,
+          },
+        ],
+      },
+      userList: [],
+    };
+  },
+  watch: {
+    'excelForm.isCovered'() {
+      if (this.excelForm.isCovered !== '') {
+        const column = this.findObject(this.excelOption.column, 'excelFile');
+        column.action = `/assessment/assessmentConfig/import-assessmentConfig?isCovered=${this.excelForm.isCovered}`;
+      }
+    },
+    'form.userName': {
+      handler(newVal) {
+        if (!newVal || newVal === void 0 || newVal === '' || newVal.length === 0) return;
+        const data = this.userList.find(ele => ele.id === newVal);
+        this.form.deptName = data.deptName;
+        this.form.postName = data.postName;
+      },
+      deep: true,
+    },
+    'form.assessorUserName': {
+      handler(newVal) {
+        if (!newVal || newVal === void 0 || newVal === '' || newVal.length === 0) return;
+        const data = this.userList.find(ele => ele.id === newVal);
+        this.form.assessorDeptName = data.deptName;
+        this.form.assessorPostName = data.postName;
+      },
+      deep: true,
+    },
+  },
+  computed: {
+    ...mapGetters(['permission']),
+    permissionList() {
       return {
-        form: {},
-        query: {},
-        search: {},
-        loading: true,
-        page: {
-          pageSize: 10,
-          currentPage: 1,
-          total: 0
-        },
-        selectionList: [],
-        option: option,
-        data: []
+        addBtn: this.validData(this.permission.assessmentConfig_add, false),
+        viewBtn: this.validData(this.permission.assessmentConfig_view, false),
+        delBtn: this.validData(this.permission.assessmentConfig_delete, false),
+        editBtn: this.validData(this.permission.assessmentConfig_edit, false),
       };
     },
-    computed: {
-      ...mapGetters(["permission"]),
-      permissionList() {
-        return {
-          addBtn: this.validData(this.permission.assessmentConfig_add, false),
-          viewBtn: this.validData(this.permission.assessmentConfig_view, false),
-          delBtn: this.validData(this.permission.assessmentConfig_delete, false),
-          editBtn: this.validData(this.permission.assessmentConfig_edit, false)
-        };
-      },
-      ids() {
-        let ids = [];
-        this.selectionList.forEach(ele => {
-          ids.push(ele.id);
-        });
-        return ids.join(",");
-      }
+    ids() {
+      let ids = [];
+      this.selectionList.forEach(ele => {
+        ids.push(ele.id);
+      });
+      return ids.join(',');
     },
-    methods: {
-      rowSave(row, done, loading) {
-        add(row).then(() => {
+  },
+  methods: {
+    rowSave(row, done, loading) {
+      const { userName,  assessorUserName} = row
+      const usernameData = this.userList.find(ele => ele.id === userName);
+      const assessorUserNameData = this.userList.find(ele => ele.id === assessorUserName);
+      const copyRow = _.cloneDeep(row)
+      copyRow.userId = usernameData.id;
+      copyRow.userName = usernameData.name;
+      copyRow.deptId = usernameData.deptId;
+      copyRow.assessorUserId = assessorUserNameData.id;
+      copyRow.assessorDeptId = usernameData.deptId;
+      copyRow.assessorUserName = assessorUserNameData.name;
+      add(copyRow).then(
+        () => {
           this.onLoad(this.page);
           this.$message({
-            type: "success",
-            message: "操作成功!"
+            type: 'success',
+            message: '操作成功!',
           });
           done();
-        }, error => {
+        },
+        error => {
           loading();
           window.console.log(error);
-        });
-      },
-      rowUpdate(row, index, done, loading) {
-        update(row).then(() => {
+        }
+      );
+    },
+    rowUpdate(row, index, done, loading) {
+      const { userName,  assessorUserName} = row
+      const usernameData = this.userList.find(ele => ele.id === userName);
+      const assessorUserNameData = this.userList.find(ele => ele.id === assessorUserName);
+      const copyRow = _.cloneDeep(row)
+      copyRow.userId = usernameData.id;
+      copyRow.userName = usernameData.name;
+      copyRow.deptId = usernameData.deptId;
+      copyRow.assessorUserId = assessorUserNameData.id;
+      copyRow.assessorDeptId = usernameData.deptId;
+      copyRow.assessorUserName = assessorUserNameData.name;
+      update(copyRow).then(
+        () => {
           this.onLoad(this.page);
           this.$message({
-            type: "success",
-            message: "操作成功!"
+            type: 'success',
+            message: '操作成功!',
           });
           done();
-        }, error => {
+        },
+        error => {
           loading();
           console.log(error);
-        });
-      },
-      rowDel(row) {
-        this.$confirm("确定将选择数据删除?", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        })
-          .then(() => {
-            return remove(row.id);
-          })
-          .then(() => {
-            this.onLoad(this.page);
-            this.$message({
-              type: "success",
-              message: "操作成功!"
-            });
-          });
-      },
-      handleDelete() {
-        if (this.selectionList.length === 0) {
-          this.$message.warning("请选择至少一条数据");
-          return;
         }
-        this.$confirm("确定将选择数据删除?", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
+      );
+    },
+    rowDel(row) {
+      this.$confirm('确定将选择数据删除?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          return remove(row.id);
         })
-          .then(() => {
-            return remove(this.ids);
-          })
-          .then(() => {
-            this.onLoad(this.page);
-            this.$message({
-              type: "success",
-              message: "操作成功!"
-            });
-            this.$refs.crud.toggleSelection();
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: 'success',
+            message: '操作成功!',
           });
-      },
-      handleExport() {
-        let downloadUrl = `/blade-assessmentConfig/assessmentConfig/export-assessmentConfig?${this.website.tokenHeader}=${getToken()}`;
-        const {
-        } = this.query;
-        let values = {
-        };
-        this.$confirm("是否导出数据?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          NProgress.start();
-          exportBlob(downloadUrl, values).then(res => {
-            downloadXls(res.data, `考核权重配置表${dateNow()}.xlsx`);
-            NProgress.done();
-          })
         });
-      },
-      beforeOpen(done, type) {
-        if (["edit", "view"].includes(type)) {
-          getDetail(this.form.id).then(res => {
-            this.form = res.data.data;
+    },
+    handleDelete() {
+      if (this.selectionList.length === 0) {
+        this.$message.warning('请选择至少一条数据');
+        return;
+      }
+      this.$confirm('确定将选择数据删除?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          return remove(this.ids);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: 'success',
+            message: '操作成功!',
           });
-        }
-        done();
-      },
-      searchReset() {
-        this.query = {};
-        this.onLoad(this.page);
-      },
-      searchChange(params, done) {
-        this.query = params;
-        this.page.currentPage = 1;
-        this.onLoad(this.page, params);
-        done();
-      },
-      selectionChange(list) {
-        this.selectionList = list;
-      },
-      selectionClear() {
-        this.selectionList = [];
-        this.$refs.crud.toggleSelection();
-      },
-      currentChange(currentPage){
-        this.page.currentPage = currentPage;
-      },
-      sizeChange(pageSize){
-        this.page.pageSize = pageSize;
-      },
-      refreshChange() {
-        this.onLoad(this.page, this.query);
-      },
-      onLoad(page, params = {}) {
-        this.loading = true;
-
-        const {
-        } = this.query;
-
-        let values = {
-        };
-
-        getList(page.currentPage, page.pageSize, values).then(res => {
-          const data = res.data.data;
-          this.page.total = data.total;
-          this.data = data.records;
-          this.loading = false;
-          this.selectionClear();
+          this.$refs.crud.toggleSelection();
+        });
+    },
+    handleExport() {
+      let downloadUrl = `/blade-assessmentConfig/assessmentConfig/export-assessmentConfig?${
+        this.website.tokenHeader
+      }=${getToken()}`;
+      const {} = this.query;
+      let values = {};
+      this.$confirm('是否导出数据?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      }).then(() => {
+        NProgress.start();
+        exportBlob(downloadUrl, values).then(res => {
+          downloadXls(res.data, `考核权重配置表${dateNow()}.xlsx`);
+          NProgress.done();
+        });
+      });
+    },
+    beforeOpen(done, type) {
+      if (['edit', 'view'].includes(type)) {
+        getDetail(this.form.id).then(res => {
+          this.form = res.data.data;
         });
       }
-    }
-  };
+      done();
+    },
+    searchReset() {
+      this.query = {};
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    onLoad(page, params = {}) {
+      this.loading = true;
+
+      const {} = this.query;
+
+      let values = {};
+
+      getList(page.currentPage, page.pageSize, values).then(res => {
+        const data = res.data.data;
+        this.page.total = data.total;
+        this.data = data.records;
+        this.loading = false;
+        this.selectionClear();
+      });
+    },
+    handleImport() {
+      this.excelBox = true;
+    },
+    uploadAfter(res, done, loading, column) {
+      window.console.log(column);
+      this.excelBox = false;
+      this.refreshChange();
+      done();
+    },
+    handleTemplate() {
+      const url = window.location.origin + '/excel/中图员工考核导入模板表.xlsx';
+      axios({
+        url: url,
+        method: 'get',
+        responseType: 'blob',
+      }).then(res => {
+        downloadXls(res.data, `中图员工考核导入模板表.xlsx`);
+      });
+    },
+    initData() {
+      // 获取所属部门数据
+
+      getDeptTree(website.tenantId).then(res => {
+        const column = this.option.column;
+        const userNameColumn = column.find(item => item.prop === 'userName');
+        const assessorUserName = column.find(item => item.prop === 'assessorUserName');
+        userNameColumn.dicData = res.data.data;
+        userNameColumn.lazyLoad = lazyLoad;
+        assessorUserName.dicData = res.data.data;
+        assessorUserName.lazyLoad = lazyLoad;
+      });
+
+      const lazyLoad = (node, resolve) => {
+        const column = this.option.column;
+        const userNameColumn = column.find(item => item.prop === 'userName');
+        const assessorUserName = column.find(item => item.prop === 'assessorUserName');
+        let stop_level = 2;
+        let level = node.level;
+        let data = node.data || {};
+        let code = data.code;
+        let list = [];
+        let callback = () => {
+          resolve(
+            (list || []).map(ele => {
+              return Object.assign(ele, {
+                leaf: level >= stop_level,
+              });
+            })
+          );
+        };
+        if (level === 2) {
+          const deptId = node.value;
+          getUserList(
+            1,
+            1000,
+            {
+              userType: 2,
+            },
+            deptId
+          ).then(userRes => {
+            const userData = userRes.data.data;
+            if (userData.records.length === 0) {
+              this.$message.warning('当前部门人数为空,请选择其他部门!!');
+              resolve([]);
+              callback();
+            } else {
+              const records = userData.records.map(item => {
+                item.title = item.name;
+                return item;
+              });
+              list = records;
+              records.forEach(item => {
+                const is = this.userList.findIndex(v => item.id === v.id);
+                if (is == -1) {
+                  this.userList.push(item);
+                }
+              });
+              callback();
+            }
+          });
+        }
+      };
+    },
+  },
+  mounted() {
+    this.initData();
+  },
+};
 </script>
 
-<style>
-</style>
+<style></style>
diff --git a/src/views/assessment/assessmentTask.vue b/src/views/assessment/assessmentTask.vue
index 5e878e5..77f069f 100644
--- a/src/views/assessment/assessmentTask.vue
+++ b/src/views/assessment/assessmentTask.vue
@@ -1,451 +1,400 @@
 <template>
-    <basic-container>
-        <template v-if="curIndex === 0">
-            <avue-tabs ref="tabs" :option="taskTypeList" @change="tabChange"></avue-tabs>
-            <avue-crud :option="option" v-model:search="search" v-model:page="page" v-model="form"
-                       :table-loading="loading"
-                       :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">
-                <template #isAssessmentOk="{ row }">
-                    <el-tag :type="setTaskState(row.isAssessmentOk).type" effect="dark">
-                        {{ setTaskState(row.isAssessmentOk).text }}
-                    </el-tag>
-                </template>
-                <template #menu-left>
-                    <el-button type="danger" icon="el-icon-delete" plain v-if="permission.assessmentTask_delete"
-                               @click="handleDelete">
-                        删除
-                    </el-button>
-                    <el-button
-                            type="success"
-                            plain
-                            icon="el-icon-upload"
-                            @click="handleImport"
-                    >权重导入
-                    </el-button>
-                    <!-- <el-button type="warning" plain icon="el-icon-download" @click="handleExport">
+  <basic-container>
+    <template v-if="curIndex === 0">
+      <avue-tabs ref="tabs" :option="taskTypeList" @change="tabChange"></avue-tabs>
+      <avue-crud
+        :option="option"
+        v-model:search="search"
+        v-model:page="page"
+        v-model="form"
+        :table-loading="loading"
+        :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"
+      >
+        <template #isAssessmentOk="{ row }">
+          <el-tag :type="setTaskState(row.isAssessmentOk).type" effect="dark">
+            {{ setTaskState(row.isAssessmentOk).text }}
+          </el-tag>
+        </template>
+        <template #menu-left>
+          <el-button
+            type="danger"
+            icon="el-icon-delete"
+            plain
+            v-if="permission.assessmentTask_delete"
+            @click="handleDelete"
+          >
+            删除
+          </el-button>
+          <!-- <el-button type="warning" plain icon="el-icon-download" @click="handleExport">
                       导出
                     </el-button> -->
-                </template>
-                <template #menu="{ row, index, size }">
-                    <el-button type="primary" icon="el-icon-setting" text @click="handleTaskSetting(row)">
-                        考核设置
-                    </el-button>
-                    <el-button type="primary" icon="el-icon-view" text @click="handleAssessorDetails(row)">
-                        考核结果
-                    </el-button>
-                    <el-button type="primary" icon="el-icon-view" text @click="handleAssessorList(row)">
-                        考核详情
-                    </el-button>
-                    <el-button type="success" icon="el-icon-edit" text v-if="row.isAssessmentOk === -1"
-                               @click="$refs.crud.rowEdit(row,index)">
-                        编辑
-                    </el-button>
-                    <!-- <el-button type="primary" icon="el-icon-view" text @click="handleTaskResult(row)">
+        </template>
+        <template #menu="{ row, index, size }">
+          <el-button type="primary" icon="el-icon-setting" text @click="handleTaskSetting(row)">
+            考核设置
+          </el-button>
+          <el-button type="primary" icon="el-icon-view" text @click="handleAssessorDetails(row)">
+            考核结果
+          </el-button>
+          <el-button type="primary" icon="el-icon-view" text @click="handleAssessorList(row)">
+            考核详情
+          </el-button>
+          <el-button
+            type="success"
+            icon="el-icon-edit"
+            text
+            v-if="row.isAssessmentOk === -1"
+            @click="$refs.crud.rowEdit(row, index)"
+          >
+            编辑
+          </el-button>
+          <!-- <el-button type="primary" icon="el-icon-view" text @click="handleTaskResult(row)">
                       考核结果
                     </el-button> -->
-                    <el-button type="danger" icon="el-icon-delete" text @click="rowDel(row)">
-                        删除
-                    </el-button>
-                </template>
-            </avue-crud>
+          <el-button type="danger" icon="el-icon-delete" text @click="rowDel(row)">
+            删除
+          </el-button>
         </template>
-        <template v-else-if="curIndex === 1">
-            <assessmentTaskSetting :params="resultParams" @changeIs="changeIs"/>
-        </template>
-        <!-- <template v-else>
+      </avue-crud>
+    </template>
+    <template v-else-if="curIndex === 1">
+      <assessmentTaskSetting :params="resultParams" @changeIs="changeIs" />
+    </template>
+    <!-- <template v-else>
           <taskResult :params="resultParams" @changeIs="changeIs" />
         </template> -->
-        <!-- 考核结果详情 -->
-        <assessorDetails :params="detailsParams"/>
-        <!-- 考核人员详情 -->
-        <assessorDialog :params="assessorDialogParams"/>
-        <el-dialog title="权重数据导入" append-to-body v-model="excelBox" width="555px">
-            <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
-                <template #excelTemplate>
-                    <el-button type="primary" @click="handleTemplate">
-                        点击下载<i class="el-icon-download el-icon--right"></i>
-                    </el-button>
-                </template>
-            </avue-form>
-        </el-dialog>
-    </basic-container>
+    <!-- 考核结果详情 -->
+    <assessorDetails :params="detailsParams" />
+    <!-- 考核人员详情 -->
+    <assessorDialog :params="assessorDialogParams" />
+  </basic-container>
 </template>
 
 <script>
-import {getList, getDetail, add, update, remove} from "@/api/assessment/assessmentTask";
-import option from "@/option/assessmentTask/assessmentTask";
-import {mapGetters} from "vuex";
-import {exportBlob} from "@/api/common";
-import {getToken} from '@/utils/auth';
-import {downloadXls} from "@/utils/util";
-import {dateNow} from "@/utils/date";
+import { getList, getDetail, add, update, remove } from '@/api/assessment/assessmentTask';
+import option from '@/option/assessmentTask/assessmentTask';
+import { mapGetters } from 'vuex';
+import { exportBlob } from '@/api/common';
+import { getToken } from '@/utils/auth';
+import { downloadXls } from '@/utils/util';
+import { dateNow } from '@/utils/date';
 import NProgress from 'nprogress';
 import 'nprogress/nprogress.css';
-import taskResult from './components/taskResult.vue'
-import addTaskDialog from "./components/addTaskDialog.vue";
-import assessmentTaskSetting from "./components/assessmentTaskSetting.vue";
-import assessorDetails from "./components/assessorDetails.vue";
-import assessorDialog from "./components/assessorDialog.vue";
+import taskResult from './components/taskResult.vue';
+import addTaskDialog from './components/addTaskDialog.vue';
+import assessmentTaskSetting from './components/assessmentTaskSetting.vue';
+import assessorDetails from './components/assessorDetails.vue';
+import assessorDialog from './components/assessorDialog.vue';
 
 export default {
-    components: {
-        taskResult,
-        addTaskDialog,
-        assessmentTaskSetting,
-        assessorDetails,
-        assessorDialog
-    },
-    data() {
-        return {
-            curIndex: 0,
-            form: {},
-            query: {},
-            search: {},
-            loading: true,
-            excelBox: false,
-            page: {
-                pageSize: 10,
-                currentPage: 1,
-                total: 0
-            },
-            selectionList: [],
-            option: option,
-            data: [],
-            // 考核结果参数
-            resultParams: {},
-            defaultTaskType: 0,
-            taskTypeList: {
-                column: [
-                    {
-                        label: '个人考核任务',
-                        prop: 0
-                    },
-                    {
-                        label: '部门考核任务',
-                        prop: 1
-                    }
-                ]
-            },
-            detailsParams: {},
-            assessorDialogParams: {},
-            excelForm: {},
-            excelOption: {
-                submitBtn: false,
-                emptyBtn: false,
-                column: [
-                    {
-                        label: '模板上传',
-                        prop: 'excelFile',
-                        type: 'upload',
-                        drag: true,
-                        loadText: '模板上传中,请稍等',
-                        span: 24,
-                        propsHttp: {
-                            res: 'data',
-                        },
-                        tip: '请上传 .xls,.xlsx 标准格式文件',
-                        action: '/assessment/assessmentConfig/import-assessmentConfig',
-                    },
-                    {
-                        label: '数据覆盖',
-                        prop: 'isCovered',
-                        type: 'switch',
-                        align: 'center',
-                        width: 80,
-                        dicData: [
-                            {
-                                label: '否',
-                                value: 0,
-                            },
-                            {
-                                label: '是',
-                                value: 1,
-                            },
-                        ],
-                        value: 0,
-                        slot: true,
-                        rules: [
-                            {
-                                required: true,
-                                message: '请选择是否覆盖',
-                                trigger: 'blur',
-                            },
-                        ],
-                    },
-                    {
-                        label: '模板下载',
-                        prop: 'excelTemplate',
-                        formslot: true,
-                        span: 24,
-                    },
-                ],
-            },
+  components: {
+    taskResult,
+    addTaskDialog,
+    assessmentTaskSetting,
+    assessorDetails,
+    assessorDialog,
+  },
+  data() {
+    return {
+      curIndex: 0,
+      form: {},
+      query: {},
+      search: {},
+      loading: true,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+      },
+      selectionList: [],
+      option: option,
+      data: [],
+      // 考核结果参数
+      resultParams: {},
+      defaultTaskType: 0,
+      taskTypeList: {
+        column: [
+          {
+            label: '个人考核任务',
+            prop: 0,
+          },
+          {
+            label: '部门考核任务',
+            prop: 1,
+          },
+        ],
+      },
+      detailsParams: {},
+      assessorDialogParams: {},
+    };
+  },
+  watch: {
+    
+    defaultTaskType: {
+      handler(n) {
+        this.query = {};
+        this.query['type'] = n;
+        let params = {
+          type: n,
         };
+        // 设置默认值
+        const column = this.option.column;
+        column.some(item => {
+          if (item.prop === 'type') {
+            item.value = n;
+            return true;
+          }
+        });
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+      },
+      immediate: true,
     },
-    watch: {
-        'excelForm.isCovered'() {
-            if (this.excelForm.isCovered !== '') {
-                const column = this.findObject(this.excelOption.column, 'excelFile');
-                column.action = `/assessment/assessmentConfig/import-assessmentConfig?isCovered=${this.excelForm.isCovered}`;
-            }
+  },
+  computed: {
+    ...mapGetters(['permission']),
+    permissionList() {
+      return {
+        addBtn: this.validData(this.permission.assessmentTask_add, false),
+        viewBtn: this.validData(this.permission.assessmentTask_view, false),
+        delBtn: this.validData(this.permission.assessmentTask_delete, false),
+        editBtn: this.validData(this.permission.assessmentTask_edit, false),
+      };
+    },
+    ids() {
+      let ids = [];
+      this.selectionList.forEach(ele => {
+        ids.push(ele.id);
+      });
+      return ids.join(',');
+    },
+  },
+  provide() {
+    return {
+      type: () => this.defaultTaskType,
+    };
+  },
+  methods: {
+    handleTaskSetting(row) {
+      this.curIndex = 1;
+      this.resultParams = row;
+      this.resultParams.type = this.defaultTaskType;
+    },
+    // handleTaskResult(row) {
+    //   this.curIndex = 2;
+    //   this.resultParams = row
+    //   this.resultParams.type = this.defaultTaskType
+    // },
+    changeIs(num) {
+      this.curIndex = num;
+      this.$nextTick(() => {
+        this.$refs.tabs.active = this.defaultTaskType.toString();
+      });
+    },
+    rowSave(row, done, loading) {
+      const { startTime, endTime } = row;
+      const startDate = new Date(startTime).getTime();
+      const endDate = new Date(endTime).getTime();
+      if (startDate >= endDate) {
+        this.$message.warning('结束时间不可小于或等于开始时间');
+        loading();
+        return;
+      }
+      add(row).then(
+        () => {
+          this.onLoad(this.page);
+          this.$message({
+            type: 'success',
+            message: '操作成功!',
+          });
+          done();
         },
-        defaultTaskType: {
-            handler(n) {
-                this.query = {}
-                this.query['type'] = n
-                let params = {
-                    type: n
-                }
-                // 设置默认值
-                const column = this.option.column
-                column.some(item => {
-                    if (item.prop === 'type') {
-                        item.value = n
-                        return true
-                    }
-                })
-                this.page.currentPage = 1;
-                this.onLoad(this.page, params);
-            },
-            immediate: true,
+        error => {
+          loading();
+          window.console.log(error);
         }
+      );
     },
-    computed: {
-        ...mapGetters(["permission"]),
-        permissionList() {
-            return {
-                addBtn: this.validData(this.permission.assessmentTask_add, false),
-                viewBtn: this.validData(this.permission.assessmentTask_view, false),
-                delBtn: this.validData(this.permission.assessmentTask_delete, false),
-                editBtn: this.validData(this.permission.assessmentTask_edit, false)
-            };
+    rowUpdate(row, index, done, loading) {
+      update(row).then(
+        () => {
+          this.onLoad(this.page);
+          this.$message({
+            type: 'success',
+            message: '操作成功!',
+          });
+          done();
         },
-        ids() {
-            let ids = [];
-            this.selectionList.forEach(ele => {
-                ids.push(ele.id);
-            });
-            return ids.join(",");
+        error => {
+          loading();
+          console.log(error);
         }
+      );
     },
-    provide() {
-        return {
-            type: () => this.defaultTaskType
-        }
+    rowDel(row) {
+      this.$confirm('确定将选择数据删除?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          return remove(row.id);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: 'success',
+            message: '操作成功!',
+          });
+        });
     },
-    methods: {
-        handleTaskSetting(row) {
-            this.curIndex = 1;
-            this.resultParams = row
-            this.resultParams.type = this.defaultTaskType
-        },
-        // handleTaskResult(row) {
-        //   this.curIndex = 2;
-        //   this.resultParams = row
-        //   this.resultParams.type = this.defaultTaskType
-        // },
-        changeIs(num) {
-            this.curIndex = num
-            this.$nextTick(() => {
-                this.$refs.tabs.active = this.defaultTaskType.toString()
-            })
-        },
-        rowSave(row, done, loading) {
-            const {startTime, endTime} = row
-            const startDate = new Date(startTime).getTime()
-            const endDate = new Date(endTime).getTime()
-            if (startDate >= endDate) {
-                this.$message.warning('结束时间不可小于或等于开始时间')
-                loading()
-                return
-            }
-            add(row).then(() => {
-                this.onLoad(this.page);
-                this.$message({
-                    type: "success",
-                    message: "操作成功!"
-                });
-                done();
-            }, error => {
-                loading();
-                window.console.log(error);
-            });
-        },
-        rowUpdate(row, index, done, loading) {
-            update(row).then(() => {
-                this.onLoad(this.page);
-                this.$message({
-                    type: "success",
-                    message: "操作成功!"
-                });
-                done();
-            }, error => {
-                loading();
-                console.log(error);
-            });
-        },
-        rowDel(row) {
-            this.$confirm("确定将选择数据删除?", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning"
-            })
-                    .then(() => {
-                        return remove(row.id);
-                    })
-                    .then(() => {
-                        this.onLoad(this.page);
-                        this.$message({
-                            type: "success",
-                            message: "操作成功!"
-                        });
-                    });
-        },
-        handleDelete() {
-            if (this.selectionList.length === 0) {
-                this.$message.warning("请选择至少一条数据");
-                return;
-            }
-            this.$confirm("确定将选择数据删除?", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning"
-            })
-                    .then(() => {
-                        return remove(this.ids);
-                    })
-                    .then(() => {
-                        this.onLoad(this.page);
-                        this.$message({
-                            type: "success",
-                            message: "操作成功!"
-                        });
-                        this.$refs.crud.toggleSelection();
-                    });
-        },
-        handleExport() {
-            let downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${this.website.tokenHeader}=${getToken()}`;
-            const {} = this.query;
-            let values = {
-                ...this.query
-            };
-            this.$confirm("是否导出数据?", "提示", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning"
-            }).then(() => {
-                NProgress.start();
-                exportBlob(downloadUrl, values).then(res => {
-                    downloadXls(res.data, `考核任务表${dateNow()}.xlsx`);
-                    NProgress.done();
-                })
-            });
-        },
-        beforeOpen(done, type) {
-            if (type === 'add') {
-                this.form.assessmentNo = new Date().getFullYear() + '-' + (Number(this.page.total) + 1)
-            }
-            if (["edit", "view"].includes(type)) {
-                getDetail(this.form.id).then(res => {
-                    this.form = res.data.data;
-                });
-            }
-            done();
-        },
-        searchReset() {
-            this.query = {};
-            this.onLoad(this.page, {type: this.defaultTaskType});
-        },
-        searchChange(params, done) {
-            params.type = this.defaultTaskType
-            this.query = params;
-            this.page.currentPage = 1;
-            this.onLoad(this.page, params);
-            done();
-        },
-        selectionChange(list) {
-            this.selectionList = list;
-        },
-        selectionClear() {
-            this.selectionList = [];
-            this.$refs.crud.toggleSelection();
-        },
-        currentChange(currentPage) {
-            this.page.currentPage = currentPage;
-        },
-        sizeChange(pageSize) {
-            this.page.pageSize = pageSize;
-        },
-        refreshChange() {
-            this.onLoad(this.page, this.query);
-        },
-        onLoad(page, params = {}) {
-            this.loading = true;
+    handleDelete() {
+      if (this.selectionList.length === 0) {
+        this.$message.warning('请选择至少一条数据');
+        return;
+      }
+      this.$confirm('确定将选择数据删除?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          return remove(this.ids);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: 'success',
+            message: '操作成功!',
+          });
+          this.$refs.crud.toggleSelection();
+        });
+    },
+    handleExport() {
+      let downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${
+        this.website.tokenHeader
+      }=${getToken()}`;
+      const {} = this.query;
+      let values = {
+        ...this.query,
+      };
+      this.$confirm('是否导出数据?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      }).then(() => {
+        NProgress.start();
+        exportBlob(downloadUrl, values).then(res => {
+          downloadXls(res.data, `考核任务表${dateNow()}.xlsx`);
+          NProgress.done();
+        });
+      });
+    },
+    beforeOpen(done, type) {
+      if (type === 'add') {
+        this.form.assessmentNo = new Date().getFullYear() + '-' + (Number(this.page.total) + 1);
+      }
+      if (['edit', 'view'].includes(type)) {
+        getDetail(this.form.id).then(res => {
+          this.form = res.data.data;
+        });
+      }
+      done();
+    },
+    searchReset() {
+      this.query = {};
+      this.onLoad(this.page, { type: this.defaultTaskType });
+    },
+    searchChange(params, done) {
+      params.type = this.defaultTaskType;
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    onLoad(page, params = {}) {
+      this.loading = true;
 
-            const {} = this.query;
+      const {} = this.query;
 
-            let values = {
-                ...this.query,
-                ...params
-            };
+      let values = {
+        ...this.query,
+        ...params,
+      };
 
-            getList(page.currentPage, page.pageSize, values).then(res => {
-                const data = res.data.data;
-                this.page.total = data.total;
-                this.data = data.records;
-                this.loading = false;
-                this.selectionClear();
-            });
+      getList(page.currentPage, page.pageSize, values).then(res => {
+        const data = res.data.data;
+        this.page.total = data.total;
+        this.data = data.records;
+        this.loading = false;
+        this.selectionClear();
+      });
+    },
+    tabChange(value) {
+      this.defaultTaskType = value.prop;
+    },
+    setTaskState(state) {
+      const status = {
+        '-1': {
+          text: '未开始',
+          type: 'warning',
         },
-        tabChange(value) {
-            this.defaultTaskType = value.prop
+        0: {
+          text: '进行中',
+          type: '',
         },
-        setTaskState(state) {
-            const status = {
-                '-1': {
-                    text: '未开始',
-                    type: 'warning'
-                },
-                '0': {
-                    text: '进行中',
-                    type: ''
-                },
-                '1': {
-                    text: '已完成',
-                    type: 'success'
-                },
-            }
-            return status[state]
+        1: {
+          text: '已完成',
+          type: 'success',
         },
-        handleAssessorDetails(row) {
-            this.detailsParams = {
-                visible: true,
-                data: row
-            }
-        },
-        handleAssessorList(row) {
-            this.assessorDialogParams = {
-                visible: true,
-                data: row
-            }
-        },
-        handleImport() {
-            this.excelBox = true;
-        },
-        uploadAfter(res, done, loading, column) {
-            window.console.log(column);
-            this.excelBox = false;
-            this.refreshChange();
-            done();
-        },
-        handleTemplate() {
-            // 本地资源
-        },
-    }
+      };
+      return status[state];
+    },
+    handleAssessorDetails(row) {
+      this.detailsParams = {
+        visible: true,
+        data: row,
+      };
+    },
+    handleAssessorList(row) {
+      this.assessorDialogParams = {
+        visible: true,
+        data: row,
+      };
+    },
+    handleTemplate() {
+      // 本地资源
+    },
+  },
 };
 </script>
 
diff --git a/src/views/assessment/components/addWeight.vue b/src/views/assessment/components/addWeight.vue
index a7f7f26..2311a6f 100644
--- a/src/views/assessment/components/addWeight.vue
+++ b/src/views/assessment/components/addWeight.vue
@@ -36,6 +36,12 @@
                             style="width: 100%;"></el-input>
                     </el-form-item>
                 </el-col>
+                <el-col :span="12">
+                    <el-form-item label="范围" prop="rangeVal">
+                        <el-input v-model="form.rangeVal" :placeholder="`请输入范围`"
+                            style="width: 100%;"></el-input>
+                    </el-form-item>
+                </el-col>
             </el-row>
         </el-form>
         <template #footer>
@@ -70,7 +76,8 @@
     deptId: '',
     deptName: '',
     postName: '',
-    weight: ''
+    weight: '',
+    rangeVal: ''
 })
 
 const isLoading = ref(true)
@@ -113,6 +120,13 @@
             validator: weightValidator,
             trigger: 'click',
         }
+    ],
+    rangeVal: [
+        {
+            required: true,
+            message: '请输入范围',
+            trigger: 'click',
+        }
     ]
 })
 
@@ -123,7 +137,8 @@
     deptId: '',
     deptName: '',
     postName: '',
-    weight: 0
+    weight: 0,
+    rangeVal: ''
 })
 
 
@@ -198,6 +213,7 @@
     currentDeptId.value = id
     const userList = await initUserList(id)
     userSelectOption.value = userList
+    if (userList.length <= 0) ElMessage.warning('当前部门人员为空,请选择其他部门!!')
 }
 
 // 级联配置
@@ -242,6 +258,7 @@
     formRef.value.validate(valid => {
         if (!valid) return ElMessage.error('添加候选人失败')
         requestParams.weight = form.weight
+        requestParams.rangeVal = form.rangeVal
         addAssessorList(requestParams).then(res => {
             ElMessage.success('添加候选人成功')
             props.dialogParams.visible = false
@@ -264,7 +281,7 @@
     if (!val) return
     const { id } = props.dialogParams.taskParams
     requestParams.assessmentSetId = id
-    console.log(props.dialogParams.weightRange);
+    // console.log(props.dialogParams.weightRange);
     weightRange.value = props.dialogParams.weightRange
 }, {
     deep: true
diff --git a/src/views/assessment/components/assessmentTaskSetting.vue b/src/views/assessment/components/assessmentTaskSetting.vue
index e532e36..db0a91d 100644
--- a/src/views/assessment/components/assessmentTaskSetting.vue
+++ b/src/views/assessment/components/assessmentTaskSetting.vue
@@ -260,7 +260,6 @@
                 ...params,
                 assessmentTaskId: id
             };
-            console.log(values);
             this.data = []
             getList(page.currentPage, page.pageSize, values).then(res => {
                 const data = res.data.data;
diff --git a/src/views/assessment/components/assessmentWeight.vue b/src/views/assessment/components/assessmentWeight.vue
index f9ed379..ef59a96 100644
--- a/src/views/assessment/components/assessmentWeight.vue
+++ b/src/views/assessment/components/assessmentWeight.vue
@@ -22,27 +22,50 @@
             @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
             <template #menu-left>
                 <el-button type="primary" icon="el-icon-plus" @click="rowSave">添加考核人</el-button>
+                <el-button type="primary" icon="el-icon-plus" @click="configDialogShow = true">导入权重配置中的数据</el-button>
             </template>
         </avue-crud>
         <add-weight :dialogParams="dialogParams" @refresh="onLoad"></add-weight>
+        <el-dialog title="权重配置数据" v-model="configDialogShow" @open="configDialogOpen">
+            <el-table v-loading="addLoading" :element-loading-text="addTipsText" :data="configUserList" @selection-change="handleSelectionChange" style="width: 100%" border
+                max-height="700" class="custom-table">
+                <el-table-column type="selection" width="38" />
+                <el-table-column prop="assessorUserName" label="考核人姓名" />
+                <el-table-column prop="assessorPostName" label="考核人职位" />
+                <el-table-column prop="assessorDeptName" label="考核人部门" />
+                <el-table-column prop="weight" label="权重" />
+                <el-table-column prop="rangeVal" label="范围" />
+            </el-table>
+            <template #footer>
+                <el-button type="primary" icon="el-icon-circle-check" @click="addConfigUsers">确认添加</el-button>
+                <el-button icon="el-icon-close" @click="configDialogShow = false">取消</el-button>
+            </template>
+        </el-dialog>
     </div>
 </template>
-  
+
 <script>
-import { getAssessorList, getAssessorDetail, removeAssessor, updateAssessor } from '@/api/assessment/assessmentSet.js'
-import addWeight from './addWeight.vue'
+import {
+    getAssessorList,
+    getAssessorDetail,
+    removeAssessor,
+    updateAssessor,
+} from '@/api/assessment/assessmentSet.js';
+import addWeight from './addWeight.vue';
+import { getAssessors as getExportExcelData } from '@/api/assessment/assessmentConfig';
+import { addAssessorList } from '@/api/assessment/assessmentSet';
 
 export default {
     props: {
         params: {
             type: Object,
             default() {
-                return {}
-            }
-        }
+                return {};
+            },
+        },
     },
     components: {
-        addWeight
+        addWeight,
     },
     data() {
         return {
@@ -67,9 +90,9 @@
                 labelWidth: 120,
                 column: [
                     {
-                        label: "考核人",
-                        prop: "userName",
-                        type: "select",
+                        label: '考核人',
+                        prop: 'userName',
+                        type: 'select',
                         rules: [
                             {
                                 required: true,
@@ -79,9 +102,9 @@
                         ],
                     },
                     {
-                        label: "考核人部门",
-                        prop: "deptName",
-                        type: "input",
+                        label: '考核人部门',
+                        prop: 'deptName',
+                        type: 'input',
                         disabled: true,
                         rules: [
                             {
@@ -92,9 +115,9 @@
                         ],
                     },
                     {
-                        label: "考核人职务",
-                        prop: "postName",
-                        type: "input",
+                        label: '考核人职务',
+                        prop: 'postName',
+                        type: 'input',
                         disabled: true,
                         // hide: true,
                         rules: [
@@ -106,19 +129,19 @@
                         ],
                     },
                     {
-                        label: "权值",
-                        prop: "weight",
-                        type: "input",
+                        label: '权值',
+                        prop: 'weight',
+                        type: 'input',
                         rules: [
                             {
                                 validator: (rule, value, callback) => {
                                     if (value === '') {
-                                        callback(new Error('请输入权值'))
+                                        callback(new Error('请输入权值'));
                                     } else {
                                         if (value > this.weightRange) {
-                                            callback(new Error('输入的权值不可超过' + this.weightRange))
+                                            callback(new Error('输入的权值不可超过' + this.weightRange));
                                         } else {
-                                            callback()
+                                            callback();
                                         }
                                     }
                                 },
@@ -126,8 +149,20 @@
                                 trigger: 'click',
                             },
                         ],
+                    },
+                    {
+                        label: '范围',
+                        prop: 'rangeVal',
+                        type: 'input',
+                        rules: [
+                            {
+                                required: true,
+                                message: '请填写范围',
+                                trigger: 'click',
+                            },
+                        ],
                     }
-                ]
+                ],
             },
             page: {
                 pageSize: 10,
@@ -136,104 +171,109 @@
             },
             selectList: [],
             weightRange: 100,
-            dialogParams: {}
-        }
+            dialogParams: {},
+            configDialogShow: false,
+            configUserList: [],
+            checkedUsers: [],
+            addLoading: false,
+            addTipsText: ''
+        };
     },
-    watch: {
-    },
+    watch: {},
     methods: {
         back() {
-            this.$emit('changeIs', true)
+            this.$emit('changeIs', true);
         },
         rowSave() {
             this.dialogParams = {
                 visible: true,
                 isDept: false,
                 taskParams: this.params,
-                weightRange: this.weightRange
-            }
+                weightRange: this.weightRange,
+            };
         },
         rowUpdate(row, index, done, loading) {
-            updateAssessor(row).then(() => {
-                this.onLoad(this.page);
-                this.$message({
-                    type: "success",
-                    message: "操作成功!"
-                });
-                done();
-            }, error => {
-                loading();
-                console.log(error);
-            });
+            updateAssessor(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: 'success',
+                        message: '操作成功!',
+                    });
+                    done();
+                },
+                error => {
+                    loading();
+                    console.log(error);
+                }
+            );
         },
         rowDel(row) {
-            this.$confirm("确定将选择数据删除?", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning"
+            this.$confirm('确定将选择数据删除?', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning',
             })
                 .then(() => {
                     // return remove(row.id);
-                    return removeAssessor(row.id)
+                    return removeAssessor(row.id);
                 })
                 .then(() => {
                     this.onLoad(this.page);
                     this.$message({
-                        type: "success",
-                        message: "操作成功!"
+                        type: 'success',
+                        message: '操作成功!',
                     });
                 });
         },
         handleDelete() {
             if (this.selectionList.length === 0) {
-                this.$message.warning("请选择至少一条数据");
+                this.$message.warning('请选择至少一条数据');
                 return;
             }
-            this.$confirm("确定将选择数据删除?", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning"
+            this.$confirm('确定将选择数据删除?', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning',
             })
                 .then(() => {
                     // return remove(this.ids);
-                    return removeAssessor(this.ids)
+                    return removeAssessor(this.ids);
                 })
                 .then(() => {
                     this.onLoad(this.page);
                     this.$message({
-                        type: "success",
-                        message: "操作成功!"
+                        type: 'success',
+                        message: '操作成功!',
                     });
                     this.$refs.crud.toggleSelection();
                 });
         },
         handleExport() {
-            let downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${this.website.tokenHeader}=${getToken()}`;
-            const {
-            } = this.query;
-            let values = {
-            };
-            this.$confirm("是否导出数据?", "提示", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning"
+            let downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${this.website.tokenHeader
+                }=${getToken()}`;
+            const { } = this.query;
+            let values = {};
+            this.$confirm('是否导出数据?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning',
             }).then(() => {
                 NProgress.start();
                 exportBlob(downloadUrl, values).then(res => {
                     downloadXls(res.data, `考核任务表${dateNow()}.xlsx`);
                     NProgress.done();
-                })
+                });
             });
         },
         beforeOpen(done, type) {
-            if (["edit", "view"].includes(type)) {
+            if (['edit', 'view'].includes(type)) {
                 getAssessorDetail(this.form.id).then(res => {
                     this.form = res.data.data;
                 });
-                if (type === "edit") {
-                    
-                    this.weightRange += this.form.weight
-                    this.defaults.weight.placeholder = `请输入权重(输入的权值大于等于${this.weightRange})`
+                if (type === 'edit') {
+                    this.weightRange += this.form.weight;
+                    this.defaults.weight.placeholder = `请输入权重(输入的权值大于等于${this.weightRange})`;
                 }
             }
             done();
@@ -267,41 +307,130 @@
         onLoad(page, params = {}) {
             this.loading = true;
 
-            const {
-            } = this.query;
+            const { } = this.query;
 
-            const { userId, deptId, type, id } = this.params
+            const { userId, deptId, type, id } = this.params;
 
             let values = {
                 // userId: !type ? userId : deptId
-                assessmentSetId: id
+                assessmentSetId: id,
             };
             getAssessorList(page.currentPage, page.pageSize, values).then(res => {
                 const data = res.data.data;
                 this.page.total = data.total;
                 this.data = data.records;
                 this.loading = false;
-                this.setDefaultWeightRange(data.records)
+                this.setDefaultWeightRange(data.records);
                 this.selectionClear();
             });
         },
         setDefaultWeightRange(data) {
-            let weightrange = 100
+            let weightrange = 100;
             data.forEach(item => {
-                weightrange -= item.weight
-            })
-            this.weightRange = weightrange
-            this.defaults.weight.placeholder = `请输入权重(当前权重最大不可超过${weightrange})`
+                weightrange -= item.weight;
+            });
+            this.weightRange = weightrange;
+            this.defaults.weight.placeholder = `请输入权重(当前权重最大不可超过${weightrange})`;
+        },
+        configDialogOpen() {
+            getExportExcelData(this.params.userId).then(excelRes => {
+                if (excelRes.data.code !== 200) return this.$message.error('获取相关配置失败!!');
+                const list = excelRes.data.data;
+                this.configUserList = list;
+            });
+        },
+        handleSelectionChange(value) {
+            this.checkedUsers = value;
+        },
+        addConfigUsers() {
+            if (this.checkedUsers.length === 0) {
+                this.$message.warning('暂未选取任何数据!!');
+            } else {
+                let currentAllWeight = 0;
+                this.checkedUsers.forEach(item => {
+                    currentAllWeight += item.weight;
+                });
+                if (currentAllWeight > 100) {
+                    return this.$message.warning('当前权重超过100,请重新选择或在权重配置中修改后重新选择');
+                }
+                this.addLoading = true
+
+                const dataList = this.checkedUsers.map(item => {
+                    const {
+                        assessorUserId,
+                        assessorUserName,
+                        assessorPostName,
+                        assessorDeptId,
+                        assessorDeptName,
+                        weight,
+                        rangeVal,
+                    } = item;
+                    return {
+                        assessmentSetId: this.params.id,
+                        deptId: assessorDeptId,
+                        deptName: assessorDeptName,
+                        postName: assessorPostName,
+                        userId: assessorUserId,
+                        userName: assessorUserName,
+                        weight,
+                        rangeVal,
+                    }
+                });
+
+                const promiseArr = []
+                const createAssessorPromise = (data, userName) => {
+                    return addAssessorList(data).then(res => {
+                        this.addTipsText = `数据"${userName}"添加中...`
+                        if (res.data.code !== 200) {
+                            return `${userName}添加失败`;
+                        }
+                        return `${userName}添加成功`;
+                    })
+                }
+
+                dataList.forEach(item => {
+                    promiseArr.push(createAssessorPromise(item, item.userName))
+                })
+
+                Promise.allSettled(promiseArr).then((responses) => {
+                    const message = responses.map(item => item.value).join('、')
+                    this.$message.success(message)
+                    this.addLoading = false
+                    this.configDialogShow = false
+                    this.refreshChange()
+                }, error => {
+                    this.$message.error(error)
+                })
+            }
         },
     },
-    mounted() {
-    }
-}
+    mounted() { },
+};
 </script>
-  
+
 <style lang="scss" scoped>
 .header {
     margin-bottom: 20px;
+}
+
+.table-search {
+    margin-bottom: 15px;
+    width: 250px;
+    float: right;
+}
+
+:deep() {
+    .custom-table {
+        .el-table__header {
+            thead {
+                color: black;
+
+                .el-table__cell {
+                    background-color: #fafafa;
+                }
+            }
+        }
+    }
 }
 
 .info {
@@ -320,4 +449,3 @@
     }
 }
 </style>
-  
\ No newline at end of file
diff --git a/src/views/assessment/components/popoverTable.vue b/src/views/assessment/components/popoverTable.vue
index 55d8226..b64d306 100644
--- a/src/views/assessment/components/popoverTable.vue
+++ b/src/views/assessment/components/popoverTable.vue
@@ -167,9 +167,6 @@
             this.loading = true;
 
             const { userId, deptId, type, id } = this.params
-
-
-
             const {
             } = this.query;
 
@@ -177,6 +174,7 @@
                 // userId: !type ? userId : deptId
                 assessmentSetId: id
             };
+
             getAssessorList(page.currentPage, page.pageSize, values).then(res => {
                 const data = res.data.data;
                 this.page.total = data.total;

--
Gitblit v1.9.3