GuLiMmo
2024-01-16 9f53be1dfd7f55ca43fa4e8229c371e8ed29a5ba
src/views/assessment/assessmentTask.vue
@@ -1,23 +1,57 @@
<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">
      <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>
        <el-button type="primary" icon="el-icon-plus" size="small" @click="handleInfo">
          考核结果
        </el-button>
      </template>
    </avue-crud>
    <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)">
            考核结果
          </el-button> -->
          <el-button type="danger" icon="el-icon-delete" text @click="rowDel(row)">
            删除
          </el-button>
        </template>
      </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" />
  </basic-container>
</template>
@@ -31,10 +65,23 @@
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";
export default {
  components: {
    taskResult,
    addTaskDialog,
    assessmentTaskSetting,
    assessorDetails,
    assessorDialog
  },
  data() {
    return {
      curIndex: 0,
      form: {},
      query: {},
      search: {},
@@ -46,8 +93,47 @@
      },
      selectionList: [],
      option: option,
      data: []
      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,
    }
  },
  computed: {
    ...mapGetters(["permission"]),
@@ -67,8 +153,37 @@
      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({
@@ -138,6 +253,7 @@
      const {
      } = this.query;
      let values = {
        ...this.query
      };
      this.$confirm("是否导出数据?", "提示", {
        confirmButtonText: "确定",
@@ -152,6 +268,9 @@
      });
    },
    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;
@@ -161,9 +280,10 @@
    },
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
      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);
@@ -192,6 +312,8 @@
      } = this.query;
      let values = {
        ...this.query,
        ...params
      };
      getList(page.currentPage, page.pageSize, values).then(res => {
@@ -201,9 +323,41 @@
        this.loading = false;
        this.selectionClear();
      });
    },
    tabChange(value) {
      this.defaultTaskType = value.prop
    },
    setTaskState(state) {
      const status = {
        '-1': {
          text: '未开始',
          type: 'warning'
        },
        '0': {
          text: '进行中',
          type: ''
        },
        '1': {
          text: '已完成',
          type: 'success'
        },
      }
      return status[state]
    },
    handleAssessorDetails(row) {
      this.detailsParams = {
        visible: true,
        data: row
      }
    },
    handleAssessorList(row) {
      this.assessorDialogParams = {
        visible: true,
        data: row
      }
    }
  }
};
</script>
<style></style>
<style lang="scss" scoped></style>