GuLiMmo
2023-12-23 d3cb9dc762b0bd5acbaa59d146afb2cb9f2017e4
页面修改提交
3 files modified
1 files added
264 ■■■■■ changed files
src/api/evaluate/evaluateTask.js 12 ●●●●● patch | view | raw | blame | history
src/option/evaluate/evaluateTask.js 4 ●●●● patch | view | raw | blame | history
src/views/evaluate/components/viewEvaluateDetail.vue 233 ●●●●● patch | view | raw | blame | history
src/views/evaluate/evaluateTask.vue 15 ●●●●● patch | view | raw | blame | history
src/api/evaluate/evaluateTask.js
@@ -77,4 +77,16 @@
      ids,
    }
  })
}
export const getFinallyResult = (params) => {
  return request({
    url: '/evaluate/evaluateTaskSet/page',
    method: 'get',
    params: {
      ...params,
      type: 2,
      descs: 'vote_num'
    }
  })
}
src/option/evaluate/evaluateTask.js
@@ -12,7 +12,7 @@
  searchMenuSpan: 6,
  border: true,
  index: true,
  viewBtn: true,
  viewBtn: false,
  addBtn: false,
  editBtn: false,
  selection: true,
@@ -218,7 +218,7 @@
  searchMenuSpan: 6,
  border: true,
  index: true,
  viewBtn: true,
  viewBtn: false,
  addBtn: false,
  editBtn: false,
  selection: true,
src/views/evaluate/components/viewEvaluateDetail.vue
New file
@@ -0,0 +1,233 @@
<template>
    <el-dialog title="信息预览" v-model="params.visible" width="800px">
        <div class="descriptions">
            <div class="descriptions-item" v-for="item in taskDateil" :key="item.prop" :style="{ width: item.width }">
                <div class="label">{{ item.title }}</div>
                <div class="value" v-if="!item.isSlot">{{ item.value }}</div>
                <div class="table" v-else>
                    <avue-crud :option="item.option" :data="item.data" ref="crud" @current-change="currentChange"
                        @size-change="sizeChange" @refresh-change="refreshChange"></avue-crud>
                </div>
            </div>
        </div>
    </el-dialog>
</template>
<script setup>
import { reactive, watch } from 'vue';
import {
    getCandidateList,
    getFinallyResult
} from '@/api/evaluate/evaluateTask'
const props = defineProps({
    params: {
        type: Object,
        default: () => ({
            visible: false,
            data: {},
        }),
    }
})
const page = reactive({
    current: 1,
    size: 10,
    total: 0
})
const taskDateil = reactive([
    {
        title: '任务名称',
        prop: 'taskName',
        value: '',
        width: 'calc(100% / 3)'
    },
    {
        title: '任务类别',
        prop: 'taskType',
        value: '',
        width: 'calc(100% / 3)'
    },
    {
        title: '评定标准',
        prop: 'remark',
        value: '',
        width: 'calc(100% / 3)'
    },
    {
        title: '候选人截止日期',
        prop: 'candidateCutoffTime',
        value: '',
        width: '50%'
    },
    {
        title: '评优截止日期',
        prop: 'evaluateCutoffTime',
        value: '',
        width: '50%'
    },
    {
        title: '候选人状态',
        prop: 'candidateState',
        value: '',
        width: '50%'
    },
    {
        title: '评优评先状态',
        prop: 'evaluateState',
        value: '',
        width: '50%'
    },
    {
        title: '候选结果',
        prop: 'candidateResult',
        value: '',
        width: '100%'
    },
    {
        title: '最终评定结果',
        prop: 'finallyResult',
        isSlot: true,
        width: '100%',
        data: [],
        option: {
            height: '200',
            calcHeight: 30,
            tip: false,
            searchShow: true,
            border: true,
            index: true,
            viewBtn: false,
            addBtn: false,
            editBtn: false,
            selection: false,
            dialogClickModal: false,
            menu: false,
            menuLeft: false,
            header: false,
            menuFixed: 'right',
            labelWidth: '120',
            span: 1,
            colums: [
                {
                    lable: '评优项目',
                    prop: '',
                    type: 'input',
                },
                {
                    lable: '名称',
                    prop: '',
                    type: 'input',
                },
                {
                    lable: '候选人',
                    prop: '',
                    type: 'input',
                },
                {
                    lable: '部门',
                    prop: '',
                    type: 'input'
                },
                {
                    lable: '票数',
                    prop: '',
                    type: 'input'
                }
            ]
        }
    }
])
watch(() => props.params.visible, (val) => {
    val && initData()
}, {
    deep: true
})
const candidateList = () => {
    let values = {
        evaluateTaskId: props.params.data.id
    };
    return getCandidateList(1, 99999, values).then(res => {
        const candidateRes = res.data.data.records;
        return candidateRes
    });
}
const getFinallyList = () => {
    const params = {
        evaluateTaskId: props.params.data.id,
        current: page.current,
        size: page.size
    }
    return getFinallyResult(params).then(res => {
        return res.data.data.records
    })
}
const initData = async () => {
    const data = props.params.data
    for (const item of taskDateil) {
        item.value = data[item.prop] || '暂未完善'
        if (item.prop === 'candidateResult') {
            const res = await candidateList()
            if (res.length == 0) {
                item.value = '暂无候选人'
            }
        }
        if (item.prop === 'finallyResult') {
            const res = await getFinallyList()
            item.data = res
        }
    }
    // 获取当前数据
}
</script>
<style lang="scss" scoped>
.descriptions {
    width: 100%;
    display: flex;
    flex-wrap: wrap;
    border: {
        top: 1px solid #eeeded;
        right: 1px solid #eeeded;
    }
    ;
    .descriptions-item {
        display: flex;
        box-sizing: border-box;
        border: {
            bottom: 1px solid #eeeded;
            left: 1px solid #eeeded;
        }
        .label,
        .value {
            flex-shrink: 0;
            padding: 10px 5px;
        }
        .label {
            width: 100px;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            background-color: aliceblue;
            border-right: 1px solid #eeeded;
        }
        .table {
            width: 100%;
        }
    }
}
</style>
src/views/evaluate/evaluateTask.vue
@@ -13,6 +13,7 @@
        <el-button type="warning" plain icon="el-icon-download" @click="handleExport">导出</el-button>
      </template>
      <template #menu="{ size, row, index }">
        <el-button type="primary" text plain icon="el-icon-view" @click="viewDateilDialog(row)">详情</el-button>
        <el-button type="primary" text plain icon="el-icon-edit" @click="editDialog(row)">编辑</el-button>
        <el-button type="primary" text plain icon="el-icon-position" @click="publicTimeBtn(row)"
          v-if="row.candidateState === 2">发布</el-button>
@@ -39,6 +40,8 @@
    <addDialog :params="addParams" @refreshTable="this.onLoad" />
    <!-- 新增候选人 -->
    <addCandidate :params="addCandidateParams" @refreshTable="this.onLoad" />
    <!-- 预览弹窗 -->
    <viewEvaluateDetail :params="viewEvaluateDetailParams" />
  </basic-container>
</template>
@@ -54,12 +57,14 @@
import 'nprogress/nprogress.css';
import addDialog from './components/addDialog.vue';
import addCandidate from './components/addCandidate.vue';
import viewEvaluateDetail from './components/viewEvaluateDetail.vue';
import { getDeptTree } from '@/api/system/dept';
export default {
  components: {
    addDialog,
    addCandidate
    addCandidate,
    viewEvaluateDetail
  },
  data() {
    return {
@@ -101,6 +106,8 @@
      },
      // 新增候选人params
      addCandidateParams: {},
      // 信息预览弹窗
      viewEvaluateDetailParams: {},
    };
  },
  watch: {
@@ -174,6 +181,12 @@
        },
      };
    },
    viewDateilDialog(row) {
      this.viewEvaluateDetailParams = {
        visible: true,
        data: row
      }
    },
    rowUpdate(row, index, done, loading) {
      update(row).then(
        () => {