snow 1 år sedan
förälder
incheckning
d94c2cb34b
5 ändrade filer med 231 tillägg och 28 borttagningar
  1. 0 0
      dist/app.js
  2. 1 1
      dist/runtime.js
  3. 171 0
      src/components/binding copy/index.vue
  4. 58 22
      src/components/binding/index.vue
  5. 1 5
      src/pages/wechat.vue

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/app.js


+ 1 - 1
dist/runtime.js

@@ -113,7 +113,7 @@
 /******/
 /******/ 	var hotApplyOnUpdate = true;
 /******/ 	// eslint-disable-next-line no-unused-vars
-/******/ 	var hotCurrentHash = "361563c6cfd751477ec6";
+/******/ 	var hotCurrentHash = "f814f2b43376f8be0765";
 /******/ 	var hotRequestTimeout = 10000;
 /******/ 	var hotCurrentModuleData = {};
 /******/ 	var hotCurrentChildModule;

+ 171 - 0
src/components/binding copy/index.vue

@@ -0,0 +1,171 @@
+<template>
+  <div class="binding-container">
+    <el-alert title="您的微信号未绑定过系统,请先绑定一个账号" :closable="false" type="warning" center show-icon />
+    <el-form label-width="80px" size="mini" style="margin-top:10px" ref="formRef" :model="formData" :rules="rules">
+      <el-form-item label="用户名:" prop="id">
+        <el-select
+          remote 
+          style="width:100%" 
+          v-model="formData.id" 
+          :loading="ol" 
+          :filterable="true" 
+          :remote-method="requestUserList"
+          @change="handleChange"
+          >
+          <!-- Number(item.is_wx) === 1 || -->
+          <el-option 
+            v-for="item in accounts" 
+            :key="item.value" 
+            :value="item.value" 
+            :disabled="Number(item.status) === 0"
+            :label="item.label">
+            <span style="float: left;">{{item.label}}</span>
+            <span v-if="Number(item.is_wx) === 1 || Number(item.status) === 0" style="float: right;color:#F56C6C">{{Number(item.is_wx) === 1 ? '已绑定' : '已禁用'}}</span>
+          </el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="手机号:" prop="phone">
+        <el-input :disabled="true" v-model="formData.phone" placeholder="手机号" />
+      </el-form-item>
+
+      <el-form-item label-width="140px" label="验证手机号后四位:" prop="lastCode">
+        <el-input :disabled="!formData.id" placeholder="手机号后四位" maxlength="4" v-model="formData.lastCode" @input="handleLastValue" />
+      </el-form-item>
+
+      <el-form-item style="display: flex;justify-content: flex-end;">
+        <!-- <el-button type="primary" @click="submit">绑定</el-button> -->
+        <wx-open-subscribe 
+          :template="template"
+          id="subscribe-btn" 
+          @success="handleSuccess" 
+          @error="handleError" 
+        >
+        <script type="text/wxtag-template">
+          <button>绑 定</button>
+        </script>
+      </wx-open-subscribe>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import asyncRequest from "@/api"
+export default {
+  props: ["openid","template"],
+  data() {
+    const validate_num = (rule, value, callback) => {
+      if (!value) {
+        callback(new Error('请输入手机号后四位'))
+      } else if(value.length !== 4){
+        callback(new Error('输入号码不足四位'))
+      }else {
+        callback()
+      }
+    }
+
+    return {
+      visible:false,
+      template:"",
+      ol:false,
+      maxHeight: null,
+      loading_wx:true,
+      loading: false,
+      currentAccount: {},
+      formData: {
+        id: "",
+        phone: "",
+        lastCode: ""
+      },
+      rules:{
+        id:[{required:true,trigger:'change',message:'请选择用户'}],
+        phone:[{required:true,trigger:'change',message:'请输入手机号'}],
+        lastCode:[{required:true,trigger:'change',validator:validate_num}],
+      }
+    }
+  },
+  created() {
+    document.title = "绑定采销账号"
+  },
+  beforeDestory() {
+    document.title = ""
+  },
+  methods: {
+    handleSuccess(res){
+        this.submit();
+    },
+    handleError(){
+      this.$message.warning("订阅失败,请重试!")
+    },
+    handleLastValue(value){
+      this.formData.lastCode = value.replace(/[^\d]/g,'');
+      let { lastCode = "", phone } = this.formData
+      let phoneLastCode = []
+      for(let i = 0;i < 4;i ++){ phoneLastCode[i] = lastCode[i] || "*" }
+      const phonePreCode = phone.slice(0, 7) 
+      console.log(phonePreCode)
+      this.formData.phone= phonePreCode + phoneLastCode.join("");
+    },
+    handleChange(value) {
+      const item = this.accounts.find(({ value: oV }) => oV === value)
+
+      this.formData = {
+        id: item.value,
+        phone: item.mobile,
+        lastCode: ""
+      }
+    },
+    async submit(){
+      try{
+        await this.$refs.formRef.validate();
+        const { id,lastCode } = this.formData;
+        this.loading = true
+        const result = await asyncRequest.bindwx({ id, lastCode, openId:this.openid })
+        this.loading = false;
+        if(result.code === 0){
+          this.$emit("bind",result.data.token);
+        }else{
+          this.$message.error(result.message)
+        }
+
+      }catch(err){
+        console.log(err)
+      }
+    },
+    async requestUserList(qs) {
+      this.ol = true
+      const result = await asyncRequest.accountQuery({ openId: this.openid, nickname: qs })
+      this.ol = false;
+
+      const { code, data } = result;
+      if (code === 0) {
+        const { list } = data;
+        this.accounts = list.map(({ id, nickname, mobile,is_wx,status }) => ({
+          value: id,
+          label: nickname,
+          mobile,
+          is_wx,
+          status
+        }))
+
+      } else {
+        this.accounts = []
+      }
+    },
+  }
+}
+</script>
+
+
+<style lang="scss" scoped>
+.binding-container {
+  display: flex;
+  flex-direction: column;
+  align-items:center;
+  /deep/.el-form {
+    width:95%;
+    max-width:500px;
+  }
+}
+</style>

+ 58 - 22
src/components/binding/index.vue

@@ -2,7 +2,7 @@
   <div class="binding-container">
     <el-alert title="您的微信号未绑定过系统,请先绑定一个账号" :closable="false" type="warning" center show-icon />
     <el-form label-width="80px" size="mini" style="margin-top:10px" ref="formRef" :model="formData" :rules="rules">
-      <el-form-item label="用户名:" prop="id">
+      <!-- <el-form-item label="用户名:" prop="id">
         <el-select
           remote 
           style="width:100%" 
@@ -12,7 +12,6 @@
           :remote-method="requestUserList"
           @change="handleChange"
           >
-          <!-- Number(item.is_wx) === 1 || -->
           <el-option 
             v-for="item in accounts" 
             :key="item.value" 
@@ -23,15 +22,22 @@
             <span v-if="Number(item.is_wx) === 1 || Number(item.status) === 0" style="float: right;color:#F56C6C">{{Number(item.is_wx) === 1 ? '已绑定' : '已禁用'}}</span>
           </el-option>
         </el-select>
+      </el-form-item> -->
+
+      <!-- {"openid":"oOpc26KiZFBKIm7SB8knFGvov1qg","username":"17531816886","password":"lxh971219"} -->
+
+      <el-form-item label="账号:" prop="username">
+        <el-input v-model="formData.username" placeholder="账号" />
       </el-form-item>
 
-      <el-form-item label="手机号:" prop="phone">
-        <el-input :disabled="true" v-model="formData.phone" placeholder="手机号" />
+
+      <el-form-item label="密码:" prop="password">
+        <el-input v-model="formData.password" placeholder="密码" />
       </el-form-item>
 
-      <el-form-item label-width="140px" label="验证手机号后四位:" prop="lastCode">
+      <!-- <el-form-item label-width="140px" label="验证手机号后四位:" prop="lastCode">
         <el-input :disabled="!formData.id" placeholder="手机号后四位" maxlength="4" v-model="formData.lastCode" @input="handleLastValue" />
-      </el-form-item>
+      </el-form-item> -->
 
       <el-form-item style="display: flex;justify-content: flex-end;">
         <!-- <el-button type="primary" @click="submit">绑定</el-button> -->
@@ -42,7 +48,18 @@
           @error="handleError" 
         >
         <script type="text/wxtag-template">
-          <button>绑 定</button>
+          <style>
+            .sub-btn{
+              border:none;
+              background:#409EFF;
+              color:#fff;
+              padding:5px 10px;
+              border-radius:8px;
+            }
+          </style>
+        </script>
+        <script type="text/wxtag-template">
+          <button class="sub-btn">登 录</button>
         </script>
       </wx-open-subscribe>
       </el-form-item>
@@ -52,16 +69,37 @@
 
 <script>
 import asyncRequest from "@/api"
+import { isnumber, isAlphanumeric, validAlphabets, isMobile } from '@/utils/validate'
 export default {
   props: ["openid","template"],
   data() {
-    const validate_num = (rule, value, callback) => {
-      if (!value) {
-        callback(new Error('请输入手机号后四位'))
-      } else if(value.length !== 4){
-        callback(new Error('输入号码不足四位'))
-      }else {
-        callback()
+
+    const validateUsername = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('手机号不能为空!'))
+      } else {
+        if (!isMobile(value)) {
+          callback(new Error('请输入正确的手机号'))
+        } else {
+          callback()
+        }
+      }
+    }
+    const validatePassword = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('密码不能为空!'))
+      } else {
+        if (!isAlphanumeric(value)) {
+          callback(new Error('密码为6-18位数字字母组合!'))
+        } else if (value.length < 6 || value.length > 18) {
+          callback(new Error('密码为6-18位数字字母组合!'))
+        } else if (isnumber(value)) {
+          callback(new Error('密码不能为纯数字!'))
+        } else if (validAlphabets(value)) {
+          callback(new Error('密码不能为纯字母!'))
+        } else {
+          callback()
+        }
       }
     }
 
@@ -74,14 +112,12 @@ export default {
       loading: false,
       currentAccount: {},
       formData: {
-        id: "",
-        phone: "",
-        lastCode: ""
+        username: "",
+        password: ""
       },
       rules:{
-        id:[{required:true,trigger:'change',message:'请选择用户'}],
-        phone:[{required:true,trigger:'change',message:'请输入手机号'}],
-        lastCode:[{required:true,trigger:'change',validator:validate_num}],
+        username:[{required:true,trigger:'change',validator:validateUsername}],
+        password:[{required:true,trigger:'change',validator:validatePassword}],
       }
     }
   },
@@ -119,9 +155,9 @@ export default {
     async submit(){
       try{
         await this.$refs.formRef.validate();
-        const { id,lastCode } = this.formData;
+        const { username,password } = this.formData;
         this.loading = true
-        const result = await asyncRequest.bindwx({ id, lastCode, openId:this.openid })
+        const result = await asyncRequest.login({ password, username, openId:this.openid })
         this.loading = false;
         if(result.code === 0){
           this.$emit("bind",result.data.token);

+ 1 - 5
src/pages/wechat.vue

@@ -62,7 +62,7 @@ export default {
       wx.config({
         appId:appid,
         timestamp,
-        nonceStr:noncestr,
+        nonceStr: noncestr,
         signature,
         jsApiList:['chooseImage'],
         openTagList:['wx-open-subscribe']
@@ -88,14 +88,10 @@ export default {
       const { wxinfo, isLogin, userinfo } = (result.data || {})
       this.isBound = Number(isLogin) === 1;
       this.openid = wxinfo.openid;
-
-      console.log(wxinfo,'000')
-
       if (!this.isBound) return;
       this.jumpToSystem(userinfo.token)
     },
     jumpToSystem(token = "") {
-      // this.getTemplate();
       const encJson = CryptoJS.AES.encrypt(JSON.stringify({ token }), "key123")
       const encData = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(encJson))
       window.location.href = this.back + "/#/accept/?t=" + encData

Vissa filer visades inte eftersom för många filer har ändrats