常熟吴彦祖 2 months ago
parent
commit
ecce1895e0
  1. 35
      src/views/modules/supplierPerformance/myPerformanceEvaluateRequest.vue
  2. 31
      src/views/modules/supplierPerformance/perMyScore.vue
  3. 35
      src/views/modules/supplierPerformance/performanceEvaluateRequest.vue
  4. 25
      src/views/modules/supplierPerformance/performanceEvaluateRequestApprove.vue
  5. 768
      src/views/modules/supplierPerformance/performanceEvaluateRequestReview.vue
  6. 19
      src/views/modules/supplierPerformance/supplierPerformanceStatusOptions.js

35
src/views/modules/supplierPerformance/myPerformanceEvaluateRequest.vue

@ -2,7 +2,7 @@
<div class="customer-css">
<!-- 查询条件 -->
<el-form :inline="true" label-position="top" class="pi-search-form">
<el-form-item label="请求编号">
<el-form-item label="任务单号">
<el-input v-model="searchData.requestNo" style="width:140px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item>
@ -36,13 +36,11 @@
<el-form-item label="状态">
<el-select v-model="searchData.statusList" multiple collapse-tags clearable style="width:150px"
placeholder="All">
<el-option label="未开始" value="未开始" />
<el-option label="进行中" value="进行中" />
<el-option label="已完成" value="已完成" />
<el-option label="已审核" value="已审核" />
<el-option label="待审批" value="待审批" />
<el-option label="审批通过" value="审批通过" />
<el-option label="审批拒绝" value="审批拒绝" />
<el-option
v-for="item in taskStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label=" ">
@ -54,7 +52,7 @@
<!-- Evaluate Request 列表 -->
<el-table :data="dataList" :height="requestTableHeight - 100" border highlight-current-row v-loading="loading"
@row-click="rowClick" ref="mainTable" style="width:100%;margin-bottom:8px">
<el-table-column prop="requestNo" label="请求编号" min-width="140" header-align="center" align="left" />
<el-table-column prop="requestNo" label="任务单号" min-width="140" header-align="center" align="left" />
<el-table-column prop="supplierNo" label="供应商编号" width="120" header-align="center" align="left" />
<el-table-column prop="supplierName" label="供应商名称" min-width="200" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="wantedCompleteDate" label="预计完成时间" width="160" header-align="center" align="center" />
@ -80,7 +78,7 @@
<el-row :gutter="10" style="margin-top:12px">
<el-col :span="16">
<div class="sub-panel-header">
<span style="font-size:16px">季度供应商绩效评级请求</span>
<span style="font-size:16px">考核单</span>
</div>
<el-table :data="indicatorList" size="mini" border :height="indicatorTableHeight" highlight-current-row
ref="indicatorTable" @row-click="selectIndicatorRow" v-loading="indicatorLoading">
@ -113,7 +111,7 @@
<!-- 调整供应商等级 -->
<el-dialog title="调整供应商等级" :visible.sync="adjustVisible" width="420px" :close-on-click-modal="false" v-drag>
<el-form label-position="top" size="small">
<el-form-item label="请求编号">
<el-form-item label="任务单号">
<el-input v-model="currentRequest.requestNo" disabled />
</el-form-item>
<el-form-item label="供应商名称">
@ -135,7 +133,7 @@
</el-dialog>
<!-- 新建 / 编辑 绩效请求弹窗 -->
<el-dialog :title="isEdit ? '编辑绩效评估请求' : '新增绩效评估请求'" :visible.sync="createDialogVisible" :width="isEdit ? '760px' : '940px'" top="4vh"
<el-dialog :title="isEdit ? '编辑绩效评估考核' : '新增绩效评估考核'" :visible.sync="createDialogVisible" :width="isEdit ? '760px' : '940px'" top="4vh"
:close-on-click-modal="false" v-drag>
<el-form :inline="true" label-position="top" size="mini" class="create-top-form">
<el-form-item :required="true">
@ -152,7 +150,7 @@
<el-form-item label=" " style="margin-top:-2px" v-if="!isEdit">
<el-button size="small" type="primary" :disabled="!createForm.templateNo" @click="openTemplateIndicatorDialog">指标信息</el-button>
</el-form-item>
<el-form-item v-if="isEdit" label="请求编号">
<el-form-item v-if="isEdit" label="任务单号">
<el-input v-model="createForm.requestNo" disabled style="width:150px" />
</el-form-item>
<el-form-item label=" " style="margin-top:-2px" v-if="isEdit">
@ -296,6 +294,10 @@ import {
} from '@/api/supplierPerformance/performanceEvaluateRequestBuild.js'
import Chooselist from '@/views/modules/common/Chooselist_eam'
import {getTemplateIndicators} from "../../../api/supplierPerformance/performanceIndicatorTemplate";
import {
PERF_TASK_STATUS_OPTIONS,
PERF_TASK_STATUS_DEFAULT
} from './supplierPerformanceStatusOptions.js'
export default {
components: {
@ -310,6 +312,7 @@ export default {
pageIndex: 1,
pageSize: 20,
totalPage: 0,
taskStatusOptions: PERF_TASK_STATUS_OPTIONS,
searchData: {
site: this.$store.state.user.site,
username: this.$store.state.user.name,
@ -401,7 +404,7 @@ export default {
calcHeight() { this.$nextTick(()=> { this.height = window.innerHeight - 40 }) },
getList() {
this.loading = true
if (this.searchData.statusList.length === 0) this.searchData.statusList = ['未开始','进行中','已完成','已审核','待审批','审批通过','审批拒绝']
if (this.searchData.statusList.length === 0) this.searchData.statusList = [...PERF_TASK_STATUS_DEFAULT]
const params = { ...this.searchData, statusList: this.searchData.statusList, page: this.pageIndex, limit: this.pageSize,selectType: 1 }
searchEvaluateRequestList(params).then(({data}) => {
if (data && (data.code === 0 || data.code === '0')) {
@ -486,10 +489,10 @@ export default {
}
const hasScored = indicators.some(i => Number(i.score) > 0)
if (hasScored) {
this.$message.error('该请求存在已评分指标 ,禁止删除')
this.$message.error('该考核任务存在已评分指标,禁止删除')
return
}
this.$confirm('确认删除该请求: ' + row.requestNo + ' ?', '提示', { type: 'warning' }).then(() => {
this.$confirm('确认删除该考核任务: ' + row.requestNo + ' ?', '提示', { type: 'warning' }).then(() => {
deleteEvaluateRequest({ id: row.id, site }).then(({data: delData}) => {
if (delData && (delData.code === 0 || delData.code === '0')) { this.$message.success('删除成功'); this.getList() }
else { this.$message.error((delData && delData.msg) || '删除失败') }

31
src/views/modules/supplierPerformance/perMyScore.vue

@ -2,7 +2,7 @@
<div class="customer-css">
<!-- 查询条件 -->
<el-form :inline="true" label-position="top" class="pi-search-form">
<el-form-item label="请求编号">
<el-form-item label="任务单号">
<el-input v-model="searchData.requestNo" style="width:140px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item>
@ -35,13 +35,11 @@
</el-form-item>
<el-form-item label="状态">
<el-select v-model="searchData.statusList" multiple collapse-tags style="width:150px" placeholder="All">
<el-option label="未开始" value="未开始" />
<el-option label="进行中" value="进行中" />
<el-option label="已完成" value="已完成" />
<el-option label="已审核" value="已审核" />
<el-option label="待审批" value="待审批" />
<el-option label="审批通过" value="审批通过" />
<el-option label="审批拒绝" value="审批拒绝" />
<el-option
v-for="item in taskStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label=" ">
@ -58,7 +56,7 @@
<a v-if="canScore(scope.row)" class="customer-a" @click.stop="openEditDialog(scope.row)">评分</a>
</template>
</el-table-column>
<el-table-column prop="requestNo" label="请求编号" min-width="140" header-align="center" align="left" />
<el-table-column prop="requestNo" label="任务单号" min-width="140" header-align="center" align="left" />
<el-table-column prop="supplierNo" label="供应商编码" width="120" header-align="center" align="left" />
<el-table-column prop="supplierName" label="供应商名称" min-width="200" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="wantedCompleteDate" label="预计完成时间" width="160" header-align="center" align="center" />
@ -75,7 +73,7 @@
<el-row :gutter="10" style="margin-top:12px">
<el-col :span="24">
<div class="sub-panel-header">
<span style="font-size:16px">季度供应商绩效评级请求</span>
<span style="font-size:16px">考核单</span>
</div>
<el-table :data="indicatorList" size="mini" border :height="indicatorTableHeight" highlight-current-row
ref="indicatorTable" v-loading="indicatorLoading">
@ -93,7 +91,7 @@
<el-dialog :title="'打分'" :close-on-click-modal="false" v-drag :visible.sync="createDialogVisible"
width="960px">
<el-form :inline="true" label-position="top" size="mini" class="create-top-form">
<el-form-item label="请求编号" :required="true">
<el-form-item label="任务单号" :required="true">
<!-- 允许编辑模式下修改模板号: 去掉 :disabled="isEdit" -->
<el-input v-model="createForm.requestNo" style="width:150px" disabled/>
</el-form-item>
@ -109,7 +107,7 @@
<el-input v-model="createForm.createBy" style="width:150px" disabled/>
</el-form-item>
</el-form>
<span style="font-size:12px">季度供应商绩效评级请求</span>
<span style="font-size:12px">考核单</span>
<el-row :gutter="10" style="margin-top:4px">
<el-col :span="16">
<div class="sub-panel-header" style="border-bottom:1px solid #ebeef5">
@ -176,6 +174,10 @@ import {
} from "../../../api/supplierPerformance/performanceIndicatorTemplate";
import {getEvaluateRequestIndicatorsOfScore} from "../../../api/supplierPerformance/myPerformanceEvaluateRequest";
import { saveEvaluateRequestIndicatorScore } from '@/api/supplierPerformance/myPerformanceEvaluateRequest.js'
import {
PERF_TASK_STATUS_OPTIONS,
PERF_TASK_STATUS_DEFAULT
} from './supplierPerformanceStatusOptions.js'
export default {
components: {
@ -190,6 +192,7 @@ export default {
pageIndex: 1,
pageSize: 20,
totalPage: 0,
taskStatusOptions: PERF_TASK_STATUS_OPTIONS,
searchData: {
site: this.$store.state.user.site,
username: this.$store.state.user.name,
@ -304,7 +307,7 @@ export default {
calcHeight() { this.$nextTick(()=> { this.height = window.innerHeight - 40 }) },
getList() {
this.loading = true
if (this.searchData.statusList.length === 0) this.searchData.statusList = ['未开始','进行中','已完成','已审核','待审批','审批通过','审批拒绝']
if (this.searchData.statusList.length === 0) this.searchData.statusList = [...PERF_TASK_STATUS_DEFAULT]
const params = { ...this.searchData, statusList: this.searchData.statusList, page: this.pageIndex, limit: this.pageSize,selectType: 3 }
searchEvaluateRequestList(params).then(({data}) => {
if (data && (data.code === 0 || data.code === '0')) {
@ -374,7 +377,7 @@ export default {
},
saveScore(saveType) {
if (this.createSaving) return
if (!this.currentRequest || !this.currentRequest.id) { this.$message.warning('缺少当前请求'); return }
if (!this.currentRequest || !this.currentRequest.id) { this.$message.warning('缺少当前考核单'); return }
if (!this.canScore(this.currentRequest)) { this.$message.warning('当前状态不允许评分'); return }
// (0)
const scored = (this.indicatorList||[]).filter(it => it && it.indicatorCode && it.score !== '' && it.score !== null && Number(it.score) !== 0)

35
src/views/modules/supplierPerformance/performanceEvaluateRequest.vue

@ -2,7 +2,7 @@
<div class="customer-css">
<!-- 查询条件 -->
<el-form :inline="true" label-position="top" class="pi-search-form">
<el-form-item label="请求编号">
<el-form-item label="任务单号">
<el-input v-model="searchData.requestNo" style="width:140px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item>
@ -35,13 +35,11 @@
</el-form-item>
<el-form-item label="状态">
<el-select v-model="searchData.statusList" multiple collapse-tags clearable style="width:150px" placeholder="All">
<el-option label="未开始" value="未开始" />
<el-option label="进行中" value="进行中" />
<el-option label="已完成" value="已完成" />
<el-option label="已审核" value="已审核" />
<el-option label="待审批" value="待审批" />
<el-option label="审批通过" value="审批通过" />
<el-option label="审批拒绝" value="审批拒绝" />
<el-option
v-for="item in taskStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label=" ">
@ -60,7 +58,7 @@
<!-- <a class="customer-a" @click.stop="removeRequest(scope.row)">Delete</a>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="requestNo" label="请求编号" min-width="140" header-align="center" align="left" />
<el-table-column prop="requestNo" label="任务单号" min-width="140" header-align="center" align="left" />
<el-table-column prop="supplierNo" label="供应商编码" width="120" header-align="center" align="left" />
<el-table-column prop="supplierName" label="供应商名称" min-width="200" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="wantedCompleteDate" label="预计完成时间" width="160" header-align="center" align="center" />
@ -77,7 +75,7 @@
<el-row :gutter="10" style="margin-top:12px">
<el-col :span="16">
<div class="sub-panel-header">
<span style="font-size:16px">季度供应商绩效评级请求</span>
<span style="font-size:16px">考核单</span>
</div>
<el-table :data="indicatorList" size="mini" border :height="indicatorTableHeight" highlight-current-row
ref="indicatorTable" @row-click="selectIndicatorRow" v-loading="indicatorLoading">
@ -110,7 +108,7 @@
<!-- 调整供应商等级 -->
<el-dialog title="调整供应商等级" :visible.sync="adjustVisible" width="420px" :close-on-click-modal="false" v-drag>
<el-form label-position="top" size="small">
<el-form-item label="请求编号">
<el-form-item label="任务单号">
<el-input v-model="currentRequest.requestNo" disabled />
</el-form-item>
<el-form-item label="供应商名称">
@ -132,7 +130,7 @@
</el-dialog>
<!-- 新建 / 编辑 绩效请求弹窗 -->
<el-dialog :title="isEdit ? '编辑绩效评估请求' : '新增绩效评估请求'" :visible.sync="createDialogVisible" :width="isEdit ? '760px' : '940px'" top="4vh"
<el-dialog :title="isEdit ? '编辑绩效评估考核' : '新增绩效评估考核'" :visible.sync="createDialogVisible" :width="isEdit ? '760px' : '940px'" top="4vh"
:close-on-click-modal="false" v-drag>
<el-form :inline="true" label-position="top" size="mini" class="create-top-form">
<el-form-item :required="true">
@ -149,7 +147,7 @@
<el-form-item label=" " style="margin-top:-2px" v-if="!isEdit">
<el-button size="small" type="primary" :disabled="!createForm.templateNo" @click="openTemplateIndicatorDialog">Indicator Info</el-button>
</el-form-item>
<el-form-item v-if="isEdit" label="请求编号">
<el-form-item v-if="isEdit" label="任务单号">
<el-input v-model="createForm.requestNo" disabled style="width:150px" />
</el-form-item>
<el-form-item label=" " style="margin-top:-2px" v-if="isEdit">
@ -262,6 +260,10 @@ import {
} from '@/api/supplierPerformance/performanceEvaluateRequestBuild.js'
import Chooselist from '@/views/modules/common/Chooselist_eam'
import {getTemplateIndicators} from "../../../api/supplierPerformance/performanceIndicatorTemplate";
import {
PERF_TASK_STATUS_OPTIONS,
PERF_TASK_STATUS_DEFAULT
} from './supplierPerformanceStatusOptions.js'
export default {
components: {
@ -276,6 +278,7 @@ export default {
pageIndex: 1,
pageSize: 20,
totalPage: 0,
taskStatusOptions: PERF_TASK_STATUS_OPTIONS,
searchData: {
site: this.$store.state.user.site,
username: this.$store.state.user.name,
@ -367,7 +370,7 @@ export default {
calcHeight() { this.$nextTick(()=> { this.height = window.innerHeight - 40 }) },
getList() {
this.loading = true
if (this.searchData.statusList.length === 0) this.searchData.statusList = ['未开始','进行中','已完成','已审核','待审批','审批通过','审批拒绝']
if (this.searchData.statusList.length === 0) this.searchData.statusList = [...PERF_TASK_STATUS_DEFAULT]
const params = { ...this.searchData, statusList: this.searchData.statusList, page: this.pageIndex, limit: this.pageSize,selectType: 2 }
searchEvaluateRequestList(params).then(({data}) => {
if (data && (data.code === 0 || data.code === '0')) {
@ -452,10 +455,10 @@ export default {
}
const hasScored = indicators.some(i => Number(i.score) > 0)
if (hasScored) {
this.$message.error('该请求存在已评分指标 ,禁止删除')
this.$message.error('该考核任务存在已评分指标,禁止删除')
return
}
this.$confirm('确认删除该请求: ' + row.requestNo + ' ?', '提示', { type: 'warning' }).then(() => {
this.$confirm('确认删除该考核任务: ' + row.requestNo + ' ?', '提示', { type: 'warning' }).then(() => {
deleteEvaluateRequest({ id: row.id, site }).then(({data: delData}) => {
if (delData && (delData.code === 0 || delData.code === '0')) { this.$message.success('删除成功'); this.getList() }
else { this.$message.error((delData && delData.msg) || '删除失败') }

25
src/views/modules/supplierPerformance/performanceEvaluateRequestApprove.vue

@ -2,7 +2,7 @@
<div class="customer-css">
<!-- 查询条件 -->
<el-form :inline="true" label-position="top" class="pi-search-form">
<el-form-item label="请求编号">
<el-form-item label="任务单号">
<el-input v-model="searchData.requestNo" style="width:140px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item>
@ -35,9 +35,11 @@
</el-form-item>
<el-form-item label="状态">
<el-select v-model="searchData.statusList" multiple collapse-tags clearable style="width:150px" placeholder="All">
<el-option label="待审批" value="待审批" />
<el-option label="审批通过" value="审批通过" />
<el-option label="审批拒绝" value="审批拒绝" />
<el-option
v-for="item in reviewStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label=" ">
@ -53,7 +55,7 @@
<a v-if="canApprove(scope.row)" class="customer-a" @click.stop="openApproveDialog(scope.row)">Approve</a>
</template>
</el-table-column>
<el-table-column prop="requestNo" label="请求编号" min-width="120" header-align="center" align="left" />
<el-table-column prop="requestNo" label="任务单号" min-width="120" header-align="center" align="left" />
<el-table-column prop="supplierNo" label="供应商编号" width="120" header-align="center" align="left" />
<el-table-column prop="supplierName" label="供应商名称" min-width="200" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="wantedCompleteDate" label="预计完成时间" width="160" header-align="center" align="center" />
@ -75,7 +77,7 @@
<el-row :gutter="10" style="margin-top:12px">
<el-col :span="16">
<div class="sub-panel-header">
<span style="font-size:16px">请求</span>
<span style="font-size:16px">考核单</span>
</div>
<el-table :data="indicatorList" size="mini" border :height="indicatorTableHeight" highlight-current-row
ref="indicatorTable" v-loading="indicatorLoading" @row-click="selectIndicatorRow">
@ -107,7 +109,7 @@
<!-- Approve 弹窗 -->
<el-dialog title="批准" :visible.sync="approveDialogVisible" width="374px" top="8vh" :close-on-click-modal="false" v-drag>
<el-form :inline="true" label-position="top" class="create-top-form">
<el-form-item label="请求编号">
<el-form-item label="任务单号">
<el-input v-model="approveForm.requestNo" disabled style="width:120px" />
</el-form-item>
<el-form-item label="创建者">
@ -139,6 +141,10 @@
<script>
import { searchEvaluateRequestList, getEvaluateRequestIndicators, updateEvaluateRequest, getEvaluateRequestIndicatorProgress } from '@/api/supplierPerformance/myPerformanceEvaluateRequest.js'
import {updateEvaluateRequestReviewOrApprove} from "../../../api/supplierPerformance/myPerformanceEvaluateRequest";
import {
PERF_REVIEW_STATUS_OPTIONS,
PERF_REVIEW_STATUS_DEFAULT
} from './supplierPerformanceStatusOptions.js'
import Chooselist from '@/views/modules/common/Chooselist_eam'
export default {
components: {
@ -153,8 +159,9 @@ export default {
pageIndex:1,
pageSize:20,
totalPage:0,
reviewStatusOptions: PERF_REVIEW_STATUS_OPTIONS,
searchData:{ site:this.$store.state.user.site, username:this.$store.state.user.name, requestNo:'',
supplierNo:'', supplierName:'', createBy:'', wantedCompleteDateStart:'', wantedCompleteDateEnd:'', createDateStart:'', createDateEnd:'', statusList:['待审批'] },
supplierNo:'', supplierName:'', createBy:'', wantedCompleteDateStart:'', wantedCompleteDateEnd:'', createDateStart:'', createDateEnd:'', statusList:['已审核'] },
currentRequest:{},
indicatorList:[],
indicatorLoading:false,
@ -200,7 +207,7 @@ export default {
calcHeight(){ this.$nextTick(()=> { this.height = window.innerHeight - 40 }) },
getList(){
this.loading=true
if (this.searchData.statusList.length === 0) this.searchData.statusList = ['待审批','审批通过','审批拒绝']
if (this.searchData.statusList.length === 0) this.searchData.statusList = [...PERF_REVIEW_STATUS_DEFAULT]
const params={ ...this.searchData, statusList: this.searchData.statusList, page:this.pageIndex, limit:this.pageSize, selectType:1 }
searchEvaluateRequestList(params).then(({data})=> {
if(data && (data.code===0||data.code==='0')){

768
src/views/modules/supplierPerformance/performanceEvaluateRequestReview.vue

@ -1,378 +1,390 @@
<template>
<div class="customer-css">
<!-- 查询条件 -->
<el-form :inline="true" label-position="top" class="pi-search-form">
<el-form-item label="请求编号">
<el-input v-model="searchData.requestNo" style="width:140px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item>
<span style="cursor: pointer" slot="label" @click="getBaseList(501)"><a href="#">供应商编码</a></span>
<el-input v-model="searchData.supplierNo" style="width: 130px"></el-input>
</el-form-item>
<el-form-item label="供应商名称">
<el-input v-model="searchData.supplierName" style="width:200px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item label="创建者">
<el-input v-model="searchData.createBy" style="width:140px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item label="预计完成时间">
<el-date-picker v-model="searchData.wantedCompleteDateStart" type="date" placeholder="Start Date"
value-format="yyyy-MM-dd"
style="width:140px" />
-
<el-date-picker v-model="searchData.wantedCompleteDateEnd" type="date" placeholder="End Date"
value-format="yyyy-MM-dd"
style="width:140px" />
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker v-model="searchData.createDateStart" type="date" placeholder="Start Date"
value-format="yyyy-MM-dd HH:mm:ss"
style="width:140px" />
-
<el-date-picker v-model="searchData.createDateEnd" type="date" placeholder="End Date"
value-format="yyyy-MM-dd HH:mm:ss"
style="width:140px" />
</el-form-item>
<el-form-item label="状态">
<el-select v-model="searchData.statusList" multiple collapse-tags clearable style="width:150px" placeholder="All">
<el-option label="已完成" value="已完成" />
<el-option label="已审核" value="已审核" />
<el-option label="待审批" value="待审批" />
<el-option label="审批通过" value="审批通过" />
<el-option label="审批拒绝" value="审批拒绝" />
</el-select>
</el-form-item>
<el-form-item label=" ">
<el-button type="primary" class="customer-bun-min" @click="getList">查询</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<el-table :data="dataList" :height="requestTableHeight - 100" border highlight-current-row v-loading="loading"
@row-click="rowClick" @current-change="handleMainCurrentChange" ref="mainTable" style="width:100%;margin-bottom:8px">
<el-table-column fixed="right" label="操作" width="175" header-align="center" align="center">
<template slot-scope="scope">
<template v-if="canOperate(scope.row)">
<a class="customer-a" @click.stop="openReviewDialog(scope.row)">审核</a>
<span style="color:#dcdfe6;margin:0 4px">|</span>
<a class="customer-a" @click.stop="submitForApprove(scope.row)">提交上级审批</a>
</template>
</template>
</el-table-column>
<el-table-column prop="requestNo" label="请求编号" min-width="120" header-align="center" align="left" />
<el-table-column prop="supplierNo" label="供应商编码" width="120" header-align="center" align="left" />
<el-table-column prop="supplierName" label="供应商名称" min-width="200" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="wantedCompleteDate" label="预计完成时间" width="160" header-align="center" align="center" />
<el-table-column prop="status" label="状态" width="90" header-align="center" align="center" />
<el-table-column prop="reviewBy" label="审核人" min-width="90" header-align="center" align="left" />
<el-table-column prop="reviewDate" label="审核时间" width="130" header-align="center" align="center" />
<el-table-column prop="approveBy" label="批准人" min-width="90" header-align="center" align="left" />
<el-table-column prop="approveDate" label="批准时间" width="130" header-align="center" align="center" />
<el-table-column prop="comments" label="备注" min-width="160" header-align="center" align="left" />
<el-table-column prop="createBy" label="创建者" min-width="100" header-align="center" align="left" />
<el-table-column prop="createDate" label="创建时间" width="130" header-align="center" align="center" />
</el-table>
<el-pagination style="margin-top:0" @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
:current-page="pageIndex" :page-sizes="[20,50,100,200,500]" :page-size="pageSize" :total="totalPage"
layout="total, sizes, prev, pager, next, jumper" />
<!-- 指标 + Progress -->
<el-row :gutter="10" style="margin-top:12px">
<el-col :span="16">
<div class="sub-panel-header">
<span style="font-size:16px">请求</span>
</div>
<el-table :data="indicatorList" size="mini" border :height="indicatorTableHeight" highlight-current-row
ref="indicatorTable" v-loading="indicatorLoading" @row-click="selectIndicatorRow">
<el-table-column prop="indicatorCode" label="指标代码" min-width="120" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="indicatorDesc" label="指标描述" min-width="220" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="category" label="指标分类" width="110" header-align="center" align="center" />
<el-table-column prop="ownerRole" label="负责部门" width="110" header-align="center" align="center" />
<el-table-column prop="maxScore" label="最高分" width="110" header-align="center" align="right" />
<el-table-column prop="score" label="分数" width="90" header-align="center" align="right" />
</el-table>
</el-col>
<el-col :span="8">
<div class="sub-panel-header">
<span style="font-size:16px">进度 <span v-if="viewIndicatorCode"></span></span>
</div>
<el-table :data="progressList" size="mini" border :height="indicatorTableHeight" v-loading="progressLoading">
<el-table-column prop="departmentName" label="部门" min-width="90" header-align="center"
align="left" />
<el-table-column prop="owner" label="负责人" min-width="80" header-align="center" align="left" />
<el-table-column prop="userDisplay" label="负责人名称" min-width="90" header-align="center" align="left" />
<el-table-column prop="completedFlag" label="已完成" width="60" header-align="center" align="center">
</el-table-column>
<el-table-column prop="completedDate" label="完成时间" min-width="140" header-align="center"
align="center" />
</el-table>
</el-col>
</el-row>
<!-- Review 弹窗 -->
<el-dialog title="审核" :visible.sync="reviewDialogVisible" width="374px" top="8vh" :close-on-click-modal="false"
v-drag>
<el-form :inline="true" label-position="top" class="create-top-form">
<el-form-item
label="请求编号"><el-input v-model="reviewForm.requestNo" disabled style="width: 120px"/></el-form-item>
<el-form-item label="审核人"><el-input v-model="reviewForm.createBy" disabled style="width: 120px"/></el-form-item>
</el-form>
<el-form :inline="true" label-position="top" size="mini" class="create-top-form">
<el-form-item label="供应商编号"><el-input v-model="reviewForm.supplierNo" disabled style="width: 120px"/></el-form-item>
<el-form-item label="供应商名称"><el-input v-model="reviewForm.supplierName" disabled
style="width: 210px"/></el-form-item>
</el-form>
<el-form :inline="true" label-position="top" size="mini" class="create-top-form">
<el-form-item label="备注" :required="true">
<el-input type="textarea" :rows="2" v-model="reviewForm.comments" style="width: 343px" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" :loading="reviewSaving" @click="saveReview">审核</el-button>
<el-button @click="reviewDialogVisible=false">取消</el-button>
</span>
</el-dialog>
<Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
</div>
</template>
<script>
import { searchEvaluateRequestList, getEvaluateRequestIndicators, getEvaluateRequestIndicatorProgress } from '@/api/supplierPerformance/myPerformanceEvaluateRequest.js'
import {updateEvaluateRequestReviewOrApprove} from "../../../api/supplierPerformance/myPerformanceEvaluateRequest";
import Chooselist from '@/views/modules/common/Chooselist_eam'
export default {
components: {
Chooselist,
},
name: 'PerformanceEvaluateRequestReview',
data() {
return {
height: 500,
loading: false,
dataList: [],
pageIndex: 1,
pageSize: 20,
totalPage: 0,
searchData: {
site: this.$store.state.user.site,
username: this.$store.state.user.name,
requestNo: '',
supplierNo: '',
supplierName: '',
createBy: '',
wantedCompleteDateStart: '',
wantedCompleteDateEnd: '',
createDateStart: '',
createDateEnd: '',
statusList: ['已完成']
},
currentRequest: {},
indicatorList: [],
indicatorLoading: false,
reviewDialogVisible: false,
reviewSaving: false,
reviewForm: { id:'', requestNo:'', supplierNo:'', supplierName:'', createBy:'', comments:'' },
viewIndicatorCode: '',
progressList: [],
progressLoading: false,
progressRequestKey: '',
}
},
computed: {
requestTableHeight() { return this.height - 360 < 260 ? 260 : this.height - 360 },
indicatorTableHeight() { return 300 }
},
mounted() { this.calcHeight(); window.addEventListener('resize', this.calcHeight); this.getList() },
beforeDestroy() { window.removeEventListener('resize', this.calcHeight) },
methods: {
//
getBaseList (val) {
this.tagNo = val
this.$nextTick(() => {
let strVal = ''
let conSql = ''
if (val === 501) {
strVal = this.searchData.supplierNo || ''
conSql = " and site = '" + this.$store.state.user.site + "'"
}
this.$refs.baseList.init(val, strVal, conSql)
})
},
/* 列表方法的回调 */
getBaseData (val) {
console.log('Chooselist返回的数据:', val, 'tagNo:', this.tagNo)
if (this.tagNo === 501) {
// - SQL: SupplierID, SupplierName
const supplierNoVal = val.SupplierID || val.supplierID || val.supplierId || ''
this.searchData.supplierNo = supplierNoVal
console.log('供应商编码赋值:', supplierNoVal)
}
},
calcHeight() { this.$nextTick(()=> { this.height = window.innerHeight - 40 }) },
clearSubDetails() {
this.currentRequest = {}
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
this.progressRequestKey = ''
this.$nextTick(() => {
if (this.$refs.mainTable) this.$refs.mainTable.setCurrentRow(null)
if (this.$refs.indicatorTable) this.$refs.indicatorTable.setCurrentRow(null)
})
},
getList() {
this.loading = true
if (this.searchData.statusList.length === 0) this.searchData.statusList = ['已完成','已审核','待审批','审批通过','审批拒绝']
const params = { ...this.searchData, statusList: this.searchData.statusList , page: this.pageIndex, limit: this.pageSize, selectType: 1 }
searchEvaluateRequestList(params).then(({data})=> {
if (data && (data.code===0||data.code==='0')) {
if (data.page) {
this.dataList = data.page.list || []
this.pageIndex = data.page.currPage || params.page
this.pageSize = data.page.pageSize || params.limit
this.totalPage = data.page.totalCount || 0
if (this.dataList.length > 0) {
this.$nextTick(() => {
this.$refs.mainTable.setCurrentRow(this.dataList[0])
this.rowClick(this.dataList[0])
})
} else {
this.clearSubDetails()
}
} else {
this.dataList = data.rows || []
this.totalPage = data.total || this.dataList.length
if (this.dataList.length === 0) this.clearSubDetails()
}
} else {
this.dataList = []
this.totalPage = 0
this.clearSubDetails()
}
}).catch(() => {
this.dataList = []
this.totalPage = 0
this.clearSubDetails()
})
.finally(()=> { this.loading=false })
},
sizeChangeHandle(v){ this.pageSize=v; this.pageIndex=1; this.getList() },
currentChangeHandle(v){ this.pageIndex=v; this.getList() },
handleMainCurrentChange(row) {
if (!row) this.clearSubDetails()
},
rowClick(row) {
if (!row) {
this.clearSubDetails()
return
}
this.currentRequest = row
this.viewIndicatorCode = ''
this.progressList = []
this.loadIndicators()
},
loadIndicators() {
if (!this.currentRequest.requestNo) {
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
return
}
this.indicatorLoading = true
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
const p = { requestId: this.currentRequest.id, requestNo: this.currentRequest.requestNo, site: this.$store.state.user.site }
getEvaluateRequestIndicators(p).then(({ data }) => {
if (data && (data.code === 0 || data.code === '0')) {
this.indicatorList = data.list || []
this.$nextTick(() => {
if (this.indicatorList.length > 0) {
this.$refs.indicatorTable.setCurrentRow(this.indicatorList[0])
this.selectIndicatorRow(this.indicatorList[0])
} else {
this.viewIndicatorCode = ''
this.progressList = []
this.$refs.indicatorTable && this.$refs.indicatorTable.setCurrentRow(null)
}
})
} else {
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
}
}).catch(() => {
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
}).finally(() => { this.indicatorLoading = false })
},
selectIndicatorRow(row) {
if (!row) {
this.viewIndicatorCode = ''
this.progressList = []
return
}
this.viewIndicatorCode = row.indicatorCode
this.progressList = []
this.loadProgress()
},
loadProgress() {
if (!this.viewIndicatorCode || !this.currentRequest.requestNo) {
this.progressList = []
return
}
const requestKey = `${this.currentRequest.id || ''}_${this.currentRequest.requestNo}_${this.viewIndicatorCode}`
this.progressRequestKey = requestKey
this.progressLoading = true
const p = { requestId: this.currentRequest.id, requestNo: this.currentRequest.requestNo, site: this.$store.state.user.site }
getEvaluateRequestIndicatorProgress(p).then(({ data }) => {
if (this.progressRequestKey !== requestKey) return
if (data && (data.code === 0 || data.code === '0')) {
this.progressList = data.list || []
} else {
this.progressList = []
}
}).catch(() => {
if (this.progressRequestKey !== requestKey) return
this.progressList = []
}).finally(() => { this.progressLoading = false })
},
canOperate(row){
if(!row) return false;
const s=(row.status||'').trim();
return s==='已完成';
},
openReviewDialog(row){
this.reviewForm = { id:row.id, requestNo:row.requestNo, supplierNo:row.supplierNo, supplierName:row.supplierName, createBy:row.createBy, comments: row.reviewComments || '' }
this.reviewDialogVisible = true
},
saveReview(){
if (this.reviewSaving) return
const c = (this.reviewForm.comments||'').trim()
if(!c){ this.$message.warning('Comments不能为空'); return }
this.reviewSaving = true
const payload = { site:this.$store.state.user.site, id:this.reviewForm.id, requestNo:this.reviewForm.requestNo,
comments:c, updateBy:this.$store.state.user.name, updateType: 1 }
updateEvaluateRequestReviewOrApprove(payload).then(({data})=> {
if (data && (data.code===0||data.code==='0')) { this.$message.success('Saved'); this.reviewDialogVisible=false; this.getList() } else { this.$message.error((data&&data.msg)||'Save failed') }
}).catch(e=> this.$message.error('Save failed: '+ e.message)).finally(()=> { this.reviewSaving=false })
},
submitForApprove(row){
this.$confirm('确认提交到审批?','提示',{type:'warning'}).then(()=> {
const payload = { site:this.$store.state.user.site, id:row.id, requestNo:row.requestNo, status:'待审批',
updateBy:this.$store.state.user.name, updateType: 2 }
updateEvaluateRequestReviewOrApprove(payload).then(({data})=> {
if (data && (data.code===0||data.code==='0')) { this.$message.success('已提交'); this.getList() } else { this.$message.error((data&&data.msg)||'提交失败') }
}).catch(e=> this.$message.error('提交失败: '+ e.message))
}).catch(()=>{})
}
}
}
</script>
<style scoped>
.pi-search-form { margin-top:0; }
.sub-panel-header { display:flex; align-items:center; justify-content:space-between; font-weight:600; padding:4px 6px; background:#f5f7fa; border:1px solid #ebeef5; border-bottom:none; }
</style>
<template>
<div class="customer-css">
<!-- 查询条件 -->
<el-form :inline="true" label-position="top" class="pi-search-form">
<el-form-item label="任务单号">
<el-input v-model="searchData.requestNo" style="width:140px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item>
<span style="cursor: pointer" slot="label" @click="getBaseList(501)"><a href="#">供应商编码</a></span>
<el-input v-model="searchData.supplierNo" style="width: 130px"></el-input>
</el-form-item>
<el-form-item label="供应商名称">
<el-input v-model="searchData.supplierName" style="width:200px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item label="创建者">
<el-input v-model="searchData.createBy" style="width:140px" @keyup.enter.native="getList" />
</el-form-item>
<el-form-item label="预计完成时间">
<el-date-picker v-model="searchData.wantedCompleteDateStart" type="date" placeholder="Start Date"
value-format="yyyy-MM-dd"
style="width:140px" />
-
<el-date-picker v-model="searchData.wantedCompleteDateEnd" type="date" placeholder="End Date"
value-format="yyyy-MM-dd"
style="width:140px" />
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker v-model="searchData.createDateStart" type="date" placeholder="Start Date"
value-format="yyyy-MM-dd HH:mm:ss"
style="width:140px" />
-
<el-date-picker v-model="searchData.createDateEnd" type="date" placeholder="End Date"
value-format="yyyy-MM-dd HH:mm:ss"
style="width:140px" />
</el-form-item>
<el-form-item label="状态">
<el-select v-model="searchData.statusList" multiple collapse-tags clearable style="width:150px" placeholder="All">
<el-option
v-for="item in reviewStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label=" ">
<el-button type="primary" class="customer-bun-min" @click="getList">查询</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<el-table :data="dataList" :height="requestTableHeight - 100" border highlight-current-row v-loading="loading"
@row-click="rowClick" @current-change="handleMainCurrentChange" ref="mainTable" style="width:100%;margin-bottom:8px">
<el-table-column fixed="right" label="操作" width="80" header-align="center" align="center">
<template slot-scope="scope">
<a v-if="canOperate(scope.row)" class="customer-a" @click.stop="openReviewDialog(scope.row)">审核</a>
</template>
</el-table-column>
<el-table-column prop="requestNo" label="任务单号" min-width="120" header-align="center" align="left" />
<el-table-column prop="supplierNo" label="供应商编码" width="120" header-align="center" align="left" />
<el-table-column prop="supplierName" label="供应商名称" min-width="200" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="wantedCompleteDate" label="预计完成时间" width="160" header-align="center" align="center" />
<el-table-column prop="status" label="状态" width="90" header-align="center" align="center" />
<el-table-column prop="reviewBy" label="审核人" min-width="90" header-align="center" align="left" />
<el-table-column prop="reviewDate" label="审核时间" width="130" header-align="center" align="center" />
<el-table-column prop="approveBy" label="批准人" min-width="90" header-align="center" align="left" />
<el-table-column prop="approveDate" label="批准时间" width="130" header-align="center" align="center" />
<el-table-column prop="comments" label="备注" min-width="160" header-align="center" align="left" />
<el-table-column prop="createBy" label="创建者" min-width="100" header-align="center" align="left" />
<el-table-column prop="createDate" label="创建时间" width="130" header-align="center" align="center" />
</el-table>
<el-pagination style="margin-top:0" @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
:current-page="pageIndex" :page-sizes="[20,50,100,200,500]" :page-size="pageSize" :total="totalPage"
layout="total, sizes, prev, pager, next, jumper" />
<!-- 指标 + Progress -->
<el-row :gutter="10" style="margin-top:12px">
<el-col :span="16">
<div class="sub-panel-header">
<span style="font-size:16px">考核单</span>
</div>
<el-table :data="indicatorList" size="mini" border :height="indicatorTableHeight" highlight-current-row
ref="indicatorTable" v-loading="indicatorLoading" @row-click="selectIndicatorRow">
<el-table-column prop="indicatorCode" label="指标代码" min-width="120" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="indicatorDesc" label="指标描述" min-width="220" header-align="center" align="left" show-overflow-tooltip />
<el-table-column prop="category" label="指标分类" width="110" header-align="center" align="center" />
<el-table-column prop="ownerRole" label="负责部门" width="110" header-align="center" align="center" />
<el-table-column prop="maxScore" label="最高分" width="110" header-align="center" align="right" />
<el-table-column prop="score" label="分数" width="90" header-align="center" align="right" />
</el-table>
</el-col>
<el-col :span="8">
<div class="sub-panel-header">
<span style="font-size:16px">进度 <span v-if="viewIndicatorCode"></span></span>
</div>
<el-table :data="progressList" size="mini" border :height="indicatorTableHeight" v-loading="progressLoading">
<el-table-column prop="departmentName" label="部门" min-width="90" header-align="center"
align="left" />
<el-table-column prop="owner" label="负责人" min-width="80" header-align="center" align="left" />
<el-table-column prop="userDisplay" label="负责人名称" min-width="90" header-align="center" align="left" />
<el-table-column prop="completedFlag" label="已完成" width="60" header-align="center" align="center">
</el-table-column>
<el-table-column prop="completedDate" label="完成时间" min-width="140" header-align="center"
align="center" />
</el-table>
</el-col>
</el-row>
<!-- Review 弹窗 -->
<el-dialog title="审核" :visible.sync="reviewDialogVisible" width="374px" top="8vh" :close-on-click-modal="false"
v-drag>
<el-form :inline="true" label-position="top" class="create-top-form">
<el-form-item
label="任务单号"><el-input v-model="reviewForm.requestNo" disabled style="width: 120px"/></el-form-item>
<el-form-item label="审核人"><el-input v-model="reviewForm.createBy" disabled style="width: 120px"/></el-form-item>
</el-form>
<el-form :inline="true" label-position="top" size="mini" class="create-top-form">
<el-form-item label="供应商编号"><el-input v-model="reviewForm.supplierNo" disabled style="width: 120px"/></el-form-item>
<el-form-item label="供应商名称"><el-input v-model="reviewForm.supplierName" disabled
style="width: 210px"/></el-form-item>
</el-form>
<el-form :inline="true" label-position="top" size="mini" class="create-top-form">
<el-form-item label="备注" :required="true">
<el-input type="textarea" :rows="2" v-model="reviewForm.comments" style="width: 343px" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" :loading="reviewSaving" @click="saveReview">审核</el-button>
<el-button type="danger" :loading="voidSaving" @click="voidReview">作废</el-button>
<el-button @click="reviewDialogVisible=false">取消</el-button>
</span>
</el-dialog>
<Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
</div>
</template>
<script>
import { searchEvaluateRequestList, getEvaluateRequestIndicators, getEvaluateRequestIndicatorProgress } from '@/api/supplierPerformance/myPerformanceEvaluateRequest.js'
import { updateEvaluateRequestReviewOrApprove } from '@/api/supplierPerformance/myPerformanceEvaluateRequest'
import {
PERF_REVIEW_STATUS_OPTIONS,
PERF_REVIEW_STATUS_DEFAULT
} from './supplierPerformanceStatusOptions.js'
import Chooselist from '@/views/modules/common/Chooselist_eam'
export default {
components: {
Chooselist,
},
name: 'PerformanceEvaluateRequestReview',
data() {
return {
height: 500,
loading: false,
dataList: [],
pageIndex: 1,
pageSize: 20,
totalPage: 0,
reviewStatusOptions: PERF_REVIEW_STATUS_OPTIONS,
searchData: {
site: this.$store.state.user.site,
username: this.$store.state.user.name,
requestNo: '',
supplierNo: '',
supplierName: '',
createBy: '',
wantedCompleteDateStart: '',
wantedCompleteDateEnd: '',
createDateStart: '',
createDateEnd: '',
statusList: ['已完成']
},
currentRequest: {},
indicatorList: [],
indicatorLoading: false,
reviewDialogVisible: false,
reviewSaving: false,
voidSaving: false,
reviewForm: { id:'', requestNo:'', supplierNo:'', supplierName:'', createBy:'', comments:'' },
viewIndicatorCode: '',
progressList: [],
progressLoading: false,
progressRequestKey: '',
}
},
computed: {
requestTableHeight() { return this.height - 360 < 260 ? 260 : this.height - 360 },
indicatorTableHeight() { return 300 }
},
mounted() { this.calcHeight(); window.addEventListener('resize', this.calcHeight); this.getList() },
beforeDestroy() { window.removeEventListener('resize', this.calcHeight) },
methods: {
getBaseList (val) {
this.tagNo = val
this.$nextTick(() => {
let strVal = ''
let conSql = ''
if (val === 501) {
strVal = this.searchData.supplierNo || ''
conSql = " and site = '" + this.$store.state.user.site + "'"
}
this.$refs.baseList.init(val, strVal, conSql)
})
},
getBaseData (val) {
if (this.tagNo === 501) {
const supplierNoVal = val.SupplierID || val.supplierID || val.supplierId || ''
this.searchData.supplierNo = supplierNoVal
}
},
calcHeight() { this.$nextTick(()=> { this.height = window.innerHeight - 40 }) },
clearSubDetails() {
this.currentRequest = {}
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
this.progressRequestKey = ''
this.$nextTick(() => {
if (this.$refs.mainTable) this.$refs.mainTable.setCurrentRow(null)
if (this.$refs.indicatorTable) this.$refs.indicatorTable.setCurrentRow(null)
})
},
getList() {
this.loading = true
if (this.searchData.statusList.length === 0) this.searchData.statusList = [...PERF_REVIEW_STATUS_DEFAULT]
const params = { ...this.searchData, statusList: this.searchData.statusList , page: this.pageIndex, limit: this.pageSize, selectType: 1 }
searchEvaluateRequestList(params).then(({data})=> {
if (data && (data.code===0||data.code==='0')) {
if (data.page) {
this.dataList = data.page.list || []
this.pageIndex = data.page.currPage || params.page
this.pageSize = data.page.pageSize || params.limit
this.totalPage = data.page.totalCount || 0
if (this.dataList.length > 0) {
this.$nextTick(() => {
this.$refs.mainTable.setCurrentRow(this.dataList[0])
this.rowClick(this.dataList[0])
})
} else {
this.clearSubDetails()
}
} else {
this.dataList = data.rows || []
this.totalPage = data.total || this.dataList.length
if (this.dataList.length === 0) this.clearSubDetails()
}
} else {
this.dataList = []
this.totalPage = 0
this.clearSubDetails()
}
}).catch(() => {
this.dataList = []
this.totalPage = 0
this.clearSubDetails()
})
.finally(()=> { this.loading=false })
},
sizeChangeHandle(v){ this.pageSize=v; this.pageIndex=1; this.getList() },
currentChangeHandle(v){ this.pageIndex=v; this.getList() },
handleMainCurrentChange(row) {
if (!row) this.clearSubDetails()
},
rowClick(row) {
if (!row) {
this.clearSubDetails()
return
}
this.currentRequest = row
this.viewIndicatorCode = ''
this.progressList = []
this.loadIndicators()
},
loadIndicators() {
if (!this.currentRequest.requestNo) {
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
return
}
this.indicatorLoading = true
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
const p = { requestId: this.currentRequest.id, requestNo: this.currentRequest.requestNo, site: this.$store.state.user.site }
getEvaluateRequestIndicators(p).then(({ data }) => {
if (data && (data.code === 0 || data.code === '0')) {
this.indicatorList = data.list || []
this.$nextTick(() => {
if (this.indicatorList.length > 0) {
this.$refs.indicatorTable.setCurrentRow(this.indicatorList[0])
this.selectIndicatorRow(this.indicatorList[0])
} else {
this.viewIndicatorCode = ''
this.progressList = []
this.$refs.indicatorTable && this.$refs.indicatorTable.setCurrentRow(null)
}
})
} else {
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
}
}).catch(() => {
this.indicatorList = []
this.viewIndicatorCode = ''
this.progressList = []
}).finally(() => { this.indicatorLoading = false })
},
selectIndicatorRow(row) {
if (!row) {
this.viewIndicatorCode = ''
this.progressList = []
return
}
this.viewIndicatorCode = row.indicatorCode
this.progressList = []
this.loadProgress()
},
loadProgress() {
if (!this.viewIndicatorCode || !this.currentRequest.requestNo) {
this.progressList = []
return
}
const requestKey = `${this.currentRequest.id || ''}_${this.currentRequest.requestNo}_${this.viewIndicatorCode}`
this.progressRequestKey = requestKey
this.progressLoading = true
const p = { requestId: this.currentRequest.id, requestNo: this.currentRequest.requestNo, site: this.$store.state.user.site }
getEvaluateRequestIndicatorProgress(p).then(({ data }) => {
if (this.progressRequestKey !== requestKey) return
if (data && (data.code === 0 || data.code === '0')) {
this.progressList = data.list || []
} else {
this.progressList = []
}
}).catch(() => {
if (this.progressRequestKey !== requestKey) return
this.progressList = []
}).finally(() => { this.progressLoading = false })
},
canOperate(row){
if(!row) return false;
const s=(row.status||'').trim();
return s==='已完成';
},
openReviewDialog(row){
this.reviewForm = { id:row.id, requestNo:row.requestNo, supplierNo:row.supplierNo, supplierName:row.supplierName, createBy:row.createBy, comments: row.reviewComments || '' }
this.reviewDialogVisible = true
},
saveReview(){
if (this.reviewSaving || this.voidSaving) return
const c = (this.reviewForm.comments||'').trim()
if(!c){ this.$message.warning('Comments不能为空'); return }
this.reviewSaving = true
const payload = { site:this.$store.state.user.site, id:this.reviewForm.id, requestNo:this.reviewForm.requestNo,
comments:c, updateBy:this.$store.state.user.name, updateType: 1 }
updateEvaluateRequestReviewOrApprove(payload).then(({data})=> {
if (data && (data.code===0||data.code==='0')) { this.$message.success('审核成功'); this.reviewDialogVisible=false; this.getList() } else { this.$message.error((data&&data.msg)||'审核失败') }
}).catch(e=> this.$message.error('审核失败: '+ e.message)).finally(()=> { this.reviewSaving=false })
},
voidReview() {
if (this.reviewSaving || this.voidSaving) return
this.$confirm('是否作废该绩效审核单?', '提示', { type: 'warning' }).then(() => {
this.voidSaving = true
const payload = {
site: this.$store.state.user.site,
id: this.reviewForm.id,
requestNo: this.reviewForm.requestNo,
updateBy: this.$store.state.user.name,
updateType: 4
}
updateEvaluateRequestReviewOrApprove(payload).then(({ data }) => {
if (data && (data.code === 0 || data.code === '0')) {
this.$message.success('作废成功')
this.reviewDialogVisible = false
this.getList()
} else {
this.$message.error((data && data.msg) || '作废失败')
}
}).catch(e => this.$message.error('作废失败: ' + e.message)).finally(() => { this.voidSaving = false })
}).catch(() => {})
}
}
}
</script>
<style scoped>
.pi-search-form { margin-top:0; }
.sub-panel-header { display:flex; align-items:center; justify-content:space-between; font-weight:600; padding:4px 6px; background:#f5f7fa; border:1px solid #ebeef5; border-bottom:none; }
</style>

19
src/views/modules/supplierPerformance/supplierPerformanceStatusOptions.js

@ -0,0 +1,19 @@
/** 绩效管理 - 考核任务状态下拉(静态,不含上级审批流程状态) */
export const PERF_TASK_STATUS_OPTIONS = [
{ label: '未开始', value: '未开始' },
{ label: '进行中', value: '进行中' },
{ label: '已完成', value: '已完成' },
{ label: '已审核', value: '已审核' },
{ label: '已作废', value: '已作废' }
]
export const PERF_TASK_STATUS_DEFAULT = ['未开始', '进行中', '已完成', '已审核', '已作废']
/** 绩效审核页状态下拉 */
export const PERF_REVIEW_STATUS_OPTIONS = [
{ label: '已完成', value: '已完成' },
{ label: '已审核', value: '已审核' },
{ label: '已作废', value: '已作废' }
]
export const PERF_REVIEW_STATUS_DEFAULT = ['已完成', '已审核', '已作废']
Loading…
Cancel
Save