diff --git a/.env.development b/.env.development index 1b230d8..cd182d8 100644 --- a/.env.development +++ b/.env.development @@ -9,9 +9,9 @@ VITE_APP_ENV='development' # 开发环境 VITE_APP_BASE_API='/dev-api' # # 开发环境 接口代理地址 -VITE_APP_PROXY_API='http://192.168.1.222:8080' +#VITE_APP_PROXY_API='http://192.168.1.222:8080' # 开发环境 接口代理地址 -#VITE_APP_PROXY_API='http://192.168.1.6:8080' +VITE_APP_PROXY_API='http://192.168.1.6:8080' # 图片基础地址 VITE_IMG_URL='http://192.168.1.222:8080' @@ -24,7 +24,7 @@ VITE_APP_MONITOR_ADMIN='http://192.168.1.215/admin/applications' # SnailJob 控制台地址 VITE_APP_SNAILJOB_ADMIN='http://192.168.1.215/snail-job' -VITE_APP_PORT=5173 +VITE_APP_PORT=5174 # 登录成功跳转地址 # VITE_LOGIN_BACK_URL = '/equipment/WaterDevice' diff --git a/src/api/system/Personnel/index.ts b/src/api/system/Personnel/index.ts index 5196e4e..421a309 100644 --- a/src/api/system/Personnel/index.ts +++ b/src/api/system/Personnel/index.ts @@ -39,7 +39,7 @@ export const get_movein_user_type = (query?: { 'tenantRate': string; 'relatives': string; 'relativeRate': string; - 'other': string; + 'otherType': string; 'otherRate': string; 'totalResident': string; }> => { diff --git a/src/api/system/SdbCashier/index.ts b/src/api/system/SdbCashier/index.ts index 580a138..33b8c3c 100644 --- a/src/api/system/SdbCashier/index.ts +++ b/src/api/system/SdbCashier/index.ts @@ -42,6 +42,7 @@ export type billlistType = { 'endDate': string; 'money': string; 'payStatus': string; + 'remark': string; amount: string; residentName: string; }; diff --git a/src/api/system/houseRental/index.ts b/src/api/system/houseRental/index.ts index c9089f3..eb3b83c 100644 --- a/src/api/system/houseRental/index.ts +++ b/src/api/system/houseRental/index.ts @@ -87,3 +87,27 @@ export const getHouseOwnUser = (houseId: string): AxiosPromise => { + return request({ + url: `/houseRental/changeStatus/${houseId}`, + method: 'PUT', + }); +}; + +/** + * 房屋租赁管理 签约 + * @param data + */ +export const HouseRedientSign = (data: HouseRentalForm): AxiosPromise => { + return request({ + url: `/houseRental/sign`, + method: 'POST', + data: data + }); +}; diff --git a/src/api/system/houseRental/type.ts b/src/api/system/houseRental/type.ts index 30f7dba..518a3cc 100644 --- a/src/api/system/houseRental/type.ts +++ b/src/api/system/houseRental/type.ts @@ -2,7 +2,7 @@ export interface HouseRentalVO { /** * id 房屋租赁表id */ - id: string | number; + id: string; /** * 租户姓名 @@ -72,7 +72,7 @@ export interface HouseRentalVO { /** * 房屋id */ - houseId: number; + houseId: string; /** * 房屋用途 */ @@ -88,83 +88,74 @@ export interface HouseRentalVO { pubTime: string; houseImageUrls: string[]; facilitieslist: string[]; + signingList?: HouseRentalSigningVO[]; } export interface HouseRentalForm extends BaseEntity { /** - * id 房屋租赁表id + * 收费模式 */ - id?: string | number; - + chargeMode: string; /** - * 租户姓名 + * 收费标准 */ - rentalName?: string; - + chargeStandard: string; /** - * 租金 单位元 + * 合同编号 */ - rent?: number; - + contractNo: string; /** - * 0 整租 1 合租 + * 合同状态 */ - rentalType?: string; - - /** - * 房屋朝向 - */ - houseFace?: string; - - /** - * 房屋面积 - */ - houseArea?: number; - - /** - * 楼层号 - */ - floorNo?: number; - - /** - * 入住时间 - */ - inTime?: string; - - /** - * 房屋设施(“,”隔开) - */ - facilities?: string; - - /** - * 房屋照片url( "," 隔开) - */ - houseImageUrl?: string; - - /** - * 补充租房信息 - */ - supInfo?: string; - - /** - * 手机号 - */ - phone?: number; - - /** - * 微信 - */ - vx?: string; - - /** - * 邮箱 - */ - email?: string; - + contractStatus: string; /** * 房屋id */ - houseId?: string | number; + houseId?: string; + /** + * 租赁结束时间 + */ + leaseEndDate: string; + /** + * 租赁起始时间 + */ + leaseStartDate: string; + /** + * 备注 + */ + remark?: string; + /** + * 房屋租赁ID + */ + rentalId: string; + /** + * 承租方姓名 + */ + tenantName: string; + /** + * 承租方联系电话 + */ + tenantPhone: string; + /** + * 小区id + */ + villageId?: string; +} +export interface HouseRentalSigningVO { + 'id': string; + 'rentalId': string; + 'contractNo': string; + 'tenantName': string; + 'tenantPhone': string; + 'chargeMode': string; + 'chargeStandard': string; + 'contractStatus': string; + 'leaseStartDate': string; + 'leaseEndDate': string; + 'houseId': string; + 'villageId': string; + 'remark': string; + 'createTime': string; } export interface HouseRentalQuery extends PageQuery { diff --git a/src/api/system/residentReviewProcess/resident/type.ts b/src/api/system/residentReviewProcess/resident/type.ts index b52ae86..b3454f5 100644 --- a/src/api/system/residentReviewProcess/resident/type.ts +++ b/src/api/system/residentReviewProcess/resident/type.ts @@ -77,6 +77,10 @@ export interface ResidentVO { } export interface ResidentForm extends BaseEntity { + /** + * 年龄 + */ + age?: number; /** * 主键 住户管理id */ @@ -163,17 +167,24 @@ export interface ResidentQuery extends PageQuery { * 日期范围参数 */ date?: any; - /** - * 0业主 - * 1亲属 - * 2租户 - * 3朋友 + * 房屋名称 + */ + houseName?: string; + /** + * 姓名 + */ + name?: string; + /** + * 0 业主 + * 1 亲属 + * 2 租户 + * 3 朋友 */ ownerRelationship?: string; /** * 住户状态 - * 0审核中 1 已认证 + * 0 审核中 1 已认证 */ status?: string; diff --git a/src/utils/Reg.ts b/src/utils/Reg.ts index 1fad5f8..a51619f 100644 --- a/src/utils/Reg.ts +++ b/src/utils/Reg.ts @@ -1,40 +1,3 @@ -/** - * 验证身份证号码(18位,支持尾号x/X) - * @param idCard 身份证号 - * @return {boolean} true 符合 false 不符合 - */ -export function validateIdCard(idCard: string): boolean { - // 18位身份证正则 - const reg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/; - return reg.test(idCard.trim()); -} -/** - * 验证车牌号 - * @param val 兼容新能源 + 普通车牌 - * @return {boolean} true 符合 false 不符合 - */ -export function isPlateNumber(val: string): boolean { - const reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/; - return reg.test(val); -} -/** - * 验证金钱 - * @return {boolean} true 符合 false 不符合 - * @param value - */ -export function isMoney(value: number): boolean { - const reg = /^(0|[1-9]\d*)(\.\d{1,2})?$/; - return reg.test(String(value).trim()); -} -/** - * 验证姓名 - * @param {string} val - * @return {boolean} true 符合 false 不符合 - */ -export function isChineseName(val: string): boolean { - return /^[\u4e00-\u9fa5·]{2,16}$/.test(String(val).trim()); -} - const reg = { /** 金钱 */ money: /^(0|[1-9]\d*)(\.\d{1,2})?$/, @@ -43,7 +6,11 @@ const reg = { /** 车牌 */ PlateNumber: /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/, /** 姓名 */ - ChineseName: /^[\u4e00-\u9fa5·]{2,16}$/, + ChineseName: /^[\u4e00-\u9fa5]{1,16}$/, + /** 字符 除了颜文字,emoji表情 */ + Character: /^[a-zA-Z0-9_\u4e00-\u9fa5-]+$/, + /** 联系方式 */ + contact: /^[a-zA-Z0-9_\u4e00-\u9fa5-@.]+$/, /** 手机号 */ phone: /^1[3-9]\d{9}$/, /** 邮箱 */ @@ -55,7 +22,14 @@ const reg = { /** 护照 */ passport: /^[EG]\d{8}$/, /** 港澳通行证 */ - hongkongPassport: /^[CHMW]\d{8}$/ + hongkongPassport: /^[CHMW]\d{8}$/, + /** 年龄 */ + age: /^[0-9]\d{0,2}$/, + /** 数字 */ + number: /^[0-9]+$/, + // 完整版:所有emoji+肤色修饰+组合连接符+全部颜文字符号 + fullFilterReg: + /[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F1E0}-\u{1F1FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}\u{FE00}-\u{FE0F}\u{1F900}-\u{1F9FF}\u{1F3FB}-\u{1F3FF}\u{200D}。「」、・~ー『』「」・ヽヾゝゞ〆゛゜○●△▲□■◇◆◎▽▼┐┌└┘╮╭╰╯┬┴┼│─╱╲╳︵︶︹︺︿﹀︽︾﹁﹂﹃﹄ァ-ヺヽヾ]/gu }; // 自动推导 TS 类型(最标准) export type RegType = keyof typeof reg; @@ -68,149 +42,3 @@ export type RegType = keyof typeof reg; export function validator(value: string | number, regType: RegType): boolean { return reg[regType].test(String(value)); } - -/** - * 车牌验证工具类 - * 支持传统燃油、新能源、军警、武警、使馆、临时、港澳、挂车等全量车牌 - */ -export class LicensePlateValidator { - /** - * 省份简称正则片段 - */ - private static readonly PROVINCE = '[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]'; - - /** - * 验证传统燃油车牌 (蓝牌/黄牌) - * 格式: 省份 + 字母 + 5位字符 (数字或字母,排除I,O) - * 示例: 京A·12345, 粤B·88888 - * 总长7位 - */ - static isTraditionalPlate(plate: string): boolean { - const reg = new RegExp(`^${this.PROVINCE}[A-HJ-NP-Z][A-HJ-NP-Z0-9]{5}$`); - if (!reg.test(plate.toUpperCase())) return false; - return true; - } - - /** - * 验证新能源车牌 (绿牌) - * 规则:除了标识位 D/F 外,其余序号位必须为数字 (0-9) - * 小型: 省份 + 字母 + D/F + 5位数字 或 省份 + 字母 + 5位数字 + D/F - * 大型: 省份 + 字母 + 5位数字 + D/F - * 总长8位 - */ - static isNewEnergyPlate(plate: string): boolean { - // 修正:非D/F位仅限数字 - // 1. [省份][A-HJ-NP-Z][D-F][0-9]{5} (D/F在序号第1位,后跟5位数字) - // 2. [省份][A-HJ-NP-Z][0-9]{5}[D-F] (D/F在序号最后1位,前跟5位数字) - const reg = new RegExp(`^${this.PROVINCE}[A-HJ-NP-Z](?:[D-F][0-9]{5}|[0-9]{5}[D-F])$`); - return reg.test(plate.toUpperCase()); - } - - /** - * 验证警车车牌 - * 格式: 省份 + 字母 + 4位数字 + 警 - * 总长7位 - */ - static isPolicePlate(plate: string): boolean { - const reg = new RegExp(`^${this.PROVINCE}[A-HJ-NP-Z][0-9]{4}警$`); - return reg.test(plate.toUpperCase()); - } - - /** - * 验证教练车牌 - * 格式: 省份 + 字母 + 4位数字 + 学 - * 总长7位 - */ - static isCoachPlate(plate: string): boolean { - const reg = new RegExp(`^${this.PROVINCE}[A-HJ-NP-Z][0-9]{4}学$`); - return reg.test(plate.toUpperCase()); - } - - /** - * 验证挂车车牌 - * 格式: 省份 + 字母 + 4位数字 + 挂 - * 总长7位 - */ - static isTrailerPlate(plate: string): boolean { - const reg = new RegExp(`^${this.PROVINCE}[A-HJ-NP-Z][0-9]{4}挂$`); - return reg.test(plate.toUpperCase()); - } - - /** - * 验证武警车牌 (2013式) - * 格式: WJ + 省份/部门简称 + 5位字符 - * 总长8位 (WJ+1+5) - */ - static isArmedPolicePlate(plate: string): boolean { - const reg = /^WJ(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]|[A-HJ-NP-Z])[0-9A-HJ-NP-Z]{5}$/; - return reg.test(plate.toUpperCase()); - } - - /** - * 验证军队车牌 (2012式) - * 格式: 军种字母 + 字母/数字 + 5位字符 - * 总长7位 - */ - static isMilitaryPlate(plate: string): boolean { - const reg = /^[VKBHSLJNGCMPEOA][A-HJ-NP-Z0-9][0-9A-HJ-NP-Z]{4}$/; - return reg.test(plate.toUpperCase()); - } - - /** - * 验证使馆/领馆车牌 - * 格式: 使/领 + 6位数字 - * 总长7位 - */ - static isEmbassyPlate(plate: string): boolean { - const reg = /^[使领][0-9]{6}$/; - return reg.test(plate); - } - - /** - * 验证港澳入出境车 (粤Z牌) - * 格式: 粤Z + 4位字符 + 港/澳 - * 总长7位 - */ - static isHKMacauPlate(plate: string): boolean { - const reg = /^粤Z[A-HJ-NP-Z0-9]{4}[港澳]$/; - return reg.test(plate.toUpperCase()); - } - - /** - * 验证临时车牌 - * 格式: 省份 + 字母 + 5位字符 + 临 / 超 - * 总长8位 - */ - static isTemporaryPlate(plate: string): boolean { - const reg = new RegExp(`^${this.PROVINCE}[A-HJ-NP-Z][0-9A-HJ-NP-Z]{5}[临超]$`); - return reg.test(plate.toUpperCase()); - } - - /** - * 验证所有合法车牌(全量) - * @param plate 车牌号码 - */ - static isValidPlate(plate: string): boolean { - if (!plate || typeof plate !== 'string') return false; - - const upperPlate = plate.toUpperCase().replace(/[·\s-]/g, ''); // 去除分隔符和空格 - - // 长度预检查:车牌只能是 7 位或 8 位 - if (upperPlate.length !== 7 && upperPlate.length !== 8) { - return false; - } - - return ( - this.isTraditionalPlate(upperPlate) || - this.isNewEnergyPlate(upperPlate) || - this.isPolicePlate(upperPlate) || - this.isCoachPlate(upperPlate) || - this.isTrailerPlate(upperPlate) || - this.isArmedPolicePlate(upperPlate) || - this.isMilitaryPlate(upperPlate) || - this.isEmbassyPlate(upperPlate) || - this.isHKMacauPlate(upperPlate) || - this.isTemporaryPlate(upperPlate) - ); - } -} diff --git a/src/utils/request.ts b/src/utils/request.ts index 99d4c79..5c77612 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -43,7 +43,8 @@ const whiteVillageId = [ '/payRecordList/payRecordList/list', '/warehouse', '/notification/read', // 已读 - '/cash/billList' + '/cash/billList', + '/houseRental/changeStatus' // '/building/list' ]; diff --git a/src/views/system/Activity/addActivity.vue b/src/views/system/Activity/addActivity.vue index 6668ea3..f117b9b 100644 --- a/src/views/system/Activity/addActivity.vue +++ b/src/views/system/Activity/addActivity.vue @@ -56,8 +56,8 @@ @@ -115,6 +115,7 @@ :on-exceed="handleExceed" :before-upload="handleBeforeUpload" :on-error="handleError" + accept=".png,.jpg,.jpeg,.bmp" :limit="1" > 活动封面 @@ -225,6 +226,7 @@ import { addActivity, getActivity, updateActivity } from '@/api/system/Activity' import { genFileId, UploadInstance, UploadProps, UploadRawFile } from 'element-plus'; import AMapLoader from '@amap/amap-jsapi-loader'; import { Plus } from '@element-plus/icons-vue'; +import { validator } from '@/utils/Reg'; const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/activity/uploadImage'; @@ -278,13 +280,34 @@ const form = ref({ }); const rules = { title: [{ required: true, message: '请输入活动标题', trigger: 'blur' }], - author: [{ required: true, message: '请输入作者', trigger: 'blur' }], + author: [ + { required: true, message: '请输入作者', trigger: 'blur' }, + { + validator: (_: any, value: string | number) => validator(value, 'Character'), + message: '请输入中文,字母,数字,-,_等字符', + trigger: 'blur' + } + ], applyDeadline: [{ required: true, message: '请输入报名截止日期', trigger: 'blur' }], startTime: [{ required: true, message: '请选择开始日期', trigger: 'blur' }], endTime: [{ required: true, message: '请选择结束日期', trigger: 'blur' }], address: [{ required: true, message: '请输入活动地点', trigger: 'blur' }], - organizer: [{ required: true, message: '请输入主办方', trigger: 'blur' }], - contactName: [{ required: true, message: '请输入联系人', trigger: 'blur' }], + organizer: [ + { required: true, message: '请输入主办方', trigger: 'blur' }, + { + validator: (_: any, value: string | number) => validator(value, 'Character'), + message: '请输入中文,字母,数字,-,_等字符', + trigger: 'blur' + } + ], + contactName: [ + { required: true, message: '请输入联系人', trigger: 'blur' }, + { + validator: (_: any, value: string | number) => validator(value, 'Character'), + message: '请输入中文,字母,数字,-,_等字符', + trigger: 'blur' + } + ], contactPhone: [{ required: true, message: '请输入联系方式', trigger: 'blur' }], coverImage: [{ required: true, message: '请上传活动封面', trigger: 'blur' }], content: [{ required: true, message: '请输入内容', trigger: 'blur' }] @@ -301,10 +324,11 @@ const activityTime = ref([]); const upload = ref(); // 上传成功 const handleAvatarSuccess: UploadProps['onSuccess'] = (response) => { + console.log(response); if (response.data && response.data.url) { form.value.coverImage = response.data.url; } else { - ElMessage.warning('上传频繁,请稍后再试'); + ElMessage.warning(response.msg); } }; @@ -320,7 +344,7 @@ const handleExceed: UploadProps['onExceed'] = (files) => { const handleError: UploadProps['onError'] = (error: Error) => { console.log(error); }; -const allowImgSuffix = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'heic']; +const allowImgSuffix = ['jpg', 'jpeg', 'png', 'gif', 'bmp']; /** 检测文件大小和格式 */ const handleBeforeUpload: UploadProps['beforeUpload'] = (rawFile: UploadRawFile) => { if (!allowImgSuffix.includes(rawFile.name.split('.')[1])) { @@ -342,7 +366,7 @@ let geocoder: any = null; const mapReady = ref(false); let mouseTool = null; -// 0 开始 1编辑 2结束 +// 0 开始 1 编辑 2结束 const isDraw = ref(0); onMounted(() => { diff --git a/src/views/system/Decoration/addDecoration.vue b/src/views/system/Decoration/addDecoration.vue index 2d5a2b4..cab8e5a 100644 --- a/src/views/system/Decoration/addDecoration.vue +++ b/src/views/system/Decoration/addDecoration.vue @@ -80,6 +80,17 @@ const form = ref({ const rules = { houseId: [{ required: true, message: '请选择具体房屋', trigger: 'blur' }], applyName: [{ required: true, message: '请输入申请人', trigger: 'blur' }], + decorationCompany: [ + { required: true, message: '请输入装修公司名称', trigger: 'blur' }, + { + validator: (_: any, value: string | number, callback: any) => { + if (value === '' || value === '') { + return callback(); + } + return !validator(value, 'fullFilterReg') ? callback() : callback(new Error('请输入正确的装修公司名称')); + } + } + ], decorationDeposit: [ { required: true, message: '请输入装修押金', trigger: 'blur' }, { @@ -103,7 +114,17 @@ const rules = { trigger: ['blur', 'change'] } ], - decorationContent: [{ required: true, message: '请输入装修内容', trigger: 'blur' }] + decorationContent: [ + { required: true, message: '请输入装修内容', trigger: 'blur' }, + { + validator: (_: any, value: string | number, callback: any) => { + if (value === '' || value === '') { + return callback(); + } + return !validator(value, 'fullFilterReg') ? callback() : callback(new Error('请输入正确的装修内容')); + } + } + ] }; const userid = ref(); diff --git a/src/views/system/HandleLog/addHandleLog.vue b/src/views/system/HandleLog/addHandleLog.vue index 839be7f..0cd5cdd 100644 --- a/src/views/system/HandleLog/addHandleLog.vue +++ b/src/views/system/HandleLog/addHandleLog.vue @@ -112,7 +112,8 @@ import { addHandleLog, getHandleLog, updateHandleLog, uploadAttachments } from ' import { UploadFiles, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'; import { useUserStore } from '@/store/modules/user'; import { ElMessage } from 'element-plus'; -import { Upload } from '@element-plus/icons-vue'; // 确保引入图标组件╬╬╬ +import { Upload } from '@element-plus/icons-vue'; +import { validator } from '@/utils/Reg'; // 确保引入图标组件 const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/handleLog/uploadAttachments'; const route = useRoute(); @@ -129,7 +130,25 @@ const form = ref({ }); const rules = { content: [{ required: true, message: '请输入办事内容', trigger: 'blur' }], - seekName: [{ required: true, message: '请选择求助人', trigger: 'blur' }] + seekName: [ + { required: true, message: '请选择求助人', trigger: 'blur' }, + { + validator: (_: any, value: string | number) => validator(value, 'Character'), + message: '请输入中文,字母,数字,-,_等字符', + trigger: 'blur' + } + ], + phone: [ + { required: false, message: '请输入联系方式', trigger: 'blur' }, + { + validator: (_: any, value: string | number, callback: any) => { + if (value === '' || value === '') { + return callback(); + } + return !validator(value, 'fullFilterReg') ? callback() : callback(new Error('请输入正确的联系方式')); + } + } + ] }; const userid = ref(); diff --git a/src/views/system/MonthCard/addMonthCard.vue b/src/views/system/MonthCard/addMonthCard.vue index 8cf896a..aa48948 100644 --- a/src/views/system/MonthCard/addMonthCard.vue +++ b/src/views/system/MonthCard/addMonthCard.vue @@ -99,7 +99,6 @@ import PageHeader from '@/components/Pageheader/index.vue'; import { addMonthCard, getMonthCard, updateMonthCard } from '@/api/system/MonthCard'; import { validator } from '@/utils/Reg'; import { LicensePlateValidator2 } from '@/utils/Reg2'; -import { callback } from '@/api/login'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { com_pay_method } = toRefs(proxy?.useDict('com_pay_method')); @@ -126,7 +125,14 @@ function handleDate() { form.value.endTime = checkDate.value[1]; } const rules = ref({ - cardCode: [{ required: true, message: '请输入月卡编号', trigger: 'blur' }], + cardCode: [ + { required: true, message: '请输入月卡编号', trigger: 'blur' }, + { + validator: (_: any, value: string | number) => validator(value, 'Character'), + message: '请输入中文,字母,数字,-,_等字符', + trigger: 'blur' + } + ], cardName: [ { required: true, message: '请输入姓名', trigger: 'blur' }, { diff --git a/src/views/system/Sdb/PayRecord/add.vue b/src/views/system/Sdb/PayRecord/add.vue index 85645c7..a5502b1 100644 --- a/src/views/system/Sdb/PayRecord/add.vue +++ b/src/views/system/Sdb/PayRecord/add.vue @@ -23,6 +23,7 @@ - + @@ -30,7 +30,7 @@
- + @@ -159,7 +162,7 @@ + + +