qingyiay
2023-06-25 b9c8410f6d5c7efa7b7b2b374adb21649dd2f886
pages/register/register.vue
@@ -1,6 +1,5 @@
<template>
   <view class="register">
      <!-- <home-species title="注册"></home-species> -->
      <view class="registerForm">
         <u--form :rules="rules" :model="registerFormModel" ref="regesterFormRef">
            <u-form-item labelWidth="20%" label="选择身份" borderBottom ref="roleRef" required>
@@ -18,49 +17,79 @@
               </u-radio-group>
            </u-form-item>
            <u-form-item prop="name" label="姓名" labelWidth="20%" borderBottom required>
               <u--input v-model="registerFormModel.name" placeholder="请输入内容"></u--input>
               <u--input v-model="registerFormModel.name" placeholder="请输入内容" clearable></u--input>
            </u-form-item>
            <u-form-item prop="idCard" label="身份证" labelWidth="20%" borderBottom required>
               <u--input v-model="registerFormModel.idCard" placeholder="请输入内容"></u--input>
               <u--input v-model="registerFormModel.idCard" placeholder="请输入内容" clearable></u--input>
            </u-form-item>
            <u-form-item prop="phone" label="手机号" labelWidth="20%" borderBottom required>
               <u--input v-model="registerFormModel.phone" placeholder="请输入内容"></u--input>
               <u--input v-model="registerFormModel.phone" placeholder="请输入内容" clearable></u--input>
            </u-form-item>
            <u-form-item prop="password" label="密码" labelWidth="20%" borderBottom required>
               <u--input v-model="registerFormModel.password" placeholder="请输入内容"></u--input>
               <u--input v-model="registerFormModel.password" placeholder="请输入内容" password clearable></u--input>
            </u-form-item>
            <u-form-item prop="confirmPassword" label="确认密码" labelWidth="20%" borderBottom required>
               <u--input v-model="registerFormModel.confirmPassword" placeholder="请输入内容" password clearable @blur="jiaoYanPassword"></u--input>
            </u-form-item>
            <u-form-item prop="carNo" label="车牌号" labelWidth="20%" borderBottom v-if="radiovalue1 == '司机'" required>
               <u--input v-model="registerFormModel.carNo" placeholder="请输入内容"></u--input>
               <u--input v-model="registerFormModel.carNo" placeholder="请输入内容" clearable></u--input>
            </u-form-item>
            <u-form-item prop="carPhoto" label="车辆照片" labelWidth="20%" borderBottom v-if="radiovalue1 == '司机'" required>
               <u-upload :fileList="fileList6" @afterRead="afterRead" @delete="deletePic" name="6" multiple :maxCount="1" width="250" height="150">
            <u-form-item prop="carImg" label="车辆照片" labelWidth="20%" borderBottom v-if="radiovalue1 == '司机'" required @click="beforeRead">
               <u-upload
                  :fileList="fileList1"
                  deletable
                  @afterRead="afterRead"
                  @delete="deletePic"
                  name="1"
                  multiple
                  :maxCount="1"
                  width="250"
                  height="150"
                  :previewFullImage="true"
               >
                  <!-- <image src="https://cdn.uviewui.com/uview/demo/upload/positive.png"
                  mode="widthFix" style="width: 250px;height: 150px;"></image> -->
               </u-upload>
            </u-form-item>
            <u-form-item prop="drivingLicense" label="行驶证" labelWidth="20%" borderBottom v-if="radiovalue1 == '司机'" required>
               <u-upload :fileList="fileList5" @afterRead="afterRead" @delete="deletePic" name="5" multiple :maxCount="1" width="250" height="150">
            <u-form-item prop="drivingImg" label="行驶证" labelWidth="20%" borderBottom v-if="radiovalue1 == '司机'" required @click="beforeRead">
               <u-upload
                  :fileList="fileList2"
                  deletable
                  @afterRead="afterRead"
                  @delete="deletePic"
                  name="2"
                  multiple
                  :maxCount="1"
                  width="250"
                  height="150"
                  :previewFullImage="true"
               >
                  <!-- <image src="https://cdn.uviewui.com/uview/demo/upload/positive.png"
                  mode="widthFix" style="width: 250px;height: 150px;"></image> -->
               </u-upload>
            </u-form-item>
            <u-form-item label="推荐人账号" labelWidth="25%" borderBottom ><u--input v-model="registerFormModel.tuiJianMa" placeholder="请输入内容"></u--input></u-form-item>
            <u-form-item label="推荐人账号" labelWidth="25%" borderBottom>
               <u--input v-model="registerFormModel.tuiJianMa" placeholder="请输入内容" clearable></u--input>
            </u-form-item>
         </u--form>
      </view>
      <view class="roleModel">
         <u-modal :show="editRoleModelShow" :title="title" :content="content" :showCancelButton="true" @confirm="roleConfirm" @cancel="roleCancel"></u-modal>
      </view>
      <view class="registerBtn"><u-button text="注册" type="primary" @click="registerClick"></u-button></view>
      <!-- <view class="utils">
         <text @click="callingIn">打电话</text>
      <!-- 图片预览弹出框 -->
      <!-- <view class="previewImage-container">
         <u-popup :show="previewImageShow" mode="center" @close="previewImageClose" @open="previewImageOpen">
            <u--image :src="previewImageSrc != null ? BaseUrl + previewImageSrc : ''" width="400px" height="400px"></u--image>
         </u-popup>
      </view> -->
   </view>
</template>
<script>
// import HomeSpecies from '@/components/home-species/HomeSpecies.vue';
import { apiRegister } from '@/api/publicInterface.js';
import { BaseUrl } from '@/api/publicInterface.js';
import { mapMutations } from 'vuex';
export default {
   // onLoad: function() {
   //   // 查看是否授权
@@ -77,12 +106,9 @@
   //     }
   //   })
   // },
   components: {
      // HomeSpecies
   },
   // 监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
   onReady() {
      // this.$refs.regesterFormRef.setRules(this.rules);
      this.$refs.regesterFormRef.setRules(this.rules);
      // this.$refs.regesterFormRef.validate().then(res => {}).catch(err => {
      //   console.log(err);
      // })
@@ -95,19 +121,25 @@
   },
   data() {
      return {
         // 车牌号键盘控制
         carNumShow: false,
         keyValue: '',
         registerFormModel: {
            phone: '',
            password: '',
            name: '',
            username:'',
            username: '',
            openId: '',
            type: 2,
            idCard: '',
            carNo: '',
            carImg: '',
            drivingImg: '',
            tuiJianMa: ''
            tuiJianMa: '',
            confirmPassword: ''
         },
         fileList1: [],
         fileList2: [],
         rules: {
            name: {
               type: 'string',
@@ -115,16 +147,22 @@
               message: '请填写姓名',
               trigger: ['blur', 'change']
            },
            idCard: {
               type: 'string',
               required: true,
               message: '请输入身份证号',
               trigger: ['blur', 'change']
            },
            idCard: [
               {
                  type: 'string',
                  required: true,
                  message: '请输入身份证号',
                  trigger: ['blur', 'change']
               },
               {
                  pattern: /^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
                  message: '身份证号格式不正确'
               }
            ],
            phone: [
               {
                  required: true,
                  message: '此为必填字段',
                  message: '此项为必填项',
                  // blur和change事件触发检验
                  trigger: ['blur', 'change']
               },
@@ -132,6 +170,13 @@
                  min: 11,
                  max: 11,
                  message: '请输入合法手机号'
               },
               {
                  validator: (rule, value, callback) => {
                     return uni.$u.test.mobile(value);
                  },
                  message: '手机号码不正确',
                  trigger: ['change', 'blur']
               }
            ],
            password: [
@@ -142,8 +187,20 @@
               },
               {
                  min: 6,
                  max: 8,
                  message: '长度在6-8个字符之间'
                  max: 12,
                  message: '长度在6-12个字符之间'
               }
            ],
            confirmPassword: [
               {
                  required: true,
                  message: '请设置初始密码',
                  trigger: ['blur', 'change']
               },
               {
                  min: 6,
                  max: 12,
                  message: '长度在6-12个字符之间'
               }
            ],
            carNo: [
@@ -152,20 +209,30 @@
                  required: true,
                  message: '请输入车牌号',
                  trigger: ['blur', 'change']
               },
               {
                  transform(value) {
                     return String(value);
                  },
                  validator: (rule, value, callback) => {
                     return uni.$u.test.carNo(value);
                  },
                  message: '请输入正确的车牌号',
                  trigger: ['change', 'blur']
               }
            ],
            // carPhoto: {
            //    type: 'string',
            //    required: true,
            //    message: '请上传车辆图片',
            //    trigger: ['blur', 'change']
            // },
            // drivingLicense: {
            //    type: 'string',
            //    required: true,
            //    message: '请上传行驶证照片',
            //    trigger: ['blur', 'change']
            // }
            carImg: {
               type: 'string',
               required: true,
               message: '请上传车辆图片',
               trigger: ['blur', 'change']
            },
            drivingImg: {
               type: 'string',
               required: true,
               message: '请上传行驶证照片',
               trigger: ['blur', 'change']
            }
         },
         // 基本案列数据
         radiolist1: [
@@ -181,8 +248,6 @@
         // u-radio-group的v-model绑定的值如果设置为某个radio的name,就会被默认选中
         radiovalue1: '货代',
         beforeChangeValue: '',
         fileList5: [],
         fileList6: [],
         // 更换角色弹框
         editRoleModelShow: false,
         title: '提示',
@@ -214,49 +279,44 @@
      }
   },
   methods: {
      ...mapMutations(['changeisUploadimg']),
      registerClick() {
         this.$refs.regesterFormRef
            .validate()
            .then(res => {
               console.log(this.registerFormModel);
               this.registerFormModel.username = this.registerFormModel.name
               apiRegister(this.registerFormModel)
                  .then(res => {
                     console.log(res);
                     if (res.data.code == 0) {
                        uni.showToast({
                           title: '注册成功,即将进入登录!',
                           icon: 'none',
                           duration: 1000
                        });
                        setTimeout(() => {
                           uni.redirectTo({ url: '/pages/login/login' });
                        }, 1000);
                     } else {
                        this.$u.toast(res.data.msg)
                     }
                  })
                  .catch(err => {
                     console.log('错误', err);
                  });
            })
            .catch(err => {
               console.log('err', err);
               uni.$u.toast('效验失败');
            });
         if (this.registerFormModel.password == this.registerFormModel.confirmPassword) {
            this.$refs.regesterFormRef
               .validate()
               .then(res => {
                  console.log(this.registerFormModel);
                  this.registerFormModel.username = this.registerFormModel.phone;
                  apiRegister(this.registerFormModel)
                     .then(res => {
                        if (res.data.code == 0) {
                           uni.showToast({
                              title: '注册成功,即将返回登录页',
                              icon: 'none',
                              duration: 1000
                           });
                           setTimeout(() => {
                              uni.redirectTo({ url: '/pages/login/login' });
                           }, 1000);
                        } else {
                           this.$u.toast(res.msg ? res.msg : '添加失败');
                        }
                     })
                     .catch(err => {
                        console.log('错误', err);
                     });
               })
               .catch(err => {
                  console.log('err', err);
                  this.$u.toast('请规范输入内容');
               });
         } else {
            this.$u.toast('两次密码不一致');
         }
      },
      // 音视频通话
      // callingIn() {
      //    uni.navigateTo({
      //       url: '/pages/calling-index/calling-index'
      //    });
      // },
      // 单选框事件
      groupChange(e) {
         console.log('单选框小组', e);
      },
      groupChange(e) {},
      radioChange(e) {
         console.log('单选框', e);
         if (
            this.registerFormModel.name == '' &&
            this.registerFormModel.idCard == '' &&
@@ -264,19 +324,26 @@
            this.registerFormModel.carNo == '' &&
            this.registerFormModel.password == ''
         ) {
            console.log('变了');
            this.$refs.regesterFormRef.clearValidate();
            this.beforeChangeValue = e;
         }
      },
      jiaoYanPassword() {
         if (this.registerFormModel.password != this.registerFormModel.confirmPassword) {
            this.$u.toast('两次密码不一致');
         }
      },
      // 上传图片方法
      beforeRead() {
         this.changeisUploadimg(true);
      },
      // 删除图片
      deletePic(event) {
         this.changeisUploadimg(true);
         this[`fileList${event.name}`].splice(event.index, 1);
      },
      // 新增图片
      async afterRead(event) {
         console.log('event', event);
         // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
         let lists = [].concat(event.file);
         let fileListLen = this[`fileList${event.name}`].length;
@@ -288,33 +355,37 @@
            });
         });
         for (let i = 0; i < lists.length; i++) {
            const result = await this.uploadFilePromise(lists[i].url);
            const result = await this.uploadFilePromise(lists[i].url, event.name);
            let item = this[`fileList${event.name}`][fileListLen];
            this[`fileList${event.name}`].splice(
               fileListLen,
               1,
               Object.assign(item, {
                  status: 'success',
                  message: '',
                  message: '上传成功',
                  url: result
               })
            );
            fileListLen++;
         }
      },
      uploadFilePromise(url) {
      uploadFilePromise(url, num) {
         return new Promise((resolve, reject) => {
            let a = uni.uploadFile({
               url: 'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址
               url: BaseUrl + '/admin/sys-file/uploadUnToken',
               filePath: url,
               name: 'file',
               formData: {
                  user: 'test'
                  // user: ''
               },
               success: res => {
                  setTimeout(() => {
                     resolve(res.data.data);
                  }, 1000);
                  if (num == 1) {
                     this.registerFormModel.carImg = JSON.parse(res.data).data.url;
                     resolve(`${BaseUrl}${JSON.parse(res.data).data.url}`);
                  } else if (num == 2) {
                     this.registerFormModel.drivingImg = JSON.parse(res.data).data.url;
                     resolve(`${BaseUrl}${JSON.parse(res.data).data.url}`);
                  }
               }
            });
         });
@@ -331,7 +402,6 @@
          * @resetFields 不管用时候用上边的代替
          */
         this.$refs.regesterFormRef.resetFields();
         this.editRoleModelShow = false;
      },
      roleCancel() {
@@ -339,17 +409,6 @@
         this.$nextTick(() => {
            this.editRoleModelShow = false;
         });
         // switch (this.radiovalue1) {
         //    case '客户':
         //       this.radiovalue1 = '';
         //       break;
         //    case '货代':
         //       this.radiovalue1 = '司机';
         //       break;
         //    case '司机':
         //       this.radiovalue1 = '货代';
         //       break;
         // }
      }
   }
};