bug整改

This commit is contained in:
2026-04-22 10:49:30 +08:00
parent 7ab7f7cbd2
commit e276489ef7
12 changed files with 106 additions and 58 deletions
@@ -94,7 +94,7 @@ public class OpinionOfficeAuditController {
cnd.andEX("info.sessionId", "=", sessionId);
// cnd.and("t.taskName", "=", "office");
cnd.and("t.taskName", "=", "schoolAudit");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
// cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -76,26 +76,26 @@ public class OpinionInfo extends BaseModel {
private String delegationId;
@Column
@Comment("建议人ID")
@Comment("记录人ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String suggestUserId;
@Column
@Comment("建议人name")
@Comment("记录人name")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String suggestUserName;
@Column
@Comment("建议人code")
@Comment("记录人code")
@ColDefine(type = ColType.VARCHAR, width = 120)
private String suggestUserLoginName;
@Column
@Comment("建议人所属代表团ID")
@Comment("记录人所属讨论组ID")
private String suggestUserDelegationId;
@Column
@Comment("建议人所属代表团名称")
@Comment("记录人所属讨论组名称")
private String suggestUserDelegationName;
@Column
@@ -12,10 +12,10 @@ const OPINION_INFO = {
</h3>
<el-descriptions :column="3" border>
<el-descriptions-item label="意见编号">{{ viewData.code }}</el-descriptions-item>
<el-descriptions-item label="意见人">{{viewData.createUserName }}</el-descriptions-item>
<el-descriptions-item label="建议人">{{viewData.createUserName }}</el-descriptions-item>
<el-descriptions-item label="意见时间">{{ viewData.createTime }}</el-descriptions-item>
<el-descriptions-item label="教代会届次"> {{ viewData.sessionName || '暂无' }}</el-descriptions-item>
<el-descriptions-item label="意见人单位">{{ viewData.unitName }}</el-descriptions-item>
<el-descriptions-item label="建议人单位">{{ viewData.unitName }}</el-descriptions-item>
<el-descriptions-item label="代表团名称">{{ viewData.delegationName }}</el-descriptions-item>
<el-descriptions-item label="意见类别">
{{viewData.typeName}}
@@ -13,8 +13,8 @@ layout("/layouts/platform.html"){
v-for="item in sessionOptions"></el-option>
</el-select>
</search-item>
<search-item label="意见名称">
<el-input v-model="pageForm.name" placeholder="请输入意见名称" @keyup.enter.native="doSearch" clearable
<search-item label="意见和建议">
<el-input v-model="pageForm.name" placeholder="请输入意见和建议" @keyup.enter.native="doSearch" clearable
style="width: 100%"></el-input>
</search-item>
<search-item label="姓名/工号">
@@ -105,8 +105,12 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "意见编号", prop: "code"},
{label: "意见名称", prop: "name", width: "200px"},
{label: "意见和建议", prop: "name", width: "200px"},
{label: "意见类别", prop: "typeName"},
{label: "建议人", prop: "createUserName"},
{label: "建议人所属代表团", prop: "delegationName"},
{label: "记录人", prop: "suggestUserName"},
{label: "记录人所属讨论组", prop: "suggestUserDelegationName"},
{label: "届次", prop: "sessionName"},
{label: "代表团", prop: "delegationName"},
{label: "当前节点", prop: "curTaskName"},
@@ -15,8 +15,8 @@ layout("/layouts/platform.html"){
v-for="item in sessionOptions"></el-option>
</el-select>
</search-item>
<search-item label="意见名称">
<el-input v-model="pageForm.name" placeholder="请输入意见名称" @keyup.enter.native="doSearch" clearable
<search-item label="意见和建议">
<el-input v-model="pageForm.name" placeholder="请输入意见和建议" @keyup.enter.native="doSearch" clearable
style="width: 100%"></el-input>
</search-item>
</search>
@@ -84,11 +84,13 @@ layout("/layouts/platform.html"){
businessNo: null,
tableColumns: [
{label: "意见编号", prop: "code"},
{label: "意见名称", prop: "name", width: "200px"},
{label: "意见和建议", prop: "name", width: "200px"},
{label: "建议人", prop: "createUserName"},
{label: "建议人所属代表团", prop: "delegationName"},
{label: "记录人", prop: "suggestUserName"},
{label: "记录人所属讨论组", prop: "suggestUserDelegationName"},
{label: "意见类别", prop: "typeName"},
{label: "届次", prop: "sessionName"},
{label: "建议人所属代表团", prop: "delegationName"},
{label: "当前节点", prop: "curTaskName"},
{label: "流程状态", prop: "instanceState"}
]
@@ -13,8 +13,8 @@ layout("/layouts/platform.html"){
v-for="item in sessionOptions"></el-option>
</el-select>
</search-item>
<search-item label="意见名称">
<el-input v-model="pageForm.name" placeholder="请输入意见名称" @keyup.enter.native="doSearch" clearable
<search-item label="意见和建议">
<el-input v-model="pageForm.name" placeholder="请输入意见和建议" @keyup.enter.native="doSearch" clearable
style="width: 100%"></el-input>
</search-item>
<search-item label="姓名/工号">
@@ -25,10 +25,6 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool :columns.sync="tableColumns">
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder" ref="tableRef" row-key="id" style="width: 100%">
<el-table-column label="序号" width="50" type="index" :index="indexMethod" fixed="left"></el-table-column>
@@ -129,8 +125,12 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "意见编号", prop: "code"},
{label: "意见名称", prop: "name", width: "200px"},
{label: "意见和建议", prop: "name", width: "200px"},
{label: "意见类别", prop: "typeName"},
{label: "建议人", prop: "createUserName"},
{label: "建议人所属代表团", prop: "delegationName"},
{label: "记录人", prop: "suggestUserName"},
{label: "记录人所属讨论组", prop: "suggestUserDelegationName"},
{label: "届次", prop: "sessionName"},
{label: "代表团", prop: "delegationName"},
{label: "当前节点", prop: "curTaskName"},
@@ -13,8 +13,8 @@ layout("/layouts/platform.html"){
v-for="item in sessionOptions"></el-option>
</el-select>
</search-item>
<search-item label="意见名称">
<el-input v-model="pageForm.name" placeholder="请输入意见名称" @keyup.enter.native="doSearch" clearable
<search-item label="意见和建议">
<el-input v-model="pageForm.name" placeholder="请输入意见和建议" @keyup.enter.native="doSearch" clearable
style="width: 100%"></el-input>
</search-item>
<search-item label="姓名/工号">
@@ -152,8 +152,12 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "意见编号", prop: "code"},
{label: "意见名称", prop: "name", width: "200px"},
{label: "意见和建议", prop: "name", width: "200px"},
{label: "意见类别", prop: "typeName"},
{label: "建议人", prop: "createUserName"},
{label: "建议人所属代表团", prop: "delegationName"},
{label: "记录人", prop: "suggestUserName"},
{label: "记录人所属讨论组", prop: "suggestUserDelegationName"},
{label: "届次", prop: "sessionName"},
{label: "代表团", prop: "delegationName"},
{label: "当前节点", prop: "curTaskName"},
@@ -13,8 +13,8 @@ layout("/layouts/platform.html"){
v-for="item in sessionOptions"></el-option>
</el-select>
</search-item>
<search-item label="意见名称">
<el-input v-model="pageForm.name" placeholder="请输入意见名称" @keyup.enter.native="doSearch" clearable
<search-item label="意见和建议">
<el-input v-model="pageForm.name" placeholder="请输入意见和建议" @keyup.enter.native="doSearch" clearable
style="width: 100%"></el-input>
</search-item>
<search-item label="姓名/工号">
@@ -81,8 +81,12 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "意见编号", prop: "code"},
{label: "意见名称", prop: "name", width: "200px"},
{label: "意见和建议", prop: "name", width: "200px"},
{label: "意见类别", prop: "typeName"},
{label: "建议人", prop: "createUserName"},
{label: "建议人所属代表团", prop: "delegationName"},
{label: "记录人", prop: "suggestUserName"},
{label: "记录人所属讨论组", prop: "suggestUserDelegationName"},
{label: "届次", prop: "sessionName"},
{label: "代表团", prop: "delegationName"},
{label: "当前节点", prop: "curTaskName"},
@@ -13,8 +13,8 @@ layout("/layouts/platform.html"){
v-for="item in sessionOptions"></el-option>
</el-select>
</search-item>
<search-item label="意见名称">
<el-input v-model="pageForm.name" placeholder="请输入意见名称" @keyup.enter.native="doSearch" clearable
<search-item label="意见和建议">
<el-input v-model="pageForm.name" placeholder="请输入意见和建议" @keyup.enter.native="doSearch" clearable
style="width: 100%"></el-input>
</search-item>
<search-item label="姓名/工号">
@@ -70,8 +70,12 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "意见编号", prop: "code"},
{label: "意见名称", prop: "name", width: "200px"},
{label: "意见和建议", prop: "name", width: "200px"},
{label: "意见类别", prop: "typeName"},
{label: "建议人", prop: "createUserName"},
{label: "建议人所属代表团", prop: "delegationName"},
{label: "记录人", prop: "suggestUserName"},
{label: "记录人所属讨论组", prop: "suggestUserDelegationName"},
{label: "届次", prop: "sessionName"},
{label: "代表团", prop: "delegationName"},
{label: "流程状态", prop: "instanceState"}
@@ -13,8 +13,8 @@ layout("/layouts/platform.html"){
v-for="item in sessionOptions"></el-option>
</el-select>
</search-item>
<search-item label="意见名称">
<el-input v-model="pageForm.name" placeholder="请输入意见名称" @keyup.enter.native="doSearch" clearable
<search-item label="意见和建议">
<el-input v-model="pageForm.name" placeholder="请输入意见和建议" @keyup.enter.native="doSearch" clearable
style="width: 100%"></el-input>
</search-item>
<search-item label="姓名/工号">
@@ -111,8 +111,12 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{label: "意见编号", prop: "code"},
{label: "意见名称", prop: "name", width: "200px"},
{label: "意见和建议", prop: "name", width: "200px"},
{label: "意见类别", prop: "typeName"},
{label: "建议人", prop: "createUserName"},
{label: "建议人所属代表团", prop: "delegationName"},
{label: "记录人", prop: "suggestUserName"},
{label: "记录人所属讨论组", prop: "suggestUserDelegationName"},
{label: "届次", prop: "sessionName"},
{label: "代表团", prop: "delegationName"},
{label: "承办单位", prop: "underTakeName"},
@@ -87,7 +87,8 @@ const BASIC_FORM = {
></el-option>
</el-select>
</el-form-item>
</el-col> <el-col :span="12">
</el-col>
<el-col :span="12">
<el-form-item label="意见类别" prop="typeId">
<el-select v-model="formData.typeId" style="width: 100%" placeholder="请选择意见类别">
<el-option
@@ -101,19 +102,13 @@ const BASIC_FORM = {
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="12">
<el-form-item label="意见名称" prop="name">
<el-input maxlength="100" placeholder="请输入意见名称" v-model="formData.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="意见时间" prop="createTime">
<el-input readonly v-model="formData.createTime" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12"></el-col>
</el-row>
<el-form-item label="建议承办单位" prop="suggestUnits">
<el-select v-model="formData.suggestUnits" multiple filterable style="width: 100%" placeholder="请选择建议承办单位">
<el-option
@@ -125,8 +120,8 @@ const BASIC_FORM = {
</el-select>
</el-form-item>
<el-form-item label="意见和建议" prop="brief">
<text-editor v-model="formData.brief" key="brief" placeholder="请输入意见和建议"></text-editor>
<el-form-item label="意见和建议" prop="name">
<el-input v-model="formData.name" key="name" placeholder="请输入意见和建议" type="textarea" maxlength="100"></el-input>
</el-form-item>
<!-- <el-form-item label="工作措施" prop="measures">-->
@@ -158,10 +153,9 @@ const BASIC_FORM = {
sessionId: [{ required: true, message: "请选择所属教代会", trigger: ["blur", "change"] }],
suggestUserId: [{ required: true, message: "请选择建议人", trigger: ["blur", "change"] }],
suggestUserDelegationName: [{ required: true, message: "请先选择建议人并自动带出所属代表团", trigger: ["blur", "change"] }],
name: [{ required: true, message: "请输入意见名称", trigger: ["blur", "change"] }],
name: [{ required: true, message: "请输入意见和建议", trigger: ["blur", "change"] }],
typeId: [{ required: true, message: "请选择意见类别", trigger: ["blur", "change"] }],
suggestUnits: [{ required: true, message: "请选择建议承办单位", trigger: ["blur", "change"] }],
brief: [{ required: true, message: "请输入意见和建议", trigger: ["blur", "change"] }],
measures: [{ required: true, message: "请输入工作措施", trigger: ["blur", "change"] }],
unitName: [{ required: true, message: "请先选择建议人自动带出单位", trigger: ["blur", "change"] }],
mobile: [{ required: true, message: "请输入联系电话", trigger: ["blur", "change"] }]
@@ -318,6 +312,18 @@ const BASIC_FORM = {
this.formData.createUserName = currentUser.username
this.formData.createUserLoginName = currentUser.loginname
},
getObjectValue(data, camelKey, lowerKey) {
if (!data) {
return ""
}
if (data[camelKey] !== undefined && data[camelKey] !== null) {
return data[camelKey]
}
if (data[lowerKey] !== undefined && data[lowerKey] !== null) {
return data[lowerKey]
}
return ""
},
normalizeDetailFormData(data) {
// Convert persisted model fields back into the current page layout fields during detail echo.
// The detail API may return lower-case keys, so echo must support both camelCase and lower-case names.
@@ -404,6 +410,28 @@ const BASIC_FORM = {
}
})
},
ensureDiscussionGroupOption(groupId) {
if (!groupId) {
return Promise.resolve()
}
if (this.discussionGroupOptions.find((item) => item.id === groupId)) {
return Promise.resolve()
}
// Keep the current discussion group visible during edit echo even if it is outside the filtered option list.
return this.$axios.post("/platform/opinion/write/discussionGroupDetail", { id: groupId }).then((res) => {
if (res.code !== 0 || !res.data) {
return
}
this.discussionGroupOptions = this.mergeOptions(this.discussionGroupOptions, [{
id: this.getObjectValue(res.data, "id", "id"),
code: this.getObjectValue(res.data, "code", "code"),
name: this.getObjectValue(res.data, "name", "name"),
recorderUserId: this.getObjectValue(res.data, "recorderUserId", "recorderuserid"),
recorderUserCode: this.getObjectValue(res.data, "recorderUserCode", "recorderusercode"),
recorderUserName: this.getObjectValue(res.data, "recorderUserName", "recorderusername")
}], "id")
})
},
async meetingChange() {
this.formData.delegationId = ""
this.fillCurrentRecorder()
@@ -446,10 +474,10 @@ const BASIC_FORM = {
return this.$axios.post("/platform/opinion/write/discussionGroupDetail", { id: groupId }).then((res) => {
const selectedGroup = this.discussionGroupOptions.find((item) => item.id === groupId) || {}
const group = res.code === 0 && res.data ? res.data : selectedGroup
this.formData.createUserId = group.recorderUserId || selectedGroup.recorderUserId || ""
this.formData.createUserName = group.recorderUserName || selectedGroup.recorderUserName || ""
this.formData.createUserLoginName = group.recorderUserCode || selectedGroup.recorderUserCode || ""
this.formData.discussionGroupName = group.name || selectedGroup.name || ""
this.formData.createUserId = this.getObjectValue(group, "recorderUserId", "recorderuserid") || this.getObjectValue(selectedGroup, "recorderUserId", "recorderuserid")
this.formData.createUserName = this.getObjectValue(group, "recorderUserName", "recorderusername") || this.getObjectValue(selectedGroup, "recorderUserName", "recorderusername")
this.formData.createUserLoginName = this.getObjectValue(group, "recorderUserCode", "recorderusercode") || this.getObjectValue(selectedGroup, "recorderUserCode", "recorderusercode")
this.formData.discussionGroupName = this.getObjectValue(group, "name", "name") || this.getObjectValue(selectedGroup, "name", "name")
this.$nextTick(() => {
this.$refs.addForm && this.$refs.addForm.clearValidate(["createUserId"])
})
@@ -524,9 +552,7 @@ const BASIC_FORM = {
}
await this.listSession(true)
await this.listDiscussionGroup()
if (this.discussionGroupOptions.length && !this.discussionGroupOptions.find((item) => item.id === this.formData.delegationId)) {
this.formData.delegationId = this.discussionGroupOptions[0].id
}
await this.ensureDiscussionGroupOption(this.formData.delegationId)
if (this.formData.suggestUserId) {
this.suggestUserOptions = [{
id: this.formData.suggestUserId,
@@ -18,11 +18,11 @@ layout("/layouts/platform.html"){
<el-button slot="append" icon="el-icon-search" @click="doSearch"></el-button>
</el-input>
</search-item>
<search-item label="代表团编码">
<el-input clearable placeholder="请输入代表团编码" v-model="pageForm.delegationCode" @keyup.enter.native="doSearch"></el-input>
</search-item>
<search-item label="记录人">
<el-input clearable placeholder="请输入记录人姓名或编码" v-model="pageForm.recorderUserName" @keyup.enter.native="doSearch"></el-input>
</search-item>
<search-item label="代表团编码">
<el-input clearable placeholder="请输入代表团编码" v-model="pageForm.delegationCode" @keyup.enter.native="doSearch"></el-input>
<el-input clearable placeholder="请输入记录人姓名或工号" v-model="pageForm.recorderUserName" @keyup.enter.native="doSearch"></el-input>
</search-item>
</search>
</el-card>
@@ -37,7 +37,7 @@ layout("/layouts/platform.html"){
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%">
<el-table-column type="index" :index="indexMethod" label="序号" width="70"></el-table-column>
<el-table-column prop="code" label="讨论组编码" min-width="140"></el-table-column>
<el-table-column prop="name" label="讨论组名称" min-width="180"></el-table-column>
<el-table-column prop="name" label="讨论组名称" min-width="180" sortable></el-table-column>
<el-table-column prop="recorderUserName" label="记录人" min-width="140">
<template slot-scope="{row}">
{{ row.recorderUserName }}<span v-if="row.recorderUserCode">({{ row.recorderUserCode }})</span>