| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- <template>
- <view class="container">
- <wd-form ref="form" :model="formValue">
- <wd-cell-group border>
- <wd-input
- v-model="formValue.username"
- label="中文姓名"
- label-width="100px"
- prop="username"
- clearable
- placeholder="请输入姓名"
- :rules="[{ required: false, validator: validatorName, message: '请输入姓名' }]"
- />
- <wd-input
- v-model="formValue.sfzh"
- label="身份证"
- label-width="100px"
- prop="sfzh"
- clearable
- placeholder="请输入身份证件号码"
- :rules="[
- {
- required: false,
- validator: validatorNum,
- message: '请输入身份证件号码'
- }
- ]"
- />
- <wd-input
- v-model="formValue.mobile"
- label="手机号"
- label-width="100px"
- prop="mobile"
- clearable
- placeholder="请输入手机号码"
- :rules="[
- {
- required: false,
- validator: validatorPhone,
- message: '请输入手机号码'
- }
- ]"
- />
- <wd-input
- v-model="formValue.cardNumber"
- label="学号"
- label-width="100px"
- prop="mobile"
- class="custom-input"
- clearable
- placeholder=""
- />
- <!-- 模拟右侧占位符的文本 -->
- <text class="placeholder-text" v-if="!formValue.cardNumber">(填学号,便于发放校补)</text>
- </wd-cell-group>
- <view class="footer">
- <wd-button type="primary" size="large" block @click="handleSubmit">保存</wd-button>
- </view>
- </wd-form>
- </view>
- </template>
- <script setup>
- import { onLoad } from '@dcloudio/uni-app'
- import { ref } from 'vue'
- import { myRequest } from '@/utils/api.ts'
- console.log(uni.getStorageSync('carUserInfo').id,'新增')
- // 表格绑定数据
- const formValue = ref({
- uid: uni.getStorageSync('carUserInfo').id ,
- username: '',
- sfzh: '',
- mobile: '',
- cardNumber:''
- })
- // 表格DOM
- const form = ref(null)
- onLoad((options) => {
- if (options.info) {
- uni.setNavigationBarTitle({
- title: '修改乘客信息'
- })
- formValue.value = JSON.parse(decodeURIComponent(options.info))
- } else {
- uni.setNavigationBarTitle({
- title: '添加乘客信息'
- })
- }
- })
- // 保存按钮回调
- function handleSubmit() {
- form.value
- .validate()
- .then(({ valid, errors }) => {
- if (valid) {
- if (formValue.value.id) {
- // 修改请求
- submitEditReq()
- } else {
- // 新增请求
- submitAddReq()
- }
- }
- })
- .catch((error) => {
- console.log(error, 'error')
- })
- }
- // 新增请求
- const submitAddReq = async () => {
- const res = await myRequest({
- url: '/ctUserinsert.action',
- method: 'post',
- data: formValue.value,
- })
- // console.log(res)
- if (res.code == 200) {
- uni.showToast({
- title: res.message,
- icon: 'success'
- })
- setTimeout(() => {
- uni.reLaunch({
- url: '/pages/commonPeople/commonPeople'
- })
- }, 1500)
- }
- }
- // 修改请求
- const submitEditReq = async () => {
- const res = await myRequest({
- url: '/ctUserupdate.action',
- method: 'post',
- data: formValue.value
- })
- // console.log(res)
- if (res.code == 200) {
- uni.showToast({
- title: res.message,
- icon: 'success'
- })
- setTimeout(() => {
- uni.reLaunch({
- url: '/pages/commonPeople/commonPeople'
- })
- }, 1500)
- }
- }
- // 姓名验证规则
- const validatorName = (val) => {
- const result = val.replace(/\s+/g, '')
- if (result) {
- if (result.length > 1 && result.length < 5) {
- return Promise.resolve()
- } else {
- return Promise.reject('姓名为2-4个字符')
- }
- }
- }
- // 身份证号码验证规则
- const validatorNum = (val) => {
- if (val) {
- // 去除空格
- const cleanedId = val.replace(/\s+/g, '')
- // 基本格式校验:18位,前17位数字,最后一位可以是数字或X
- const idReg = /(^\d{18}$)|(^\d{17}(\d|X|x)$)/
- if (!idReg.test(cleanedId)) {
- return Promise.reject('请输入有效的18位身份证号码')
- }
- // 校验码验证
- // 加权因子
- const factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
- // 校验码对应值
- const parityBits = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
- let sum = 0
- const code = cleanedId.toUpperCase() // 转为大写
- // 计算前17位与对应因子乘积的和
- for (let i = 0; i < 17; i++) {
- sum += parseInt(code.charAt(i)) * factors[i]
- }
- // 计算校验码
- const checkCode = parityBits[sum % 11]
- // 验证校验码
- if (code.charAt(17) !== checkCode) {
- return Promise.reject('身份证号码校验无效')
- }
- // 验证出生日期
- const year = parseInt(code.substr(6, 4))
- const month = parseInt(code.substr(10, 2))
- const day = parseInt(code.substr(12, 2))
- const birthDate = new Date(year, month - 1, day)
- if (birthDate.getFullYear() !== year || birthDate.getMonth() + 1 !== month || birthDate.getDate() !== day) {
- return Promise.reject('身份证号码中的出生日期无效')
- }
- return Promise.resolve()
- }
- }
- // 时间号码验证规则
- const validatorPhone = (val) => {
- const phoneReg = /^1[3-9]\d{9}$/
- if (val) {
- if (phoneReg.test(val)) {
- return Promise.resolve()
- } else {
- return Promise.reject('手机号码格式错误')
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .container {
- box-sizing: border-box;
- padding: 20rpx 0;
- height: 100vh;
- background-color: #fff;
-
- .custom-input {
- width: 100%;
- height: 80rpx;
- line-height: 80rpx;
- padding-right: 200rpx; /* 给右侧占位文本留空间 */
- border: 1px solid #eee;
- border-radius: 8rpx;
- font-size: 28rpx;
- }
-
- .placeholder-text {
- position: absolute; /* 绝对定位到输入框右侧 */
- right: 30rpx;
- margin-top: -9%;
- font-size: 26rpx;
- color: #999; /* 模拟原生placeholder颜色 */
- pointer-events: none; /* 避免遮挡输入框点击 */
- }
- .footer {
- position: absolute;
- left: 40rpx;
- right: 40rpx;
- bottom: 100rpx;
- :deep(.wd-button) {
- background-color: #ff8205;
- }
- }
- }
- </style>
|