From 4a800a8fc83c6bd1f86a8e847b079a51a7532c09 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期三, 20 七月 2022 15:05:58 +0800 Subject: [PATCH] 修复国标配置的bug --- src/pages/desktop/index/components/Desktop.vue | 665 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 618 insertions(+), 47 deletions(-) diff --git a/src/pages/desktop/index/components/Desktop.vue b/src/pages/desktop/index/components/Desktop.vue index 5e42597..a0737fb 100644 --- a/src/pages/desktop/index/components/Desktop.vue +++ b/src/pages/desktop/index/components/Desktop.vue @@ -11,48 +11,133 @@ ></safari> <div class="warn-tag" v-if="showFreeVersion"> - <span class="text" - >璇曠敤鐗堝皻鏈縺娲伙紝浠呮敮鎸侀儴鍒嗗姛鑳戒娇鐢紝濡傞渶浣跨敤鍏ㄩ儴鍔熻兘锛岃灏藉揩婵�娲荤郴缁熴��</span + <span v-if="!snExpire" class="text" + >{{ + versionName + }}灏氭湭婵�娲伙紝浠呮敮鎸佷娇鐢ㄩ儴鍒嗗姛鑳斤紝濡傞渶浣跨敤鍏ㄩ儴鍔熻兘锛岃灏藉揩婵�娲汇��</span > - <span class="go-to" @click="gotoActive">鍓嶅線婵�娲�</span> - <span class="icon iconfont" @click="showFreeVersion = false" - ></span - > + <span v-else class="text">SmartAIOS 璇曠敤鏈熷凡鍒版湡锛岃鎮ㄥ敖蹇縺娲荤郴缁�</span> + <div> + <span class="go-to" @click="gotoActive">鍓嶅線婵�娲�</span> + <span + class="icon iconfont" + v-if="!snExpire" + @click="showFreeVersion = false" + ></span + > + </div> </div> <el-dialog title="婵�娲籗martAI" - :visible.sync="dialogVisible" - width="750px" + :visible.sync="activeDialog" + width="640px" + custom-class="my-activate" :show-close="false" :close-on-click-modal="false" :close-on-press-escape="false" > - <div class="ver"><span class="ver-text">鐗堟湰锛�</span>{{ version }}</div> + <el-dialog + width="30%" + title="璐︽埛婵�娲�" + custom-class="my-account" + :visible.sync="innerVisible" + append-to-body + class="inner-login-dialog" + > + <div class="info"> + <span style="font-size: 14px; line-height: 21px; color: #5f5f5f"> + 璇疯緭鍏ヤ綘鍦⊿martAI鍟嗗煄璐︽埛鐨勬墜鏈哄彿骞跺畬鎴愰獙璇佺爜鏍¢獙锛屽疄鐜扮郴缁熸縺娲伙紒 + </span> + </div> + <div class="login-content"> + <el-form + :model="phone" + :rules="phoneCodeRule" + :validate-on-rule-change="false" + ref="phoneLogin" + class="demo-ruleForm" + > + <el-form-item prop="phoneNum" style="margin-top: 20px"> + <el-input v-model="phone.phoneNum" placeholder="璇疯緭鍏ユ墜鏈哄彿"> + <i slot="prefix" class="el-icon-mobile-phone"></i> + </el-input> + </el-form-item> + <el-form-item prop="verifyCode"> + <el-input + @keyup.enter.native="phoneLogin" + v-model="phone.verifyCode" + autocomplete="off" + placeholder="璇疯緭鍏ラ獙璇佺爜" + > + <i slot="prefix" class="el-icon-message"></i> + <el-button + class="code-btn" + slot="suffix" + style="margin-left: 15px" + :disabled="codeDisabled" + @click="getCode" + >{{ codeMsg }}</el-button + > + </el-input> + </el-form-item> + </el-form> + </div> + <span slot="footer" class="dialog-footer"> + <div class="btns"> + <el-button class="cancel" @click="cancelLogin">鍙栨秷</el-button> + <el-button class="ok" type="primary" @click="loginShop" + >纭畾</el-button + > + </div> + </span> + </el-dialog> <div class="ver"> - <span class="ver-text">鐘舵�侊細</span>{{ versionState }} + <span class="ver-text">鐗堟湰锛�</span>SmartAI{{ versionName }} </div> + <div class="ver"><span class="ver-text">鐘舵�侊細</span>灏氭湭婵�娲�</div> <el-divider></el-divider> - <div class="info"> - 濡傛灉杩樻病鏈変骇鍝佸瘑閽ワ紝浣犲彲浠ヤ娇鐢ㄦ墜鏈烘壂鐮佹垨鍓嶅線姝ら摼鎺� - <a href="http://apps.smartai.com" target="_blank" - >http://apps.smartai.com</a - > - 璐拱銆� + <div class="info" v-if="versionName == '姝e紡鐗�'"> + <span style="font-weight: bold; font-size: 18px">路 </span> + <span style="font-size: 14px; line-height: 21px; color: #5f5f5f"> + 濡傛灉鎮ㄥ凡杩炴帴鍒癐nternet骞朵笖宸茶喘涔颁骇鍝佸瘑閽ワ紝鍙互灏濊瘯楠岃瘉SmartAI鍟嗗煄璐︽埛婵�娲荤郴缁熴�� + </span> + <div style="padding: 15px 0"> + <el-button type="primary" @click="innerVisible = true"> + 璐︽埛婵�娲� + </el-button> + </div> + </div> + <div class="info" v-if="versionName == '姝e紡鐗�'"> + <span style="font-weight: bold; font-size: 18px">路 </span> + <span style="font-size: 14px; line-height: 21px; color: #5f5f5f"> + 濡傛灉鎮ㄦ湭杩炴帴Internet鎴栨縺娲诲け璐ワ紝鍙皾璇曠绾挎縺娲伙紝璇风敤鎵嬫満鎵爜璐拱浜у搧鎴栭獙璇丼martAI鍟嗗煄璐︽埛婵�娲荤郴缁熴�� + </span> + </div> + <div class="info" v-if="versionName !== '姝e紡鐗�'"> + <span style="font-weight: bold; font-size: 18px">路 </span> + <span style="font-size: 14px; line-height: 21px; color: #5f5f5f"> + 濡傛灉杩樻病鏈変骇鍝佸瘑閽ワ紝浣犲彲浠ヤ娇鐢ㄦ墜鏈烘壂鐮佹垨鍓嶅線姝ら摼鎺� + <a href="http://apps.smartai.com" target="_blank" + >http://apps.smartai.com</a + > + 璐拱銆� + </span> </div> <img class="qr-code-img" src="/version/offline/qrcode" /> - <el-divider></el-divider> - <div class="ask"> - 濡傛灉浣犲叿鏈塖martAI鎻愪緵鐨勪骇鍝佸瘑閽ワ紝璇峰湪姝ゅ杈撳叆婵�娲籗martAI銆� + <span style="font-weight: bold; font-size: 18px">路 </span> + <span style="font-size: 14px; line-height: 21px; color: #5f5f5f"> + 濡傛灉鎮ㄦ湁SmartAI鎻愪緵鐨勪骇鍝佸瘑閽ワ紝璇峰湪姝ゅ杈撳叆锛屾縺娲籗martAI銆� + </span> </div> <div class="validate"> <form id="myForm"> <el-input type="textarea" autosize - style="width: 480px" - placeholder="灏嗕骇鍝佸瘑閽ョ矘璐村湪姝ゅ" + style="width: 450px" + placeholder="璇疯緭鍏ユ垨瀵煎叆瀵嗛挜" v-model="secrectKey" > </el-input> @@ -65,13 +150,89 @@ :limit="1" :show-file-list="false" > - <el-button size="small" type="primary">瀵煎叆浜у搧瀵嗛挜鏂囦欢</el-button> + <el-button size="small" type="primary">瀵煎叆瀵嗛挜</el-button> </el-upload> </div> + <!-- <el-divider></el-divider> --> <span slot="footer" class="dialog-footer"> - <el-button @click="dialogVisible = false">缁х画璇曠敤</el-button> - <el-button type="primary" @click="activateVersion">婵�娲�</el-button> + <div class="btns"> + <el-button + v-if="!snExpire && versionName != '姝e紡鐗�'" + class="cancel" + @click="activeDialog = false" + >缁х画璇曠敤</el-button + > + <el-button + class="cancel" + v-if="snExpire && versionName != '姝e紡鐗�'" + @click="$emit('quit')" + >閫�鍑虹櫥闄� + </el-button> + <el-button class="ok" type="primary" @click="activateVersion" + >婵�娲�</el-button + > + </div> + </span> + </el-dialog> + + <el-dialog + title="鎴戠殑璁㈠崟" + :visible.sync="innerDialog" + width="750px" + :show-close="true" + :close-on-click-modal="false" + :close-on-press-escape="false" + custom-class="my-order" + > + <div class="tip"> + <i class="el-icon-info"></i> + <span>璇锋鏌ヨ鍗曚俊鎭槸鍚︽纭紝纭鏃犺鍚庡啀婵�娲荤郴缁�</span> + </div> + + <div class="order-list" v-if="orderList.length"> + <div + class="wrap" + style="margin: 0 5px" + v-for="(item, index) in orderList" + :key="index" + > + <div class="order-card" v-for="(prod, i) in item.products" :key="i"> + <div class="head"> + <el-checkbox v-model="checked" @change="choseProd(item, prod)"> + <span>璁㈠崟ID锛歿{ item.id }}</span> + </el-checkbox> + + <span>{{ item.orderMoney }} 鍏�</span> + </div> + <div class="desc"> + <div>璁㈠崟鐢熸垚鏃ユ湡锛歿{ item.createTime }}</div> + <div>浜у搧鍚嶇О锛歿{ prod.productName }}</div> + <div>浜у搧绫诲瀷锛歿{ prod.productTypeName }}</div> + <div>绯荤粺鐗堟湰锛歿{ prod.edition }}</div> + <div>閫氶亾鏁伴噺锛歿{ prod.ChCount }}</div> + <div>鎺堟潈鏁伴噺锛歿{ prod.authCount }}</div> + <div> + 璧锋鏈嶅姟鏃堕棿 锛歿{ + startAndEnd(item.createTime, prod.serveYear) + }} + </div> + </div> + </div> + </div> + </div> + <div class="no-order-list" v-else> + {{ + loadingOrders ? "璁㈠崟鍔犺浇涓紝璇风◢鍚�..." : "鎶辨瓑锛屾湭鏌ヨ鍒拌鍗曚俊鎭紒" + }} + </div> + <span slot="footer" class="dialog-footer"> + <div class="btns"> + <el-button class="cancel" @click="$emit('quit')">閫�鍑虹櫥褰�</el-button> + <el-button class="ok" type="primary" @click="activeVerByOrd" + >婵�娲�</el-button + > + </div> </span> </el-dialog> </div> @@ -80,11 +241,16 @@ <script> import DFrame from "./DFrame"; import Safari from "./Safari"; +import { isPhone } from "../../../../scripts/validate.ts"; import { getActiveQrCode, getSN, activateVersion, uploadKey, + getSmsCode, + loginShopInSmart, + getShopOrderList, + activeByOrder, } from "@/api/system"; export default { name: "Desktop", @@ -95,20 +261,159 @@ data() { return { showFreeVersion: false, - dialogVisible: false, - version: "SmartAI璇曠敤鐗�", - versionState: "灏氭湭婵�娲�", + activeDialog: false, + countdown: 60, + innerDialog: false, + versionName: "", + codeMsg: "鑾峰彇楠岃瘉鐮�", secrectKey: "", + curOrder: {}, + curProd: {}, + codeDisabled: false, + innerVisible: false, + snExpire: false, + timer: null, + token: "", + loadingOrders: true, + orderList: [], + phone: { + phoneNum: "", + verifyCode: "", + }, + phoneCodeRule: { + phoneNum: [{ validator: isPhone, trigger: "blur" }], + verifyCode: [ + { required: true, message: "璇疯緭鍏ラ獙璇佺爜", trigger: "blur" }, + ], + }, }; }, - mounted() { + created() { this.validateSn(); }, methods: { + startAndEnd(createTime, serveYear) { + let year = createTime.split("-")[0]; + let endTime = parseInt(year) + serveYear + createTime.slice(4); + return createTime + " - " + endTime; + }, + activeVerByOrd() { + activeByOrder({ + token: this.token, + activateCode: this.curProd.activateCode, + productId: this.curProd.productId, + orderId: this.curOrder.id, + }).then((res) => { + if (res.code == 200) { + this.$notify.success("婵�娲绘垚鍔�"); + this.innerDialog = false; + this.versionName = this.getVersionName(res.data.edition); + } else { + this.$notify.error("婵�娲诲け璐�"); + } + }); + }, validateSn() { getSN().then((res) => { - this.showFreeVersion = res.data.sn == ""; + this.snExpire = res.data.expire; + this.activeDialog = res.data.expire; + this.showFreeVersion = res.data.sn == "" || res.data.expire; + this.versionName = this.getVersionName(res.data.edition); }); + }, + getValidStr() { + if (this.countdown > 0 && this.countdown <= 60) { + this.countdown--; + if (this.countdown !== 0) { + this.codeMsg = "閲嶆柊鍙戦��(" + this.countdown + ")"; + } else { + clearInterval(this.timer); + this.codeMsg = "鑾峰彇楠岃瘉鐮�"; + this.countdown = 60; + this.timer = null; + this.codeDisabled = false; + } + } + }, + choseProd(order, prod) { + this.curOrder = order; + this.curProd = prod; + }, + getVersionName(s) { + switch (s) { + case "alpha": + return "鍐呮祴鐗�"; + case "beta": + return "鍏祴鐗�"; + case "trial": + return "璇曠敤鐗�"; + case "test": + return "娴嬭瘯鐗�"; + case "official": + return "姝e紡鐗�"; + default: + return "瀹氬埗鐗�"; + break; + } + }, + loginShop() { + this.$refs["phoneLogin"].validate((valid) => { + if (valid) { + let param = { + phoneNum: this.phone.phoneNum, + verifyCode: this.phone.verifyCode, + }; + loginShopInSmart(param).then((res) => { + this.innerDialog = true; + this.activeDialog = false; + + this.token = res.data.access_token; + getShopOrderList({ token: this.token }) + .then((res) => { + if (res.code == 200) { + this.orderList = res.data.list; + this.loadingOrders = false; + } else { + this.$notify.error("鑾峰彇璁㈠崟鍒楄〃澶辫触"); + } + }) + .catch(() => { + this.$notify.error("鑾峰彇璁㈠崟鍒楄〃澶辫触"); + }); + }); + } else { + this.nullRule = {}; + } + }); + }, + cancelLogin() { + this.innerVisible = false; + }, + getCode() { + var pattern = /^1[345789]\d{9}$/; + if (this.phone.phoneNum == "") { + this.$refs["phoneLogin"].fields[0].validateMessage = "璇疯緭鍏ユ墜鏈哄彿"; + this.$refs["phoneLogin"].fields[0].validateState = "error"; + return; + } + if (!pattern.test(this.phone.phoneNum)) { + this.$refs["phoneLogin"].fields[0].validateMessage = "鎵嬫満鍙风爜鏍煎紡鏈夎"; + this.$refs["phoneLogin"].fields[0].validateState = "error"; + return; + } + if (!this.timer) { + this.codeDisabled = true; + this.getValidStr(); + this.timer = setInterval(this.getValidStr, 1000); + getSmsCode({ phoneNum: this.phone.phoneNum }) + .then((res) => { + this.gotCode = true; + }) + .catch((err) => { + this.$refs["phoneLogin"].fields[0].validateMessage = err.data.msg; + this.$refs["phoneLogin"].fields[0].validateState = "error"; + }); + } }, activateVersion() { if (this.secrectKey.trim() == "") { @@ -121,7 +426,7 @@ this.$notify.success("婵�娲绘垚鍔�"); this.validateSn(); this.goToSysInfo(); - this.dialogVisible = false; + this.activeDialog = false; } else { this.$notify.error(res.msg); } @@ -134,10 +439,9 @@ window.parent.postMessage({ msg: `toVindicate?menu=绯荤粺淇℃伅` }, "*"); }, gotoActive() { - this.dialogVisible = true; + this.activeDialog = true; }, uploadKey(params) { - debugger; let param = new FormData(); param.append("code", params.file); uploadKey(param).then( @@ -171,13 +475,19 @@ width: 100%; height: 100%; .el-dialog__header { - padding: 15px 20px 10px; - text-align: left; - font-weight: 600; + padding: 14px 20px 13px; + text-align: center; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.08); + .el-dialog__title { + font-weight: 600; + font-size: 18px; + color: #5f5f5f; + line-height: 25px; + } } .el-dialog__body { text-align: left; - padding: 30px 50px; + padding: 30px; padding-top: 20px; } .el-divider--horizontal { @@ -187,11 +497,29 @@ display: flex; align-items: baseline; margin-top: 15px; + .upload-demo { + .el-button--small { + font-size: 14px; + border-radius: 3px; + border-radius: 16px; + background-color: var(--colorCard) !important; + border-color: var(--colorCard) !important; + min-width: 120px; + } + } } #myForm { display: flex; align-items: center; margin-right: 10px; + .el-textarea__inner { + min-height: 32px; + height: 32px; + border: 1px solid #d4d6d9; + box-sizing: border-box; + border-radius: 16px; + } + .single-input { margin: 0 8px; width: 60px; @@ -200,25 +528,267 @@ .ver { margin-bottom: 10px; font-size: 16px; + color: #5f5f5f; + font-weight: bold; .ver-text { - font-weight: 600; + color: #666666; + font-weight: 400; } } .info { - font-size: 15px; margin-bottom: 10px; - } - .qr-code-img { - // width: 120px; - // height: 120px; + .el-button--primary { + font-size: 14px; + color: #fff; + background-color: var(--colorCard); + border-color: #4e94ff !important; + background: #4e94ff !important; + border-radius: 16px; + width: 200px; + display: flex; + align-items: center; + justify-content: center; + height: 32px; + line-height: 32px; + } } .ask { margin-top: 20px; font-size: 15px; } } + +.el-dialog.my-account { + border-radius: 24px; + .btns { + display: flex; + justify-content: right; + .cancel { + width: 76px; + height: 40px; + cursor: pointer; + border-radius: 20px; + line-height: 40px; + font-size: 14px; + color: var(--colorCard); + border-color: var(--colorCard) !important; + display: flex; + align-items: center; + justify-content: center; + } + .ok { + width: 76px; + height: 40px; + cursor: pointer; + border-radius: 20px; + background-color: var(--colorCard) !important; + border-color: var(--colorCard) !important; + color: #fff; + line-height: 40px; + font-size: 14px; + display: flex; + align-items: center; + justify-content: center; + } + } + .login-content { + box-sizing: border-box; + .el-input__prefix { + left: 20px; + transition: all 0.3s; + font-size: 20px; + } + .el-input__suffix-inner { + .code-btn { + padding: 6px 20px; + border: none; + border-left: 1px solid #d4d6d9; + color: var(--colorCard); + } + .code-btn:hover { + background: none; + } + } + .el-input__inner { + background-color: #ffffff; + border: 1px solid #d4d6d9; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: 14px; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 50px; + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; + border-radius: 20px; + } + } + .el-dialog__footer { + padding: 30px; + text-align: left; + box-sizing: border-box; + box-shadow: 0px -1px 0px rgb(0 0 0 / 8%); + } + .el-dialog__header { + padding: 14px 20px 13px; + text-align: center; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.08); + .el-dialog__title { + font-weight: 600; + font-size: 18px; + color: #5f5f5f; + line-height: 25px; + } + } + .el-dialog__body { + padding: 30px 30px 10px 30px; + } + .info { + text-align: left; + } +} +.el-dialog.my-activate { + border-radius: 24px; + .el-dialog__footer { + padding: 30px; + text-align: left; + box-sizing: border-box; + box-shadow: 0px -1px 0px rgb(0 0 0 / 8%); + .btns { + display: flex; + .cancel { + width: 140px; + height: 40px; + cursor: pointer; + border-radius: 20px; + line-height: 40px; + font-size: 14px; + color: var(--colorCard); + border-color: var(--colorCard) !important; + margin-right: 12px; + display: flex; + align-items: center; + justify-content: center; + } + .ok { + width: 140px; + height: 40px; + cursor: pointer; + border-radius: 20px; + background-color: var(--colorCard) !important; + border-color: var(--colorCard) !important; + color: #fff; + line-height: 40px; + font-size: 14px; + display: flex; + align-items: center; + justify-content: center; + } + } + } +} +.el-dialog.my-order { + border-radius: 24px; + .el-dialog__body { + padding: 22px 20px; + } + .btns { + display: flex; + justify-content: right; + .cancel { + width: 140px; + + height: 40px; + cursor: pointer; + border-radius: 20px; + line-height: 40px; + font-size: 14px; + color: var(--colorCard); + border-color: var(--colorCard) !important; + display: flex; + align-items: center; + justify-content: center; + } + .ok { + width: 140px; + height: 40px; + cursor: pointer; + border-radius: 20px; + background-color: var(--colorCard) !important; + border-color: var(--colorCard) !important; + color: #fff; + line-height: 40px; + font-size: 14px; + display: flex; + align-items: center; + justify-content: center; + } + } + .tip { + width: auto; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding: 0 10px; + border-radius: 5px; + color: #5f5f5f; + line-height: 20px; + font-weight: bold; + -ms-flex-align: center; + align-items: center; + justify-content: center; + i { + margin-right: 5px; + font-size: 24px; + color: var(--colorCard); + } + span { + font-size: 14px; + } + } + .no-order-list { + margin-top: 20px; + font-size: 16px; + color: red; + } + .order-list { + margin: 20px 0; + height: 550px; + overflow-y: auto; + .order-card { + background: #fff; + margin-bottom: 15px; + border-radius: 8px; + box-shadow: 0px 0px 4px rgb(0 0 0 / 25%); + .head { + height: 40px; + line-height: 40px; + text-align: left; + box-sizing: border-box; + padding: 0 20px; + border-bottom: 1px rgba(242, 242, 242, 1) solid; + font-size: 14px; + display: flex; + justify-content: space-between; + } + .desc { + display: flex; + flex-direction: column; + justify-content: space-evenly; + text-align: left; + box-sizing: border-box; + font-size: 13px; + + padding: 8px 20px; + line-height: 20px; + } + } + } +} .warn-tag { - width: 640px; + width: 630px; text-align: left; box-sizing: border-box; padding: 0 25px; @@ -229,22 +799,23 @@ display: flex; justify-content: space-between; top: 55px; - left: calc(50% - 320px); + left: calc(50% - 315px); line-height: 45px; border-radius: 5px; .go-to { - color: rgba(71, 153, 247, 1); + color: var(--colorCard); cursor: pointer; text-decoration: underline; font-weight: 600; - font-size: 13px; + font-size: 14px; } .text { - font-size: 13px; + font-size: 14px; } .icon { font-size: 14px; cursor: pointer; + margin-left: 25px; } } </style> \ No newline at end of file -- Gitblit v1.8.0