xieb
2025-01-21 d13cebe7fbadd396e91a989af331df8a8e7b40f8
src/views/assessment/assessmentTask.vue
@@ -2,22 +2,45 @@
  <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">
      <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>
          <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
            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> -->
                      导出
                    </el-button> -->
        </template>
        <template #menu="{ row, index, size }">
          <el-button type="primary" icon="el-icon-setting" text @click="handleTaskSetting(row)">
@@ -29,13 +52,18 @@
          <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
            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> -->
          <el-button type="danger" icon="el-icon-delete" text @click="rowDel(row)">
            删除
          </el-button>
@@ -43,11 +71,11 @@
      </avue-crud>
    </template>
    <template v-else-if="curIndex === 1">
      <assessmentTaskSetting :params="resultParams" @changeIs="changeIs"/>
      <assessmentTaskSetting :params="resultParams" @changeIs="changeIs" />
    </template>
    <!-- <template v-else>
      <taskResult :params="resultParams" @changeIs="changeIs" />
    </template> -->
          <taskResult :params="resultParams" @changeIs="changeIs" />
        </template> -->
    <!-- 考核结果详情 -->
    <assessorDetails :params="detailsParams" />
    <!-- 考核人员详情 -->
@@ -56,20 +84,20 @@
</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 { 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 { 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: {
@@ -77,7 +105,7 @@
    addTaskDialog,
    assessmentTaskSetting,
    assessorDetails,
    assessorDialog
    assessorDialog,
  },
  data() {
    return {
@@ -89,7 +117,7 @@
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
        total: 0,
      },
      selectionList: [],
      option: option,
@@ -101,48 +129,49 @@
        column: [
          {
            label: '个人考核任务',
            prop: 0
            prop: 0,
          },
          {
            label: '部门考核任务',
            prop: 1
          }
        ]
            prop: 1,
          },
        ],
      },
      detailsParams: {},
      assessorDialogParams: {}
      assessorDialogParams: {},
    };
  },
  watch: {
    defaultTaskType: {
      handler(n) {
        this.query = {}
        this.query['type'] = n
        this.query = {};
        this.query['type'] = n;
        let params = {
          type: n
        }
          type: n,
        };
        // 设置默认值
        const column = this.option.column
        const column = this.option.column;
        column.some(item => {
          if (item.prop === 'type') {
            item.value = n
            return true
            item.value = n;
            return true;
          }
        })
        });
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
      },
      immediate: true,
    }
    },
  },
  computed: {
    ...mapGetters(["permission"]),
    ...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)
        editBtn: this.validData(this.permission.assessmentTask_edit, false),
      };
    },
    ids() {
@@ -150,19 +179,19 @@
      this.selectionList.forEach(ele => {
        ids.push(ele.id);
      });
      return ids.join(",");
    }
      return ids.join(',');
    },
  },
  provide() {
    return {
      type: () => this.defaultTaskType
    }
      type: () => this.defaultTaskType,
    };
  },
  methods: {
    handleTaskSetting(row) {
      this.curIndex = 1;
      this.resultParams = row
      this.resultParams.type = this.defaultTaskType
      this.resultParams = row;
      this.resultParams.type = this.defaultTaskType;
    },
    // handleTaskResult(row) {
    //   this.curIndex = 2;
@@ -170,50 +199,56 @@
    //   this.resultParams.type = this.defaultTaskType
    // },
    changeIs(num) {
      this.curIndex = num
      this.curIndex = num;
      this.$nextTick(() => {
        this.$refs.tabs.active = this.defaultTaskType.toString()
      })
        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()
      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 => {
        this.$message.warning('结束时间不可小于或等于开始时间');
        loading();
        window.console.log(error);
      });
        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);
      });
      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"
      this.$confirm('确定将选择数据删除?', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          return remove(row.id);
@@ -221,20 +256,20 @@
        .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);
@@ -242,36 +277,37 @@
        .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 downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${
        this.website.tokenHeader
      }=${getToken()}`;
      const {} = this.query;
      let values = {
        ...this.query
        ...this.query,
      };
      this.$confirm("是否导出数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      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)
        this.form.assessmentNo = new Date().getFullYear() + '-' + (Number(this.page.total) + 1);
      }
      if (["edit", "view"].includes(type)) {
      if (['edit', 'view'].includes(type)) {
        getDetail(this.form.id).then(res => {
          this.form = res.data.data;
        });
@@ -283,7 +319,7 @@
      this.onLoad(this.page, { type: this.defaultTaskType });
    },
    searchChange(params, done) {
      params.type = this.defaultTaskType
      params.type = this.defaultTaskType;
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
@@ -308,12 +344,11 @@
    onLoad(page, params = {}) {
      this.loading = true;
      const {
      } = this.query;
      const {} = this.query;
      let values = {
        ...this.query,
        ...params
        ...params,
      };
      getList(page.currentPage, page.pageSize, values).then(res => {
@@ -325,38 +360,41 @@
      });
    },
    tabChange(value) {
      this.defaultTaskType = value.prop
      this.defaultTaskType = value.prop;
    },
    setTaskState(state) {
      const status = {
        '-1': {
          text: '未开始',
          type: 'warning'
          type: 'warning',
        },
        '0': {
        0: {
          text: '进行中',
          type: ''
          type: '',
        },
        '1': {
        1: {
          text: '已完成',
          type: 'success'
          type: 'success',
        },
      }
      return status[state]
      };
      return status[state];
    },
    handleAssessorDetails(row) {
      this.detailsParams = {
        visible: true,
        data: row
      }
        data: row,
      };
    },
    handleAssessorList(row) {
      this.assessorDialogParams = {
        visible: true,
        data: row
      }
    }
  }
        data: row,
      };
    },
    handleTemplate() {
      // 本地资源
    },
  },
};
</script>