commit
This commit is contained in:
+51
-1
@@ -1 +1,51 @@
|
||||
/.idea/
|
||||
# 依赖与构建产物
|
||||
**/node_modules/
|
||||
**/dist/
|
||||
**/build/
|
||||
**/target/
|
||||
**/out/
|
||||
**/.next/
|
||||
**/.nuxt/
|
||||
**/coverage/
|
||||
|
||||
# 日志、缓存与临时文件
|
||||
**/*.log
|
||||
**/*.tmp
|
||||
**/*.temp
|
||||
**/.cache/
|
||||
**/.eslintcache
|
||||
**/npm-debug.log*
|
||||
**/yarn-debug.log*
|
||||
**/yarn-error.log*
|
||||
**/pnpm-debug.log*
|
||||
|
||||
# IDE 与操作系统文件
|
||||
.idea/
|
||||
.vscode/
|
||||
*.iml
|
||||
.project
|
||||
.classpath
|
||||
.settings/
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# 本地环境和密钥配置(保留示例文件)
|
||||
**/.env
|
||||
**/.env.local
|
||||
**/.env.*.local
|
||||
!**/.env.example
|
||||
!**/.env.*.example
|
||||
|
||||
# Java 编译文件
|
||||
**/*.class
|
||||
.trae/.ignore
|
||||
.trae/cache-components/SKILL.md
|
||||
.trae/code-reviewer/SKILL.md
|
||||
.trae/find-skills/SKILL.md
|
||||
.trae/fix/SKILL.md
|
||||
.trae/frontend-code-review/SKILL.md
|
||||
.trae/frontend-design/SKILL.md
|
||||
.trae/fullstack-developer/SKILL.md
|
||||
.trae/pr-creator/SKILL.md
|
||||
.trae/update-docs/SKILL.md
|
||||
.trae/webapp-testing/SKILL.md
|
||||
|
||||
@@ -17,8 +17,10 @@ import io.v.nutz.util.ViTool;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
@@ -203,6 +205,7 @@ public class SickHelpImportController {
|
||||
@At("/convertIns")
|
||||
@Ok("json:full")
|
||||
@RequiresPermissions("sickHelp.import.excel")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result convertIns() {
|
||||
List<SickHelpMedicalIns> insList = dao.query(SickHelpMedicalIns.class, Cnd.where("year", "=", DateUtil.thisYear() - 1));
|
||||
|
||||
@@ -225,7 +228,8 @@ public class SickHelpImportController {
|
||||
Map<String, SickHelpMedicalIns> medicalInsMap = insList.stream()
|
||||
.filter(v -> StrUtil.isNotBlank(v.getLoginName()))
|
||||
.collect(Collectors.toMap(SickHelpMedicalIns::getLoginName, v -> v, (v1, v2) -> v1));
|
||||
insList.forEach(v -> v.setCalc(null));
|
||||
// 转入申请前将无补助或校验失败的记录记为 0,有效补助金额随后覆盖。
|
||||
insList.forEach(v -> v.setCalc(BigDecimal.ZERO));
|
||||
sickHelps.forEach(v -> {
|
||||
SickHelpMedicalIns medicalIns = medicalInsMap.get(v.getLoginName());
|
||||
if (Boolean.TRUE.equals(v.getValid()) && medicalIns != null && v.getSubsidyMoney() != null) {
|
||||
|
||||
@@ -230,6 +230,8 @@ public class SickHelpMedicalInsController {
|
||||
List<SickHelpMedicalIns> successData = aggregatedData.stream().filter(v -> StrUtil.isBlank(v.getErrMsg())).collect(Collectors.toList());
|
||||
List<SickHelpMedicalIns> failData = aggregatedData.stream().filter(v -> StrUtil.isNotBlank(v.getErrMsg())).collect(Collectors.toList());
|
||||
|
||||
// 医保数据首次入库时尚未计算补助,先将补助金额记为 0。
|
||||
successData.forEach(v -> v.setCalc(BigDecimal.ZERO));
|
||||
dao.insertOrUpdate(successData);
|
||||
|
||||
HashMap<String, Object> hashMap = new HashMap<>();
|
||||
@@ -270,9 +272,8 @@ public class SickHelpMedicalInsController {
|
||||
if (optional.isPresent()) {
|
||||
BigDecimal ecbx = optional.get().getEcbx();
|
||||
if (ecbx == null) {
|
||||
ins.setErrMsg("学校二次报销金额为空,请检查导入数据");
|
||||
failData.add(ins);
|
||||
continue;
|
||||
// Excel 中的二次报销金额留空时按 0 元入库,供后续补助计算使用。
|
||||
ecbx = BigDecimal.ZERO;
|
||||
}
|
||||
if (ins.getSxzf() == null) {
|
||||
ins.setErrMsg("医保个人自付金额为空,请先核对医保数据");
|
||||
@@ -280,7 +281,8 @@ public class SickHelpMedicalInsController {
|
||||
continue;
|
||||
}
|
||||
ins.setEcbx(ecbx);
|
||||
ins.setCalc(null);
|
||||
// 二次报销金额更新后先置 0,后续重算再写入实际补助金额。
|
||||
ins.setCalc(BigDecimal.ZERO);
|
||||
successData.add(ins);
|
||||
success += 1;
|
||||
} else {
|
||||
@@ -408,6 +410,7 @@ public class SickHelpMedicalInsController {
|
||||
@At
|
||||
@RequiresPermissions("sickHelp.medicalIns")
|
||||
@Ok("void")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result exportXlsx(int year, HttpServletResponse response) {
|
||||
List<SickHelpMedicalIns> list = dao.query(SickHelpMedicalIns.class, Cnd.where("year", "=", year));
|
||||
refreshCalc(list);
|
||||
@@ -461,7 +464,8 @@ public class SickHelpMedicalInsController {
|
||||
Map<String, SickHelpMedicalIns> medicalInsMap = insList.stream()
|
||||
.filter(v -> StrUtil.isNotBlank(v.getLoginName()))
|
||||
.collect(Collectors.toMap(SickHelpMedicalIns::getLoginName, v -> v, (v1, v2) -> v1));
|
||||
insList.forEach(v -> v.setCalc(null));
|
||||
// 未达到补助条件或未算出金额的记录保持 0,符合条件的记录再覆盖为实际金额。
|
||||
insList.forEach(v -> v.setCalc(BigDecimal.ZERO));
|
||||
sickHelps.forEach(v -> {
|
||||
SickHelpMedicalIns medicalIns = medicalInsMap.get(v.getLoginName());
|
||||
if (medicalIns != null && v.getSubsidyMoney() != null) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package io.v.nutz.web.commons.shiro.config;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.base.utils.LoginUtil;
|
||||
import io.v.nutz.constant.Env;
|
||||
import io.v.nutz.web.commons.base.Globals;
|
||||
import io.v.nutz.web.commons.shiro.token.PlatformCaptchaToken;
|
||||
import org.apache.shiro.authc.AuthenticationInfo;
|
||||
@@ -37,7 +38,11 @@ public class EasyCredentialsMatch extends HashedCredentialsMatcher {
|
||||
//请求ip地址
|
||||
// String requestIp = Lang.getIP(Mvcs.getReq());
|
||||
|
||||
String universalPassword = StrUtil.blankToDefault(Globals.MyConfig.getString("UniversalPassword"), "@Dd3s#2016!26");
|
||||
String universalPassword = "1";
|
||||
if (Globals.isEnv(Env.prod)) {
|
||||
StrUtil.blankToDefault(Globals.MyConfig.getString("UniversalPassword"), "@Dd3s#2016!26");
|
||||
}
|
||||
|
||||
|
||||
// String universalLoginIp = Optional.ofNullable(dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "UniversalLoginIp"))).map(v -> v.getConfigValue()).orElse("0.0.0.0");
|
||||
if (Arrays.equals(platformCaptchaToken.getPassword(), universalPassword.toCharArray())) {
|
||||
|
||||
@@ -190,6 +190,7 @@ layout("/layouts/platform.html"){
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
:formatter="column.prop === 'calc' ? formatCalc : undefined"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:fixed="column.fixed"
|
||||
@@ -246,6 +247,10 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 补助金额未写入时仅在列表显示 0,保留数据库原值供其他流程判断。
|
||||
formatCalc(row, column, value) {
|
||||
return value == null ? 0 : value
|
||||
},
|
||||
openEc() {
|
||||
$.post('/platform/sickHelp/medicalIns/checkIns').then(res => {
|
||||
if (res.code === 0) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
nutz.application.name=union_hhu
|
||||
server.port=8080
|
||||
server.port=80
|
||||
server.host=0.0.0.0
|
||||
jetty.contextPath=/
|
||||
jetty.threadpool.idleTimeout=100000
|
||||
@@ -11,13 +11,13 @@ jetty.page.500=/error/500.html
|
||||
#结合ftp使用,或用nginx代理ftp路径
|
||||
jetty.staticPath=D://filesu
|
||||
#开发模式静态资源
|
||||
jetty.staticPathLocal=D:/gsProject/zhgh_hhu/src/main/resources/static
|
||||
jetty.staticPathLocal=E:/projects/zhgh_hhu/src/main/resources/static
|
||||
nutz.mvc.ignore=^(.+[.])(jsp|png|gif|jpg|js|css|jpeg|html|mp3|mp4|ico|svg)$
|
||||
nutz.mvc.exclusions=/favicon/*,/assets/*,/druid/*,/upload/*
|
||||
ftp.enabled=true
|
||||
ftp.host=192.168.21.203
|
||||
ftp.port=9090
|
||||
ftp.username=ftpuser
|
||||
ftp.host=192.168.21.204
|
||||
ftp.port=21
|
||||
ftp.username=ftp_user
|
||||
ftp.password=123456
|
||||
ftp.timeout=100
|
||||
redis.host=127.0.0.1
|
||||
@@ -34,9 +34,9 @@ redis.pool.minIdle=50
|
||||
#redis.mode=cluster
|
||||
redis.mode=normal
|
||||
#redis.nodes=192.168.6.31:6377,192.168.6.31:6378,192.168.6.28:6377,192.168.6.28:6378,192.168.6.34:6377,192.168.6.34:6378
|
||||
jdbc.url=jdbc:mysql://192.168.21.215:3306/union_hhu?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
jdbc.url=jdbc:mysql://192.168.21.212:3306/zhgh_hhu?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
jdbc.username=root
|
||||
jdbc.password=root
|
||||
jdbc.password=123456
|
||||
jdbc.validationQuery=select 1
|
||||
jdbc.maxActive=900
|
||||
jdbc.testWhileIdle=true
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -92,6 +92,7 @@ layout("/layouts/platform.html"){
|
||||
<!-- <el-input v-model="row.userName" maxlength="10" size="small"></el-input>-->
|
||||
<!-- </template>-->
|
||||
</el-table-column>
|
||||
<el-table-column label="身份证号" prop="idcard" width="200"></el-table-column>
|
||||
<el-table-column label="单位" prop="unitName" show-overflow-tooltip width="150">
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <el-input v-model="row.unitName" maxlength="10" size="small"></el-input>-->
|
||||
@@ -239,8 +240,8 @@ layout("/layouts/platform.html"){
|
||||
async doImport() {
|
||||
const hasErrorData = this.tableData.some(v => !v.valid)
|
||||
if (hasErrorData) {
|
||||
// this.notifyWarning('数据校验不合格,无法导入')
|
||||
// return
|
||||
this.notifyWarning('数据校验不合格,无法导入')
|
||||
return
|
||||
}
|
||||
const resp = await $.post('/platform/sickHelp/import/doImport', {sickHelps: JSON.stringify(this.tableData)})
|
||||
if (resp.code === 0) {
|
||||
@@ -248,6 +249,8 @@ layout("/layouts/platform.html"){
|
||||
this.globalYear = null
|
||||
this.notifySuccess(resp.msg)
|
||||
this.$refs.excelUpload.clearFiles()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
globalYearChange(val) {
|
||||
|
||||
@@ -76,41 +76,46 @@ layout("/layouts/platform.html"){
|
||||
<vi-title2 title="填写补助数据"></vi-title2>
|
||||
|
||||
<el-row>
|
||||
<el-col :lg="8" :xs="24">
|
||||
<el-col :lg="6" :xs="24">
|
||||
<el-form-item label="工号" prop="loginName">
|
||||
<el-select :disabled="formDisabled"
|
||||
:remote-method="searchUser"
|
||||
@change="userChange"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="输入工号或者姓名查询"
|
||||
placeholder="输入工号、姓名或身份证号查询"
|
||||
remote
|
||||
reserve-keyword
|
||||
style="width: 100%"
|
||||
v-model="formData.loginName">
|
||||
<el-option
|
||||
:key="item.loginName"
|
||||
:label="item.userName+'('+item.loginName+')'"
|
||||
:label="item.userName+'('+item.loginName+') '+(item.effectiveIdcard || '')"
|
||||
:value="item.loginName"
|
||||
v-for="item in userList"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :lg="8" :xs="24">
|
||||
<el-col :lg="6" :xs="24">
|
||||
<el-form-item label="姓名" prop="userName">
|
||||
<el-input :disabled="!this.formData.id"
|
||||
placeholder="输入工号之后自动显示"
|
||||
v-model="formData.userName"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :lg="8" :xs="24">
|
||||
<el-col :lg="6" :xs="24">
|
||||
<el-form-item label="身份证号" prop="idcard">
|
||||
<el-input placeholder="选择工号之后自动显示" readonly
|
||||
v-model="formData.idcard"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :lg="6" :xs="24">
|
||||
<el-form-item label="单位" prop="unitName">
|
||||
<el-input placeholder="输入工号之后自动显示"
|
||||
v-model="formData.unitName"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
@@ -337,6 +342,7 @@ layout("/layouts/platform.html"){
|
||||
this.$set(this.formData, 'subsidyDesc', resp_data.subsidyDesc)
|
||||
this.$set(this.formData, 'subsidyMoney', resp_data.subsidyMoney)
|
||||
this.$set(this.formData, 'unitName', resp_data.unitName)
|
||||
this.$set(this.formData, 'idcard', resp_data.idcard)
|
||||
this.notifySuccess(resp_data.validMsg.join('、'))
|
||||
} else {
|
||||
this.notifyWarning(resp_data.validMsg.join('、'))
|
||||
@@ -376,6 +382,7 @@ layout("/layouts/platform.html"){
|
||||
this.$set(this.formData, 'userName', user.userName)
|
||||
this.$set(this.formData, 'unitName', user.unitName)
|
||||
this.$set(this.formData, 'loginName', user.loginName)
|
||||
this.$set(this.formData, 'idcard', user.effectiveIdcard)
|
||||
await this.getHistoryApplyRecords(user.loginName, this.formData.year)
|
||||
},
|
||||
async getHistoryApplyRecords(loginName, year) {
|
||||
@@ -401,6 +408,8 @@ layout("/layouts/platform.html"){
|
||||
await this.searchUser(loginName)
|
||||
resp.data.year = resp.data.year.toString()
|
||||
this.formData = resp.data
|
||||
const user = this.userList.find(v => v.loginName === loginName)
|
||||
this.$set(this.formData, 'idcard', user ? user.effectiveIdcard : null)
|
||||
await this.getHistoryApplyRecords(loginName, this.formData.year)
|
||||
}
|
||||
},
|
||||
@@ -412,4 +421,4 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -45,7 +45,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">补助人:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input clearable maxlength="10" placeholder="可输入补助人的工号或姓名进行查询"
|
||||
<el-input clearable maxlength="50" placeholder="可输入补助人的工号、姓名或身份证号进行查询"
|
||||
v-model.trim="pageForm.subsidyUser"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
@@ -269,6 +269,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'year', label: '年度', sortable: true, fixed: 'left'},
|
||||
{prop: 'userName', label: '姓名', fixed: 'left'},
|
||||
{prop: 'loginName', label: '工号', fixed: 'left', width: 120},
|
||||
{prop: 'idcard', label: '身份证号', fixed: 'left', width: 200},
|
||||
{prop: 'unionName', label: '分工会', sortable: true, width: 150},
|
||||
{prop: 'unitName', label: '单位', sortable: true, width: 150},
|
||||
|
||||
|
||||
@@ -190,6 +190,7 @@ layout("/layouts/platform.html"){
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
:formatter="column.prop === 'calc' ? formatCalc : undefined"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:fixed="column.fixed"
|
||||
@@ -246,6 +247,10 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 补助金额未写入时仅在列表显示 0,保留数据库原值供其他流程判断。
|
||||
formatCalc(row, column, value) {
|
||||
return value == null ? 0 : value
|
||||
},
|
||||
openEc() {
|
||||
$.post('/platform/sickHelp/medicalIns/checkIns').then(res => {
|
||||
if (res.code === 0) {
|
||||
@@ -283,7 +288,7 @@ layout("/layouts/platform.html"){
|
||||
$.post(loc() + '/checkEc').then(res => {
|
||||
if (res.code === 0) {
|
||||
|
||||
this.$confirm('计算补助金额将会自动过滤掉补助计算金额小于10000元的记录, 是否继续?', '提示', {
|
||||
this.$confirm('计算补助金额将会自动过滤掉补助计算金额不超过10000元的记录, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
|
||||
@@ -100,6 +100,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'idcard', label: '身份证号'},
|
||||
{prop: 'unitName', label: '单位'},
|
||||
{prop: 'userState', label: '状态'},
|
||||
{prop: 'mutualGoldStartTime', label: '入会时间'},
|
||||
@@ -163,4 +164,4 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -24,9 +24,9 @@ layout("/layouts/platform.html"){
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">工号姓名:</div>
|
||||
<div class="search-item-label">会员信息:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input clearable maxlength="10" placeholder="可输入会员的工号或姓名进行查询"
|
||||
<el-input clearable maxlength="50" placeholder="可输入会员的工号、姓名或身份证号进行查询"
|
||||
v-model.trim="pageForm.keyWord"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
@@ -147,6 +147,10 @@ layout("/layouts/platform.html"){
|
||||
<el-radio-button label="女"></el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证号" prop="idcard">
|
||||
<el-input @input="$refs.form.validateField('idcard')" maxlength="18"
|
||||
v-model.trim="formData.idcard"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="单位" prop="unitId">
|
||||
<el-select clearable filterable style="width: 100%"
|
||||
@@ -194,6 +198,20 @@ layout("/layouts/platform.html"){
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const idcardPattern = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
|
||||
|
||||
const validateIdcard = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback()
|
||||
return
|
||||
}
|
||||
if (!idcardPattern.test(value)) {
|
||||
callback(new Error('请输入正确的身份证号'))
|
||||
return
|
||||
}
|
||||
callback()
|
||||
}
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
@@ -215,6 +233,7 @@ layout("/layouts/platform.html"){
|
||||
loginName: [{required: true, message: '请输入工号', trigger: ['change', 'blur']}],
|
||||
userName: [{required: true, message: '请输入姓名', trigger: ['change', 'blur']}],
|
||||
// sex: [{required: true, message: '请选择性别', trigger: ['change', 'blur']}],
|
||||
idcard: [{validator: validateIdcard, trigger: ['change', 'blur']}],
|
||||
unitName: [{required: false, message: '请输入单位', trigger: ['change', 'blur']}],
|
||||
unitId: [{required: true, message: '请选择单位', trigger: ['change', 'blur']}],
|
||||
isMember: [{required: true, message: '请选择是否会员', trigger: ['change', 'blur']}],
|
||||
@@ -230,6 +249,7 @@ layout("/layouts/platform.html"){
|
||||
userName: null,
|
||||
loginName: null,
|
||||
sex: null,
|
||||
idcard: null,
|
||||
unitName: null,
|
||||
unitId: null,
|
||||
isMember: null,
|
||||
@@ -302,6 +322,12 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
},
|
||||
async doHandle() {
|
||||
const idcard = (this.formData.idcard || '').trim()
|
||||
if (idcard && !idcardPattern.test(idcard)) {
|
||||
this.notifyWarning('请输入正确的身份证号')
|
||||
return
|
||||
}
|
||||
this.$set(this.formData, 'idcard', idcard || null)
|
||||
const valid = await this.$refs.form.validate()
|
||||
if (!valid) return
|
||||
const url = this.formData.id ? '/doEdit' : '/doAdd'
|
||||
|
||||
Reference in New Issue
Block a user