申诉管理模块: 页面优化;

This commit is contained in:
dd3s_206
2026-05-22 11:06:45 +08:00
parent 20240b6d1e
commit 2ad09e5b6b
5 changed files with 35 additions and 30 deletions
@@ -135,7 +135,7 @@ public class AppealInfo extends BaseModel {
@Column @Column
@Comment("申诉人签名") @Comment("申诉人签名")
@ColDefine(type = ColType.VARCHAR, width = 100) @ColDefine(type = ColType.VARCHAR, width = 255)
private String signature; private String signature;
@Column @Column
@@ -78,11 +78,11 @@ layout("/layouts/platform.html"){
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item label="处理决定内容" prop="decisionContent" :rules="[{required:true,validator:validateRichText,message:'请输入处理决定内容',trigger:['blur','change']}]"> <el-form-item label="处理决定内容" prop="decisionContent" :rules="[{required:true,validator:validateText,message:'请输入处理决定内容',trigger:['blur','change']}]">
<text-editor v-model="formData.decisionContent"></text-editor> <el-input v-model="formData.decisionContent" type="textarea" :rows="5" maxlength="2000" show-word-limit placeholder="请输入处理决定内容"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="事实理由及依据" prop="legalBasis" :rules="[{required:true,validator:validateRichText,message:'请输入事实理由及依据',trigger:['blur','change']}]"> <el-form-item label="事实理由及依据" prop="legalBasis" :rules="[{required:true,validator:validateText,message:'请输入事实理由及依据',trigger:['blur','change']}]">
<text-editor v-model="formData.legalBasis"></text-editor> <el-input v-model="formData.legalBasis" type="textarea" :rows="6" maxlength="3000" show-word-limit placeholder="请输入事实理由及依据"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="决定书附件" prop="decisionFiles"> <el-form-item label="决定书附件" prop="decisionFiles">
<file-upload :value.sync="formData.decisionFiles" :upload_number="5" upload_mode="drag" upload_result_category="array" complete_result></file-upload> <file-upload :value.sync="formData.decisionFiles" :upload_number="5" upload_mode="drag" upload_result_category="array" complete_result></file-upload>
@@ -157,9 +157,8 @@ layout("/layouts/platform.html"){
submit() submit()
} }
}, },
validateRichText(rule, value, callback) { validateText(rule, value, callback) {
const text = (value || "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, "").trim() if (!(value || "").trim()) {
if (!text) {
callback(new Error(rule.message)) callback(new Error(rule.message))
return return
} }
@@ -24,13 +24,13 @@ const APPEAL_INFO = {
<el-descriptions-item label="被申诉单位地址" :span="2">{{ text(viewData.defendantAddress) }}</el-descriptions-item> <el-descriptions-item label="被申诉单位地址" :span="2">{{ text(viewData.defendantAddress) }}</el-descriptions-item>
<el-descriptions-item label="被申诉单位电话">{{ text(viewData.defendantContact) }}</el-descriptions-item> <el-descriptions-item label="被申诉单位电话">{{ text(viewData.defendantContact) }}</el-descriptions-item>
<el-descriptions-item label="申诉事项" :span="3"> <el-descriptions-item label="申诉事项" :span="3">
<div class="text-left" v-html="viewData.appealMatter"></div> <div class="text-left" style="white-space: pre-wrap;" v-text="plainText(viewData.appealMatter)"></div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="申诉理由" :span="3"> <el-descriptions-item label="申诉理由" :span="3">
<div class="text-left" v-html="viewData.reason"></div> <div class="text-left" style="white-space: pre-wrap;" v-text="plainText(viewData.reason)"></div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="申诉要求" :span="3"> <el-descriptions-item label="申诉要求" :span="3">
<div class="text-left" v-html="viewData.request"></div> <div class="text-left" style="white-space: pre-wrap;" v-text="plainText(viewData.request)"></div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="申诉材料附件" :span="3"> <el-descriptions-item label="申诉材料附件" :span="3">
<file-preview :files="viewData.files" complete_result></file-preview> <file-preview :files="viewData.files" complete_result></file-preview>
@@ -48,10 +48,10 @@ const APPEAL_INFO = {
<el-descriptions-item label="处理决定">{{ decisionTypeText(viewData.decisionType) }}</el-descriptions-item> <el-descriptions-item label="处理决定">{{ decisionTypeText(viewData.decisionType) }}</el-descriptions-item>
<el-descriptions-item label="决定日期">{{ viewData.decisionDate }}</el-descriptions-item> <el-descriptions-item label="决定日期">{{ viewData.decisionDate }}</el-descriptions-item>
<el-descriptions-item label="决定内容" :span="3"> <el-descriptions-item label="决定内容" :span="3">
<div class="text-left" v-html="viewData.decisionContent"></div> <div class="text-left" style="white-space: pre-wrap;" v-text="plainText(viewData.decisionContent)"></div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="事实理由及依据" :span="3"> <el-descriptions-item label="事实理由及依据" :span="3">
<div class="text-left" v-html="viewData.legalBasis"></div> <div class="text-left" style="white-space: pre-wrap;" v-text="plainText(viewData.legalBasis)"></div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="决定书附件" :span="3"> <el-descriptions-item label="决定书附件" :span="3">
<file-preview :files="viewData.decisionFiles" complete_result></file-preview> <file-preview :files="viewData.decisionFiles" complete_result></file-preview>
@@ -64,7 +64,7 @@ const APPEAL_INFO = {
<el-descriptions-item label="执行时间">{{ viewData.executeTime }}</el-descriptions-item> <el-descriptions-item label="执行时间">{{ viewData.executeTime }}</el-descriptions-item>
<el-descriptions-item label="执行状态">{{ viewData.state }}</el-descriptions-item> <el-descriptions-item label="执行状态">{{ viewData.state }}</el-descriptions-item>
<el-descriptions-item label="执行情况" :span="3"> <el-descriptions-item label="执行情况" :span="3">
<div class="text-left" v-html="viewData.executeContent"></div> <div class="text-left" style="white-space: pre-wrap;" v-text="plainText(viewData.executeContent)"></div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="执行附件" :span="3"> <el-descriptions-item label="执行附件" :span="3">
<file-preview :files="viewData.executeFiles" complete_result></file-preview> <file-preview :files="viewData.executeFiles" complete_result></file-preview>
@@ -124,6 +124,14 @@ const APPEAL_INFO = {
}, },
text(value) { text(value) {
return value || "-" return value || "-"
},
plainText(value) {
return (value || "")
.replace(/<br\s*\/?>/gi, "\n")
.replace(/<\/p>/gi, "\n")
.replace(/<[^>]+>/g, "")
.replace(/&nbsp;/g, " ")
.trim() || "-"
} }
} }
} }
@@ -61,8 +61,8 @@ layout("/layouts/platform.html"){
<el-form-item label="申诉标题"> <el-form-item label="申诉标题">
<el-input v-model="formData.title" disabled></el-input> <el-input v-model="formData.title" disabled></el-input>
</el-form-item> </el-form-item>
<el-form-item label="执行情况" prop="executeContent" :rules="[{required:true,validator:validateRichText,message:'请输入执行情况',trigger:['blur','change']}]"> <el-form-item label="执行情况" prop="executeContent" :rules="[{required:true,validator:validateText,message:'请输入执行情况',trigger:['blur','change']}]">
<text-editor v-model="formData.executeContent"></text-editor> <el-input v-model="formData.executeContent" type="textarea" :rows="5" maxlength="2000" show-word-limit placeholder="请输入执行情况"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="执行附件" prop="executeFiles"> <el-form-item label="执行附件" prop="executeFiles">
<file-upload :value.sync="formData.executeFiles" :upload_number="5" upload_mode="drag" upload_result_category="array" complete_result></file-upload> <file-upload :value.sync="formData.executeFiles" :upload_number="5" upload_mode="drag" upload_result_category="array" complete_result></file-upload>
@@ -125,9 +125,8 @@ layout("/layouts/platform.html"){
}) })
}) })
}, },
validateRichText(rule, value, callback) { validateText(rule, value, callback) {
const text = (value || "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, "").trim() if (!(value || "").trim()) {
if (!text) {
callback(new Error(rule.message)) callback(new Error(rule.message))
return return
} }
@@ -48,7 +48,7 @@ layout("/layouts/platform.html"){
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="联系电话" prop="mobile"> <el-form-item label="联系电话" prop="mobile">
<el-input v-model="formData.mobile" clearable maxlength="100" show-word-limit placeholder="请输入手机或办公电话"></el-input> <el-input v-model="formData.mobile" clearable maxlength="100" placeholder="请输入手机或办公电话"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@@ -89,18 +89,18 @@ layout("/layouts/platform.html"){
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="被申诉单位电话" prop="defendantContact"> <el-form-item label="被申诉单位电话" prop="defendantContact">
<el-input v-model="formData.defendantContact" clearable maxlength="100" show-word-limit placeholder="请输入联系电话"></el-input> <el-input v-model="formData.defendantContact" clearable maxlength="100" placeholder="请输入联系电话"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item label="申诉事项" prop="appealMatter"> <el-form-item label="申诉事项" prop="appealMatter">
<text-editor v-model="formData.appealMatter"></text-editor> <el-input v-model="formData.appealMatter" type="textarea" :rows="5" maxlength="1000" show-word-limit placeholder="请输入申诉事项"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="申诉理由" prop="reason"> <el-form-item label="申诉理由" prop="reason">
<text-editor v-model="formData.reason"></text-editor> <el-input v-model="formData.reason" type="textarea" :rows="6" maxlength="2000" show-word-limit placeholder="请输入申诉理由"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="申诉要求" prop="request"> <el-form-item label="申诉要求" prop="request">
<text-editor v-model="formData.request"></text-editor> <el-input v-model="formData.request" type="textarea" :rows="5" maxlength="1000" show-word-limit placeholder="请输入申诉要求"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="申诉人签名" prop="signature"> <el-form-item label="申诉人签名" prop="signature">
<pc-signature v-model="formData.signature"></pc-signature> <pc-signature v-model="formData.signature"></pc-signature>
@@ -145,9 +145,9 @@ layout("/layouts/platform.html"){
{validator: this.validatePhone, trigger: "blur"} {validator: this.validatePhone, trigger: "blur"}
], ],
title: [{required: true, message: "请输入申诉标题", trigger: "blur"}], title: [{required: true, message: "请输入申诉标题", trigger: "blur"}],
appealMatter: [{required: true, validator: this.validateRichText, message: "请输入申诉事项", trigger: ["blur", "change"]}], appealMatter: [{required: true, validator: this.validateText, message: "请输入申诉事项", trigger: ["blur", "change"]}],
reason: [{required: true, validator: this.validateRichText, message: "请输入申诉理由", trigger: ["blur", "change"]}], reason: [{required: true, validator: this.validateText, message: "请输入申诉理由", trigger: ["blur", "change"]}],
request: [{required: true, validator: this.validateRichText, message: "请输入申诉要求", trigger: ["blur", "change"]}], request: [{required: true, validator: this.validateText, message: "请输入申诉要求", trigger: ["blur", "change"]}],
signature: [{required: true, message: "请完成申诉人签名", trigger: ["blur", "change"]}], signature: [{required: true, message: "请完成申诉人签名", trigger: ["blur", "change"]}],
files: [{required: true, validator: this.validateFiles, message: "请上传申诉材料附件", trigger: "change"}] files: [{required: true, validator: this.validateFiles, message: "请上传申诉材料附件", trigger: "change"}]
} }
@@ -166,9 +166,8 @@ layout("/layouts/platform.html"){
} }
callback() callback()
}, },
validateRichText(rule, value, callback) { validateText(rule, value, callback) {
const text = (value || "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, "").trim() if (!(value || "").trim()) {
if (!text) {
callback(new Error(rule.message)) callback(new Error(rule.message))
return return
} }