first commit

This commit is contained in:
2026-09-20 15:46:34 +08:00
parent 72fb5eae10
commit e558339dcc
3340 changed files with 671310 additions and 251 deletions
@@ -0,0 +1,122 @@
<template>
<el-form label-width="120px">
<template v-if="viewInfo.zbxx.assessmentMode === 2">
<vi-title title="评议对象选择"></vi-title>
<el-row :gutter="20">
<el-col :span="12" v-if="viewInfo.zbxx.assessmentMode===2">
<el-form-item prop="evaluatedPersonName" label="被测评人姓名">
{{viewInfo.commentPeo.evaluatedPersonName}}
</el-form-item>
</el-col>
<el-col :span="12" v-if="viewInfo.zbxx.assessmentMode===2">
<el-form-item prop="evaluatedPersonName" label="现任职务">
{{viewInfo.commentPeo.evaluatedPersonName}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="evaluatedPersonName" label="测评结果">
{{viewInfo.commentPeo.reviewResult}}
</el-form-item>
</el-col>
<el-col :span="24" v-if="viewInfo.zbxx.assessmentMode===2">
<el-form-item prop="presidentOpinions" label="意见建议">
{{viewInfo.commentPeo.presidentOpinions}}
</el-form-item>
</el-col>
</el-row>
</template>
<vi-title2 title="评议内容"></vi-title2>
<el-form-item label="" label-width="0" v-for="(nr,idx) in viewInfo.zbxx.nrs" :key="nr.id">
<el-row type="flex" align="middle" justify="space-between">
<el-input v-model="nr.content" readonly maxlength="30" style="width: 50%">
<template slot="prepend"><span>{{ idx + 1 }}</span></template>
</el-input>
</el-row>
<el-row style="margin-top: 20px">
<el-table :data="nr.bzs" style="width: 100%" border :show-summary = "viewInfo.zbxx.scoringMode !== 2 ? 'always' : false">
<el-table-column align="center" header-align="center" label="序号"
type="index"
width="100px">
<template scope="{$index,row}">
{{ row.contentNumber = $index + 1 }}
</template>
</el-table-column>
<el-table-column label="主要评比内容" disabled prop="inspection" header-align="center" align="center"></el-table-column>
<template v-if="viewInfo.zbxx.scoringMode === 1">
<el-table-column label="标准分" prop="score" header-align="center" align="center" width="250px"></el-table-column>
<el-table-column label="评议分" prop="resultScore" header-align="center" align="center" width="250px"></el-table-column>
</template>
<template v-if="viewInfo.zbxx.scoringMode === 2">
<el-table-column label="满意度" prop="resultScore" header-align="center" align="center" width="350px">
<template slot-scope="{row}">
<el-radio-group v-model="row.resultScore" size="small">
<el-radio disabled label="非常满意">非常满意</el-radio>
<el-radio disabled label="满意">满意</el-radio>
<el-radio disabled label="良好">良好</el-radio>
<el-radio disabled label="一般">一般</el-radio>
</el-radio-group>
</template>
</el-table-column>
</template>
</el-table>
</el-row>
<div v-if="viewInfo.zbxx.scoringMode===1">
<el-divider content-position="left">简述工作情况</el-divider>
<el-row>
<el-col :span="24">
<el-input type="textarea" :rows="2" maxlength="300" show-word-limit readonly
v-model="nr.bzs[0].options" placeholder="请简述工作情况"></el-input>
</el-col>
</el-row>
</div>
</el-form-item>
<template v-if="viewInfo.zbxx.scoringMode === 2">
<vi-title title="简述工作情况"></vi-title>
<el-input type="textarea" :rows="2" maxlength="300" show-word-limit disabled
v-model="viewInfo.commentPeo.presidentOpinions" placeholder="请简述工作情况"></el-input>
</template>
<template v-if="viewInfo.zbxx.scoringMode === 1 && viewInfo.zbxx.reviewMode === 1">
<vi-title title="职工评家总结"></vi-title>
<file-upload v-if="viewInfo.commentPeo.files && viewInfo.commentPeo.files.length > 0" :files.sync="viewInfo.commentPeo.files" view></file-upload>
<el-empty v-else :image-size="100" description="未上传总结"></el-empty>
</template>
</el-form>
</template>
<script>
module.exports = {
props: {
id: {type: String, default: ''}
},
data(){
return{
viewInfo:{
commentPeo: {},
zbxx: []
}
}
},
methods:{
async findOne(peoId){
const resp = await $.get('/platform/wakeshome/review/statistics/getBzById',{peoId:peoId})
if (resp.code === 0) {
this.viewInfo = resp.data
}
}
}
}
</script>
<style>
.el-divider {
background-color: #1867b0;
}
.el-divider__text {
color: #1867b0;
}
</style>
@@ -0,0 +1,473 @@
<template>
<el-form class="el_form" :model="data" ref="addForm" :rules="formRules" label-width="120px">
<vi-title title="指标信息"></vi-title>
<el-row gutter="20">
<el-col :span="8">
<el-form-item prop="annual" label="年&emsp;&emsp;度" class="is-required">
<el-date-picker
style="width: 100%"
:disabled="is_view"
:picker-options="pickerOptions"
v-model="data.annual"
type="year"
value-format="yyyy"
placeholder="选择年度">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="assessment" label="评测名称" class="is-required">
<el-input maxlength="30" :disabled="is_view" v-model="data.assessment"
placeholder="请填写评测名称"
type="text">
</el-input>
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item prop="assessment" label="">
<el-checkbox v-model="data.isEvaluationIndex" :disabled="is_view">是否采用以往评议指标</el-checkbox>
</el-form-item>
</el-col>-->
<el-col :span="8">
<el-form-item prop="zbId" label="以往评议指标" v-if="data.isEvaluationIndex">
<el-select v-model="data.zbId" placeholder="请选择" filterable clearable
style="width: 100%" @change="getByZbData">
<el-option
v-for="item in zbList"
:key="item.id"
:label="item.annual+item.assessment"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="8">
<el-form-item prop="assessmentMode" label="评议选项" class="is-required">
<el-radio-group v-model="data.assessmentMode" :disabled="is_view">
<el-radio-button :label="1">工会评议</el-radio-button>
<el-radio-button :label="2">主席/副主席评议</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="reviewMode" label="评议模式" class="is-required">
<el-radio-group v-model="data.reviewMode" :disabled="is_view">
<el-tooltip content="由校工会/分工会管理员自我测评"
placement="top">
<el-radio-button :label="1">自我评议</el-radio-button>
</el-tooltip>
<el-tooltip content="由教职工对选择的工会/主席进行评议"
placement="top">
<el-radio-button :label="2">教工评议</el-radio-button>
</el-tooltip>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="scoringMode" label="打分模式" class="is-required">
<el-radio-group v-model="data.scoringMode" :disabled="is_view">
<el-radio-button :label="1">评分模式</el-radio-button>
<el-radio-button :label="2">满意度模式</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="8" v-if="data.assessmentMode">
<el-form-item prop="scoringMode" label="评议范围" class="is-required">
<el-radio-group v-model="data.commentTarget" :disabled="is_view">
<el-tooltip :content="schoolContent" placement="top">
<el-radio-button :disabled="!(A06 || sysadmin)" :label="1">校工会</el-radio-button>
</el-tooltip>
<el-tooltip :content="allUnionContent" placement="top">
<el-radio-button :disabled="!(A06 || sysadmin)" :label="2">全部分工会</el-radio-button>
</el-tooltip>
<el-tooltip :content="selectUnionContent" placement="top">
<el-radio-button :label="3">自选分工会</el-radio-button>
</el-tooltip>
</el-radio-group>
</el-form-item>
</el-col>
<template v-if="data.commentTarget && data.reviewMode == 2 && data.commentTarget == 1">
<el-col :span="8">
<el-form-item prop="activityGroupId" label="可评议人员" class="is-required">
<div style="display: flex; justify-content: space-between">
<div style="width: 99%">
<el-select clearable filterable placeholder="请选择可评议人员"
style="width: 99%" v-model="data.activityGroupId" :disabled="is_view">
<el-option :key="item.groupId"
:label="item.groupName"
:value="item.groupId"
v-for="item in activityGroupList"></el-option>
</el-select>
</div>
<div>
<el-button
@click="$refs.drawerUserScope.userScopeDialog = true"
:disabled="is_view"
type="primary">设置
</el-button>
</div>
</div>
</el-form-item>
</el-col>
</template>
<template v-if="data.commentTarget && data.commentTarget == 3">
<el-col :span="8">
<el-form-item prop="unionIds" label="自选分工会" class="is-required">
<el-select v-model="data.unionIds" style="width: 100%"
:disabled="is_view"
multiple clearable filterable
placeholder="请选择分工会">
<el-option
v-for="item in reviewUnions"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</template>
<el-col :span="8">
<el-form-item prop="applyTime" label="评议时间" class="is-required">
<el-date-picker
end-placeholder="结束时间"
range-separator="-"
start-placeholder="开始时间"
style="width: 100%"
:disabled="is_view"
type="datetimerange"
v-model="data.applyTime"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<vi-title2 title="测评内容"></vi-title2>
<el-form-item label="" label-width="0" v-for="(nr,idx) in data.nrs">
<el-row type="flex" align="middle" justify="space-between">
<el-input v-model="nr.content" :disabled="is_view" maxlength="30" style="width: 50%"
placeholder="请填写测评内容">
<template slot="prepend"><span>
{{ nr.contentNumber = idx + 1 }}</span></template>
</el-input>
<el-button v-if="!is_view" size="medium" :disabled="data.nrs.length<=1" type="danger"
@click="data.nrs.splice(idx,1)"
icon="el-icon-delete"></el-button>
</el-row>
<el-row style="margin-top: 20px">
<el-table :data="nr.bzs" style="width: 100%" border show-summary
:summary-method="getSummaries" size="small">
<el-table-column align="center" header-align="center" label="序号" type="index"
width="100px">
<template scope="{$index,row}">
{{ row.contentNumber = $index + 1 }}
</template>
</el-table-column>
<el-table-column label="测评标准" prop="inspection">
<template scope="{row}">
<el-input v-if="!is_view" v-model="row.inspection" placeholder="请填写测评标准" type="textarea"
rows="2"></el-input>
<div v-else style="white-space:break-spaces">{{ row.inspection }}</div>
</template>
</el-table-column>
<!-- <el-table-column label="单项分" prop="single_score" header-align="center" align="center" width="100px">
<template scope="{row}">
<el-input v-if="!is_view" v-model="row.single_score" placeholder="请填写单项分"></el-input>
<span v-else>{{ row.single_score }}</span>
</template>
</el-table-column>-->
<el-table-column label="标准分" prop="score" header-align="center" align="center"
width="100px" v-if="data.scoringMode===1">
<template scope="{row}">
<el-input v-if="!is_view" v-model.number="row.score" maxlength="4"
placeholder="请填写标准分"></el-input>
<span v-else>{{ row.score }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="能否超过标准分" prop="beyond_highestscore" header-align="center" align="center" width="120px">
<template scope="{row}">
<el-switch
v-if="!is_view"
v-model="row.beyond_highestscore"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
<el-switch
v-else
disabled
v-model="row.beyond_highestscore">
</el-switch>
</template>
</el-table-column>-->
<!-- <el-table-column label="是否填写意见" prop="isEvidence" header-align="center" align="center"
width="120px" v-if="data.scoringMode===1">
<template scope="{row}">
<el-switch
:disabled="is_view"
v-model="row.isEvidence"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
</template>
</el-table-column>-->
<el-table-column v-if="!is_view" label="操作" header-align="center" align="center"
width="200px">
<template scope="{row,$index}">
<el-button size="mini" :disabled="nr.bzs.length<=1 || (!row.canDelete && row.id)"
type="danger" icon="el-icon-delete"
@click="nr.bzs.splice($index,1)"></el-button>
<el-button size="mini"
type="primary" icon="el-icon-plus"
@click="nr.bzs.splice($index+1,0,{inspection:null,score:null,isEvidence:true})"></el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="mt10 mb10" style="border-top: 1px dashed rgb(229, 225, 225)"></el-row>
</el-form-item>
<el-row type="flex" justify="center">
<el-button v-if="!is_view"
type="primary"
@click="data.nrs.push({bzs:[{inspection:null,score:null,isEvidence:true}]})">
添加测评内容
</el-button>
</el-row>
<div>
<drawer-user-scope
@group_change="getActivityGroup"
ref="drawerUserScope"
:group_id.sync="data.activityGroupId"
></drawer-user-scope>
</div>
</el-form>
</template>
<script>
const METHOD_NAME = "change"
module.exports = {
props: {
is_view: {
type: Boolean,
default: false
},
data: {
type: Object,
default: {
nrs: [{
bzs: [{}]
}],
unionIds: []
}
}
},
watch: {
data: {
deep: true,
handler(val) {
this.$emit(METHOD_NAME, val)
}
}
},
data() {
return {
activityGroupList: [],
isEvaluationIndex: false,
zbList: [],
formRules: {
xxx: [{required: true, message: '请填写年度', trigger: ['blur', 'change']}],
},
pickerOptions: {
disabledDate(time) {
return (
time.getFullYear() > new Date().getFullYear()
);
}
},
relationData: [
{moduleName: '提案系统模块', id: 'proposal'},
{moduleName: '二级教代会', id: 'secteameet'},
{moduleName: '慰问/补助', id: 'ConandDif'},
],
roleDataReview: {},
reviewUnions: [],
}
},
components: {
'drawer-user-scope': httpVueLoader('/components/plugins/DrawerUserScope.vue'),
},
methods: {
async getActivityGroup() {
const {data} = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
this.activityGroupList = data
},
async getByZbData() {
const {
code,
data,
msg
} = await $.get('/platform/wakeshome/review/viewZb/edit', {id: this.data.zbId})
if (data) {
this.$set(this.data, "nrs", data.nrs)
} else {
this.$set(this.data, "nrs", [{bzs: [{}]}])
}
},
async getZbList() {
const res = await $.get("/platform/wakeshome/review/Xjkhzb/getZbList")
this.zbList = res.data
},
getSummaries(param) {
const {columns, data} = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0 && this.data.scoringMode === 1) {
sums[index] = '小计';
return;
} else if ([1, 3, 4].includes(index) && this.data.scoringMode === 1) {
sums[index] = '';
return;
} else if ([1, 2, 3].includes(index) && this.data.scoringMode === 2) {
sums[index] = '';
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += ' 分';
} else {
sums[index] = '';
}
});
return sums;
},
async getRolesAndUnion() {
const {data} = await $.post("/platform/activity/basic/scope/getRolesAndUnion")
this.roleDataReview = data
}
},
async created() {
await this.getRolesAndUnion()
await this.getActivityGroup()
await this.getZbList()
if (!this.data || !Object.keys(this.data).length) {
this.data = {
nrs: [{
bzs: [{inspection: null, score: null, isEvidence: true}]
}],
}
}
if (((this.is_sysadmin || this.is_A06 || this.is_H02) === false) && this.is_H04 === true) {
this.reviewUnions = await getUnionList(this.unionId)
this.$set(this.data, "unionIds", this.reviewUnions[0].id)
} else {
this.reviewUnions = await getUnions(null)
}
},
computed: {
H10() {
return this.roleDataReview.is_H10
},
A06() {
return this.roleDataReview.is_A06
},
H04() {
return this.roleDataReview.is_H04
},
H02() {
return this.roleDataReview.is_H02
},
sysadmin() {
return this.roleDataReview.is_sysadmin
},
unionId() {
return this.roleDataReview.unionid
},
schoolContent() {
if (this.data.reviewMode == 1) {
return '勾选后,仅校工会管理员可参加测评'
} else if (this.data.reviewMode == 2) {
return '勾选后,全校所有人员可评议校工会,也可根据右侧选框【可评议人员】指定评议人员范围'
} else {
return '请选择评议模式'
}
},
allUnionContent() {
if (this.data.reviewMode == 1) {
return '勾选后,仅各工会管理员可对本分工会进行自我评议'
} else if (this.data.reviewMode == 2) {
return '勾选后,所有分工会人员对本分工会进行评议,不可跨工会评议'
} else {
return '请选择评议模式'
}
},
selectUnionContent() {
if (this.data.reviewMode == 1) {
return '勾选后,仅右侧选择的分工会管理员可对本分工会进行自我评议'
} else if (this.data.reviewMode == 2) {
return '勾选后,可根据右侧选框【自选分工会】指定分工会评议范围'
} else {
return '请选择评议模式'
}
}
},
}
</script>
<style>
.fixedBox {
position: fixed;
top: 200px;
right: 10px;
z-index: 100;
}
.el_form {
position: relative;
}
.el-input-group__prepend {
background-color: #1867b0;
color: white;
}
</style>