From 5a59c268f9e67bdd2ec62bacc4334ef801f6bb56 Mon Sep 17 00:00:00 2001 From: xuminyui <576362016@qq.com> Date: Tue, 19 Sep 2023 19:18:11 +0800 Subject: [PATCH] =?UTF-8?q?ui=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 6 + common/index.js | 100 +++++++++++ http/index.js | 4 + http/interface.js | 170 +++++++++++++++++++ http/login.js | 5 + main.js | 32 ++-- pages.json | 47 ++++- pages/cameraContext/cameraContext.vue | 10 ++ pages/login/login.vue | 66 +++++-- pages/realName/realName.vue | 236 ++++++++++++++++++++++++++ pages/register/register.vue | 159 +++++++++++++++++ static/image/card.png | Bin 0 -> 8392 bytes static/image/card2.png | Bin 0 -> 8228 bytes static/image/logo2.png | Bin 0 -> 6426 bytes 14 files changed, 803 insertions(+), 32 deletions(-) create mode 100644 common/index.js create mode 100644 http/index.js create mode 100644 http/interface.js create mode 100644 http/login.js create mode 100644 pages/cameraContext/cameraContext.vue create mode 100644 pages/realName/realName.vue create mode 100644 pages/register/register.vue create mode 100644 static/image/card.png create mode 100644 static/image/card2.png create mode 100644 static/image/logo2.png diff --git a/App.vue b/App.vue index 6d9476b..560adf0 100644 --- a/App.vue +++ b/App.vue @@ -17,4 +17,10 @@ export default { diff --git a/common/index.js b/common/index.js new file mode 100644 index 0000000..22c8943 --- /dev/null +++ b/common/index.js @@ -0,0 +1,100 @@ +/** + * 通用消息框 + * @param content string 消息内容 + * @param fn function 回调 + * + */ +const msgToast = (content, fn, type = "none") => { + uni.showToast({ + title: content, + duration: 2000, + icon: type, + success: fn + ? () => { + setTimeout(() => { + fn(); + }, 1500); + } + : function () {}, + }); +}; + +/* 手机号验证 */ +const vefTel = (key) => { + let reg_tel = + /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/; + ///^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[3-8]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[5-7]{1}))+\d{8})$/; // 11位手机号 + if (key === "" || key === undefined || key === null) { + uni.showToast({ + title: "请输入手机号", + duration: 2000, + icon: "none", + }); + return false; + } else if (!reg_tel.test(key)) { + uni.showToast({ + title: "手机号码格式不正确", + duration: 2000, + icon: "none", + }); + return false; + } else { + return true; + } +}; + +/* 非空验证 */ +const vefEmpty = (key, msg) => { + if (key === "" || key === undefined || key === null) { + uni.showToast({ + title: msg, + duration: 2000, + icon: "none", + }); + return false; + } else { + return true; + } +}; + +const logout = () => { + msgToast("登录已过期,请重新登录", () => { + uni.removeStorageSync("userInfo"); + uni.reLaunch({ + url: "../login/login", + }); + }); +}; +/** + * @description: H5 App通用方案 解决H5刷新返回失败问题 + * @param {*} params + */ +const navigateBack = (params) => { + const pages = getCurrentPages(); + if (pages.length === 1) { + if (typeof params === "number") { + history.go(-params); + } else { + history.back(); + } + } else { + uni.navigateBack(); + } +}; +/** + * @description: 获取url参数 + * @param {*} params + */ +const getLocationParams = (name) => { + const pages = getCurrentPages(); + const curPage = pages[pages.length - 1]; + return name ? curPage.options[name] : curPage.options; +}; +export default { + msgToast, + vefTel, + vefEmpty, + logout, + navigateBack, + getLocationParams, +}; diff --git a/http/index.js b/http/index.js new file mode 100644 index 0000000..27ddd06 --- /dev/null +++ b/http/index.js @@ -0,0 +1,4 @@ +import login from "./login"; +export default { + login, +}; diff --git a/http/interface.js b/http/interface.js new file mode 100644 index 0000000..1283304 --- /dev/null +++ b/http/interface.js @@ -0,0 +1,170 @@ +/** + * 通用uni-app网络请求 + * 基于 Promise 对象实现更简单的 request 使用方式,支持请求和响应拦截 + */ +export default { + config: { + baseUrl: "", + header: { + "Content-Type": "application/json;charset=UTF-8", + // 'Content-Type':'application/x-www-form-urlencoded' + }, + data: {}, + method: "GET", + dataType: "json" /* 如设为json,会对返回的数据做一次 JSON.parse */, + responseType: "text", + success() {}, + fail() {}, + complete() {}, + }, + interceptor: { + request: null, + response: null, + }, + request(options) { + if (!options) { + options = {}; + } + options.baseUrl = options.baseUrl || this.config.baseUrl; + options.dataType = options.dataType || this.config.dataType; + options.url = options.baseUrl + options.url; + options.data = options.data || {}; + options.method = options.method || this.config.method; + //TODO 加密数据 + options.header = options.header || this.config.header; + //TODO 数据签名 + let _token = { + Authorization: uni.getStorageSync("token") || "undefined", + }; + options.header = Object.assign({}, options.header, _token); + /* + + _sign = {'sign': sign(JSON.stringify(options.data))} + options.header = Object.assign({}, options.header, _token,_sign) + */ + + return new Promise((resolve, reject) => { + let _config = null; + + options.complete = (response) => { + let statusCode = response.statusCode; + response.config = _config; + if (process.env.NODE_ENV === "development") { + if (statusCode === 200) { + // console.log("【" + _config.requestId + "】 结果:" + JSON.stringify(response.data)) + } + } + if (this.interceptor.response) { + let newResponse = this.interceptor.response(response); + if (newResponse) { + response = newResponse; + } + } + if (response.data.status === 401) { + let curPage = getCurrentPages(); + let route = curPage[curPage.length - 1].route; //获取当前页面的路由 + if (route !== "pages/login/login") { + uni.navigateTo({ + url: "/pages/login/login", + }); + } + } + // 统一的响应日志记录 + _reslog(response); + if (statusCode === 200) { + //成功 + resolve(response.data); + } else { + reject(response); + } + }; + + _config = Object.assign({}, this.config, options); + _config.requestId = new Date().getTime(); + + if (this.interceptor.request) { + this.interceptor.request(_config); + } + + // 统一的请求日志记录 + _reqlog(_config); + + uni.request(_config); + }); + }, + get(url, data, options) { + if (!options) { + options = {}; + } + options.url = url; + options.data = data; + options.method = "GET"; + return this.request(options); + }, + post(url, data, options, header) { + if (!options) { + options = {}; + } + options.url = url; + options.data = data; + options.header = header; + options.method = "POST"; + return this.request(options); + }, + put(url, data, options) { + if (!options) { + options = {}; + } + options.url = url; + options.data = data; + options.method = "PUT"; + return this.request(options); + }, + delete(url, data, options) { + if (!options) { + options = {}; + } + options.url = url; + options.data = data; + options.method = "DELETE"; + return this.request(options); + }, +}; + +/** + * 请求接口日志记录 + */ +function _reqlog(req) { + if (process.env.NODE_ENV === "development") { + // console.log("【" + req.requestId + "】 地址:" + req.url) + if (req.data) { + // console.log("【" + req.requestId + "】 请求参数:" + JSON.stringify(req.data)) + } + } + //TODO 调接口异步写入日志数据库 +} + +/** + * 响应接口日志记录 + */ +function _reslog(res) { + let _statusCode = res.statusCode; + if (process.env.NODE_ENV === "development") { + // console.log("【" + res.config.requestId + "】 地址:" + res.config.url) + if (res.config.data) { + // console.log("【" + res.config.requestId + "】 请求参数:" + JSON.stringify(res.config.data)) + } + // console.log("【" + res.config.requestId + "】 响应结果:" + JSON.stringify(res)) + } + //TODO 除了接口服务错误外,其他日志调接口异步写入日志数据库 + switch (_statusCode) { + case 200: + break; + case 401: + break; + case 404: + break; + default: + break; + } +} diff --git a/http/login.js b/http/login.js new file mode 100644 index 0000000..7a02a43 --- /dev/null +++ b/http/login.js @@ -0,0 +1,5 @@ +import http from "./interface"; + +// 登录 + +export default {}; diff --git a/main.js b/main.js index 3f9b473..a7f556f 100644 --- a/main.js +++ b/main.js @@ -1,24 +1,28 @@ -import App from './App' +import App from "./App"; // #ifndef VUE3 -import Vue from 'vue' -import './uni.promisify.adaptor' -Vue.config.productionTip = false -App.mpType = 'app' -import uView from './uview-ui' -Vue.use(uView) +import Vue from "vue"; +import api from "@/http/"; +import common from "./common/index.js"; +import "./uni.promisify.adaptor"; +Vue.config.productionTip = false; +App.mpType = "app"; +import uView from "./uview-ui"; +Vue.use(uView); +Vue.prototype.$api = api; +Vue.prototype.$common = common; const app = new Vue({ - ...App -}) -app.$mount() + ...App, +}); +app.$mount(); // #endif // #ifdef VUE3 -import { createSSRApp } from 'vue' +import { createSSRApp } from "vue"; export function createApp() { - const app = createSSRApp(App) + const app = createSSRApp(App); return { - app - } + app, + }; } // #endif diff --git a/pages.json b/pages.json index 165e174..987134d 100644 --- a/pages.json +++ b/pages.json @@ -2,30 +2,39 @@ "easycom": { "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue" }, - "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + "pages": [ { - "path": "pages/home/index", + "path": "pages/login/login", "style": { "navigationBarTitleText": "", - "enablePullDownRefresh": false + "enablePullDownRefresh": false, + "app-plus": { + "titleNView": false // 禁用原生导航 + } } }, { - "path": "pages/contract/index", + "path": "pages/register/register", "style": { "navigationBarTitleText": "", - "enablePullDownRefresh": false + "enablePullDownRefresh": false, + "app-plus": { + "titleNView": false // 禁用原生导航 + } } }, { - "path": "pages/order-goods/index", + "path": "pages/realName/realName", "style": { "navigationBarTitleText": "", - "enablePullDownRefresh": false + "enablePullDownRefresh": false, + "app-plus": { + "titleNView": false // 禁用原生导航 + } } }, { - "path": "pages/login/login", + "path": "pages/cameraContext/cameraContext", "style": { "navigationBarTitleText": "", "enablePullDownRefresh": false, @@ -34,6 +43,28 @@ } } }, + { + "path": "pages/home/index", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/contract/index", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/order-goods/index", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + }, + { "path": "pages/mine/index", diff --git a/pages/cameraContext/cameraContext.vue b/pages/cameraContext/cameraContext.vue new file mode 100644 index 0000000..63ff5b8 --- /dev/null +++ b/pages/cameraContext/cameraContext.vue @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/pages/login/login.vue b/pages/login/login.vue index 4168472..dba0735 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -31,25 +31,68 @@ export default { }); if (res.status == 0) { uni.setStorageSync("token", res.data.token); - // uni.redirectTo({ - // url: "../home/index" - // }); + uni.redirectTo({ + url: "/pages/register/register" + }); } } else { this.$common.msgToast("请不要拒绝哟~重新点击登录"); } + }, + async login() { + // 获取code + uni.login({ + provider: "weixin", + success: async res => { + this.code = res.code; + let res1 = await this.$api.user.loginToken({ wxLoginCode: res.code }); + if (res1.status == 0) { + if (res1.data.code == 2) { + this.isShow = true; + this.openId = res1.data.openid; + } else { + uni.setStorageSync("token", res1.data.token); + uni.redirectTo({ + url: "/pages/register/register" + }); + } + } else { + this.$common.msgToast(res1.msg); + } + } + }); + } + }, + onLoad() { + this.isLogoutShow = true; + if (!this.isLogoutShow) { + // 获取code + uni.login({ + provider: "weixin", + success: async res => { + this.code = res.code; + let res1 = await this.$api.user.loginToken({ wxLoginCode: res.code }); + if (res1.status == 0) { + if (res1.data.code == 2) { + this.isShow = true; + this.openId = res1.data.openid; + } else { + uni.setStorageSync("token", res1.data.token); + uni.redirectTo({ + url: "/pages/register/register" + }); + } + } else { + this.$common.msgToast(res1.msg); + } + } + }); } } }; \ No newline at end of file diff --git a/pages/register/register.vue b/pages/register/register.vue new file mode 100644 index 0000000..97badb4 --- /dev/null +++ b/pages/register/register.vue @@ -0,0 +1,159 @@ + + + + + \ No newline at end of file diff --git a/static/image/card.png b/static/image/card.png new file mode 100644 index 0000000000000000000000000000000000000000..8c220cbba9775655aded9a6531bad6da245244a9 GIT binary patch literal 8392 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 EAAx|g3;+NC literal 0 HcmV?d00001 diff --git a/static/image/card2.png b/static/image/card2.png new file mode 100644 index 0000000000000000000000000000000000000000..be17ac2bece28137fb7361ae600f22b2d21a3373 GIT binary patch literal 8228 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 literal 0 HcmV?d00001 diff --git a/static/image/logo2.png b/static/image/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..080866979983bcc82f4cb9fbfb0eb42edebcb70b GIT binary patch literal 6426 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 z zt?-&mNqFdKj9kWWiWZv=#+MzK4+}}5KDQvjd`!ut-S!k5P-^$GIx>*S1b9j>5@5%Z zBF-NML@+3WLMugQIWiS3Mg3eyXXqLj9uDSVx8p@{3*0@uxTa8&!mWv@rj{W>fvPKG zIHshiLbmCAb!E|>gofeT5_Tmue%WO{A@P(RgIWb9QJ@Kn`~aG9k9wtieAv8?;xNbl z>kJQ|KXqADL(+h2APaBvD_T2AJG4Q_P~%*G!L?nH${3DR<4Kbxi|QYoox_Pmm-kHq zJ3D)2Kp^pBVyY8Ccy3yt88#lN)ii6!3k$CVDG(N%LLw&oBi4(Ov+O`(#&Ah^;@Chu zNu-Y$c+9m{WlJClRZrj1S!v1e_+^M!$+;7Ia;;_8#?%?Ry7QDIoZsIGy)ie;VEu2J zNaCgp7?x5)#M5G}Ia7zWO|NCiZo$kLE{QT(8UT3UP<*`Gsm6k|XB=I zZe+|3`&YH81(8ZtjT->2cru6lcDxY^41zytQHat7ZNMoL7>ZUT-p_9=hDf-3G7RS* zK%Zw7IS<`fuAs&U(b9`&=(_M;ly1DUn|(;aiNx6iI3a$=*}{X4b#}at=mTe!--UnF zCY%5T#7dt7vE&)R7XD2<9#uK&9)N}WabRjBK$tw{QDw?kz;McH_%lfp`uD>E)A14F z_0UK&IC|4{l~qRG%Qlig3oD;2Z80{~HdQGI4P{=O{Ny)i8Vm=BAxet$OHf8h9Ds}_ zpz74|#mF@PK}WiB0t=ZEuZ z6c^%OpaJrT*}5WhveU7Q<+-rQfSn`Lf8JAuGgzuGs}%H&Wn#T*8zPw}CyRmIm}k!! z-i<+T>!b4(*v9bA*KVtPavQ_9O15=A=xq$|eC@W%C$}+tt7Kc}gWksQ&ev|MdUC;< zp3qH7Crz@3gC~>L1>D-?_EzHr%u1u*16k_eU4496G|hZ=YfBzh&B#TGszW&X4|2 zTs3rX-&9}cn?^Qz&39jR>>QFt6Go@qdh7HJkM|u|>+7E-?_0ZUaMqotU3LGI&D*cv zLj$(mlo^{I*zo9-86$n8HD7rB?R#7^IQOAbRt=pw>Z3E44bHvztTk(hJAhsy%1vakD1my3D5;ZimMK@W!D7`bYJmQQ1BtKDuPZ;2}Rf z?ZzP>+?h*`n_a&Uv98inhIfOht@=3Sy0y<&U+uLc(y~6cnakGx%aAQzJRuNkp5don zKlI|O2WO{OiF9qc?5g3J>(AGSEnW7?+1Ux%1uKSjtqs`O8=f_M@ybIFoiJn(h7WIC z|L~N78H3XBZeG*ZYU&4@pL~Y15GSv?{q#QX+ih6Ba{2sO{GE>pp~!F>_T}o+ChPNA z%jVCjeE4oGgF4~bdv}^r+jQ>mX1ip?g4x-n`0TRb5j(HeZGjsvr}ZPgbo+tP>65<0pH_8^s!mAe?6mKW)q|4H0j=%25 zQ>XQ>JHOVaE8`+(CTqC=oSIGl;*$CMmu1n$J&wq5%+{jSKib7co}x_piCUkpenvBV z+$-CrgOhI=>Y4;gt$b7~QKIPKO1`llbV`|+VTsELpLnp}WC7b*0@@o^PqTBE4)qCpW zUc9*Pq&deQZ2h&zYqil)ZSLRgH`AWDz>% literal 0 HcmV?d00001