master
lion 11 months ago
parent 880bb137d3
commit 3bf9051a6a

@ -27,7 +27,8 @@
type="primary"
class="slot-btns-item"
style="margin: 10px;"
>@expand-change="expandChange"
@expand-change="expandChange"
>
年中自评确认
</Button>
</el-popover>
@ -116,26 +117,29 @@ export default {
}
],
result: [{ required: true, message: "请输入实际完成值", trigger: "blur" }],
year_plan: [{ required: true, message: "请输入年初计划值", trigger: "blur" }],
// year_plan: [{ required: true, message: "", trigger: "blur" }],
score_level: [{ required: true, message: "请输入分值", trigger: "blur" }],
}}
label-width="120px"
// {
// this.type !== 1 ? (
// <el-form-item label="" prop="year_plan" required={true}>
// <el-input-number
// precision={2}
// controls={false}
// vModel={row._form.year_plan}
// size="small"
// min={0}
// max={100}
// placeholder=""
// ></el-input-number>
// </el-form-item>
// ) : ""
// }
>
{
this.type !== 1 ? (
<el-form-item label="年初计划值" prop="year_plan" required={true}>
<el-input-number
precision={2}
controls={false}
vModel={row._form.year_plan}
size="small"
min={0}
max={100}
placeholder="请输入年初计划值"
></el-input-number>
</el-form-item>
) : ""
}
{
this.type !== 1 ? (
<el-form-item label="分值" prop="score_level" required={true}>
@ -331,7 +335,7 @@ export default {
},
{
label: "分值",
prop: "target.score",
prop: "_form.score_level",
width: 100,
},
{
@ -444,26 +448,48 @@ export default {
this.list = [];
const res = await index(this.select);
if (res.data instanceof Array) {
this.list = res.data.map((item) => {
return {
_form: {
id: "",
year_plan:'',
score_level:'',
evaluation_main: "",
socre: "",
result: "",
remark: "",
type: this.type,
is_deviation: 0,
end_possibility: 0,
file_ids: [],
plan_id: this.getPlanId(),
plan_target_id: item.id,
},
_fileList: [],
...item,
};
let _form = {
id: "",
year_plan:'',
score_level:'',
evaluation_main: "",
socre: "",
result: "",
remark: "",
type: this.type,
is_deviation: 0,
end_possibility: 0,
file_ids: [],
plan_id: this.getPlanId(),
plan_target_id: item.id,
}
if(item.plan_evaluates.length>0){
let my_data = item.plan_evaluates?.find(j => (j.plan_target_id === item.id && j.type === this.type))||[]
this.$integrateData(_form,my_data)
let my_data_fileList = my_data?.files?.map(i => {
return {
name: i.original_name,
url: i.url,
response: {
id: i.id
}
}
})
return {
_form,
_fileList: my_data_fileList||[],
...item,
}
}else{
return {
_form,
_fileList: [],
...item,
};
}
});
}

@ -10,6 +10,25 @@
:rules="rules"
@submit="submit"
>
<template v-slot:year>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red; font-weight: 600; padding-right: 4px"
>*</span
>
年份
</div>
<div class="xy-table-item-content">
<el-date-picker
v-model="form.year"
type="year"
disabled
style="width: 300px"
placeholder="选择年">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:target_type_id>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -67,24 +86,7 @@
</div>
</div>
</template>
<template v-slot:year>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red; font-weight: 600; padding-right: 4px"
>*</span
>
年份
</div>
<div class="xy-table-item-content">
<el-date-picker
v-model="form.year"
type="year"
style="width: 300px"
placeholder="选择年">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:name>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -176,7 +178,7 @@
</div>
</div>
</template>
<template #score>
<!-- <template #score>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red; font-weight: 600; padding-right: 4px"
@ -188,7 +190,7 @@
<el-input-number :precision="2" style="width: 300px" v-model="form.score" :controls="false"></el-input-number>
</div>
</div>
</template>
</template> -->
<template v-slot:half_target>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -343,16 +345,19 @@ export default {
message: "请填写全年(程)指标值",
},
],
score: [
{
required: true,
message: "请填写分值",
},
]
// score: [
// {
// required: true,
// message: "",
// },
// ]
},
};
},
methods: {
setYear(year){
this.form.year = year
},
setId (id) {
this.id = id
},

@ -3,17 +3,17 @@
<el-dialog :title="(type === 1 ? '年中' : '年末') + '自评表'" :visible.sync="isShow" width="54%">
<Tag v-if="form.year_middle_audit < 0 || form.year_end_audit < 0" color="warning"></Tag>
<el-form :model="form" size="small">
<el-form-item v-if="type === 1" :label="'年中科室支出概况'">
<el-form-item v-if="type === 1" :label="'年中项目概况 (项目政策、资金分配使用、项目实施情况等)'">
<el-input :value="form.middle_expenditure_survey"
placeholder="年中科室支出概况"
placeholder="年中项目概况 (项目政策、资金分配使用、项目实施情况等)"
type="textarea"
@input="e => {
form.middle_expenditure_survey = e
}"></el-input>
</el-form-item>
<el-form-item v-else :label="'年度科室支出概况'">
<el-form-item v-else :label="'年度项目概况 (项目政策、资金分配使用、项目实施情况等)'">
<el-input :value="form.end_expenditure_survey"
placeholder="年度科室支出概况"
placeholder="年度项目概况 (项目政策、资金分配使用、项目实施情况等)"
type="textarea"
@input="e => {
form.end_expenditure_survey = e
@ -29,25 +29,25 @@
<el-form-item :label="(type === 1 ? '年度' : '年度') + '绩效目标'">
<el-form-item :label="(type === 1 ? '' : '') + '项目年度绩效目标'">
<el-input :value="type === 1 ? form.year_midst : form.year_end"
type="textarea"
:autosize="{ minRows: 2 }"
placeholder="绩效目标"
placeholder="项目年度绩效目标"
@input="e => {
type === 1 ? form.year_midst = e : form.year_end = e
}"></el-input>
</el-form-item>
<el-form-item :label="(type === 1 ? '年度目标实现情况' : '年度绩效目标完成情况')">
<el-form-item :label="(type === 1 ? '项目年度绩效目标完成情况' : '项目年度绩效目标完成情况')">
<el-input :value="type === 1 ? form.middle_result : form.end_result"
type="textarea"
:autosize="{ minRows: 2 }"
placeholder="绩效目标完成情况"
placeholder="项目年度绩效目标完成情况"
@input="e => {
type === 1 ? form.middle_result = e : form.end_result = e
}"></el-input>
</el-form-item>
<el-form-item v-if="type !== 1" :label="(type === 1 ? '年度' : '年度') + '成效(通过绩效评价总结的成效)'">
<el-form-item v-if="type !== 1" :label="(type === 1 ? '年度' : '年度') + '主要成效(通过绩效评价总结的成效)'">
<el-input :value="type === 1 ? form.middle_effect : form.end_effect"
type="textarea"
:autosize="{ minRows: 2 }"
@ -65,7 +65,7 @@
type === 1 ? form.middle_question = e : form.end_question = e
}"></el-input>
</el-form-item>
<el-form-item :label="(type === 1 ? '年度' : '年度') + '整改措施(针对存在的问题,分别提出相关整改措施)'">
<el-form-item :label="(type === 1 ? '年度' : '年度') + '整改措施 (针对存在的问题,分别提出相关整改措施)'">
<el-input :value="type === 1 ? form.middle_measure : form.end_measure"
type="textarea"
placeholder="(针对存在的问题,分别提出相关整改措施)"

@ -14,11 +14,11 @@
<td style="text-align: center;font-weight: 600;" colspan="12">{{ detail.year }} 年度</td>
</tr>
<tr>
<th>{{ type === 1 ? '年度' : '年度' }}绩效目标</th>
<th>{{ type === 1 ? '年度' : '年度' }}项目年度绩效目标</th>
<td colspan="11">{{ type === 1 ? detail.year_midst : detail.year_end }}</td>
</tr>
<tr>
<th>{{ type === 1 ? '年度' : '年度' }}绩效目标完成情况</th>
<th>{{ type === 1 ? '年度' : '年度' }}项目年度绩效目标完成情况</th>
<td colspan="11">{{ type === 1 ? detail.middle_result : detail.end_result }}</td>
</tr>
<!-- <tr>-->
@ -60,7 +60,7 @@
<th>一级指标</th>
<th>二级指标</th>
<th>三级指标</th>
<th>年初计划值</th>
<!-- <th>年初计划值</th> -->
<th style="min-width: 100px;">{{ type === 1 ? '半年' : '全年' }}指标值</th>
<th>{{ type === 1 ? '半年实际执行值' : '实际完成值' }}</th>
@ -77,12 +77,12 @@
<td :rowspan="spanArr[index]" v-if="spanArr[index]" :style="{ 'display': spanArr[index] ? '' : 'none' }">{{ (item.target && item.target.target_type_detail) ? item.target.target_type_detail.name : '' }}</td>
<td :rowspan="spanArr1[index]" v-if="spanArr1[index]" :style="{ 'display': spanArr1[index] ? '' : 'none' }">{{ (item.target && item.target.target_type2_detail) ? item.target.target_type2_detail.name : '' }}</td>
<td>{{ item.target ? item.target.name : '' }}</td>
<th>{{item.year_plan?item.year_plan:''}}</th>
<!-- <th>{{item.year_plan?item.year_plan:''}}</th> -->
<td>{{ targetValue(item) }}</td>
<td>{{ actResultFormat(item) }}</td>
<th>{{item.score_level?item.score_level:''}}</th>
<th>{{score_level(item)}}</th>
<td v-if="type === 1">{{ isDeviation(item) }}</td>
<td v-if="type === 1">{{ endPossibility(item) }}</td>
@ -112,18 +112,18 @@
</td>
</tr>
<tr v-if="type !== 1">
<th colspan="7">合计</th>
<th colspan="5">合计</th>
<td>{{ targetTotal }}</td>
<td>{{ scoreTotal }}</td>
<th colspan="4"></th>
</tr>
<tr v-if="type == 1">
<th>年中科室支出概况</th>
<th>年中项目概况 项目政策资金分配使用项目实施情况等</th>
<td colspan="11">{{ detail.middle_expenditure_survey}}</td>
</tr>
<tr v-if="type !== 1">
<th>年末科室支出概况</th>
<th>年末项目概况 项目政策资金分配使用项目实施情况等</th>
<td colspan="11">{{ detail.end_expenditure_survey}}</td>
</tr>
@ -132,7 +132,7 @@
<td colspan="11">{{ type === 1 ? detail.middle_achievement : detail.end_achievement }}</td>
</tr>
<tr v-if="type !== 1">
<th>主要成效通过绩效评价总结的成效</th>
<th>存在问题 根据表格扣分项逐项撰写</th>
<td colspan="11">{{ type === 1 ? detail.middle_effect : detail.end_effect }}</td>
</tr>
<tr>
@ -140,7 +140,7 @@
<td colspan="11">{{ type === 1 ? detail.middle_question : detail.end_question }}</td>
</tr>
<tr>
<th>整改措施针对存在的问题分别提出相关整改措施</th>
<th>整改措施 针对存在的问题分别提出相关整改措施</th>
<td colspan="11">{{ type === 1 ? detail.middle_measure : detail.end_measure }}</td>
</tr>
</table>
@ -314,6 +314,12 @@ export default {
return item.plan_evaluates?.find(j => (j.plan_target_id === item.id && j.type === this.type))?.result
}
},
score_level () {
return function(item) {
console.log("item",item.plan_evaluates?.find(j => (j.plan_target_id === item.id && j.type === this.type))?.score_level)
return item.plan_evaluates?.find(j => (j.plan_target_id === item.id && j.type === this.type))?.score_level
}
},
socre () {
return function(item) {
return item.plan_evaluates?.find(j => (j.plan_target_id === item.id && j.type === this.type))?.socre
@ -331,8 +337,11 @@ export default {
},
targetTotal () {
// return this.planTargetList.reduce((pre, cur) => {
// return pre + (parseFloat(cur.score) || 0)
// }, 0).toFixed(2)
return this.planTargetList.reduce((pre, cur) => {
return pre + (parseFloat(cur.score) || 0)
return pre + (parseFloat(cur?.plan_evaluates?.find(j => (j.plan_target_id === cur.id && j.type === this.type))?.score_level) || 0)
}, 0).toFixed(2)
},
scoreTotal () {

@ -18,7 +18,8 @@
placement="bottom"
style="width: 130px"
type="year"
@on-change="(e) => (select.year = e)"
:clearable="false"
@on-change="(e) => (select.year = e,getTypes())"
></DatePicker>
</span>
</div>
@ -27,7 +28,7 @@
@click="resetSelect(select)">重置
</Button>
<Button style="margin-left: 10px" type="primary" @click="select.page = 1,total = 0,getList()">查询</Button>
<Button style="margin-left: 10px" type="primary" @click="$refs['addPoint'].type = 'add',$refs['addPoint'].show()">新增</Button>
<Button style="margin-left: 10px" type="primary" @click="$refs['addPoint'].type = 'add',$refs['addPoint'].setYear(select.year),$refs['addPoint'].show()">新增</Button>
</div>
</slot>
</lx-header>
@ -39,6 +40,7 @@
@editor="row => {
$refs['addPoint'].id = row.id;
$refs['addPoint'].type = 'editor';
$refs['addPoint'].setYear(select.year),
$refs['addPoint'].show();
}"
@delete="destroy">
@ -158,6 +160,7 @@ export default {
['click']:_ => {
this.$refs['addPoint'].id = row.id;
this.$refs['addPoint'].type = 'editor';
this.$refs['addPoint'].setYear(select.year)
this.$refs['addPoint'].show();
}
}}>编辑</Button>
@ -176,7 +179,7 @@ export default {
methods: {
resetSelect,
async getTypes() {
const res = await typesIndex({ show_tree:1 })
const res = await typesIndex({ show_tree:1,year:this.select.year })
this.types = res || []
},
async getSymbols() {

@ -23,6 +23,7 @@
placement="bottom"
style="width: 130px"
type="year"
:clearable="false"
@on-change="(e) => (select.year = e)"
></DatePicker>
</span>
@ -197,7 +198,8 @@
@click="
$refs['addPoint'].setPlanPid(scope.row.pid),
$refs['addPoint'].setPlanId(scope.row.id),
$refs['addPoint'].show()
$refs['addPoint'].setYear(select.year)
$refs['addPoint'].show()
"
>绩效指标</Button
>
@ -278,6 +280,7 @@
@click="
$refs['addPoint'].setPlanPid(scope.row.pid),
$refs['addPoint'].setPlanId(scope.row.id),
$refs['addPoint'].setYear(select.year)
$refs['addPoint'].show()
"
>绩效指标</Button

@ -22,7 +22,7 @@
:style="{
margin: '0 0 10px 20px',
}"
@click="$refs['addPoint'].setType('add'),$refs['addPoint'].show()"
@click="$refs['addPoint'].setType('add'),$refs['addPoint'].setYear(year),$refs['addPoint'].show()"
>
指标新增</Button
>
@ -84,49 +84,49 @@ export default {
types: [],
symbols: [],
units: [],
year:'',
isShow: false,
list: [],
table: [
{
label: "分值填写",
width: 200,
customFn: row => {
return (
<div style="display: flex;">
<el-input-number precision={2}
min={0}
max={100}
disabled={!!(row.target && row.target.is_fixed)}
vModel={row.score}
size="small"
controls={false}
placeholder="分值"></el-input-number>
<el-button style="border-top-left-radius: 0;border-bottom-left-radius: 0;transform: translateX(-4px);"
size="small"
disabled={!!(row.target && row.target.is_fixed)}
type="primary"
icon="el-icon-edit"
on={{
click: _ => {
this.$confirm('确认保存分数?','提示',{
closeOnClickModal: false
}).then(_ => {
save(row).then(_ => {
this.$message({
type: 'success',
message: '保存成功'
})
this.getList()
})
})
}
}}>保存</el-button>
</div>
)
}
},
// {
// label: "",
// width: 200,
// customFn: row => {
// return (
// <div style="display: flex;">
// <el-input-number precision={2}
// min={0}
// max={100}
// disabled={!!(row.target && row.target.is_fixed)}
// vModel={row.score}
// size="small"
// controls={false}
// placeholder=""></el-input-number>
// <el-button style="border-top-left-radius: 0;border-bottom-left-radius: 0;transform: translateX(-4px);"
// size="small"
// disabled={!!(row.target && row.target.is_fixed)}
// type="primary"
// icon="el-icon-edit"
// on={{
// click: _ => {
// this.$confirm('','',{
// closeOnClickModal: false
// }).then(_ => {
// save(row).then(_ => {
// this.$message({
// type: 'success',
// message: ''
// })
// this.getList()
// })
// })
// }
// }}></el-button>
// </div>
// )
// }
// },
{
label: "建议上传佐证材料",
width: 220,
@ -310,6 +310,15 @@ export default {
minWidth: 180,
align: "center",
},
{
title: "年份",
key: "year",
render: (h, { row, column, index }) => {
return h("span", {}, row.target_type_detail?.year);
},
width: 120,
align: "center",
},
{
title: "计算符号",
render: (h, { row, column, index }) => {
@ -344,8 +353,14 @@ export default {
};
},
methods: {
async getTypes() {
const res = await typesIndex({ show_tree:1 })
setYear(year){
console.log("year",year)
this.year = year
this.getTypes(year);
this.getPoints()
},
async getTypes(year) {
const res = await typesIndex({ show_tree:1,year:year })
this.types = res || []
},
async getSymbols() {
@ -408,7 +423,10 @@ export default {
this.spanArr = [];
this.spanArr1 = [];
try {
const res = await pointIndex(this.pointSelect);
const res = await pointIndex({
year:this.year,
...this.pointSelect
});
let selectedIds = Array.from(
new Set(this.list.map((item) => item.target_id))
);
@ -501,7 +519,7 @@ export default {
},
isShowModal(val) {
if (val) {
this.getPoints();
// this.getPoints();
} else {
this.selections = [];
resetSelect(this.pointSelect);
@ -511,7 +529,7 @@ export default {
},
},
created() {
this.getTypes();
this.getSymbols();
this.getUnits();
}

@ -26,7 +26,7 @@ module.exports = {
* Detail: https://cli.vuejs.org/config/#publicpath
*/
publicPath: process.env.ENV === 'staging' ? '/admin_test' : '/admin',
outputDir: '/Users/mac/Documents/朗业/2025/s-苏州环境监测中心/hjjc-hdcontract/public/admin',
outputDir: '/Users/mac/Documents/朗业/2025/s-苏州环境监测中心/hjjc-hdcontract/public/admin_test',
assetsDir: 'static',
lintOnSave: false,
productionSourceMap: false,

Loading…
Cancel
Save