zhengjinyi 2 years ago
parent
commit
c023614b82

+ 16 - 0
.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 19 - 0
README.md

@@ -0,0 +1,19 @@
+caimei-applets-caimei --采美商城小程序
+
+项目介绍
+	-采美商城小程序是用Dcloud推出的uni-app开发的一款小程序
+软件架构
+	-HBuild-X  微信开发者工具
+前端框架API
+	-uni-app  Vue.js  微信Api
+目录结构
+			
+运行项目
+	-下载安装HBuild-X
+	-导入项目文件
+	-点击运行到小程序模拟器->微信开发者工具(自动会编译打包开大微信开发者工具运行)
+使用说明
+
+这是一个基于uni-app的项目,所以要用HBuild-X 来打开预览(支持小程序、安卓、苹果)
+
+

+ 54 - 0
common/config/addressdata.js

@@ -0,0 +1,54 @@
+/*
+ *请求获取省市区
+ *已提供给地区选择picker组件使用
+ */ 
+import ajaxService from '@/services/ajax.service.js'
+import PublicService from '@/services/public.service'
+
+const _PublicService = new PublicService(ajaxService)
+
+const provinceData=[];
+const cityData=[];
+const areaData=[];
+
+_PublicService.GetAllAddressData().then(res =>{
+	let list = res.data;
+	list.forEach(item => {
+		let address = handleCitys(item);
+		provinceData.push(item);
+		cityData.push(address.e);
+		areaData.push(address.f);
+	})
+	//获取市后继续处理
+	function handleCitys(data) {
+	    const x = [];
+	    const s = [];
+	    if (data.children.length) {
+	        data.children.forEach(item => {
+				let city = handleTowns(item);
+				s.push(city);
+				x.push(item)
+	        })
+	    }else{
+			s.push([{name:''}]);
+			x.push([{name:''}]);
+		}
+	    return {
+	        e: x,
+	        f: s,
+	    };
+	}
+	//获取区后继续处理
+	function handleTowns(data) {
+	    const x = [];
+	    data.children.forEach(item => {
+	        x.push(item)
+	    })
+	    return x;
+	}
+})
+module.exports = {
+	provinceData,
+	cityData,
+	areaData
+}

+ 173 - 0
common/config/authorize.js

@@ -0,0 +1,173 @@
+//authorize.js
+import api from './caimeiApi.js'
+
+//判断是否登陆 通过检测sessionkey是否过期 1未过期 0已过期
+const checkSessionKey=()=>{	
+    return new Promise((resolve,reject) => {
+        const user = uni.getStorageSync('user')// 用户缓存信息
+        if(user){
+            uni.checkSession({
+			    success() {
+                    resolve(1) //状态未过期
+                }
+			    ,fail() {
+                    resolve(0) //状态已过期
+                }
+            })
+        }else{
+            resolve(2) //未存贮
+        }
+    })
+}
+
+// 登录授权
+const login = (params)=> {
+    return new Promise((resolve,reject) => {
+        authDo(params).then(res=>{
+            if ( res.statusCode && res.statusCode != 200 ) {
+                reject('网络错误,请检查一下网络');return
+            }
+            if (res.data.code != 0) {
+			    reject('登录失败');return
+            }
+            let user = res.data.data.user
+            uni.setStorageSync('user', user)//储存用户信息到本地
+            resolve(user)
+        })
+    })
+}
+
+// 查询用户信息 write by self
+const authDo = function(params) {
+    return new Promise(function (resolve, reject) {
+        uni.request({
+            url: api.requestUrl +'/login/doLogin',
+            data: params,
+            method:'POST',
+            header: {
+	        		'content-type': 'application/x-www-form-urlencoded'
+            },
+            success: function(res){ resolve(res) },
+            fail:function(){ reject('保存用户信息失败') }
+        })
+    })
+}
+
+// 获取服务商信息 uni-app是聚合开发 所以先获得是什么小程序 原生的不用这个
+const getProvider = () => {
+    return new Promise((resolve, reject) => {
+        uni.getProvider({
+            service: 'oauth', //服务类型  登录授权
+            success: function(res) {resolve(res.provider[0])},
+            fail:function() { reject('获取服务商失败') }
+        })
+    })
+}
+
+
+// 获取code
+const getCode = provider => {
+    return new Promise((resolve, reject) => {
+        if (!provider) { reject('获取缺少provider参数') }
+        uni.login({
+            provider: provider,
+            success: function(loginRes) {
+                if (loginRes && loginRes.code) { 
+                    resolve(loginRes.code) 
+                } else {
+                    reject('获取code失败') 
+                    uni.navigateTo({
+                        url:'/pages/tabBar/home/index'
+                    })
+                }
+            },
+            fail:function(error){ 
+                console.log('获取code失败',)
+                reject('获取code失败')
+            }
+        })
+    })
+}
+
+// 是否开启了获取用户名授权 当用户一开始拒绝了 需再次提醒授权
+const getSetting = function() {
+    return new Promise((resolve,reject) => {
+        uni.getSetting({
+            success:function(res) {
+                let authSetting=res.authSetting
+                if(authSetting['scope.userInfo']){resolve(1);return}//授权成功
+                if(authSetting['scope.userInfo']===false){resolve(0);return}//拒绝授权
+                resolve(2) //2未操作
+            },
+            fail:function(error) { 
+                console.log(error)
+                reject('获取用户授权失败') 
+            }
+        })
+    })
+}
+
+// 获取用户信息
+const getUserInfo = (provider)=>{
+    return new Promise( (resolve,reject)=>{
+        if (!provider) { reject('获取缺少provider参数');return }
+        uni.getUserInfo({
+            provider: provider,
+            success: (detail) => {
+                if(detail.iv != ''){
+                    resolve(detail)
+                }else{
+                    reject(0) //用户点击拒绝授权
+                }
+            }
+            ,fail: (error) => {
+                console.log('获取用户信息失败',error)
+                reject(0) //如果用户拒绝过授权 直接走fail
+            }
+        })
+    })
+}
+// 获取用户登录状态
+const checkLogin = () => {
+    return new Promise((resolve, reject) => {
+        uni.checkSession({
+            success() {
+                console.log('登录成功')
+                resolve(1)
+            },
+            fail(error) {
+                console.log('获取用户信息失败',error)
+                reject(0)
+            }
+        })
+    })
+}
+
+// util.js
+const getUserProfile = () =>{
+    wx.getUserProfile({
+        desc: '用于完善个人资料',
+        success: function(res) {
+            var userInfo = res.userInfo
+            // console.log('userInfo==>', userInfo)
+            wx.setStorageSync('storage_info', 1)//本地标记
+            //下面将userInfo存入服务器中的用户个人资料
+            //...
+		  },
+        fail() {
+            console.log('用户拒绝授权')
+        }
+    })
+}
+  
+
+export default {
+    getProvider,
+    getSetting,
+    checkSessionKey,
+    getCode,
+    login,
+    getUserInfo,
+    checkLogin,
+    getUserProfile
+}

+ 446 - 0
common/config/caimeiApi.js

@@ -0,0 +1,446 @@
+/**
+ * @Time 2019-12-12
+ * @Author Zhengjingyi
+ * @Action 全局公共方法
+ */
+import requestUrl from '@/services/config.env.js'
+const caimeiApi = {
+    /**
+	 * @封装公共get数据请求方法无加载动画
+	 * @方法参数:请求地址,请求后台需要的参数字段,回调函数
+	 * @自定义请求头信息
+	 */
+    get:function(url,data,callback){
+		 uni.request({
+            url: requestUrl + url,
+            data:data,
+            header: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/x-www-form-urlencoded', 
+                'X-Token': uni.getStorageSync('token') ? uni.getStorageSync('token') : 'token',
+                'cookie': uni.getStorageSync('sessionid')
+            },
+            method: 'GET',
+            success: (response) => {
+                if(response.statusCode !== 200){
+                    uni.showToast({icon: 'none',title:'服务器连接错误',duration: 2000})
+                    callback(response.statusCode)
+                }else{
+                    callback(response.data)
+                }
+            },
+            fail: (error) => {
+                if (error) {
+                    uni.showToast({icon: 'none',title: '网络错误,请稍后重试',duration: 2000})
+                }
+            }
+		 })
+    },
+    /**
+	 * @封装公共get数据请求方法有加载动画
+	 * @方法参数:请求地址,请求后台需要的参数字段,回调函数
+	 * @自定义请求头信息
+	 */
+    lodingGet:function(url,data,callback){
+		 uni.showLoading({mask: true,title:'加载中~',})
+		 uni.request({
+            url: requestUrl + url,
+            data:data,
+            header: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/x-www-form-urlencoded', 
+                'X-Token': uni.getStorageSync('token') ? uni.getStorageSync('token') : 'token',
+                'cookie': uni.getStorageSync('sessionid')
+            },
+            method: 'GET',
+            success: (response) => {
+                if(response.statusCode !== 200){
+                    uni.showToast({icon: 'none',title: '服务器连接错误',duration: 2000})
+                    callback(response.statusCode)
+                }else{
+                    callback(response.data)
+                }
+            },
+            fail: (error) => {
+                if (error) {
+                    uni.showToast({icon: 'none',title: '网络错误,请稍后重试',duration: 2000})
+                }
+            },
+            complete: () => {
+                setTimeout(function () {
+                    uni.hideLoading()
+                }, 250)
+            }
+		 })
+    },
+    /**
+	 * @封装公共post数据请求方法
+	 * @方法参数:请求地址,请求后台需要的参数字段,回调函数
+	 */
+    post:function(url,data,loadingStatus,callback){
+        if(loadingStatus){uni.showLoading({mask: true,title:'加载中~'})}
+        uni.request({
+            url: requestUrl+url,
+            data:data,
+            header: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/x-www-form-urlencoded',
+                'X-Token': uni.getStorageSync('token') ? uni.getStorageSync('token') : 'token',
+                'cookie': uni.getStorageSync('sessionid')
+            },
+            method: 'POST',
+            success: (response) => {
+                if(loadingStatus){uni.hideLoading()}
+                const result = response.data
+                callback(result)
+            },
+            fail: (error) => {
+                uni.hideLoading()
+                if (error) {
+                    uni.showToast({icon: 'none',title: '网络错误,请稍后重试',duration: 2000})
+                }
+            }
+        })
+    },
+    getComStorage:function(key){// 获取本地Storage
+        return new Promise(function(resolve,reject) {
+            uni.getStorage({
+                key: key,
+                success: function (res){
+                    resolve(res.data)
+                },
+                fail: function(res){
+                    reject(false)
+                }
+            })
+        })
+    },
+    setStorage:function(key,data){// 存储本地Storage
+        return new Promise(function(resolve,reject) {
+            uni.setStorage({
+                key: key,
+                data:data,
+                success: function (res){
+                }
+            })
+        })
+    },
+    getStorage:function(){// 获取本地userInfo
+        return new Promise(function(resolve,reject) {
+            uni.getStorage({
+                key: 'userInfo',
+                success: function (res){
+                    resolve(res.data)
+                },
+                fail: function(res){
+                    reject(false)
+                }
+            })
+        })
+    },
+    removeStorage:function(key){// 获取本地userInfo
+        return new Promise(function(resolve,reject) {
+            uni.removeStorage({
+                key: key,
+                success: function (res) {
+                    console.log('success')
+                }
+            })
+        })
+    },
+    getStorageAddressKey:function(){// 获取本地地址信息
+        return new Promise(function(resolve,reject) {
+            uni.getStorage({
+                key: 'address_key',
+                success: function (res){
+                    resolve(res.data)
+                }
+            })
+        })
+    },
+    loginStatus:function(){
+        // 获取用户是否登陆 1:已登陆,否则未登陆
+        return new Promise(function(resolve,reject) {
+            uni.getStorage({
+                key: 'userInfo',
+                success: function (res){
+                    if(res.data.code == '1'){
+                        resolve(true)
+                    } else {
+                        resolve(false)
+                    }
+                }
+            })
+        })
+    },
+    navToListPage:function({type,value,id,lType} = {}){	
+        // 跳转到列表页
+        if(lType=='4'){
+            const pages = getCurrentPages()
+            const prevPage = pages[pages.length-2]
+            prevPage.refresh = true
+            prevPage.listData = {
+                type: type,
+                from: value,
+                id: id
+            }
+            uni.navigateBack({
+                delta: 1
+            })
+        }else{
+            uni.navigateTo({
+                url:`/pages/goods/goods?type=${type}&from=${value}&id=${id}`
+            })
+        }
+    },
+    navigateToGoods:function({type,value,id,lType} = {}){
+        // 跳转到列表页
+        if(lType=='4'){
+            const pages = getCurrentPages()
+            const prevPage = pages[pages.length-2]
+            prevPage.refresh = true
+            prevPage.listData = {
+                type: type,
+                from: value,
+                id: id
+            }
+            uni.navigateBack({
+                delta: 1
+            })
+        }else{
+            uni.navigateTo({
+                url:`/pages/goods/goods-classify?type=${type}&from=${value}&id=${id}`
+            })
+        }
+    },
+    FlooryNavigateTo:function(pros){
+        if(pros.listType == 1){
+            if(pros.product.productCategory == '1'){
+                uni.navigateTo({
+				  	url:`/pages/goods/product?id=${pros.product.productId}`
+                })
+            }else{
+                uni.navigateTo({
+				  	url:`/pages/second/product/product-details?id=${pros.product.productId}`
+                })
+            }
+        }else{
+            /**
+			 * 页面跳转类型
+			 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
+			 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
+			 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
+			 **/
+            if(pros.linkType){
+                console.log(pros.linkType)
+                const typeMap = {
+				 	1:`/pages/goods/goods-instrument?linkId=${pros.linkParam.id}`,
+				 	2:`/pages/goods/instrument-details?id=${pros.linkParam.id}`,
+				 	3:`/pages/h5/article/page-image?image=${pros.adsImage}&title=专题直播`,
+                    4:`/pages/h5/activity/activity?link=${pros.crmLink}&linkId=${pros.linkParam.id}`,
+				 	5:`/pages/goods/product?id=${pros.linkParam.id}`,
+				 	7:`/pages/supplier/user/my-shop?shopId=${pros.linkParam.id}`,
+				 	8:'/pages/h5/activity/activity-list',
+				 	9:'/pages/second/form/introduce',
+				 	10:'/pages/second/product/product-list',
+				 	11:'/pages/second/form/form',
+				 	12:`/pages/search/search?keyWord=${pros.linkParam.keyword}`,
+				 	13:`/pages/h5/article/path?link=${pros.link}`,
+				 	14:`/pages/h5/article/path?link=${pros.link}`,
+				 	15:`/pages/h5/article/path?link=${pros.link}`,
+                    // '-1':`/pages/h5/article/path?link=${pros.link}`,
+				 	17:'/pages/login/register-select',
+				 	18:`/pages/h5/article/path?link=${pros.link}`,
+				 	19:`/pages/search/search-supplier?keyWord=${pros.linkParam.keyword}`,
+                    21:'/pages/h5/activity/meobohui',
+                    23:`/pages/h5/activity/activity-topic?linkId=${pros.linkParam.id}`,
+                    24:'/pages/user/coupon/coupon',
+                    25:'/pages/goods/goods-doc-list',//美业资料
+                    28:`/pages/h5/article/path?link=${pros.link}`, // 采美认证通
+                    29:'/pages/user/coupon/coupon-collection',//领券中心
+                }
+                const url = typeMap[pros.linkType]
+                uni.navigateTo({
+				  	url:url
+                })
+            }
+        }
+    },
+    BannerNavigateTo:function(linkType,linkId,linkHref,keyword){//楼层跳转判断
+        if(linkType){
+            const typeMap = {
+                1:`/pages/goods/goods-instrument?linkId=${linkId}`,
+                2:`/pages/goods/instrument-details?id=${linkId}`,
+                4:`/pages/h5/activity/activity?link=${linkHref}&linkId=${linkId}`,
+                5:`/pages/goods/product?id=${linkId}`, 
+                7:`/pages/supplier/user/my-shop?shopId=${linkId}`,
+                8:'/pages/h5/activity/activity-list',
+                9:'/pages/second/form/introduce',
+                10:'/pages/second/product/product-list',
+                11:'/pages/second/form/form',
+                12:`/pages/search/search?keyWord=${keyword}`,
+                13:`/pages/h5/article/path?link=${linkHref}`,
+                14:`/pages/h5/article/path?link=${linkHref}`,
+                15:`/pages/h5/article/path?link=${linkHref}`,
+                17:'/pages/login/register-select',
+                18:`/pages/h5/article/path?link=${linkHref}`,
+                19:`/pages/search/search-supplier?keyWord=${keyword}`,
+                21:'/pages/h5/activity/meobohui',
+                // '-1':`/pages/h5/article/path?link=${linkHref}`
+                24:'/pages/user/coupon/coupon',
+                25:'/pages/goods/goods-doc-list',  //美业资料
+                28:`/pages/h5/article/path?link=${linkHref}`, // 采美认证通
+                29:'/pages/user/coupon/coupon-collection',//领券中心
+
+            }
+            const url = typeMap[linkType]
+            uni.navigateTo({
+			 	url:url
+            })
+        }
+    },
+    navigateTo:function(url){
+        //路由跳转:页面之间路由跳转
+        uni.navigateTo({
+            url:url
+        })
+    },
+    redirectTo:function(url){
+        //路由跳转:关闭当前页跳转到新页面	
+        uni.redirectTo({
+            url:url
+        })
+    },
+    reLaunch:function(url){
+        //路由跳转:关闭当前页跳转到新页面	
+        uni.reLaunch({
+            url:url
+        })
+    },
+    switchTabTo:function(url){
+        //路由跳转:底部 tab页
+        uni.switchTab({
+            url:url
+        })
+    },
+    navigateBack:function(page){
+	    uni.navigateBack({
+		    delta: page
+	    })
+    },
+    isNumber:function(value){//验证是否为数字
+	    var patrn = /^(-)?\d+(\.\d+)?$/
+	    if (patrn.exec(value) == null || value == '') {
+	         return false
+	    } else {
+	         return true  
+        }	 
+    },
+    getWindowHeight:function(){
+        // 获取窗口高度
+        const {windowHeight, pixelRatio} = wx.getSystemInfoSync()
+        return windowHeight
+    },
+    adaptRichTextImg:function(res){
+        /**
+		 *@富文本实现图片自适应
+		 *@style再添加自适应样式
+		 */ 
+        const html = res.replace(/<img[^>]*>/gi,function(match,capture){			
+            let match1 = match.replace(/<img*/gi, '<img style="width:100% !important;height:auto !important;float:left !important;"'),
+                results = match1.replace(/style=/gi, 'style="width:100%;height:auto;float:left;"')
+            return results
+        })
+        return html	
+    },
+    FormatMoney:function(num){
+        // 金额千分位
+        return num.toString().replace(/\d+/, function (n) { // 先提取整数部分
+            return n.replace(/(\d)(?=(\d{3})+$)/g, function ($1) { // 对整数部分添加分隔符
+                return $1 + ','
+            })
+        })
+    },
+    formatDate:function(){
+        //获取当前时间
+        let date = new Date()
+        let y = date.getFullYear()
+        let MM = date.getMonth() + 1
+        MM = MM < 10 ? ('0' + MM) : MM
+        let d = date.getDate()
+        d = d < 10 ? ('0' + d) : d
+        let h = date.getHours()
+        h = h < 10 ? ('0' + h) : h
+        let m = date.getMinutes()
+        m = m < 10 ? ('0' + m) : m
+        let s = date.getSeconds()
+        s = s < 10 ? ('0' + s) : s
+	    return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s
+    },
+    regexSets:function() {
+        let sets = {
+            'companyName': /^[\u4e00-\u9fa5\(\)()\s\da-zA-Z&]{2,50}$/gi,
+            'phoneAndTelephone': /^([1]\d{10}|([\((]?0[0-9]{2,3}[)\)]?[-]?)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?)$/,
+            'bankNum': /^([1-9]{1})(\d{18})$/,
+            'invalidChar': /^[\s\u4e00-\u9fa5a-z0-9_-]{0,}$/
+        }
+        return sets
+    },
+    timestampToTime:function(timestamp) {
+        // 时间戳转日期
+	   let date = new Date(timestamp * 1000)//时间戳为10位需*1000,时间戳为13位的话不需乘1000
+	   let Y = date.getFullYear() + '-'
+	   let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'
+	   let D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' '
+	   let h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':'
+	   let m = (date.getMinutes() < 10 ? '0'+date.getMinutes() : date.getMinutes()) + ':'
+	   let s = (date.getSeconds() < 10 ? '0'+date.getSeconds() : date.getSeconds())
+	   return `${Y}${M}${D}${h}${m}${s}`
+    },
+    easyFormatData(timestamp){
+        //时间转换
+        let a = new Date(timestamp).getTime()
+        const date = new Date(a)
+        const Y = date.getFullYear() + '-'
+        const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
+        const D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + '  '
+        const h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':'
+        const m = (date.getMinutes() <10 ? '0'+date.getMinutes() : date.getMinutes()) 
+        // const s = date.getSeconds(); // 秒
+        const dateString = Y + M + D + h + m
+        // console.log('dateString', dateString); // > dateString 2021-07-06 14:23
+        return dateString
+    }
+}
+
+/**
+ *@导出
+ */ 
+module.exports = {
+    get: caimeiApi.get,
+    post: caimeiApi.post,
+    lodingGet: caimeiApi.lodingGet,
+    isNumber: caimeiApi.isNumber,
+    FormatMoney: caimeiApi.FormatMoney,
+    navigateTo: caimeiApi.navigateTo,
+    reLaunch: caimeiApi.reLaunch,
+    redirectTo: caimeiApi.redirectTo,
+    switchTabTo: caimeiApi.switchTabTo,
+    navigateBack: caimeiApi.navigateBack,
+    formatDate: caimeiApi.formatDate,
+    loginStatus: caimeiApi.loginStatus,
+    setStorage: caimeiApi.setStorage,
+    getStorage: caimeiApi.getStorage,
+    removeStorage: caimeiApi.removeStorage,
+    getComStorage: caimeiApi.getComStorage,
+    navToListPage: caimeiApi.navToListPage,
+    navigateToGoods: caimeiApi.navigateToGoods,
+    getWindowHeight: caimeiApi.getWindowHeight,
+    adaptRichTextImg: caimeiApi.adaptRichTextImg,
+    getStorageAddressKey: caimeiApi.getStorageAddressKey,
+    regexSets: caimeiApi.regexSets,
+    timestampToTime: caimeiApi.timestampToTime,
+    BannerNavigateTo:caimeiApi.BannerNavigateTo,
+    FlooryNavigateTo:caimeiApi.FlooryNavigateTo,
+    easyFormatData:caimeiApi.easyFormatData
+}

+ 210 - 0
common/config/common.js

@@ -0,0 +1,210 @@
+//公共js,主要做表单验证,以及基本方法封装
+const utils = {
+    isNullOrEmpty: function(value) {
+        //是否为空
+        return (value === null || value === '' || value === undefined) ? true : false
+    },
+    trim: function(value) {
+        //去空格
+        return value.replace(/(^\s*)|(\s*$)/g, '')
+    },
+    isEmail: function(value){
+        //是否为邮箱
+		 return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(value)
+    },
+    isWebsite: function(value){
+        //是否为网址
+        return RegExp(/^((http|ftp|https):\/\/[a-zA-Z0-9]|[a-zA-Z0-9])[-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?$/).test(value)
+    },
+    isMobile: function(value) {
+        //是否为手机号
+        return RegExp(/^1[1-9][0-9]{9}$/).test(value)
+    },
+    isIdCard: function(value) {
+        //是否为手机号
+        return RegExp(/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/).test(value)
+    },
+    isFloat: function(value) {
+        //金额,只允许保留两位小数
+        return RegExp(/^([0-9]*[.]?[0-9])[0-9]{0,1}$/).test(value)
+    },
+    isNum: function(value) {
+        //是否全为数字
+        return RegExp(/^[0-9]+$/).test(value)
+    },
+    isEmailCode:function(value) {
+	    return RegExp(/^\d{4}$/).test(value)
+    },
+    isMobileCode:function(value) {
+	    return RegExp(/^\d{6}$/).test(value)
+    },
+    isCredit:function(value) {//统一社会信用代码
+	    return RegExp(/^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/).test(value)
+    },
+    checkPwd: function(value) {//密码为8~20位数字和字母组合
+        return RegExp(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/).test(value)
+    },
+    isNoChinese: function(value) {//数字和字母组合
+        return RegExp(/^[A-Za-z0-9]+$/).test(value)
+    },
+    hidePhone:function(value) {
+        return value.replace(/^(\d{3})\d{4}(\d+)/,'$1****$2')
+    },
+    interceptHtmlFn: function(value){
+        return value ? value.replace(/<[^>]+>/g,'') : value
+    },
+    desensitizationName:function(value){
+        if(null != value && value != undefined){
+            if(value.length <= 3){
+                let ruten = value.substring(1)
+                return value.replace(ruten,'**')
+            } else if(value.length > 3 && value.length <= 6){
+                let ruten = value.substring(2)
+                return value.replace(ruten,'**')
+            } 
+        } else {
+            return ''
+        }
+    },
+    formatNum: function(num) {
+        //格式化手机号码
+        if (utils.isMobile(num)) {
+            num = num.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
+        }
+        return num
+    },
+    rmoney: function(money) {
+        //金额格式化
+        return parseFloat(money).toFixed(2).toString().split('').reverse().join('').replace(/(\d{3})/g, '$1,').replace(
+            /\,$/, '').split('').reverse().join('')
+    },
+    bankRegex:function(num){
+        let bankNum = ''
+        bankNum = num.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 ')
+        return bankNum
+    },
+    checkData:function(value){
+        let data
+        if(value == null || value ==''){
+            data = ''
+        }else{
+            data = value
+        }
+        return data
+    },
+    formatAccMul:function(value1, value2) {// 修复数额丢失精度
+	    if (value1 == 0 || value2 == 0) {
+	      return 0
+	    }
+	    let m = 0
+	    let v1 = value1.toString()
+	    let v2 = value2.toString()
+	    m += v1.split('.')[1] ? v1.split('.')[1].length : 0
+	    m += v2.split('.')[1] ? v2.split('.')[1].length : 0
+	    let _v1 = Number(v1.replace('.', ''))
+	    let _v2 = Number(v2.replace('.', ''))
+	    return (_v1 * _v2) / Math.pow(10, m)
+    },
+    formatDate: function(formatStr, fdate) {
+        //日期格式化
+        if (fdate) {
+            if (~fdate.indexOf('.')) {
+                fdate = fdate.substring(0, fdate.indexOf('.'))
+            }
+            fdate = fdate.toString().replace('T', ' ').replace(/\-/g, '/')
+            var fTime, fStr = 'ymdhis'
+            if (!formatStr)
+                formatStr = 'y-m-d h:i:s'
+            if (fdate)
+                fTime = new Date(fdate)
+            else
+                fTime = new Date()
+            var month = fTime.getMonth() + 1
+            var day = fTime.getDate()
+            var hours = fTime.getHours()
+            var minu = fTime.getMinutes()
+            var second = fTime.getSeconds()
+            month = month < 10 ? '0' + month : month
+            day = day < 10 ? '0' + day : day
+            hours = hours < 10 ? ('0' + hours) : hours
+            minu = minu < 10 ? '0' + minu : minu
+            second = second < 10 ? '0' + second : second
+            var formatArr = [
+                fTime.getFullYear().toString(),
+                month.toString(),
+                day.toString(),
+                hours.toString(),
+                minu.toString(),
+                second.toString()
+            ]
+            for (var i = 0; i < formatArr.length; i++) {
+                formatStr = formatStr.replace(fStr.charAt(i), formatArr[i])
+            }
+            return formatStr
+        } else {
+            return ''
+        }
+    },
+    throttle: function(fn, gapTime) {
+	  if (gapTime == null || gapTime == undefined) {
+	    gapTime = 1500
+	  }
+	
+	  let _lastTime = null
+	
+	  // 返回新的函数
+	  return function () {
+	    let _nowTime = +new Date()
+	    if (_nowTime - _lastTime > gapTime || !_lastTime) {
+	      fn.apply(this, arguments) //将this和参数传给原函数
+	      _lastTime = _nowTime
+	    }
+	  }
+    },
+	
+    debounce: function(fn, delay, isImmediate) {
+	  var timer = null  //初始化timer,作为计时清除依据
+	  return function() {
+	    var context = this  //获取函数所在作用域this
+	    var args = arguments  //取得传入参数
+	    clearTimeout(timer)
+	    if(isImmediate && timer === null) {
+	        //时间间隔外立即执行
+	        fn.apply(context,args)
+	      timer = 0
+	      return
+	    }
+	    timer = setTimeout(function() {
+	      fn.apply(context,args)
+	      timer = null
+	    }, delay)
+	  }
+    }
+
+}
+
+module.exports = {
+    isNullOrEmpty: utils.isNullOrEmpty,
+    trim: utils.trim,
+    isMobile: utils.isMobile,
+    isEmail: utils.isEmail,
+    isWebsite:utils.isWebsite,
+    isIdCard:utils.isIdCard,
+    isFloat: utils.isFloat,
+    isNum: utils.isNum,
+    isEmailCode:utils.isEmailCode,
+    isMobileCode:utils.isMobileCode,
+    isNoChinese:utils.isNoChinese,
+    checkPwd: utils.checkPwd,
+    formatNum:utils.formatNum,
+    rmoney: utils.rmoney,
+    formatDate: utils.formatDate,
+    formatAccMul: utils.formatAccMul,
+    bankRegex: utils.bankRegex,
+    checkData:utils.checkData,
+    hidePhone:utils.hidePhone,
+    interceptHtmlFn:utils.interceptHtmlFn,
+    desensitizationName:utils.desensitizationName,
+    throttle: utils.throttle,
+    debounce: utils.debounce
+}

+ 54 - 0
common/config/wxLogin.js

@@ -0,0 +1,54 @@
+import store from '@/store/index.js'
+import authorize from '@/common/config/authorize.js'
+import ajaxService from '@/services/ajax.service.js'
+import UserService from '@/services/user.service'
+
+const newUserService = new UserService(ajaxService)
+
+// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+const wxLoginAuthorize = async function(){
+    const wechatCode = await authorize.getCode('weixin')// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+    const getUserInfo = await authorize.getUserInfo('weixin')
+    newUserService.UserLoginAuthApplets({ 
+        code:wechatCode,
+        encryptedData:getUserInfo.encryptedData,
+        iv:getUserInfo.iv
+    })
+        .then(response =>{
+            store.commit('updateStatus',response.data)
+            store.commit('login',response.data)
+            uni.setStorageSync('token',response.data.token)
+            uni.setStorageSync('unionId',response.data.unionId)
+        })
+        .catch(error =>{
+            uni.setStorageSync('unionId',error.data.unionId)
+            store.commit('logout',error.data)
+            store.commit('updateStatus',error.data)
+        })
+}
+const wxLoginQuick = async function(){// 根据微信的code获取用户登录状态:1已登录过 -1未登录过跳转
+    const wechatCode = await authorize.getCode('weixin')// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+    const getUserInfo = await authorize.getUserInfo('weixin')
+    newUserService.UserLoginAuthApplets({ 
+        code:wechatCode,
+        encryptedData:getUserInfo.encryptedData,
+        iv:getUserInfo.iv
+    })
+        .then(response =>{
+            console.log(response)
+            store.commit('updateStatus',response.data)
+            store.commit('login',response.data)
+            uni.setStorageSync('token',response.data.token)
+            uni.setStorageSync('unionId',response.data.unionId)
+            uni.switchTab({url:'/pages/tabBar/user/user'})
+        })
+        .catch(error =>{
+            uni.setStorageSync('unionId',error.data.unionId)
+            store.commit('logout',error.data)
+            store.commit('updateStatus',error.data)
+        })
+}
+export default{
+    wxLoginAuthorize,
+    wxLoginQuick
+}