This commit is contained in:
Paidax
2024-09-23 14:15:43 +08:00
parent dfbb741cb1
commit 42bf0ea0e5
12 changed files with 126 additions and 86 deletions
@@ -70,7 +70,7 @@ public class MsgApi {
* @param receivers 接收人工号/手机号
*/
public void sendMsg(String msgContent, List<String> receivers) {
Assert.notBlank(msgContent);
/*Assert.notBlank(msgContent);
Assert.notEmpty(receivers);
List<Map<String, String>> tousers = receivers.stream().map(v -> Map.of("touser", v)).collect(Collectors.toList());
@@ -101,7 +101,7 @@ public class MsgApi {
} else {
log.error("短信发送失败,发送内容" + Json.toJson(bodyMap));
throw new RuntimeException("短信发送失败");
}
}*/
}
/**
@@ -162,9 +162,10 @@ public class StatisticsZpController {
@Param(value = "unionId", required = false) String unionId) {
NutMap mapList = commentPeoService.fetch(Sqls.create("""
SELECT
SUM( CASE WHEN cp.reviewResult = '不满意' THEN 1 ELSE 0 END ) AS bmy,
SUM( CASE WHEN cp.reviewResult = '基本满意' THEN 1 ELSE 0 END ) AS jbmy,
SUM( CASE WHEN cp.reviewResult = '满意' THEN 1 ELSE 0 END ) AS my
SUM( CASE WHEN cp.reviewResult = '非常满意' THEN 1 ELSE 0 END ) AS fcmy,
SUM( CASE WHEN cp.reviewResult = '满意' THEN 1 ELSE 0 END ) AS my,
SUM( CASE WHEN cp.reviewResult = '良好' THEN 1 ELSE 0 END ) AS lh,
SUM( CASE WHEN cp.reviewResult = '一般' THEN 1 ELSE 0 END ) AS yb
FROM
comment_peo cp
LEFT JOIN `user` u ON u.id = cp.userId
@@ -51,7 +51,7 @@ public class CommentPeoServiceImpl extends ViServiceImpl<CommentPeo> implements
//赋值测评结果
CommentResult result = commentResultMap.get(o.getId());
if (Lang.isNotEmpty(result)){
o.setOptions(StrUtil.isNotBlank(result.getRecommendation()) ? result.getRecommendation() : "未填写备注");
o.setOptions(StrUtil.isNotBlank(result.getRecommendation()) ? result.getRecommendation() : "未填写此项");
o.setResultScore(result.getAssessResult());
}
});
Binary file not shown.
@@ -105,7 +105,7 @@ a .expanded {
}
.el-table__body-wrapper {
scrollbar-width: none; /* firefox */
/*scrollbar-width: none; !* firefox *!*/
-ms-overflow-style: none; /* IE 10+ */
overflow-x: hidden;
overflow-y: auto;
@@ -135,4 +135,4 @@ a .expanded {
height: 40px;
line-height: 40px;
/*display: none !important;*/
}
}
@@ -52,9 +52,10 @@
<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 disabled label="良好">良好</el-radio>
<el-radio disabled label="一般">一般</el-radio>
</el-radio-group>
</template>
</el-table-column>
@@ -63,20 +64,20 @@
</el-row>
<div v-if="viewInfo.zbxx.scoringMode===1">
<el-divider content-position="left">备注</el-divider>
<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>
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>
<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>
v-model="viewInfo.commentPeo.presidentOpinions" placeholder="请简述工作情况"></el-input>
</template>
<template v-if="viewInfo.zbxx.scoringMode === 1 && viewInfo.zbxx.reviewMode === 1">
@@ -26,11 +26,11 @@
</el-col>
<el-col :span="8">
<!-- <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>-->
<el-col :span="8">
<el-form-item prop="zbId" label="以往评议指标" v-if="data.isEvaluationIndex">
@@ -222,7 +222,7 @@
</template>
</el-table-column>-->
<el-table-column label="是否填写意见" prop="isEvidence" header-align="center" align="center"
<!-- <el-table-column label="是否填写意见" prop="isEvidence" header-align="center" align="center"
width="120px" v-if="data.scoringMode===1">
<template scope="{row}">
<el-switch
@@ -232,7 +232,7 @@
inactive-color="#ff4949">
</el-switch>
</template>
</el-table-column>
</el-table-column>-->
<el-table-column v-if="!is_view" label="操作" header-align="center" align="center"
width="200px">
@@ -327,12 +327,14 @@ layout("/mobile/platform.html"){
})
const result = (resultScore / source) * 100
if (result >= 80) {
if (result > 95) {
this.reviewResult = '非常满意'
} else if (result > 80 && result <= 94) {
this.reviewResult = '满意'
} else if (result >= 60 && result <= 79) {
this.reviewResult = '基本满意'
} else if (result > 60 && result <= 79) {
this.reviewResult = '良好'
} else {
this.reviewResult = '不满意'
this.reviewResult = '一般'
}
/*this.bzList.forEach(v => {
@@ -345,8 +347,6 @@ layout("/mobile/platform.html"){
} else {
this.reviewResult = '不满意'
}*/
console.log(source)
console.log(resultScore)
console.log(this.reviewResult)
vant.Dialog.alert({
title: '测评结果',
@@ -354,14 +354,26 @@ layout("/mobile/platform.html"){
confirmButtonColor: '#1867b0'
})
} else if (this.commentatorData.assessmentMode === 2) {
const result = this.bzList.filter(v => v.resultScore === '满意' || v.resultScore === '基本满意')
if (result.length >= 8) {
const result = this.bzList.filter(v => v.resultScore === '满意')
const satisfactionPercentage = (result.length / this.bzList.length) * 100;
if (satisfactionPercentage > 95) {
this.reviewResult = '非常满意'
} else if (satisfactionPercentage > 80 && satisfactionPercentage <= 94) {
this.reviewResult = '满意'
} else if (satisfactionPercentage > 60 && satisfactionPercentage <= 79) {
this.reviewResult = '良好'
} else {
this.reviewResult = '一般'
}
/*if (result.length >= 8) {
this.reviewResult = '满意'
} else if (result.length >= 6 && result.length <= 7) {
this.reviewResult = '基本满意'
} else {
this.reviewResult = '不满意'
}
}*/
console.log(result)
console.log(this.reviewResult)
vant.Dialog.alert({
@@ -200,21 +200,21 @@ layout("/layouts/platform.html"){
</el-table>
</el-row>
<div v-if="formData.scoringMode===1">
<el-divider content-position="left">备注填写</el-divider>
<el-divider content-position="left">简述工作情况</el-divider>
<el-row>
<el-col :span="24">
<el-input type="textarea" :rows="2" maxlength="300" show-word-limit
v-model="o.remark" placeholder="请输入备注"></el-input>
v-model="o.remark" placeholder="请简述工作情况"></el-input>
</el-col>
</el-row>
</div>
</el-form-item>
<template v-if="formData.scoringMode===2">
<vi-title title="备注填写"></vi-title>
<vi-title title="简述工作情况"></vi-title>
<el-form-item prop="options" label-width="0px">
<el-input type="textarea" :rows="2" maxlength="300" show-word-limit
v-model="presidentOpinions" placeholder="请输入备注"></el-input>
v-model="presidentOpinions" placeholder="请简述工作情况"></el-input>
</el-form-item>
</template>
@@ -408,7 +408,6 @@ layout("/layouts/platform.html"){
this.$message.warning(resp.msg)
}
})
},
async createdReviewResult(){
if (this.formData.assessmentMode === 1) {
@@ -419,24 +418,43 @@ layout("/layouts/platform.html"){
resultScore += Number(v.resultScore)
})
const result = (resultScore / source) * 100
if (result >= 80) {
if (result > 95) {
this.formData.reviewResult = '非常满意'
} else if (result > 80 && result <= 94) {
this.formData.reviewResult = '满意'
} else if (result > 60 && result <= 79) {
this.formData.reviewResult = '良好'
} else {
this.formData.reviewResult = '一般'
}
/*if (result >= 80) {
this.formData.reviewResult = '满意'
} else if (result >= 60 && result <= 79) {
this.formData.reviewResult = '基本满意'
} else {
this.formData.reviewResult = '不满意'
}
}*/
} else if (this.formData.assessmentMode === 2) {
const result = this.formData.bzList.filter(v => v.resultScore === '满意' || v.resultScore === '基本满意')
const satisfactionPercentage = (result.length / this.formData.bzList.length) * 100;
if (satisfactionPercentage >= 80) {
if (satisfactionPercentage > 95) {
this.formData.reviewResult = '非常满意'
} else if (satisfactionPercentage > 80 && satisfactionPercentage <= 94) {
this.formData.reviewResult = '满意'
} else if (satisfactionPercentage > 60 && satisfactionPercentage <= 79) {
this.formData.reviewResult = '良好'
} else {
this.formData.reviewResult = '一般'
}
/*if (satisfactionPercentage >= 80) {
this.formData.reviewResult = '满意'
} else if (satisfactionPercentage >= 60 && satisfactionPercentage <= 79) {
this.formData.reviewResult = '基本满意'
} else {
this.formData.reviewResult = '不满意'
}
}*/
const user = this.userList.find(v=> v.id === this.president)
this.formData.evaluatedPersonName = user.username
this.formData.evaluatedPersonType = user.evaluatedPersonType
@@ -103,7 +103,9 @@ layout("/layouts/platform.html"){
loading: true,
activeName: '1',
tableData: [],
formData: {},
formData: {
applyTime: []
},
viewData: {
nrs: [{
bzs: [{}]
@@ -131,8 +133,9 @@ layout("/layouts/platform.html"){
const {code, data, msg} = await $.get(loc() + '/edit', {id})
if (code === 0) {
this.formData = data
if (this.formData.startTime && this.formData.endTime) {
this.formData.applyTime = [this.formData.startTime, this.formData.endTime]
if (data.startTime && data.endTime) {
this.$set(this.formData, 'applyTime', [data.startTime, data.endTime])
// this.formData.applyTime = [this.formData.startTime, this.formData.endTime]
}
this.$refs.guava.edit()
}
@@ -189,8 +192,12 @@ layout("/layouts/platform.html"){
this.$refs.guava.view()
this.loading = true;
const {code, data, msg} = await $.get(loc() + '/edit', {id})
if (code == 0) {
if (code === 0) {
this.viewData = data
if (data.startTime && data.endTime) {
this.$set(this.viewData, 'applyTime', [data.startTime, data.endTime])
// this.formData.applyTime = [this.formData.startTime, this.formData.endTime]
}
}
this.loading = false;
},
@@ -98,7 +98,7 @@ layout("/layouts/platform.html"){
<el-tooltip
:content="canDownload ? ('导出【'+ row.unionName +'】管理员自我评议的评议结果') : ('导出【'+ row.unionName +'】下所有评议结果的压缩包') "
placement="top">
<el-button v-if="canDownload" size="mini" type="primary"
<el-button v-if="canDownload && row.num > 0" size="mini" type="primary"
@click="doDownLoad(row,canDownload)">导出
</el-button>
</el-tooltip>
@@ -119,24 +119,27 @@ layout("/layouts/platform.html"){
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item" style="width: 480px !important;">
<div class="search-item-option">
<el-radio-group v-model="userPageForm.reviewResult"
@change="doUserSearch">
<el-radio-button label="">
全部
<span class="ml2">
{{reviewResultData.bmy+reviewResultData.jbmy+reviewResultData.my}}
{{reviewResultData.fcmy + reviewResultData.my + reviewResultData.lh + reviewResultData.yb}}
</span>
</el-radio-button>
<el-radio-button label="非常满意">非常满意
<span class="ml2">{{reviewResultData.fcmy || 0}}</span>
</el-radio-button>
<el-radio-button label="满意">满意
<span class="ml2">{{reviewResultData.my || 0}}</span>
</el-radio-button>
<el-radio-button label="基本满意">基本满意
<span class="ml2">{{reviewResultData.jbmy || 0}}</span>
<el-radio-button label="良好">良好
<span class="ml2">{{reviewResultData.lh || 0}}</span>
</el-radio-button>
<el-radio-button label="不满意">不满意
<span class="ml2">{{reviewResultData.bmy || 0}}</span>
<el-radio-button label="一般">一般
<span class="ml2">{{reviewResultData.yb || 0}}</span>
</el-radio-button>
</el-radio-group>
</div>
@@ -174,9 +177,8 @@ layout("/layouts/platform.html"){
label="操作" width="240px" fixed="right">
<template scope="{row}">
<el-button size="mini" @click="openUserView(row)">查看</el-button>
<el-button size="mini" type="primary" @click="downloadByPeoId(row)">导出</el-button>
<el-button size="mini" type="primary" @click="downloadFilesByPeoId(row)">导出附件
</el-button>
<el-button v-if="canDownload" size="mini" type="primary" @click="downloadByPeoId(row)">导出</el-button>
<el-button v-if="canDownload" size="mini" type="primary" @click="downloadFilesByPeoId(row)">导出附件</el-button>
</template>
</el-table-column>
</el-table>
@@ -337,26 +339,25 @@ layout("/layouts/platform.html"){
downloadByPeoId(row) {
window.open(loc() + '/exportByPeoId?peoId=' + row.id)
},
downloadFilesByPeoId(row) {
async downloadFilesByPeoId(row) {
const result = this.validateHasFiles({peoId: row.id})
if (!result) {
return
}
window.open(loc() + '/exportFilesByPeoId?peoId=' + row.id)
},
validateHasFiles(data) {
$.post('/platform/wakeshome/review/statistics/validateHasFiles', {
async validateHasFiles(data) {
const res = await $.post('/platform/wakeshome/review/statistics/validateHasFiles', {
peoId: data.peoId ? data.peoId : '',
zbId: data.zbId ? data.zbId : '',
unionId: data.unionId ? data.unionId : ''
}).then(res => {
if (res.code === 0) {
return true
} else {
this.$message.warning("未上传附件,无法导出")
return false
}
})
if (res.code === 0) {
return true
} else {
this.$message.warning("未上传附件,无法导出")
return false
}
},
async getReviewResultNum(row) {
const res = await $.post(loc() + "/getReviewResultNum", {
@@ -422,7 +423,7 @@ layout("/layouts/platform.html"){
computed: {
canDownload() {
const data = this.zbList.find(v => v.id === this.pageForm.zbId)
return data.commentTarget === 3 && data.unionIds && data.unionIds.length > 0
return data.scoringMode == 1
}
},
async created() {
@@ -54,7 +54,7 @@ layout("/layouts/platform.html"){
</div>
<div class="btn-group tool-button mt5">
<el-select class="d-select" clearable filterable
placeholder="请选择活动"
placeholder="请选择休养"
v-model="pageForm.pastQuota"
width="300px">
<el-option
@@ -82,7 +82,7 @@ layout("/layouts/platform.html"){
type="primary"></el-button>
</div>
<div class="pull-right offscreen-right mt5">
<el-button @click="openAdd" icon="el-icon-plus">创建活动</el-button>
<el-button @click="openAdd" icon="el-icon-plus">创建休养</el-button>
</div>
</el-card>
@@ -97,7 +97,7 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="活动名称"
<el-table-column align="center" header-align="center" label="休养名称"
prop="name"
width="300px">
<template scope="scope">
@@ -107,11 +107,11 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="活动场地"
<el-table-column align="center" header-align="center" label="休养场地"
prop="hdcd"
show-overflow-tooltip></el-table-column>
<el-table-column align="center" header-align="center" label="活动时间"
<el-table-column align="center" header-align="center" label="休养时间"
prop="hdkssj"
sortable>
<template scope="scope">
@@ -177,7 +177,7 @@ layout("/layouts/platform.html"){
<el-row style="padding: 0 10%;" v-loading="loading">
<el-steps :active="stepActive" finish-status="success" simple>
<el-step description="" title="活动信息">
<el-step description="" title="休养信息">
</el-step>
<el-step description="" title="名额分配">
@@ -192,11 +192,11 @@ layout("/layouts/platform.html"){
<el-form :model="formData" :rules="formRules"
label-width="120px"
ref="form">
<el-form-item class="view-header" label="填写活动信息&emsp;"
<el-form-item class="view-header" label="填写休养信息&emsp;"
label-width="135px">
</el-form-item>
<el-form-item label="活动名称" prop="name">
<el-input maxlength="100" placeholder="请填写活动名称"
<el-form-item label="休养名称" prop="name">
<el-input maxlength="100" placeholder="请填写休养名称"
type="text"
v-model="formData.name"></el-input>
</el-form-item>
@@ -216,7 +216,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="活动时间" prop="hdsj">
<el-form-item label="休养时间" prop="hdsj">
<el-date-picker
align="right"
end-placeholder="结束日期"
@@ -230,8 +230,8 @@ layout("/layouts/platform.html"){
</el-col>
</el-row>
<el-form-item label="活动场地" prop="hdcd">
<el-input maxlength="100" placeholder="请填写活动场地"
<el-form-item label="休养场地" prop="hdcd">
<el-input maxlength="100" placeholder="请填写休养场地"
type="text"
v-model="formData.hdcd"></el-input>
</el-form-item>
@@ -419,13 +419,13 @@ layout("/layouts/platform.html"){
<el-row style="padding: 0 10%;" v-loading="loading">
<el-tabs stretch v-model="tabs_active">
<el-tab-pane label="活动信息" name="1">
<el-tab-pane label="休养信息" name="1">
<el-form :model="formData" :rules="formRules"
label-width="120px"
ref="form">
<vi-title title="修改活动信息"></vi-title>
<el-form-item label="活动名称" prop="name">
<el-input maxlength="100" placeholder="请填写活动名称"
<vi-title title="修改休养信息"></vi-title>
<el-form-item label="休养名称" prop="name">
<el-input maxlength="100" placeholder="请填写休养名称"
type="text"
v-model="formData.name"></el-input>
</el-form-item>
@@ -445,7 +445,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="活动时间" prop="hdsj">
<el-form-item label="休养时间" prop="hdsj">
<el-date-picker
align="right"
end-placeholder="结束日期"
@@ -459,8 +459,8 @@ layout("/layouts/platform.html"){
</el-col>
</el-row>
<el-form-item label="活动场地" prop="hdcd">
<el-input maxlength="100" placeholder="请填写活动场地"
<el-form-item label="休养场地" prop="hdcd">
<el-input maxlength="100" placeholder="请填写休养场地"
type="text"
v-model="formData.hdcd"></el-input>
</el-form-item>
@@ -471,7 +471,7 @@ layout("/layouts/platform.html"){
v-model="formData.hdzysx"></el-input>
</el-form-item>
<el-form-item label="活动内容" prop="hdnr">
<el-form-item label="休养内容" prop="hdnr">
<div id="lrEditor" v-if="v=='edit'"></div>
</el-form-item>
@@ -606,7 +606,7 @@ layout("/layouts/platform.html"){
data() {
let validHdnr = (rule, value, callback) => {
if (!this.formData.hdnr || !dd3s.html2txt(this.formData.hdnr)) {
callback(new Error('请填写活动内容'));
callback(new Error('请填写休养内容'));
} else {
callback();
}
@@ -643,11 +643,11 @@ layout("/layouts/platform.html"){
pageOrderBy: ""
},
formRules: {
name: [{required: true, message: '请填写活动名称', trigger: ['blur', 'change']}],
name: [{required: true, message: '请填写休养名称', trigger: ['blur', 'change']}],
bmsj: [{required: true, message: '请选择报名时间', trigger: ['blur', 'change']}],
hdsj: [{required: true, message: '请选择活动时间', trigger: ['blur', 'change']}],
hdcd: [{required: true, message: '请填写活动场地', trigger: ['blur', 'change']}],
hdzysx: [{required: true, message: '请填写活动场地', trigger: ['blur', 'change']}],
hdsj: [{required: true, message: '请选择休养时间', trigger: ['blur', 'change']}],
hdcd: [{required: true, message: '请填写休养场地', trigger: ['blur', 'change']}],
hdzysx: [{required: true, message: '请填写休养场地', trigger: ['blur', 'change']}],
hdnr: [{validator: validHdnr, trigger: ['blur', 'change']}],
},
subDis: false,