tangning 10 maanden geleden
bovenliggende
commit
b3446821cb
3 gewijzigde bestanden met toevoegingen van 265 en 79 verwijderingen
  1. 11 0
      src/api/jyUserPlatform/index.ts
  2. 248 79
      src/views/lanUser/adddetailsModal.vue
  3. 6 0
      src/views/sys/login/LoginForm.vue

+ 11 - 0
src/api/jyUserPlatform/index.ts

@@ -11,6 +11,7 @@ enum Api {
   del = '/service/manage/jyPlatform/del',
   queryByKey = '/service/manage/jyUserPlatform/queryByKey',
   jyUserPlatformadd = '/service/manage/jyUserPlatform/add',
+  addWaitUser = '/service/manage/jyUserPlatform/addWaitUser',
   yhlist = '/service/manage/jyUserPlatform/list',
   yhadd = '/service/manage/jyUserPlatform/add',
   yhupdate = '/service/manage/jyUserPlatform/update',
@@ -85,6 +86,16 @@ export const jyUserPlatformadd = (params: PageParams) =>
       ignoreCancelToken: true,
     },
   });
+export const addWaitUser = (params: PageParams) =>
+  defHttp.post<userList>({
+    url: Api.addWaitUser,
+    params: params,
+    // data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
 
 //权益详情
 export const disable = (params: PageParams) =>

+ 248 - 79
src/views/lanUser/adddetailsModal.vue

@@ -7,30 +7,39 @@
     @ok="handlestd"
   >
     <div class="BasicForms">
-      <Select
-        v-model:value="modelRef"
-        show-search
-        placeholder="请输入姓名/手机号码/身份证号码搜索"
-        style="width: 350px;     text-align: left;"
-        :default-active-first-option="false"
-        :show-arrow="false"
-        :filter-option="false"
-        not-found-content="暂无数据"
-        :options="options"
-        @search="fetchUser"
-        @change="handleChange"
-      />
-      <div class="from" v-if="active && active.name">
-        <div class="form-item">
-          <div>姓名</div>{{active.name}} </div>
-        <div class="form-item">
-          <div>手机号码</div>{{active.phone || '暂无手机号码'}} </div>
-        <div class="form-item">
-          <div>身份证</div>{{active.idCard || '暂无身份证'}} </div>
-        <div class="form-item">
-          <div>平台</div>{{active.platformName || '未分配'}} </div>
-        <div class="form-item">
-          <div>状态</div>{{active.status == null ? '未注册': active.status == 1 ? '启用': '禁用' || '未分配'}} </div>
+      <BasicForm @register="registerForm">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+        <template #selectUser="{ model, field }">
+          <Select
+            v-model:value="model[field]"
+            show-search
+            placeholder="请输入姓名/手机号码/身份证号码搜索"
+            style="width: 350px; text-align: left"
+            :default-active-first-option="false"
+            :show-arrow="false"
+            :filter-option="false"
+            not-found-content="暂无数据"
+            :options="options"
+            @search="fetchUser"
+            @change="handleChange"
+          />
+        </template>
+      </BasicForm>
+      <div v-if="addData.type == 2">
+        <div class="from" v-if="active && active.name">
+          <div class="form-item"> <div>姓名</div>{{ active.name }} </div>
+          <div class="form-item"> <div>手机号码</div>{{ active.phone || '暂无手机号码' }} </div>
+          <div class="form-item"> <div>身份证</div>{{ active.idCard || '暂无身份证' }} </div>
+          <div class="form-item"> <div>平台</div>{{ active.platformName || '未分配' }} </div>
+          <div class="form-item">
+            <div>状态</div
+            >{{
+              active.status == null ? '未注册' : active.status == 1 ? '启用' : '禁用' || '未分配'
+            }}
+          </div>
+        </div>
       </div>
     </div>
   </BasicModal>
@@ -46,7 +55,7 @@
   import { debounce } from 'lodash-es';
   import { Select } from 'ant-design-vue';
   import { jyPlatformlist, delplatformList } from '/@/api/jyUserPlatform/index'; //roleLIstApi
-  import { platformallList, jyUserPlatformadd, queryByKey } from '/@/api/jyUserPlatform/index';
+  import { addWaitUser, jyUserPlatformadd, queryByKey } from '/@/api/jyUserPlatform/index';
   const { t } = useI18n();
   export default defineComponent({
     components: { BasicModal, BasicForm, Select },
@@ -56,7 +65,12 @@
     emits: ['ok'],
     setup(_, context) {
       const modelRef = ref(undefined);
-      const active = ref({})
+      const active = ref({});
+      const addData = ref({
+        type: 1,
+        name: '',
+        idCard: '',
+      });
       const options = ref([]);
       const userStore = useUserStore();
       const userinfo = computed(() => userStore.getUserInfo);
@@ -84,57 +98,126 @@
       }, 300);
       const schemas: FormSchema[] = [
         {
+          field: 'type',
+          component: 'RadioGroup',
+          label: '添加用户类型',
+          defaultValue: 0,
+          colProps: {
+            span: 24,
+          },
+          defaultValue: 1,
+          componentProps: {
+            options: [
+              { label: '添加新用户', value: 1 },
+              { label: '搜索平台用户', value: 2 },
+            ],
+            style: { textAlign: 'left' },
+            onChange: async (e) => {
+              let value = e.target.value;
+              addData.value.type = value;
+              updateSchema(
+                [{
+                  field: 'idkey',
+                  ifShow: value == 2,
+                },
+                {
+                  field: 'name',
+                  ifShow: value == 1,
+                },
+                {
+                  field: 'idCard',
+                  ifShow: value == 1,
+                },]
+              );
+              console.log('value', addData.value);
+            },
+          },
+        },
+        {
           field: 'idkey',
           component: 'Input',
           label: '账号查询',
           required: true,
+          ifShow: false,
           colProps: {
             span: 20,
           },
+          slot: 'selectUser',
           componentProps: {
             placeholder: '请输入姓名/手机号码/身份证号码搜索',
             onChange: fetchUser,
           },
         },
         {
-          field: 'id',
-          component: 'Select',
-          label: '查询结果',
+          field: 'name',
+          component: 'Input',
+          label: '姓名',
           required: true,
-          ifShow: false,
           colProps: {
             span: 20,
           },
-          componentProps: {
-            placeholder: '请选择平台',
-            'label-in-value': true,
-            options: options.value,
-            showSearch: true,
-            onSearch: fetchUser,
-            numberToString: true,
-            labelField: 'name',
-            valueField: 'id',
-            immediate: true,
-            // onChange: handleChange,
+        },
+        {
+          field: 'idCard',
+          component: 'Input',
+          label: '身份证',
+          required: true,
+          colProps: {
+            span: 20,
           },
+          rules: [
+            {
+              required: true,
+              // @ts-ignore
+              validator: async (rule, value) => {
+                const regPos = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; // 非中文
+                if (!value) {
+                  return Promise.reject('请输入身份证');
+                }
+                if (!visitCertCodetip(value)) {
+                  /* eslint-disable-next-line */
+                  return Promise.reject('请输入正确的身份证号码');
+                }
+                return Promise.resolve();
+              },
+              trigger: 'change',
+            },
+          ],
         },
       ];
       const title = ref('添加用户');
       const { createMessage, createConfirm } = useMessage();
-      // const [registerForm, { setFieldsValue, validate, updateSchema, resetFields }] = useForm({
-      //   labelWidth: 120,
-      //   schemas,
-      //   showActionButtonGroup: false,
-      //   actionColOptions: {
-      //     span: 24,
-      //   },
-      // });
+      const [registerForm, { setFieldsValue, validate, updateSchema, resetFields }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
 
       const [register, { closeModal }] = useModalInner((data) => {
         data && onDataReceive(data);
       });
       function onDataReceive(data) {
         console.log('onDataReceive', data);
+        setFieldsValue({
+          type: 1,
+        })
+        updateSchema(
+          [{
+            field: 'idkey',
+            ifShow: false,
+          },
+          {
+            field: 'name',
+            ifShow: true,
+          },
+          {
+            field: 'idCard',
+            ifShow: true,
+          }]
+        )
         modelRef.value = undefined;
         active.value = {};
         // 方式1;
@@ -159,40 +242,124 @@
           permList: [],
         });
       }
-      function handlestd(){
-        if(!modelRef.value){
-          createMessage.warning('用户不能为空')
-          return
+      async function handlestd() {
+        let param = await validate()
+        console.log('param', param);
+        if (param.type == 1) {
+          handleAddUser();
+          return;
         }
-        if(active.value.platformId && userinfo.value.platformId == active.value.platformId){
-          createMessage.warning('该用户已存在此平台。')
-          return
+        if (active.value.platformId && userinfo.value.platformId == active.value.platformId) {
+          createMessage.warning('该用户已存在此平台。');
+          return;
         }
-        if(active.value.platformId){
+        if (active.value.platformId) {
           createConfirm({
-              title: '提示',
-              content: '该用户已属其他平台,确定为其更换平台?',
-              onOk: async () => {
-                handleOk()
-              },
-            });
-        }else{
-          handleOk()
+            title: '提示',
+            content: '该用户已属其他平台,确定为其更换平台?',
+            onOk: async () => {
+              handleOk();
+            },
+          });
+        } else {
+          handleOk();
         }
       }
       async function handleOk() {
-            let res = await jyUserPlatformadd({
-              ...active.value,
-              id: modelRef.value,
-            });
-            context && context.emit('ok', res);
-            createMessage.success(t('common.optSuccess'));
-            closeModal();
-            resetFields();
+        let param = await validate()
+        let res = await jyUserPlatformadd({
+          ...active.value,
+        });
+        context && context.emit('ok', res);
+        createMessage.success(t('common.optSuccess'));
+        closeModal();
+        resetFields();
       }
-      function handleChange(value, b ) {
+      async function handleAddUser() {
+        let param = await validate()
+        let res = await addWaitUser(param);
+        context && context.emit('ok', res);
+        createMessage.success(t('common.optSuccess'));
+        closeModal();
+        resetFields();
+      }
+      function handleChange(value, b) {
         active.value = b;
       }
+      const visitCertCodetip = (code: any) => {
+        //身份证号前两位代表区域
+        const city = {
+          11: '北京',
+          12: '天津',
+          13: '河北',
+          14: '山西',
+          15: '内蒙古',
+          21: '辽宁',
+          22: '吉林',
+          23: '黑龙江 ',
+          31: '上海',
+          32: '江苏',
+          33: '浙江',
+          34: '安徽',
+          35: '福建',
+          36: '江西',
+          37: '山东',
+          41: '河南',
+          42: '湖北 ',
+          43: '湖南',
+          44: '广东',
+          45: '广西',
+          46: '海南',
+          50: '重庆',
+          51: '四川',
+          52: '贵州',
+          53: '云南',
+          54: '西藏 ',
+          61: '陕西',
+          62: '甘肃',
+          63: '青海',
+          64: '宁夏',
+          65: '新疆',
+          71: '台湾',
+          81: '香港',
+          82: '澳门',
+          91: '国外 ',
+        };
+        //身份证格式正则表达式
+        const idCardReg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i;
+        //如果身份证不满足格式正则表达式
+        if (!code || !idCardReg.test(code)) {
+          return false;
+        }
+
+        //区域数组中不包含需验证的身份证前两位
+        else if (!city[code.substr(0, 2)]) {
+          return false;
+        } else {
+          //18位身份证需要验证最后一位校验位
+          if (code.length == 18) {
+            code = code.split('');
+            //∑(ai×Wi)(mod 11)
+            //加权因子
+            const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
+            //校验位
+            const parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
+            let sum = 0;
+            let ai = 0;
+            let wi = 0;
+            for (let i = 0; i < 17; i++) {
+              ai = code[i];
+              wi = factor[i];
+              sum += ai * wi;
+            }
+            // var last = parity[sum % 11];
+            if (parity[sum % 11] != code[17]) {
+              return false;
+            }
+          }
+        }
+        return true;
+      };
       return {
         register,
         title,
@@ -205,25 +372,27 @@
         handleChange,
         active,
         handlestd,
+        addData,
+        registerForm,
       };
     },
   });
 </script>
 <style lang="less" scoped>
-  .ant-select-selection-item{
+  .ant-select-selection-item {
     text-align: left;
   }
   .BasicForms {
     margin: 0 auto;
-    text-align: center;
+    text-align: left;
   }
-  .from{
+  .from {
     width: 350px;
     margin: 0 auto;
-    .form-item{
+    .form-item {
       display: flex;
       margin-top: 10px;
-      div{
+      div {
         width: 60px;
         min-width: 60px;
         text-align: right;

+ 6 - 0
src/views/sys/login/LoginForm.vue

@@ -52,6 +52,9 @@
       <Button size="large" class="mt-4 enter-x" block @click="handleRegister">
         {{ t('sys.login.registerButton') }}
       </Button>
+      <Button size="large" class="mt-4 enter-x" block @click="handlesybz">
+        使用帮助
+      </Button>
     </FormItem>
     <!-- <ARow class="enter-x">
       <ACol :md="8" :xs="24">
@@ -150,6 +153,9 @@
   function handleRegister() {
     window.open(registerUrl.value)
   }
+  function handlesybz() {
+    window.open('//help.map.jms.gd/forum-4.htm');
+  }
   async function handleLogin() {
     const data = await validForm();
     if (!data) return;