From 1b6ff0e37c3e57b940fc85296609248cb2900567 Mon Sep 17 00:00:00 2001 From: ZaiZai <806606688@qq.com> Date: Fri, 31 Dec 2021 00:12:47 +0800 Subject: [PATCH] =?UTF-8?q?3.3.0=EF=BC=8C=E6=9B=B4=E6=94=B9=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +- app.js | 11 +- config.js => config/ColorUI.js | 3 +- config/mp-sdk.js | 25 +++ mp-cu/main.js | 2 +- mp-sdk/index.js | 47 +++++ mp-sdk/js/api.js | 80 -------- mp-sdk/js/tools.js | 330 --------------------------------- mp-sdk/lib/array.js | 157 ++++++++++++++++ mp-sdk/lib/dataType.js | 29 +++ mp-sdk/lib/date.js | 74 ++++++++ mp-sdk/lib/index.js | 15 ++ mp-sdk/lib/object.js | 21 +++ mp-sdk/lib/random.js | 45 +++++ mp-sdk/lib/request.js | 47 +++++ mp-sdk/lib/tools.js | 31 ++++ mp-sdk/wxs/tools.wxs | 98 +--------- project.config.json | 2 +- 18 files changed, 514 insertions(+), 519 deletions(-) rename config.js => config/ColorUI.js (95%) create mode 100644 config/mp-sdk.js create mode 100644 mp-sdk/index.js delete mode 100644 mp-sdk/js/api.js delete mode 100644 mp-sdk/js/tools.js create mode 100644 mp-sdk/lib/array.js create mode 100644 mp-sdk/lib/dataType.js create mode 100644 mp-sdk/lib/date.js create mode 100644 mp-sdk/lib/index.js create mode 100644 mp-sdk/lib/object.js create mode 100644 mp-sdk/lib/random.js create mode 100644 mp-sdk/lib/request.js create mode 100644 mp-sdk/lib/tools.js diff --git a/README.md b/README.md index 6efef38..afe1017 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MP CU -

更新日志(Beta V3.2.9) | 在线文档(完善中...)

+

更新日志(Beta V3.3.0) | 在线文档

@@ -53,13 +53,13 @@ ### 框架配置 -您可单独设置一个 `config.js` 里面配置相关信息,然后暴露方法给 `app.js` 在全局引用 +您可单独设置一个 `config.js` 里面配置相关信息,然后暴露方法给 `app.js` 在全局引用,默认在 `config/ColorUI.js` ```javascript -import { ColorUi } from './config' -App({ - ColorUi, //挂载到app上,此步骤必须要有! +import { colorUI } from './config/ColorUI' +App({ + colorUI, //挂载到app上,此步骤必须要有! onLaunch() { } @@ -84,13 +84,13 @@ App({ 相关文件路径: ``` - +/config // (MP-CU配置文件) /mp-cu // ColorUi主框架的文件夹,不建议修改这里面的文件,以免后续升级时,被覆盖。 /mp-sdk // ColorUi框架的辅助文件夹,封装了一些常用的方法函数、扩展图标库等,按需使用,如不需要,可删除此文件夹。 /packageA // 项目演示demo的分包,此包为模板包路径 /packageB // 项目演示demo的分包,此包为实验室包路径 ... -/config.js // 框架的配置项,建议在此文件中配置,后续更新升级时,不会被覆盖 +/config.js // 框架的配置项,(新版本中,已移除该文件) ``` @@ -117,7 +117,7 @@ App({ > 由于微信小程序无法使用vue.key来全局命名变量,导致习惯vue的用户很不习惯,而且微信内部并不存在像vuex这样的状态管理机制,为满足上述想法,colorUI MP-CU 为您定制了一套自有的扩展包,你可以在全局导入变量、函数、方法,同时您也可以定义您自己的状态(` vuex `). -- colorUI 的配置文件需要您定义成类似以下的内容,参考 `/config.js` 文件。 +- colorUI 的配置文件需要您定义成类似以下的内容,参考 `config/ColorUI.js` 文件。 ```javascript diff --git a/app.js b/app.js index 8d44861..6932b9d 100644 --- a/app.js +++ b/app.js @@ -1,8 +1,13 @@ -import { colorUI } from './config' +import { colorUI } from './config/ColorUI' +import { colorUISdk } from './config/mp-sdk' + App({ - colorUI, //挂载到app上 + colorUI,//挂载到app上 + colorUISdk, onLaunch() { - + //console.log(colorUISdk.isRandom.getRandom(6)) + //console.log(colorUISdk.version) + //console.log(colorUISdk.numberFormat(1000000)) }, onShow() { diff --git a/config.js b/config/ColorUI.js similarity index 95% rename from config.js rename to config/ColorUI.js index d27f0e8..01268df 100644 --- a/config.js +++ b/config/ColorUI.js @@ -1,4 +1,5 @@ -import ColorUI from './mp-cu/main' +//框架核心配置 +import ColorUI from '../mp-cu/main' export const colorUI = new ColorUI({ config: { theme: 'auto', diff --git a/config/mp-sdk.js b/config/mp-sdk.js new file mode 100644 index 0000000..bfe03ad --- /dev/null +++ b/config/mp-sdk.js @@ -0,0 +1,25 @@ +//扩展方法函数配置 +import ColorUISdk from '../mp-sdk/index' +export const colorUISdk = new ColorUISdk({ + //当前环境,produce,dev,host + env: 'dev', + //实际项目版本 + version: '1.0.0', + api: { + //生产环境 + produce: { + url: '请求域名' + }, + //开发环境 + dev: { + url: '请求域名' + }, + //本地环境 + host: { + url: '请求域名' + }, + header: { + "Content-Type": "application/json" + }, + }, +}) diff --git a/mp-cu/main.js b/mp-cu/main.js index f9f5640..aa69dbf 100644 --- a/mp-cu/main.js +++ b/mp-cu/main.js @@ -4,7 +4,7 @@ import { CUStoreInit } from '/store/index' * @author iZaiZaiA (https://github.com/iZaiZaiA) */ -let version = '3.2.9'; +let version = '3.3.0'; let store = {}, sys_info = wx.getSystemInfoSync(); let baseMethod = { diff --git a/mp-sdk/index.js b/mp-sdk/index.js new file mode 100644 index 0000000..99c2a9c --- /dev/null +++ b/mp-sdk/index.js @@ -0,0 +1,47 @@ +import baseLib from './lib/index' +import {request} from './lib/request' + +export default class ColorUISdk { + constructor({env, version, api}) { + //默认配置,防止没自定义配置时,出问题。 + env = env||'dev' + version = version||'1.0.0' + if (!api.header) { + api.header = {}; + api.header['Content-Type'] = 'application/json'; + } + this.env = env; + this.version = version; + this.api = api; + this.ColorUISdkInit(); + } + ColorUISdkInit() { + Object.keys(baseLib).forEach(key => { + if (typeof baseLib[key] === 'function') { + this[key] = baseLib[key] + } + if (typeof baseLib[key] === 'object') { + //二级方法函数 + Object.keys(baseLib[key]).forEach(k => { + if (typeof baseLib[key][k] === 'function' || typeof baseLib[key][k] === 'object') { + this[k] = baseLib[key][k] + } + }) + } + }) + //console.log(this) + } + //发起请求 + request(data, loading = false) { + return new Promise( (resolve, reject) => { + request(data, loading, { + env: this.env, + api: this.api + }).then(res=> { + resolve(res); + }).catch(err=> { + reject(err) + }); + }); + } +} diff --git a/mp-sdk/js/api.js b/mp-sdk/js/api.js deleted file mode 100644 index 4a724c3..0000000 --- a/mp-sdk/js/api.js +++ /dev/null @@ -1,80 +0,0 @@ - -/** - * colorui 的api请求封装 - * @param API_BASE_URL 这是你的api根地址,就像请求 http://music.163.com/music/hello?data=123 ,根地址为 http://music.163.com - * @param url 去除根地址的剩余url - * @param method 请求方式 - * @param data 参数 - * @param hasCheck 是否需要拦截 - * - * 具体介绍请看readme - */ -//import { culog } from './log' - -const API_BASE_URL = '' - -const request = (url, method, data, hasCheck = false) => { - let _url = API_BASE_URL + url - wx.showLoading({ - title:'请求中' - }) - return new Promise((resolve, reject) => { - //culog(`发送网络请求,url : ${_url} ,method : ${method} , data : ${JSON.stringify(data)} token :${wx.getStorageSync('token')}`) - wx.request({ - url: _url, - method: method, - data: data, - header: { - "Content-Type": "application/json", - 'token': '' //这里处理你的header 请求 - }, - timeout: 15000, - success(request) { - if (!hasCheck) { - if (request.data.code == 200) { - resolve(request.data) - } else { - //可以在这里添加你的返回错误码 - wx.showToast({ - icon: 'none', - title: `api接口发生错误了o(╥﹏╥)o` - }) - } - } else { - resolve(request.data) - } - }, - fail(error) { - reject(error) - }, - complete() { - wx.hideLoading() - } - }) - }) -} - - -Promise.prototype.finally = function (callback) { - let Promise = this.constructor; - return this.then( - function (value) { - Promise.resolve(callback()).then( - function () { - return value; - } - ); - }, - function (reason) { - Promise.resolve(callback()).then( - function () { - throw reason; - } - ); - } - ); -} - -module.exports = { - request, -} \ No newline at end of file diff --git a/mp-sdk/js/tools.js b/mp-sdk/js/tools.js deleted file mode 100644 index cb4703d..0000000 --- a/mp-sdk/js/tools.js +++ /dev/null @@ -1,330 +0,0 @@ -module.exports = { - sys_info: wx.getSystemInfoSync(), // 获取系统信息 - sys_statusBar: wx.getSystemInfoSync().statusBarHeight, - sys_navBar: wx.getSystemInfoSync().statusBarHeight + 50, - // 获取胶囊信息 - sys_capsule() { - let capsule = wx.getMenuButtonBoundingClientRect(); - if (!capsule) { - console.error('getMenuButtonBoundingClientRect error'); - capsule = { bottom: 56, height: 32, left: 278, right: 365, top: 24, width: 87 }; - } - return capsule; - }, - //数组操作 - isArr: { - //数组中是否存在 - ifItemKey(arr, item) { - return arr.indexOf(item) !== -1; - }, - //获取数组索引 - getItemIndex(arr,item) { - return arr.indexOf(item); - }, - //移除数组中指定元素 - delItem(arr, item) { - let index = arr.indexOf(item); - let items = [...arr]; - items.splice(index, 1); - return [...items]; - }, - //移除数组中其它元素 - delItemKey(arr, item) { - let index = arr.indexOf(item); - let items = [...arr]; - for (let i = 0; i < arr.length; i++) { - if (index !== i) items.splice(i, 1); - } - return [...items]; - }, - //移除数组中左边的元素 - delItemLeft(arr, item) { - let index = arr.indexOf(item); - let items = [...arr]; - for (let i = 0; i < arr.length; i++) { - if (index >= i) return; - items.splice(i, 1); - } - return [...items]; - }, - //移除数组中右边的元素 - delItemRight(arr, item) { - let index = arr.indexOf(item); - let items = [...arr]; - for (let i = 0; i < arr.length; i++) { - if (index > i) items.splice(i, 1); - } - return [...items]; - }, - //替换数组中两个元素的位置 - replaceItem(arr, item_a, item_b) { - let index_a = arr.indexOf(item_a); - let index_b = arr.indexOf(item_b); - let items = [...arr]; - items.splice(index_a, 1); - items.splice(index_b, 0, item_a); - return [...items]; - }, - //数组中是否存在 - ifKey(arr, keyName ,key) { - for (let i = 0; i< arr.length; i++) { - if (arr[i][keyName] === key) { - return true; - } - } - return false; - }, - //获取数组索引 - getIndex(arr, keyName, key) { - for (let i = 0; i< arr.length; i++) { - if (arr[i][keyName] === key) { - return i; - } - } - return false; - }, - //移除数组中指定元素 - del(arr, keyName, key) { - let s = false, name = '', ArrData = []; - for (let i = 0; i< arr.length; i++) { - if (arr[i][keyName] !== key) { - if (!s) name = arr[i][keyName]; - ArrData.push(arr[i]); - } else { - s = true; - } - } - return {key: name, arr: ArrData}; - }, - //移除数组中其它元素 - delKey(arr, keyName, key) { - let ArrData = []; - for (let i = 0; i < arr.length; i++) { - if (arr[i][keyName] === key) { - ArrData.push(arr[i]); - } - } - return ArrData; - }, - //移除数组中左边的元素 - delLeft(arr, keyName, key) { - let s = false, ArrData = []; - for (let i = 0; i< arr.length; i++) { - if (arr[i][keyName] === key) { - s = true; - ArrData.push(arr[i]); - } else { - if (s) ArrData.push(arr[i]); - } - } - return ArrData; - }, - //移除数组中右边的元素 - delRight(arr, keyName, key) { - let s = true, ArrData = []; - for (let i = 0; i< arr.length; i++) { - if (arr[i][keyName] === key) { - s = false; - ArrData.push(arr[i]); - } else { - if (s) ArrData.push(arr[i]); - } - } - return ArrData; - }, - //数组或对象深拷贝 - nextArr(arr) { - return JSON.parse(JSON.stringify(arr)); - }, - isForEach(arr, fn) { - if (!arr.length || !fn) return; - let i = -1, len = arr.length; - while (++i < len) { - let item = arr[i]; - fn(item, i, arr); - } - }, - //得到两个数组的交集, 两个数组的元素为数值或字符串 - intersection(arr1, arr2) { - let len = Math.min(arr1.length, arr2.length) - let i = -1, res = []; - while (++i < len) { - if (arr1.indexOf(arr2[i]) > -1) res.push(arr2[i]) - } - return res - }, - //得到两个数组的并集, 两个数组的元素为数值或字符串 - getUnion(arr1, arr2) { - return Array.from(new Set([...arr1, ...arr2])); - }, - //判断要查询的数组是否至少有一个元素包含在目标数组中 - hasOneOf(arr1, arr2) { - return arr1.some(_ => arr2.indexOf(_) > -1); - }, - //判断下级数组是否为空 - hasChild(arr,key = 'children') { - return arr[key] && arr[key].length !== 0 - } - }, - //日期时间操作 - isDate: { - new_date: new Date() , - year: new Date().getFullYear(), //当前年 - month: new Date().getMonth(), //当前月 - date: new Date().getDate(), //当前日 - day: new Date().getDay(), //今天本周的第几天 - //获取当前的日期 - currentDate() { - return this.formatDate(new Date()); - }, - //获得本周的开端日期 - weekStartDate() { - return this.formatDate(new Date(this.year,this.month, this.date - this.day)); - }, - //获得本周的停止日期 - weekEndDate() { - return this.formatDate(new Date(this.year,this.month, this.date + (6 - this.day))); - }, - //获得上周的停止日期 - weekLastEndDate() { - return this.formatDate(new Date(this.year,this.month, this.date + (6 - this.day - 7))); - }, - //获得本月的开端日期 - monthStartDate() { - return this.formatDate(new Date(this.year,this.month, 1)); - }, - //获得本月的停止日期 - monthEndDate() { - return this.formatDate(new Date(this.year,this.month, this.monthDays(this.month))); - }, - //获得上月开端时候 - monthLastStartDate() { - return this.formatDate(new Date(this.year,this.month - 1, 1)); - }, - //获得上月停止时候 - monthLastEndDate() { - const day = new Date(this.year, this.month, 0).getDate(); - return this.formatDate(new Date(this.year,this.month - 1, day)); - }, - //获取今年的开头 - currentYear() { - return this.new_date.getFullYear() + "-01-01"; - }, - //获取今天之前的多少天的日期 - DateCountDay(Day) { - return this.formatDate(new Date().setDate(this.date + Day)); - }, - //获得某月的天数 - monthDays(month) { - let StartDate = new Date(this.year, month, 1); - let EndDate = new Date(this.year, month + 1, 1); - return (StartDate - EndDate)/(1000 * 60 * 60 * 24); - }, - //格局化日期:yyyy-MM-dd - formatDate(date) { - let y = date.getFullYear(); - let m = date.getMonth() + 1; - let d = date.getDate(); - if (m < 10) m = "0" + m; - if (d < 10) d = "0" + d; - return (y + "-" + m + "-" + d); - }, - //字段拼接 - substrDataStr(date) { - let strArr = []; - strArr.push(date.substr(0, 4)) - strArr.push(date.substr(4, 2)) - strArr.push(date.substr(6, 2)) - return strArr - } - }, - //对象操作 - isObj: { - //判断一个对象是否存在key - hasKey(obj, key) { - //如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性 - //如果没有传入key这个参数,则判断obj对象是否有键值对 - if (key) return key in obj; - let keysArr = Object.keys(obj); - return keysArr.length; - }, - // 判断两个对象是否相等,这两个对象的值只能是数字或字符串 - objEqual(obj1, obj2) { - const keysArr1 = Object.keys(obj1) - const keysArr2 = Object.keys(obj2) - if (keysArr1.length !== keysArr2.length) return false - else if (keysArr1.length === 0 && keysArr2.length === 0) return true - else return !keysArr1.some(key => obj1[key] != obj2[key]) - }, - }, - //随机字符串操作 - isRandom: { - NUM: '0123456789', - XEU: 'abcdefghijklmnopqrstuvwxyz', - DEU: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - //生成随机字符串,默认为全部类型 - getRandom(num, chars) { - if (!chars) chars = this.NUM + this.XEU + this.DEU - let maxPos = chars.length, value = ''; - for (let i = 0; i < num; i++) { - value += chars.charAt(Math.floor(Math.random() * maxPos)); - } - return value; - }, - //数字 - getRandomNUM(num) { - return this.getRandom(num, this.NUM); - }, - //小写字母 - getRandomXEU(num) { - return this.getRandom(num, this.XEU); - }, - //大写字母 - getRandomDEU(num) { - return this.getRandom(num, this.DEU); - }, - //数字+ 小写字母 - getRandomNUM_XEU(num) { - return this.getRandom(num, this.NUM + this.XEU); - }, - //数字 + 大写字母 - getRandomNUM_DEU(num) { - return this.getRandom(num, this.NUM + this.DEU); - }, - //小写字母 + 大写字母 - getRandomXEU_DEU(num) { - return this.getRandom(num, this.XEU + this.DEU); - }, - //范围随机数 - getRandomFrom(lower,upper) { - return Math.floor(Math.random() * (upper - lower + 1) + lower); - } - }, - //判断数据类型 - isDataType: { - ifNull(value) { - return value === undefined || value === null; - }, - ifBoolean(value) { - return typeof value == 'boolean'; - }, - ifFunction(value) { - return typeof value == 'function'; - }, - ifObject(value) { - return Object.prototype.toString.call(value) === '[object Object]'; - }, - ifArray(value) { - return value instanceof Array || Object.prototype.toString.call(value) === '[object Array]'; - }, - ifDate(value) { - return value instanceof Date || Object.prototype.toString.call(value) === '[object Date]'; - }, - ifNumber(value) { - return value instanceof Number || Object.prototype.toString.call(value) === '[object Number]'; - }, - ifString(value) { - return value instanceof String || Object.prototype.toString.call(value) === '[object String]'; - } - }, -} \ No newline at end of file diff --git a/mp-sdk/lib/array.js b/mp-sdk/lib/array.js new file mode 100644 index 0000000..c123009 --- /dev/null +++ b/mp-sdk/lib/array.js @@ -0,0 +1,157 @@ +module.exports = { + //数组操作 + isArr: { + //数组中是否存在 + ifItemKey(arr, item) { + return arr.indexOf(item) !== -1; + }, + //数组或对象深拷贝 + nextArr(arr) { + return JSON.parse(JSON.stringify(arr)); + }, + //获取数组索引 + getItemIndex(arr, item) { + return arr.indexOf(item); + }, + //移除数组中指定元素 + delItem(arr, item) { + let index = arr.indexOf(item); + let items = [...arr]; + items.splice(index, 1); + return [...items]; + }, + //移除数组中其它元素 + delItemKey(arr, item) { + let index = arr.indexOf(item); + let items = [...arr]; + for (let i = 0; i < arr.length; i++) { + if (index !== i) items.splice(i, 1); + } + return [...items]; + }, + //移除数组中左边的元素 + delItemLeft(arr, item) { + let index = arr.indexOf(item); + let items = [...arr]; + for (let i = 0; i < arr.length; i++) { + if (index >= i) return; + items.splice(i, 1); + } + return [...items]; + }, + //移除数组中右边的元素 + delItemRight(arr, item) { + let index = arr.indexOf(item); + let items = [...arr]; + for (let i = 0; i < arr.length; i++) { + if (index > i) items.splice(i, 1); + } + return [...items]; + }, + //替换数组中两个元素的位置 + replaceItem(arr, item_a, item_b) { + let index_a = arr.indexOf(item_a); + let index_b = arr.indexOf(item_b); + let items = [...arr]; + items.splice(index_a, 1); + items.splice(index_b, 0, item_a); + return [...items]; + }, + //数组中是否存在 + ifKey(arr, keyName, key) { + for (let i = 0; i < arr.length; i++) { + if (arr[i][keyName] === key) { + return true; + } + } + return false; + }, + //获取数组索引 + getIndex(arr, keyName, key) { + for (let i = 0; i < arr.length; i++) { + if (arr[i][keyName] === key) { + return i; + } + } + return false; + }, + //移除数组中指定元素 + del(arr, keyName, key) { + let s = false, name = '', ArrData = []; + for (let i = 0; i < arr.length; i++) { + if (arr[i][keyName] !== key) { + if (!s) name = arr[i][keyName]; + ArrData.push(arr[i]); + } else { + s = true; + } + } + return {key: name, arr: ArrData}; + }, + //移除数组中其它元素 + delKey(arr, keyName, key) { + let ArrData = []; + for (let i = 0; i < arr.length; i++) { + if (arr[i][keyName] === key) { + ArrData.push(arr[i]); + } + } + return ArrData; + }, + //移除数组中左边的元素 + delLeft(arr, keyName, key) { + let s = false, ArrData = []; + for (let i = 0; i < arr.length; i++) { + if (arr[i][keyName] === key) { + s = true; + ArrData.push(arr[i]); + } else { + if (s) ArrData.push(arr[i]); + } + } + return ArrData; + }, + //移除数组中右边的元素 + delRight(arr, keyName, key) { + let s = true, ArrData = []; + for (let i = 0; i < arr.length; i++) { + if (arr[i][keyName] === key) { + s = false; + ArrData.push(arr[i]); + } else { + if (s) ArrData.push(arr[i]); + } + } + return ArrData; + }, + isForEach(arr, fn) { + if (!arr.length || !fn) return; + let i = -1, len = arr.length; + while (++i < len) { + let item = arr[i]; + fn(item, i, arr); + } + }, + //得到两个数组的交集, 两个数组的元素为数值或字符串 + intersection(arr1, arr2) { + let len = Math.min(arr1.length, arr2.length) + let i = -1, res = []; + while (++i < len) { + if (arr1.indexOf(arr2[i]) > -1) res.push(arr2[i]) + } + return res + }, + //得到两个数组的并集, 两个数组的元素为数值或字符串 + getUnion(arr1, arr2) { + return Array.from(new Set([...arr1, ...arr2])); + }, + //判断要查询的数组是否至少有一个元素包含在目标数组中 + hasOneOf(arr1, arr2) { + return arr1.some(_ => arr2.indexOf(_) > -1); + }, + //判断下级数组是否为空 + hasChild(arr, key = 'children') { + return arr[key] && arr[key].length !== 0 + } + } +} diff --git a/mp-sdk/lib/dataType.js b/mp-sdk/lib/dataType.js new file mode 100644 index 0000000..a1d824a --- /dev/null +++ b/mp-sdk/lib/dataType.js @@ -0,0 +1,29 @@ +module.exports = { + //判断数据类型 + isDataType: { + ifNull(value) { + return value === undefined || value === null || value === ''; + }, + ifBoolean(value) { + return typeof value == 'boolean'; + }, + ifFunction(value) { + return typeof value == 'function'; + }, + ifObject(value) { + return Object.prototype.toString.call(value) === '[object Object]'; + }, + ifArray(value) { + return value instanceof Array || Object.prototype.toString.call(value) === '[object Array]'; + }, + ifDate(value) { + return value instanceof Date || Object.prototype.toString.call(value) === '[object Date]'; + }, + ifNumber(value) { + return value instanceof Number || Object.prototype.toString.call(value) === '[object Number]'; + }, + ifString(value) { + return value instanceof String || Object.prototype.toString.call(value) === '[object String]'; + } + } +} diff --git a/mp-sdk/lib/date.js b/mp-sdk/lib/date.js new file mode 100644 index 0000000..062f2c8 --- /dev/null +++ b/mp-sdk/lib/date.js @@ -0,0 +1,74 @@ +//日期时间操作 +module.exports = { + isDate: { + new_date: new Date() , + year: new Date().getFullYear(), //当前年 + month: new Date().getMonth(), //当前月 + date: new Date().getDate(), //当前日 + day: new Date().getDay(), //今天本周的第几天 + //获取当前的日期 + currentDate() { + return this.formatDate(new Date()); + }, + //获得本周的开端日期 + weekStartDate() { + return this.formatDate(new Date(this.year,this.month, this.date - this.day)); + }, + //获得本周的停止日期 + weekEndDate() { + return this.formatDate(new Date(this.year,this.month, this.date + (6 - this.day))); + }, + //获得上周的停止日期 + weekLastEndDate() { + return this.formatDate(new Date(this.year,this.month, this.date + (6 - this.day - 7))); + }, + //获得本月的开端日期 + monthStartDate() { + return this.formatDate(new Date(this.year,this.month, 1)); + }, + //获得本月的停止日期 + monthEndDate() { + return this.formatDate(new Date(this.year,this.month, this.monthDays(this.month))); + }, + //获得上月开端时候 + monthLastStartDate() { + return this.formatDate(new Date(this.year,this.month - 1, 1)); + }, + //获得上月停止时候 + monthLastEndDate() { + const day = new Date(this.year, this.month, 0).getDate(); + return this.formatDate(new Date(this.year,this.month - 1, day)); + }, + //获取今年的开头 + currentYear() { + return this.new_date.getFullYear() + "-01-01"; + }, + //获取今天之前的多少天的日期 + DateCountDay(Day) { + return this.formatDate(new Date().setDate(this.date + Day)); + }, + //获得某月的天数 + monthDays(month) { + let StartDate = new Date(this.year, month, 1); + let EndDate = new Date(this.year, month + 1, 1); + return (StartDate - EndDate)/(1000 * 60 * 60 * 24); + }, + //格局化日期:yyyy-MM-dd + formatDate(date) { + let y = date.getFullYear(); + let m = date.getMonth() + 1; + let d = date.getDate(); + if (m < 10) m = "0" + m; + if (d < 10) d = "0" + d; + return (y + "-" + m + "-" + d); + }, + //字段拼接 + substrDataStr(date) { + let strArr = []; + strArr.push(date.substr(0, 4)) + strArr.push(date.substr(4, 2)) + strArr.push(date.substr(6, 2)) + return strArr + } + }, +} \ No newline at end of file diff --git a/mp-sdk/lib/index.js b/mp-sdk/lib/index.js new file mode 100644 index 0000000..3684fdc --- /dev/null +++ b/mp-sdk/lib/index.js @@ -0,0 +1,15 @@ +import dataType from './dataType' +import array from './array' +import object from './object' +import date from './date' +import random from './random' +import tools from './tools' + +module.exports = { + dataType: dataType, + array: array, + object: object, + date: date, + random: random, + tools: tools, +} diff --git a/mp-sdk/lib/object.js b/mp-sdk/lib/object.js new file mode 100644 index 0000000..6c6ec88 --- /dev/null +++ b/mp-sdk/lib/object.js @@ -0,0 +1,21 @@ +module.exports = { + //对象操作 + isObj: { + //判断一个对象是否存在key + hasKey(obj, key) { + //如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性 + //如果没有传入key这个参数,则判断obj对象是否有键值对 + if (key) return key in obj; + let keysArr = Object.keys(obj); + return keysArr.length; + }, + // 判断两个对象是否相等,这两个对象的值只能是数字或字符串 + objEqual(obj1, obj2) { + const keysArr1 = Object.keys(obj1) + const keysArr2 = Object.keys(obj2) + if (keysArr1.length !== keysArr2.length) return false + else if (keysArr1.length === 0 && keysArr2.length === 0) return true + else return !keysArr1.some(key => obj1[key] != obj2[key]) + }, + } +} diff --git a/mp-sdk/lib/random.js b/mp-sdk/lib/random.js new file mode 100644 index 0000000..b82a82a --- /dev/null +++ b/mp-sdk/lib/random.js @@ -0,0 +1,45 @@ +module.exports = { + //随机字符串操作 + isRandom: { + NUM: '0123456789', + XEU: 'abcdefghijklmnopqrstuvwxyz', + DEU: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + //生成随机字符串,默认为全部类型 + getRandom(num, chars) { + if (!chars) chars = this.NUM + this.XEU + this.DEU + let maxPos = chars.length, value = ''; + for (let i = 0; i < num; i++) { + value += chars.charAt(Math.floor(Math.random() * maxPos)); + } + return value; + }, + //数字 + getRandomNUM(num) { + return this.getRandom(num, this.NUM); + }, + //小写字母 + getRandomXEU(num) { + return this.getRandom(num, this.XEU); + }, + //大写字母 + getRandomDEU(num) { + return this.getRandom(num, this.DEU); + }, + //数字+ 小写字母 + getRandomNUM_XEU(num) { + return this.getRandom(num, this.NUM + this.XEU); + }, + //数字 + 大写字母 + getRandomNUM_DEU(num) { + return this.getRandom(num, this.NUM + this.DEU); + }, + //小写字母 + 大写字母 + getRandomXEU_DEU(num) { + return this.getRandom(num, this.XEU + this.DEU); + }, + //范围随机数 + getRandomFrom(lower, upper) { + return Math.floor(Math.random() * (upper - lower + 1) + lower); + } + } +} \ No newline at end of file diff --git a/mp-sdk/lib/request.js b/mp-sdk/lib/request.js new file mode 100644 index 0000000..123a5a2 --- /dev/null +++ b/mp-sdk/lib/request.js @@ -0,0 +1,47 @@ +//发起请求 +const request = (promise, loading = false, config) => { + return new Promise( (resolve, reject) => { + if (['produce','dev','host'].includes(config.env)) { + if (loading) { + wx.showLoading({ + title:'请求中', + mask: true + }) + } + wx.request({ + url: config.api[config.env].url + promise.url, + method: promise.method || 'GET', + header: promise.header || config.api.header, + data: promise.data, + success: res => { + if (res.statusCode === 200) { + resolve(res.data); + } else { + wx.showToast({ + title: res.msg, + icon: 'none', + duration: 2000 + }); + reject(res.msg) + } + }, + fail: err => { + wx.showToast({title: "网络异常",icon: 'none'}); + reject(err) + }, + complete() { + if (loading) { + wx.hideLoading() + } + } + }); + } else { + wx.showToast({title: "环境异常",icon: 'none'}); + reject({msg: "环境异常"}) + } + }); +}; + +module.exports = { + request: request +} diff --git a/mp-sdk/lib/tools.js b/mp-sdk/lib/tools.js new file mode 100644 index 0000000..97c27bd --- /dev/null +++ b/mp-sdk/lib/tools.js @@ -0,0 +1,31 @@ +module.exports = { + //金额处理:保留几位小数,不四舍五入(关于金额数值的处理用这个方法,以防金额计算出错) + priceFormat(price, decimal=2) { + if (price) { + let price = (price * 100) / 100; + return parseFloat(price) + .toFixed(decimal) + .toString() + .split('') + .reverse() + .join('') + .replace(/(\d{3})/g, '$1,') + .replace(/\,$/, '') + .split('') + .reverse() + .join('') + } else { + return 0; + } + }, + //数字格式化 + numberFormat(num) { + if (num > 1000 && num < 10000) { + return Math.floor(num / 1000) + 'k'; + } else if (num > 10000) { + return Math.floor(num / 10000) + 'W'; + } else { + return num; + } + }, +} diff --git a/mp-sdk/wxs/tools.wxs b/mp-sdk/wxs/tools.wxs index 9171b23..a7d7163 100644 --- a/mp-sdk/wxs/tools.wxs +++ b/mp-sdk/wxs/tools.wxs @@ -1,14 +1,9 @@ //tools.wxs文件 - indexOf = function (arr, value) { - if (arr.indexOf(value) < 0) { - return false; - } else { - return true; - } + return arr.indexOf(value) >= 0; } -// 数字格式化 +//数字格式化 numberFormat = function (Num) { if (Num > 1000 && Num < 10000) { return Math.floor(Num / 1000) + 'k'; @@ -19,94 +14,7 @@ numberFormat = function (Num) { } } -/** - * 金额处理:保留几位小数,不四舍五入(关于金额数值的处理用这个方法,以防金额计算出错) - * @param num 金额 - * @param decimal 保留位数 - * @returns {string} - */ -moneyFormat = function (num, decimal) { - if (num) { - num = num.toString(); - let index = num.indexOf('.') - if (index !== -1) { - num = num.substring(0, decimal + index + 1) - } else { - num = num.substring(0) - } - return parseFloat(num).toFixed(decimal) - } else { - return 0; - } -} - -//将一个浮点数转成整数,返回整数和倍数。如 3.14 >> 314,倍数是 100 -toInteger = function (floatNum) { - let ret = {times: 1, num: 0}; - //判断obj是否为一个整数 - if (Math.floor(floatNum) === floatNum) { - ret.num = floatNum; - return ret - } - let strfi = floatNum + ''; - let dotPos = strfi.indexOf('.'); - let len = strfi.substr(dotPos + 1).length; - let times = Math.pow(10, len); - let intNum = parseInt(floatNum * times + 0.5, 10); - ret.times = times; - ret.num = intNum; - return ret -} - -/* - * 核心方法,实现加减乘除运算,确保不丢失精度 - * 思路:把小数放大为整数(乘),进行算术运算,再缩小为小数(除) - * @param a {number} 运算数1 - * @param b {number} 运算数2 - * @param op {string} 运算类型,有加减乘除 - * @param decimal {number} 保留位数 - */ -operation = function (a, b, op, decimal) { - let o1 = toInteger(a), o2 = toInteger(b); - let n1 = o1.num, n2 = o2.num, t1 = o1.times, t2 = o2.times; - let max = t1 > t2 ? t1 : t2, result = null, res = 0; - switch (op) { - case '+': - if (t1 === t2) { // 两个小数位数相同 - result = n1 + n2 - } else if (t1 > t2) { // o1 小数位 大于 o2 - result = n1 + n2 * (t1 / t2) - } else { // o1 小数位 小于 o2 - result = n1 * (t2 / t1) + n2 - } - res = result / max; - case '-': - if (t1 === t2) { - result = n1 - n2 - } else if (t1 > t2) { - result = n1 - n2 * (t1 / t2) - } else { - result = n1 * (t2 / t1) - n2 - } - res = result / max; - case '*': - result = (n1 * n2) / (t1 * t2); - res = result; - case '/': - result = (n1 / n2) * (t2 / t1); - res = result - } - //返回数据 - if (decimal) { - return moneyFormat(res, decimal); - } else { - return res; - } -} - module.exports = { - numberFormat: numberFormat, indexOf: indexOf, - moneyFormat: moneyFormat, - operation: operation + numberFormat: numberFormat } \ No newline at end of file diff --git a/project.config.json b/project.config.json index 93cb123..7235e48 100644 --- a/project.config.json +++ b/project.config.json @@ -4,7 +4,7 @@ "ignore": [] }, "setting": { - "urlCheck": true, + "urlCheck": false, "es6": true, "enhance": true, "postcss": true,