diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json
new file mode 100644
index 0000000..81f13f4
--- /dev/null
+++ b/.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"
+ }
+ ]
+}
diff --git a/App.vue b/App.vue
index 5f7948d..75112a1 100644
--- a/App.vue
+++ b/App.vue
@@ -16,6 +16,7 @@
}
-
diff --git a/main.js b/main.js
index d3d6850..0d2e54c 100644
--- a/main.js
+++ b/main.js
@@ -1,25 +1,29 @@
-import App from './App'
-
-// #ifndef VUE3
-import Vue from 'vue'
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
- ...App
+ ...App
})
-app.$mount()
-// #endif
-
-// #ifdef VUE3
-import { createSSRApp } from 'vue'
-export function createApp() {
- const app = createSSRApp(App)
- return {
- app
- }
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import {
+ createSSRApp
+} from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ return {
+ app
+ }
}
-// #endif
-
-// main.js
-import uView from "uview-ui";
-Vue.use(uView);
\ No newline at end of file
+// #endif
+
+// main.js
+import uView from "uview-ui";
+Vue.use(uView);
+import util from "@/utils/util";
+Vue.prototype.util = util;
diff --git a/packageA/pages/generalList/generalList.vue b/packageA/pages/generalList/generalList.vue
index 8183fd0..a17f51e 100644
--- a/packageA/pages/generalList/generalList.vue
+++ b/packageA/pages/generalList/generalList.vue
@@ -1,22 +1,97 @@
-
-
-
-
-
-
-
-
-
diff --git a/packageA/pages/generalPatrol/generalPatrol.vue b/packageA/pages/generalPatrol/generalPatrol.vue
index 31751a0..6f80ea1 100644
--- a/packageA/pages/generalPatrol/generalPatrol.vue
+++ b/packageA/pages/generalPatrol/generalPatrol.vue
@@ -3,15 +3,16 @@
-
+
-
+
江苏省苏州市通园路66号
- 重新获取
+ 重新获取
@@ -25,10 +26,10 @@
- 确认选择
+ 确认选择
@@ -44,15 +45,8 @@
contentshow: false,
action: "",
location: {},
- list: [{
- value: '1',
- label: '江'
- },
- {
- value: '2',
- label: '湖'
- }
- ],
+ plist: [],
+ list: [],
form: {
type: "",
content: "",
@@ -63,9 +57,19 @@
height: 300
}
},
+ onLoad() {
+ var that = this;
+ this.loadType({
+ 'number': "general_type",
+ }, function(res) {
+ that.plist = res;
+ });
+ },
onReady() {
+ this._mapContext = uni.createMapContext("map", this);
let that = this;
uni.getLocation({
+ type: "gcj02",
success(res) {
that.location = res;
}
@@ -79,15 +83,66 @@
},
methods: {
+ loadType(data, call) {
+ let that = this;
+ this.util.request({
+ api: '/api/admin/parameter/show',
+ data: data,
+ utilSuccess: function(res) {
+ call(res.detail)
+ },
+ utilFail: function(res) {
+ this.util.alert(res);
+ }
+ });
+ },
+ toshowMap() {
+ this.showMap = true;
+ this.addMaker();
+ },
submit() {},
confirmType(e) {
+ var that = this;
this.form.type = e[0].value
this.form.typeName = e[0].label
+ this.loadType({
+ pid: e[0].value
+ }, function(res) {
+ that.list = res;
+ })
},
confirmContent(e) {
this.form.content = e[0].value
this.form.contentName = e[0].label
},
+ addMaker() {
+ let img = "../../../static/img/location.png"
+ const marker = {
+ id: 1,
+ iconPath: img,
+ width: 50,
+ height: 50,
+ label: {
+ width: 50,
+ height: 30,
+ borderWidth: 1,
+ borderRadius: 10,
+ bgColor: '#ffffff'
+ },
+ latitude: this.location.latitude,
+ longitude: this.location.longitude
+ };
+ this._mapContext.addMarkers({
+ marker,
+ clear: true,
+ complete(res) {
+ console.log('addMarkers', res)
+ },
+ fail(res) {
+ console.log('fail', res)
+ }
+ });
+ }
}
}
diff --git a/packageB/pages/dailyInspection/dailyInspection.vue b/packageB/pages/dailyInspection/dailyInspection.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/packageB/pages/dailyInspection/dailyInspection.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages.json b/pages.json
index 8723b11..d1c0f11 100644
--- a/pages.json
+++ b/pages.json
@@ -3,12 +3,30 @@
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
},
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+
+ {
+ "path": "pages/login/login",
+ "style": {
+ "navigationBarTitleText": "巡查登录",
+ "enablePullDownRefresh": false,
+ "navigationStyle": "custom"
+ }
+
+ },
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "巡查养护",
"navigationStyle": "custom"
}
+ }, {
+ "path": "pages/mine/mine",
+ "style": {
+ "navigationBarTitleText": "我的",
+ "enablePullDownRefresh": false,
+ "navigationStyle": "custom"
+ }
+
}
],
"subPackages": [{
@@ -29,6 +47,16 @@
"navigationStyle": "custom"
}
+ }]
+ }, {
+ "root": "packageB/pages",
+ "pages": [{
+ "path": "dailyInspection/dailyInspection",
+ "style": {
+ "navigationBarTitleText": "日常监管巡查",
+ "enablePullDownRefresh": false
+ }
+
}]
}],
"globalStyle": {
diff --git a/pages/index/index.vue b/pages/index/index.vue
index 1d95a15..261f1d1 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -1,24 +1,47 @@
+
+
+ 当前登录人:张三
+
+
-
-
- 通用巡查
+
+
+
+
+ 雨管巡查
-
-
+
+
+
+ 雨管养护
+
-
-
+
+
+
+
+
+
+
+ 日常监督巡查
+
-
-
+
+
+
+ 通用巡查
+
-
-
+
+
+
+ 我的
+
@@ -34,9 +57,13 @@
},
methods: {
- togeneral() {
+ toview(type) {
+ let url = "/packageA/pages/generalPatrol/generalPatrol";
+ if (type == 2) {
+ url = "/pages/mine/mine"
+ }
uni.navigateTo({
- url: "/packageA/pages/generalPatrol/generalPatrol"
+ url: url
})
}
}
@@ -53,16 +80,33 @@
}
.demo-layout {
- height: 80rpx;
border-radius: 8rpx;
- line-height: 80rpx;
text-align: center;
+ display: flex;
+ flex-direction: column;
+ padding: 20rpx 0rpx;
+ }
+
+ .navtxt {
+ margin-top: 20rpx;
+ color: #000000;
+ }
+
+ .iconfont {
+ color: #338de3;
+ font-size: 64rpx;
+
}
.bg-purple {
background: #d3dce6;
}
+ .bg-blue {
+ background: #338de3;
+ color: #fff;
+ }
+
.bg-purple-light {
background: #e5e9f2;
}
diff --git a/pages/login/login.vue b/pages/login/login.vue
new file mode 100644
index 0000000..4f55e70
--- /dev/null
+++ b/pages/login/login.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/mine.vue b/pages/mine/mine.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/pages/mine/mine.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/css/iconfont.css b/static/css/iconfont.css
new file mode 100644
index 0000000..521dc61
--- /dev/null
+++ b/static/css/iconfont.css
@@ -0,0 +1,495 @@
+@font-face {
+ font-family: 'iconfont'; /* Project id 3452172 */
+ src: url('//at.alicdn.com/t/font_3452172_uf51typgi.woff2?t=1654567019358') format('woff2'),
+ url('//at.alicdn.com/t/font_3452172_uf51typgi.woff?t=1654567019358') format('woff'),
+ url('//at.alicdn.com/t/font_3452172_uf51typgi.ttf?t=1654567019358') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-guanxianyanghu:before {
+ content: "\e8a4";
+}
+
+.icon-guanxianxuncha:before {
+ content: "\e8a5";
+}
+
+.icon-bengcanshuxinxi:before {
+ content: "\e76d";
+}
+
+.icon-dianchaxun:before {
+ content: "\e76e";
+}
+
+.icon-daoludingwei:before {
+ content: "\e76f";
+}
+
+.icon-bilichi:before {
+ content: "\e770";
+}
+
+.icon-fuhaohuafanganguanli:before {
+ content: "\e771";
+}
+
+.icon-dianxianbiaozhundaima:before {
+ content: "\e772";
+}
+
+.icon-fangda:before {
+ content: "\e773";
+}
+
+.icon-fuhaoguanli:before {
+ content: "\e774";
+}
+
+.icon-fuzhuxianshuxingshuju:before {
+ content: "\e775";
+}
+
+.icon-duobianxingchaxun:before {
+ content: "\e776";
+}
+
+.icon-fushuwuweihu:before {
+ content: "\e777";
+}
+
+.icon-erweiditu:before {
+ content: "\e778";
+}
+
+.icon-gongchengxinxishuju:before {
+ content: "\e779";
+}
+
+.icon-guanxianbiaozhu:before {
+ content: "\e77a";
+}
+
+.icon-juliceliang:before {
+ content: "\e77b";
+}
+
+.icon-manyou:before {
+ content: "\e77c";
+}
+
+.icon-juxingchaxun:before {
+ content: "\e77d";
+}
+
+.icon-houyishitu:before {
+ content: "\e77e";
+}
+
+.icon-guandianbiaozhu:before {
+ content: "\e77f";
+}
+
+.icon-jieliusheshijichushuju:before {
+ content: "\e780";
+}
+
+.icon-jianchajingjichushuju:before {
+ content: "\e781";
+}
+
+.icon-paishuiguandianshuju:before {
+ content: "\e782";
+}
+
+.icon-paishuiguanxianshuju:before {
+ content: "\e783";
+}
+
+.icon-paifangkoujichushuju:before {
+ content: "\e784";
+}
+
+.icon-paishuiqujichushuju:before {
+ content: "\e785";
+}
+
+.icon-qingping:before {
+ content: "\e786";
+}
+
+.icon-quantuxianshi:before {
+ content: "\e787";
+}
+
+.icon-quexianjiancechaxun:before {
+ content: "\e788";
+}
+
+.icon-sheshimianshuxingshuju:before {
+ content: "\e789";
+}
+
+.icon-qianyishitu:before {
+ content: "\e78a";
+}
+
+.icon-paishuibengzhanjichushuju:before {
+ content: "\e78b";
+}
+
+.icon-sheshikongjianfanweishuju:before {
+ content: "\e78c";
+}
+
+.icon-sanweiditu:before {
+ content: "\e78d";
+}
+
+.icon-shiguyinhuanshuju:before {
+ content: "\e78e";
+}
+
+.icon-shuxingchaxun:before {
+ content: "\e78f";
+}
+
+.icon-sheshiquanshujiyanghuxinxi:before {
+ content: "\e790";
+}
+
+.icon-tezhengdianweihu:before {
+ content: "\e791";
+}
+
+.icon-xitongxinxiweihu:before {
+ content: "\e792";
+}
+
+.icon-suoxiao:before {
+ content: "\e793";
+}
+
+.icon-shuaxinditu:before {
+ content: "\e794";
+}
+
+.icon-tufuhaochaxun:before {
+ content: "\e795";
+}
+
+.icon-yinhuanleibieweihu:before {
+ content: "\e796";
+}
+
+.icon-yushuikoujichushuju:before {
+ content: "\e797";
+}
+
+.icon-yujingshujuweihu:before {
+ content: "\e798";
+}
+
+.icon-ziliaoshoujiqingkuang:before {
+ content: "\e799";
+}
+
+.icon-zidianbiaoguanli:before {
+ content: "\e79a";
+}
+
+.icon-zuobiaodingwei:before {
+ content: "\e79b";
+}
+
+.icon-zhuantiweihu:before {
+ content: "\e79c";
+}
+
+.icon-yuanshujushuxingmiaoshu:before {
+ content: "\e79d";
+}
+
+.icon-zhamenjichushuju:before {
+ content: "\e79e";
+}
+
+.icon-shujulianjieguanli:before {
+ content: "\e79f";
+}
+
+.icon-mianjiceliang:before {
+ content: "\e7a0";
+}
+
+.icon-tucengkongzhi:before {
+ content: "\e7a1";
+}
+
+.icon-shujugongxiang:before {
+ content: "\e861";
+}
+
+.icon-shujujicheng:before {
+ content: "\e862";
+}
+
+.icon-ziyuanmuluguanli:before {
+ content: "\e865";
+}
+
+.icon-shipinjiankongyemian:before {
+ content: "\e866";
+}
+
+.icon-shipindianweiguanli:before {
+ content: "\e867";
+}
+
+.icon-bangonggongwenshuju:before {
+ content: "\e868";
+}
+
+.icon-huanjingjianchazhifashuju:before {
+ content: "\e869";
+}
+
+.icon-shuihuanjingzhiliangbaogao:before {
+ content: "\e86a";
+}
+
+.icon-shujuguanli:before {
+ content: "\e86b";
+}
+
+.icon-baoguanfenxi:before {
+ content: "\e86c";
+}
+
+.icon-chuizhijingjucesuan:before {
+ content: "\e86d";
+}
+
+.icon-chaxunfangan:before {
+ content: "\e86e";
+}
+
+.icon-chaxuntongji:before {
+ content: "\e86f";
+}
+
+.icon-ditushezhi:before {
+ content: "\e870";
+}
+
+.icon-futufenxi:before {
+ content: "\e871";
+}
+
+.icon-gongchengdanganguanli:before {
+ content: "\e872";
+}
+
+.icon-guanxianbaojiandengji:before {
+ content: "\e873";
+}
+
+.icon-gongnengxingquexianshuju:before {
+ content: "\e874";
+}
+
+.icon-hengduanmianfenxi:before {
+ content: "\e875";
+}
+
+.icon-guanxiantuopufenxi:before {
+ content: "\e876";
+}
+
+.icon-hunjiedianxinxi:before {
+ content: "\e877";
+}
+
+.icon-huanchongqufenxi:before {
+ content: "\e878";
+}
+
+.icon-jianzhuwuyangtaipaishuixinxi:before {
+ content: "\e879";
+}
+
+.icon-jungongtuguanli:before {
+ content: "\e87a";
+}
+
+.icon-kaiwafenxi:before {
+ content: "\e87b";
+}
+
+.icon-jungongyanshouguanli:before {
+ content: "\e87c";
+}
+
+.icon-mohuchaxun:before {
+ content: "\e87d";
+}
+
+.icon-loudianweixiu:before {
+ content: "\e87e";
+}
+
+.icon-jiegouxingquexianshuju:before {
+ content: "\e87f";
+}
+
+.icon-paishuihuxinxi:before {
+ content: "\e880";
+}
+
+.icon-quyuchaxun:before {
+ content: "\e881";
+}
+
+.icon-quyuhunjieshuxingshuju:before {
+ content: "\e882";
+}
+
+.icon-qiangxianfenxi:before {
+ content: "\e883";
+}
+
+.icon-paishuikouxinxi:before {
+ content: "\e884";
+}
+
+.icon-pengzhuangfenxi:before {
+ content: "\e885";
+}
+
+.icon-sheshitongji:before {
+ content: "\e886";
+}
+
+.icon-shigongguihuafenxi:before {
+ content: "\e887";
+}
+
+.icon-shebeiweihu:before {
+ content: "\e888";
+}
+
+.icon-shuipingjingjucesuan:before {
+ content: "\e889";
+}
+
+.icon-tiaojianchaxun:before {
+ content: "\e88a";
+}
+
+.icon-tuichu:before {
+ content: "\e88b";
+}
+
+.icon-tuxingbiaozhu:before {
+ content: "\e88c";
+}
+
+.icon-wentishouli:before {
+ content: "\e88d";
+}
+
+.icon-xinxiguanlishangbao:before {
+ content: "\e88e";
+}
+
+.icon-yuwuhunjiefenxi:before {
+ content: "\e88f";
+}
+
+.icon-yujingfenxi:before {
+ content: "\e890";
+}
+
+.icon-xiaoqupaishuixitong:before {
+ content: "\e891";
+}
+
+.icon-yewuliuchengshenpiguanli:before {
+ content: "\e892";
+}
+
+.icon-yuanxingchaxun:before {
+ content: "\e893";
+}
+
+.icon-zaixianjiance:before {
+ content: "\e894";
+}
+
+.icon-zongduanmianfenxi:before {
+ content: "\e895";
+}
+
+.icon-xuanqu:before {
+ content: "\e896";
+}
+
+.icon-gongxiangmulu:before {
+ content: "\e897";
+}
+
+.icon-jiekouqingdan:before {
+ content: "\e898";
+}
+
+.icon-anquanrenzheng:before {
+ content: "\e899";
+}
+
+.icon-yonghugerenzhongxin:before {
+ content: "\e89a";
+}
+
+.icon-caidanguanli:before {
+ content: "\e89b";
+}
+
+.icon-rizhiguanli:before {
+ content: "\e89c";
+}
+
+.icon-zuzhijiagouguanli:before {
+ content: "\e89d";
+}
+
+.icon-shujushenqingguanli:before {
+ content: "\e89e";
+}
+
+.icon-hangzhengquhuaguanli:before {
+ content: "\e89f";
+}
+
+.icon-jiaoseguanli:before {
+ content: "\e8a0";
+}
+
+.icon-manyou1:before {
+ content: "\e8a1";
+}
+
+.icon-dayin:before {
+ content: "\e8a2";
+}
+
+.icon-guanbi:before {
+ content: "\e8a3";
+}
+
diff --git a/static/img/location.png b/static/img/location.png
new file mode 100644
index 0000000..4a5ff34
Binary files /dev/null and b/static/img/location.png differ
diff --git a/utils/BasePage.js b/utils/BasePage.js
new file mode 100755
index 0000000..1d46ebd
--- /dev/null
+++ b/utils/BasePage.js
@@ -0,0 +1,11 @@
+import WeChat from "./WeChat";
+export default class BasePage {
+ constructor() {
+ this.data = {};
+ }
+
+ onLoad(o) {
+ console.log('BasePage loaded');
+ }
+
+}
\ No newline at end of file
diff --git a/utils/WeChat.js b/utils/WeChat.js
new file mode 100755
index 0000000..2ae5a36
--- /dev/null
+++ b/utils/WeChat.js
@@ -0,0 +1,10 @@
+// 小程序全局对象
+const WeChat = {};
+WeChat.Page = Page; // 注册页面
+
+WeChat.register = function (PageClass) {
+ let page = new PageClass();
+ WeChat.Page(page);
+};
+
+export default WeChat;
\ No newline at end of file
diff --git a/utils/md5.min.js b/utils/md5.min.js
new file mode 100755
index 0000000..f252dd6
--- /dev/null
+++ b/utils/md5.min.js
@@ -0,0 +1,126 @@
+!function (n) {
+ "use strict";
+
+ function t(n, t) {
+ var r = (65535 & n) + (65535 & t);
+ return (n >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r;
+ }
+
+ function r(n, t) {
+ return n << t | n >>> 32 - t;
+ }
+
+ function e(n, e, o, u, c, f) {
+ return t(r(t(t(e, n), t(u, f)), c), o);
+ }
+
+ function o(n, t, r, o, u, c, f) {
+ return e(t & r | ~t & o, n, t, u, c, f);
+ }
+
+ function u(n, t, r, o, u, c, f) {
+ return e(t & o | r & ~o, n, t, u, c, f);
+ }
+
+ function c(n, t, r, o, u, c, f) {
+ return e(t ^ r ^ o, n, t, u, c, f);
+ }
+
+ function f(n, t, r, o, u, c, f) {
+ return e(r ^ (t | ~o), n, t, u, c, f);
+ }
+
+ function i(n, r) {
+ n[r >> 5] |= 128 << r % 32, n[14 + (r + 64 >>> 9 << 4)] = r;
+ var e,
+ i,
+ a,
+ d,
+ h,
+ l = 1732584193,
+ g = -271733879,
+ v = -1732584194,
+ m = 271733878;
+
+ for (e = 0; e < n.length; e += 16) i = l, a = g, d = v, h = m, g = f(g = f(g = f(g = f(g = c(g = c(g = c(g = c(g = u(g = u(g = u(g = u(g = o(g = o(g = o(g = o(g, v = o(v, m = o(m, l = o(l, g, v, m, n[e], 7, -680876936), g, v, n[e + 1], 12, -389564586), l, g, n[e + 2], 17, 606105819), m, l, n[e + 3], 22, -1044525330), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 4], 7, -176418897), g, v, n[e + 5], 12, 1200080426), l, g, n[e + 6], 17, -1473231341), m, l, n[e + 7], 22, -45705983), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 8], 7, 1770035416), g, v, n[e + 9], 12, -1958414417), l, g, n[e + 10], 17, -42063), m, l, n[e + 11], 22, -1990404162), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 12], 7, 1804603682), g, v, n[e + 13], 12, -40341101), l, g, n[e + 14], 17, -1502002290), m, l, n[e + 15], 22, 1236535329), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 1], 5, -165796510), g, v, n[e + 6], 9, -1069501632), l, g, n[e + 11], 14, 643717713), m, l, n[e], 20, -373897302), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 5], 5, -701558691), g, v, n[e + 10], 9, 38016083), l, g, n[e + 15], 14, -660478335), m, l, n[e + 4], 20, -405537848), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 9], 5, 568446438), g, v, n[e + 14], 9, -1019803690), l, g, n[e + 3], 14, -187363961), m, l, n[e + 8], 20, 1163531501), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 13], 5, -1444681467), g, v, n[e + 2], 9, -51403784), l, g, n[e + 7], 14, 1735328473), m, l, n[e + 12], 20, -1926607734), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 5], 4, -378558), g, v, n[e + 8], 11, -2022574463), l, g, n[e + 11], 16, 1839030562), m, l, n[e + 14], 23, -35309556), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 1], 4, -1530992060), g, v, n[e + 4], 11, 1272893353), l, g, n[e + 7], 16, -155497632), m, l, n[e + 10], 23, -1094730640), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 13], 4, 681279174), g, v, n[e], 11, -358537222), l, g, n[e + 3], 16, -722521979), m, l, n[e + 6], 23, 76029189), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 9], 4, -640364487), g, v, n[e + 12], 11, -421815835), l, g, n[e + 15], 16, 530742520), m, l, n[e + 2], 23, -995338651), v = f(v, m = f(m, l = f(l, g, v, m, n[e], 6, -198630844), g, v, n[e + 7], 10, 1126891415), l, g, n[e + 14], 15, -1416354905), m, l, n[e + 5], 21, -57434055), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 12], 6, 1700485571), g, v, n[e + 3], 10, -1894986606), l, g, n[e + 10], 15, -1051523), m, l, n[e + 1], 21, -2054922799), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 8], 6, 1873313359), g, v, n[e + 15], 10, -30611744), l, g, n[e + 6], 15, -1560198380), m, l, n[e + 13], 21, 1309151649), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 4], 6, -145523070), g, v, n[e + 11], 10, -1120210379), l, g, n[e + 2], 15, 718787259), m, l, n[e + 9], 21, -343485551), l = t(l, i), g = t(g, a), v = t(v, d), m = t(m, h);
+
+ return [l, g, v, m];
+ }
+
+ function a(n) {
+ var t,
+ r = "",
+ e = 32 * n.length;
+
+ for (t = 0; t < e; t += 8) r += String.fromCharCode(n[t >> 5] >>> t % 32 & 255);
+
+ return r;
+ }
+
+ function d(n) {
+ var t,
+ r = [];
+
+ for (r[(n.length >> 2) - 1] = void 0, t = 0; t < r.length; t += 1) r[t] = 0;
+
+ var e = 8 * n.length;
+
+ for (t = 0; t < e; t += 8) r[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32;
+
+ return r;
+ }
+
+ function h(n) {
+ return a(i(d(n), 8 * n.length));
+ }
+
+ function l(n, t) {
+ var r,
+ e,
+ o = d(n),
+ u = [],
+ c = [];
+
+ for (u[15] = c[15] = void 0, o.length > 16 && (o = i(o, 8 * n.length)), r = 0; r < 16; r += 1) u[r] = 909522486 ^ o[r], c[r] = 1549556828 ^ o[r];
+
+ return e = i(u.concat(d(t)), 512 + 8 * t.length), a(i(c.concat(e), 640));
+ }
+
+ function g(n) {
+ var t,
+ r,
+ e = "";
+
+ for (r = 0; r < n.length; r += 1) t = n.charCodeAt(r), e += "0123456789abcdef".charAt(t >>> 4 & 15) + "0123456789abcdef".charAt(15 & t);
+
+ return e;
+ }
+
+ function v(n) {
+ return unescape(encodeURIComponent(n));
+ }
+
+ function m(n) {
+ return h(v(n));
+ }
+
+ function p(n) {
+ return g(m(n));
+ }
+
+ function s(n, t) {
+ return l(v(n), v(t));
+ }
+
+ function C(n, t) {
+ return g(s(n, t));
+ }
+
+ function A(n, t, r) {
+ return t ? r ? s(t, n) : C(t, n) : r ? m(n) : p(n);
+ }
+
+ "function" == typeof define && define.amd ? define(function () {
+ return A;
+ }) : "object" == typeof module && module.exports ? module.exports = A : n.md5 = A;
+}(this); //# sourceMappingURL=md5.min.js.map
\ No newline at end of file
diff --git a/utils/util.js b/utils/util.js
new file mode 100755
index 0000000..f5db390
--- /dev/null
+++ b/utils/util.js
@@ -0,0 +1,672 @@
+import md5 from "./md5.min";
+const HOSTARR = {
+ 'development': 'http://118.31.104.155:9003',
+ 'production': 'http://118.31.104.155:9003'
+}; // 审核状态
+
+const HOST = HOSTARR[process.env.NODE_ENV]; //"https://tiantianxinye.365care.langye.net/";//HOSTARR[process.env.NODE_ENV];//
+
+
+const formatTime = date => {
+ const year = date.getFullYear();
+ const month = date.getMonth() + 1;
+ const day = date.getDate();
+ return [year, month, day].map(formatNumber).join('-');
+};
+
+
+
+const stateArr = {
+ "save": "待处理",
+ "ongoing": "处理中",
+ "finished": "已处理"
+}
+const formatTimeAll = date => {
+ const year = date.getFullYear();
+ const month = date.getMonth() + 1;
+ const day = date.getDate();
+ const hour = date.getHours();
+ const minute = date.getMinutes();
+ const second = date.getSeconds();
+ return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(
+ ':');
+};
+
+const formatNumber = n => {
+ n = n.toString();
+ return n[1] ? n : '0' + n;
+}; // 快捷显示alert
+
+
+const alert = msg => {
+ uni.showModal({
+ title: '',
+ content: msg,
+ showCancel: false
+ });
+}; // 订单状态
+
+
+const orderStatusDic = {
+ '0': '待确认',
+ '10': '待派单',
+ '20': '进行中',
+ '100': '已完成'
+}; // 审核状态
+
+const auditStatusDic = {
+ '0': '待审核',
+ '1': '已审核',
+ '-1': '已拒绝'
+}; // 请求封装
+
+const request = options => {
+ if (!options.customLoading) {
+ uni.showLoading({
+ title: '正在加载'
+ });
+ } else {
+ // 当前页面请求数量+1
+ if (options.bindThis) {
+ options.bindThis.setData({
+ //loadingCount: options.bindThis.data.loadingCount + 1
+ });
+ }
+ }
+
+ options.url = HOST + options.api;
+ options.header = {
+ ...options.header,
+ //'Accept': 'application/json',
+ //'Connection': 'keep-alive'
+ //'content-type': 'application/json'
+ }; // 如果已登录,请求中拼openId
+
+ var access_token = uni.getStorageSync('userInfo').access_token;
+
+ if (isLogin()) {
+ options.data = {
+ ...options.data,
+ 'token': access_token
+ };
+ } // 如果是POST方法
+
+
+ if (options.method == 'POST' && !isNull(access_token)) {
+ // 拼时间戳
+ options.data.ts = new Date().getTime();
+ }
+
+ uni.request({
+ ...options,
+ success: function(res) {
+ if (res.statusCode != 200) {
+ if (options.utilFail != undefined) {
+ if (res.statusCode == 401) {
+ uni.clearStorageSync();
+ uni.navigateTo({
+ url: '/pages/login/login'
+ });
+ } else {
+ options.utilFail('TODO: 特殊处理非200错误(' + res.statusCode + ')');
+ }
+ }
+ } else {
+ if (!isNull(res.data.errorcode) || res.data.errorcode == 0) {
+ if (options.utilFail != undefined) {
+ options.utilFail(res.data.errormsg || '接口发生未知错误');
+ } else {
+ options.utilFail(res.data.errormsg);
+ }
+ } else {
+ if (options.utilSuccess != undefined) {
+ options.utilSuccess(res.data);
+ }
+ }
+ }
+ },
+ fail: options.utilFail,
+ complete: function(res) {
+ if (!options.customLoading) {
+ uni.hideNavigationBarLoading();
+ uni.hideLoading();
+ } else {
+ // 当前页面请求数量-1
+ if (options.bindThis) {
+ options.bindThis.setData({
+ loadingCount: options.bindThis.data.loadingCount - 1
+ });
+ }
+ }
+ }
+ });
+}; // 提交formID封装
+
+
+const uploadFormID = formID => {
+ var timestamp = Math.floor(new Date().getTime() / 1000);
+ request({
+ api: 'WeChat/SaveFormID',
+ method: 'POST',
+ data: {
+ FormIDs: formID
+ },
+ utilSuccess: function(res) {
+ console.log('上传formID成功');
+ },
+ utilFail: function(err) {
+ console.log('上传formID失败');
+ }
+ });
+}; // 支付
+
+
+const payOrder = (orderID, orderType, success, fail) => {
+ uni.request({
+ url: HOST + 'WxPay/ToPay?openId=' + uni.getStorageSync('userInfo').WeChatOpenID + '&orderId=' +
+ orderID + '&OrderType=' + orderType,
+ method: 'GET',
+ header: {
+ 'content-type': 'application/json'
+ },
+ success: function(res) {
+ // 内容为空, 代表失败
+ if (res.data == '') {
+ fail('当前网络状况不好');
+ return;
+ } // 去掉转义字符
+
+
+ var pureStr = res.data.replace(/\\/g, '');
+ res.data = JSON.parse(pureStr);
+ var index = res.data.package.indexOf('=') + 1;
+ var prepayId = res.data.package.substring(index); // wxpay
+
+ uni.requestPayment({
+ timeStamp: res.data.timeStamp,
+ nonceStr: res.data.nonceStr,
+ package: res.data.package,
+ signType: res.data.signType,
+ paySign: res.data.paySign,
+ success: function(res) {
+ success(res); // 发送成功通知
+
+ request({
+ api: 'WxPay/PayTemplateMsg',
+ data: {
+ prepay_id: prepayId,
+ orderId: orderID,
+ isSuccess: 1,
+ failMsg: '',
+ xType: orderType
+ }
+ });
+ },
+ fail: function(res) {
+ fail(res);
+ var errMsg = res == 'requestPayment:fail cancel' ? '用户取消支付' :
+ res; // 发送失败通知
+
+ request({
+ api: 'WxPay/PayTemplateMsg',
+ data: {
+ prepay_id: prepayId,
+ orderId: orderID,
+ isSuccess: 0,
+ failMsg: errMsg,
+ xType: orderType
+ }
+ });
+ }
+ });
+ },
+ fail: function(err) {
+ fail('当前网络状况不好');
+ }
+ });
+}; // 判断是否已登录(同时有open-id和PhoneNum, 则认为已登录)
+
+const scanPay = (orderID, amt, scan, type, success, fail) => {
+ var access_token = uni.getStorageSync('userInfo').access_token;
+ console.log("1.支付进入")
+ var data = {
+ token: access_token,
+ order_id: orderID,
+ money: amt,
+ auth_code: scan,
+ type: type
+ };
+ console.log("2.参数")
+ console.log(data)
+ uni.showLoading({
+ title: '正在加载',
+
+ });
+ uni.request({
+ url: HOST + 'manager/scan-pay/' + orderID,
+ method: 'POST',
+ data: {
+ token: access_token,
+ order_id: orderID,
+ money: amt,
+ auth_code: scan,
+ type: type
+ },
+ header: {
+ 'content-type': 'application/json'
+ },
+ success: function(res) {
+ uni.hideLoading();
+ if (isNull(res.data.errorcode)) {
+ success(res);
+ console.log("3.支付成功")
+ console.log(res)
+ } else {
+ alert("支付失败:" + res.data.errormsg);
+ console.log("4.支付失败")
+ console.log(res)
+ }
+
+ },
+ fail: function(err) {
+ fail('当前网络状况不好');
+ console.log("4.支付失败")
+ console.log(res)
+ }
+ });
+}; // 判断是否已登录(同时有open-id和PhoneNum, 则认为已登录)
+
+const isLogin = () => {
+ var userInfo = uni.getStorageSync('userInfo');
+ return !isNull(userInfo.access_token);
+}; // 判断是否为空
+
+
+const getfile = (id, success, fail) => {
+ var access_token = uni.getStorageSync('userInfo').access_token;
+ var url = HOST + 'manager/get-attachment/' + id + '?token=' + access_token;
+ success(url);
+ // uni.request({
+ // url: HOST + 'manager/get-attachment/' + id + '?token=' + access_token,
+ // method: 'GET',
+ // header: {
+ // 'content-type': 'application/json'
+ // },
+ // success: function(res) {
+ // success(res); // 发送成功通知
+ // },
+ // fail: function(res) {
+ // fail(res);
+ // }
+ // });
+};
+
+
+//获取订单详情
+const getOrderInfo = (id, success, fail) => {
+ var access_token = uni.getStorageSync('userInfo').access_token;
+ var url = HOST + 'manager/get-order/' + id + '?token=' + access_token;
+ uni.request({
+ url: url,
+ method: 'GET',
+ header: {
+ 'content-type': 'application/json'
+ },
+ success: function(res) {
+ res.data.factorjson = JSON.parse(res.data.factors);
+ success(res); // 发送成功通知
+ },
+ fail: function(res) {
+ fail(res);
+ }
+ });
+};
+
+
+//获取订单详情
+const getOrderItemInfo = (id, success, fail) => {
+ var access_token = uni.getStorageSync('userInfo').access_token;
+ var url = HOST + 'manager/get-order-item/' + id + '?token=' + access_token;
+ uni.request({
+ url: url,
+ method: 'GET',
+ header: {
+ 'content-type': 'application/json'
+ },
+ success: function(res) {
+ res.data.factorjson = JSON.parse(res.data.factors);
+ success(res.data); // 发送成功通知
+ },
+ fail: function(res) {
+ fail(res);
+ }
+ });
+};
+
+const isNull = p => {
+ return p == '' || p == undefined || p == null || p == 'undefined' || p == 'null';
+}; // 正则
+
+
+const phoneRegex = /^1\d{10}$/;
+const idCardRegex = /^\d{17}([0-9]|X)$/; // 去掉特殊字符
+
+const filterSpecialChars = str => {
+ return str.replace(/[^\u4e00-\u9fa5a-zA-Z0-9\w]/g, '');
+}; // 生成随机字符串
+
+
+const randomStr = length => {
+ var ret = '';
+ var arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
+ 'i', 'j',
+ 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C',
+ 'D', 'E',
+ 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+ 'Y', 'Z'
+ ];
+
+ for (var i = 0; i < length; i++) {
+ var randomIndex = Math.round(Math.random() * (arr.length - 1));
+ ret += arr[randomIndex];
+ }
+
+ return ret;
+}; // proType对应的中文描述
+
+
+const proTypeDic = {}; // 排序字段
+
+const orderByArr = [{
+ id: '1',
+ name: '近期销量最高'
+ }, // { id: '2', name: '产品评价最高' },
+ {
+ id: '3',
+ name: '价格由高到低'
+ }, {
+ id: '4',
+ name: '价格由低到高'
+ }
+]; // 日期天数
+
+const travelDaysArr = [{
+ id: '1',
+ name: '2日',
+ minDay: 2,
+ maxDay: 2
+}, {
+ id: '2',
+ name: '3日',
+ minDay: 3,
+ maxDay: 3
+}, {
+ id: '3',
+ name: '4日',
+ minDay: 4,
+ maxDay: 4
+}, {
+ id: '4',
+ name: '5日',
+ minDay: 5,
+ maxDay: 5
+}, {
+ id: '5',
+ name: '6日',
+ minDay: 6,
+ maxDay: 6
+}, {
+ id: '6',
+ name: '7日',
+ minDay: 7,
+ maxDay: 7
+}, {
+ id: '7',
+ name: '8日',
+ minDay: 8,
+ maxDay: 8
+}, {
+ id: '8',
+ name: '9日',
+ minDay: 9,
+ maxDay: 9
+}, {
+ id: '9',
+ name: '10日',
+ minDay: 10,
+ maxDay: 10
+}, {
+ id: '10',
+ name: '10日以上',
+ minDay: 11,
+ maxDay: 0
+}]; // 中文星期
+
+const weekdayArr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; // 是否合法的身份证
+
+const isValidCardID = cardID => {
+ // Step1: 先判断格式
+ if (!idCardRegex.test(cardID)) return false; // Step2: 校验最后一位
+
+ var code = cardID.split(''); //加权因子
+
+ var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //校验位
+
+ var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
+ var sum = 0;
+ var ai = 0;
+ var wi = 0;
+
+ for (var i = 0; i < 17; i++) {
+ ai = code[i];
+ wi = factor[i];
+ sum += ai * wi;
+ }
+
+ var last = parity[sum % 11];
+ return parity[sum % 11] == code[17];
+};
+/**
+ * UTF16和UTF8转换对照表
+ * U+00000000 – U+0000007F 0xxxxxxx
+ * U+00000080 – U+000007FF 110xxxxx 10xxxxxx
+ * U+00000800 – U+0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
+ * U+00010000 – U+001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * U+00200000 – U+03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * U+04000000 – U+7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ */
+
+
+var Base64 = {
+ // 转码表
+ table: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
+ 'T', 'U',
+ 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
+ '9', '+',
+ '/'
+ ],
+ UTF16ToUTF8: function(str) {
+ var res = [],
+ len = str.length;
+
+ for (var i = 0; i < len; i++) {
+ var code = str.charCodeAt(i);
+
+ if (code > 0x0000 && code <= 0x007F) {
+ // 单字节,这里并不考虑0x0000,因为它是空字节
+ // U+00000000 – U+0000007F 0xxxxxxx
+ res.push(str.charAt(i));
+ } else if (code >= 0x0080 && code <= 0x07FF) {
+ // 双字节
+ // U+00000080 – U+000007FF 110xxxxx 10xxxxxx
+ // 110xxxxx
+ var byte1 = 0xC0 | code >> 6 & 0x1F; // 10xxxxxx
+
+ var byte2 = 0x80 | code & 0x3F;
+ res.push(String.fromCharCode(byte1), String.fromCharCode(byte2));
+ } else if (code >= 0x0800 && code <= 0xFFFF) {
+ // 三字节
+ // U+00000800 – U+0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
+ // 1110xxxx
+ var byte1 = 0xE0 | code >> 12 & 0x0F; // 10xxxxxx
+
+ var byte2 = 0x80 | code >> 6 & 0x3F; // 10xxxxxx
+
+ var byte3 = 0x80 | code & 0x3F;
+ res.push(String.fromCharCode(byte1), String.fromCharCode(byte2), String.fromCharCode(
+ byte3));
+ } else if (code >= 0x00010000 && code <= 0x001FFFFF) { // 四字节
+ // U+00010000 – U+001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ } else if (code >= 0x00200000 && code <= 0x03FFFFFF) { // 五字节
+ // U+00200000 – U+03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ } else
+ /** if (code >= 0x04000000 && code <= 0x7FFFFFFF)*/
+ { // 六字节
+ // U+04000000 – U+7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ }
+ }
+
+ return res.join('');
+ },
+ UTF8ToUTF16: function(str) {
+ var res = [],
+ len = str.length;
+ var i = 0;
+
+ for (var i = 0; i < len; i++) {
+ var code = str.charCodeAt(i); // 对第一个字节进行判断
+
+ if ((code >> 7 & 0xFF) == 0x0) {
+ // 单字节
+ // 0xxxxxxx
+ res.push(str.charAt(i));
+ } else if ((code >> 5 & 0xFF) == 0x6) {
+ // 双字节
+ // 110xxxxx 10xxxxxx
+ var code2 = str.charCodeAt(++i);
+ var byte1 = (code & 0x1F) << 6;
+ var byte2 = code2 & 0x3F;
+ var utf16 = byte1 | byte2;
+ res.push(Sting.fromCharCode(utf16));
+ } else if ((code >> 4 & 0xFF) == 0xE) {
+ // 三字节
+ // 1110xxxx 10xxxxxx 10xxxxxx
+ var code2 = str.charCodeAt(++i);
+ var code3 = str.charCodeAt(++i);
+ var byte1 = code << 4 | code2 >> 2 & 0x0F;
+ var byte2 = (code2 & 0x03) << 6 | code3 & 0x3F;
+ utf16 = (byte1 & 0x00FF) << 8 | byte2;
+ res.push(String.fromCharCode(utf16));
+ } else if ((code >> 3 & 0xFF) == 0x1E) { // 四字节
+ // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ } else if ((code >> 2 & 0xFF) == 0x3E) { // 五字节
+ // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ } else
+ /** if (((code >> 1) & 0xFF) == 0x7E)*/
+ { // 六字节
+ // 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+ }
+ }
+
+ return res.join('');
+ },
+ encode: function(str) {
+ if (!str) {
+ return '';
+ }
+
+ var utf8 = this.UTF16ToUTF8(str); // 转成UTF8
+
+ var i = 0; // 遍历索引
+
+ var len = utf8.length;
+ var res = [];
+
+ while (i < len) {
+ var c1 = utf8.charCodeAt(i++) & 0xFF;
+ res.push(this.table[c1 >> 2]); // 需要补2个=
+
+ if (i == len) {
+ res.push(this.table[(c1 & 0x3) << 4]);
+ res.push('==');
+ break;
+ }
+
+ var c2 = utf8.charCodeAt(i++); // 需要补1个=
+
+ if (i == len) {
+ res.push(this.table[(c1 & 0x3) << 4 | c2 >> 4 & 0x0F]);
+ res.push(this.table[(c2 & 0x0F) << 2]);
+ res.push('=');
+ break;
+ }
+
+ var c3 = utf8.charCodeAt(i++);
+ res.push(this.table[(c1 & 0x3) << 4 | c2 >> 4 & 0x0F]);
+ res.push(this.table[(c2 & 0x0F) << 2 | (c3 & 0xC0) >> 6]);
+ res.push(this.table[c3 & 0x3F]);
+ }
+
+ return res.join('');
+ },
+ decode: function(str) {
+ if (!str) {
+ return '';
+ }
+
+ var len = str.length;
+ var i = 0;
+ var res = [];
+
+ while (i < len) {
+ var code1 = this.table.indexOf(str.charAt(i++));
+ var code2 = this.table.indexOf(str.charAt(i++));
+ var code3 = this.table.indexOf(str.charAt(i++));
+ var code4 = this.table.indexOf(str.charAt(i++));
+ var c1 = code1 << 2 | code2 >> 4;
+ var c2 = (code2 & 0xF) << 4 | code3 >> 2;
+ var c3 = (code3 & 0x3) << 6 | code4;
+ res.push(String.fromCharCode(c1));
+
+ if (code3 != 64) {
+ res.push(String.fromCharCode(c2));
+ }
+
+ if (code4 != 64) {
+ res.push(String.fromCharCode(c3));
+ }
+ }
+
+ return this.UTF8ToUTF16(res.join(''));
+ }
+};
+module.exports = {
+ HOST: HOST,
+ formatTime: formatTime,
+ formatTimeAll: formatTimeAll,
+ formatNumber: formatNumber,
+ alert: alert,
+ getfile: getfile,
+ request: request,
+ uploadFormID: uploadFormID,
+ payOrder: payOrder,
+ scanPay: scanPay,
+ isLogin: isLogin,
+ isNull: isNull,
+ phoneRegex: phoneRegex,
+ idCardRegex: idCardRegex,
+ filterSpecialChars: filterSpecialChars,
+ randomStr: randomStr,
+ proTypeDic: proTypeDic,
+ orderByArr: orderByArr,
+ travelDaysArr: travelDaysArr,
+ weekdayArr: weekdayArr,
+ Base64: Base64,
+ orderStatusDic: orderStatusDic,
+ auditStatusDic: auditStatusDic,
+ getOrderInfo: getOrderInfo,
+ getOrderItemInfo: getOrderItemInfo,
+ stateArr: stateArr
+};
diff --git a/utils/util.wxs b/utils/util.wxs
new file mode 100755
index 0000000..d1f35de
--- /dev/null
+++ b/utils/util.wxs
@@ -0,0 +1,120 @@
+// 从2018-09-01 15:30:27 中提取出 15:30
+var hmTimeFrom = function (dateStr) {
+ return dateStr.substring(11, 16);
+}; // 算出2个dateStr间的时间间隔,例如 2018-09-01 15:30:27 到 2018-09-02 03:28:09,中间相差'd天h小时m分钟'
+
+
+var intervalBetween = function (startDateStr, endDateStr) {
+ var startDate = dateFromDateStr(startDateStr);
+ var endDate = dateFromDateStr(endDateStr);
+ var startTimestamp = startDate.getTime();
+ var endTimestamp = endDate.getTime();
+ var deltaTimestamp = Math.floor((endTimestamp - startTimestamp) / 1000);
+ var days = Math.floor(deltaTimestamp / (24 * 3600));
+ var hours = Math.floor((deltaTimestamp - days * 24 * 3600) / 3600);
+ var minutes = Math.floor((deltaTimestamp - days * 24 * 3600 - hours * 3600) / 60);
+ var ret = '';
+ if (days > 0) ret += days + 'd';
+ if (hours > 0) ret += hours + 'h';
+ if (minutes > 0) ret += minutes + 'm';
+ return ret;
+}; // 算出24小时内的2个时间间隔,例如 12:00 到 15:30,中间相差'h小时m分钟'
+
+
+var intervalBetween24h = function (startDateStr, endDateStr, isCN) {
+ var startComponents = startDateStr.split(':');
+ var endComponents = endDateStr.split(':');
+ var startH = startComponents[0];
+ var startM = startComponents[1];
+ var endH = endComponents[0];
+ var endM = endComponents[1];
+ var deltaTimestamp = 0;
+
+ if (endH > startH || endH == startH && endM > startM) {
+ // 不跨天
+ // Start
+ var startDate = getDate(2018, 1, 1, startH, startM, 0);
+ var startTimestamp = startDate.getTime(); // End
+
+ var endDate = getDate(2018, 1, 1, endH, endM, 0);
+ var endTimestamp = endDate.getTime(); // delta
+
+ deltaTimestamp = Math.floor((endTimestamp - startTimestamp) / 1000);
+ } else {
+ // 跨天
+ // Start
+ var startDate = getDate(2018, 1, 1, startH, startM, 0);
+ var startTimestamp = startDate.getTime(); // End
+
+ var endDate = getDate(2018, 1, 2, endH, endM, 0);
+ var endTimestamp = endDate.getTime(); // delta
+
+ deltaTimestamp = Math.floor((endTimestamp - startTimestamp) / 1000);
+ } // 拼接返回值
+
+
+ var days = Math.floor(deltaTimestamp / (24 * 3600));
+ var hours = Math.floor((deltaTimestamp - days * 24 * 3600) / 3600);
+ var minutes = Math.floor((deltaTimestamp - days * 24 * 3600 - hours * 3600) / 60);
+ var ret = '';
+
+ if (isCN) {
+ if (days > 0) ret += days + '天';
+ if (hours > 0) ret += hours + '小时';
+ if (minutes > 0) ret += minutes + '分钟';
+ } else {
+ if (days > 0) ret += days + 'd';
+ if (hours > 0) ret += hours + 'h';
+ if (minutes > 0) ret += minutes + 'm';
+ }
+
+ return ret;
+}; // dateStr转Date类型
+
+
+var dateFromDateStr = function (dateStr) {
+ var components = dateStr.split(' ');
+ var dateComponents = components[0].split('-');
+ var timeComponents = components[1].split(':');
+ var totalComponents = dateComponents.concat(timeComponents);
+ return getDate(parseInt(totalComponents[0]), parseInt(totalComponents[1]) - 1, parseInt(totalComponents[2]), parseInt(totalComponents[3]), parseInt(totalComponents[4]), parseInt(totalComponents[5]), 0);
+}; // 判断是否跨天, 例如 12:00 到 11:30 为跨天
+
+
+var isCrossDay = function (startDateStr, endDateStr) {
+ var startComponents = startDateStr.split(':');
+ var endComponents = endDateStr.split(':');
+ var startH = startComponents[0];
+ var startM = startComponents[1];
+ var endH = endComponents[0];
+ var endM = endComponents[1];
+ return endH < startH || endH == startH && endM < startM;
+};
+
+var numberUtil = {
+ numberFormat: function (value) {
+ var v = parseFloat(value); //强转Int,毕竟有可能返回是String类型的数字
+
+ return v.toFixed(2);
+ }
+};
+
+var rorderStatusDic = function (status) {
+ var orderStatusDic = {
+ '0': '待确认',
+ '10': '待派单',
+ '20': '进行中',
+ '100': '已完成'
+ };
+ return orderStatusDic[status];
+};
+
+module.exports = {
+ hmTimeFrom: hmTimeFrom,
+ intervalBetween: intervalBetween,
+ intervalBetween24h: intervalBetween24h,
+ isCrossDay: isCrossDay,
+ numberFormat: numberUtil.numberFormat,
+ //暴露接口调用
+ rorderStatusDic: rorderStatusDic
+};
\ No newline at end of file
diff --git a/utils/weapp-qrcode.js b/utils/weapp-qrcode.js
new file mode 100755
index 0000000..986493c
--- /dev/null
+++ b/utils/weapp-qrcode.js
@@ -0,0 +1,1004 @@
+//Core code comes from https://github.com/davidshimjs/qrcodejs
+var QRCode;
+
+(function () {
+ /**
+ * Get the type by string length
+ *
+ * @private
+ * @param {String} sText
+ * @param {Number} nCorrectLevel
+ * @return {Number} type
+ */
+ function _getTypeNumber(sText, nCorrectLevel) {
+ var nType = 1;
+
+ var length = _getUTF8Length(sText);
+
+ for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
+ var nLimit = 0;
+
+ switch (nCorrectLevel) {
+ case QRErrorCorrectLevel.L:
+ nLimit = QRCodeLimitLength[i][0];
+ break;
+
+ case QRErrorCorrectLevel.M:
+ nLimit = QRCodeLimitLength[i][1];
+ break;
+
+ case QRErrorCorrectLevel.Q:
+ nLimit = QRCodeLimitLength[i][2];
+ break;
+
+ case QRErrorCorrectLevel.H:
+ nLimit = QRCodeLimitLength[i][3];
+ break;
+ }
+
+ if (length <= nLimit) {
+ break;
+ } else {
+ nType++;
+ }
+ }
+
+ if (nType > QRCodeLimitLength.length) {
+ throw new Error("Too long data");
+ }
+
+ return nType;
+ }
+
+ function _getUTF8Length(sText) {
+ var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
+ return replacedText.length + (replacedText.length != sText ? 3 : 0);
+ }
+
+ function QR8bitByte(data) {
+ this.mode = QRMode.MODE_8BIT_BYTE;
+ this.data = data;
+ this.parsedData = []; // Added to support UTF-8 Characters
+
+ for (var i = 0, l = this.data.length; i < l; i++) {
+ var byteArray = [];
+ var code = this.data.charCodeAt(i);
+
+ if (code > 0x10000) {
+ byteArray[0] = 0xF0 | (code & 0x1C0000) >>> 18;
+ byteArray[1] = 0x80 | (code & 0x3F000) >>> 12;
+ byteArray[2] = 0x80 | (code & 0xFC0) >>> 6;
+ byteArray[3] = 0x80 | code & 0x3F;
+ } else if (code > 0x800) {
+ byteArray[0] = 0xE0 | (code & 0xF000) >>> 12;
+ byteArray[1] = 0x80 | (code & 0xFC0) >>> 6;
+ byteArray[2] = 0x80 | code & 0x3F;
+ } else if (code > 0x80) {
+ byteArray[0] = 0xC0 | (code & 0x7C0) >>> 6;
+ byteArray[1] = 0x80 | code & 0x3F;
+ } else {
+ byteArray[0] = code;
+ }
+
+ this.parsedData.push(byteArray);
+ }
+
+ this.parsedData = Array.prototype.concat.apply([], this.parsedData);
+
+ if (this.parsedData.length != this.data.length) {
+ this.parsedData.unshift(191);
+ this.parsedData.unshift(187);
+ this.parsedData.unshift(239);
+ }
+ }
+
+ QR8bitByte.prototype = {
+ getLength: function (buffer) {
+ return this.parsedData.length;
+ },
+ write: function (buffer) {
+ for (var i = 0, l = this.parsedData.length; i < l; i++) {
+ buffer.put(this.parsedData[i], 8);
+ }
+ }
+ }; // QRCodeModel
+
+ function QRCodeModel(typeNumber, errorCorrectLevel) {
+ this.typeNumber = typeNumber;
+ this.errorCorrectLevel = errorCorrectLevel;
+ this.modules = null;
+ this.moduleCount = 0;
+ this.dataCache = null;
+ this.dataList = [];
+ }
+
+ QRCodeModel.prototype = {
+ addData: function (data) {
+ var newData = new QR8bitByte(data);
+ this.dataList.push(newData);
+ this.dataCache = null;
+ },
+ isDark: function (row, col) {
+ if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+ throw new Error(row + "," + col);
+ }
+
+ return this.modules[row][col];
+ },
+ getModuleCount: function () {
+ return this.moduleCount;
+ },
+ make: function () {
+ this.makeImpl(false, this.getBestMaskPattern());
+ },
+ makeImpl: function (test, maskPattern) {
+ this.moduleCount = this.typeNumber * 4 + 17;
+ this.modules = new Array(this.moduleCount);
+
+ for (var row = 0; row < this.moduleCount; row++) {
+ this.modules[row] = new Array(this.moduleCount);
+
+ for (var col = 0; col < this.moduleCount; col++) {
+ this.modules[row][col] = null;
+ }
+ }
+
+ this.setupPositionProbePattern(0, 0);
+ this.setupPositionProbePattern(this.moduleCount - 7, 0);
+ this.setupPositionProbePattern(0, this.moduleCount - 7);
+ this.setupPositionAdjustPattern();
+ this.setupTimingPattern();
+ this.setupTypeInfo(test, maskPattern);
+
+ if (this.typeNumber >= 7) {
+ this.setupTypeNumber(test);
+ }
+
+ if (this.dataCache == null) {
+ this.dataCache = QRCodeModel.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
+ }
+
+ this.mapData(this.dataCache, maskPattern);
+ },
+ setupPositionProbePattern: function (row, col) {
+ for (var r = -1; r <= 7; r++) {
+ if (row + r <= -1 || this.moduleCount <= row + r) continue;
+
+ for (var c = -1; c <= 7; c++) {
+ if (col + c <= -1 || this.moduleCount <= col + c) continue;
+
+ if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {
+ this.modules[row + r][col + c] = true;
+ } else {
+ this.modules[row + r][col + c] = false;
+ }
+ }
+ }
+ },
+ getBestMaskPattern: function () {
+ var minLostPoint = 0;
+ var pattern = 0;
+
+ for (var i = 0; i < 8; i++) {
+ this.makeImpl(true, i);
+ var lostPoint = QRUtil.getLostPoint(this);
+
+ if (i == 0 || minLostPoint > lostPoint) {
+ minLostPoint = lostPoint;
+ pattern = i;
+ }
+ }
+
+ return pattern;
+ },
+ createMovieClip: function (target_mc, instance_name, depth) {
+ var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
+ var cs = 1;
+ this.make();
+
+ for (var row = 0; row < this.modules.length; row++) {
+ var y = row * cs;
+
+ for (var col = 0; col < this.modules[row].length; col++) {
+ var x = col * cs;
+ var dark = this.modules[row][col];
+
+ if (dark) {
+ qr_mc.beginFill(0, 100);
+ qr_mc.moveTo(x, y);
+ qr_mc.lineTo(x + cs, y);
+ qr_mc.lineTo(x + cs, y + cs);
+ qr_mc.lineTo(x, y + cs);
+ qr_mc.endFill();
+ }
+ }
+ }
+
+ return qr_mc;
+ },
+ setupTimingPattern: function () {
+ for (var r = 8; r < this.moduleCount - 8; r++) {
+ if (this.modules[r][6] != null) {
+ continue;
+ }
+
+ this.modules[r][6] = r % 2 == 0;
+ }
+
+ for (var c = 8; c < this.moduleCount - 8; c++) {
+ if (this.modules[6][c] != null) {
+ continue;
+ }
+
+ this.modules[6][c] = c % 2 == 0;
+ }
+ },
+ setupPositionAdjustPattern: function () {
+ var pos = QRUtil.getPatternPosition(this.typeNumber);
+
+ for (var i = 0; i < pos.length; i++) {
+ for (var j = 0; j < pos.length; j++) {
+ var row = pos[i];
+ var col = pos[j];
+
+ if (this.modules[row][col] != null) {
+ continue;
+ }
+
+ for (var r = -2; r <= 2; r++) {
+ for (var c = -2; c <= 2; c++) {
+ if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) {
+ this.modules[row + r][col + c] = true;
+ } else {
+ this.modules[row + r][col + c] = false;
+ }
+ }
+ }
+ }
+ }
+ },
+ setupTypeNumber: function (test) {
+ var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+
+ for (var i = 0; i < 18; i++) {
+ var mod = !test && (bits >> i & 1) == 1;
+ this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+ }
+
+ for (var i = 0; i < 18; i++) {
+ var mod = !test && (bits >> i & 1) == 1;
+ this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+ }
+ },
+ setupTypeInfo: function (test, maskPattern) {
+ var data = this.errorCorrectLevel << 3 | maskPattern;
+ var bits = QRUtil.getBCHTypeInfo(data);
+
+ for (var i = 0; i < 15; i++) {
+ var mod = !test && (bits >> i & 1) == 1;
+
+ if (i < 6) {
+ this.modules[i][8] = mod;
+ } else if (i < 8) {
+ this.modules[i + 1][8] = mod;
+ } else {
+ this.modules[this.moduleCount - 15 + i][8] = mod;
+ }
+ }
+
+ for (var i = 0; i < 15; i++) {
+ var mod = !test && (bits >> i & 1) == 1;
+
+ if (i < 8) {
+ this.modules[8][this.moduleCount - i - 1] = mod;
+ } else if (i < 9) {
+ this.modules[8][15 - i - 1 + 1] = mod;
+ } else {
+ this.modules[8][15 - i - 1] = mod;
+ }
+ }
+
+ this.modules[this.moduleCount - 8][8] = !test;
+ },
+ mapData: function (data, maskPattern) {
+ var inc = -1;
+ var row = this.moduleCount - 1;
+ var bitIndex = 7;
+ var byteIndex = 0;
+
+ for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+ if (col == 6) col--;
+
+ while (true) {
+ for (var c = 0; c < 2; c++) {
+ if (this.modules[row][col - c] == null) {
+ var dark = false;
+
+ if (byteIndex < data.length) {
+ dark = (data[byteIndex] >>> bitIndex & 1) == 1;
+ }
+
+ var mask = QRUtil.getMask(maskPattern, row, col - c);
+
+ if (mask) {
+ dark = !dark;
+ }
+
+ this.modules[row][col - c] = dark;
+ bitIndex--;
+
+ if (bitIndex == -1) {
+ byteIndex++;
+ bitIndex = 7;
+ }
+ }
+ }
+
+ row += inc;
+
+ if (row < 0 || this.moduleCount <= row) {
+ row -= inc;
+ inc = -inc;
+ break;
+ }
+ }
+ }
+ }
+ };
+ QRCodeModel.PAD0 = 0xEC;
+ QRCodeModel.PAD1 = 0x11;
+
+ QRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) {
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
+ var buffer = new QRBitBuffer();
+
+ for (var i = 0; i < dataList.length; i++) {
+ var data = dataList[i];
+ buffer.put(data.mode, 4);
+ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+ data.write(buffer);
+ }
+
+ var totalDataCount = 0;
+
+ for (var i = 0; i < rsBlocks.length; i++) {
+ totalDataCount += rsBlocks[i].dataCount;
+ }
+
+ if (buffer.getLengthInBits() > totalDataCount * 8) {
+ throw new Error("code length overflow. (" + buffer.getLengthInBits() + ">" + totalDataCount * 8 + ")");
+ }
+
+ if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
+ buffer.put(0, 4);
+ }
+
+ while (buffer.getLengthInBits() % 8 != 0) {
+ buffer.putBit(false);
+ }
+
+ while (true) {
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
+ break;
+ }
+
+ buffer.put(QRCodeModel.PAD0, 8);
+
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
+ break;
+ }
+
+ buffer.put(QRCodeModel.PAD1, 8);
+ }
+
+ return QRCodeModel.createBytes(buffer, rsBlocks);
+ };
+
+ QRCodeModel.createBytes = function (buffer, rsBlocks) {
+ var offset = 0;
+ var maxDcCount = 0;
+ var maxEcCount = 0;
+ var dcdata = new Array(rsBlocks.length);
+ var ecdata = new Array(rsBlocks.length);
+
+ for (var r = 0; r < rsBlocks.length; r++) {
+ var dcCount = rsBlocks[r].dataCount;
+ var ecCount = rsBlocks[r].totalCount - dcCount;
+ maxDcCount = Math.max(maxDcCount, dcCount);
+ maxEcCount = Math.max(maxEcCount, ecCount);
+ dcdata[r] = new Array(dcCount);
+
+ for (var i = 0; i < dcdata[r].length; i++) {
+ dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+ }
+
+ offset += dcCount;
+ var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+ var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+ var modPoly = rawPoly.mod(rsPoly);
+ ecdata[r] = new Array(rsPoly.getLength() - 1);
+
+ for (var i = 0; i < ecdata[r].length; i++) {
+ var modIndex = i + modPoly.getLength() - ecdata[r].length;
+ ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;
+ }
+ }
+
+ var totalCodeCount = 0;
+
+ for (var i = 0; i < rsBlocks.length; i++) {
+ totalCodeCount += rsBlocks[i].totalCount;
+ }
+
+ var data = new Array(totalCodeCount);
+ var index = 0;
+
+ for (var i = 0; i < maxDcCount; i++) {
+ for (var r = 0; r < rsBlocks.length; r++) {
+ if (i < dcdata[r].length) {
+ data[index++] = dcdata[r][i];
+ }
+ }
+ }
+
+ for (var i = 0; i < maxEcCount; i++) {
+ for (var r = 0; r < rsBlocks.length; r++) {
+ if (i < ecdata[r].length) {
+ data[index++] = ecdata[r][i];
+ }
+ }
+ }
+
+ return data;
+ };
+
+ var QRMode = {
+ MODE_NUMBER: 1 << 0,
+ MODE_ALPHA_NUM: 1 << 1,
+ MODE_8BIT_BYTE: 1 << 2,
+ MODE_KANJI: 1 << 3
+ };
+ var QRErrorCorrectLevel = {
+ L: 1,
+ M: 0,
+ Q: 3,
+ H: 2
+ };
+ var QRMaskPattern = {
+ PATTERN000: 0,
+ PATTERN001: 1,
+ PATTERN010: 2,
+ PATTERN011: 3,
+ PATTERN100: 4,
+ PATTERN101: 5,
+ PATTERN110: 6,
+ PATTERN111: 7
+ };
+ var QRUtil = {
+ PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],
+ G15: 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0,
+ G18: 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0,
+ G15_MASK: 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1,
+ getBCHTypeInfo: function (data) {
+ var d = data << 10;
+
+ while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+ d ^= QRUtil.G15 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15);
+ }
+
+ return (data << 10 | d) ^ QRUtil.G15_MASK;
+ },
+ getBCHTypeNumber: function (data) {
+ var d = data << 12;
+
+ while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+ d ^= QRUtil.G18 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18);
+ }
+
+ return data << 12 | d;
+ },
+ getBCHDigit: function (data) {
+ var digit = 0;
+
+ while (data != 0) {
+ digit++;
+ data >>>= 1;
+ }
+
+ return digit;
+ },
+ getPatternPosition: function (typeNumber) {
+ return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+ },
+ getMask: function (maskPattern, i, j) {
+ switch (maskPattern) {
+ case QRMaskPattern.PATTERN000:
+ return (i + j) % 2 == 0;
+
+ case QRMaskPattern.PATTERN001:
+ return i % 2 == 0;
+
+ case QRMaskPattern.PATTERN010:
+ return j % 3 == 0;
+
+ case QRMaskPattern.PATTERN011:
+ return (i + j) % 3 == 0;
+
+ case QRMaskPattern.PATTERN100:
+ return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+
+ case QRMaskPattern.PATTERN101:
+ return i * j % 2 + i * j % 3 == 0;
+
+ case QRMaskPattern.PATTERN110:
+ return (i * j % 2 + i * j % 3) % 2 == 0;
+
+ case QRMaskPattern.PATTERN111:
+ return (i * j % 3 + (i + j) % 2) % 2 == 0;
+
+ default:
+ throw new Error("bad maskPattern:" + maskPattern);
+ }
+ },
+ getErrorCorrectPolynomial: function (errorCorrectLength) {
+ var a = new QRPolynomial([1], 0);
+
+ for (var i = 0; i < errorCorrectLength; i++) {
+ a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+ }
+
+ return a;
+ },
+ getLengthInBits: function (mode, type) {
+ if (1 <= type && type < 10) {
+ switch (mode) {
+ case QRMode.MODE_NUMBER:
+ return 10;
+
+ case QRMode.MODE_ALPHA_NUM:
+ return 9;
+
+ case QRMode.MODE_8BIT_BYTE:
+ return 8;
+
+ case QRMode.MODE_KANJI:
+ return 8;
+
+ default:
+ throw new Error("mode:" + mode);
+ }
+ } else if (type < 27) {
+ switch (mode) {
+ case QRMode.MODE_NUMBER:
+ return 12;
+
+ case QRMode.MODE_ALPHA_NUM:
+ return 11;
+
+ case QRMode.MODE_8BIT_BYTE:
+ return 16;
+
+ case QRMode.MODE_KANJI:
+ return 10;
+
+ default:
+ throw new Error("mode:" + mode);
+ }
+ } else if (type < 41) {
+ switch (mode) {
+ case QRMode.MODE_NUMBER:
+ return 14;
+
+ case QRMode.MODE_ALPHA_NUM:
+ return 13;
+
+ case QRMode.MODE_8BIT_BYTE:
+ return 16;
+
+ case QRMode.MODE_KANJI:
+ return 12;
+
+ default:
+ throw new Error("mode:" + mode);
+ }
+ } else {
+ throw new Error("type:" + type);
+ }
+ },
+ getLostPoint: function (qrCode) {
+ var moduleCount = qrCode.getModuleCount();
+ var lostPoint = 0;
+
+ for (var row = 0; row < moduleCount; row++) {
+ for (var col = 0; col < moduleCount; col++) {
+ var sameCount = 0;
+ var dark = qrCode.isDark(row, col);
+
+ for (var r = -1; r <= 1; r++) {
+ if (row + r < 0 || moduleCount <= row + r) {
+ continue;
+ }
+
+ for (var c = -1; c <= 1; c++) {
+ if (col + c < 0 || moduleCount <= col + c) {
+ continue;
+ }
+
+ if (r == 0 && c == 0) {
+ continue;
+ }
+
+ if (dark == qrCode.isDark(row + r, col + c)) {
+ sameCount++;
+ }
+ }
+ }
+
+ if (sameCount > 5) {
+ lostPoint += 3 + sameCount - 5;
+ }
+ }
+ }
+
+ for (var row = 0; row < moduleCount - 1; row++) {
+ for (var col = 0; col < moduleCount - 1; col++) {
+ var count = 0;
+ if (qrCode.isDark(row, col)) count++;
+ if (qrCode.isDark(row + 1, col)) count++;
+ if (qrCode.isDark(row, col + 1)) count++;
+ if (qrCode.isDark(row + 1, col + 1)) count++;
+
+ if (count == 0 || count == 4) {
+ lostPoint += 3;
+ }
+ }
+ }
+
+ for (var row = 0; row < moduleCount; row++) {
+ for (var col = 0; col < moduleCount - 6; col++) {
+ if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) {
+ lostPoint += 40;
+ }
+ }
+ }
+
+ for (var col = 0; col < moduleCount; col++) {
+ for (var row = 0; row < moduleCount - 6; row++) {
+ if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) {
+ lostPoint += 40;
+ }
+ }
+ }
+
+ var darkCount = 0;
+
+ for (var col = 0; col < moduleCount; col++) {
+ for (var row = 0; row < moduleCount; row++) {
+ if (qrCode.isDark(row, col)) {
+ darkCount++;
+ }
+ }
+ }
+
+ var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+ lostPoint += ratio * 10;
+ return lostPoint;
+ }
+ };
+ var QRMath = {
+ glog: function (n) {
+ if (n < 1) {
+ throw new Error("glog(" + n + ")");
+ }
+
+ return QRMath.LOG_TABLE[n];
+ },
+ gexp: function (n) {
+ while (n < 0) {
+ n += 255;
+ }
+
+ while (n >= 256) {
+ n -= 255;
+ }
+
+ return QRMath.EXP_TABLE[n];
+ },
+ EXP_TABLE: new Array(256),
+ LOG_TABLE: new Array(256)
+ };
+
+ for (var i = 0; i < 8; i++) {
+ QRMath.EXP_TABLE[i] = 1 << i;
+ }
+
+ for (var i = 8; i < 256; i++) {
+ QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
+ }
+
+ for (var i = 0; i < 255; i++) {
+ QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+ }
+
+ function QRPolynomial(num, shift) {
+ if (num.length == undefined) {
+ throw new Error(num.length + "/" + shift);
+ }
+
+ var offset = 0;
+
+ while (offset < num.length && num[offset] == 0) {
+ offset++;
+ }
+
+ this.num = new Array(num.length - offset + shift);
+
+ for (var i = 0; i < num.length - offset; i++) {
+ this.num[i] = num[i + offset];
+ }
+ }
+
+ QRPolynomial.prototype = {
+ get: function (index) {
+ return this.num[index];
+ },
+ getLength: function () {
+ return this.num.length;
+ },
+ multiply: function (e) {
+ var num = new Array(this.getLength() + e.getLength() - 1);
+
+ for (var i = 0; i < this.getLength(); i++) {
+ for (var j = 0; j < e.getLength(); j++) {
+ num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+ }
+ }
+
+ return new QRPolynomial(num, 0);
+ },
+ mod: function (e) {
+ if (this.getLength() - e.getLength() < 0) {
+ return this;
+ }
+
+ var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
+ var num = new Array(this.getLength());
+
+ for (var i = 0; i < this.getLength(); i++) {
+ num[i] = this.get(i);
+ }
+
+ for (var i = 0; i < e.getLength(); i++) {
+ num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+ }
+
+ return new QRPolynomial(num, 0).mod(e);
+ }
+ };
+
+ function QRRSBlock(totalCount, dataCount) {
+ this.totalCount = totalCount;
+ this.dataCount = dataCount;
+ }
+
+ QRRSBlock.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];
+
+ QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
+ var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
+
+ if (rsBlock == undefined) {
+ throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
+ }
+
+ var length = rsBlock.length / 3;
+ var list = [];
+
+ for (var i = 0; i < length; i++) {
+ var count = rsBlock[i * 3 + 0];
+ var totalCount = rsBlock[i * 3 + 1];
+ var dataCount = rsBlock[i * 3 + 2];
+
+ for (var j = 0; j < count; j++) {
+ list.push(new QRRSBlock(totalCount, dataCount));
+ }
+ }
+
+ return list;
+ };
+
+ QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {
+ switch (errorCorrectLevel) {
+ case QRErrorCorrectLevel.L:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
+
+ case QRErrorCorrectLevel.M:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
+
+ case QRErrorCorrectLevel.Q:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
+
+ case QRErrorCorrectLevel.H:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
+
+ default:
+ return undefined;
+ }
+ };
+
+ function QRBitBuffer() {
+ this.buffer = [];
+ this.length = 0;
+ }
+
+ QRBitBuffer.prototype = {
+ get: function (index) {
+ var bufIndex = Math.floor(index / 8);
+ return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) == 1;
+ },
+ put: function (num, length) {
+ for (var i = 0; i < length; i++) {
+ this.putBit((num >>> length - i - 1 & 1) == 1);
+ }
+ },
+ getLengthInBits: function () {
+ return this.length;
+ },
+ putBit: function (bit) {
+ var bufIndex = Math.floor(this.length / 8);
+
+ if (this.buffer.length <= bufIndex) {
+ this.buffer.push(0);
+ }
+
+ if (bit) {
+ this.buffer[bufIndex] |= 0x80 >>> this.length % 8;
+ }
+
+ this.length++;
+ }
+ };
+ var QRCodeLimitLength = [[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155], [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220], [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310], [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403], [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511], [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625], [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742], [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898], [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051], [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]]; // QRCode object
+
+ QRCode = function (canvasId, vOption) {
+ this._htOption = {
+ width: 256,
+ height: 256,
+ typeNumber: 4,
+ colorDark: "#000000",
+ colorLight: "#ffffff",
+ correctLevel: QRErrorCorrectLevel.H
+ };
+
+ if (typeof vOption === 'string') {
+ vOption = {
+ text: vOption
+ };
+ } // Overwrites options
+
+
+ if (vOption) {
+ for (var i in vOption) {
+ this._htOption[i] = vOption[i];
+ }
+ }
+
+ this._oQRCode = null;
+ this.canvasId = canvasId;
+
+ if (this._htOption.text && this.canvasId) {
+ this.makeCode(this._htOption.text);
+ }
+ };
+
+ QRCode.prototype.makeCode = function (sText) {
+ this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);
+
+ this._oQRCode.addData(sText);
+
+ this._oQRCode.make();
+
+ this.makeImage();
+ };
+
+ QRCode.prototype.makeImage = function () {
+ var _oContext;
+
+ if (this._htOption.usingIn) {
+ _oContext = uni.createCanvasContext(this.canvasId, this._htOption.usingIn);
+ } else {
+ _oContext = uni.createCanvasContext(this.canvasId);
+ }
+
+ var _htOption = this._htOption;
+ var oQRCode = this._oQRCode;
+ var nCount = oQRCode.getModuleCount();
+ var nWidth = _htOption.width / nCount;
+ var nHeight = _htOption.height / nCount;
+ var nRoundedWidth = Math.round(nWidth);
+ var nRoundedHeight = Math.round(nHeight);
+
+ if (_htOption.image && _htOption.image != '') {
+ _oContext.drawImage(_htOption.image, 0, 0, _htOption.width, _htOption.height);
+ }
+
+ for (var row = 0; row < nCount; row++) {
+ for (var col = 0; col < nCount; col++) {
+ var bIsDark = oQRCode.isDark(row, col);
+ var nLeft = col * nWidth;
+ var nTop = row * nHeight;
+
+ _oContext.setStrokeStyle(bIsDark ? _htOption.colorDark : _htOption.colorLight); // _oContext.setStrokeStyle('yellow')
+
+
+ _oContext.setLineWidth(1);
+
+ _oContext.setFillStyle(bIsDark ? _htOption.colorDark : _htOption.colorLight); // _oContext.setFillStyle('red')
+ // if (bIsDark) {
+
+
+ _oContext.fillRect(nLeft, nTop, nWidth, nHeight); // }
+ // 안티 앨리어싱 방지 처리
+ // if (bIsDark) {
+
+
+ _oContext.strokeRect(Math.floor(nLeft) + 0.5, Math.floor(nTop) + 0.5, nRoundedWidth, nRoundedHeight);
+
+ _oContext.strokeRect(Math.ceil(nLeft) - 0.5, Math.ceil(nTop) - 0.5, nRoundedWidth, nRoundedHeight); // }
+ // _oContext.fillRect(
+ // Math.floor(nLeft) + 0.5,
+ // Math.floor(nTop) + 0.5,
+ // nRoundedWidth,
+ // nRoundedHeight
+ // );
+ // _oContext.fillRect(
+ // Math.ceil(nLeft) - 0.5,
+ // Math.ceil(nTop) - 0.5,
+ // nRoundedWidth,
+ // nRoundedHeight
+ // );
+ // _oContext.clearRect(
+ // Math.floor(nLeft) + 0.5,
+ // Math.floor(nTop) + 0.5,
+ // nRoundedWidth,
+ // nRoundedHeight
+ // );
+ // _oContext.clearRect(
+ // Math.ceil(nLeft) - 0.5,
+ // Math.ceil(nTop) - 0.5,
+ // nRoundedWidth,
+ // nRoundedHeight
+ // );
+
+ }
+ }
+
+ _oContext.draw();
+ };
+
+ QRCode.prototype.exportImage = function (callback) {
+ if (!callback) {
+ return;
+ }
+
+ uni.canvasToTempFilePath({
+ x: 0,
+ y: 0,
+ width: this._htOption.width,
+ height: this._htOption.height,
+ destWidth: this._htOption.width,
+ destHeight: this._htOption.height,
+ canvasId: this.canvasId,
+ success: function (res) {
+ console.log(res.tempFilePath);
+ callback(res.tempFilePath);
+ },
+ fail: function (err) {
+ console.log(err);
+ }
+ });
+ };
+
+ QRCode.CorrectLevel = QRErrorCorrectLevel;
+})();
+
+module.exports = QRCode;
\ No newline at end of file