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

This commit is contained in:
dd3s_206
2026-05-21 17:38:07 +08:00
parent 55433b2a8e
commit 088ec7e8fe
10 changed files with 145 additions and 75 deletions
@@ -56,7 +56,7 @@ public class AppealAcceptController {
Sql sql = listSql(); Sql sql = listSql();
Cnd cnd = taskCondition("appealAccept", "受理", approval); Cnd cnd = taskCondition("appealAccept", "受理", approval);
if (StrUtil.isNotBlank(searchKeyword)) { if (StrUtil.isNotBlank(searchKeyword)) {
cnd.where().andLike("info.title", searchKeyword); cnd.and("info.title", "like", "%" + searchKeyword + "%");
} }
cnd.andEX("info.appealTypeId", "=", appealTypeId); cnd.andEX("info.appealTypeId", "=", appealTypeId);
cnd.andEX("YEAR(info.applyDate)", "=", year); cnd.andEX("YEAR(info.applyDate)", "=", year);
@@ -56,7 +56,7 @@ public class AppealExecuteController {
Sql sql = listSql(); Sql sql = listSql();
Cnd cnd = taskCondition("appealExecute", "执行", approval); Cnd cnd = taskCondition("appealExecute", "执行", approval);
if (StrUtil.isNotBlank(searchKeyword)) { if (StrUtil.isNotBlank(searchKeyword)) {
cnd.where().andLike("info.title", searchKeyword); cnd.and("info.title", "like", "%" + searchKeyword + "%");
} }
cnd.andEX("info.appealTypeId", "=", appealTypeId); cnd.andEX("info.appealTypeId", "=", appealTypeId);
cnd.andEX("YEAR(info.applyDate)", "=", year); cnd.andEX("YEAR(info.applyDate)", "=", year);
@@ -57,10 +57,10 @@ public class AppealMineController {
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
$condition $condition
"""); """);
Cnd cnd = Cnd.where("info.userId", "=", SecurityUtil.getUserId()); Cnd cnd = Cnd.where("info.userId", "=", SecurityUtil.getUserId());
if (StrUtil.isNotBlank(searchKeyword)) { if (StrUtil.isNotBlank(searchKeyword)) {
cnd.where().andLike("info.title", searchKeyword); cnd.and("info.title", "like", "%" + searchKeyword + "%");
} }
cnd.andEX("info.appealTypeId", "=", appealTypeId); cnd.andEX("info.appealTypeId", "=", appealTypeId);
cnd.andEX("YEAR(info.applyDate)", "=", year); cnd.andEX("YEAR(info.applyDate)", "=", year);
@@ -94,7 +94,7 @@ public class AppealQueryController {
String defendantUnitId, Integer year) { String defendantUnitId, Integer year) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(searchKeyword)) { if (StrUtil.isNotBlank(searchKeyword)) {
cnd.where().andLike("info.title", searchKeyword); cnd.and("info.title", "like", "%" + searchKeyword + "%");
} }
cnd.andEX("info.appealTypeId", "=", appealTypeId); cnd.andEX("info.appealTypeId", "=", appealTypeId);
cnd.andEX("info.state", "=", state); cnd.andEX("info.state", "=", state);
@@ -37,7 +37,7 @@ public class AppealTypeController {
public Result pageData(Integer pageNumber, Integer pageSize, String name) { public Result pageData(Integer pageNumber, Integer pageSize, String name) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(name)) { if (StrUtil.isNotBlank(name)) {
cnd.where().andLike("name", name); cnd.and("name", "like", "%" + name + "%");
} }
cnd.asc("sort").desc("createdAt"); cnd.asc("sort").desc("createdAt");
Pagination page = appealTypeService.listPage(pageNumber, pageSize, cnd); Pagination page = appealTypeService.listPage(pageNumber, pageSize, cnd);
@@ -78,10 +78,10 @@ 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,message:'请输入处理决定内容',trigger:'blur'}]"> <el-form-item label="处理决定内容" prop="decisionContent" :rules="[{required:true,validator:validateRichText,message:'请输入处理决定内容',trigger:['blur','change']}]">
<text-editor v-model="formData.decisionContent"></text-editor> <text-editor v-model="formData.decisionContent"></text-editor>
</el-form-item> </el-form-item>
<el-form-item label="事实理由及依据" prop="legalBasis" :rules="[{required:true,message:'请输入事实理由及依据',trigger:'blur'}]"> <el-form-item label="事实理由及依据" prop="legalBasis" :rules="[{required:true,validator:validateRichText,message:'请输入事实理由及依据',trigger:['blur','change']}]">
<text-editor v-model="formData.legalBasis"></text-editor> <text-editor v-model="formData.legalBasis"></text-editor>
</el-form-item> </el-form-item>
<el-form-item label="决定书附件" prop="decisionFiles"> <el-form-item label="决定书附件" prop="decisionFiles">
@@ -128,6 +128,9 @@ layout("/layouts/platform.html"){
this.$axios.post("/platform/appeal/accept/queryTask", {taskId: row.taskId}).then((res) => { this.$axios.post("/platform/appeal/accept/queryTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
this.formData = res.data || row this.formData = res.data || row
if (!this.formData.decisionDate) {
this.$set(this.formData, "decisionDate", this.$moment().format("YYYY-MM-DD"))
}
this.dialogVisible = true this.dialogVisible = true
} }
}) })
@@ -146,7 +149,7 @@ layout("/layouts/platform.html"){
} }
}) })
} }
if (submitType === 1) { if (submitType !== 6) {
this.$refs.formRef.validate((valid) => { this.$refs.formRef.validate((valid) => {
if (valid) submit() if (valid) submit()
}) })
@@ -154,6 +157,14 @@ layout("/layouts/platform.html"){
submit() submit()
} }
}, },
validateRichText(rule, value, callback) {
const text = (value || "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, "").trim()
if (!text) {
callback(new Error(rule.message))
return
}
callback()
},
onRevoke(row) { onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", { this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
@@ -6,20 +6,23 @@ const APPEAL_INFO = {
<div class="process-title">申诉基础信息</div> <div class="process-title">申诉基础信息</div>
<h3 style="text-align: center;font-weight: 600" class="pt10 pb10">{{ viewData.title }}</h3> <h3 style="text-align: center;font-weight: 600" class="pt10 pb10">{{ viewData.title }}</h3>
<el-descriptions :column="3" border> <el-descriptions :column="3" border>
<el-descriptions-item label="申诉人">{{ viewData.userName }}({{ viewData.loginName }})</el-descriptions-item> <el-descriptions-item label="申诉人">{{ text(viewData.userName) }}</el-descriptions-item>
<el-descriptions-item label="所在单位">{{ viewData.unitName }}</el-descriptions-item> <el-descriptions-item label="性别">{{ text(viewData.sex) }}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item> <el-descriptions-item label="出生年月">{{ text(viewData.birthday) }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item> <el-descriptions-item label="政治面貌">{{ text(viewData.political) }}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{ viewData.birthday }}</el-descriptions-item> <el-descriptions-item label="工号">{{ text(viewData.loginName) }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item> <el-descriptions-item label="所在单位">{{ text(viewData.unitName) }}</el-descriptions-item>
<el-descriptions-item label="申诉类型">{{ viewData.appealTypeName }}</el-descriptions-item> <el-descriptions-item label="岗位">{{ text(viewData.positionName) }}</el-descriptions-item>
<el-descriptions-item label="被申诉单位">{{ viewData.defendantUnitName }}</el-descriptions-item> <el-descriptions-item label="联系电话">{{ text(viewData.mobile) }}</el-descriptions-item>
<el-descriptions-item label="申请日期">{{ viewData.applyDate }}</el-descriptions-item> <el-descriptions-item label="申请日期">{{ text(viewData.applyDate) }}</el-descriptions-item>
<el-descriptions-item label="住址" :span="3">{{ text(viewData.address) }}</el-descriptions-item>
<el-descriptions-item label="申诉类型">{{ text(viewData.appealTypeName) }}</el-descriptions-item>
<el-descriptions-item label="业务状态"> <el-descriptions-item label="业务状态">
<el-tag size="mini">{{ viewData.state || '草稿' }}</el-tag> <el-tag size="mini">{{ viewData.state || '草稿' }}</el-tag>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="岗位">{{ viewData.positionName }}</el-descriptions-item> <el-descriptions-item label="被申诉单位">{{ text(viewData.defendantUnitName) }}</el-descriptions-item>
<el-descriptions-item label="住址">{{ viewData.address }}</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="申诉事项" :span="3"> <el-descriptions-item label="申诉事项" :span="3">
<div class="text-left" v-html="viewData.appealMatter"></div> <div class="text-left" v-html="viewData.appealMatter"></div>
</el-descriptions-item> </el-descriptions-item>
@@ -29,7 +32,7 @@ const APPEAL_INFO = {
<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" v-html="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>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="申诉人签名" :span="3"> <el-descriptions-item label="申诉人签名" :span="3">
@@ -118,6 +121,9 @@ const APPEAL_INFO = {
OTHER: "其他" OTHER: "其他"
} }
return map[value] || value || "" return map[value] || value || ""
},
text(value) {
return value || "-"
} }
} }
} }
@@ -61,7 +61,7 @@ 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,message:'请输入执行情况',trigger:'blur'}]"> <el-form-item label="执行情况" prop="executeContent" :rules="[{required:true,validator:validateRichText,message:'请输入执行情况',trigger:['blur','change']}]">
<text-editor v-model="formData.executeContent"></text-editor> <text-editor v-model="formData.executeContent"></text-editor>
</el-form-item> </el-form-item>
<el-form-item label="执行附件" prop="executeFiles"> <el-form-item label="执行附件" prop="executeFiles">
@@ -125,6 +125,14 @@ layout("/layouts/platform.html"){
}) })
}) })
}, },
validateRichText(rule, value, callback) {
const text = (value || "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, "").trim()
if (!text) {
callback(new Error(rule.message))
return
}
callback()
},
onRevoke(row) { onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", { this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
@@ -7,7 +7,7 @@ layout("/layouts/platform.html"){
<el-card shadow="never"> <el-card shadow="never">
<search @search="doSearch"> <search @search="doSearch">
<search-item label="类型名称"> <search-item label="类型名称">
<el-input v-model="pageForm.name" clearable placeholder="请输入类型名称" @keyup.enter.native="doSearch"></el-input> <el-input v-model="pageForm.name" clearable maxlength="100" placeholder="请输入类型名称" @keyup.enter.native="doSearch"></el-input>
</search-item> </search-item>
</search> </search>
</el-card> </el-card>
@@ -40,7 +40,7 @@ layout("/layouts/platform.html"){
<el-dialog :title="formData.id ? '编辑申诉类型' : '新增申诉类型'" :visible.sync="dialogVisible" width="500px" :close-on-click-modal="false"> <el-dialog :title="formData.id ? '编辑申诉类型' : '新增申诉类型'" :visible.sync="dialogVisible" width="500px" :close-on-click-modal="false">
<el-form :model="formData" ref="formRef" label-width="100px"> <el-form :model="formData" ref="formRef" label-width="100px">
<el-form-item label="类型名称" prop="name" :rules="[{required:true,message:'请输入类型名称',trigger:'blur'}]"> <el-form-item label="类型名称" prop="name" :rules="[{required:true,message:'请输入类型名称',trigger:'blur'}]">
<el-input v-model="formData.name" maxlength="100" clearable placeholder="请输入类型名称"></el-input> <el-input v-model="formData.name" maxlength="100" show-word-limit clearable placeholder="请输入类型名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="排序" prop="sort"> <el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort" :min="0" controls-position="right" style="width: 100%"></el-input-number> <el-input-number v-model="formData.sort" :min="0" controls-position="right" style="width: 100%"></el-input-number>
@@ -12,85 +12,87 @@ layout("/layouts/platform.html"){
<el-input v-model="formData.userName" disabled></el-input> <el-input v-model="formData.userName" disabled></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="性别" prop="sex">
<el-input v-model="formData.sex" clearable maxlength="20" show-word-limit></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出生年月" prop="birthday">
<el-date-picker v-model="formData.birthday" value-format="yyyy-MM-dd" type="date" style="width: 100%" placeholder="请选择出生年月"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="政治面貌" prop="political">
<el-input v-model="formData.political" clearable maxlength="100" show-word-limit></el-input>
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="工号" prop="loginName"> <el-form-item label="工号" prop="loginName">
<el-input v-model="formData.loginName" disabled></el-input> <el-input v-model="formData.loginName" disabled></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="所在单位" prop="unitName">
<el-input v-model="formData.unitName" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="岗位" prop="positionName">
<el-input v-model="formData.positionName" clearable maxlength="100" show-word-limit></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="mobile">
<el-input v-model="formData.mobile" clearable maxlength="100" show-word-limit placeholder="请输入手机或办公电话"></el-input>
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="申请日期" prop="applyDate"> <el-form-item label="申请日期" prop="applyDate">
<el-date-picker v-model="formData.applyDate" value-format="yyyy-MM-dd" type="date" style="width: 100%" placeholder="请选择申请日期"></el-date-picker> <el-date-picker v-model="formData.applyDate" value-format="yyyy-MM-dd" type="date" style="width: 100%" placeholder="请选择申请日期"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="所在单位" prop="unitName">
<el-input v-model="formData.unitName" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="岗位" prop="positionName">
<el-input v-model="formData.positionName" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="mobile">
<el-input v-model="formData.mobile" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="性别" prop="sex">
<el-input v-model="formData.sex" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出生年月" prop="birthday">
<el-date-picker v-model="formData.birthday" value-format="yyyy-MM-dd" type="date" style="width: 100%" placeholder="请选择出生年月"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="政治面貌" prop="political">
<el-input v-model="formData.political" clearable maxlength="100"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="住址" prop="address"> <el-form-item label="住址" prop="address">
<el-input v-model="formData.address" clearable maxlength="300"></el-input> <el-input v-model="formData.address" clearable maxlength="300" show-word-limit></el-input>
</el-form-item> </el-form-item>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="8">
<el-form-item label="申诉类型" prop="appealTypeId"> <el-form-item label="申诉类型" prop="appealTypeId">
<el-select v-model="formData.appealTypeId" filterable clearable style="width: 100%" @change="onTypeChange"> <el-select v-model="formData.appealTypeId" filterable clearable style="width: 100%" @change="onTypeChange">
<el-option v-for="item in typeOptions" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in typeOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="16">
<el-form-item label="申诉标题" prop="title">
<el-input v-model="formData.title" clearable maxlength="200" show-word-limit placeholder="请输入申诉标题"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="被申诉单位" prop="defendantUnitId"> <el-form-item label="被申诉单位" prop="defendantUnitId">
<el-select v-model="formData.defendantUnitId" filterable clearable style="width: 100%" @change="onUnitChange"> <el-select v-model="formData.defendantUnitId" filterable clearable style="width: 100%" @change="onUnitChange">
<el-option v-for="item in unitOptions" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in unitOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="8">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="被申诉单位地址" prop="defendantAddress"> <el-form-item label="被申诉单位地址" prop="defendantAddress">
<el-input v-model="formData.defendantAddress" clearable maxlength="300"></el-input> <el-input v-model="formData.defendantAddress" clearable maxlength="300" show-word-limit></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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"></el-input> <el-input v-model="formData.defendantContact" clearable maxlength="100" show-word-limit placeholder="请输入联系电话"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item label="申诉标题" prop="title">
<el-input v-model="formData.title" clearable maxlength="200" placeholder="请输入申诉标题"></el-input>
</el-form-item>
<el-form-item label="申诉事项" prop="appealMatter"> <el-form-item label="申诉事项" prop="appealMatter">
<text-editor v-model="formData.appealMatter"></text-editor> <text-editor v-model="formData.appealMatter"></text-editor>
</el-form-item> </el-form-item>
@@ -103,7 +105,7 @@ layout("/layouts/platform.html"){
<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>
</el-form-item> </el-form-item>
<el-form-item label="附件" prop="files"> <el-form-item label="申诉材料附件" prop="files">
<file-upload :value.sync="formData.files" :upload_number="5" upload_mode="drag" upload_result_category="array" complete_result></file-upload> <file-upload :value.sync="formData.files" :upload_number="5" upload_mode="drag" upload_result_category="array" complete_result></file-upload>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -125,17 +127,60 @@ layout("/layouts/platform.html"){
taskId: null, taskId: null,
formData: {}, formData: {},
formRules: { formRules: {
sex: [{required: true, message: "请输入性别", trigger: "blur"}],
birthday: [{required: true, message: "请选择出生年月", trigger: "change"}],
political: [{required: true, message: "请输入政治面貌", trigger: "blur"}],
positionName: [{required: true, message: "请输入岗位", trigger: "blur"}],
mobile: [
{required: true, message: "请输入联系电话", trigger: "blur"},
{validator: this.validatePhone, trigger: "blur"}
],
applyDate: [{required: true, message: "请选择申请日期", trigger: "change"}],
address: [{required: true, message: "请输入住址", trigger: "blur"}],
appealTypeId: [{required: true, message: "请选择申诉类型", trigger: "change"}], appealTypeId: [{required: true, message: "请选择申诉类型", trigger: "change"}],
defendantUnitId: [{required: true, message: "请选择被申诉单位", trigger: "change"}], defendantUnitId: [{required: true, message: "请选择被申诉单位", trigger: "change"}],
defendantAddress: [{required: true, message: "请输入被申诉单位地址", trigger: "blur"}],
defendantContact: [
{required: true, message: "请输入被申诉单位电话", trigger: "blur"},
{validator: this.validatePhone, trigger: "blur"}
],
title: [{required: true, message: "请输入申诉标题", trigger: "blur"}], title: [{required: true, message: "请输入申诉标题", trigger: "blur"}],
appealMatter: [{required: true, message: "请输入申诉事项", trigger: "blur"}], appealMatter: [{required: true, validator: this.validateRichText, message: "请输入申诉事项", trigger: ["blur", "change"]}],
reason: [{required: true, message: "请输入申诉理由", trigger: "blur"}], reason: [{required: true, validator: this.validateRichText, message: "请输入申诉理由", trigger: ["blur", "change"]}],
request: [{required: true, message: "请输入申诉要求", trigger: "blur"}], request: [{required: true, validator: this.validateRichText, 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"}]
} }
} }
}, },
methods: { methods: {
validatePhone(rule, value, callback) {
if (!value) {
callback()
return
}
const reg = /^((1[3-9]\d{9})|(0\d{2,3}-?\d{7,8})|(\d{6,12}))$/
if (!reg.test(value)) {
callback(new Error("请输入正确的联系电话"))
return
}
callback()
},
validateRichText(rule, value, callback) {
const text = (value || "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, "").trim()
if (!text) {
callback(new Error(rule.message))
return
}
callback()
},
validateFiles(rule, value, callback) {
if (!value || !value.length) {
callback(new Error(rule.message))
return
}
callback()
},
queryParam(name) { queryParam(name) {
return new URLSearchParams(window.location.search).get(name) return new URLSearchParams(window.location.search).get(name)
}, },