,",
+ "mei": "-0I~j|vz>yRv#sks]sTs4r-+b-+(-(_-(.-&h-#%{@wGuWs}s|rJrDlaWTV}V+NAMvKfIgGKFX9a7c,7&]&+%~",
+ "bie": "-/A-/;fGe2`#M'M!$!#I",
+ "pao": "-/>-+i-'^~o|2w=hA]$[P?.4J4H3d06.M'^%A!S",
+ "geng": "-/7-&A{TzHlrh=ZIOlK4IX=X2p&M",
+ "shua": "-//-%j",
+ "cuo": "-.y-.p-*5wukWkSh!ZKY&WuV4(o$j$'",
+ "kei": "-.woU",
+ "la": "-.v-%3-$n~L|8[RXFXEWnUEU2R`MOI6DT:T0['o$A",
+ "pou": "-.l-'_-&[{]twtO]+]&Z+YGJS/<",
+ "tuan": "-.I~!}~}K}HyPy&f7`>[}XIVmGLE;;.:m8t2[,F%v%p",
+ "zuan": "-.)XOTt",
+ "keng": "-,x-([|t|kvIZCXlVgBF/C",
+ "gao": "-,Z-(I-(>wRlpWjNHGxGwGdG>E~E3Dm,)!y!t",
+ "lang": "-,V-&J-$~{Jy[r{llgiSeOIOHO;KRHHG4Cp=[3Y,z*%(s",
+ "weng": "-,@-#oyxv{kfU!Pd9o'N'&",
+ "tao": "-+m-)E-'+-%DwPwMw*r}i/fl`j[oYBWXL,JkGtE?><=)'v",
+ "cen": "-)l-)k-)j-)i{Un#kH@?=1",
+ "shuang": "-)byOqeq^`NDB>t8R5w5^0&",
+ "po": "-)8-&M-#6~]|ZvztMoZmlmZg9W]TXR+O*E%?E>q>o>D;*:J8;6F3v,9*l!`",
+ "a": "-(s-'o-%O-$0",
+ "tun": "-(k-(7-%L-!`}}|snFhNdP_mRQPFOC@x=335",
+ "hang": "-([{dwSvIj)dGS8NML/@.",
+ "shun": "-(ZHnF?",
+ "ne": "-(R-(8-(%-&T]0%a",
+ "chuo": "-(Q-&@-%=~Hu!t~t.ssqVa|^2Z}UuCClMi@i$fDf@b1`Y_4XyW6TMMzJ$I:GOD{=#gKfVfSfC^P^N^>[zWQW!VySKMlIvGkFdEJ:)8{4[1s/|/z,f,.*{(p%m",
+ "pen": "-('-$E-$=-!6CN;'6}'Q!=",
+ "pin": "-&~~Yuatnrvq{[AZ{H]@_/c+!)r",
+ "ha": "-&wvz",
+ "yo": "-&`-%c-$B",
+ "o": "-&X-$a-!H-!%",
+ "n": "-&)-#a",
+ "huan": "-%v-$Z-$Y~G}D{_zWw@w2r.q[pYp0okm8l!h]bVaH_I^iYpXQUnU1KyK2GBD%CPCB>1=c<~;c8V7D734/3>2I.[.;,3+R*})9(1'b$d$:",
+ "ken": "-%V{qxjc*_CX~*I",
+ "chuai": "-%=XIW}Ch",
+ "pa": "-%/vLisihd.]oX|NC@r8608)P#!",
+ "se": "-%,-$,yogK_WY%X`W~J/J.Hl",
+ "nv": "vkc7OM@!",
+ "nuan": "vcPo;`:m2X2W",
+ "shuo": "v]a'WhT'S|OKGnCn>>470W+p",
+ "niu": "v?q=dKd0]S]![DN?@8@!4u/e/d.W",
+ "rao": "u2rA]PU?KkFJ",
+ "niang": "t|r&qb",
+ "shui": "t]iTZMYuA$A#@{=.=*",
+ "nve": "t)%S$%",
+ "nen": "sirarYc^",
+ "niao": "s!r+qsnwFq9x",
+ "kuan": "pBp#ooK)CoCfCd",
+ "cuan": "jPV'U*T~TwDtD7BU@o6E5K1S0<",
+ "te": "dsdr`R/F/9",
+ "zen": "d5VU",
+ "zei": "^H",
+ "den": "][]C",
+ "zhua": "],ZYV#ER0:09",
+ "shuan": "[&L^GL {
+ let result = 0,
+ temp = 1;
+ for (let idx = str.length; idx--;) {
+ result += temp * (chars.indexOf(str.charAt(idx)));
+ temp *= 91;
+ }
+ return result;
+ },
+ fn = (a, f) => {
+ let p, gs, i, ch, num;
+ for (p in a) {
+ if (a.hasOwnProperty(p)) {
+ gs = a[p].match(ungroup);
+ for (i = 0; i < gs.length; i++) {
+ ch = gs[i].replace(rg, '#');
+ num = fromX(ch);
+ ch = String.fromCharCode(base + middle + (f ? -num : num));
+ if (sToC.hasOwnProperty(p)) {
+ sToC[p] += ch;
+ } else {
+ sToC[p] = ch;
+ }
+ if (cToS.hasOwnProperty(ch)) {
+ cToS[ch] += COMA + p;
+ } else {
+ cToS[ch] = p;
+ }
+ }
+ }
+ }
+ };
+fn(SDB.m, 1);
+fn(SDB.a);
+SDB = null;
+export default {
+ getSpell(chars, polyphone, spliter) {
+ let cToS = DB.cToS;
+ let res = [],
+ pp = typeof (polyphone) == 'function'; //判断polyphone是否是函数
+ chars = String(chars).split(EMPTY);
+ for (let i = 0, ch, ss; i < chars.length; i++) {
+ ch = chars[i];
+ if (cToS.hasOwnProperty(ch)) {
+ ss = cToS[ch];
+ if (~ss.indexOf(COMA)) {
+ ss = ss.split(COMA);
+ ss = pp ? polyphone(ch, ss) : '[' + ss + ']';
+ res.push(ss);
+ } else {
+ res.push(ss);
+ }
+ } else {
+ res.push(ch);
+ }
+ }
+ return res.join(spliter || COMA);
+ },
+ getChars(spell) {
+ let sToC = DB.sToC;
+ if (sToC.hasOwnProperty(spell)) {
+ return sToC[spell].split(EMPTY);
+ }
+ return [];
+ }
+};
\ No newline at end of file
diff --git a/src/components/wyb-table/js/inobounce.js b/src/components/wyb-table/js/inobounce.js
new file mode 100644
index 0000000..20ee999
--- /dev/null
+++ b/src/components/wyb-table/js/inobounce.js
@@ -0,0 +1,137 @@
+/*! iNoBounce - v0.2.0
+* https://github.com/lazd/iNoBounce/
+* Copyright (c) 2013 Larry Davis ; Licensed BSD */
+(function(global) {
+ // Stores the Y position where the touch started
+ var startY = 0;
+
+ // Store enabled status
+ var enabled = false;
+
+ var supportsPassiveOption = false;
+ try {
+ var opts = Object.defineProperty({}, 'passive', {
+ get: function() {
+ supportsPassiveOption = true;
+ }
+ });
+ window.addEventListener('test', null, opts);
+ } catch (e) {}
+
+ var handleTouchmove = function(evt) {
+ // Get the element that was scrolled upon
+ var el = evt.target;
+
+ // Allow zooming
+ var zoom = window.innerWidth / window.document.documentElement.clientWidth;
+ if (evt.touches.length > 1 || zoom !== 1) {
+ return;
+ }
+
+ // Check all parent elements for scrollability
+ while (el !== document.body && el !== document) {
+ // Get some style properties
+ var style = window.getComputedStyle(el);
+
+ if (!style) {
+ // If we've encountered an element we can't compute the style for, get out
+ break;
+ }
+
+ // Ignore range input element
+ if (el.nodeName === 'INPUT' && el.getAttribute('type') === 'range') {
+ return;
+ }
+
+ var scrolling = style.getPropertyValue('-webkit-overflow-scrolling');
+ var overflowY = style.getPropertyValue('overflow-y');
+ var height = parseInt(style.getPropertyValue('height'), 10);
+
+ // Determine if the element should scroll
+ var isScrollable = scrolling === 'touch' && (overflowY === 'auto' || overflowY === 'scroll');
+ var canScroll = el.scrollHeight > el.offsetHeight;
+
+ if (isScrollable && canScroll) {
+ // Get the current Y position of the touch
+ var curY = evt.touches ? evt.touches[0].screenY : evt.screenY;
+
+ // Determine if the user is trying to scroll past the top or bottom
+ // In this case, the window will bounce, so we have to prevent scrolling completely
+ var isAtTop = (startY <= curY && el.scrollTop === 0);
+ var isAtBottom = (startY >= curY && el.scrollHeight - el.scrollTop === height);
+
+ // Stop a bounce bug when at the bottom or top of the scrollable element
+ if (isAtTop || isAtBottom) {
+ evt.preventDefault();
+ }
+
+ // No need to continue up the DOM, we've done our job
+ return;
+ }
+
+ // Test the next parent
+ el = el.parentNode;
+ }
+
+ // Stop the bouncing -- no parents are scrollable
+ evt.preventDefault();
+ };
+
+ var handleTouchstart = function(evt) {
+ // Store the first Y position of the touch
+ startY = evt.touches ? evt.touches[0].screenY : evt.screenY;
+ };
+
+ var enable = function() {
+ // Listen to a couple key touch events
+ window.addEventListener('touchstart', handleTouchstart, supportsPassiveOption ? { passive : false } : false);
+ window.addEventListener('touchmove', handleTouchmove, supportsPassiveOption ? { passive : false } : false);
+ enabled = true;
+ };
+
+ var disable = function() {
+ // Stop listening
+ window.removeEventListener('touchstart', handleTouchstart, false);
+ window.removeEventListener('touchmove', handleTouchmove, false);
+ enabled = false;
+ };
+
+ var isEnabled = function() {
+ return enabled;
+ };
+
+ // Enable by default if the browser supports -webkit-overflow-scrolling
+ // Test this by setting the property with JavaScript on an element that exists in the DOM
+ // Then, see if the property is reflected in the computed style
+ var testDiv = document.createElement('div');
+ document.documentElement.appendChild(testDiv);
+ testDiv.style.WebkitOverflowScrolling = 'touch';
+ var scrollSupport = 'getComputedStyle' in window && window.getComputedStyle(testDiv)['-webkit-overflow-scrolling'] === 'touch';
+ document.documentElement.removeChild(testDiv);
+
+ if (scrollSupport) {
+ enable();
+ }
+
+ // A module to support enabling/disabling iNoBounce
+ var iNoBounce = {
+ enable: enable,
+ disable: disable,
+ isEnabled: isEnabled
+ };
+
+ if (typeof module !== 'undefined' && module.exports) {
+ // Node.js Support
+ module.exports = iNoBounce;
+ }
+ if (typeof global.define === 'function') {
+ // AMD Support
+ (function(define) {
+ define('iNoBounce', [], function() { return iNoBounce; });
+ }(global.define));
+ }
+ else {
+ // Browser support
+ global.iNoBounce = iNoBounce;
+ }
+}(this));
diff --git a/src/components/wyb-table/js/objEqual.js b/src/components/wyb-table/js/objEqual.js
new file mode 100644
index 0000000..f135845
--- /dev/null
+++ b/src/components/wyb-table/js/objEqual.js
@@ -0,0 +1,40 @@
+function isEqual(x, y) {
+ if (x === y) {
+ return true
+ }
+ if (!(x instanceof Object) || !(y instanceof Object)) {
+ return false
+ }
+ if (x.constructor !== y.constructor) {
+ return false
+ }
+ for (var p in x) {
+ if (x.hasOwnProperty(p)) {
+ if (!y.hasOwnProperty(p)) {
+ return false
+ }
+
+ if (x[p] === y[p]) {
+ continue
+ }
+
+ if (typeof(x[p]) !== "object") {
+ return false
+ }
+
+ if (!Object.equals(x[p], y[p])) {
+ return false
+ }
+ }
+ }
+ for (p in y) {
+ if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) {
+ return false
+ }
+ }
+ return true
+}
+
+module.exports = {
+ isEqual
+}
\ No newline at end of file
diff --git a/src/components/wyb-table/wyb-table.vue b/src/components/wyb-table/wyb-table.vue
new file mode 100644
index 0000000..dc8badf
--- /dev/null
+++ b/src/components/wyb-table/wyb-table.vue
@@ -0,0 +1,1117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{autoContentItem(cIndex, hIndex)}}
+
+
+
+
+ {{autoBottomComputedItem(index)}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/dev/core/base/base.service.js b/src/dev/core/base/base.service.js
new file mode 100644
index 0000000..939af82
--- /dev/null
+++ b/src/dev/core/base/base.service.js
@@ -0,0 +1,12 @@
+import {HttpUtil} from '../../core/utils/http.util'
+import {LocalStorageUtil} from '../utils/local-storage.util'
+import globalVariable from "../global-variable";
+
+export class BaseService {
+
+ httpUtil = HttpUtil
+
+ globalVariable = globalVariable
+
+ localStorageUtil = LocalStorageUtil
+}
diff --git a/src/dev/core/global-variable.js b/src/dev/core/global-variable.js
new file mode 100644
index 0000000..bf7eb4e
--- /dev/null
+++ b/src/dev/core/global-variable.js
@@ -0,0 +1,25 @@
+const globalVariable = {
+
+ key: '', // 数据签名key
+ localStoragePrefix: 'localStorage:demo-uview:app:', // todo 不同平台这里需要修改
+ // localStoragePrefix: 'localStorage:wlsh-uview:app:', // todo 不同平台这里需要修改
+ timestamp: new Date().getTime(),
+
+ baseUrl: 'http://xxxxxxxxxxxxxxxxxxxxxxxx:33000/demo-mobile/', // 服务端地址
+
+ systemName: 'uview商城模板',
+
+ runPlatform: "1", // 0-微信小程序版,1-APP版,2-h5版 todo 不同平台这里需要修改
+
+ userInfo: {},
+
+ token: null,
+
+ coordinate: "", // 手机坐标 -- > 113.41189,22.94181
+
+ orderSequenceNumber: null, // 餐饮号
+
+ tempData: {}, // 存放临时数据,例如跳转页面时获取前一个页面保存的数据。
+};
+
+export default globalVariable
diff --git a/src/dev/core/interceptor/http.interceptor.js b/src/dev/core/interceptor/http.interceptor.js
new file mode 100644
index 0000000..c88c7a1
--- /dev/null
+++ b/src/dev/core/interceptor/http.interceptor.js
@@ -0,0 +1,81 @@
+import {LocalStorageUtil} from "../utils/local-storage.util";
+import globalVariable from "../global-variable";
+import {CommonUtil} from "../utils/common.util";
+import {AuthUtil} from "../utils/auth.util";
+
+// 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token
+// 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的
+const install = (Vue, vm) => {
+ Vue.prototype.$u.http.setConfig({
+ // baseUrl: 'https://api.youzixy.com',
+ // 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data
+ // 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值
+ originalData: true,
+ // 设置自定义头部content-type
+ // header: {
+ // 'content-type': 'xxx'
+ // }
+ });
+ // 请求拦截,配置Token等参数
+ Vue.prototype.$u.http.interceptor.request = (config) => {
+ // 添加token信息
+ config.header.Authorization = globalVariable.token;
+ config.header.timestamp = new Date().getTime();
+ config.header.sign = CommonUtil.generateSign(config.header.timestamp);
+
+ // 方式一,存放在vuex的token,假设使用了uView封装的vuex方式,见:https://uviewui.com/components/globalVariable.html
+ // config.header.token = vm.token;
+
+ // 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取
+ // config.header.token = vm.$store.state.token;
+
+ // 方式三,如果token放在了globalData,通过getApp().globalData获取
+ // config.header.token = getApp().globalData.username;
+
+ // 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的,所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值
+ // const token = uni.getStorageSync('token');
+ // config.header.token = token;
+ return config;
+ }
+ // 响应拦截,判断状态码是否通过
+ Vue.prototype.$u.http.interceptor.response = (res) => {
+ console.log("Vue.prototype.$u.http.interceptor.response", res)
+
+ if (res.header.Authorization) {
+ console.log('------------新的token-----------', res.header.Authorization)
+ globalVariable.token = res.header.Authorization
+ LocalStorageUtil.setItem('token', globalVariable.token)
+ }
+
+ // 如果把originalData设置为了true,这里得到将会是服务器返回的所有的原始数据
+ // 判断可能变成了res.statusCode,或者res.data.code之类的,请打印查看结果
+ if (res.statusCode == 200) {
+ // // 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
+ // 如果把originalData设置为了true,这里return回什么,this.$u.post的then回调中就会得到什么
+ return res.data;
+ } else {
+ if (res.statusCode == 401) {
+ AuthUtil.logout();
+ } else {
+ let message = "系统异常";
+ if (res.data.msg) {
+ message = res.data.msg;
+ }
+ if (res.data.message) {
+ message = res.data.message;
+ }
+ CommonUtil.alert(message)
+ }
+
+ uni.hideLoading();
+
+ // 如果返回false,则会调用Promise的reject回调,
+ // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
+ return false;
+ }
+ }
+}
+
+export default {
+ install
+}
diff --git a/src/dev/core/mixin/my.mixin.js b/src/dev/core/mixin/my.mixin.js
new file mode 100644
index 0000000..bed73d2
--- /dev/null
+++ b/src/dev/core/mixin/my.mixin.js
@@ -0,0 +1,238 @@
+import globalVariable from "../global-variable";
+import {PaginationModel} from "../model/pagination.model";
+import {CommonUtil} from "../utils/common.util";
+import {UFormUtil} from "../utils/u-form.util";
+import {LocalStorageUtil} from "../utils/local-storage.util";
+import {TabbarUtil} from "../utils/tabbar.util";
+
+/**
+ * mixin的作用是多个组件可以共享数据和方法,在使用mixin的组件中引入后,mixin中的方法和属性也就并入到该组件中,
+ * 可以直接使用,在已有的组件数据和方法进行了扩充。引入mixin分全局引用和局部引用。
+ * todo 可以代替基类base的功能
+ *
+ * todo Page页面生命周期函数执行顺序
+ * beforeCreate => onLoad => onShow => created => beforeMount => onReady => mounted
+ * 刷新数据后
+ * beforeUpdate => updated
+ *
+ * vue 父子组件的生命周期顺序加载渲染过程
+ * 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
+ *
+ * 子组件更新过程
+ * 父beforeUpdate->子beforeUpdate->子updated->父updated
+ *
+ * 父组件更新过程
+ * 父beforeUpdate->父updated
+ *
+ * 销毁过程
+ * 父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
+ */
+const myMixin = {
+ data() {
+ return {
+ // _self: null, // todo 不能直接赋值否则u-view框架报错, 当vue作为组件引用时,组件模板页面中的this为null,这时需要使用_self变量代替。
+ uni: uni, // 不这样设置,template页面中不能直接使用(例如:@click="uni.navigateTo({url: 'xxx})")
+ $u: this.$u, // 不这样设置,template页面中取不到值
+ CommonUtil: CommonUtil, // 不这样设置,template页面中无法直接使用
+ TabbarUtil: TabbarUtil, // 不这样设置,template页面中无法直接使用
+ UFormUtil: UFormUtil, // 不这样设置,template页面中无法直接使用
+ globalVariable: globalVariable, // todo 模板页面中可以直接使用,js中可以直接使用
+ pagination: new PaginationModel(), // 每个组件都是一个新的对象互不影响
+ urlParams: {}, // 导航过来的url参数?a=1&b=2 ==> {a: 1, b: 2} 可以直接获取
+ objParams: {}, // 导航过来的对象参数 todo 导航过来的是同一个对象,改变内容所有引用的页面将会同时受到影响。 可以直接获取
+ currentRouteUrl: '',
+ // 时间控件显示格式:2020-09-22 16:57:38
+ pickerFormatDatetime: {
+ year: true,
+ month: true,
+ day: true,
+ hour: true,
+ minute: true,
+ second: true,
+ },
+ // 时间控件显示格式:2020-09-22
+ pickerFormatDate: {
+ year: true,
+ month: true,
+ day: true,
+ hour: false,
+ minute: false,
+ second: false,
+ }
+ }
+ },
+ // options 参数为null,当组件使用时不会被调用
+ beforeCreate(options) {
+ // console.log(`myMixin--------------------------------beforeCreate(${JSON.stringify(options)})--------------------------------`)
+ const _self = this;
+ // 刷新页面时重新赋值,否则页面会报错。
+ if (!globalVariable.token) {
+ let token = LocalStorageUtil.getItem("token");
+ let userInfo = LocalStorageUtil.getItem("userInfo");
+ globalVariable.orderSequenceNumber = null; // 删除已扫码的餐饮号
+ if (token && userInfo) {
+ globalVariable.token = token;
+ globalVariable.userInfo = userInfo;
+ }
+ }
+ },
+ // options页面导航的参数,当组件使用时不会被调用
+ onLoad(options) {
+ console.log(`myMixin--------------------------------onLoad(options)--------------------------------`, options);
+ const _self = this;
+ _self.urlParams = options; // app端没有this.$root.$mp.query参数。
+ if (!_self.urlParams) {
+ _self.urlParams = {};
+ }
+ console.log("urlParams------------------------", _self.urlParams);
+
+ if (_self.urlParams && _self.urlParams.q && _self.urlParams.scancode_time) {
+ _self.urlParams.url = decodeURIComponent(_self.urlParams.q);
+ _self.urlParams = CommonUtil.getUrlParams(_self.urlParams.url);
+ _self.urlParams.isScan = "1"; // 是否扫码进入到该页面
+ console.log("微信扫码进入小程序结果urlParams------------------------", _self.urlParams);
+ }
+
+ // 兼容部分手机机型不能从导航事件中获取objParams问题。
+ if (!globalVariable.objParams) {
+ globalVariable.objParams = {};
+ }
+ _self.objParams = globalVariable.objParams;
+ console.log("globalVariable.objParams------------------------", _self.objParams);
+
+ const eventChannel = this.getOpenerEventChannel();
+ eventChannel.on('objParams', function (data) {
+ _self.objParams = data;
+ console.log("objParams------------------------", data);
+ });
+
+ if (this.validateForm) {
+ UFormUtil.init(this.validateForm);
+ console.log("validateForm表单对象初始化成功--------------------------------", this.validateForm);
+ }
+ },
+ // options 参数为null,当组件使用时不会被调用
+ onShow(options) {
+ // console.log(`myMixin--------------------------------onShow(${JSON.stringify(options)})--------------------------------`)
+ },
+ // options 参数为null,当组件使用时不会被调用
+ created(options) {
+ // console.log(`myMixin--------------------------------created(${JSON.stringify(options)})--------------------------------`)
+ },
+ // options 参数为null,当组件使用时不会被调用
+ onReady(options) {
+ // console.log(`myMixin--------------------------------onReady(${JSON.stringify(options)})--------------------------------`)
+ if (this.validateForm && !this.validateForm.controls) { // todo 当组件使用时onLoad方法不会被调用,所以需要在这里初始化。
+ UFormUtil.init(this.validateForm);
+ console.log("validateForm表单对象初始化成功--------------------------------", this.validateForm);
+ }
+ if (this.validateForm && this.validateForm.rules && this.$refs.validateFormRef) {
+ this.$refs.validateFormRef.setRules(this.validateForm.rules);
+ console.log("validateFormRef表单校验规则初始化成功--------------------------------", this.validateForm);
+ }
+ },
+ // options 参数为null,todo 当组件使用时会被调用
+ mounted(options) {
+ // console.log(`myMixin--------------------------------mounted(${JSON.stringify(options)})--------------------------------`)
+ this._self = this; // todo 当vue作为组件引用时,组件模板页面中的this为null,这时需要使用_self变量代替。
+
+ if (this.validateForm && !this.validateForm.controls) { // todo 当组件使用时onLoad方法不会被调用,所以需要在这里初始化。
+ UFormUtil.init(this.validateForm);
+ console.log("validateForm表单对象初始化成功--------------------------------", this.validateForm);
+ }
+
+ if (this.validateForm && this.validateForm.rules && this.$refs.validateFormRef) {
+ this.$refs.validateFormRef.setRules(this.validateForm.rules);
+ console.log("validateFormRef表单校验规则初始化成功--------------------------------", this.validateForm);
+ }
+
+ // 获取路由数组
+ let routes = getCurrentPages();
+ if (routes && routes.length) {
+ this.currentRouteUrl = routes[routes.length - 1].route;
+ }
+ },
+ methods: {
+ /**
+ * template页面中使用这种方式才能跳转页面
+ * @param url
+ * @param urlParams
+ * @param objParams 传递对象类型数据给下一个页面,改变内容所有引用的页面将会同时受到影响。
+ * 导航:navigateTo(url, urlParams, objParams),跳转页面的objParams将指向同一个地址,修改将同时受到影响。
+ * 导航:navigateTo(url, urlParams, {objParams: objParams}) 跳转页面的objParams对象是一个全新的对象,指向不同的地址。对其修改不影响原对象的值。
+ * todo 在中使用{tbOrder: tbOrder}的方式传值时,将产生一个全新的tbOrder副本,并不是只向原来的tbOrder地址,所以对新的tbOrder修改不会影响原来的tbOrder。
+ * todo 在中使用globalVariable.tempData.tbOrder = tbOrder赋值后globalVariable.tempData.tbOrder不是tbOrder,而是一个全新属性错乱的对象。
+ *
+ * 所以要传递多个对象并且每个对象始终保持是同一个地址,则需要在js中实现。
+ * 例如:@click="test(url, urlParams, obj1, obj2)"
+ * test(url, urlParams, obj1, obj2){
+ * this.navigateTo(url, urlParams, {obj1, obj2});
+ * // 或者
+ * this.navigateTo(url, urlParams).then(res=>{
+ * res.eventChannel.emit('objParams', {obj1, obj2});
+ * })
+ * }
+ */
+ navigateTo(url, urlParams, objParams) {
+
+ // 兼容部分手机机型不能从导航事件中获取objParams问题。
+ globalVariable.objParams = objParams;
+
+ return new Promise(function (resolve, reject) {
+ if (urlParams) {
+ if (url.indexOf("?") === -1) {
+ url = url + "?" + CommonUtil.objectToUrlParams(urlParams);
+ } else {
+ url = url + "&" + CommonUtil.objectToUrlParams(urlParams);
+ }
+ }
+ uni.navigateTo({
+ url: url,
+ success: function (res) {
+ if (objParams) {
+ // 通过eventChannel向被打开页面传送数据
+ res.eventChannel.emit('objParams', objParams)
+ }
+ resolve(res);
+ }
+ })
+ });
+ },
+ /**
+ * 刷新数据
+ * @param dataList
+ */
+ doRefresh(dataList) {
+ // 清空数据。
+ // console.log("myMixin--------------------------------doRefresh()--------------------------------")
+ dataList.splice(0, dataList.length);
+ this.pagination = new PaginationModel();
+ this.$forceUpdate();
+ this.$nextTick(() => {
+ this.pagination = new PaginationModel();
+ this.doInfinite();
+ });
+ },
+ /**
+ * 根据componentRef切换底部菜单栏选项
+ * @param componentRef
+ */
+ switchTarBarByComponentRef(componentRef) {
+ const _self = this;
+ let pages = getCurrentPages();
+ console.log(pages);
+ pages.forEach((page, index) => {
+ if (page.route === 'pages/sub/sub1-tabs/tabs/index') {
+ // h5调用属性和方法可以不用page.$vm,但是微信小程序必须是page.$vm.否则报错。
+ page.$vm.tarbar.forEach((item, index) => {
+ if (item.componentRef === componentRef) {
+ page.$vm.onChangeTabbarTab(index);
+ }
+ });
+ }
+ });
+ }
+ }
+};
+
+export default myMixin
diff --git a/src/dev/core/model/pagination.model.js b/src/dev/core/model/pagination.model.js
new file mode 100644
index 0000000..1b39593
--- /dev/null
+++ b/src/dev/core/model/pagination.model.js
@@ -0,0 +1,96 @@
+export class PaginationModel {
+ /**
+ * 页码,从1开始
+ */
+ pageNum = 1;
+ /**
+ * 页面大小
+ */
+ pageSize = 10;
+
+ size = 0;
+
+ orderBy = null;
+
+ /**
+ * 起始行
+ */
+ startRow = 1;
+ /**
+ *
+ * 末行
+ */
+ endRow = 0;
+ /**
+ * 总数
+ */
+ total = 0;
+ /**
+ * 总页数
+ */
+ pages = 0;
+
+ data = [];
+
+ firstPage = 1;
+
+ prePage = 0;
+
+ nextPage = 0;
+
+ lastPage = 1;
+
+ isFirstPage = true;
+
+ /**
+ * 是否是最后一页
+ */
+ isLastPage = false;
+
+ hasPreviousPage = false
+
+ /**
+ * 是否有下一页
+ */
+ hasNextPage = false;
+
+ navigatePages = 8;
+
+ navigatepageNums = [1];
+
+ isLast = false;
+
+ //
+ status = 'nomore';
+
+ refreshPage(data) {
+ for (let attr in data) {
+ this[attr] = data[attr]
+ }
+ if (this.hasNextPage) {
+ this.pageNum = this.pageNum + 1
+ this.status = 'loadmore'
+ } else {
+ this.status = 'nomore'
+ }
+ return data
+ }
+
+ /**
+ * 分页
+ * pagination[page]
+ * pagination[perpage]
+ * 排序
+ * sort[field]
+ * sort[sort]
+ */
+ appendToUrl(pageNum, pageSize) {
+ if (pageNum) {
+ this.pageNum = pageNum;
+ }
+ if (pageSize) {
+ this.pageSize = pageSize;
+ }
+ return `pageNum=${this.pageNum}&pageSize=${this.pageSize}`
+ }
+}
diff --git a/src/dev/core/utils/auth.util.js b/src/dev/core/utils/auth.util.js
new file mode 100644
index 0000000..a6a4b07
--- /dev/null
+++ b/src/dev/core/utils/auth.util.js
@@ -0,0 +1,19 @@
+import globalVariable from "../global-variable";
+import {LocalStorageUtil} from "./local-storage.util";
+import {CommonUtil} from "./common.util";
+
+export class AuthUtil {
+
+ /**
+ * 退出登录
+ */
+ static logout(message = "会话已过期,请重新登录") {
+ globalVariable.token = null;
+ globalVariable.userInfo = {};
+ globalVariable.orderSequenceNumber = null;
+ globalVariable.coordinate = null;
+ LocalStorageUtil.removeItem("token");
+ LocalStorageUtil.removeItem("userInfo");
+ CommonUtil.toastReLaunch(message, "/pages/main/login/index");
+ }
+}
diff --git a/src/dev/core/utils/baiduMap.util.js b/src/dev/core/utils/baiduMap.util.js
new file mode 100644
index 0000000..d3e5eda
--- /dev/null
+++ b/src/dev/core/utils/baiduMap.util.js
@@ -0,0 +1,52 @@
+export class BaiduMapUtil {
+
+ /**
+ * WGS84转GCj02
+ * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
+ * @param lng
+ * @param lat
+ * @returns {*[]}
+ */
+ static wgs84togcj02tobd09(lng, lat) {
+ const xPI = 3.14159265358979324 * 3000.0 / 180.0
+ const PI = 3.1415926535897932384626
+ const a = 6378245.0
+ const ee = 0.00669342162296594323
+ // WGS84转GCj02
+ let dlat = this.transformlat(lng - 105.0, lat - 35.0)
+ let dlng = this.transformlng(lng - 105.0, lat - 35.0)
+ let radlat = lat / 180.0 * PI
+ let magic = Math.sin(radlat)
+ magic = 1 - ee * magic * magic
+ let sqrtmagic = Math.sqrt(magic)
+ dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)
+ dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)
+ let mglat = lat + dlat
+ let mglng = lng + dlng
+ // 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
+ let z = Math.sqrt(mglng * mglng + mglat * mglat) + 0.00002 * Math.sin(mglat * xPI)
+ let theta = Math.atan2(mglat, mglng) + 0.000003 * Math.cos(mglng * xPI)
+ let bdlng = z * Math.cos(theta) + 0.0065
+ let bdlat = z * Math.sin(theta) + 0.006
+ // return [bdlng, bdlat]
+ return {lng: bdlng, lat: bdlat}
+ }
+
+ static transformlat(lng, lat) {
+ const PI = 3.1415926535897932384626
+ let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng))
+ ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
+ ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0
+ ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0
+ return ret
+ }
+
+ static transformlng(lng, lat) {
+ const PI = 3.1415926535897932384626
+ let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng))
+ ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
+ ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0
+ ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0
+ return ret
+ }
+}
diff --git a/src/dev/core/utils/common.util.js b/src/dev/core/utils/common.util.js
new file mode 100644
index 0000000..a8d4e4f
--- /dev/null
+++ b/src/dev/core/utils/common.util.js
@@ -0,0 +1,830 @@
+import Vue from 'vue'
+import md5Libs from "uview-ui/libs/function/md5";
+import globalVariable from "../global-variable";
+
+export class CommonUtil {
+
+ // ----------------------------------------------原生js----------------------------------------------
+
+ /**
+ * 生成签名
+ *
+ * @return
+ */
+ static generateSign(timestamp) {
+ return md5Libs.md5(md5Libs.md5(timestamp + globalVariable.key) + timestamp + globalVariable.key);
+ }
+
+ /**
+ * 随机生成uuid
+ * @returns {string}
+ */
+ static generateUUID() {
+ var s = []
+ var hexDigits = '0123456789abcdef'
+ for (var i = 0; i < 36; i++) {
+ s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1)
+ }
+ s[14] = '4' // bits 12-15 of the time_hi_and_version field to 0010
+ s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1) // bits 6-7 of the clock_seq_hi_and_reserved to 01
+ s[8] = s[13] = s[18] = s[23] = '-'
+
+ var uuid = s.join('')
+ return uuid
+ }
+
+ /**
+ * 随机生成uuid
+ */
+ static randomUUID() {
+ return this.generateUUID();
+ }
+
+ /**
+ * 生成范围随机数
+ * @param max
+ * @param min
+ * @returns {number}
+ */
+ static random(max, min) {
+ return Math.round(Math.random() * (max - min) + min);
+ }
+
+ /**
+ * 生成code编号
+ *
+ * @return
+ */
+ static generateCode() {
+ let identifyingCode = parseInt((Math.random() * 9 + 1) * 100000 + '');
+ return this.dateFormat(new Date(), 'yyyyMMddHHmmss') + identifyingCode;
+ }
+
+ /**
+ * 获取手机端的屏幕宽度
+ */
+ static getScreenWidth() {
+ // 小程序会报错
+ // let width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
+ let width = uni.getSystemInfoSync().screenWidth;
+ console.log(width);
+ return width;
+ }
+
+ /**
+ * 获取手机端的屏幕高度
+ */
+ static getScreenHeight() {
+ // 微信小程序会报错
+ // let height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
+ let height = uni.getSystemInfoSync().screenHeight;
+ console.log(height);
+ return height;
+ }
+
+ /**
+ * 生成包含数字、大写字母、小写字母的随机数
+ * @param length
+ * @returns {string}
+ */
+ static randomStr(length = 4) { //封装,以便日后使用。
+ //创建一个空字符,用于存放随机数/字母
+ var strData = "";
+ //生成随机字符库 (验证码四位,随机数三种,取公倍数12,所以循环4次。也可以是120次,1200次。)
+ for (var i = 0; i < length; i++) {
+ var num = this.random(0, 9);//生成0-9的随机数
+ var az = String.fromCharCode(this.random(97, 122));//生成a-z
+ var AZ = String.fromCharCode(this.random(65, 90));//生成A-Z
+
+ strData = strData + num + az + AZ;//将生成的字符进行字符串拼接
+ }
+ // 开始真正的随机(从随机字符库中随机取出四个)
+ var str = "";
+ for (var i = 0; i < 4; i++) {
+ str += strData[this.random(0, strData.length - 1)]
+ }
+ return str;
+ }
+
+ /**
+ * 合并对象值
+ */
+ static mergeData(_self, target, ...sources) {
+ for (let index in sources) {
+ let source = sources[index]
+ for (let attrName in source) {
+ _self.$set(target, attrName, source[attrName])
+ if (typeof source[attrName] === 'object') {
+ this.mergeData(_self, target[attrName], source[attrName])
+ }
+ }
+ }
+ _self.$forceUpdate();
+ return target
+ }
+
+ /**
+ * 删除左右两端的空格
+ * @param str
+ * @returns {*}
+ */
+ static trim(str) {
+ let result = str
+ try {
+ result = str.replace(/(^\s*)|(\s*$)/g, '')
+ } catch (e) {
+ // 非字符串没有.replace方法
+ }
+ return result
+ }
+
+ /**
+ * 对象转url参数
+ * @param obj
+ * @param isEncodeURI
+ * @returns {string}
+ */
+ static objectToUrlParams(obj, isEncodeURI) {
+ // 优化参数
+ for (let attrName in obj) {
+ if (obj[attrName] === undefined || obj[attrName] == null || obj[attrName] === 'undefined' || obj[attrName] === 'null' || CommonUtil.trim(obj[attrName]) === '') {
+ delete obj[attrName]
+ }
+ }
+ if (!isEncodeURI) { // 是否编码参数
+ return Object.keys(obj).map(function (key) {
+ return ''.concat(key, '=').concat(obj[key])
+ }).join('&')
+ } else {
+ return Object.keys(obj).map(function (key) {
+ return ''.concat(encodeURIComponent(key), '=').concat(encodeURIComponent(obj[key]))
+ }).join('&')
+ }
+ };
+
+ /**
+ * 时间字符串转时间戳 2020-09-27 17:06:21 --> 1601197581000
+ * @param datetimeStr
+ */
+ static datetimeStrToTimestamp(datetimeStr) {
+ datetimeStr = datetimeStr.substring(0, 19);
+ datetimeStr = datetimeStr.replace(/-/g, '/'); //必须把日期'-'转为'/'
+ let timestamp = new Date(datetimeStr).getTime();
+ return timestamp;
+ }
+
+ /**
+ * 格式化日期
+ * @param date
+ * @param fmt yyyy-MM-dd HH:mm:ss
+ * @returns {*}
+ */
+ static dateFormat(date, fmt = 'yyyy-MM-dd HH:mm:ss') {
+ // 如果是日期字符串,则转成日志类型
+ if (typeof date === 'string') {
+ date = new Date(date);
+ }
+
+ let ret;
+ const opt = {
+ "y+": date.getFullYear().toString(), // 年
+ "M+": (date.getMonth() + 1).toString(), // 月
+ "d+": date.getDate().toString(), // 日
+ "H+": date.getHours().toString(), // 时
+ "m+": date.getMinutes().toString(), // 分
+ "s+": date.getSeconds().toString() // 秒
+ // 有其他格式化字符需求可以继续添加,必须转化成字符串
+ };
+ for (let k in opt) {
+ ret = new RegExp("(" + k + ")").exec(fmt);
+ if (ret) {
+ fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
+ }
+ }
+ return fmt;
+ }
+
+ /**
+ * 获取两个时间相差的天数
+ * @param date1
+ * @param date2
+ * @returns {number}
+ */
+ static getDiffDays(date1, date2) {
+ if (typeof date1 === 'string') {
+ date1 = new Date(date1);
+ }
+ if (typeof date2 === 'string') {
+ date2 = new Date(date2);
+ }
+ /*获取之间的天数*/
+ let diffDays = (date2.getTime() - date1.getTime()) / (3600 * 24 * 1000);
+ return parseInt(diffDays);
+ }
+
+ /**
+ * 删除对象中所有的null、undefined属性值
+ */
+ static deleteNullAttrInObject(obj, removeEmptyStr = true) {
+ for (var key in obj) {
+ if (obj[key] === null) {
+ delete obj[key]
+ }
+ if (obj[key] === undefined) {
+ delete obj[key]
+ }
+ if (removeEmptyStr && obj[key] === '') {
+ delete obj[key]
+ }
+ if (Array.isArray(obj[key]) && obj[key].length === 0) { // 删除空数组[]属性
+ delete obj[key]
+ }
+ }
+ return obj
+ }
+
+ static urlParamsAppendToUrl(url, urlParams) {
+ if (urlParams) {
+ if (url.indexOf("?") === -1) {
+ url = url + "?" + this.objectToUrlParams(urlParams);
+ } else {
+ url = url + "&" + this.objectToUrlParams(urlParams);
+ }
+ }
+ return url;
+ }
+
+ /**
+ * 毫秒转换友好的显示格式
+ * 输出格式:21小时前
+ * @param {[type]} time [description]
+ * @return {[type]} [description]
+ */
+ static showTime(datetime) {
+
+ //获取js 时间戳
+ var time = new Date().getTime();
+
+ //去掉 js 时间戳后三位,与php 时间戳保持一致
+ time = parseInt((time - this.datetimeStrToTimestamp(datetime)) / 1000 + '');
+
+ //存储转换值
+ var s;
+ if (time == 0) {
+ return '刚刚';
+ } else if (time < 60) {
+ return time + '秒前';
+ } else if ((time < 60 * 60) && (time >= 60)) {
+ //超过十分钟少于1小时
+ s = Math.floor(time / 60);
+ return s + '分钟前';
+ } else if ((time < 60 * 60 * 24) && (time >= 60 * 60)) {
+ //超过1小时少于24小时
+ s = Math.floor(time / 60 / 60);
+ return s + '小时前';
+ } else if ((time < 60 * 60 * 24 * 30) && (time >= 60 * 60 * 24)) {
+ //超过1天少于30天内
+ s = Math.floor(time / 60 / 60 / 24);
+ return s + '天前';
+ } else {
+ //超过3天
+ // var date = new Date(parseInt(datetime) * 1000);
+ // return date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate();
+ return this.dateFormat(datetime, 'MM-dd HH:mm');
+ }
+ }
+
+ /**
+ * 将字符串编码成base64
+ * @param str
+ * @returns {string}
+ */
+ static toBase64Encode(str) {
+ var c1, c2, c3;
+ var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var i = 0, len = str.length, string = '';
+
+ while (i < len) {
+ c1 = str.charCodeAt(i++) & 0xff;
+ if (i == len) {
+ string += base64EncodeChars.charAt(c1 >> 2);
+ string += base64EncodeChars.charAt((c1 & 0x3) << 4);
+ string += "==";
+ break;
+ }
+ c2 = str.charCodeAt(i++);
+ if (i == len) {
+ string += base64EncodeChars.charAt(c1 >> 2);
+ string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
+ string += base64EncodeChars.charAt((c2 & 0xF) << 2);
+ string += "=";
+ break;
+ }
+ c3 = str.charCodeAt(i++);
+ string += base64EncodeChars.charAt(c1 >> 2);
+ string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
+ string += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
+ string += base64EncodeChars.charAt(c3 & 0x3F)
+ }
+ return string
+ }
+
+ /**
+ * 添加属性别名
+ * @param object
+ * @param alias
+ * {
+ * "name": "label", 给name属性取个别名label
+ * "code": "value" 给code属性取个别名value
+ * }
+ */
+ static objectAlias(object, alias = {'name': 'label', 'code': 'value'}) {
+ if (!object) {
+ return;
+ }
+ // 数组
+ if (Array.isArray(object)) {
+ object.forEach(item => {
+ for (let attrName in alias) {
+ // 将一个属性取一个别名
+ if (attrName.indexOf(",") === -1) {
+ item[alias[attrName]] = item[attrName];
+ } else {// 将多个属性取同一个别名,每个属性名/值以逗号隔开
+ let attrNames = attrName.split(",");
+ let value = [];
+ for (let i = 0; i < attrNames.length; i++) {
+ value.push(item[attrNames[i]]);
+ }
+ item[alias[attrName]] = value.join(",");
+ }
+ }
+
+ if (item.children) {
+ this.objectAlias(item.children, alias);
+ }
+ });
+ } else { // 对象
+ for (let attrName in alias) {
+ if (attrName.indexOf(",") === -1) {
+ object[alias[attrName]] = object[attrName];
+ } else {
+ let attrNames = attrName.split(",");
+ let value = [];
+ for (let i = 0; i < attrNames.length; i++) {
+ value.push(item[attrNames[i]]);
+ }
+ item[alias[attrName]] = value.join(",");
+ }
+ }
+ if (object.children) {
+ this.objectAlias(object.children, alias);
+ }
+ }
+ return object;
+ }
+
+ /**
+ * 刷新对象值
+ * @param _selfVue
+ * @param obj
+ */
+ static refreshObj(_selfVue, obj) {
+ const _self = this;
+ for (let key in obj) {
+ //排除掉原型继承而来的属性
+ if (!obj.hasOwnProperty(key)) {
+ return;
+ }
+
+ console.log(key, obj[key]);
+ if (typeof obj[key] === 'object' || typeof obj[key] === 'function') {
+ _self.refreshObj(_selfVue, obj[key]);
+ } else if (Array.isArray(obj[key])) {
+ obj[key].forEach((item) => {
+ _self.refreshObj(_selfVue, item);
+ })
+ } else {
+ _selfVue.$set(obj, key, obj[key]);
+ }
+ }
+ }
+
+ /**
+ * 是否是JSON字符串
+ * @param str
+ * @returns {boolean}
+ */
+ static isJSON(str) {
+ if (typeof str == 'string') {
+ try {
+ var obj = JSON.parse(str);
+ if (typeof obj == 'object' && obj) {
+ return true;
+ } else {
+ return false;
+ }
+ } catch (e) {
+ console.log('error:' + str + '!!!' + e);
+ return false;
+ }
+ }
+ }
+
+ /**
+ * 是否是数字
+ * @param checkVal
+ * @returns {boolean}
+ */
+ static isNumber(checkVal) {
+ var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
+ return reg.test(checkVal);
+ }
+
+ /**
+ * 提取url中的参数
+ */
+ static getUrlParams(url) {
+ // url不存在参数
+ if (url.indexOf("?") === -1) {
+ return {};
+ }
+ // http://www.baidu.com/test?a=1&b=2
+ let params = url.split("?")[1]; // a=1&b=2
+ params = params.split("&"); // ['a=1', 'b=2']
+ let urlParams = {};
+ params.forEach(item => {
+ let keyValue = item.split("="); // 'a=1' --> ['a', '1']
+ urlParams[keyValue[0]] = keyValue[1];
+ });
+ return urlParams; // {a: 1, b: 2}
+ }
+
+ // ----------------------------------------------uview-ui----------------------------------------------
+
+ /**
+ * 深度克隆
+ * 当我们将一个对象(变量A)赋值给另一个变量(变量B)时,修改变量B,因为对象引用的特性,导致A也同时被修改,
+ * 所以有时候我们需要将A克隆给B,这样修改B的时候,就不会 导致A也被修改。
+ * @param object
+ * @returns {*}
+ */
+ static deepClone(object = {}) {
+ return Vue.prototype.$u.deepClone(object)
+ }
+
+ /**
+ * 对象深度合并
+ * 在ES6中,我们可以很方便的使用Object.assign进行对象合并,但这只是浅层的合并,如果对象的属性为数组或者对象的时候,会导致属性内部的值丢失。
+ * 注意: 此处合并不同于Object.assign,因为Object.assign(a, b)会修改a的值为最终的结果(这往往不是我们所期望的),但是deepMerge(a, b)并不会修改a的值。
+ * @param target
+ * @param source
+ * @returns {boolean|*}
+ */
+ static deepMerge(target = {}, source = {}) {
+ return Vue.prototype.$u.deepMerge(target, source)
+ }
+
+ /**
+ * md5加密
+ * @param value
+ * console.log(md5Libs.md5('uView')) // 结果为:55c859b4750225eb1cdbd9e0403ee274
+ */
+ static md5(value) {
+ return md5Libs.md5(value)
+ }
+
+
+ // ----------------------------------------------uni-app原生api----------------------------------------------
+ static navigateTo(url, urlParams, objParams) {
+
+ // 兼容部分手机机型不能从导航事件中获取objParams问题。
+ globalVariable.objParams = objParams;
+
+ return new Promise(function (resolve, reject) {
+ if (urlParams) {
+ if (url.indexOf("?") === -1) {
+ url = url + "?" + CommonUtil.objectToUrlParams(urlParams);
+ } else {
+ url = url + "&" + CommonUtil.objectToUrlParams(urlParams);
+ }
+ }
+ uni.navigateTo({
+ url: url,
+ success: function (res) {
+ if (objParams) {
+ // 通过eventChannel向被打开页面传送数据
+ res.eventChannel.emit('objParams', objParams)
+ }
+ resolve(res);
+ }
+ })
+ });
+ }
+
+ /**
+ * @param title
+ * @param duration
+ * @param icon
+ success、warn、error 显示成功图标,此时 title 文本最多显示 7 个汉字长度。默认值
+ loading 显示加载图标,此时 title 文本最多显示 7 个汉字长度。 支付宝小程序不支持
+ none 不显示图标,此时 title 文本在小程序最多可显示两行,App仅支持单行显示。
+ * @returns {Promise}
+ */
+ static toast(title, duration = 1500, icon = 'none') {
+ return new Promise(function (resolve, reject) {
+ uni.showToast({
+ title: title,
+ icon: icon,
+ mask: true, // 是否显示透明蒙层,防止触摸穿透,默认:false
+ duration: duration, // 提示的延迟时间,单位毫秒,默认:1500
+ complete: () => {
+ setTimeout(function () {
+ resolve('提示时间已完成');
+ }, duration);
+ }
+ });
+ });
+ }
+
+ /**
+ * 执行完后直接跳转页面
+ */
+ static toastNavigateTo(title, url, urlParams, objParams) {
+ const _self = this;
+
+ // 兼容部分手机机型不能从导航事件中获取objParams问题。
+ globalVariable.objParams = objParams;
+
+ return new Promise(function (resolve, reject) {
+ if (title) {
+ this.toast(title).then(() => {
+ uni.navigateTo({
+ url: _self.urlParamsAppendToUrl(url, urlParams),
+ success: function (res) {
+ if (objParams) {
+ // 通过eventChannel向被打开页面传送数据
+ res.eventChannel.emit('objParams', objParams)
+ }
+ resolve(res);
+ }
+ })
+ })
+ } else {
+ uni.navigateTo({
+ url: _self.urlParamsAppendToUrl(url, urlParams),
+ success: function (res) {
+ if (objParams) {
+ // 通过eventChannel向被打开页面传送数据
+ res.eventChannel.emit('objParams', objParams)
+ }
+ resolve(res);
+ }
+ })
+ }
+ });
+ }
+
+ /**
+ * 执行完后直接返回上一个页面
+ */
+ static toastNavigateBack(title, delta = 1) {
+ const _self = this;
+ return new Promise(function (resolve, reject) {
+ if (title) {
+ _self.toast(title).then(() => {
+ uni.navigateBack({
+ delta: delta
+ });
+ resolve();
+ })
+ } else {
+ uni.navigateBack({
+ delta: delta
+ });
+ resolve();
+ }
+ });
+ }
+
+ /**
+ * 执行完毕后关闭所有页面并打开指定页面
+ */
+ static toastReLaunch(title, url, urlParams) {
+ const _self = this;
+ if (title) {
+ _self.toast(title).then(() => {
+ uni.reLaunch({
+ url: _self.urlParamsAppendToUrl(url, urlParams)
+ });
+ })
+ } else {
+ uni.reLaunch({
+ url: _self.urlParamsAppendToUrl(url, urlParams)
+ });
+ }
+ }
+
+ /**
+ * 执行完毕后跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
+ */
+ static toastSwitchTab(title, url, urlParams) {
+ const _self = this;
+ if (title) {
+ _self.toast(title).then(() => {
+ uni.switchTab({
+ url: _self.urlParamsAppendToUrl(url, urlParams)
+ });
+ })
+ } else {
+ uni.switchTab({
+ url: _self.urlParamsAppendToUrl(url, urlParams)
+ });
+ }
+ }
+
+ /**
+ {
+ title: '删除图片',
+ content: '确定要删除该图片?',
+ showCancel: true, // 是否显示取消按钮
+ cancelText:"否", // 默认是“取消”
+ cancelColor:'skyblue', // 取消文字的颜色
+ confirmText:"是", // 默认是“确定”
+ confirmColor: 'skyblue', // 确定文字的颜色
+ success: function (res) {
+ if (res.cancel) { // 点击取消,默认隐藏弹框
+ } else { // 点击确定
+
+ temp.splice(index, 1),
+ that.setData({
+ tempFilePaths: temp,
+ })
+ }
+ },
+ fail: function (res) { }, // 接口调用失败的回调函数
+ complete: function (res) { } // 接口调用结束的回调函数(调用成功、失败都会执行)
+ }
+
+ CommonUtil.alert({
+ title: '提示!',
+ content: '确认提交吗?',
+ showCancel: true, // 是否显示取消按钮
+ success: function (res) {
+ if (res.cancel) { // 点击取消,默认隐藏弹框
+ } else { // 点击确定
+
+ }
+ }
+ });
+
+ * @param opts
+ */
+ static alert(opts) {
+ return new Promise(function (resolve, reject) {
+ if (typeof opts === 'string') {
+ uni.showModal({
+ title: '提示',
+ content: opts,
+ showCancel: false, // 是否显示取消按钮
+ success: function (res) {
+ if (res.cancel) { // 点击取消,默认隐藏弹框
+ } else { // 点击确定
+ }
+ resolve();
+ }
+ });
+ } else {
+ uni.showModal(opts);
+ resolve();
+ }
+ });
+ }
+
+ /**
+ * 执行完后直接跳转页面
+ */
+ static alertNavigateTo(title, url, urlParams, objParams) {
+ const _self = this;
+
+ // 兼容部分手机机型不能从导航事件中获取objParams问题。
+ globalVariable.objParams = objParams;
+
+ return new Promise(function (resolve, reject) {
+ if (title) {
+ uni.showModal({
+ title: '提示!',
+ content: title,
+ showCancel: false, // 是否显示取消按钮
+ success: function (res) {
+ if (res.cancel) { // 点击取消,默认隐藏弹框
+ } else { // 点击确定
+ uni.navigateTo({
+ url: _self.urlParamsAppendToUrl(url, urlParams),
+ success: function (res) {
+ if (objParams) {
+ // 通过eventChannel向被打开页面传送数据
+ res.eventChannel.emit('objParams', objParams)
+ }
+ resolve(res);
+ }
+ })
+ }
+ }
+ });
+ } else {
+ uni.navigateTo({
+ url: _self.urlParamsAppendToUrl(url, urlParams),
+ success: function (res) {
+ if (objParams) {
+ // 通过eventChannel向被打开页面传送数据
+ res.eventChannel.emit('objParams', objParams)
+ }
+ resolve(res);
+ }
+ })
+ }
+ });
+ }
+
+ /**
+ * 执行完后直接返回上一个页面
+ */
+ static alertNavigateBack(title, delta = 1) {
+ const _self = this;
+ return new Promise(function (resolve, reject) {
+ if (title) {
+ uni.showModal({
+ title: '提示!',
+ content: title,
+ showCancel: false, // 是否显示取消按钮
+ success: function (res) {
+ if (res.cancel) { // 点击取消,默认隐藏弹框
+ } else { // 点击确定
+ uni.navigateBack({
+ delta: delta
+ });
+ }
+ resolve();
+ }
+ });
+ } else {
+ uni.navigateBack({
+ delta: delta
+ });
+ resolve();
+ }
+ });
+ }
+
+ /**
+ * 执行完毕后关闭所有页面并打开指定页面
+ */
+ static alertReLaunch(title, url, urlParams) {
+ const _self = this;
+ if (title) {
+ uni.showModal({
+ title: '提示!',
+ content: title,
+ showCancel: false, // 是否显示取消按钮
+ success: function (res) {
+ if (res.cancel) { // 点击取消,默认隐藏弹框
+ } else { // 点击确定
+ uni.reLaunch({
+ url: _self.urlParamsAppendToUrl(url, urlParams)
+ });
+ }
+ }
+ });
+ } else {
+ uni.reLaunch({
+ url: _self.urlParamsAppendToUrl(url, urlParams)
+ });
+ }
+ }
+
+ /**
+ * 执行完毕后跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
+ */
+ static alertSwitchTab(title, url, urlParams) {
+ const _self = this;
+ if (title) {
+ uni.showModal({
+ title: '提示!',
+ content: title,
+ showCancel: false, // 是否显示取消按钮
+ success: function (res) {
+ if (res.cancel) { // 点击取消,默认隐藏弹框
+ } else { // 点击确定
+ uni.switchTab({
+ url: _self.urlParamsAppendToUrl(url, urlParams)
+ });
+ }
+ }
+ });
+ } else {
+ uni.switchTab({
+ url: _self.urlParamsAppendToUrl(url, urlParams)
+ });
+ }
+ }
+}
diff --git a/src/dev/core/utils/filters.util.js b/src/dev/core/utils/filters.util.js
new file mode 100644
index 0000000..49dde38
--- /dev/null
+++ b/src/dev/core/utils/filters.util.js
@@ -0,0 +1,294 @@
+/*
+ 全局引入方式:src/main.js
+
+ import * as filters from './app/core/utils/filters.util' // global filters
+
+ // 注册全局的过滤器,在页面上直接使用无须再显示定义过滤器
+ Object.keys(filters).forEach(key => {
+ Vue.filter(key, filters[key])
+ })
+
+ 使用方式:在页面中直接使用
+
+ {{'abc' | uppercaseFirst}}
+
+*/
+
+
+/**
+ * Parse the time to string
+ * @param {(Object|string|number)} time
+ * @param {string} cFormat
+ * @returns {string | null}
+ */
+export function parseTime(time, cFormat) {
+ if (arguments.length === 0 || !time) {
+ return null
+ }
+ const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
+ let date
+ if (typeof time === 'object') {
+ date = time
+ } else {
+ if ((typeof time === 'string')) {
+ if ((/^[0-9]+$/.test(time))) {
+ // support "1548221490638"
+ time = parseInt(time)
+ } else {
+ // support safari
+ // https://stackoverflow.com/questions/4310953/invalid-date-in-safari
+ time = time.replace(new RegExp(/-/gm), '/')
+ }
+ }
+
+ if ((typeof time === 'number') && (time.toString().length === 10)) {
+ time = time * 1000
+ }
+ date = new Date(time)
+ }
+ const formatObj = {
+ y: date.getFullYear(),
+ m: date.getMonth() + 1,
+ d: date.getDate(),
+ h: date.getHours(),
+ i: date.getMinutes(),
+ s: date.getSeconds(),
+ a: date.getDay()
+ }
+ const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
+ const value = formatObj[key]
+ // Note: getDay() returns 0 on Sunday
+ if (key === 'a') {
+ return ['日', '一', '二', '三', '四', '五', '六'][value]
+ }
+ return value.toString().padStart(2, '0')
+ })
+ return time_str
+}
+
+/**
+ * @param {number} time
+ * @param {string} option
+ * @returns {string}
+ */
+export function formatTime(time, option) {
+ if (('' + time).length === 10) {
+ time = parseInt(time) * 1000
+ } else {
+ time = +time
+ }
+ const d = new Date(time)
+ const now = Date.now()
+
+ const diff = (now - d) / 1000
+
+ if (diff < 30) {
+ return '刚刚'
+ } else if (diff < 3600) {
+ // less 1 hour
+ return Math.ceil(diff / 60) + '分钟前'
+ } else if (diff < 3600 * 24) {
+ return Math.ceil(diff / 3600) + '小时前'
+ } else if (diff < 3600 * 24 * 2) {
+ return '1天前'
+ }
+ if (option) {
+ return parseTime(time, option)
+ } else {
+ return (
+ d.getMonth() +
+ 1 +
+ '月' +
+ d.getDate() +
+ '日' +
+ d.getHours() +
+ '时' +
+ d.getMinutes() +
+ '分'
+ )
+ }
+}
+
+/**
+ * @param {string} url
+ * @returns {Object}
+ */
+export function param2Obj(url) {
+ const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
+ if (!search) {
+ return {}
+ }
+ const obj = {}
+ const searchArr = search.split('&')
+ searchArr.forEach(v => {
+ const index = v.indexOf('=')
+ if (index !== -1) {
+ const name = v.substring(0, index)
+ const val = v.substring(index + 1, v.length)
+ obj[name] = val
+ }
+ })
+ return obj
+}
+
+/**
+ * Show plural label if time is plural number
+ * @param {number} time
+ * @param {string} label
+ * @return {string}
+ */
+function pluralize(time, label) {
+ if (time === 1) {
+ return time + label
+ }
+ return time + label + 's'
+}
+
+/**
+ * @param {number} time
+ */
+export function timeAgo(time) {
+ const between = Date.now() / 1000 - Number(time)
+ if (between < 3600) {
+ return pluralize(~~(between / 60), ' minute')
+ } else if (between < 86400) {
+ return pluralize(~~(between / 3600), ' hour')
+ } else {
+ return pluralize(~~(between / 86400), ' day')
+ }
+}
+
+/**
+ * Number formatting
+ * like 10000 => 10k
+ * @param {number} num
+ * @param {number} digits
+ */
+export function numberFormatter(num, digits) {
+ const si = [
+ {value: 1E18, symbol: 'E'},
+ {value: 1E15, symbol: 'P'},
+ {value: 1E12, symbol: 'T'},
+ {value: 1E9, symbol: 'G'},
+ {value: 1E6, symbol: 'M'},
+ {value: 1E3, symbol: 'k'}
+ ]
+ for (let i = 0; i < si.length; i++) {
+ if (num >= si[i].value) {
+ return (num / si[i].value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
+ }
+ }
+ return num.toString()
+}
+
+/**
+ * 10000 => "10,000"
+ * @param {number} num
+ */
+export function toThousandFilter(num) {
+ return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
+}
+
+/**
+ * Upper case first char
+ * @param {String} string
+ */
+export function uppercaseFirst(string) {
+ return string.charAt(0).toUpperCase() + string.slice(1)
+}
+
+/**
+ * 保留两位小数点
+ * @param value
+ * @returns {*|string}
+ */
+export function toFixed2(value) {
+ let result = ''
+ if (value) {
+ // 截取当前数据到小数点后两位
+ result = value.toFixed(2)
+ } else {
+ result = '0.00'
+ }
+ return result
+}
+
+/**
+ * 保留小数点位数
+ * @param value
+ * @param retain 保留小数点位数
+ * @returns {*|string}
+ */
+export function toFixed(value, retain = 0) {
+ let result = ''
+ if (value) {
+ // 截取当前数据到小数点后两位
+ result = value.toFixed(retain)
+ } else {
+ result = 0.0.toFixed(retain);
+ }
+ return result
+}
+
+/**
+ * 如果是null,则显示成空字符串
+ * @param value
+ * @param defaultValue
+ * @returns {string}
+ */
+export function toEmptyStr(value, defaultValue) {
+ value = value + '' // 转成字符串,数字没有.replace方法。
+ if (value === null || value === undefined || value === 'null' || value === 'undefined' || value.replace(/(^\s*)|(\s*$)/g, '') === '') {
+ if (defaultValue) {
+ return defaultValue
+ }
+ return ''
+ }
+ return value
+}
+
+/**
+ * 后台返回的base64字符串图片前端不能显示,需要使用这个过滤器后才能显示出来
+ * @param value
+ * @returns {*}
+ */
+export function captchaSrc(value) {
+ let result = ''
+ if (value) {
+ return value.replace(/[\r\n]/g, '')
+ }
+ return result
+}
+
+/**
+ * 输出对象某个属性值,如果属性不存在则返回null,防止a.b.c时a或b为null输出属性c报错。
+ * @param value 实际对象需要调用的属性字符串形式
+ * @param target 实际对象
+ * @param defaultValue 如果对象中间的某个属性不存在则会报错,则返回默认值
+ * @returns {*}
+ *
+ * 使用方式:
+ * 过滤器作用:{{'selectedItem.code' | toValue(selectedItem)}}
+ * 当普通函数使用:{{toValue('selectedItem.code', selectedItem) + 'abc'}} // 需要在src/main.js配置Vue.prototype[key] = filters[key]
+ */
+export function toValue(value, target, defaultValue = null) {
+ if (!target) {
+ return defaultValue
+ }
+ let attrs = value.split('.')
+ let clone = Object.assign({}, target)
+ for (let i = 1; i < attrs.length; i++) {
+ let attr = attrs[i]
+ if (i < attrs.length - 1) {
+ if (!clone[attr]) {
+ return defaultValue
+ } else {
+ clone = clone[attr]
+ }
+ } else {
+ return clone[attr]
+ }
+ }
+ return defaultValue
+}
+
diff --git a/src/dev/core/utils/http.util.js b/src/dev/core/utils/http.util.js
new file mode 100644
index 0000000..b62d8b6
--- /dev/null
+++ b/src/dev/core/utils/http.util.js
@@ -0,0 +1,118 @@
+import Vue from 'vue'
+import globalVariable from "../global-variable";
+
+/**
+ * todo 网络超时设置方式:https://uniapp.dcloud.net.cn/collocation/manifest?id=networktimeout
+ * 在配置文件manifest.json中配置
+ * "networkTimeout":{
+ * "request": 600000 单位/毫秒
+ * },
+ * "app-plus" : {
+ * }
+ */
+export class HttpUtil {
+
+ /**
+ * 版本: ‘develop’, //开发版
+ * 版本: ‘trial’, //体验版
+ * 版本: ‘release’, //正式版
+ */
+ static appendProfilesActive(params) {
+ let profilesActive = '';
+ if (this.__wxConfig) {
+ if (__wxConfig.envVersion === 'develop') {
+ profilesActive = 'dev';
+ } else if (__wxConfig.envVersion === 'trial') {
+ profilesActive = 'dev'; // test
+ } else if (__wxConfig.envVersion === 'release') {
+ profilesActive = 'prod';
+ }
+ if (params.data) {
+ params.data.profilesActive = profilesActive;
+ }
+ }
+ }
+
+ static getRequestParams(params) {
+ if (params) {
+ if (typeof params === 'string') {
+ params = {url: params}
+ }
+
+ if (params.url.indexOf('http') === -1) {
+ params.url = globalVariable.baseUrl + params.url
+ }
+
+ // this.appendProfilesActive(params);
+
+ let data = params.data;
+ if (!data) {
+ params.data = {};
+ return params
+ }
+
+ // 删除data参数中值为null或者空字符串或者是undefined的属性。
+ if (params.isOptimizeData !== false) { // 是否优化参数
+ // 对于更新的请求,不显示优化属性的话,一般不删除空字符串的属性。
+ if (params.url.substring(params.url.lastIndexOf('/') + 1).indexOf('update') === 0 && params.isOptimizeData !== true) {
+ return params
+ }
+ for (let attrName in data) {
+ if (data[attrName] === undefined
+ || data[attrName] == null
+ || data[attrName] === 'undefined'
+ || data[attrName] === 'null'
+ || (data[attrName] + '').trim() === '') {
+ delete data[attrName]
+ }
+ }
+ }
+ }
+ return params
+ }
+
+ /**
+ * post请求时将url附加的参数追加到data中
+ * 2020-8-31 17:12:45 uView框架post请求url附加参数会报错,运行时就卡死。
+ * @param params
+ */
+ static urlParamsToData(params) {
+ if (params.url.indexOf("?") !== -1) { // url=test?a=1&b=2
+ let url = params.url.substring(0, params.url.indexOf("?")); // url=test
+ let keyValueStr = params.url.substring(params.url.indexOf("?") + 1); // keyValueStr -> a=1&b=2
+ let keyValueList = keyValueStr.split("&"); // keyValueList=["a=1", "b=2"]
+ // 去掉url中的参数
+ params.url = url;
+ // 将url中的参数追加到data中
+ keyValueList.forEach((value, index) => {
+ // todo 覆盖data中同属性值
+ params.data[value.split("=")[0]] = value.split("=")[1]
+ })
+ }
+ }
+
+ static myGet(params) {
+ const _self = this;
+ params = _self.getRequestParams(params);
+ return Vue.prototype.$u.get(params.url, params.data)
+ }
+
+ static myPost(params) {
+ const _self = this;
+ params = _self.getRequestParams(params);
+ _self.urlParamsToData(params);
+ return Vue.prototype.$u.post(params.url, params.data, {
+ 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
+ })
+ }
+
+ static myPostJson(params) {
+ const _self = this;
+ params = _self.getRequestParams(params);
+ _self.urlParamsToData(params);
+ return Vue.prototype.$u.post(params.url, params.data, {
+ 'content-type': 'application/json; charset=UTF-8'
+ })
+ }
+}
+
diff --git a/src/dev/core/utils/local-storage.util.js b/src/dev/core/utils/local-storage.util.js
new file mode 100644
index 0000000..3942a28
--- /dev/null
+++ b/src/dev/core/utils/local-storage.util.js
@@ -0,0 +1,71 @@
+import globalVariable from "../global-variable";
+
+/**
+ * 本地存储工具类
+ */
+export class LocalStorageUtil {
+
+ static setItem(key, value) {
+ let v = null;
+ if (typeof (value) == 'object') {
+ v = JSON.stringify(value);
+ } else {
+ v = value;
+ }
+ try {
+ key = globalVariable.localStoragePrefix + key;
+ console.log('存储【' + key + '】值: ', v);
+ uni.setStorageSync(key, v);
+ } catch (e) {
+ console.log('存储【' + key + '】失败');
+ }
+ return value
+ }
+
+ static getItem(key) {
+ key = globalVariable.localStoragePrefix + key;
+ let value = null;
+ try {
+ value = uni.getStorageSync(key);
+ if (value) {
+ value = JSON.parse(value);
+ } else {
+ return;
+ }
+ console.log('获取【' + key + '】值: ', value);
+ } catch (e) {
+ console.log('存储的值不是对象类型: ', value);
+ }
+ return value;
+ }
+
+ static removeItem(key) {
+ try {
+ key = globalVariable.localStoragePrefix + key;
+ uni.removeStorageSync(key);
+ console.log('移除【' + key + '】成功')
+ } catch (e) {
+ console.log('移除【' + key + '】失败')
+ }
+ }
+
+ static setOrGetItem(key, value) {
+ if (value && (JSON.stringify(value) + '') != '{}') {
+ return this.setItem(key, value)
+ } else {
+ return this.getItem(key)
+ }
+ }
+
+ static setOrGetQueryParams(page, params) {
+ const _self = this
+ // let className = page.__proto__.constructor.name; // 返回上一级时手机端this还是子对象,导致返回上级页面时获取的是子页面的数据,导致错误。
+ let className = page
+ console.log(className + '导航参数---------------' + JSON.stringify(params))
+ let result = _self.setOrGetItem(`navParams${className}`, params)
+ if (!result) {
+ result = {}
+ }
+ return result
+ }
+}
diff --git a/src/dev/core/utils/pay.js b/src/dev/core/utils/pay.js
new file mode 100644
index 0000000..480f544
--- /dev/null
+++ b/src/dev/core/utils/pay.js
@@ -0,0 +1,667 @@
+import {HttpUtil} from "./http.util";
+import globalVariable from "../global-variable";
+import {WechatService} from "../../services/wechat.service";
+import {LocalStorageUtil} from "./local-storage.util";
+
+/**
+ * 初始化支付环境
+ */
+export function initPayEnvironment() {
+ const _self = this;
+ console.log("globalVariable---------------------", globalVariable);
+ return new Promise(function (resolve, reject) {
+ // 微信小程序版-微信支付
+ if (globalVariable.runPlatform === "0") {
+ console.log("准备获得微信小程序code");
+
+ // 如果没有openid则无法支付,需要先授权获取unionid
+ if (!globalVariable.userInfo.unionid) {
+ new WechatService().findUnionidByWeixinMiniAppCode().then(result => {
+ globalVariable.userInfo.unionid = result.data;
+ LocalStorageUtil.setItem("userInfo", globalVariable.userInfo);
+ resolve('支付环境初始化成功!');
+ })
+ } else {
+ resolve('支付环境初始化成功!');
+ }
+ } else if (globalVariable.runPlatform === "1") {
+ console.log("准备获得微信应用code");
+
+ // 如果没有openid则无法支付,需要先授权获取unionid
+ if (!globalVariable.userInfo.unionid) {
+ new WechatService().findUnionidByWeixinAppCode().then(result => {
+ globalVariable.userInfo.unionid = result.data;
+ LocalStorageUtil.setItem("userInfo", globalVariable.userInfo);
+ resolve('支付环境初始化成功!');
+ })
+ } else {
+ resolve('支付环境初始化成功!');
+ }
+ }
+ });
+}
+
+/**
+ * 支付订单
+ */
+export function pay_order(params) {
+ if (globalVariable.runPlatform === "0") {
+ wxMiniAppPay(params);
+ } else if (globalVariable.runPlatform === "1") {
+ appPay(params);
+ }
+}
+
+/**
+ * 充值店铺保证金
+ */
+export function pay_tbStoreCashDeposit(params) {
+ if (globalVariable.runPlatform === "0") {
+ wxMiniAppPay_tbStoreCashDeposit(params);
+ } else if (globalVariable.runPlatform === "1") {
+ appPay_tbStoreCashDeposit(params)
+ }
+}
+
+/**
+ * 购买邮箱支付码
+ */
+export function pay_tbEmailPayCodeOrder(params) {
+ if (globalVariable.runPlatform === "0") {
+ wxMiniAppPay_tbEmailPayCodeOrder(params);
+ } else if (globalVariable.runPlatform === "1") {
+ appPay_tbEmailPayCodeOrder(params)
+ }
+}
+
+// todo ------------------------------------------------微信小程序支付------------------------------------------------
+// todo ------------------------------------------------微信小程序支付------------------------------------------------
+// todo ------------------------------------------------微信小程序支付------------------------------------------------
+// todo ------------------------------------------------微信小程序支付------------------------------------------------
+// todo ------------------------------------------------微信小程序支付------------------------------------------------
+/**
+ * 微信支付-微信小程序版
+ * @param params
+ */
+export function wxMiniAppPay(params) {
+ HttpUtil.myPost({ // 封装微信请求方法
+ url: 'wxPay/miniAppPay',
+ data: {
+ unionid: globalVariable.userInfo.unionid,
+ orderId: params.orderId, // 根据商户自己的秘钥进行支付,后台没有查询到则使用自己默认的。
+ }
+ }).then(result => {
+ // 支付密钥生成成功
+ if (result.code === 0) {
+
+ // 支付密钥生成成功,调起支付功能
+ uni.requestPayment({
+ timeStamp: result.data.timeStamp,
+ nonceStr: result.data.nonceStr,
+ package: result.data.package,
+ signType: result.data.signType,
+ paySign: result.data.paySign,
+ success: (res) => {
+
+ // 支付成功! 请求后台校验是否支付成功
+ HttpUtil.myPost({
+ url: 'wxPay/miniAppPayOrderQuery',
+ data: {
+ orderId: params.orderId
+ }
+ }).then(queryResult => {
+ if (queryResult.code === 0) { // 校验成功/支付成功
+ uni.showToast({
+ title: '支付成功!',
+ icon: 'success',
+ duration: 1500,
+ mask: true,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(queryResult.data)
+ }, 1500)
+ }
+ }
+ })
+ } else {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ duration: 1500,
+ mask: true,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ }
+
+ })
+ },
+ fail: function (res) {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ },
+ complete: function (res) {
+ console.log(res)
+ }
+ })
+
+ } else { // 支付密钥生成失败
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ duration: 1500,
+ mask: true,
+ })
+ }
+ })
+}
+
+/**
+ * 微信支付-微信小程序版
+ * 充值店铺保证金
+ */
+export function wxMiniAppPay_tbStoreCashDeposit(params) {
+ const _self = this;
+ HttpUtil.myPost({ // 封装微信请求方法
+ url: 'wxPay/miniAppPay_tbStoreCashDeposit',
+ data: {
+ unionid: globalVariable.userInfo.unionid,
+ payMoney: params.payMoney
+ }
+ }).then(result => {
+
+ // 支付密钥生成成功
+ if (result.code === 0) {
+
+ // 支付密钥生成成功,调起支付功能
+ uni.requestPayment({
+ timeStamp: result.data.timeStamp,
+ nonceStr: result.data.nonceStr,
+ package: result.data.package,
+ signType: result.data.signType,
+ paySign: result.data.paySign,
+ success: (res) => {
+ // 支付成功! 请求后台校验是否支付成功
+ HttpUtil.myPost({
+ url: 'wxPay/miniAppPay_tbStoreCashDepositQuery',
+ data: {
+ code: result.data.code, // 订单编号
+ }
+ }).then(queryResult => {
+ if (queryResult.code === 0) { // 校验成功/支付成功
+ uni.showToast({
+ title: '支付成功!',
+ icon: 'success',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(queryResult.data)
+ }, 1500)
+ }
+ }
+ })
+ } else {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ }
+ })
+ },
+ fail: function (res) {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ },
+ complete: function (res) {
+ console.log(res)
+ }
+ })
+ } else { // 支付密钥生成失败
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ duration: 1500,
+ mask: true,
+ })
+ }
+ })
+}
+
+
+/**
+ * 微信支付-微信小程序版
+ * 购买邮件支付码
+ */
+export function wxMiniAppPay_tbEmailPayCodeOrder(params) {
+ const _self = this;
+ HttpUtil.myPost({ // 封装微信请求方法
+ url: 'wxPay/miniAppPay_tbEmailPayCodeOrder',
+ data: {
+ unionid: globalVariable.userInfo.unionid,
+ email: params.email,
+ type: params.type,
+ }
+ }).then(result => {
+
+ // 支付密钥生成成功
+ if (result.code === 0) {
+
+ // 支付密钥生成成功,调起支付功能
+ uni.requestPayment({
+ timeStamp: result.data.timeStamp,
+ nonceStr: result.data.nonceStr,
+ package: result.data.package,
+ signType: result.data.signType,
+ paySign: result.data.paySign,
+ success: (res) => {
+ // 支付成功! 请求后台校验是否支付成功
+ HttpUtil.myPost({
+ url: 'wxPay/miniAppPay_tbEmailPayCodeOrderQuery',
+ data: {
+ code: result.data.code, // 订单编号
+ }
+ }).then(queryResult => {
+ if (queryResult.code === 0) { // 校验成功/支付成功
+ uni.showToast({
+ title: '支付成功!',
+ icon: 'success',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(queryResult.data)
+ }, 1500)
+ }
+ }
+ })
+ } else {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ }
+ })
+ },
+ fail: function (res) {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ },
+ complete: function (res) {
+ console.log(res)
+ }
+ })
+ } else { // 支付密钥生成失败
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ duration: 1500,
+ mask: true,
+ })
+ }
+ })
+}
+
+
+// todo ------------------------------------------------微信APP支付------------------------------------------------
+// todo ------------------------------------------------微信APP支付------------------------------------------------
+// todo ------------------------------------------------微信APP支付------------------------------------------------
+// todo ------------------------------------------------微信APP支付------------------------------------------------
+// todo ------------------------------------------------微信APP支付------------------------------------------------
+/**
+ * 微信支付-微信小程序版
+ * 订单支付
+ * @param params
+ */
+export function appPay(params) {
+ HttpUtil.myPost({ // 封装微信请求方法
+ url: 'wxPay/appPay',
+ data: {
+ unionid: globalVariable.userInfo.unionid,
+ orderId: params.orderId, // 根据商户自己的秘钥进行支付,后台没有查询到则使用自己默认的。
+ }
+ }).then(result => {
+ // 支付密钥生成成功
+ if (result.code === 0) {
+ // 支付密钥生成成功,调起支付功能
+ uni.requestPayment({
+ provider: 'wxpay',
+ orderInfo: { //微信、支付宝订单数据
+ appid: result.data.appid,
+ noncestr: result.data.noncestr,
+ package: result.data.package, // 固定值,以微信支付文档为主
+ partnerid: result.data.partnerid,
+ prepayid: result.data.prepayid,
+ timestamp: result.data.timestamp,
+ sign: result.data.sign // 根据签名算法生成签名
+ },
+ success: (res) => {
+
+ // 支付成功! 请求后台校验是否支付成功
+ HttpUtil.myPost({
+ url: 'wxPay/appPayOrderQuery',
+ data: {
+ orderId: params.orderId
+ }
+ }).then(queryResult => {
+ if (queryResult.code === 0) { // 校验成功/支付成功
+ uni.showToast({
+ title: '支付成功!',
+ icon: 'success',
+ duration: 1500,
+ mask: true,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(queryResult.data)
+ }, 1500)
+ }
+ }
+ })
+ } else {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ duration: 1500,
+ mask: true,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ }
+
+ })
+ },
+ fail: function (res) {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ },
+ complete: function (res) {
+ console.log(res)
+ }
+ })
+
+ } else { // 支付密钥生成失败
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ duration: 1500,
+ mask: true,
+ })
+ }
+ })
+}
+
+/**
+ * 微信支付-微信小程序版
+ * 充值店铺保证金
+ */
+export function appPay_tbStoreCashDeposit(params) {
+ const _self = this;
+ HttpUtil.myPost({ // 封装微信请求方法
+ url: 'wxPay/appPay_tbStoreCashDeposit',
+ data: {
+ unionid: globalVariable.userInfo.unionid,
+ payMoney: params.payMoney
+ }
+ }).then(result => {
+
+ // 支付密钥生成成功
+ if (result.code === 0) {
+ // 支付密钥生成成功,调起支付功能
+ uni.requestPayment({
+ provider: 'wxpay',
+ orderInfo: { //微信、支付宝订单数据
+ appid: result.data.appid,
+ noncestr: result.data.noncestr,
+ package: result.data.package, // 固定值,以微信支付文档为主
+ partnerid: result.data.partnerid,
+ prepayid: result.data.prepayid,
+ timestamp: result.data.timestamp,
+ sign: result.data.sign // 根据签名算法生成签名
+ },
+ success: (res) => {
+ // 支付成功! 请求后台校验是否支付成功
+ HttpUtil.myPost({
+ url: 'wxPay/appPay_tbStoreCashDepositQuery',
+ data: {
+ code: result.data.code, // 订单编号
+ }
+ }).then(queryResult => {
+ if (queryResult.code === 0) { // 校验成功/支付成功
+ uni.showToast({
+ title: '支付成功!',
+ icon: 'success',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(queryResult.data)
+ }, 1500)
+ }
+ }
+ })
+ } else {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ }
+ })
+ },
+ fail: function (res) {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ },
+ complete: function (res) {
+ console.log(res)
+ }
+ })
+ } else { // 支付密钥生成失败
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ duration: 1500,
+ mask: true,
+ })
+ }
+ })
+}
+
+
+/**
+ * 微信支付-微信小程序版
+ * 购买邮件支付码
+ */
+export function appPay_tbEmailPayCodeOrder(params) {
+ const _self = this;
+ HttpUtil.myPost({ // 封装微信请求方法
+ url: 'wxPay/appPay_tbEmailPayCodeOrder',
+ data: {
+ unionid: globalVariable.userInfo.unionid,
+ email: params.email,
+ type: params.type,
+ }
+ }).then(result => {
+
+ // 支付密钥生成成功
+ if (result.code === 0) {
+ // 支付密钥生成成功,调起支付功能
+ uni.requestPayment({
+ provider: 'wxpay',
+ orderInfo: { //微信、支付宝订单数据
+ appid: result.data.appid,
+ noncestr: result.data.noncestr,
+ package: result.data.package, // 固定值,以微信支付文档为主
+ partnerid: result.data.partnerid,
+ prepayid: result.data.prepayid,
+ timestamp: result.data.timestamp,
+ sign: result.data.sign // 根据签名算法生成签名
+ },
+ success: (res) => {
+ // 支付成功! 请求后台校验是否支付成功
+ HttpUtil.myPost({
+ url: 'wxPay/appPay_tbEmailPayCodeOrderQuery',
+ data: {
+ code: result.data.code, // 订单编号
+ }
+ }).then(queryResult => {
+ if (queryResult.code === 0) { // 校验成功/支付成功
+ uni.showToast({
+ title: '支付成功!',
+ icon: 'success',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(queryResult.data)
+ }, 1500)
+ }
+ }
+ })
+ } else {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ }
+ })
+ },
+ fail: function (res) {
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ mask: true,
+ duration: 1500,
+ complete: () => {
+ if (params.callback) {
+ setTimeout(() => {
+ params.callback(null)
+ }, 1500)
+ }
+ }
+ })
+ },
+ complete: function (res) {
+ console.log(res)
+ }
+ })
+ } else { // 支付密钥生成失败
+ uni.showToast({
+ title: '支付失败!',
+ icon: 'warn',
+ duration: 1500,
+ mask: true,
+ })
+ }
+ })
+}
+
+
+
+
diff --git a/src/dev/core/utils/qiniu-cloud.util.js b/src/dev/core/utils/qiniu-cloud.util.js
new file mode 100644
index 0000000..8351511
--- /dev/null
+++ b/src/dev/core/utils/qiniu-cloud.util.js
@@ -0,0 +1,120 @@
+import {CommonService} from "../../services/common.service";
+import {CommonUtil} from "./common.util";
+import {HttpUtil} from "./http.util";
+
+const qiniuUploader = require("./qiniuUploader");
+
+/**
+ * 七牛云工具类
+ */
+export class QiniuCloudUtil {
+
+ static base64Encode(str) {
+ // 对字符串进行编码
+ var encode = encodeURI(str);
+ // 对编码的字符串转化base64
+ // var base64 = btoa(encode); // 微信小程序不支持
+ var base64 = CommonUtil.toBase64Encode(encode);
+ return base64;
+ }
+
+ /**
+ * 帮助文档:https://github.com/gpake/qiniu-wxapp-sdk
+ * @param params
+ * @returns {Promise}
+ */
+ static upload(params) {
+ const _self = this;
+ if (!params.id) {
+ params.id = CommonUtil.generateUUID();
+ }
+ return new Promise(function (resolve, reject) {
+ new CommonService().findQiNiuUploadToken().then(result => {
+ // 交给七牛上传
+ qiniuUploader.upload(params.filePath,
+ (res) => { // todo 上传成功
+ // 每个文件上传成功后,处理相关的事情
+ // 其中 info 是文件上传成功后,服务端返回的json,形式如
+ // {
+ // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
+ // "key": "gogopher.jpg"
+ // }
+ // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html
+ console.log('file url is: ' + res.fileUrl);
+ resolve({
+ id: params.id,
+ status: "success"
+ });
+ }, (error) => { // todo 上传失败
+ console.log('error: ' + error);
+ resolve({
+ id: params.id,
+ status: "fail"
+ });
+ },
+ {
+ region: 'SCN', // qiniuUploader.js文件 uploadURLFromRegionCode 方法可以看到
+ domain: 'http://image.xxxxxxx.com', // // bucket 域名,下载资源时用到。如果设置,会在 success callback 的 res 参数加上可以直接使用的 ImageURL 字段。否则需要自己拼接
+ key: params.id, // todo 对应sysFile主键 [非必须]自定义文件 key。如果不设置,默认为使用微信小程序 API 的临时文件名
+ // 以下方法三选一即可,优先级为:uptoken > uptokenURL > uptokenFunc
+ uptoken: result.token, // 由其他程序生成七牛 uptoken
+ }, (res) => {
+ console.log('上传进度', res.progress)
+ console.log('已经上传的数据长度', res.totalBytesSent)
+ console.log('预期需要上传的数据总长度', res.totalBytesExpectedToSend)
+ }, () => {
+ // 取消上传
+ }, () => {
+ // `before` 上传前执行的操作
+ }, (err) => {
+ // `complete` 上传接受后执行的操作(无论成功还是失败都执行)
+ });
+ });
+ });
+ }
+
+ /**
+ * 将图片上传到七牛云,并将上传的图片id保存到后台服务端。
+ * @param fkId sysFile表的外键fkId
+ * @param filePath 图片路径
+ * @param data
+ * @returns {Promise}
+ */
+ static uploadToCloud(fkId, filePath, data = {clearOldImage: true, typeMark: "thumbnail"}) {
+ const _self = this;
+ return new Promise(function (resolve, reject) {
+ _self.upload({
+ filePath: filePath
+ }).then(qiniuCloudResult => {
+ console.log(qiniuCloudResult);
+ if (qiniuCloudResult.status === "success") {
+ HttpUtil.myPost({
+ url: `sysfile/saveBase64Image`,
+ data: {
+ id: qiniuCloudResult.id,
+ name: "移动端上传的图片",
+ fkId: fkId,
+ type: 'image/jpeg',
+ clearOldImage: data.clearOldImage,
+ typeMark: data.typeMark,
+ content: "jsUploaded" // 在js端就将图片上传到七牛云了
+ }
+ }).then(result => {
+ /*let 后台返回 = {
+ id: "sysFile.id",
+ sysFile: sysFile,
+ status: "success"
+ };*/
+ result.message = "上传图片成功";
+ resolve(result);
+ });
+ } else {
+ resolve({
+ status: "fail",
+ message: "上传图片失败"
+ });
+ }
+ })
+ });
+ }
+}
diff --git a/src/dev/core/utils/qiniuUploader.js b/src/dev/core/utils/qiniuUploader.js
new file mode 100644
index 0000000..6b5dcfc
--- /dev/null
+++ b/src/dev/core/utils/qiniuUploader.js
@@ -0,0 +1,176 @@
+// created by gpake
+(function() {
+
+var config = {
+ qiniuRegion: '',
+ qiniuImageURLPrefix: '',
+ qiniuUploadToken: '',
+ qiniuUploadTokenURL: '',
+ qiniuUploadTokenFunction: null,
+ qiniuShouldUseQiniuFileName: false
+}
+
+module.exports = {
+ init: init,
+ upload: upload,
+}
+
+// 在整个程序生命周期中,只需要 init 一次即可
+// 如果需要变更参数,再调用 init 即可
+function init(options) {
+ config = {
+ qiniuRegion: '',
+ qiniuImageURLPrefix: '',
+ qiniuUploadToken: '',
+ qiniuUploadTokenURL: '',
+ qiniuUploadTokenFunction: null,
+ qiniuShouldUseQiniuFileName: false
+ };
+ updateConfigWithOptions(options);
+}
+
+function updateConfigWithOptions(options) {
+ if (options.region) {
+ config.qiniuRegion = options.region;
+ } else {
+ console.error('qiniu uploader need your bucket region');
+ }
+ if (options.uptoken) {
+ config.qiniuUploadToken = options.uptoken;
+ } else if (options.uptokenURL) {
+ config.qiniuUploadTokenURL = options.uptokenURL;
+ } else if(options.uptokenFunc) {
+ config.qiniuUploadTokenFunction = options.uptokenFunc;
+ }
+ if (options.domain) {
+ config.qiniuImageURLPrefix = options.domain;
+ }
+ config.qiniuShouldUseQiniuFileName = options.shouldUseQiniuFileName
+}
+
+function upload(filePath, success, fail, options, progress, cancelTask, before, complete) {
+ if (null == filePath) {
+ console.error('qiniu uploader need filePath to upload');
+ return;
+ }
+ if (options) {
+ updateConfigWithOptions(options);
+ }
+ if (config.qiniuUploadToken) {
+ doUpload(filePath, success, fail, options, progress, cancelTask, before, complete);
+ } else if (config.qiniuUploadTokenURL) {
+ getQiniuToken(function() {
+ doUpload(filePath, success, fail, options, progress, cancelTask, before, complete);
+ });
+ } else if (config.qiniuUploadTokenFunction) {
+ config.qiniuUploadToken = config.qiniuUploadTokenFunction();
+ if (null == config.qiniuUploadToken && config.qiniuUploadToken.length > 0) {
+ console.error('qiniu UploadTokenFunction result is null, please check the return value');
+ return
+ }
+ doUpload(filePath, success, fail, options, progress, cancelTask, before, complete);
+ } else {
+ console.error('qiniu uploader need one of [uptoken, uptokenURL, uptokenFunc]');
+ return;
+ }
+}
+
+function doUpload(filePath, success, fail, options, progress, cancelTask, before, complete) {
+ if (null == config.qiniuUploadToken && config.qiniuUploadToken.length > 0) {
+ console.error('qiniu UploadToken is null, please check the init config or networking');
+ return
+ }
+ var url = uploadURLFromRegionCode(config.qiniuRegion);
+ var fileName = filePath.split('//')[1];
+ if (options && options.key) {
+ fileName = options.key;
+ }
+ var formData = {
+ 'token': config.qiniuUploadToken
+ };
+ if (!config.qiniuShouldUseQiniuFileName) {
+ formData['key'] = fileName
+ }
+ before && before();
+ var uploadTask = wx.uploadFile({
+ url: url,
+ filePath: filePath,
+ name: 'file',
+ formData: formData,
+ success: function (res) {
+ var dataString = res.data
+ // // this if case is a compatibility with wechat server returned a charcode, but was fixed
+ // if(res.data.hasOwnProperty('type') && res.data.type === 'Buffer'){
+ // dataString = String.fromCharCode.apply(null, res.data.data)
+ // }
+ try {
+ var dataObject = JSON.parse(dataString);
+ //do something
+ var fileUrl = config.qiniuImageURLPrefix + '/' + dataObject.key;
+ dataObject.fileUrl = fileUrl
+ dataObject.imageURL = fileUrl;
+ console.log(dataObject);
+ if (success) {
+ success(dataObject);
+ }
+ } catch(e) {
+ console.log('parse JSON failed, origin String is: ' + dataString)
+ if (fail) {
+ fail(e);
+ }
+ }
+ },
+ fail: function (error) {
+ console.error(error);
+ if (fail) {
+ fail(error);
+ }
+ },
+ complete: function(err) {
+ complete && complete(err);
+ }
+ })
+
+ uploadTask.onProgressUpdate((res) => {
+ progress && progress(res)
+ })
+
+ cancelTask && cancelTask(() => {
+ uploadTask.abort()
+ })
+}
+
+function getQiniuToken(callback) {
+ wx.request({
+ url: config.qiniuUploadTokenURL,
+ success: function (res) {
+ var token = res.data.uptoken;
+ if (token && token.length > 0) {
+ config.qiniuUploadToken = token;
+ if (callback) {
+ callback();
+ }
+ } else {
+ console.error('qiniuUploader cannot get your token, please check the uptokenURL or server')
+ }
+ },
+ fail: function (error) {
+ console.error('qiniu UploadToken is null, please check the init config or networking: ' + error);
+ }
+ })
+}
+
+function uploadURLFromRegionCode(code) {
+ var uploadURL = null;
+ switch(code) {
+ case 'ECN': uploadURL = 'https://up.qiniup.com'; break;
+ case 'NCN': uploadURL = 'https://up-z1.qiniup.com'; break;
+ case 'SCN': uploadURL = 'https://up-z2.qiniup.com'; break;
+ case 'NA': uploadURL = 'https://up-na0.qiniup.com'; break;
+ case 'ASG': uploadURL = 'https://up-as0.qiniup.com'; break;
+ default: console.error('please make the region is with one of [ECN, SCN, NCN, NA, ASG]');
+ }
+ return uploadURL;
+}
+
+})();
diff --git a/src/dev/core/utils/tabbar.util.js b/src/dev/core/utils/tabbar.util.js
new file mode 100644
index 0000000..7ea73fe
--- /dev/null
+++ b/src/dev/core/utils/tabbar.util.js
@@ -0,0 +1,286 @@
+import globalVariable from "../global-variable";
+
+export class TabbarUtil {
+
+ static getTabbar() {
+ let list = [
+ {
+ type: "0",
+ tabbar: [
+ {
+ "componentRef": "indexRef",
+ "text": "首页",
+ "title": globalVariable.userInfo.tbCommunity ? globalVariable.userInfo.tbCommunity.name : '首页',
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/home_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/home_fill_light.png"
+ },
+ {
+ "componentRef": "goodsClassRef",
+ "text": "分类",
+ "title": "商品分类",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/sort_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/sort.png"
+ },
+ {
+ "componentRef": "shoppingCartRef",
+ "text": "购物车",
+ "title": "购物车",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/cart_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/cart_fill_light.png"
+ },
+ {
+ "componentRef": "communityDynamicRef",
+ "text": "动态",
+ "title": "商城动态",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/community_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/community_fill_light.png"
+ },
+ {
+ "componentRef": "personRef",
+ "text": "我的",
+ "title": "我的",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/my_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/my_fill_light.png"
+ }
+ ]
+ },
+ {
+ type: "1",
+ tabbar: [
+ {
+ "componentRef": "indexRef",
+ "text": "首页",
+ "title": globalVariable.userInfo.tbCommunity ? globalVariable.userInfo.tbCommunity.name : '首页',
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_fill_light.png"
+ },
+ {
+ "componentRef": "goodsClassRef",
+ "text": "分类",
+ "title": "商品分类",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/sort_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/sort.png"
+ },
+ {
+ "componentRef": "shoppingCartRef",
+ "text": "购物车",
+ "title": "购物车",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_fill_light.png"
+ },
+ {
+ "componentRef": "personRef",
+ "text": "我的",
+ "title": "我的",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_fill_light.png"
+ }
+ ]
+ },
+ {
+ type: "2",
+ tabbar: [
+ {
+ "componentRef": "indexRef",
+ "text": "首页",
+ "title": globalVariable.userInfo.tbCommunity ? globalVariable.userInfo.tbCommunity.name : '首页',
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_fill_light.png"
+ },
+ {
+ "componentRef": "goodsClassRef",
+ "text": "分类",
+ "title": "商品分类",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/sort_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/sort.png"
+ },
+ {
+ "componentRef": "goodsSeckillRef",
+ "text": "商品秒杀",
+ "title": "商品秒杀",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/seckill_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/seckill_fill.png"
+ },
+ {
+ "componentRef": "shoppingCartRef",
+ "text": "购物车",
+ "title": "购物车",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_fill_light.png"
+ },
+ {
+ "componentRef": "personRef",
+ "text": "我的",
+ "title": "我的",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_fill_light.png"
+ }
+ ]
+ },
+ {
+ type: "3",
+ tabbar: [
+ {
+ "componentRef": "indexEateryRef",
+ "text": "首页",
+ "title": globalVariable.userInfo.tbCommunity ? globalVariable.userInfo.tbCommunity.name : '首页',
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_fill_light.png"
+ },
+ {
+ "componentRef": "shoppingCartRef",
+ "text": "购物车",
+ "title": "购物车",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_fill_light.png"
+ },
+ {
+ "componentRef": "personRef",
+ "text": "我的",
+ "title": "我的",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_fill_light.png"
+ }
+ ]
+ },
+ {
+ type: "4",
+ tabbar: [
+ {
+ "componentRef": "indexEateryRef",
+ "text": "首页",
+ "title": globalVariable.userInfo.tbCommunity ? globalVariable.userInfo.tbCommunity.name : '首页',
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_fill_light.png"
+ },
+ {
+ "componentRef": "shoppingCartRef",
+ "text": "购物车",
+ "title": "购物车",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_fill_light.png"
+ },
+ {
+ "componentRef": "communityDynamicRef",
+ "text": "动态",
+ "title": "商城动态",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/community_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/community_fill_light.png"
+ },
+ {
+ "componentRef": "personRef",
+ "text": "我的",
+ "title": "我的",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_fill_light.png"
+ }
+ ]
+ },
+ {
+ type: "5",
+ tabbar: [
+ {
+ "componentRef": "indexEateryRef",
+ "text": "首页",
+ "title": globalVariable.userInfo.tbCommunity ? globalVariable.userInfo.tbCommunity.name : '首页',
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_fill_light.png"
+ },
+ {
+ "componentRef": "goodsSeckillRef",
+ "text": "商品秒杀",
+ "title": "商品秒杀",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/seckill_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/seckill_fill.png"
+ },
+ {
+ "componentRef": "shoppingCartRef",
+ "text": "购物车",
+ "title": "购物车",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_fill_light.png"
+ },
+ {
+ "componentRef": "personRef",
+ "text": "我的",
+ "title": "我的",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_fill_light.png"
+ }
+ ]
+ },
+ {
+ type: "6",
+ tabbar: [
+ {
+ "componentRef": "indexEateryRef",
+ "text": "首页",
+ "title": globalVariable.userInfo.tbCommunity ? globalVariable.userInfo.tbCommunity.name : '首页',
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/home_fill_light.png"
+ },
+ {
+ "componentRef": "shoppingCartRef",
+ "text": "购物车",
+ "title": "购物车",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/cart_fill_light.png"
+ },
+ {
+ "componentRef": "goodsSeckillRef",
+ "text": "商品秒杀",
+ "title": "商品秒杀",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/seckill_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/seckill_fill.png"
+ },
+ {
+ "componentRef": "communityDynamicRef",
+ "text": "动态",
+ "title": "商城动态",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/community_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/community_fill_light.png"
+ },
+ {
+ "componentRef": "personRef",
+ "text": "我的",
+ "title": "我的",
+ "iconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_light.png",
+ "selectedIconPath": "/pages/sub/sub1-tabs/static/icon/tabbar/tabs/my_fill_light.png"
+ }
+ ]
+ }
+ ];
+
+ // 更新选中的底部导航栏
+ let tabbar = list[0].tabbar;
+ list.forEach((item, index) => {
+ if (item.type === globalVariable.userInfo.tbCommunity.tabbarType) {
+ tabbar = item.tabbar;
+ }
+ });
+
+ return tabbar;
+
+ /*// 更新选择的底部导航栏tab
+ let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
+ let curRoute = routes[routes.length - 1].route; //获取当前页面路由
+ _self.tabbar.forEach((item, index) => {
+ console.log(item.pagePath, curRoute);
+ if (item.pagePath === curRoute) {
+ _self.current = index;
+ }
+ });
+
+ console.log('TabbarUtil---------------------------------', TabbarUtil.current, TabbarUtil.tabbar);*/
+ }
+
+ static getIndexByComponentRef(componentRef) {
+ const _self = this;
+ let tarbar = _self.getTabbar();
+ tarbar.forEach((item, index) => {
+ if (item.componentRef === componentRef) {
+ return index;
+ }
+ })
+ }
+}
diff --git a/src/dev/core/utils/u-form.util.js b/src/dev/core/utils/u-form.util.js
new file mode 100644
index 0000000..2f7fd7e
--- /dev/null
+++ b/src/dev/core/utils/u-form.util.js
@@ -0,0 +1,361 @@
+import {CommonUtil} from "./common.util";
+
+export class UFormUtil {
+
+ /**
+ * 初始化表单对象
+ * @param validateForm
+ */
+ static init(validateForm) {
+ // console.log("-------------------------------init-------------------------------", validateForm);
+ // 给表单对象添加controls属性
+ const _self = this;
+ let controls = {};
+ let i = 0;
+ for (let attrName in validateForm.value) {
+ controls[attrName] = {
+ id: CommonUtil.generateUUID(),
+ rawValue: validateForm.value[attrName], // 原始值,可以用重置表单
+ value: validateForm.value, // 引用value对线,可以在control中直接操作value对象
+ timestamp: new Date().getTime() + i++,
+ valueName: attrName,
+ options: [],
+ isShow: false,
+ textDesc: '',
+ defaultIndex: -1,
+ }
+ }
+
+ // 添加重置表单方法
+ validateForm.resetValues = function () {
+ for (let attrName in validateForm.value) {
+ validateForm.value[attrName] = validateForm.controls[attrName].rawValue;
+ if (validateForm.controls[attrName].options) {
+ _self.selectOptions(validateForm.controls[attrName], validateForm.controls[attrName].selectColNums, validateForm.controls[attrName].selectValues);
+ }
+ }
+ console.log("resetValues------------------------", validateForm);
+ };
+
+ // 添加搜索事件
+ validateForm.doSearch = function (_selfVue, dataList, uDropdownRef = 'uDropdown') {
+ console.log(_selfVue)
+ console.log(_selfVue.$refs)
+ if (_selfVue.$refs[uDropdownRef]) {
+ _selfVue.$refs[uDropdownRef].close();
+ }
+ _selfVue.doRefresh(dataList);
+ console.log("doSearch------------------------", validateForm);
+ };
+
+ validateForm.controls = controls;
+ return validateForm;
+ }
+
+ /**
+ * 给表单字段设置默认值
+ * @param validateForm
+ * @param data
+ */
+ static setDefaultValues(validateForm, data) {
+ console.log("-------------------------------setDefaultValues-------------------------------", validateForm, data);
+ if (data === null || data === undefined) {
+ return;
+ }
+ for (let controlName in validateForm.value) {
+ for (let dataName in data) {
+ if (controlName == dataName) {
+ if (typeof data[dataName] === 'boolean') {
+ validateForm.value[controlName] = data[dataName];
+ validateForm.controls[controlName].rawValue = data[dataName];
+ } else {
+ validateForm.value[controlName] = data[dataName] + ""; // todo 值必须转成字符串类型,表单校验规则数字和字符串类型不兼容。
+ validateForm.controls[controlName].rawValue = data[dataName] + ""; // 原始值,可以用重置表单 todo 值必须转成字符串类型,表单校验规则数字和字符串类型不兼容。
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 选择地区回调事件
+ */
+ static regionConfirm(e, control, provinceName = 'provinceName', cityName = 'cityName', areaName = 'areaName') {
+ console.log(e);
+ let value = control.value;
+ value[control.valueName] = e.province.label + '-' + e.city.label + '-' + e.area.label;
+ value[provinceName] = e.province.label;
+ value[cityName] = e.city.label;
+ value[areaName] = e.area.label;
+ control.isShow = false;
+ }
+
+ /**
+ * 选择时间回调事件
+ */
+ static timeConfirm(e, control) {
+ console.log(e);
+ let value = control.value;
+ let yyyyMMdd = [];
+ if (e.year) {
+ yyyyMMdd.push(e.year);
+ }
+ if (e.month) {
+ yyyyMMdd.push(e.month);
+ }
+ if (e.day) {
+ yyyyMMdd.push(e.day);
+ }
+ let hhmmss = [];
+ if (e.hour) {
+ hhmmss.push(e.hour);
+ }
+ if (e.minute) {
+ hhmmss.push(e.minute);
+ }
+ if (e.second) {
+ hhmmss.push(e.second);
+ }
+ value[control.valueName] = `${yyyyMMdd.join("-")} ${hhmmss.join(":")}`.trim();
+ control.isShow = false;
+ }
+
+ /**
+ * @param control
+ * @param options
+ * @param colNums 列数
+ * @param values 默认值
+ */
+ static setOptions(control, options, colNums = 1, values) {
+ console.log("-------------------------------setOptions-------------------------------", control, options, colNums, values);
+ if (colNums === 1) { // 删除第一列的子节点
+ options.forEach((item1, index) => {
+ delete item1.children;
+ });
+ } else if (colNums === 2) { // 删除第二列的子节点
+ options.forEach((item1, index1) => {
+ item1.children.forEach((item2, index2) => {
+ delete item2.children;
+ });
+ });
+ } else if (colNums === 3) { // 删除第三列的子节点
+ options.forEach((item1, index1) => {
+ item1.children.forEach((item2, index2) => {
+ item2.children.forEach((item3, index3) => {
+ delete item3.children;
+ });
+ });
+ });
+ }
+ control.options = options;
+ control.selectColNums = colNums;
+ control.selectValues = values;
+ this.selectOptions(control, colNums, values);
+ }
+
+ /**
+ * 选中某个控件值
+ *
+ * 模式选择,"single-column"-单列模式,"mutil-column"-多列模式,"mutil-column-auto"-多列联动模式
+ * 三列数据格式
+ * [
+ * {
+ * value: 1,
+ * label: '中国',
+ * children: [
+ * {
+ * value: 2,
+ * label: '广东',
+ * children: [
+ * {
+ * value: 3,
+ * label: '深圳'
+ * },
+ * {
+ * value: 4,
+ * label: '广州'
+ * }
+ * ]
+ * }
+ * ]
+ * }
+ * ]
+ */
+ static selectOptions(control, colNums, values) {
+ let defaultValue = control.value[control.valueName];
+ if (values) {
+ defaultValue = values;
+ }
+
+ // todo 如果值是boolean类型,则换成1或0
+ if (defaultValue === false || defaultValue === 'false') {
+ defaultValue = "0";
+ } else if (defaultValue === true || defaultValue === 'true') {
+ defaultValue = "1";
+ }
+
+ // 单列模式
+ if (colNums === 1) {
+ control.options.forEach((item, index) => {
+ if (item.label !== undefined && item.value !== undefined) {
+ if (item.value + "" === defaultValue + "") {
+ control.textDesc = item.label;
+ control.defaultIndex = index;
+ control.defaultValue = [index];
+ }
+ } else if (item.code !== undefined && item.name !== undefined) {
+ if (item.code + "" === defaultValue + "") {
+ control.textDesc = item.name;
+ control.defaultIndex = index;
+ control.defaultValue = [index];
+ }
+ }
+ });
+ } else if (colNums === 2) {
+ // 一般默认值是第二列的值
+ control.options.forEach((item1, index1) => {
+ item1.children.forEach((item2, index2) => {
+ if (item2.label !== undefined && item2.value !== undefined) {
+ if (item2.value + "" === defaultValue + "") {
+ let labels = [];
+ if (item1.label) {
+ labels.push(item1.label);
+ }
+ if (item2.label) {
+ labels.push(item2.label);
+ }
+ control.textDesc = labels.join("-");
+ control.defaultIndex = index2;
+ control.defaultValue = [index1, index2];
+ }
+ } else if (item2.code !== undefined && item2.name !== undefined) {
+ if (item2.code + "" === defaultValue + "") {
+ let names = [];
+ if (item1.name) {
+ names.push(item1.name);
+ }
+ if (item2.name) {
+ names.push(item2.name);
+ }
+ control.textDesc = names.join("-");
+ control.defaultIndex = index2;
+ control.defaultValue = [index1, index2];
+ }
+ }
+ });
+ });
+ } else if (colNums === 3) {
+ // 一般默认值是第三列的值
+ control.options.forEach((item1, index1) => {
+ item1.children.forEach((item2, index2) => {
+ item2.children.forEach((item3, index3) => {
+ if (item3.label !== undefined && item3.value !== undefined) {
+ if (item3.value + "" === defaultValue + "") {
+ let labels = [];
+ if (item1.label) {
+ labels.push(item1.label);
+ }
+ if (item2.label) {
+ labels.push(item2.label);
+ }
+ if (item3.label) {
+ labels.push(item3.label);
+ }
+ control.textDesc = labels.join("-");
+ control.defaultIndex = index3;
+ control.defaultValue = [index1, index2, index3];
+ }
+ } else if (item3.code !== undefined && item3.name !== undefined) {
+ if (item3.code + "" === defaultValue + "") {
+ let names = [];
+ if (item1.name) {
+ names.push(item1.name);
+ }
+ if (item2.name) {
+ names.push(item2.name);
+ }
+ if (item3.name) {
+ names.push(item3.name);
+ }
+ control.textDesc = names.join("-");
+ control.defaultIndex = index3;
+ control.defaultValue = [index1, index2, index3];
+ }
+ }
+ });
+ });
+ });
+ }
+ }
+
+ /**
+ * 单列下拉选择选中事件
+ */
+ static selectSingleColumnConfirm($event, control) {
+ console.log($event, control);
+ control.value[control.valueName] = $event[0].value;
+ control.textDesc = $event[0].label;
+ this.selectOptions(control, $event.length);
+ control.isShow = false;
+ }
+
+ /**
+ * 多列联动下拉选择选中事件
+ */
+ static selectMutilColumnConfirm($event, control) {
+ console.log($event, control); // $event = [{label: '', value: ''}, {label: '', value: ''}, ...]
+ control.value[control.valueName] = $event[$event.length - 1].value; // 多列联动,取最后一列的值
+ let labels = [];
+ $event.forEach(item => {
+ if (item.label) {
+ labels.push(item.label);
+ }
+ });
+ control.textDesc = labels.join("-");
+
+ // 解决弹框不会选中问题。
+ this.selectOptions(control, $event.length);
+ control.isShow = false;
+ }
+
+ /**
+ * 获取表单中某个字段
+ * @param formRef this.$refs.uForm
+ * @param prop 'code'
+ * @returns {*}
+ */
+ static getFormItem(formRef, prop) {
+ if (!formRef) {
+ return undefined;
+ }
+
+ const list = formRef.fields.filter(item => item.prop === prop);
+ if (list.length) {
+ return list[0];
+ }
+
+ return undefined;
+ }
+
+ /**
+ * 校验单个字段,触发单个字段的校验规则
+ * @param formRef this.$refs.uForm
+ * @param prop 'code'
+ *
+ * UFormUtil.validation(_self.$refs.validateFormRef, 'sysFileId');
+ */
+ static validation(formRef, prop) {
+ const _self = this;
+ return new Promise(function (resolve, reject) {
+ const item = _self.getFormItem(formRef, prop);
+ item.validation('', error => {
+ if (error) {
+ CommonUtil.toast(error);
+ resolve(false);
+ } else {
+ resolve(true);
+ }
+ });
+ });
+ }
+}
diff --git a/src/dev/services/common.service.js b/src/dev/services/common.service.js
new file mode 100644
index 0000000..b93405e
--- /dev/null
+++ b/src/dev/services/common.service.js
@@ -0,0 +1,84 @@
+import {BaseService} from '../core/base/base.service'
+
+export class CommonService extends BaseService {
+ /**
+ * 唯一性检查
+ */
+ uniqueCheck(tableName, fieldName, fieldValue, excludeId) {
+ return this.httpUtil.myPost({
+ url: `common/uniqueCheck`,
+ data: {
+ tableName: tableName,
+ fieldName: fieldName,
+ fieldValue: fieldValue,
+ excludeId: excludeId
+ }
+ })
+ }
+
+ /**
+ * 多字段唯一性检查
+ *
+ * {
+ * "tableName": "sys_user",
+ * "fieldList": [
+ * {"fieldName": "code11", "fieldValue": "111"},
+ * {"fieldName": "code", "fieldValue": "1"}
+ * ],
+ * "excludeId": ""
+ * }
+ */
+ uniqueCheckByFields(parameterMap) {
+ return this.httpUtil.myPostJson({
+ url: `common/uniqueCheckByFields`,
+ data: parameterMap
+ })
+ }
+
+ /**
+ * 生成分享图片
+ * @param storeId
+ */
+ generateShareImage(data) {
+ return this.httpUtil.myPost({
+ url: `common/generateShareImage`,
+ data: data
+ })
+ }
+
+ /**
+ * web端测试
+ */
+ downloadApp() {
+ return this.httpUtil.myGet({ // 获得服务器更新信息
+ url: 'tbappversioninfo/selectNewest',
+ data: {
+ platformType: 'android',
+ versionType: 'release',
+ deleted: 0
+ }
+ })
+ }
+
+ /**
+ * 后台生成二维码,自定义二维码内容。
+ * @param content
+ */
+ generateQrcodeBase64(content) {
+ return this.httpUtil.myGet({ // 获得服务器更新信息
+ url: 'common/generateQrcodeToBase64',
+ data: {
+ content: content
+ }
+ })
+ }
+
+ /**
+ * 获取七牛云上传Token。
+ */
+ findQiNiuUploadToken() {
+ return this.httpUtil.myGet({ // 获得服务器更新信息
+ url: 'common/findQiNiuUploadToken',
+ })
+ }
+}
diff --git a/src/dev/services/login.service.js b/src/dev/services/login.service.js
new file mode 100644
index 0000000..84beca8
--- /dev/null
+++ b/src/dev/services/login.service.js
@@ -0,0 +1,59 @@
+import {BaseService} from '../core/base/base.service'
+
+export class LoginService extends BaseService {
+
+ login(params) {
+ return this.httpUtil.myPost({
+ url: 'sysuser/login',
+ data: {
+ username: params.username,
+ password: params.password
+ }
+ })
+ }
+
+ /**
+ * 扫码登陆
+ * @param data
+ * @returns {*}
+ */
+ loginByScan(data) {
+ return this.httpUtil.myPost({
+ url: 'sysuser/loginByScan',
+ data: data
+ })
+ }
+
+ /**
+ * 从服务号登陆
+ * @param data
+ * @returns {*}
+ */
+ loginByFwh(data) {
+ return this.httpUtil.myPost({
+ url: 'sysuser/loginByFwh',
+ data: data
+ })
+ }
+
+ /**
+ * 小程序登录
+ * @param data
+ * @returns {*}
+ */
+ miniAppLogin(data) {
+ return this.httpUtil.myPost({
+ url: 'wechat/miniAppLogin',
+ data: data
+ })
+ }
+
+ gotoIndexPage() {
+ if (!this.globalVariable.userInfo.tbCommunityUser || this.globalVariable.userInfo.tbCommunityUser.type === '1') {
+ uni.showToast({title: '登录成功,即将跳转到首页', icon: 'none'})
+ uni.navigateTo({
+ url: `/pages/sub/sub1-tabs/index`
+ })
+ }
+ }
+}
diff --git a/src/dev/services/order-goods-after-sale-report.service.js b/src/dev/services/order-goods-after-sale-report.service.js
new file mode 100644
index 0000000..5757fd9
--- /dev/null
+++ b/src/dev/services/order-goods-after-sale-report.service.js
@@ -0,0 +1,11 @@
+import {BaseService} from "../core/base/base.service";
+
+export class OrderGoodsAfterSaleReportService extends BaseService {
+
+ statisticOrderGoodsAfterSaleTotal(params) {
+ return this.httpUtil.myPost({
+ url: `ordergoodaftersalesreport/statisticOrderGoodsAfterSaleTotal`,
+ data: params
+ });
+ }
+}
diff --git a/src/dev/services/order-report.service.js b/src/dev/services/order-report.service.js
new file mode 100644
index 0000000..9ee1df2
--- /dev/null
+++ b/src/dev/services/order-report.service.js
@@ -0,0 +1,67 @@
+import {BaseService} from "../core/base/base.service";
+
+export class OrderReportService extends BaseService {
+
+ statisticOrderTotal(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderTotal`,
+ data: params
+ });
+ }
+
+ statisticOrderNumber(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderNumber`,
+ data: params
+ });
+ }
+
+ statisticOrderSaleMoney(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderSaleMoney`,
+ data: params
+ });
+ }
+
+ statisticOrderNumber24Hours(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderNumber24Hours`,
+ data: params
+ });
+ }
+
+ statisticOrderSaleMoney24Hours(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderSaleMoney24Hours`,
+ data: params
+ });
+ }
+
+ statisticOrderNumberRecent30Days(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderNumberRecent30Days`,
+ data: params
+ });
+ }
+
+ statisticOrderSaleMoneyRecent30Days(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderSaleMoneyRecent30Days`,
+ data: params
+ });
+ }
+
+ statisticOrderNumberRecentMonthsOfYear(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderNumberRecentMonthsOfYear`,
+ data: params
+ });
+ }
+
+ statisticOrderSaleMoneyRecentMonthsOfYear(params) {
+ return this.httpUtil.myPost({
+ url: `orderreport/statisticOrderSaleMoneyRecentMonthsOfYear`,
+ data: params
+ });
+ }
+}
diff --git a/src/dev/services/store-report.service.js b/src/dev/services/store-report.service.js
new file mode 100644
index 0000000..788635f
--- /dev/null
+++ b/src/dev/services/store-report.service.js
@@ -0,0 +1,11 @@
+import {BaseService} from "../core/base/base.service";
+
+export class StoreReportService extends BaseService {
+
+ statisticStoreInfo(params) {
+ return this.httpUtil.myPost({
+ url: `storereport/statisticStoreInfo`,
+ data: params
+ });
+ }
+}
diff --git a/src/dev/services/sys-administrative-region.service.js b/src/dev/services/sys-administrative-region.service.js
new file mode 100644
index 0000000..617f00a
--- /dev/null
+++ b/src/dev/services/sys-administrative-region.service.js
@@ -0,0 +1,10 @@
+import {BaseService} from '../core/base/base.service'
+
+export class SysAdministrativeRegionService extends BaseService {
+
+ findSysAdministrativeRegionCascaderList () {
+ return this.httpUtil.myPost({
+ url: `sysadministrativeregion/findCascaderList`
+ })
+ }
+}
diff --git a/src/dev/services/sys-config.service.js b/src/dev/services/sys-config.service.js
new file mode 100644
index 0000000..7bf31d8
--- /dev/null
+++ b/src/dev/services/sys-config.service.js
@@ -0,0 +1,34 @@
+import {BaseService} from '../core/base/base.service'
+
+export class SysConfigService extends BaseService {
+
+ findSysConfig(sysConfig) {
+ return this.httpUtil.myPost({
+ url: `sysconfig/findOne`,
+ data: sysConfig
+ })
+ }
+
+ saveSysConfig(sysConfig) {
+ return this.httpUtil.myPost({
+ url: `sysconfig/save`,
+ data: sysConfig
+ })
+ }
+
+ updateSysConfig(sysConfig) {
+ return this.httpUtil.myPost({
+ url: `sysconfig/update`,
+ data: sysConfig
+ })
+ }
+
+ batchDeleteSysConfigByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `sysconfig/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/sys-dictionary.service.js b/src/dev/services/sys-dictionary.service.js
new file mode 100644
index 0000000..73a8eea
--- /dev/null
+++ b/src/dev/services/sys-dictionary.service.js
@@ -0,0 +1,47 @@
+import {BaseService} from '../core/base/base.service'
+
+export class SysDictionaryService extends BaseService {
+
+ /**
+ * 获取下拉控件值列表
+ * @param parentCode // 数据字典编码,根据该编码查询所有下级节点
+ * @param excludeSubCods // 过滤掉不需要的数据字典编号,过滤多个值以逗号,分割。
+ */
+ optionList(parentCode, excludeSubCods = null) {
+ return this.httpUtil.myPost({
+ url: `sysdictionary/findSysDictionaryListByParentCode`,
+ data: {
+ code: parentCode,
+ excludeCods: excludeSubCods
+ }
+ })
+ }
+
+ findSysDictionaryTree(sysDictionary) {
+ return this.httpUtil.myPost({
+ url: `sysdictionary/findTree`,
+ data: sysDictionary
+ })
+ }
+
+ saveSysDictionary(sysDictionary) {
+ return this.httpUtil.myPost({
+ url: `sysdictionary/save`,
+ data: sysDictionary
+ })
+ }
+
+ updateSysDictionary(sysDictionary) {
+ return this.httpUtil.myPost({
+ url: `sysdictionary/update`,
+ data: sysDictionary
+ })
+ }
+
+ deleteSysDictionary(sysDictionary) {
+ return this.httpUtil.myPost({
+ url: `sysdictionary/deleteByIdCascade`,
+ data: {id: sysDictionary.id}
+ })
+ }
+}
diff --git a/src/dev/services/sys-file.service.js b/src/dev/services/sys-file.service.js
new file mode 100644
index 0000000..ad6dcc1
--- /dev/null
+++ b/src/dev/services/sys-file.service.js
@@ -0,0 +1,67 @@
+import {BaseService} from '../core/base/base.service'
+
+export class SysFileService extends BaseService {
+
+ deleteSysFileById(params) {
+ const _self = this;
+ _self.httpUtil.myGet({
+ url: `sysfile/deleteById?id=${params.id}`
+ })
+ }
+
+ deleteSysFile(sysFile) {
+ return this.httpUtil.myPost({
+ url: `sysfile/deleteById`,
+ data: sysFile
+ })
+ }
+
+ findSysFileList(params) {
+ console.log("findSysFileList(params) {", params);
+ return this.httpUtil.myGet({
+ url: `sysfile/findList`,
+ data: {
+ id: params.id ? params.id : undefined,
+ fkId: params.fkId ? params.fkId : undefined,
+ code: params.code ? params.code : undefined,
+ name: params.name ? params.name : undefined,
+ type: params.type ? params.type : undefined,
+ typeMark: params.typeMark ? params.typeMark : undefined,
+ orderBy: 'display_order asc'
+ }
+ });
+ }
+
+ updateSysFile(sysFile) {
+ return this.httpUtil.myPost({
+ url: `sysfile/update`,
+ data: sysFile
+ })
+ }
+
+ saveSysFile(sysFile) {
+ return this.httpUtil.myPost({
+ url: `sysfile/save`,
+ data: sysFile,
+ })
+ }
+
+ batchSaveOrUpdateFile(json) {
+ return this.httpUtil.myPost({
+ url: `sysfile/batchSaveOrUpdate`,
+ data: json,
+ })
+ }
+
+ /**
+ * 查找七牛云上的图片url
+ * @param sysFile
+ * @return result.url // 七牛云吐图片地址
+ */
+ findQiniuCloudImageUrl(sysFile) {
+ return this.httpUtil.myPost({
+ url: `sysfile/findQiniuCloudImageUrl`,
+ data: sysFile,
+ })
+ }
+}
diff --git a/src/dev/services/sys-organization-user.service.js b/src/dev/services/sys-organization-user.service.js
new file mode 100644
index 0000000..4d760fd
--- /dev/null
+++ b/src/dev/services/sys-organization-user.service.js
@@ -0,0 +1,24 @@
+import {BaseService} from '../core/base/base.service'
+
+export class SysOrganizationUserService extends BaseService {
+ batchSaveSysOrganizationUser (data) {
+ return this.httpUtil.myPostJson({
+ url: `sysorganizationuser/batchSave`,
+ data: data
+ })
+ }
+
+ batchDeleteSysOrganizationUser (data) {
+ return this.httpUtil.myPostJson({
+ url: `sysorganizationuser/batchDelete`,
+ data: data
+ })
+ }
+
+ updateSysOrganizationUser (sysOrganization) {
+ return this.httpUtil.myPost({
+ url: `sysorganizationuser/update`,
+ data: sysOrganization
+ })
+ }
+}
diff --git a/src/dev/services/sys-organization.service.js b/src/dev/services/sys-organization.service.js
new file mode 100644
index 0000000..0c35a75
--- /dev/null
+++ b/src/dev/services/sys-organization.service.js
@@ -0,0 +1,39 @@
+import {BaseService} from '../core/base/base.service'
+
+export class SysOrganizationService extends BaseService {
+
+ findSysOrganizationTree (sysOrganization) {
+ return this.httpUtil.myPost({
+ url: `sysorganization/findTree`,
+ data: sysOrganization
+ })
+ }
+
+ saveSysOrganization (sysOrganization) {
+ return this.httpUtil.myPost({
+ url: `sysorganization/save`,
+ data: sysOrganization
+ })
+ }
+
+ updateSysOrganization (sysOrganization) {
+ return this.httpUtil.myPost({
+ url: `sysorganization/update`,
+ data: sysOrganization
+ })
+ }
+
+ deleteSysOrganization (sysOrganization) {
+ return this.httpUtil.myPost({
+ url: `sysorganization/deleteByIdCascade`,
+ data: {id: sysOrganization.id}
+ })
+ }
+
+ findSysOrganizationListByUserId (data) {
+ return this.httpUtil.myPost({
+ url: `sysorganization/findSysOrganizationListByUserId`,
+ data: data
+ })
+ }
+}
diff --git a/src/dev/services/sys-resource.service.js b/src/dev/services/sys-resource.service.js
new file mode 100644
index 0000000..d2db6f0
--- /dev/null
+++ b/src/dev/services/sys-resource.service.js
@@ -0,0 +1,45 @@
+import {BaseService} from '../core/base/base.service'
+
+export class SysResourceService extends BaseService {
+ findSysResourceTree (sysDictionary) {
+ return this.httpUtil.myPost({
+ url: `sysresource/findTree`,
+ data: sysDictionary
+ })
+ }
+
+ saveSysResource (sysDictionary) {
+ return this.httpUtil.myPost({
+ url: `sysresource/save`,
+ data: sysDictionary
+ })
+ }
+
+ updateSysResource (sysDictionary) {
+ return this.httpUtil.myPost({
+ url: `sysresource/update`,
+ data: sysDictionary
+ })
+ }
+
+ deleteSysResource (sysDictionary) {
+ return this.httpUtil.myPost({
+ url: `sysresource/deleteByIdCascade`,
+ data: {id: sysDictionary.id}
+ })
+ }
+
+ findAssignedResourcesIdsByRoleId (data) {
+ return this.httpUtil.myPost({
+ url: `sysresource/findAssignedResourcesIdsByRoleId`,
+ data: data
+ })
+ }
+
+ saveAssignedResourcesByRoleId (data) {
+ return this.httpUtil.myPost({
+ url: `sysresource/saveAssignedResourcesByRoleId`,
+ data: data
+ })
+ }
+}
diff --git a/src/dev/services/sys-user.service.js b/src/dev/services/sys-user.service.js
new file mode 100644
index 0000000..9c7ab81
--- /dev/null
+++ b/src/dev/services/sys-user.service.js
@@ -0,0 +1,84 @@
+import {BaseService} from '../core/base/base.service'
+
+export class SysUserService extends BaseService {
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `sysuser/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findById(id) {
+ return this.httpUtil.myPost({
+ url: `sysuser/findById`,
+ data: {id: id}
+ })
+ }
+
+ saveSysUser(sysUser) {
+ return this.httpUtil.myPost({
+ url: `sysuser/save`,
+ data: sysUser
+ })
+ }
+
+ register(sysUser) {
+ return this.httpUtil.myPost({
+ url: `sysuser/register`,
+ data: sysUser
+ })
+ }
+
+ validRawPassword(sysUser) {
+ const _self = this;
+ return _self.httpUtil.myPost({
+ url: `sysuser/validRawPassword`,
+ data: sysUser
+ })
+ }
+
+ updatePassword(sysUser) {
+ return this.httpUtil.myPost({
+ url: `sysuser/updatePassword`,
+ data: sysUser
+ })
+ }
+
+ changePhone(sysUser) {
+ return this.httpUtil.myPost({
+ url: `sysuser/changePhone`,
+ data: sysUser
+ })
+ }
+
+ updateSysUser(sysUser) {
+ return this.httpUtil.myPost({
+ url: `sysuser/update`,
+ data: sysUser
+ })
+ }
+
+ updateSessionData(sysUser) {
+ return this.httpUtil.myPostJson({
+ url: `sysuser/updateSessionData`,
+ data: sysUser
+ })
+ }
+
+ markTbCommunityUserTypeById(id) {
+ return this.httpUtil.myPost({
+ url: `sysuser/markTbCommunityUserTypeById`,
+ data: {id: id}
+ })
+ }
+
+ batchDeleteSysUserList(ids) {
+ return this.httpUtil.myPost({
+ url: `sysuser/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/sys_user_third_login.service.js b/src/dev/services/sys_user_third_login.service.js
new file mode 100644
index 0000000..00a876f
--- /dev/null
+++ b/src/dev/services/sys_user_third_login.service.js
@@ -0,0 +1,56 @@
+import {BaseService} from '../core/base/base.service'
+import {WechatService} from "./wechat.service";
+
+export class SysUserThirdLoginService extends BaseService {
+
+ findSysUserThirdLoginList(sysUserThirdLogin) {
+ return this.httpUtil.myPost({
+ url: `sysuserthirdlogin/findList`,
+ data: sysUserThirdLogin,
+ orderBy: 'display_order asc'
+ })
+ }
+
+ /**
+ * 微信登录授权-unionid
+ */
+ weixinLoginAuthorizationByUnionid(params) {
+ const _self = this;
+ return new Promise(function (resolve, reject) {
+ return _self.httpUtil.myPost({
+ url: 'sysuserthirdlogin/weixinLoginAuthorizationByUnionid',
+ data: params
+ }).then(result => {
+ resolve(result);
+ });
+ });
+ }
+
+ /**
+ * 微信登录-unionid版
+ */
+ weixinLoginByUnionid(name) {
+ const _self = this;
+ return new Promise(function (resolve, reject) {
+ new WechatService().findUnionidByCode().then(result1 => {
+ if (result1 && result1.data) {
+ _self.httpUtil.myPost({
+ url: 'sysuserthirdlogin/weixinLoginByUnionid',
+ data: {
+ unionid: result1.data,
+ }
+ }).then(result2 => {
+ resolve(result2);
+ });
+ }
+ });
+ });
+ }
+
+ deleteSysUserThirdLoginByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `sysuserthirdlogin/deleteByIds`,
+ data: {ids: ids}
+ })
+ }
+}
diff --git a/src/dev/services/tb-ad.service.js b/src/dev/services/tb-ad.service.js
new file mode 100644
index 0000000..2156317
--- /dev/null
+++ b/src/dev/services/tb-ad.service.js
@@ -0,0 +1,86 @@
+import {BaseService} from '../core/base/base.service'
+import {CommonUtil} from "../core/utils/common.util";
+
+export class TbAdService extends BaseService {
+
+ findTbAdList(tbAd) {
+ return this.httpUtil.myPost({
+ url: `tbad/findList`,
+ data: tbAd,
+ })
+ }
+
+ findTbAdListCascade(tbAd) {
+ return this.httpUtil.myPost({
+ url: `tbad/findTbAdListCascade`,
+ data: tbAd,
+ })
+ }
+
+ findTbAdById(id) {
+ return this.httpUtil.myPost({
+ url: `tbad/findById`,
+ data: {id: id},
+ })
+ }
+
+ saveTbAd(tbAd) {
+ return this.httpUtil.myPost({
+ url: `tbad/save`,
+ data: tbAd
+ })
+ }
+
+ updateTbAd(tbAd) {
+ return this.httpUtil.myPost({
+ url: `tbad/update`,
+ data: tbAd
+ })
+ }
+
+ deleteTbAdById(id) {
+ return this.httpUtil.myPost({
+ url: `tbad/deleteById`,
+ data: {id: id}
+ })
+ }
+
+ /**
+ * 通过广告类型导航到对应页面
+ * 广告类型:0-仅展示广告图片,1-内部打开网址,2-跳转商品详情,3-跳转店铺,4-跳转到一级系统分类,5-跳转到二级系统分类,6-跳转到商城动态分类列表,7-跳转到商城动态详情
+ */
+ navByType(_selfVue, tbAd) {
+ if (tbAd.type === "0") {
+ } else if (tbAd.type === "1") {
+ CommonUtil.navigateTo(`/pages/common/open-outer-url/index?url=${tbAd.navUrl}`);
+ } else if (tbAd.type === "2") {
+ CommonUtil.navigateTo(`/pages/common/goods-detail/index?id=${tbAd.navGoodsId}`);
+ } else if (tbAd.type === "3") {
+ CommonUtil.navigateTo(`/pages/common/store/index?storeId=${tbAd.navStoreId}`);
+ } else if (tbAd.type === "4") {
+ _selfVue.switchTarBarByComponentRef('goodsClassRef');
+ } else if (tbAd.type === "5") {
+ let parent = {
+ id: tbAd.navSystemClassGrade2ParentId,
+ name: tbAd.navSystemClassGrade2ParentName,
+ type: tbAd.navSystemClassGrade2ParentType,
+ };
+ let item = {
+ id: tbAd.navSystemClassGrade2Id,
+ type: tbAd.navSystemClassGrade2ParentType,
+ };
+ CommonUtil.navigateTo(`/pages/sub/sub1-tabs/tabs/goods-class/goods-class-filter/index`, null, {parentStoreClass: parent, tbStoreClass: item});
+ } else if (tbAd.type === "6") {
+ let tbCommunityDynamicType = {
+ id: tbAd.navCommunityDynamicTypeId,
+ name: tbAd.navCommunityDynamicTypeName
+ };
+ CommonUtil.navigateTo(`/pages/sub/sub1-tabs/tabs/community-dynamic/community-dynamic-list/index`, null, tbCommunityDynamicType);
+ } else if (tbAd.type === "7") {
+ let tbCommunityDynamic = {
+ id: tbAd.navCommunityDynamicId
+ };
+ CommonUtil.navigateTo(`/pages/sub/sub1-tabs/tabs/community-dynamic/community-dynamic-list/community-dynamic-detail/index`, null, tbCommunityDynamic);
+ }
+ }
+}
diff --git a/src/dev/services/tb-collect-user-goods.service.js b/src/dev/services/tb-collect-user-goods.service.js
new file mode 100644
index 0000000..6f22650
--- /dev/null
+++ b/src/dev/services/tb-collect-user-goods.service.js
@@ -0,0 +1,61 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbCollectUserGoodsService extends BaseService {
+ findTbCollectUserGoodsList (tbCollectUserGoods) {
+ return this.httpUtil.myPost({
+ url: `tbcollectusergoods/findList`,
+ data: tbCollectUserGoods
+ })
+ }
+
+ findTableListCascade (params) {
+ return this.httpUtil.myPost({
+ url: `tbcollectusergoods/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ saveTbCollectUserGoods (tbCollectUserGoods) {
+ return this.httpUtil.myPost({
+ url: `tbcollectusergoods/save`,
+ data: tbCollectUserGoods
+ })
+ }
+
+ updateTbCollectUserGoods (tbCollectUserGoods) {
+ return this.httpUtil.myPost({
+ url: `tbcollectusergoods/update`,
+ data: tbCollectUserGoods
+ })
+ }
+
+ deleteTbCollectUserGoods (tbCollectUserGoods) {
+ return this.httpUtil.myPost({
+ url: `tbcollectusergoods/deleteById`,
+ data: tbCollectUserGoods
+ })
+ }
+
+ batchDeleteTbCollectUserGoodsByIds (ids) {
+ return this.httpUtil.myPost({
+ url: `tbcollectusergoods/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ findCollectNum (tbCollectUserGoods) {
+ return this.httpUtil.myPost({
+ url: `tbcollectusergoods/findCollectNum`,
+ data: tbCollectUserGoods
+ })
+ }
+
+ isCollectedGoods (tbCollectUserGoods) {
+ return this.httpUtil.myGet({
+ url: `tbcollectusergoods/isCollected`,
+ data: tbCollectUserGoods
+ })
+ }
+}
diff --git a/src/dev/services/tb-collect-user-store.service.js b/src/dev/services/tb-collect-user-store.service.js
new file mode 100644
index 0000000..6b55e79
--- /dev/null
+++ b/src/dev/services/tb-collect-user-store.service.js
@@ -0,0 +1,62 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbCollectUserStoreService extends BaseService {
+
+ findTbCollectUserStoreList(tbCollectUserStore) {
+ return this.httpUtil.myPost({
+ url: `tbcollectuserstore/findList`,
+ data: tbCollectUserStore
+ })
+ }
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbcollectuserstore/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ saveTbCollectUserStore(tbCollectUserStore) {
+ return this.httpUtil.myPost({
+ url: `tbcollectuserstore/save`,
+ data: tbCollectUserStore
+ })
+ }
+
+ updateTbCollectUserStore(tbCollectUserStore) {
+ return this.httpUtil.myPost({
+ url: `tbcollectuserstore/update`,
+ data: tbCollectUserStore
+ })
+ }
+
+ deleteTbCollectUserStore(tbCollectUserStore) {
+ return this.httpUtil.myPost({
+ url: `tbcollectuserstore/deleteById`,
+ data: tbCollectUserStore
+ })
+ }
+
+ batchDeleteTbCollectUserStoreByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcollectuserstore/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ findCollectNum(tbCollectUserStore) {
+ return this.httpUtil.myPost({
+ url: `tbcollectuserstore/findCollectNum`,
+ data: tbCollectUserStore
+ })
+ }
+
+ isCollectedStore(tbCollectUserStore) {
+ return this.httpUtil.myPost({
+ url: `tbcollectuserstore/isCollected`,
+ data: tbCollectUserStore
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-admin.service.js b/src/dev/services/tb-community-admin.service.js
new file mode 100644
index 0000000..bcfdf4a
--- /dev/null
+++ b/src/dev/services/tb-community-admin.service.js
@@ -0,0 +1,48 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbCommunityAdminService extends BaseService {
+
+ findTbCommunityAdminList(tbCommunityAdmin) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityadmin/findList`,
+ data: tbCommunityAdmin,
+ orderBy: "display_order asc"
+ });
+ }
+
+ findTbCommunityAdminById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityadmin/findById`,
+ data: {id: id},
+ });
+ }
+
+ findTableTbCommunityAdminList(tbCommunityAdmin) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityadmin/findTableList`,
+ data: tbCommunityAdmin,
+ orderBy: "display_order asc"
+ });
+ }
+
+ saveTbCommunityAdmin(tbCommunityAdmin) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityadmin/save`,
+ data: tbCommunityAdmin
+ });
+ }
+
+ updateTbCommunityAdmin(tbCommunityAdmin) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityadmin/update`,
+ data: tbCommunityAdmin
+ });
+ }
+
+ deleteTbCommunityAdminByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityadmin/deleteByIds`,
+ data: {ids: ids}
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-complaint.service.js b/src/dev/services/tb-community-complaint.service.js
new file mode 100644
index 0000000..fd1abcb
--- /dev/null
+++ b/src/dev/services/tb-community-complaint.service.js
@@ -0,0 +1,85 @@
+import {BaseService} from "../core/base/base.service";
+import {CommonUtil} from "../core/utils/common.util";
+
+export class TbCommunityComplaintService extends BaseService {
+
+ findTbCommunityComplaintList(tbCommunityComplaint) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitycomplaint/findList`,
+ data: tbCommunityComplaint,
+ orderBy: 'display_order asc'
+ });
+ }
+
+ saveTbCommunityComplaint(tbCommunityComplaint) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitycomplaint/save`,
+ data: tbCommunityComplaint
+ });
+ }
+
+ updateTbCommunityComplaint(tbCommunityComplaint) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitycomplaint/update`,
+ data: tbCommunityComplaint
+ });
+ }
+
+ deleteTbCommunityComplaintByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitycomplaint/deleteByIds`,
+ data: {ids: ids}
+ });
+ }
+
+ /**
+ * 举报留言
+ */
+ complaintAdd(item, type) {
+ const _self = this;
+
+ let data = {
+ message: '',
+ title: '',
+ };
+ if (type == 0) {
+ data.message = '确定举报该动态吗?';
+ data.title = '举报动态';
+ } else if (type == 1) {
+ data.message = '确定举报该留言吗?';
+ data.title = '举报留言';
+ } else if (type == 2) {
+ data.message = '确定举报该评价吗?';
+ data.title = '举报评价';
+ } else if (type == 3) {
+ data.message = '确定举报该店铺吗?';
+ data.title = '举报店铺';
+ }
+
+ CommonUtil.alert({
+ header: '提示!',
+ message: data.message,
+ buttons: [
+ {
+ text: '取消',
+ role: 'cancel',
+ handler: (blah) => {
+ }
+ },
+ {
+ text: '确定',
+ handler: () => {
+ _self.router.navigate(['/community-complaint-add'], {
+ queryParams: {
+ title: data.title,
+ type: type,
+ fkId: item.id,
+ toUserId: item.userId,
+ }
+ });
+ }
+ }
+ ]
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-consumption.service.js b/src/dev/services/tb-community-consumption.service.js
new file mode 100644
index 0000000..22c605b
--- /dev/null
+++ b/src/dev/services/tb-community-consumption.service.js
@@ -0,0 +1,74 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbCommunityConsumptionService extends BaseService {
+
+ findTbCommunityConsumptionList(tbCommunityConsumption) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/findList`,
+ data: tbCommunityConsumption,
+ });
+ }
+
+ findTop3List(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/findTableTopList?pageNum=1&pageSize=3`,
+ data: params.data,
+ });
+ }
+
+ findTableTopList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/findTableTopList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ });
+ }
+
+ findTableTbCommunityConsumptionList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ });
+ }
+
+ findTbCommunityConsumption(tbCommunityConsumption) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/findOne`,
+ data: tbCommunityConsumption,
+ });
+ }
+
+ findTbCommunityConsumptionById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/findById`,
+ data: {id: id},
+ });
+ }
+
+ isConsumption(data) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/isConsumption`,
+ data: data,
+ });
+ }
+
+ saveTbCommunityConsumption(tbCommunityConsumption) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/save`,
+ data: tbCommunityConsumption
+ });
+ }
+
+ updateTbCommunityConsumption(tbCommunityConsumption) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/update`,
+ data: tbCommunityConsumption
+ });
+ }
+
+ deleteTbCommunityConsumptionById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityconsumption/deleteById`,
+ data: {id: id}
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-dynamic-comment.service.js b/src/dev/services/tb-community-dynamic-comment.service.js
new file mode 100644
index 0000000..1d54b28
--- /dev/null
+++ b/src/dev/services/tb-community-dynamic-comment.service.js
@@ -0,0 +1,62 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbCommunityDynamicCommentService extends BaseService {
+
+ findTree(tbCommunityDynamicComment) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamiccomment/findTree`,
+ data: tbCommunityDynamicComment
+ });
+ }
+
+ findTbCommunityDynamicCommentList(tbCommunityDynamicComment) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamiccomment/findList`,
+ data: tbCommunityDynamicComment
+ });
+ }
+
+ findTableTbCommunityDynamicCommentList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamiccomment/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ });
+ }
+
+ findReplyTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamiccomment/findReplyTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ });
+ }
+
+ findTbCommunityDynamicCommentById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamiccomment/findTbCommunityDynamicCommentById`,
+ data: {id: id}
+ });
+ }
+
+ saveTbCommunityDynamicComment(tbCommunityDynamicComment) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamiccomment/save`,
+ data: tbCommunityDynamicComment
+ });
+ }
+
+ updateTbCommunityDynamicComment(tbCommunityDynamicComment) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamiccomment/update`,
+ data: tbCommunityDynamicComment
+ });
+ }
+
+ batchDeleteTbCommunityDynamicCommentByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamiccomment/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-dynamic-readed.service.js b/src/dev/services/tb-community-dynamic-readed.service.js
new file mode 100644
index 0000000..2835970
--- /dev/null
+++ b/src/dev/services/tb-community-dynamic-readed.service.js
@@ -0,0 +1,40 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbCommunityDynamicReadedService extends BaseService {
+
+ findTbCommunityDynamicReadedList(tbCommunityDynamicReaded) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamicreaded/findList`,
+ data: tbCommunityDynamicReaded,
+ orderBy: 'display_order asc'
+ });
+ }
+
+ findUnreadCount(tbCommunityDynamicReaded) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamicreaded/findUnreadCount`,
+ data: tbCommunityDynamicReaded,
+ });
+ }
+
+ saveTbCommunityDynamicReaded(tbCommunityDynamicReaded) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamicreaded/saveTbCommunityDynamicReaded`,
+ data: tbCommunityDynamicReaded
+ });
+ }
+
+ updateTbCommunityDynamicReaded(tbCommunityDynamicReaded) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamicreaded/update`,
+ data: tbCommunityDynamicReaded
+ });
+ }
+
+ deleteTbCommunityDynamicReadedByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamicreaded/deleteByIds`,
+ data: {ids: ids}
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-dynamic-type.service.js b/src/dev/services/tb-community-dynamic-type.service.js
new file mode 100644
index 0000000..fe035c5
--- /dev/null
+++ b/src/dev/services/tb-community-dynamic-type.service.js
@@ -0,0 +1,58 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbCommunityDynamicTypeService extends BaseService {
+
+ /**
+ * 查找动态分类,并包含每个分类最近5条动态
+ */
+ findTbCommunityDynamicTypeListContainLatestDynamic(tbCommunityDynamicType) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamictype/findTbCommunityDynamicTypeListContainLatestDynamic`,
+ data: tbCommunityDynamicType
+ });
+ }
+
+ findTbCommunityDynamicTypeList(tbCommunityDynamicType) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamictype/findList`,
+ data: tbCommunityDynamicType
+ });
+ }
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamictype/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ });
+ }
+
+ findTableTbCommunityDynamicTypeList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamictype/findTableTbCommunityDynamicTypeList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ saveTbCommunityDynamicType(tbCommunityDynamicType) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamictype/save`,
+ data: tbCommunityDynamicType
+ });
+ }
+
+ updateTbCommunityDynamicType(tbCommunityDynamicType) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamictype/update`,
+ data: tbCommunityDynamicType
+ });
+ }
+
+ batchDeleteTbCommunityDynamicTypeByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamictype/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-dynamic.service.js b/src/dev/services/tb-community-dynamic.service.js
new file mode 100644
index 0000000..4088fdf
--- /dev/null
+++ b/src/dev/services/tb-community-dynamic.service.js
@@ -0,0 +1,54 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbCommunityDynamicService extends BaseService {
+
+ findTbCommunityDynamicById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamic/findTbCommunityDynamicById`,
+ data: {id: id},
+ });
+ }
+
+ findTbCommunityDynamicList(tbCommunityDynamic) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamic/findList`,
+ data: tbCommunityDynamic,
+ orderBy: 'display_order asc'
+ });
+ }
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamic/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ });
+ }
+
+ findTableTbCommunityDynamicList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamic/findTableTbCommunityDynamicList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ });
+ }
+
+ saveTbCommunityDynamic(tbCommunityDynamic) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamic/save`,
+ data: tbCommunityDynamic
+ });
+ }
+
+ updateTbCommunityDynamic(tbCommunityDynamic) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamic/update`,
+ data: tbCommunityDynamic
+ });
+ }
+
+ deleteTbCommunityDynamicByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitydynamic/deleteByIds`,
+ data: {ids: ids}
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-home-config.service.js b/src/dev/services/tb-community-home-config.service.js
new file mode 100644
index 0000000..2abf138
--- /dev/null
+++ b/src/dev/services/tb-community-home-config.service.js
@@ -0,0 +1,39 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreSenderService extends BaseService {
+
+ findTbStoreSenderList(tbStoreSender) {
+ return this.httpUtil.myPost({
+ url: `tbstoresender/findList`,
+ data: tbStoreSender,
+ })
+ }
+
+ findTbStoreSenderById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstoresender/findById`,
+ data: {id: id},
+ })
+ }
+
+ saveTbStoreSender(tbStoreSender) {
+ return this.httpUtil.myPost({
+ url: `tbstoresender/save`,
+ data: tbStoreSender
+ })
+ }
+
+ updateTbStoreSender(tbStoreSender) {
+ return this.httpUtil.myPost({
+ url: `tbstoresender/update`,
+ data: tbStoreSender
+ })
+ }
+
+ deleteTbStoreSenderById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstoresender/deleteById`,
+ data: {id: id}
+ })
+ }
+}
diff --git a/src/dev/services/tb-community-lottery-user.service.js b/src/dev/services/tb-community-lottery-user.service.js
new file mode 100644
index 0000000..ff7a0c5
--- /dev/null
+++ b/src/dev/services/tb-community-lottery-user.service.js
@@ -0,0 +1,60 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbCommunityLotteryUserService extends BaseService {
+
+ findTbCommunityLotteryUserList(tbCommunityLotteryUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylotteryuser/findList`,
+ data: tbCommunityLotteryUser,
+ });
+ }
+
+ findTableListCascade(param) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylotteryuser/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ });
+ }
+
+ findTbCommunityLotteryUser(tbCommunityLotteryUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylotteryuser/findOne`,
+ data: tbCommunityLotteryUser,
+ });
+ }
+
+ findTbCommunityLotteryUserById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylotteryuser/findById`,
+ data: {id: id},
+ });
+ }
+
+ statisticsMoney(data) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylotteryuser/statisticsMoney`,
+ data: data,
+ });
+ }
+
+ saveTbCommunityLotteryUser(tbCommunityLotteryUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylotteryuser/save`,
+ data: tbCommunityLotteryUser
+ });
+ }
+
+ updateTbCommunityLotteryUser(tbCommunityLotteryUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylotteryuser/update`,
+ data: tbCommunityLotteryUser
+ });
+ }
+
+ deleteTbCommunityLotteryUserById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylotteryuser/deleteById`,
+ data: {id: id}
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-lottery.service.js b/src/dev/services/tb-community-lottery.service.js
new file mode 100644
index 0000000..b66e11a
--- /dev/null
+++ b/src/dev/services/tb-community-lottery.service.js
@@ -0,0 +1,70 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbCommunityLotteryService extends BaseService {
+
+ findTbCommunityLotteryList(tbCommunityLottery) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/findList`,
+ data: tbCommunityLottery,
+ });
+ }
+
+ findPreviousTableTbCommunityLotteryList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/findPreviousTableTbCommunityLotteryList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ });
+ }
+
+ findNextTbCommunityLottery(tbCommunityLottery) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/findNextTbCommunityLottery`,
+ data: tbCommunityLottery,
+ });
+ }
+
+ findTbCommunityLotteryById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/findById`,
+ data: {id: id},
+ });
+ }
+
+ findTbCommunityLotteryByWinningUser(tbCommunityLottery) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/findTbCommunityLotteryByWinningUser`,
+ data: tbCommunityLottery,
+ });
+ }
+
+ /**
+ * 查找我的中奖纪录
+ */
+ findTableTbCommunityLotteryListByMyWinning(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/findTableTbCommunityLotteryListByMyWinning?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ });
+ }
+
+ saveTbCommunityLottery(tbCommunityLottery) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/save`,
+ data: tbCommunityLottery
+ });
+ }
+
+ updateTbCommunityLottery(tbCommunityLottery) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/update`,
+ data: tbCommunityLottery
+ });
+ }
+
+ deleteTbCommunityLotteryById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunitylottery/deleteById`,
+ data: {id: id}
+ });
+ }
+}
diff --git a/src/dev/services/tb-community-user-type.service.js b/src/dev/services/tb-community-user-type.service.js
new file mode 100644
index 0000000..4bc0ad3
--- /dev/null
+++ b/src/dev/services/tb-community-user-type.service.js
@@ -0,0 +1,41 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbCommunityUserTypeService extends BaseService {
+
+ findTableTbCommunityUserTypeList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityusertype/findTableTbCommunityUserTypeList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbCommunityUserTypeList(tbCommunityUserType) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityusertype/findList`,
+ data: tbCommunityUserType
+ })
+ }
+
+ saveTbCommunityUserType(tbCommunityUserType) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityusertype/save`,
+ data: tbCommunityUserType
+ })
+ }
+
+ updateTbCommunityUserType(tbCommunityUserType) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityusertype/update`,
+ data: tbCommunityUserType
+ })
+ }
+
+ batchDeleteTbCommunityUserTypeByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityusertype/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-community-user.service.js b/src/dev/services/tb-community-user.service.js
new file mode 100644
index 0000000..3beb982
--- /dev/null
+++ b/src/dev/services/tb-community-user.service.js
@@ -0,0 +1,112 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbCommunityUserService extends BaseService {
+
+
+ findTbCommunityUserById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/findTbCommunityUserById`,
+ data: {id: id},
+ })
+ }
+
+ findTbCommunityUserList(tbCommunityUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/findList`,
+ data: tbCommunityUser,
+ orderBy: 'display_order asc'
+ })
+ }
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ })
+ }
+
+ findTableTbCommunityUserList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/findTableTbCommunityUserList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ })
+ }
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ })
+ }
+
+ isCanAssociation(tbCommunityUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/isCanAssociation`,
+ data: tbCommunityUser
+ });
+ }
+
+ /**
+ * 查找业务员跟进的客户列表
+ * @param params
+ * @returns {*}
+ */
+ findTableTbCommunityUserListBySalesman(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/findTableTbCommunityUserListBySalesman?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ })
+ }
+
+ saveTbCommunityUser(tbCommunityUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/save`,
+ data: tbCommunityUser
+ })
+ }
+
+ updateTbCommunityUser(tbCommunityUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/update`,
+ data: tbCommunityUser
+ })
+ }
+
+ deleteTbCommunityUserByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/deleteByIds`,
+ data: {ids: ids}
+ })
+ }
+
+ /**
+ * 设置默认登录的商城
+ * @param tbCommunityUser
+ */
+ setDefaultTbCommunityUser(tbCommunityUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/setDefaultTbCommunityUser`,
+ data: tbCommunityUser
+ })
+ }
+
+ /**
+ * 校验扫码结果是否正确
+ */
+ verifyQRCode(qrCode) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/verifyQRCode`,
+ data: {qrCode: qrCode}
+ })
+ }
+
+ /**
+ * 访问该商城,并且将状态切换到商城
+ */
+ visitTbCommunity(tbCommunityUser) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityuser/visitTbCommunity`,
+ data: tbCommunityUser
+ })
+ }
+}
diff --git a/src/dev/services/tb-community.service.js b/src/dev/services/tb-community.service.js
new file mode 100644
index 0000000..0699258
--- /dev/null
+++ b/src/dev/services/tb-community.service.js
@@ -0,0 +1,66 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbCommunityService extends BaseService {
+
+ findTbCommunityList(tbCommunity) {
+ return this.httpUtil.myPost({
+ url: `tbcommunity/findList`,
+ data: tbCommunity,
+ orderBy: 'display_order asc'
+ })
+ }
+
+ findTbCommunityById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunity/findById`,
+ data: {id: id},
+ })
+ }
+
+ findTOne(tbCommunity) {
+ return this.httpUtil.myPost({
+ url: `tbcommunity/findTOne`,
+ data: tbCommunity,
+ })
+ }
+
+ saveTbCommunityAndSendMail(tbCommunity) {
+ return this.httpUtil.myPost({
+ url: `tbcommunity/saveTbCommunityAndSendMail`,
+ data: tbCommunity
+ })
+ }
+
+ /**
+ * 开通新商城
+ * @param tbCommunity
+ * @returns {*}
+ */
+ openNewTbCommunity(tbCommunity) {
+ return this.httpUtil.myPost({
+ url: `tbcommunity/openNewTbCommunity`,
+ data: tbCommunity
+ })
+ }
+
+ updateTbCommunity(tbCommunity) {
+ return this.httpUtil.myPost({
+ url: `tbcommunity/update`,
+ data: tbCommunity
+ })
+ }
+
+ deleteTbCommunityByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbcommunity/deleteByIds`,
+ data: {ids: ids}
+ })
+ }
+
+ findTableCommunityMemberList(params) {
+ return this.httpUtil.myPost({
+ url: `tbcommunity/findTableCommunityMemberList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+}
diff --git a/src/dev/services/tb-distributor-money.service.js b/src/dev/services/tb-distributor-money.service.js
new file mode 100644
index 0000000..bd09b61
--- /dev/null
+++ b/src/dev/services/tb-distributor-money.service.js
@@ -0,0 +1,54 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbDistributorMoneyService extends BaseService {
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbdistributormoney/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ });
+ }
+
+ statisticTotal(tbDistributorMoney) {
+ return this.httpUtil.myPost({
+ url: `tbdistributormoney/statisticTotal`,
+ data: tbDistributorMoney,
+ });
+ }
+
+ withdrawalToAccount(tbDistributorMoney) {
+ return this.httpUtil.myPost({
+ url: `tbdistributormoney/withdrawalToAccount`,
+ data: tbDistributorMoney,
+ });
+ }
+
+ findTbDistributorMoneyList(tbDistributorMoney) {
+ return this.httpUtil.myPost({
+ url: `tbdistributormoney/findList`,
+ data: tbDistributorMoney,
+ orderBy: 'display_order asc'
+ });
+ }
+
+ saveTbDistributorMoney(tbDistributorMoney) {
+ return this.httpUtil.myPost({
+ url: `tbdistributormoney/save`,
+ data: tbDistributorMoney
+ });
+ }
+
+ updateTbDistributorMoney(tbDistributorMoney) {
+ return this.httpUtil.myPost({
+ url: `tbdistributormoney/update`,
+ data: tbDistributorMoney
+ });
+ }
+
+ deleteTbDistributorMoneyByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbdistributormoney/deleteByIds`,
+ data: {ids: ids}
+ });
+ }
+}
diff --git a/src/dev/services/tb-distributor.service.js b/src/dev/services/tb-distributor.service.js
new file mode 100644
index 0000000..122197b
--- /dev/null
+++ b/src/dev/services/tb-distributor.service.js
@@ -0,0 +1,47 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbDistributorService extends BaseService {
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbdistributor/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ });
+ }
+
+ findTbDistributorList(tbDistributor) {
+ return this.httpUtil.myPost({
+ url: `tbdistributor/findList`,
+ data: tbDistributor,
+ orderBy: 'display_order asc'
+ });
+ }
+
+ saveTbDistributor(tbDistributor) {
+ return this.httpUtil.myPost({
+ url: `tbdistributor/save`,
+ data: tbDistributor
+ });
+ }
+
+ setInviter(data) {
+ return this.httpUtil.myPost({
+ url: `tbdistributor/setInviter`,
+ data: data
+ });
+ }
+
+ updateTbDistributor(tbDistributor) {
+ return this.httpUtil.myPost({
+ url: `tbdistributor/update`,
+ data: tbDistributor
+ });
+ }
+
+ deleteTbDistributorByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbdistributor/deleteByIds`,
+ data: {ids: ids}
+ });
+ }
+}
diff --git a/src/dev/services/tb-email-pay-code-order.service.js b/src/dev/services/tb-email-pay-code-order.service.js
new file mode 100644
index 0000000..521db05
--- /dev/null
+++ b/src/dev/services/tb-email-pay-code-order.service.js
@@ -0,0 +1,41 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbEmailPayCodeOrderService extends BaseService {
+
+ sendPayCode(tbEmailPayCodeOrder) {
+ return this.httpUtil.myPost({
+ url: `tbemailpaycodeorder/sendPayCode`,
+ data: tbEmailPayCodeOrder
+ })
+ }
+
+ findTbEmailPayCodeOrderList(tbEmailPayCodeOrder) {
+ return this.httpUtil.myPost({
+ url: `tbemailpaycodeorder/findList`,
+ data: tbEmailPayCodeOrder
+ })
+ }
+
+ saveTbEmailPayCodeOrder(tbEmailPayCodeOrder) {
+ return this.httpUtil.myPost({
+ url: `tbemailpaycodeorder/save`,
+ data: tbEmailPayCodeOrder
+ })
+ }
+
+ updateTbEmailPayCodeOrder(tbEmailPayCodeOrder) {
+ return this.httpUtil.myPost({
+ url: `tbemailpaycodeorder/update`,
+ data: tbEmailPayCodeOrder
+ })
+ }
+
+ batchDeleteTbEmailPayCodeOrderByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbemailpaycodeorder/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-faq.service.js b/src/dev/services/tb-faq.service.js
new file mode 100644
index 0000000..6355e5d
--- /dev/null
+++ b/src/dev/services/tb-faq.service.js
@@ -0,0 +1,40 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbFaqService extends BaseService {
+
+ findTbFaqList(tbFaq) {
+ return this.httpUtil.myPost({
+ url: `tbfaq/findTbFaqList`,
+ data: tbFaq,
+ orderBy: 'display_order asc'
+ });
+ }
+
+ findTbFaqDetailById(tbFaq) {
+ return this.httpUtil.myPost({
+ url: `tbfaq/findTbFaqDetailById`,
+ data: tbFaq,
+ });
+ }
+
+ saveTbFaq(tbFaq) {
+ return this.httpUtil.myPost({
+ url: `tbfaq/save`,
+ data: tbFaq
+ });
+ }
+
+ updateTbFaq(tbFaq) {
+ return this.httpUtil.myPost({
+ url: `tbfaq/update`,
+ data: tbFaq
+ });
+ }
+
+ deleteTbFaqByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbfaq/deleteByIds`,
+ data: {ids: ids}
+ });
+ }
+}
diff --git a/src/dev/services/tb-feedback.service.js b/src/dev/services/tb-feedback.service.js
new file mode 100644
index 0000000..9011e8a
--- /dev/null
+++ b/src/dev/services/tb-feedback.service.js
@@ -0,0 +1,48 @@
+import {BaseService} from "../core/base/base.service";
+
+export class TbFeedbackService extends BaseService {
+
+ findTbFeedbackTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbfeedback/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableListByCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbfeedback/findTableListByCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbFeedbackList(tbFeedback) {
+ return this.httpUtil.myPost({
+ url: `tbfeedback/findList`,
+ data: tbFeedback,
+ orderBy: 'display_order asc'
+ });
+ }
+
+ saveTbFeedback(tbFeedback) {
+ return this.httpUtil.myPost({
+ url: `tbfeedback/save`,
+ data: tbFeedback
+ });
+ }
+
+ updateTbFeedback(tbFeedback) {
+ const _self = this;
+ return this.httpUtil.myPost({
+ url: `tbfeedback/update`,
+ data: tbFeedback
+ });
+ }
+
+ deleteTbFeedbackByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbfeedback/deleteByIds`,
+ data: {ids: ids}
+ });
+ }
+}
diff --git a/src/dev/services/tb-goods-after-sale.service.js b/src/dev/services/tb-goods-after-sale.service.js
new file mode 100644
index 0000000..1384247
--- /dev/null
+++ b/src/dev/services/tb-goods-after-sale.service.js
@@ -0,0 +1,34 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsAfterSaleService extends BaseService {
+
+ findTbGoodsAfterSaleList(tbGoodsAfterSale) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsaftersale/findList`,
+ data: tbGoodsAfterSale
+ })
+ }
+
+ saveTbGoodsAfterSale(tbGoodsAfterSale) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsaftersale/save`,
+ data: tbGoodsAfterSale
+ })
+ }
+
+ updateTbGoodsAfterSale(tbGoodsAfterSale) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsaftersale/update`,
+ data: tbGoodsAfterSale
+ })
+ }
+
+ batchDeleteTbGoodsAfterSaleByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsaftersale/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-class.service.js b/src/dev/services/tb-goods-class.service.js
new file mode 100644
index 0000000..704491c
--- /dev/null
+++ b/src/dev/services/tb-goods-class.service.js
@@ -0,0 +1,50 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsClassService extends BaseService {
+
+ findTbGoodsClassList(tbGoodsClass) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsclass/findList`,
+ data: tbGoodsClass
+ })
+ }
+
+ findTbGoodsClassById(id) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsclass/findById`,
+ data: {id: id}
+ })
+ }
+
+ saveTbGoodsClass(tbGoodsClass) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsclass/save`,
+ data: tbGoodsClass
+ })
+ }
+
+ updateTbGoodsClass(tbGoodsClass) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsclass/update`,
+ data: tbGoodsClass
+ })
+ }
+
+ batchDeleteTbGoodsClassByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsclass/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ deleteTbGoodsClassByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsclass/deleteTbGoodsClassByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-color.service.js b/src/dev/services/tb-goods-color.service.js
new file mode 100644
index 0000000..51a54d2
--- /dev/null
+++ b/src/dev/services/tb-goods-color.service.js
@@ -0,0 +1,34 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsColorService extends BaseService {
+
+ findTbGoodsColorList(tbGoodsColor) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscolor/findList`,
+ data: tbGoodsColor
+ })
+ }
+
+ saveTbGoodsColor(tbGoodsColor) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscolor/save`,
+ data: tbGoodsColor
+ })
+ }
+
+ updateTbGoodsColor(tbGoodsColor) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscolor/update`,
+ data: tbGoodsColor
+ })
+ }
+
+ batchDeleteTbGoodsColorByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscolor/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-comment.service.js b/src/dev/services/tb-goods-comment.service.js
new file mode 100644
index 0000000..5f24263
--- /dev/null
+++ b/src/dev/services/tb-goods-comment.service.js
@@ -0,0 +1,76 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsCommentService extends BaseService {
+
+ findTree(tbGoodsComment) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/findTree`,
+ data: tbGoodsComment
+ })
+ }
+
+ findTbGoodsCommentList(tbGoodsComment) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/findList`,
+ data: tbGoodsComment
+ })
+ }
+
+ findTableTbGoodsCommentList(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findReplyTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/findReplyTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ })
+ }
+
+ findTbGoodsComment(tbGoodsComment) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/findTbGoodsComment`,
+ data: tbGoodsComment
+ })
+ }
+
+ saveTbGoodsComment(tbGoodsComment) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/save`,
+ data: tbGoodsComment
+ })
+ }
+
+ batchSaveTbGoodsComment(tbGoodsCommentList) {
+ return this.httpUtil.myPostJson({
+ url: `tbgoodscomment/batchSaveTbGoodsCommentList`,
+ data: tbGoodsCommentList
+ })
+ }
+
+ updateTbGoodsComment(tbGoodsComment) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/update`,
+ data: tbGoodsComment
+ })
+ }
+
+ batchDeleteTbGoodsCommentByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ addOrDelTbGoodsCommentLike(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoodscomment/addOrDelTbGoodsCommentLike`,
+ data: params
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-detail-ad-template.service.js b/src/dev/services/tb-goods-detail-ad-template.service.js
new file mode 100644
index 0000000..0e504a9
--- /dev/null
+++ b/src/dev/services/tb-goods-detail-ad-template.service.js
@@ -0,0 +1,62 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsDetailAdTemplateService extends BaseService {
+
+ findTableTbGoodsListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailadtemplate/findTableTbGoodsListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbGoodsDetailAdTemplateList(tbGoodsDetailAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailadtemplate/findList`,
+ data: tbGoodsDetailAdTemplate
+ })
+ }
+
+ findTransferTbGoodsDetailAdTemplateList(tbGoodsDetailAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailadtemplate/findTransferTbGoodsDetailAdTemplateList`,
+ data: tbGoodsDetailAdTemplate
+ })
+ }
+
+ saveTbGoodsDetailAdTemplate(tbGoodsDetailAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailadtemplate/save`,
+ data: tbGoodsDetailAdTemplate
+ })
+ }
+
+ batchSaveAssignedTbGoodsDetailAdTemplates(tbGoodsDetailAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailadtemplate/batchSaveAssignedTbGoodsDetailAdTemplates`,
+ data: tbGoodsDetailAdTemplate
+ })
+ }
+
+ updateTbGoodsDetailAdTemplate(tbGoodsDetailAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailadtemplate/update`,
+ data: tbGoodsDetailAdTemplate
+ })
+ }
+
+ batchDeleteTbGoodsDetailAdTemplateByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailadtemplate/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ batchDelAssignedTbGoodsDetailAdTemplates(goodsIds) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailadtemplate/batchDelAssignedTbGoodsDetailAdTemplates`,
+ data: {goodsIds: goodsIds}
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-detail-extend.service.js b/src/dev/services/tb-goods-detail-extend.service.js
new file mode 100644
index 0000000..c8ca735
--- /dev/null
+++ b/src/dev/services/tb-goods-detail-extend.service.js
@@ -0,0 +1,62 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsDetailExtendService extends BaseService {
+
+ findTableTbGoodsListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailextend/findTableTbGoodsListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbGoodsDetailExtendList(tbGoodsDetailExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailextend/findList`,
+ data: tbGoodsDetailExtend
+ })
+ }
+
+ findTransferTbGoodsDetailExtendList(tbGoodsDetailExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailextend/findTransferTbGoodsDetailExtendList`,
+ data: tbGoodsDetailExtend
+ })
+ }
+
+ saveTbGoodsDetailExtend(tbGoodsDetailExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailextend/save`,
+ data: tbGoodsDetailExtend
+ })
+ }
+
+ batchSaveAssignedTbGoodsDetailExtends(tbGoodsDetailExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailextend/batchSaveAssignedTbGoodsDetailExtends`,
+ data: tbGoodsDetailExtend
+ })
+ }
+
+ updateTbGoodsDetailExtend(tbGoodsDetailExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailextend/update`,
+ data: tbGoodsDetailExtend
+ })
+ }
+
+ batchDeleteTbGoodsDetailExtendByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailextend/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ batchDelAssignedTbGoodsDetailExtends(goodsIds) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailextend/batchDelAssignedTbGoodsDetailExtends`,
+ data: {goodsIds: goodsIds}
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-detail-goods-recommend-template.service.js b/src/dev/services/tb-goods-detail-goods-recommend-template.service.js
new file mode 100644
index 0000000..a585e7e
--- /dev/null
+++ b/src/dev/services/tb-goods-detail-goods-recommend-template.service.js
@@ -0,0 +1,69 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsDetailGoodsRecommendTemplateService extends BaseService {
+
+ findTableTbGoodsListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/findTableTbGoodsListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbGoodsDetailGoodsRecommendTemplateList(tbGoodsDetailGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/findList`,
+ data: tbGoodsDetailGoodsRecommendTemplate
+ })
+ }
+
+ findTransferTbGoodsDetailGoodsRecommendTemplateList(tbGoodsDetailGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/findTransferTbGoodsDetailGoodsRecommendTemplateList`,
+ data: tbGoodsDetailGoodsRecommendTemplate
+ })
+ }
+
+ findGoodsListByGoodsDetailGoodsRecommendTemplateId(tbGoodsDetailGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/findGoodsListByGoodsDetailGoodsRecommendTemplateId`,
+ data: tbGoodsDetailGoodsRecommendTemplate
+ })
+ }
+
+ saveTbGoodsDetailGoodsRecommendTemplate(tbGoodsDetailGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/save`,
+ data: tbGoodsDetailGoodsRecommendTemplate
+ })
+ }
+
+ batchSaveAssignedTbGoodsDetailGoodsRecommendTemplates(tbGoodsDetailGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/batchSaveAssignedTbGoodsDetailGoodsRecommendTemplates`,
+ data: tbGoodsDetailGoodsRecommendTemplate
+ })
+ }
+
+ updateTbGoodsDetailGoodsRecommendTemplate(tbGoodsDetailGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/update`,
+ data: tbGoodsDetailGoodsRecommendTemplate
+ })
+ }
+
+ batchDeleteTbGoodsDetailGoodsRecommendTemplateByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ batchDelAssignedTbGoodsDetailGoodsRecommendTemplates(goodsIds) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsdetailgoodsrecommendtemplate/batchDelAssignedTbGoodsDetailGoodsRecommendTemplates`,
+ data: {goodsIds: goodsIds}
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-recommend.service.js b/src/dev/services/tb-goods-recommend.service.js
new file mode 100644
index 0000000..3b38d64
--- /dev/null
+++ b/src/dev/services/tb-goods-recommend.service.js
@@ -0,0 +1,46 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsRecommendService extends BaseService {
+
+ findTbGoodsRecommendList(tbGoodsRecommend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsrecommend/findList`,
+ data: tbGoodsRecommend,
+ })
+ }
+
+ findTbGoodsRecommendListCascade(tbGoodsRecommend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsrecommend/findTbGoodsRecommendListCascade`,
+ data: tbGoodsRecommend,
+ })
+ }
+
+ findTbGoodsRecommendById(id) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsrecommend/findById`,
+ data: {id: id},
+ })
+ }
+
+ saveTbGoodsRecommend(tbGoodsRecommend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsrecommend/save`,
+ data: tbGoodsRecommend
+ })
+ }
+
+ updateTbGoodsRecommend(tbGoodsRecommend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsrecommend/update`,
+ data: tbGoodsRecommend
+ })
+ }
+
+ deleteTbGoodsRecommendById(id) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsrecommend/deleteById`,
+ data: {id: id}
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-specification-color.service.js b/src/dev/services/tb-goods-specification-color.service.js
new file mode 100644
index 0000000..ca0727b
--- /dev/null
+++ b/src/dev/services/tb-goods-specification-color.service.js
@@ -0,0 +1,48 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsSpecificationColorService extends BaseService {
+
+ findTableListCascade(tbGoodsSpecificationColor) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsspecificationcolor/findTableListCascade?pageNum=1&pageSize=999999`,
+ data: tbGoodsSpecificationColor
+ })
+ }
+
+ findTbGoodsSpecificationColorList(tbGoodsSpecificationColor) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsspecificationcolor/findList`,
+ data: tbGoodsSpecificationColor
+ })
+ }
+
+ findTbGoodsSpecificationColorCount(tbGoodsSpecificationColor) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsspecificationcolor/findCount`,
+ data: tbGoodsSpecificationColor
+ })
+ }
+
+ saveTbGoodsSpecificationColor(tbGoodsSpecificationColor) {
+ return this.httpUtil.myPostJson({
+ url: `tbgoodsspecificationcolor/saveTbGoodsSpecificationColor`,
+ data: tbGoodsSpecificationColor
+ })
+ }
+
+ updateTbGoodsSpecificationColor(tbGoodsSpecificationColor) {
+ return this.httpUtil.myPostJson({
+ url: `tbgoodsspecificationcolor/updateTbGoodsSpecificationColor`,
+ data: tbGoodsSpecificationColor
+ })
+ }
+
+ batchDeleteTbGoodsSpecificationColorByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsspecificationcolor/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-specification.service.js b/src/dev/services/tb-goods-specification.service.js
new file mode 100644
index 0000000..a16788e
--- /dev/null
+++ b/src/dev/services/tb-goods-specification.service.js
@@ -0,0 +1,41 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsSpecificationService extends BaseService {
+
+ findListCascade(tbGoodsSpecification) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsspecification/findTableListCascade?pageNum=1&pageSize=9999`,
+ data: tbGoodsSpecification
+ })
+ }
+
+ findTbGoodsSpecificationList(tbGoodsSpecification) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsspecification/findList`,
+ data: tbGoodsSpecification
+ })
+ }
+
+ saveTbGoodsSpecification(tbGoodsSpecification) {
+ return this.httpUtil.myPostJson({
+ url: `tbgoodsspecification/saveTbGoodsSpecification`,
+ data: tbGoodsSpecification
+ })
+ }
+
+ updateTbGoodsSpecification(tbGoodsSpecification) {
+ return this.httpUtil.myPostJson({
+ url: `tbgoodsspecification/updateTbGoodsSpecification`,
+ data: tbGoodsSpecification
+ })
+ }
+
+ batchDeleteTbGoodsSpecificationByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodsspecification/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods-title-extend.service.js b/src/dev/services/tb-goods-title-extend.service.js
new file mode 100644
index 0000000..728858d
--- /dev/null
+++ b/src/dev/services/tb-goods-title-extend.service.js
@@ -0,0 +1,62 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsTitleExtendService extends BaseService {
+
+ findTableTbGoodsListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoodstitleextend/findTableTbGoodsListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbGoodsTitleExtendList(tbGoodsTitleExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodstitleextend/findList`,
+ data: tbGoodsTitleExtend
+ })
+ }
+
+ findTransferTbGoodsTitleExtendList(tbGoodsTitleExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodstitleextend/findTransferTbGoodsTitleExtendList`,
+ data: tbGoodsTitleExtend
+ })
+ }
+
+ saveTbGoodsTitleExtend(tbGoodsTitleExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodstitleextend/save`,
+ data: tbGoodsTitleExtend
+ })
+ }
+
+ batchSaveAssignedTbGoodsTitleExtends(tbGoodsTitleExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodstitleextend/batchSaveAssignedTbGoodsTitleExtends`,
+ data: tbGoodsTitleExtend
+ })
+ }
+
+ updateTbGoodsTitleExtend(tbGoodsTitleExtend) {
+ return this.httpUtil.myPost({
+ url: `tbgoodstitleextend/update`,
+ data: tbGoodsTitleExtend
+ })
+ }
+
+ batchDeleteTbGoodsTitleExtendByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoodstitleextend/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ batchDelAssignedTbGoodsTitleExtends(goodsIds) {
+ return this.httpUtil.myPost({
+ url: `tbgoodstitleextend/batchDelAssignedTbGoodsTitleExtends`,
+ data: {goodsIds: goodsIds}
+ })
+ }
+}
diff --git a/src/dev/services/tb-goods.service.js b/src/dev/services/tb-goods.service.js
new file mode 100644
index 0000000..a561011
--- /dev/null
+++ b/src/dev/services/tb-goods.service.js
@@ -0,0 +1,92 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbGoodsService extends BaseService {
+
+ findList(tbGoods) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/findList`,
+ data: tbGoods
+ })
+ }
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ isOptimizeData: params.isOptimizeData
+ })
+ }
+
+ findTableListByStore(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/findTableListByStore?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ isOptimizeData: params.isOptimizeData
+ })
+ }
+
+ findTableListByConsumer(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/findTableListByConsumer?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableListByLucene(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/findTableListByLucene?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findGoodsDetail(id) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/findGoodsDetail`,
+ data: {id: id}
+ })
+ }
+
+ findGoodsById(id) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/findById`,
+ data: {id: id}
+ })
+ }
+
+ isValidGoods(tbGoods) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/isValidGoods`,
+ data: tbGoods
+ })
+ }
+
+ saveTbGoods(tbGoods) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/save`,
+ data: tbGoods
+ })
+ }
+
+ updateTbGoods(tbGoods) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/update`,
+ data: tbGoods
+ })
+ }
+
+ batchDeleteTbGoodsByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbgoods/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-logistics-company.service.js b/src/dev/services/tb-logistics-company.service.js
new file mode 100644
index 0000000..840c3b4
--- /dev/null
+++ b/src/dev/services/tb-logistics-company.service.js
@@ -0,0 +1,41 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbLogisticsCompanyService extends BaseService {
+
+ findTbLogisticsCompanyList(tbLogisticsCompany) {
+ return this.httpUtil.myPost({
+ url: `tblogisticscompany/findList`,
+ data: tbLogisticsCompany
+ })
+ }
+
+ findTableTbLogisticsCompanyList(params) {
+ return this.httpUtil.myPost({
+ url: `tblogisticscompany/findTableList?${params.pagination.appendToUrl(null, 20)}`,
+ data: params.data
+ })
+ }
+
+ saveTbLogisticsCompany(tbLogisticsCompany) {
+ return this.httpUtil.myPost({
+ url: `tblogisticscompany/save`,
+ data: tbLogisticsCompany
+ })
+ }
+
+ updateTbLogisticsCompany(tbLogisticsCompany) {
+ return this.httpUtil.myPost({
+ url: `tblogisticscompany/update`,
+ data: tbLogisticsCompany
+ })
+ }
+
+ batchDeleteTbLogisticsCompanyByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tblogisticscompany/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-order-coupon.service.js b/src/dev/services/tb-order-coupon.service.js
new file mode 100644
index 0000000..f5a0c8a
--- /dev/null
+++ b/src/dev/services/tb-order-coupon.service.js
@@ -0,0 +1,40 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbOrderCouponService extends BaseService {
+
+ findTableTbOrderCouponList(params) {
+ return this.httpUtil.myPost({
+ url: `tbordercoupon/findTableTbOrderCouponList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbOrderCouponList(tbOrderCoupon) {
+ return this.httpUtil.myPost({
+ url: `tbordercoupon/findList`,
+ data: tbOrderCoupon,
+ orderBy: 'display_order asc'
+ })
+ }
+
+ saveTbOrderCoupon(tbOrderCoupon) {
+ return this.httpUtil.myPost({
+ url: `tbordercoupon/saveTbOrderCoupon`,
+ data: tbOrderCoupon
+ })
+ }
+
+ updateTbOrderCoupon(tbOrderCoupon) {
+ return this.httpUtil.myPost({
+ url: `tbordercoupon/update`,
+ data: tbOrderCoupon
+ })
+ }
+
+ deleteTbOrderCouponByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbordercoupon/deleteByIds`,
+ data: {ids: ids}
+ })
+ }
+}
diff --git a/src/dev/services/tb-order-goods-after-sale.service.js b/src/dev/services/tb-order-goods-after-sale.service.js
new file mode 100644
index 0000000..7bc3cf3
--- /dev/null
+++ b/src/dev/services/tb-order-goods-after-sale.service.js
@@ -0,0 +1,41 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbOrderGoodsAfterSaleService extends BaseService {
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbordergoodsaftersale/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ })
+ }
+
+ findTbOrderGoodsAfterSaleById(id) {
+ return this.httpUtil.myPost({
+ url: `tbordergoodsaftersale/findById`,
+ data: {id: id}
+ })
+ }
+
+ saveTbOrderGoodsAfterSale(tbOrderGoodsAfterSale) {
+ return this.httpUtil.myPost({
+ url: `tbordergoodsaftersale/saveTbOrderGoodsAfterSale`,
+ data: tbOrderGoodsAfterSale
+ })
+ }
+
+ updateTbOrderGoodsAfterSale(tbOrderGoodsAfterSale) {
+ return this.httpUtil.myPost({
+ url: `tbordergoodsaftersale/updateTbOrderGoodsAfterSale`,
+ data: tbOrderGoodsAfterSale
+ })
+ }
+
+ batchDeleteTbOrderGoodsAfterSaleByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbordergoodsaftersale/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-order-goods.service.js b/src/dev/services/tb-order-goods.service.js
new file mode 100644
index 0000000..50dcf2a
--- /dev/null
+++ b/src/dev/services/tb-order-goods.service.js
@@ -0,0 +1,41 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbOrderGoodsService extends BaseService {
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbordergoods/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ })
+ }
+
+ findTbOrderGoodsById(id) {
+ return this.httpUtil.myPost({
+ url: `tbordergoods/findById`,
+ data: {id: id}
+ })
+ }
+
+ saveTbOrderGoods(tbOrderGoods) {
+ return this.httpUtil.myPost({
+ url: `tbordergoods/save`,
+ data: tbOrderGoods
+ })
+ }
+
+ updateTbOrderGoods(tbOrderGoods) {
+ return this.httpUtil.myPost({
+ url: `tbordergoods/update`,
+ data: tbOrderGoods
+ })
+ }
+
+ batchDeleteTbOrderGoodsByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbordergoods/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-order-logistics.service.js b/src/dev/services/tb-order-logistics.service.js
new file mode 100644
index 0000000..e00b3e7
--- /dev/null
+++ b/src/dev/services/tb-order-logistics.service.js
@@ -0,0 +1,41 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbLogisticsTracesService extends BaseService {
+
+ findTbLogisticsTracesList(tbLogisticsTraces) {
+ return this.httpUtil.myPost({
+ url: `tblogisticstraces/findList`,
+ data: tbLogisticsTraces
+ })
+ }
+
+ findTbLogisticsTracesById(id) {
+ return this.httpUtil.myPost({
+ url: `tblogisticstraces/findById`,
+ data: {id: id}
+ })
+ }
+
+ saveTbLogisticsTraces(tbLogisticsTraces) {
+ return this.httpUtil.myPost({
+ url: `tblogisticstraces/save`,
+ data: tbLogisticsTraces
+ })
+ }
+
+ updateTbLogisticsTraces(tbLogisticsTraces) {
+ return this.httpUtil.myPost({
+ url: `tblogisticstraces/update`,
+ data: tbLogisticsTraces
+ })
+ }
+
+ batchDeleteTbLogisticsTracesByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tblogisticstraces/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-order.service.js b/src/dev/services/tb-order.service.js
new file mode 100644
index 0000000..fa1deb1
--- /dev/null
+++ b/src/dev/services/tb-order.service.js
@@ -0,0 +1,174 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbOrderService extends BaseService {
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tborder/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableListCascadeByGoodsAfterSaleApply(params) {
+ return this.httpUtil.myPost({
+ url: `tborder/findTableListCascadeByGoodsAfterSaleApply?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbOrderList(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/findListCascade`,
+ data: tbOrder
+ })
+ }
+
+ findTbOrderById(id) {
+ return this.httpUtil.myPost({
+ url: `tborder/findById`,
+ data: {id: id}
+ })
+ }
+
+ findCount(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/findCount`,
+ data: tbOrder
+ })
+ }
+
+ prepareTbOrder(tbOrder) {
+ return this.httpUtil.myPostJson({
+ url: `tborder/prepareTbOrder`,
+ data: tbOrder
+ })
+ }
+
+ saveTbOrder(tbOrder) {
+ return this.httpUtil.myPostJson({
+ url: `tborder/saveTbOrder`,
+ data: tbOrder
+ })
+ }
+
+ updateTbOrder(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/update`,
+ data: tbOrder
+ })
+ }
+
+ /**
+ * 更新订单是否可以操作
+ * @param tbOrder
+ */
+ static updateEnableOperation(tbOrder) {
+ let enable = false;
+ if (tbOrder.saleMode === "0") { // 物流订单
+ if (tbOrder.status === "0") {
+ enable = true;
+ } else if (tbOrder.status === "1" && tbOrder.tbStore != null && tbOrder.tbStore.isSupportRefund) {
+ enable = true;
+ } else if (",3,4,".indexOf(tbOrder.status) !== -1 && !tbOrder.isComment) {
+ enable = true;
+ }
+ } else if (tbOrder.saleMode === "1") { // 消费券订单
+ if (tbOrder.status === "0") {
+ enable = true;
+ } else if (tbOrder.status === "1" && tbOrder.tbStore != null && tbOrder.tbStore.isSupportRefund) {
+ enable = true;
+ } else if (tbOrder.status === "4" && !tbOrder.isComment) {
+ enable = true;
+ }
+ } else if (tbOrder.saleMode === "2") { // 餐饮订单
+ if (tbOrder.status === "0") {
+ enable = true;
+ } else if (tbOrder.status === "1" && tbOrder.tbStore != null && tbOrder.tbStore.isSupportRefund) {
+ enable = true;
+ } else if (tbOrder.status === "4" && !tbOrder.isComment) {
+ enable = true;
+ }
+ }
+ tbOrder.enableOperation = enable;
+ }
+
+ batchDeleteTbOrderByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tborder/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ /**
+ * 更新订单状态
+ * @param tbOrder
+ */
+ updateStatus(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/updateStatus`,
+ data: tbOrder,
+ isOptimizeData: true
+ })
+ }
+
+ /**
+ * 线下支付
+ */
+ offlinePay(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/offlinePay`,
+ data: tbOrder
+ })
+ }
+
+ /**
+ * 校验消费券号是否正确
+ */
+ validConsumerVoucher(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/validConsumerVoucher`,
+ data: tbOrder
+ })
+ }
+
+ /**
+ * 添加卖家备注
+ */
+ addSellerRemark(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/addSellerRemark`,
+ data: tbOrder
+ })
+ }
+
+ /**
+ * 卖家手动执行商品订单资金回笼
+ */
+ transferMoneyToSeller(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/transferMoneyToSeller`,
+ data: tbOrder
+ })
+ }
+
+ /**
+ * 更新收货地址
+ */
+ updateShippingAddress(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/updateShippingAddress`,
+ data: tbOrder
+ })
+ }
+
+ /**
+ * 更新物流信息
+ */
+ updateLogisticsInfo(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tborder/updateLogisticsInfo`,
+ data: tbOrder
+ })
+ }
+}
diff --git a/src/dev/services/tb-seckill-goods.service.js b/src/dev/services/tb-seckill-goods.service.js
new file mode 100644
index 0000000..b402441
--- /dev/null
+++ b/src/dev/services/tb-seckill-goods.service.js
@@ -0,0 +1,77 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbSeckillGoodsService extends BaseService {
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ isOptimizeData: params.isOptimizeData
+ })
+ }
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableListByConsumer(params) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/findTableListByConsumer?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableListByStore(params) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/findTableListByStore?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbSeckillGoodsCount(tbSeckillGoods) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/findCount`,
+ data: tbSeckillGoods
+ })
+ }
+
+ seckillGoods(id) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/seckillGoods`,
+ data: {id: id}
+ })
+ }
+
+ findSeckillResult(id) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/findSeckillResult`,
+ data: {id: id}
+ })
+ }
+
+ saveTbSeckillGoods(tbSeckillGoods) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/save`,
+ data: tbSeckillGoods
+ })
+ }
+
+ updateTbSeckillGoods(tbSeckillGoods) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/update`,
+ data: tbSeckillGoods
+ })
+ }
+
+ batchDeleteTbSeckillGoodsByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbseckillgoods/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-seckill-order.service.js b/src/dev/services/tb-seckill-order.service.js
new file mode 100644
index 0000000..ebc8eb5
--- /dev/null
+++ b/src/dev/services/tb-seckill-order.service.js
@@ -0,0 +1,55 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbSeckillOrderService extends BaseService {
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbseckillorder/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbSeckillOrderList(tbSeckillOrder) {
+ return this.httpUtil.myPost({
+ url: `tbseckillorder/findListCascade`,
+ data: tbSeckillOrder
+ })
+ }
+
+ findTbSeckillOrderById(id) {
+ return this.httpUtil.myPost({
+ url: `tbseckillorder/findById`,
+ data: {id: id}
+ })
+ }
+
+ findCount(tbOrder) {
+ return this.httpUtil.myPost({
+ url: `tbseckillorder/findCount`,
+ data: tbOrder
+ })
+ }
+
+ saveTbSeckillOrder(tbSeckillOrder) {
+ return this.httpUtil.myPostJson({
+ url: `tbseckillorder/saveTbOrder`,
+ data: tbSeckillOrder
+ })
+ }
+
+ updateTbSeckillOrder(tbSeckillOrder) {
+ return this.httpUtil.myPost({
+ url: `tbseckillorder/update`,
+ data: tbSeckillOrder
+ })
+ }
+
+ batchDeleteTbSeckillOrderByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbseckillorder/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-shipping-address.service.js b/src/dev/services/tb-shipping-address.service.js
new file mode 100644
index 0000000..ff2683e
--- /dev/null
+++ b/src/dev/services/tb-shipping-address.service.js
@@ -0,0 +1,64 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbShippingAddressService extends BaseService {
+ findTbShippingAddressList (tbShippingAddress) {
+ return this.httpUtil.myPost({
+ url: `tbshippingaddress/findList`,
+ data: tbShippingAddress
+ })
+ }
+
+ findTbShippingAddressById (id) {
+ return this.httpUtil.myPost({
+ url: `tbshippingaddress/findById`,
+ data: {id: id}
+ })
+ }
+
+ saveTbShippingAddress (tbShippingAddress) {
+ return this.httpUtil.myPost({
+ url: `tbshippingaddress/save`,
+ data: tbShippingAddress
+ })
+ }
+
+ updateTbShippingAddress (tbShippingAddress) {
+ return this.httpUtil.myPost({
+ url: `tbshippingaddress/update`,
+ data: tbShippingAddress
+ })
+ }
+
+ batchDeleteTbShippingAddressByIds (ids) {
+ return this.httpUtil.myPost({
+ url: `tbshippingaddress/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ setDefaultTbShippingAddress (tbShippingAddress) {
+ return this.httpUtil.myPost({
+ url: `tbshippingaddress/setDefaultTbShippingAddress`,
+ data: {
+ id: tbShippingAddress.id,
+ userId: this.globalVariable.userInfo.id
+ }
+ })
+ }
+
+ /**
+ * 查询用户默认收货地址
+ * @returns {any}
+ */
+ findDefaultTbShippingAddress () {
+ return this.httpUtil.myPost({
+ url: `tbshippingaddress/findDefaultTbShippingAddress`,
+ data: {
+ userId: this.globalVariable.userInfo.id,
+ isDefault: true
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-shopping-cart.service.js b/src/dev/services/tb-shopping-cart.service.js
new file mode 100644
index 0000000..d2aae34
--- /dev/null
+++ b/src/dev/services/tb-shopping-cart.service.js
@@ -0,0 +1,41 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbShoppingCartService extends BaseService {
+
+ findTbShoppingCartCount(tbShoppingCart) {
+ return this.httpUtil.myPost({
+ url: `tbshoppingcart/findCount`,
+ data: tbShoppingCart
+ })
+ }
+
+ findTbShoppingCartList(tbShoppingCart) {
+ return this.httpUtil.myPost({
+ url: `tbshoppingcart/findListCascade`,
+ data: tbShoppingCart
+ })
+ }
+
+ saveTbShoppingCart(tbShoppingCart) {
+ return this.httpUtil.myPost({
+ url: `tbshoppingcart/saveTbShoppingCart`,
+ data: tbShoppingCart
+ })
+ }
+
+ updateTbShoppingCart(tbShoppingCart) {
+ return this.httpUtil.myPost({
+ url: `tbshoppingcart/update`,
+ data: tbShoppingCart
+ })
+ }
+
+ batchDeleteTbShoppingCartByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbshoppingcart/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-ad-template.service.js b/src/dev/services/tb-store-ad-template.service.js
new file mode 100644
index 0000000..9c79d40
--- /dev/null
+++ b/src/dev/services/tb-store-ad-template.service.js
@@ -0,0 +1,48 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreAdTemplateService extends BaseService {
+
+ findListCascade(tbStoreAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoreadtemplate/findListCascade`,
+ data: tbStoreAdTemplate
+ })
+ }
+
+ findTbStoreAdTemplateList(tbStoreAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoreadtemplate/findList`,
+ data: tbStoreAdTemplate
+ })
+ }
+
+ saveTbStoreAdTemplate(tbStoreAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoreadtemplate/save`,
+ data: tbStoreAdTemplate
+ })
+ }
+
+ updateAssociatedStore(tbStoreAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoreadtemplate/updateAssociatedStore`,
+ data: tbStoreAdTemplate
+ })
+ }
+
+ updateTbStoreAdTemplate(tbStoreAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoreadtemplate/update`,
+ data: tbStoreAdTemplate
+ })
+ }
+
+ batchDeleteTbStoreAdTemplateByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbstoreadtemplate/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-cash-deposit-deduction-record.service.js b/src/dev/services/tb-store-cash-deposit-deduction-record.service.js
new file mode 100644
index 0000000..c2c94b9
--- /dev/null
+++ b/src/dev/services/tb-store-cash-deposit-deduction-record.service.js
@@ -0,0 +1,53 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreCashDepositDeductionRecordService extends BaseService {
+
+ findTbStoreCashDepositDeductionRecordList(tbStoreCashDepositDeductionRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositdeductionrecord/findList`,
+ data: tbStoreCashDepositDeductionRecord
+ });
+ }
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositdeductionrecord/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ });
+ }
+
+ findTableTbStoreCashDepositDeductionRecordList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositdeductionrecord/findTableTbStoreCashDepositDeductionRecordList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ });
+ }
+
+ saveTbStoreCashDepositDeductionRecord(tbStoreCashDepositDeductionRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositdeductionrecord/save`,
+ data: tbStoreCashDepositDeductionRecord
+ });
+ }
+
+ updateTbStoreCashDepositDeductionRecord(tbStoreCashDepositDeductionRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositdeductionrecord/update`,
+ data: tbStoreCashDepositDeductionRecord
+ });
+ }
+
+ findTbStoreCashDepositDeductionRecordById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositdeductionrecord/findById`,
+ data: {id: id}
+ });
+ }
+
+ findOne(tbStoreCashDepositDeductionRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositdeductionrecord/findOne`,
+ data: tbStoreCashDepositDeductionRecord
+ });
+ }
+}
diff --git a/src/dev/services/tb-store-cash-deposit-recharge-record.service.js b/src/dev/services/tb-store-cash-deposit-recharge-record.service.js
new file mode 100644
index 0000000..40d8260
--- /dev/null
+++ b/src/dev/services/tb-store-cash-deposit-recharge-record.service.js
@@ -0,0 +1,53 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreCashDepositRechargeRecordService extends BaseService {
+
+ findTbStoreCashDepositRechargeRecordList(tbStoreCashDepositRechargeRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositrechargerecord/findList`,
+ data: tbStoreCashDepositRechargeRecord
+ })
+ }
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositrechargerecord/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableTbStoreCashDepositRechargeRecordList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositrechargerecord/findTableTbStoreCashDepositRechargeRecordList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ saveTbStoreCashDepositRechargeRecord(tbStoreCashDepositRechargeRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositrechargerecord/save`,
+ data: tbStoreCashDepositRechargeRecord
+ })
+ }
+
+ updateTbStoreCashDepositRechargeRecord(tbStoreCashDepositRechargeRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositrechargerecord/update`,
+ data: tbStoreCashDepositRechargeRecord
+ })
+ }
+
+ findTbStoreCashDepositRechargeRecordById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositrechargerecord/findById`,
+ data: {id: id}
+ })
+ }
+
+ findOne(tbStoreCashDepositRechargeRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositrechargerecord/findOne`,
+ data: tbStoreCashDepositRechargeRecord
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-cash-deposit-withdrawal-record.service.js b/src/dev/services/tb-store-cash-deposit-withdrawal-record.service.js
new file mode 100644
index 0000000..324210b
--- /dev/null
+++ b/src/dev/services/tb-store-cash-deposit-withdrawal-record.service.js
@@ -0,0 +1,60 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreCashDepositWithdrawalRecordService extends BaseService {
+
+ findTbStoreCashDepositWithdrawalRecordList(tbStoreCashDepositWithdrawalRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositwithdrawalrecord/findList`,
+ data: tbStoreCashDepositWithdrawalRecord
+ })
+ }
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositwithdrawalrecord/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableTbStoreCashDepositWithdrawalRecordList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositwithdrawalrecord/findTableTbStoreCashDepositWithdrawalRecordList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ saveTbStoreCashDepositWithdrawalRecord(tbStoreCashDepositWithdrawalRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositwithdrawalrecord/save`,
+ data: tbStoreCashDepositWithdrawalRecord
+ })
+ }
+
+ updateTbStoreCashDepositWithdrawalRecord(tbStoreCashDepositWithdrawalRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositwithdrawalrecord/update`,
+ data: tbStoreCashDepositWithdrawalRecord
+ })
+ }
+
+ findTbStoreCashDepositWithdrawalRecordById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositwithdrawalrecord/findById`,
+ data: {id: id}
+ })
+ }
+
+ findOne(tbStoreCashDepositWithdrawalRecord) {
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositwithdrawalrecord/findOne`,
+ data: tbStoreCashDepositWithdrawalRecord
+ })
+ }
+
+ withdrawalToAccount() {
+ const _self = this;
+ return this.httpUtil.myPost({
+ url: `tbstorecashdepositwithdrawalrecord/withdrawalToAccount`,
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-class.service.js b/src/dev/services/tb-store-class.service.js
new file mode 100644
index 0000000..64fe2bd
--- /dev/null
+++ b/src/dev/services/tb-store-class.service.js
@@ -0,0 +1,60 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreClassService extends BaseService {
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstoreclass/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTbStoreClassList(tbStoreClass) {
+ return this.httpUtil.myPost({
+ url: `tbstoreclass/findTbStoreClassList`,
+ data: tbStoreClass
+ })
+ }
+
+ findList(tbStoreClass) {
+ return this.httpUtil.myPost({
+ url: `tbstoreclass/findList`,
+ data: tbStoreClass
+ })
+ }
+
+ findMenu(tbStoreClass) {
+ return this.httpUtil.myPost({
+ url: `tbstoreclass/findMenu`,
+ data: tbStoreClass
+ })
+ }
+
+ findTbStoreClassTree(tbStoreClass) {
+ return this.httpUtil.myPost({
+ url: `tbstoreclass/findTree`,
+ data: tbStoreClass
+ })
+ }
+
+ saveTbStoreClass(tbStoreClass) {
+ return this.httpUtil.myPost({
+ url: `tbstoreclass/save`,
+ data: tbStoreClass
+ })
+ }
+
+ updateTbStoreClass(tbStoreClass) {
+ return this.httpUtil.myPost({
+ url: `tbstoreclass/update`,
+ data: tbStoreClass
+ })
+ }
+
+ deleteTbStoreClass(tbStoreClass) {
+ return this.httpUtil.myPost({
+ url: `tbstoreclass/deleteByIdCascade`,
+ data: {id: tbStoreClass.id}
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-coupon.service.js b/src/dev/services/tb-store-coupon.service.js
new file mode 100644
index 0000000..9ceeff3
--- /dev/null
+++ b/src/dev/services/tb-store-coupon.service.js
@@ -0,0 +1,47 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreCouponService extends BaseService {
+ findTbStoreCouponList (tbStoreCoupon) {
+ return this.httpUtil.myPost({
+ url: `tbstorecoupon/findList`,
+ data: tbStoreCoupon,
+ orderBy: 'display_order asc'
+ })
+ }
+
+ findValidTbStoreCouponList (tbStoreCoupon) {
+ return this.httpUtil.myPost({
+ url: `tbstorecoupon/findValidTbStoreCouponList`,
+ data: tbStoreCoupon,
+ orderBy: 'display_order asc'
+ })
+ }
+
+ validCouponCount (tbStoreCoupon) {
+ return this.httpUtil.myPost({
+ url: `tbstorecoupon/validCouponCount`,
+ data: tbStoreCoupon
+ })
+ }
+
+ saveTbStoreCoupon (tbStoreCoupon) {
+ return this.httpUtil.myPost({
+ url: `tbstorecoupon/save`,
+ data: tbStoreCoupon
+ })
+ }
+
+ updateTbStoreCoupon (tbStoreCoupon) {
+ return this.httpUtil.myPost({
+ url: `tbstorecoupon/update`,
+ data: tbStoreCoupon
+ })
+ }
+
+ deleteTbStoreCouponByIds (ids) {
+ return this.httpUtil.myPost({
+ url: `tbstorecoupon/deleteByIds`,
+ data: {ids: ids}
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-goods-recommend-template.service.js b/src/dev/services/tb-store-goods-recommend-template.service.js
new file mode 100644
index 0000000..a784b29
--- /dev/null
+++ b/src/dev/services/tb-store-goods-recommend-template.service.js
@@ -0,0 +1,48 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreGoodsRecommendTemplateService extends BaseService {
+
+ findListCascade(tbStoreAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoregoodsrecommendtemplate/findListCascade`,
+ data: tbStoreAdTemplate
+ })
+ }
+
+ findTbStoreGoodsRecommendTemplateList(tbStoreGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoregoodsrecommendtemplate/findList`,
+ data: tbStoreGoodsRecommendTemplate
+ })
+ }
+
+ saveTbStoreGoodsRecommendTemplate(tbStoreGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoregoodsrecommendtemplate/save`,
+ data: tbStoreGoodsRecommendTemplate
+ })
+ }
+
+ updateAssociatedStore(tbStoreAdTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoregoodsrecommendtemplate/updateAssociatedStore`,
+ data: tbStoreAdTemplate
+ })
+ }
+
+ updateTbStoreGoodsRecommendTemplate(tbStoreGoodsRecommendTemplate) {
+ return this.httpUtil.myPost({
+ url: `tbstoregoodsrecommendtemplate/update`,
+ data: tbStoreGoodsRecommendTemplate
+ })
+ }
+
+ batchDeleteTbStoreGoodsRecommendTemplateByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbstoregoodsrecommendtemplate/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-order-sequence-number.service.js b/src/dev/services/tb-store-order-sequence-number.service.js
new file mode 100644
index 0000000..1b90d30
--- /dev/null
+++ b/src/dev/services/tb-store-order-sequence-number.service.js
@@ -0,0 +1,39 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreOrderSequenceNumberService extends BaseService {
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbstoreordersequencenumber/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data,
+ })
+ }
+
+ findTbStoreOrderSequenceNumberList(tbStoreOrderSequenceNumber) {
+ return this.httpUtil.myPost({
+ url: `tbstoreordersequencenumber/findList`,
+ data: tbStoreOrderSequenceNumber,
+ })
+ }
+
+ saveTbStoreOrderSequenceNumber(tbStoreOrderSequenceNumber) {
+ return this.httpUtil.myPost({
+ url: `tbstoreordersequencenumber/save`,
+ data: tbStoreOrderSequenceNumber
+ })
+ }
+
+ updateTbStoreOrderSequenceNumber(tbStoreOrderSequenceNumber) {
+ return this.httpUtil.myPost({
+ url: `tbstoreordersequencenumber/update`,
+ data: tbStoreOrderSequenceNumber
+ })
+ }
+
+ deleteTbStoreOrderSequenceNumber(tbStoreOrderSequenceNumber) {
+ return this.httpUtil.myPost({
+ url: `tbstoreordersequencenumber/deleteById`,
+ data: {id: tbStoreOrderSequenceNumber.id}
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-present.service.js b/src/dev/services/tb-store-present.service.js
new file mode 100644
index 0000000..6446a48
--- /dev/null
+++ b/src/dev/services/tb-store-present.service.js
@@ -0,0 +1,39 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStorePresentService extends BaseService {
+
+ findTbStorePresentList(tbStorePresent) {
+ return this.httpUtil.myPost({
+ url: `tbstorepresent/findList`,
+ data: tbStorePresent,
+ })
+ }
+
+ saveTbStorePresent(tbStorePresent) {
+ return this.httpUtil.myPost({
+ url: `tbstorepresent/save`,
+ data: tbStorePresent
+ })
+ }
+
+ updateTbStorePresent(tbStorePresent) {
+ return this.httpUtil.myPost({
+ url: `tbstorepresent/update`,
+ data: tbStorePresent
+ })
+ }
+
+ deleteTbStorePresentByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbstorepresent/deleteByIds`,
+ data: {ids: ids}
+ })
+ }
+
+ deleteTbStorePresent(tbStorePresent) {
+ return this.httpUtil.myPost({
+ url: `tbstorepresent/deleteByIdCascade`,
+ data: {id: tbStorePresent.id}
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-promotion.service.js b/src/dev/services/tb-store-promotion.service.js
new file mode 100644
index 0000000..9943153
--- /dev/null
+++ b/src/dev/services/tb-store-promotion.service.js
@@ -0,0 +1,85 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStorePromotionService extends BaseService {
+
+ findTableTbStorePromotionList(tbStorePromotion) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/findTableTbStorePromotionList?pageNum=1&pageSize=9999`,
+ data: tbStorePromotion
+ })
+ }
+
+ findTbStorePromotionList(tbStorePromotion) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/findList`,
+ data: tbStorePromotion
+ })
+ }
+
+ findTbOrderGoodsPromotionItem(tbStorePromotion) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/findTbOrderGoodsPromotionItem`,
+ data: tbStorePromotion
+ })
+ }
+
+ findTbOrderPromotion(tbOrder) {
+ return this.httpUtil.myPostJson({
+ url: `tbstorepromotion/findTbOrderPromotion`,
+ data: tbOrder
+ })
+ }
+
+ findTbStorePromotionById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/findById`,
+ data: {id: id}
+ })
+ }
+
+ findTbStorePromotionByIdCascade(id) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/findTbStorePromotionByIdCascade`,
+ data: {id: id}
+ })
+ }
+
+ saveTbStorePromotion(tbStorePromotion) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/save`,
+ data: tbStorePromotion,
+ isOptimizeData: true
+ })
+ }
+
+ updateTbStorePromotion(tbStorePromotion) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/update`,
+ data: tbStorePromotion,
+ isOptimizeData: true
+ })
+ }
+
+ batchDeleteTbStorePromotionByIds(ids) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/deleteByIds`,
+ data: {
+ ids: ids
+ }
+ })
+ }
+
+ deleteTbStorePromotion(tbStorePromotion) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/deleteByIdCascade`,
+ data: {id: tbStorePromotion.id}
+ })
+ }
+
+ canEnable(tbStorePromotion) {
+ return this.httpUtil.myPost({
+ url: `tbstorepromotion/canEnable`,
+ data: tbStorePromotion
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-recommend.service.js b/src/dev/services/tb-store-recommend.service.js
new file mode 100644
index 0000000..8071059
--- /dev/null
+++ b/src/dev/services/tb-store-recommend.service.js
@@ -0,0 +1,46 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreRecommendService extends BaseService {
+
+ findTbStoreRecommendList(tbStoreRecommend) {
+ return this.httpUtil.myPost({
+ url: `tbstorerecommend/findList`,
+ data: tbStoreRecommend,
+ })
+ }
+
+ findTbStoreRecommendListCascade(tbStoreRecommend) {
+ return this.httpUtil.myPost({
+ url: `tbstorerecommend/findTbStoreRecommendListCascade`,
+ data: tbStoreRecommend,
+ })
+ }
+
+ findTbStoreRecommendById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstorerecommend/findById`,
+ data: {id: id},
+ })
+ }
+
+ saveTbStoreRecommend(tbStoreRecommend) {
+ return this.httpUtil.myPost({
+ url: `tbstorerecommend/save`,
+ data: tbStoreRecommend
+ })
+ }
+
+ updateTbStoreRecommend(tbStoreRecommend) {
+ return this.httpUtil.myPost({
+ url: `tbstorerecommend/update`,
+ data: tbStoreRecommend
+ })
+ }
+
+ deleteTbStoreRecommendById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstorerecommend/deleteById`,
+ data: {id: id}
+ })
+ }
+}
diff --git a/src/dev/services/tb-store-sender.service.js b/src/dev/services/tb-store-sender.service.js
new file mode 100644
index 0000000..5439b44
--- /dev/null
+++ b/src/dev/services/tb-store-sender.service.js
@@ -0,0 +1,46 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbCommunityHomeConfigService extends BaseService {
+
+ findTbCommunityHomeConfigList(tbCommunityHomeConfig) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityhomeconfig/findList`,
+ data: tbCommunityHomeConfig,
+ })
+ }
+
+ findTbCommunityHomeConfigByCommunityId(communityId) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityhomeconfig/findTbCommunityHomeConfigByCommunityId`,
+ data: {communityId: communityId},
+ })
+ }
+
+ findTbCommunityHomeConfigById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityhomeconfig/findById`,
+ data: {id: id},
+ })
+ }
+
+ saveTbCommunityHomeConfig(tbCommunityHomeConfig) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityhomeconfig/save`,
+ data: tbCommunityHomeConfig
+ })
+ }
+
+ updateTbCommunityHomeConfig(tbCommunityHomeConfig) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityhomeconfig/update`,
+ data: tbCommunityHomeConfig
+ })
+ }
+
+ deleteTbCommunityHomeConfigById(id) {
+ return this.httpUtil.myPost({
+ url: `tbcommunityhomeconfig/deleteById`,
+ data: {id: id}
+ })
+ }
+}
diff --git a/src/dev/services/tb-store.service.js b/src/dev/services/tb-store.service.js
new file mode 100644
index 0000000..ef680b1
--- /dev/null
+++ b/src/dev/services/tb-store.service.js
@@ -0,0 +1,74 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbStoreService extends BaseService {
+
+ findTbStoreList(tbStore) {
+ return this.httpUtil.myPost({
+ url: `tbstore/findList`,
+ data: tbStore
+ })
+ }
+
+ findTableList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstore/findTableList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableListCascade(params) {
+ return this.httpUtil.myPost({
+ url: `tbstore/findTableListCascade?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableTbStoreList(params) {
+ return this.httpUtil.myPost({
+ url: `tbstore/findTableTbStoreList?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ findTableTbStoreListByConsumer(params) {
+ return this.httpUtil.myPost({
+ url: `tbstore/findTableTbStoreListByConsumer?${params.pagination.appendToUrl()}`,
+ data: params.data
+ })
+ }
+
+ saveTbStore(tbStore) {
+ return this.httpUtil.myPost({
+ url: `tbstore/save`,
+ data: tbStore
+ })
+ }
+
+ updateTbStore(tbStore) {
+ return this.httpUtil.myPost({
+ url: `tbstore/update`,
+ data: tbStore
+ })
+ }
+
+ findTbStoreById(id) {
+ return this.httpUtil.myPost({
+ url: `tbstore/findById`,
+ data: {id: id}
+ })
+ }
+
+ findTbStoreByUserId(userId) {
+ return this.httpUtil.myPost({
+ url: `tbstore/findTbStoreByUserId`,
+ data: {userId: userId}
+ })
+ }
+
+ findOne(tbStore) {
+ return this.httpUtil.myPost({
+ url: `tbstore/findOne`,
+ data: tbStore
+ })
+ }
+}
diff --git a/src/dev/services/tb-wx-subscribe-message.service.js b/src/dev/services/tb-wx-subscribe-message.service.js
new file mode 100644
index 0000000..49a87ae
--- /dev/null
+++ b/src/dev/services/tb-wx-subscribe-message.service.js
@@ -0,0 +1,51 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbWxSubscribeMessageService extends BaseService {
+
+ findTbWxSubscribeMessageList(tbWxSubscribeMessage) {
+ return this.httpUtil.myPost({
+ url: `tbwxsubscribemessage/findList`,
+ data: tbWxSubscribeMessage,
+ })
+ }
+
+ findTbWxSubscribeMessageById(id) {
+ return this.httpUtil.myPost({
+ url: `tbwxsubscribemessage/findById`,
+ data: {id: id},
+ })
+ }
+
+ /**
+ * 获取订阅数量
+ * @param tbWxSubscribeMessage
+ * @returns {*}
+ */
+ findTbWxSubscribeMessageCount(tbWxSubscribeMessage) {
+ return this.httpUtil.myPost({
+ url: `tbwxsubscribemessage/findCount`,
+ data: tbWxSubscribeMessage,
+ })
+ }
+
+ saveTbWxSubscribeMessage(tbWxSubscribeMessage) {
+ return this.httpUtil.myPost({
+ url: `tbwxsubscribemessage/save`,
+ data: tbWxSubscribeMessage
+ })
+ }
+
+ updateTbWxSubscribeMessage(tbWxSubscribeMessage) {
+ return this.httpUtil.myPost({
+ url: `tbwxsubscribemessage/update`,
+ data: tbWxSubscribeMessage
+ })
+ }
+
+ deleteTbWxSubscribeMessageById(id) {
+ return this.httpUtil.myPost({
+ url: `tbwxsubscribemessage/deleteById`,
+ data: {id: id}
+ })
+ }
+}
diff --git a/src/dev/services/tb_email_identifying_code.service.js b/src/dev/services/tb_email_identifying_code.service.js
new file mode 100644
index 0000000..5abf029
--- /dev/null
+++ b/src/dev/services/tb_email_identifying_code.service.js
@@ -0,0 +1,28 @@
+import {BaseService} from '../core/base/base.service'
+
+export class TbEmailIdentifyingCodeService extends BaseService {
+
+ sendMailIdentifyingCode(email) {
+ return this.httpUtil.myPost({
+ url: `tbemailidentifyingcode/sendMailIdentifyingCode`,
+ data: {email: email}
+ })
+ }
+
+ sendMailIdentifyingCodeByUsername(username) {
+ return this.httpUtil.myPost({
+ url: `tbemailidentifyingcode/sendMailIdentifyingCodeByUsername`,
+ data: {username: username}
+ })
+ }
+
+ mailIdentifyingCodeCheck(email, identifyingCode) {
+ return this.httpUtil.myPost({
+ url: `tbemailidentifyingcode/mailIdentifyingCodeCheck`,
+ data: {
+ email: email,
+ identifyingCode: identifyingCode
+ }
+ })
+ }
+}
diff --git a/src/dev/services/wechat.service.js b/src/dev/services/wechat.service.js
new file mode 100644
index 0000000..6acbf50
--- /dev/null
+++ b/src/dev/services/wechat.service.js
@@ -0,0 +1,83 @@
+import {BaseService} from '../core/base/base.service'
+import globalVariable from "../core/global-variable";
+
+export class WechatService extends BaseService {
+
+ /**
+ * 通过微信小程序code获得unionid
+ * {data: "unionid"}
+ */
+ findUnionidByWeixinMiniAppCode() {
+ const _self = this;
+ return new Promise(function (resolve, reject) {
+ uni.login({
+ success: (loginResult) => { // {errMsg: "login:ok", code: "0434TeKg2bXv6H0s6YMg2017Kg24TeK-"}
+ console.log("uni.login-----------------------------------------", loginResult);
+ if (loginResult && loginResult.code) {
+ _self.httpUtil.myPost({
+ url: 'wechat/findUnionidByWeixinMiniAppCode',
+ data: {
+ code: loginResult.code
+ }
+ }).then(result => {
+ resolve(result);
+ });
+ }
+ }
+ })
+ });
+ }
+
+ /**
+ * 通过微信APP应用code获得unionid
+ * {data: "unionid"}
+ */
+ findUnionidByWeixinAppCode() {
+ const _self = this;
+ return new Promise(function (resolve, reject) {
+ uni.login({
+ provider: 'weixin',
+ success: (loginResult) => { // {errMsg: "login:ok", code: "0434TeKg2bXv6H0s6YMg2017Kg24TeK-"}
+ console.log("uni.login-----------------------------------------", loginResult);
+ /*
+ loginResult =
+ {
+ "authResult": {
+ "access_token": "39_4qY3FkHNgBi3I4wcSW8oa3J0qgW2lwDXyDXWwxR1wzE72P-hwRuwBdTLLC5J317xtXf8higrxdlK3FDf4geRsayokLxKq-yA907d1xZCbBA",
+ "expires_in": 7200,
+ "refresh_token": "39_2hgRgy87wnjhQOzZ5DPUBnac7Te17i1mFBqyKBpwFvq2pzVhnjwIBThwLXHcLVoaVnA6PzMFZJTGm6ee4YxFpqhhjnC7OeqIHp1OD1O8jlk",
+ "openid": "oRrdQt3fvaYOXfeXLPOPdUvUYy1Y",
+ "scope": "snsapi_userinfo",
+ "unionid": "oU5Yyt8rwqDaowkhJyuzmYY-UUeo" // todo 有时获取不到unionid
+ },
+ "errMsg": "login:ok"
+ }
+ */
+ if (loginResult && loginResult.authResult && loginResult.authResult.openid && loginResult.authResult.unionid) {
+ _self.httpUtil.myPost({
+ url: 'wechat/saveOpenidAndUnionidByWeixinApp',
+ data: {
+ openid: loginResult.authResult.openid,
+ unionid: loginResult.authResult.unionid,
+ }
+ }).then(result => {
+ resolve(result);
+ });
+ }
+ }
+ })
+ });
+ }
+
+
+ /**
+ * 根据code获得Unionid
+ */
+ findUnionidByCode() {
+ if (globalVariable.runPlatform === "0") {
+ return this.findUnionidByWeixinMiniAppCode();
+ } else if (globalVariable.runPlatform === "1") {
+ return this.findUnionidByWeixinAppCode();
+ }
+ }
+}
diff --git a/src/main.js b/src/main.js
index 20883fb..601a5df 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,12 +1,57 @@
-import Vue from 'vue'
-import App from './App'
-import './uni.promisify.adaptor'
+/**
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ */
+import Vue from 'vue';
+import App from './App';
+// 引入全局 uView 框架
+import uView from 'uview-ui';
+// 全局存储 vuex 的封装
+import store from '@/store';
+// 引入 uView 提供的对 vuex 的简写法文件
+import vuexStore from '@/store/$u.mixin.js';
+// 引入 uView 对小程序分享的 mixin 封装
+import mpShare from 'uview-ui/libs/mixin/mpShare.js';
+// Vue i18n 国际化
+import VueI18n from '@/common/vue-i18n.min.js';
+// i18n 部分的配置,引入语言包,注意路径
+import lang_zh_CN from '@/common/locales/zh_CN.js';
+import lang_en from '@/common/locales/en.js';
-Vue.config.productionTip = false
+Vue.config.productionTip = false;
-App.mpType = 'app'
+App.mpType = 'app';
+Vue.use(uView);
+Vue.mixin(vuexStore);
+Vue.mixin(mpShare);
+Vue.use(VueI18n);
+const i18n = new VueI18n({
+ // 默认语言
+ locale: 'zh_CN',
+ // 引入语言文件
+ messages: {
+ 'zh_CN': lang_zh_CN,
+ 'en': lang_en,
+ }
+});
+
+// 由于微信小程序的运行机制问题,需声明如下一行,H5和APP非必填
+Vue.prototype._i18n = i18n;
const app = new Vue({
- ...App
-})
-app.$mount()
+ i18n,
+ store,
+ ...App
+});
+
+import { replaceAll } from '@/common/common.js'
+Vue.prototype.replaceAll = replaceAll
+
+// http 拦截器,将此部分放在 new Vue() 和 app.$mount() 之间,才能 App.vue 中正常使用
+import httpInterceptor from '@/common/http.interceptor.js';
+Vue.use(httpInterceptor, app);
+
+// http 接口 API 抽离,免于写 url 或者一些固定的参数
+import httpApi from '@/common/http.api.js';
+Vue.use(httpApi, app);
+
+app.$mount();
diff --git a/src/manifest.json b/src/manifest.json
index 972bd1e..afbda09 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -1,75 +1,170 @@
{
- "name": "",
- "appid": "",
- "description": "",
- "versionName": "1.0.0",
- "versionCode": "100",
- "transformPx": false,
- "app-plus": { /* 5+App特有相关 */
- "usingComponents": true,
- "splashscreen": {
- "alwaysShowBeforeRender": true,
- "waiting": true,
- "autoclose": true,
- "delay": 0
- },
- "modules": { /* 模块配置 */
-
- },
- "distribute": { /* 应用发布信息 */
- "android": { /* android打包配置 */
- "permissions": ["",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ]
- },
- "ios": { /* ios打包配置 */
-
- },
- "sdkConfigs": { /* SDK配置 */
-
- }
- }
- },
- "quickapp": { /* 快应用特有相关 */
-
- },
- "mp-weixin": { /* 微信小程序特有相关 */
- "appid": "",
- "setting": {
- "urlCheck": false
- },
- "usingComponents": true
- },
- "mp-alipay" : {
- "usingComponents" : true
+ "name" : "浩拓技术",
+ "appid" : "__UNI__F79F300",
+ "description" : "浩拓纺织平台",
+ "versionName" : "1.1.1",
+ "versionCode" : 101,
+ "transformPx" : false,
+ "app-plus" : {
+ "optimization" : {
+ "subPackages" : true
+ },
+ "safearea" : {
+ "bottom" : {
+ "offset" : "none"
+ }
+ },
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ "usingComponents" : true,
+ "nvueCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "modules" : {
+ "Payment" : {},
+ "Barcode" : {},
+ "Bluetooth" : {},
+ "Camera" : {}
+ },
+ "distribute" : {
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
+ },
+ "ios" : {
+ "dSYMs" : false
+ },
+ "sdkConfigs" : {
+ "ad" : {},
+ "payment" : {
+ "alipay" : {
+ "__platform__" : [ "ios", "android" ]
+ },
+ "weixin" : {
+ "__platform__" : [ "ios", "android" ],
+ "appid" : "wxdf11ec8626d8a2cb",
+ "UniversalLinks" : ""
+ },
+ "appleiap" : {}
+ }
+ },
+ "icons" : {
+ "android" : {
+ "hdpi" : "static/haotop/image/logo/72.png",
+ "xhdpi" : "static/haotop/image/logo/96.png",
+ "xxhdpi" : "static/haotop/image/logo/144.png",
+ "xxxhdpi" : "static/haotop/image/logo/192.png"
+ },
+ "ios" : {
+ "appstore" : "",
+ "ipad" : {
+ "app" : "",
+ "app@2x" : "",
+ "notification" : "",
+ "notification@2x" : "",
+ "proapp@2x" : "",
+ "settings" : "",
+ "settings@2x" : "",
+ "spotlight" : "",
+ "spotlight@2x" : ""
+ },
+ "iphone" : {
+ "app@2x" : "",
+ "app@3x" : "",
+ "notification@2x" : "",
+ "notification@3x" : "",
+ "settings@2x" : "",
+ "settings@3x" : "",
+ "spotlight@2x" : "",
+ "spotlight@3x" : ""
+ }
+ }
+ },
+ "splashscreen" : {
+ "androidStyle" : "default",
+ "android" : {
+ "hdpi" : "static/haotop/image/logo/Start.png",
+ "xhdpi" : "static/haotop/image/logo/Start.png",
+ "xxhdpi" : "static/haotop/image/logo/Start.png"
+ }
+ }
+ }
},
- "mp-baidu" : {
- "usingComponents" : true
+ "quickapp" : {},
+ "mp-weixin" : {
+ "appid" : "wx04dd806ca2843cc1",
+ "setting" : {
+ "urlCheck" : true,
+ "es6" : false,
+ "minified" : true,
+ "postcss" : true
+ },
+ "optimization" : {
+ "subPackages" : true
+ },
+ "usingComponents" : true,
+ "permission" : {}
},
- "mp-toutiao" : {
- "usingComponents" : true
+ "mp-alipay" : {
+ "usingComponents" : true,
+ "component2" : true
},
"mp-qq" : {
- "usingComponents" : true
- }
+ "optimization" : {
+ "subPackages" : true
+ },
+ "appid" : ""
+ },
+ "mp-baidu" : {
+ "usingComponents" : true,
+ "appid" : ""
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true,
+ "appid" : ""
+ },
+ "h5" : {
+ "template" : "",
+ "router" : {
+ "mode" : "hash",
+ "base" : "hdweb"
+ },
+ "optimization" : {
+ "treeShaking" : {
+ "enable" : false
+ }
+ },
+ "title" : "浩拓信息技术"
+ },
+ "permission" : {
+ "scope.camera" : {
+ "desc" : "扫码功能需要使用摄像头权限"
+ }
+ },
+ "fallbackLocale" : "en"
}
diff --git a/src/pages.json b/src/pages.json
index 1aea851..971d04e 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -1,16 +1,779 @@
{
- "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ "easycom": {
+ "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+ },
+ "pages": [
{
- "path": "pages/index/index",
+ "path": "pages/sys/login/index",
"style": {
- "navigationBarTitleText": "uni-app"
+ "navigationBarTitleText": "登录"
}
+ },
+ {
+ "path": "pages/sys/login/forget",
+ "style": {
+ "navigationBarTitleText": "忘记密码"
+ }
+ },
+ {
+ "path": "pages/sys/login/reg",
+ "style": {
+ "navigationBarTitleText": "注册账号"
+ }
+ },
+ {
+ "path": "pages/sys/msg/index",
+ "style": {
+ "navigationBarTitleText": "消息",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/msg/form",
+ "style": {
+ "navigationBarTitleText": "查看详情"
+ }
+ },
+ {
+ "path": "pages/sys/home/index",
+ "style": {
+ "navigationBarTitleText": "工作台",
+ "navigationStyle": "custom" // 隐藏系统导航栏
+
+ }
+ },
+ {
+ "path": "pages/sys/user/index",
+ "style": {
+ "navigationBarTitleText": "我的",
+ "navigationBarBackgroundColor":"#5b95ff",
+ "navigationBarTextStyle": "white",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/user/info",
+ "style": {
+ "navigationBarTitleText": "个人信息"
+ }
+ },
+ {
+ "path": "uview-ui/components/u-avatar-cropper/u-avatar-cropper",
+ "style": {
+ "navigationBarTitleText": "头像裁剪",
+ "navigationBarBackgroundColor": "#000000"
+ }
+ },
+ {
+ "path": "pages/sys/user/help",
+ "style": {
+ "navigationBarTitleText": "帮助中心"
+ }
+ },
+ {
+ "path": "pages/sys/user/pwd",
+ "style": {
+ "navigationBarTitleText": "修改密码"
+ }
+ },
+ {
+ "path": "pages/sys/user/setting",
+ "style": {
+ "navigationBarTitleText": "系统设置"
+ }
+ },
+ {
+ "path": "pages/sys/user/comment",
+ "style": {
+ "navigationBarTitleText": "意见反馈"
+ }
+ },
+ {
+ "path": "pages/sys/user/about",
+ "style": {
+ "navigationBarTitleText": "关于我们"
+ }
+ },
+ {
+ "path": "pages/testData/form",
+ "style": {
+ "navigationBarTitleText": "新增编辑"
+ }
+ },
+ {
+ "path": "pages/testData/index",
+ "style": {
+ "navigationBarTitleText": "增删改查"
+ }
+ },
+ {
+ "path": "pages/common/webview",
+ "style": {
+ "navigationBarTitleText": "浏览网页"
+ }
+ },
+ {
+ "path": "pages/sys/login/code",
+ "style": {
+ "navigationBarTitleText": "验证码"
+ }
+ },
+ {
+ "path": "pages/sys/login/registerCode",
+ "style": {
+ "navigationBarTitleText": "验证码"
+ }
+ },
+ {
+ "path": "pages/sys/user/service",
+ "style": {
+ "navigationBarTitleText": "联系客服"
+ }
+ },
+ {
+ "path": "pages/sys/user/problem",
+ "style": {
+ "navigationBarTitleText": "常见问题"
+ }
+ },
+ {
+ "path": "pages/sys/user/currency",
+ "style": {
+ "navigationBarTitleText": "通用"
+ }
+ },
+ {
+ "path": "pages/sys/user/clear-cache",
+ "style": {
+ "navigationBarTitleText": "清除缓存"
+ }
+ },
+ {
+ "path": "pages/sys/workbench/index",
+ "style": {
+ "navigationBarTitleText": "工作台",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/book/index",
+ "style": {
+ "navigationBarTitleText": "通讯录",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/sys/book/personal-details",
+ "style": {
+ "navigationBarTitleText": "详情"
+ }
+ },
+ {
+ "path": "pages/sys/msg/list-item",
+ "style": {
+ "navigationBarTitleText": "列表"
+ }
+ },
+ {
+ "path": "pages/sys/workbench/add-form",
+ "style": {
+ "navigationBarTitleText": "请假申请"
+ }
+ },
+ {
+ "path": "pages/sys/msg/examine-item",
+ "style": {
+ "navigationBarTitleText": "网上报销"
+ }
+ },
+ {
+ "path": "pages/sys/msg/details",
+ "style": {
+ "navigationBarTitleText": "详情"
+ }
+ },{
+ "path": "pages/sys/user/modify",
+ "style": {
+ "navigationBarTitleText": "修改"
+ }
+ },{
+ "path": "pages/sys/workbench/install",
+ "style": {
+ "navigationBarTitleText": "常用设置",
+ "navigationStyle": "custom" // 隐藏系统导航栏
+ }
+ },{
+ "path" : "pages/basedata/customer/customer",
+ "style" :
+ {
+ "navigationBarTitleText": "客户资料",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/basedata/chanpin/shop",
+ "style" :
+ {
+ "navigationBarTitleText": "商品资料",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/saleship/saleshiporder",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/saleship/saleallocated",
+ "style" : {
+ "navigationBarTitleText": "销售预约单",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path": "pages/saleship/saleallocatedadd",
+ "style": {
+ "navigationBarTitleText": "新建销售预约单",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storegoods",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/dyeworksDyeback",
+ "style" :
+ {
+ "navigationBarTitleText": "染整进仓",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/dyeworksDyebackAdd",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/dyeworksDyebackDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/saleorder/saleorder",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnBusinessIn",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnBusinessInDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnBusinessOut",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnBusinessOutAdd",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnBusinessOutDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnBusinessCheck",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnBusinessCheckAdd",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnBusinessCheckDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnInStore",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnProduceWeave",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeYarnMoveStore",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeyarnstoresearch",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeyarnstoreallin",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storeyarn/storeyarnstoreallout",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storegoodsstoresearch",
+ "style" :
+ {
+ "navigationBarTitleText": "成品库存",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storegoodsstoreallin",
+ "style" :
+ {
+ "navigationBarTitleText": "进仓查询",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storegoodsstoreallout",
+ "style" :
+ {
+ "navigationBarTitleText": "出仓查询",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessIn",
+ "style" :
+ {
+ "navigationBarTitleText": "成品进仓",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessInAdd",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessInDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessOut",
+ "style" :
+ {
+ "navigationBarTitleText": "成品出仓",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessOutAdd",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessOutDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path" : "pages/storegoods/storeGoodsBusinessCheck",
+ "style" :
+ {
+ "navigationBarTitleText": "成品盘点",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessCheckAdd",
+ "style" :
+ {
+ "navigationBarTitleText": "新增成品盘点",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessCheckDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "成品盘点明细",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessCheckView",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessStationMoveOnly",
+ "style" :
+ {
+ "navigationBarTitleText": "成品移架明细",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessStationMove",
+ "style" :
+ {
+ "navigationBarTitleText": "成品移架",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessStationMoveAdd",
+ "style" :
+ {
+ "navigationBarTitleText": "新增成品移架",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/storeGoodsBusinessStationMoveDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storegoods/QRBarCodeReview",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storefabric/storefabricInBill",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path": "pages/storefabric/storefabricInBilladd",
+ "style": {
+ "navigationBarTitleText": "新建胚布进仓单",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storefabric/storefabricInStore",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/storefabric/storefabricOutStore",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/storefabric/storefabricstoresearch",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/storefabric/storefabricstoreallin",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/storefabric/storefabricstoreallout",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ },{
+ "path" : "pages/productorder/productweave",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/productorder/productweaveview",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/productorder/productweaveDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/saleship/salepickscan",
+ "style" :
+ {
+ "navigationBarTitleText": "成品配布",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/saleship/salepickscanview",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/saleship/salepickscandetail",
+ "style" :
+ {
+ "navigationBarTitleText": "成品配布明细",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/saleship/saleShipmentOut",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/saleship/saleShipmentOutView",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/saleship/saleShipmentOutAdd",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },{
+ "path" : "pages/saleship/saleShipmentOutDetail",
+ "style" :
+ {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path" : "pages/scan/scan",
+ "style" :
+ {
+ "navigationBarTitleText" : "二维码",
+ "navigationStyle": "custom"
+ }
+ }
+ ],
+ "subPackages": [{
+ "root": "chanpin",
+ "pages": [{
+ "path": "view/chanpin",
+ "style": {
+ "navigationBarTitleText": "产品",
+ "navigationBarBackgroundColor": "#007AFF",
+ "navigationBarTextStyle": "white",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "view/addCp",
+ "style": {
+ "navigationBarTitleText": "新建产品",
+ "navigationBarBackgroundColor": "#007AFF",
+ "navigationBarTextStyle": "white",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "view/classify",
+ "style": {
+ "navigationBarTitleText": "产品分类",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#007AFF",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "view/shop",
+ "style": {
+ "navigationBarTitleText": "商城",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#007AFF",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "view/cpDetail",
+ "style": {
+ "navigationBarTitleText": "产品详情",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#007AFF",
+ "navigationBarTextStyle": "white",
+ "navigationStyle": "custom"
+ }
+ }, {
+ "path": "view/searchAdmin",
+ "style": {
+ "navigationBarTitleText": "搜索",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#007AFF",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "view/search",
+ "style": {
+ "navigationBarTitleText": "搜索",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#007AFF",
+ "navigationBarTextStyle": "white"
+ }
+ }
+ ]
}
],
+ "preloadRule": {
+
+ },
"globalStyle": {
"navigationBarTextStyle": "black",
- "navigationBarTitleText": "uni-app",
- "navigationBarBackgroundColor": "#F8F8F8",
- "backgroundColor": "#F8F8F8"
+ "navigationBarTitleText": "Aidex",
+ "navigationBarBackgroundColor": "#ffffff"
+ },
+ "tabBar": {
+ "color": "#333333",
+ "selectedColor": "#4094ff",
+ "backgroundColor": "#ffffff",
+ "borderStyle": "white",
+ "list": [
+ {
+ "pagePath": "pages/sys/msg/index",
+ "iconPath": "static/aidex/tabbar/msg_1.png",
+ "selectedIconPath": "static/aidex/tabbar/msg_2.png",
+ "text": "消息"
+ },
+ // {
+ // "pagePath": "pages/sys/home/index",
+ // "iconPath": "static/aidex/tabbar/home_1.png",
+ // "selectedIconPath": "static/aidex/tabbar/home_2.png",
+ // "text": "首页"
+ // },
+ {
+ "pagePath": "pages/sys/workbench/index",
+ "iconPath": "static/aidex/tabbar/apply_1.png",
+ "selectedIconPath": "static/aidex/tabbar/apply_2.png",
+ "text": "工作台"
+ },
+ {
+ "pagePath": "pages/sys/book/index",
+ "iconPath": "static/aidex/tabbar/book_1.png",
+ "selectedIconPath": "static/aidex/tabbar/book_2.png",
+ "text": "通讯录"
+ },
+ {
+ "pagePath": "pages/sys/user/index",
+ "iconPath": "static/aidex/tabbar/my_1.png",
+ "selectedIconPath": "static/aidex/tabbar/my_2.png",
+ "text": "我的"
+ }
+ ]
}
}
diff --git a/src/pages/basedata/BillBusiness/BillBusinessList.vue b/src/pages/basedata/BillBusiness/BillBusinessList.vue
new file mode 100644
index 0000000..bda3732
--- /dev/null
+++ b/src/pages/basedata/BillBusiness/BillBusinessList.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/basedata/chanpin/addCp.vue b/src/pages/basedata/chanpin/addCp.vue
new file mode 100644
index 0000000..010779f
--- /dev/null
+++ b/src/pages/basedata/chanpin/addCp.vue
@@ -0,0 +1,475 @@
+
+
+
+ 产品名称
+ *
+
+
+
+
+ 产品单位
+ *
+
+
+
+
+ 产品价格
+ *
+
+
+
+
+ 产品类型
+ *
+
+
+ {{flName ? flName : '请选择'}}
+
+
+
+
+ 是否上下架
+ *
+
+
+ {{isSxJ ? isSxJ : '请选择'}}
+
+
+
+
+ 产品销量
+
+
+
+ 产品库存
+
+
+
+ 产品编码
+
+
+
+
+
+ 产品简述
+
+
+
+
+
+ 产品参数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产品封面图(1张)
+
+
+
+ 产品轮播图(最多上传5张)
+
+
+
+ 产品详情图(最多上传9张)
+
+
+
+
+ 提交
+ 保存
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/chanpin/chanpin.vue b/src/pages/basedata/chanpin/chanpin.vue
new file mode 100644
index 0000000..b9111c6
--- /dev/null
+++ b/src/pages/basedata/chanpin/chanpin.vue
@@ -0,0 +1,512 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.pName}}
+
+ 销量: {{item.salesNum}}
+ 库存: {{item.stock}}
+
+
+ ¥{{item.price}}/{{item.unit}}
+
+
+
+ 编辑产品
+
+ {{item.isSxJ == true ? '下架' : '上架'}}
+
+ 删除
+
+
+
+
+ 产品名称:{{item.pName}}
+
+ 产品状态:
+ {{item.isSxJ ? '上架中' : '下架'}}
+
+
+ 产品价格:
+ ¥{{item.price}}/{{item.unit}}
+
+
+ 产品类型:
+ {{item.flName}}
+
+
+ 产品销量:
+ {{item.salesNum}}
+
+
+ 产品库存:
+ {{item.stock}}
+
+
+ 产品简述:
+ {{item.describe}}
+
+
+ 编辑产品
+
+
+ {{item.isSxJ == true ? '下架' : '上架'}}
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/chanpin/classify.vue b/src/pages/basedata/chanpin/classify.vue
new file mode 100644
index 0000000..c047a5f
--- /dev/null
+++ b/src/pages/basedata/chanpin/classify.vue
@@ -0,0 +1,366 @@
+
+
+
+
+
+ {{row.flName}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/chanpin/cpDetail.vue b/src/pages/basedata/chanpin/cpDetail.vue
new file mode 100644
index 0000000..c6b03ff
--- /dev/null
+++ b/src/pages/basedata/chanpin/cpDetail.vue
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+ 产品名称:{{detail.pName}}
+
+ 产品编码:
+ {{detail.code}}
+
+
+ 产品状态:
+ {{detail.isSxJ ? '上架中' : '下架'}}
+
+
+ 产品价格:
+ {{detail.price}}元/{{detail.unit}}
+
+
+ 产品类型:
+ {{detail.flName}}
+
+
+ 产品简述:
+ {{detail.describe}}
+
+
+ 封面图:
+
+
+
+
+ — 详情 —
+
+ 产品参数介绍
+
+ 产品参数说明
+
+
+ {{item.csName}}
+ {{item.csJieShao}}
+
+
+
+
+ 产品详情图
+
+
+
+
+
+
+ 修改产品
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/chanpin/search.vue b/src/pages/basedata/chanpin/search.vue
new file mode 100644
index 0000000..d86d98d
--- /dev/null
+++ b/src/pages/basedata/chanpin/search.vue
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{item.pName}}
+
+ 销量: {{item.salesNum}}
+ 库存: {{item.stock}}
+
+
+ ¥{{item.price}}/{{item.unit}}
+
+
+
+
+ 产品名称:{{item.pName}}
+
+ 产品状态:
+ {{item.isSxJ}}
+
+
+ 产品价格:
+ ¥{{item.price}}/{{item.unit}}
+
+
+ 产品类型:
+ {{item.cpClassify}}
+
+
+ 产品销量:
+ {{item.salesNum}}
+
+
+ 产品库存:
+ {{item.stock}}
+
+
+ 产品简述:
+ {{item.describe}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/chanpin/searchAdmin.vue b/src/pages/basedata/chanpin/searchAdmin.vue
new file mode 100644
index 0000000..7bf4d92
--- /dev/null
+++ b/src/pages/basedata/chanpin/searchAdmin.vue
@@ -0,0 +1,264 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{item.pName}}
+
+ 销量: {{item.salesNum}}
+ 库存: {{item.stock}}
+
+
+ ¥{{item.price}}/{{item.unit}}
+
+
+
+ 编辑产品
+
+ {{item.isSxJ == '上架' ? '下架' : '上架'}}
+
+ 删除
+
+
+
+
+ 产品名称:{{item.pName}}
+
+ 产品状态:
+ {{item.isSxJ}}
+
+
+ 产品价格:
+ ¥{{item.price}}/{{item.unit}}
+
+
+ 产品类型:
+ {{item.cpClassify}}
+
+
+ 产品销量:
+ {{item.salesNum}}
+
+
+ 产品库存:
+ {{item.stock}}
+
+
+ 产品简述:
+ {{item.describe}}
+
+
+ 编辑产品
+
+
+ {{item.isSxJ == '上架' ? '下架' : '上架'}}
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/chanpin/shop.vue b/src/pages/basedata/chanpin/shop.vue
new file mode 100644
index 0000000..50424dd
--- /dev/null
+++ b/src/pages/basedata/chanpin/shop.vue
@@ -0,0 +1,709 @@
+
+
+
+
+
+
+ 搜索你要找的产品
+
+
+
+
+
+
+ {{item.flName}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.pName}}
+
+ 销量: {{item.salesNum}}
+ 库存: {{item.stock}}
+
+
+ ¥{{item.price}}/{{item.unit}}
+
+
+
+
+ {{item.pName}}
+
+ 产品价格:
+ ¥{{item.price}}/{{item.unit}}
+
+
+ 产品销量:
+ {{item.salesNum}}
+
+
+ 产品库存:
+ {{item.stock}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/customer/addKeHu.vue b/src/pages/basedata/customer/addKeHu.vue
new file mode 100644
index 0000000..151dbf0
--- /dev/null
+++ b/src/pages/basedata/customer/addKeHu.vue
@@ -0,0 +1,683 @@
+
+
+
+ 基础信息
+
+ 客户性质*
+
+ {{xingZhi ? xingZhi : '请选择'}}
+
+
+
+
+
+ 客户名称
+ *
+
+
+
+
+
+ 联系人
+ *
+
+
+
+
+ 联系方式
+ *
+
+
+
+
+ 客户来源
+ *
+
+
+ {{laiYuan ? laiYuan : '请选择'}}
+
+
+
+
+ 地区
+
+ {{region ? region : '请选择'}}
+
+
+
+
+ 地址
+ {{address ? address : '请在此选择详细地址'}}
+
+
+
+
+ 客户阶段
+
+ {{jieDuan ? jieDuan : '请选择'}}
+
+
+
+
+ 客户分级
+
+ {{fenJi ? fenJi : '请选择'}}
+
+
+
+
+ 客户行业
+
+ {{hangYe ? hangYe : '请选择'}}
+
+
+
+
+
+
+
+
+ 扩展信息
+
+ 重要程度
+
+
+
+ 客户类型
+
+ {{type ? type : '请选择'}}
+
+
+
+
+ 客户官网
+
+
+
+ 客户简介
+
+
+
+
+
+
+
+
+ {{pageType =='' ? '提交' : '保存'}}
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/customer/customer.vue b/src/pages/basedata/customer/customer.vue
new file mode 100644
index 0000000..265c4c3
--- /dev/null
+++ b/src/pages/basedata/customer/customer.vue
@@ -0,0 +1,519 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/customer/customerBack.vue b/src/pages/basedata/customer/customerBack.vue
new file mode 100644
index 0000000..6c60916
--- /dev/null
+++ b/src/pages/basedata/customer/customerBack.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/customer/kehuGh.vue b/src/pages/basedata/customer/kehuGh.vue
new file mode 100644
index 0000000..07172fa
--- /dev/null
+++ b/src/pages/basedata/customer/kehuGh.vue
@@ -0,0 +1,428 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/customer/khDetail.vue b/src/pages/basedata/customer/khDetail.vue
new file mode 100644
index 0000000..6f14cd7
--- /dev/null
+++ b/src/pages/basedata/customer/khDetail.vue
@@ -0,0 +1,792 @@
+
+
+
+
+
+
+
+
+
+ 客户阶段
+
+ 更改
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/basedata/plandepartment/new_file.vue b/src/pages/basedata/plandepartment/new_file.vue
new file mode 100644
index 0000000..2e3d8d3
--- /dev/null
+++ b/src/pages/basedata/plandepartment/new_file.vue
@@ -0,0 +1,475 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/common/aidex.scss b/src/pages/common/aidex.scss
new file mode 100644
index 0000000..776ae3e
--- /dev/null
+++ b/src/pages/common/aidex.scss
@@ -0,0 +1,108 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+.wrap {
+
+ .search{
+ padding: 20rpx 20rpx 0;
+ background: #f8f8f8;
+ height: 105rpx;
+ }
+
+ .scroll-list {
+ height: calc(100vh - var(--window-top) - var(--window-bottom) - 105rpx); // 105rpx 为 .search 的高度
+ width: 100%;
+
+ .loadmore {
+ padding: 30rpx;
+ }
+ }
+
+ .box {
+ padding-bottom: 10rpx;
+
+ .item {
+ margin: 0 20rpx 20rpx;
+ padding: 8rpx 20rpx;
+ border-radius: 20rpx;
+ box-sizing: border-box;
+ background-color: #fff;
+ font-size: 28rpx;
+
+ .title {
+ display: flex;
+ justify-content: space-between;
+ background-color: #fff;
+ padding-left: 15rpx;
+ align-items: center;
+
+ .text {
+ margin: 0 20rpx;
+ font-size: 35rpx;
+ font-weight: bold;
+ }
+
+ }
+ }
+
+ }
+
+ .list {
+
+ .u-cell-item-box {
+
+ .u-swipe-content {
+ width: 750rpx;
+ }
+
+ .u-cell_title {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ min-width: 655rpx;
+ }
+
+ .u-border-bottom:last-child:after {
+ border-bottom: 0;
+ }
+ }
+ }
+
+ .form {
+ display: flex;
+ flex-direction: column;
+ padding: 20rpx 30rpx;
+
+ .u-cell-item-box {
+ border-radius: 20rpx;
+ }
+ }
+
+ .form-footer {
+ display: flex;
+ margin: 10rpx;
+ padding-bottom: 30rpx;
+
+ .btn {
+ flex: 1;
+ margin: 20rpx;
+ }
+ }
+
+ .u-cell-box {
+
+ .u-cell {
+ font-size: 30rpx;
+ }
+
+ .u-cell_title {
+ font-size: 30rpx;
+ }
+
+ .u-cell__left-icon-wrap {
+ margin-right: 18rpx;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/pages/common/webview.vue b/src/pages/common/webview.vue
new file mode 100644
index 0000000..4c94474
--- /dev/null
+++ b/src/pages/common/webview.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue
index bd118ba..5e078f9 100644
--- a/src/pages/index/index.vue
+++ b/src/pages/index/index.vue
@@ -1,49 +1,25 @@
-
-
-
- {{title}}
-
+
+
+
-
+
diff --git a/src/pages/index/table.vue b/src/pages/index/table.vue
new file mode 100644
index 0000000..cad6a92
--- /dev/null
+++ b/src/pages/index/table.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/index/tree-table.vue b/src/pages/index/tree-table.vue
new file mode 100644
index 0000000..cf7983a
--- /dev/null
+++ b/src/pages/index/tree-table.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/productorder/productweave.vue b/src/pages/productorder/productweave.vue
new file mode 100644
index 0000000..986f06a
--- /dev/null
+++ b/src/pages/productorder/productweave.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/productorder/productweaveDetail.vue b/src/pages/productorder/productweaveDetail.vue
new file mode 100644
index 0000000..7608370
--- /dev/null
+++ b/src/pages/productorder/productweaveDetail.vue
@@ -0,0 +1,586 @@
+
+
+
+
+ 排产单号:{{ProductWeaveNo}}
+ 排产日期:{{$u.timeFormat(ProductWeaveDate, 'yyyy-mm-dd')}}
+
+
+ 织厂名称:{{WeaveFactoryName}}
+ 商品编码:{{FabricEmbryoCodeNo}}
+
+
+ 坯布名称:{{FabricEmbryoName}}
+
+
+ 坯布颜色:{{EmbryoCodeName}}
+ 日产条数:{{WeaveMachineDayYieldQty}}条
+
+
+ 进度状态
+
+ {{WeaveCompleteTypeName ? WeaveCompleteTypeName : '请选择'}}
+
+
+
+
+
+ 生产情况:
+
+
+
+ 安排机台:
+
+ 染纱货期:
+
+
+
+ 派纱时间:
+
+ 上机时间:
+
+
+
+ 派纱备注:
+
+
+
+ 当前跟前天累计条数:{{TowDayInRoll}}条
+ 当天收布条数:{{ToDayInRoll}}条
+
+
+ 累计条数:{{SumInRoll}}条
+ 未织条数:
+
+
+
+ 欠胚数量:{{NotProductRoll}}条
+ 织厂存胚:
+
+
+
+ 回复交货时间:
+
+
+
+ 更改货期原因:
+
+
+
+ 成品间距:{{GoodsWeaveSpaceNames}}
+ 针 寸 数:{{NeedleInch}}
+
+
+ 织厂地址:{{WeaveFactoryContactAddress}}
+
+
+ 联 系 人:{{WeaveFactoryContactName}}
+ 织厂电话:{{WeaveFactoryContactPhone}}
+
+
+ 排产条数:{{WeaveRoll}}
+ 排产重量:{{WeaveQty}}
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/productorder/productweaveview.vue b/src/pages/productorder/productweaveview.vue
new file mode 100644
index 0000000..39ab168
--- /dev/null
+++ b/src/pages/productorder/productweaveview.vue
@@ -0,0 +1,94 @@
+
+
+ 排产单号:{{item.ProductWeaveNo}} {{item.WeaveFactoryName}}
+
+ 排产日期:
+ {{item.ProductWeaveDate}}
+
+
+ 商品编码:
+ {{item.FabricEmbryoNo}}-{{item.EmbryoCodeNo}}#
+
+
+ 商品名称:
+ {{item.FabricEmbryoName}}
+
+
+ 商品颜色:
+ {{item.EmbryoCodeName}}
+
+
+ 进度状态:
+ {{item.WeaveCompleteTypeName}}
+
+
+ 生产情况:
+ {{item.WeaveFactoryWeaveRemark}}
+
+
+ 排产数量:
+ {{item.WeaveRoll}}条 {{item.WeaveQty}}Kg
+
+
+ 已产数量:
+ {{item.HasProductRoll}}条 {{item.HasProductQty}}Kg
+
+
+ 派纱时间:
+ {{item.WeaveFactorySendYarn}}
+
+
+ 派纱备注:
+ {{item.WeaveFactorySendRemark}}
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleorder/saleorder.vue b/src/pages/saleorder/saleorder.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/src/pages/saleorder/saleorder.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/baoJiaDan.vue b/src/pages/saleship/baoJiaDan.vue
new file mode 100644
index 0000000..6fa8e3d
--- /dev/null
+++ b/src/pages/saleship/baoJiaDan.vue
@@ -0,0 +1,298 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/detail.vue b/src/pages/saleship/detail.vue
new file mode 100644
index 0000000..99b7de0
--- /dev/null
+++ b/src/pages/saleship/detail.vue
@@ -0,0 +1,400 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产品汇总
+
+
+ 总数量:
+ {{cpHzObj.totalNum}}
+
+
+ 价格合计:
+ {{(cpHzObj.price).toFixed(2)}}元
+
+
+
+
+ 总折扣%:
+ {{(cpHzObj.discount).toFixed(2)}}
+
+
+ 最终价格:
+ {{(cpHzObj.sumPrice).toFixed(2)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/index.scss b/src/pages/saleship/index.scss
new file mode 100644
index 0000000..53af608
--- /dev/null
+++ b/src/pages/saleship/index.scss
@@ -0,0 +1,35 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+
+.toolbar {
+
+ background-color: #fff;
+}
+.wrap .box .item{
+ margin: 0 0 0px;
+ border-radius: 0;
+ .title {
+ padding-left:0;
+ .text {
+ font-size: 30rpx;
+ font-weight:500;
+ margin: 0;
+ color: #202328;
+ }
+ }
+}
+.grid {
+
+ .grid-icon {
+ color: #666;
+ }
+
+ .grid-text {
+ font-size: 24rpx;
+ padding: 15rpx;
+ color: #202328;
+ }
+}
diff --git a/src/pages/saleship/saleShipmentOut.vue b/src/pages/saleship/saleShipmentOut.vue
new file mode 100644
index 0000000..723c9d5
--- /dev/null
+++ b/src/pages/saleship/saleShipmentOut.vue
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/saleShipmentOutAdd.vue b/src/pages/saleship/saleShipmentOutAdd.vue
new file mode 100644
index 0000000..9aa3192
--- /dev/null
+++ b/src/pages/saleship/saleShipmentOutAdd.vue
@@ -0,0 +1,910 @@
+
+
+
+
+ 付运凭证
+
+ 付运日期 {{$u.timeFormat(SaleShipmentOutDate, 'yyyy-mm-dd')}}
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 司机名称
+
+ {{ShipCarUserName ? ShipCarUserName : '请选择'}}
+
+
+
+
+ 车牌号码
+
+ {{ShipCarNo ? ShipCarNo : '请选择'}}
+
+
+
+
+
+ 备注内容
+
+
+
+
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 出仓单号:{{OutBillNo}}
+ 出仓日期:{{OutBillDate}}
+
+
+ 单据类型:{{BillTypeName}}
+ 配布单号:{{SaleBillNo}}
+
+
+ 往来单位:{{CustomerName}}
+ 销 售 员:{{SaleUserName}}
+
+
+ 付运单数:{{ShipOutBillNum}}单
+
+
+ 付运单据条数:{{ShipBillSumRoll}}条
+ 付运单据重量:{{ShipBillSumQty}}Kg
+
+
+ 出仓单据条数:{{OutBillSumRoll}}条
+ 出仓单据重量:{{OutBillSumQty}}Kg
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+ {{commitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/saleShipmentOutDetail.vue b/src/pages/saleship/saleShipmentOutDetail.vue
new file mode 100644
index 0000000..09b9a87
--- /dev/null
+++ b/src/pages/saleship/saleShipmentOutDetail.vue
@@ -0,0 +1,421 @@
+
+
+
+
+ 付运单号:{{SaleShipmentOutBillNo}}
+ 付运日期:{{SaleShipmentOutDate}}
+
+
+ 仓库名称:{{StoreName}}
+ 出车时间:{{ShipOutTime}}
+
+
+ 司机名称:{{ShipCarUserName}}
+ 车牌号码:{{ShipCarNo}}
+
+
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 出仓单号:{{OutBillNo}}
+ 出仓日期:{{OutBillDate}}
+
+
+ 单据类型:{{BillTypeName}}
+ 配布单号:{{SaleBillNo}}
+
+
+ 往来单位:{{CustomerName}}
+ 销 售 员:{{SaleUserName}}
+
+
+ 付运单数:{{ShipOutBillNum}}单
+
+
+ 付运单据条数:{{ShipBillSumRoll}}条
+ 付运单据重量:{{ShipBillSumQty}}Kg
+
+
+ 出仓单据条数:{{OutBillSumRoll}}条
+ 出仓单据重量:{{OutBillSumQty}}Kg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/saleShipmentOutView.vue b/src/pages/saleship/saleShipmentOutView.vue
new file mode 100644
index 0000000..891cda7
--- /dev/null
+++ b/src/pages/saleship/saleShipmentOutView.vue
@@ -0,0 +1,86 @@
+
+
+ 付运单号:{{item.BillNo}}
+
+ 付运日期:
+ {{item.BillDate}}
+
+
+ 营销部门:
+ {{item.PlanDepartmentName}}
+
+
+ 送货司机:
+ {{item.ShipCarUserName}}
+
+
+ 车牌号码:
+ {{item.ShipCarNo}}
+
+
+ 付运单数:
+ {{item.ShipOutBillNum}}单
+
+
+ 付运数量:
+ {{item.ShipOutRoll}}条 {{item.ShipOutQty}}KG
+
+
+ 创 建 人:
+ {{item.OpName}} {{item.OpDate}}
+
+
+ 审 核 人:
+ {{item.CommitName}} {{item.CommitDate}}
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/saleallocated.vue b/src/pages/saleship/saleallocated.vue
new file mode 100644
index 0000000..710c774
--- /dev/null
+++ b/src/pages/saleship/saleallocated.vue
@@ -0,0 +1,389 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/saleallocatedadd.vue b/src/pages/saleship/saleallocatedadd.vue
new file mode 100644
index 0000000..c5ec95d
--- /dev/null
+++ b/src/pages/saleship/saleallocatedadd.vue
@@ -0,0 +1,792 @@
+
+
+
+ 预约单号
+
+ 预约日期 {{$u.timeFormat(AllocatedDate, 'yyyy-mm-dd')}}
+
+
+ 客户名称*
+
+ {{CustomerName ? CustomerName : '请选择'}}
+
+
+
+
+ 营销部门*
+
+ {{PlanDepartmentName ? PlanDepartmentName : '请选择'}}
+
+
+
+
+ 销 售 员*
+
+ {{SaleUserName ? SaleUserName : '请选择'}}
+
+
+
+
+ 结算方式*
+
+ {{PaymentTypeName ? PaymentTypeName : '请选择'}}
+
+
+
+
+ 物流公司*
+
+
+
+ 收货地址*
+
+
+
+
+ 内部备注
+
+
+
+
+
+ 出货备注
+
+
+
+
+
+ 添加产品
+
+
+
+
+ 总数量:
+ {{cpHzObj.totalNum}}
+
+
+ 价格合计:
+ {{cpHzObj.price}}元
+
+
+ 总折扣%:
+
+
+
+
+
+
+ 最终价格:
+
+
+
+
+
+
+
+ 产品名称:{{item.pName}}
+
+ 产品价格:
+ {{item.price}}元/{{item.unit}}
+
+
+ 售价 (元):
+
+
+
+ 折扣 (%):
+
+
+
+
+
+ 产品数量:
+
+
+
+
+
+ 价格合计:
+ ¥{{item.totalPrice}}
+
+
+
+ 点击添加相关产品
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/salepickscan.vue b/src/pages/saleship/salepickscan.vue
new file mode 100644
index 0000000..4467390
--- /dev/null
+++ b/src/pages/saleship/salepickscan.vue
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ hasMore ? "正在加载更多..." : "没有更多数据了" }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/salepickscandetail.vue b/src/pages/saleship/salepickscandetail.vue
new file mode 100644
index 0000000..25f2056
--- /dev/null
+++ b/src/pages/saleship/salepickscandetail.vue
@@ -0,0 +1,736 @@
+
+
+
+
+ 单号:{{ BillNo }}
+ 日期:{{ BillDate }}
+
+
+ 客户名称:{{ CustomerName }}
+ 销 售 员:{{ SaleUserName }}
+
+
+ 仓库名称:{{ StoreName }}{{ ToStoreName }}
+
+
+ 备注内容:{{ BillRemark }}
+
+
+
+
+ 整缸
+
+
+ 删除
+
+
+
+
+
+ 成品名称:{{ FabricGoodsNo }}{{ FabricGoodsName }}
+
+
+ 色号颜色:{{ GoodsCodeNo }}{{ GoodsCodeName }}
+
+
+ 成品缸号:{{ CrockNo }}
+ 成品卷号:{{ GoodsBillNo }}
+
+
+ {{ BillDataMessage }}
+
+
+ 配布条数:{{ BillSumRoll }}
+ 数量:{{ BillSumQty }}
+ 米数:{{ BillSumMQty }}
+
+
+ 已配条数:{{ BillScanRoll }}
+ 数量:{{ BillScanQty }}
+ 米数:{{ BillScanMQty }}
+
+
+
+ {{ pageType ? "保存" : "提交" }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/salepickscanview.vue b/src/pages/saleship/salepickscanview.vue
new file mode 100644
index 0000000..e3863f5
--- /dev/null
+++ b/src/pages/saleship/salepickscanview.vue
@@ -0,0 +1,86 @@
+
+
+ 单号:{{item.order_no}} {{item.out_order_type_name}}
+
+ 配布日期:
+ {{this.$u.timeFormat(item.arrange_time, 'yyyy-mm-dd')}}
+
+
+ 进度状态:
+ {{item.business_status_name}}
+
+
+ 客户名称:
+ {{item.biz_unit_name}}
+
+
+ 预约单号:
+ {{item.src_order_no}}
+
+
+ 销售员:
+ {{item.sale_user_name}}
+
+
+ 仓库名称:
+ {{item.warehouse_name}}
+
+
+ 配布数量:
+ {{item.push_roll/100}}条 {{item.push_weight/10000}}KG {{item.push_roll/100}}米
+
+
+ 已配数量:
+ {{item.total_roll/100}}条 {{item.total_weight/10000}}Kg {{item.total_length/100}}米
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleship/saleshiporder.vue b/src/pages/saleship/saleshiporder.vue
new file mode 100644
index 0000000..5519b37
--- /dev/null
+++ b/src/pages/saleship/saleshiporder.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleshipBack/index.scss b/src/pages/saleshipBack/index.scss
new file mode 100644
index 0000000..53af608
--- /dev/null
+++ b/src/pages/saleshipBack/index.scss
@@ -0,0 +1,35 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+
+.toolbar {
+
+ background-color: #fff;
+}
+.wrap .box .item{
+ margin: 0 0 0px;
+ border-radius: 0;
+ .title {
+ padding-left:0;
+ .text {
+ font-size: 30rpx;
+ font-weight:500;
+ margin: 0;
+ color: #202328;
+ }
+ }
+}
+.grid {
+
+ .grid-icon {
+ color: #666;
+ }
+
+ .grid-text {
+ font-size: 24rpx;
+ padding: 15rpx;
+ color: #202328;
+ }
+}
diff --git a/src/pages/saleshipBack/saleallocated - 副本.vue b/src/pages/saleshipBack/saleallocated - 副本.vue
new file mode 100644
index 0000000..40af4b0
--- /dev/null
+++ b/src/pages/saleshipBack/saleallocated - 副本.vue
@@ -0,0 +1,409 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleshipBack/saleallocated.vue b/src/pages/saleshipBack/saleallocated.vue
new file mode 100644
index 0000000..2caae88
--- /dev/null
+++ b/src/pages/saleshipBack/saleallocated.vue
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleshipBack/saleship2.vue b/src/pages/saleshipBack/saleship2.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/src/pages/saleshipBack/saleship2.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/saleshipBack/saleshiporder.vue b/src/pages/saleshipBack/saleshiporder.vue
new file mode 100644
index 0000000..5519b37
--- /dev/null
+++ b/src/pages/saleshipBack/saleshiporder.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
+
diff --git a/src/pages/scan/scan.vue b/src/pages/scan/scan.vue
new file mode 100644
index 0000000..b9fb734
--- /dev/null
+++ b/src/pages/scan/scan.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+ 二维码
+
+
+
+ 相册
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请将二维码放入框内,即可自动扫描
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/storefabric/index.scss b/src/pages/storefabric/index.scss
new file mode 100644
index 0000000..53af608
--- /dev/null
+++ b/src/pages/storefabric/index.scss
@@ -0,0 +1,35 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+
+.toolbar {
+
+ background-color: #fff;
+}
+.wrap .box .item{
+ margin: 0 0 0px;
+ border-radius: 0;
+ .title {
+ padding-left:0;
+ .text {
+ font-size: 30rpx;
+ font-weight:500;
+ margin: 0;
+ color: #202328;
+ }
+ }
+}
+.grid {
+
+ .grid-icon {
+ color: #666;
+ }
+
+ .grid-text {
+ font-size: 24rpx;
+ padding: 15rpx;
+ color: #202328;
+ }
+}
diff --git a/src/pages/storefabric/storeFabricBusinessOut.vue b/src/pages/storefabric/storeFabricBusinessOut.vue
new file mode 100644
index 0000000..e0ee31f
--- /dev/null
+++ b/src/pages/storefabric/storeFabricBusinessOut.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricBusinessOutAdd.vue b/src/pages/storefabric/storefabricBusinessOutAdd.vue
new file mode 100644
index 0000000..0e6d54b
--- /dev/null
+++ b/src/pages/storefabric/storefabricBusinessOutAdd.vue
@@ -0,0 +1,1057 @@
+
+
+
+
+ 出仓凭证
+
+ 出仓日期 {{$u.timeFormat(GoodsOutBillDate, 'yyyy-mm-dd')}}
+
+
+ 单据类型*
+ {{BillTypeName ? BillTypeName : '请选择'}}
+
+
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 调至仓库*
+ {{ToStoreName ? ToStoreName : '请选择'}}
+
+
+
+
+ 往来单位*
+ {{CustomerName ? CustomerName : '请选择'}}
+
+
+
+
+ 营销部门*
+ {{PlanDepartmentName ? PlanDepartmentName : '请选择'}}
+
+
+
+
+ 销 售 员:{{SaleUserName}}
+
+
+
+
+ 备注内容
+
+
+
+
+
+
+ 整缸
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+ 本单条数:{{BillSumRoll}}条
+ 本单重量:{{BillSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色重量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+ {{commitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricBusinessOutDetail.vue b/src/pages/storefabric/storefabricBusinessOutDetail.vue
new file mode 100644
index 0000000..cef52a4
--- /dev/null
+++ b/src/pages/storefabric/storefabricBusinessOutDetail.vue
@@ -0,0 +1,580 @@
+
+
+
+
+ 单号:{{GoodsOutBillNo}}
+ 日期:{{GoodsOutBillDate}}
+
+
+ 单据类型:{{BillTypeName}}
+ 营销部门:{{PlanDepartmentName}}
+
+
+ 仓库名称:{{StoreName}}
+ 调至仓库:{{ToStoreName}}
+
+
+ 往来单位:{{CustomerName}}
+ 销 售 员:{{SaleUserName}}
+
+
+
+
+ 整缸
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+
+ 本单条数:{{BillSumRoll}}条
+ 本单重量:{{BillSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色重量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricInBill.vue b/src/pages/storefabric/storefabricInBill.vue
new file mode 100644
index 0000000..3fffff9
--- /dev/null
+++ b/src/pages/storefabric/storefabricInBill.vue
@@ -0,0 +1,324 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricInBilladd.vue b/src/pages/storefabric/storefabricInBilladd.vue
new file mode 100644
index 0000000..ab67d99
--- /dev/null
+++ b/src/pages/storefabric/storefabricInBilladd.vue
@@ -0,0 +1,784 @@
+
+
+
+ 进仓单号
+
+ 进仓日期 {{$u.timeFormat(InStoreBillDate, 'yyyy-mm-dd')}}
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 搬运工*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 销 售 员*
+
+ {{SaleUserName ? SaleUserName : '请选择'}}
+
+
+
+
+
+ 物流公司*
+
+
+
+ 收货地址*
+
+
+
+
+ 内部备注
+
+
+
+
+
+ 出货备注
+
+
+
+
+
+ 添加产品
+
+
+
+
+ 总数量:
+ {{cpHzObj.totalNum}}
+
+
+ 价格合计:
+ {{cpHzObj.price}}元
+
+
+ 总折扣%:
+
+
+
+
+
+
+ 最终价格:
+
+
+
+
+
+
+
+ 产品名称:{{item.pName}}
+
+ 产品价格:
+ {{item.price}}元/{{item.unit}}
+
+
+ 售价 (元):
+
+
+
+ 折扣 (%):
+
+
+
+
+
+ 产品数量:
+
+
+
+
+
+ 价格合计:
+ ¥{{item.totalPrice}}
+
+
+
+ 点击添加相关产品
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricInStore.vue b/src/pages/storefabric/storefabricInStore.vue
new file mode 100644
index 0000000..c79d0bf
--- /dev/null
+++ b/src/pages/storefabric/storefabricInStore.vue
@@ -0,0 +1,468 @@
+
+
+
+
+ {{storeInData.BillGUID}}
+
+
+
+ 名称: {{storeInData.StoreStationName}}
+
+
+
+
+ 重量:
+
+
+
+
+ 布号: {{storeInData.FabricBillNo}}
+
+
+ {{BillDataMessage}}
+
+
+ {{storeInData.WeaveFactoryName}}
+ 编号: {{storeInData.FabricEmbryoNo}}
+
+
+ {{storeInData.FabricEmbryoName}}
+ 颜色: {{storeInData.EmbryoCodeNo}}{{storeInData.EmbryoCodeName}}
+
+
+ {{storeInData.SumRoll}}
+ 重量:{{storeInData.SumQty}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricOutStore.vue b/src/pages/storefabric/storefabricOutStore.vue
new file mode 100644
index 0000000..112408e
--- /dev/null
+++ b/src/pages/storefabric/storefabricOutStore.vue
@@ -0,0 +1,382 @@
+
+
+
+
+ {{storeOutData.BillGUID}}
+
+
+
+
+
+
+
+
+
+
+ {{storeOutData.FabricEmbryoNo}}
+ 品名: {{storeOutData.FabricEmbryoName}}
+
+
+ {{storeOutData.EmbryoCodeNo}}
+ 颜色: {{storeOutData.EmbryoCodeName}}
+
+
+ {{storeOutData.WeaveFactoryName}}
+ 机号: {{storeOutData.WeaveMachineNo}}
+
+
+ {{storeOutData.FabricBillNo}}
+ 条重: {{storeOutData.Qty}}
+
+
+ {{BillDataMessage}}
+
+
+ {{storeOutData.SumRoll}}
+ 重量:{{storeOutData.SumQty}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricstoreallin.vue b/src/pages/storefabric/storefabricstoreallin.vue
new file mode 100644
index 0000000..73825fa
--- /dev/null
+++ b/src/pages/storefabric/storefabricstoreallin.vue
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总件数:{{FabircSumRoll}}
+ 总重量:{{FabricSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricstoreallout.vue b/src/pages/storefabric/storefabricstoreallout.vue
new file mode 100644
index 0000000..0fa7ddd
--- /dev/null
+++ b/src/pages/storefabric/storefabricstoreallout.vue
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总件数:{{FabircSumRoll}}
+ 总重量:{{FabricSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storefabric/storefabricstoresearch.vue b/src/pages/storefabric/storefabricstoresearch.vue
new file mode 100644
index 0000000..da17d37
--- /dev/null
+++ b/src/pages/storefabric/storefabricstoresearch.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总条数:{{FabricSumRoll}}
+ 总重量:{{FabricSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/QRBarCodeReview.vue b/src/pages/storegoods/QRBarCodeReview.vue
new file mode 100644
index 0000000..b61def3
--- /dev/null
+++ b/src/pages/storegoods/QRBarCodeReview.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 缸号:{{QRBarCodeData.CrockNo}}
+ 卷号:{{QRBarCodeData.GoodsBillNo}}
+
+
+ 编号:{{QRBarCodeData.FabricGoodsNo}}
+ 重量:{{QRBarCodeData.Qty}} KG
+
+
+ 品名:{{QRBarCodeData.FabricGoodsName}}
+
+
+ 颜色:{{QRBarCodeData.GoodsCodeName}}
+
+
+ 订单号:{{QRBarCodeData.SaleOrderNo}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/storegoods/dyeworksDyeback.vue b/src/pages/storegoods/dyeworksDyeback.vue
new file mode 100644
index 0000000..fc460ec
--- /dev/null
+++ b/src/pages/storegoods/dyeworksDyeback.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/storegoods/dyeworksDyebackAdd.vue b/src/pages/storegoods/dyeworksDyebackAdd.vue
new file mode 100644
index 0000000..9d2579d
--- /dev/null
+++ b/src/pages/storegoods/dyeworksDyebackAdd.vue
@@ -0,0 +1,911 @@
+
+
+
+
+ 进仓凭证
+
+ 进仓日期 {{$u.timeFormat(DyeBackBillDate, 'yyyy-mm-dd')}}
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 单据类型*
+ {{BillTypeName ? BillTypeName : '请选择'}}
+
+
+
+
+ 往来单位*
+ {{CustomerName ? CustomerName : '请选择'}}
+
+
+
+
+ 仓位编号*
+
+ 仓位名称:{{StoreStationName}}
+
+
+
+ 备注内容
+
+
+
+
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品缸号:{{CrockNo}}
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}Kg
+
+
+ 已扫条数:{{CrockNoScanRoll}}条
+ 已扫重量:{{CrockNoScanQty}}Kg
+
+
+ 本单总条:{{BillSumRoll}}
+ 本单总重:{{BillSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/dyeworksDyebackDetail.vue b/src/pages/storegoods/dyeworksDyebackDetail.vue
new file mode 100644
index 0000000..0a3cec1
--- /dev/null
+++ b/src/pages/storegoods/dyeworksDyebackDetail.vue
@@ -0,0 +1,582 @@
+
+
+
+
+ 单号:{{BillNo}}
+ 日期:{{BillDate}}
+
+
+ 往来单位:{{CustomerName}}
+ 仓库名称:{{StoreName}}
+
+
+
+ 仓位编号:
+
+ 仓位名称:{{StoreStationName}}
+
+
+
+
+ 删除
+
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品缸号:{{CrockNo}}
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}Kg
+
+
+ 已扫条数:{{CrockNoScanRoll}}条
+ 已扫重量:{{CrockNoScanQty}}Kg
+
+
+ {{BillDataMessage}}
+
+
+ 本单总条:{{BillSumRoll}}
+ 本单总重:{{BillSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessCheck.vue b/src/pages/storegoods/storeGoodsBusinessCheck.vue
new file mode 100644
index 0000000..785465a
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessCheck.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessCheckAdd.vue b/src/pages/storegoods/storeGoodsBusinessCheckAdd.vue
new file mode 100644
index 0000000..dae8b17
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessCheckAdd.vue
@@ -0,0 +1,796 @@
+
+
+
+
+ 盘点凭证
+
+ 盘点日期 {{$u.timeFormat(GoodsCheckBillDate, 'yyyy-mm-dd')}}
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+
+ 仓位编号*
+
+ 仓位名称:{{StoreStationName}}
+
+
+
+ 备注内容
+
+
+
+
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+ 本架盘前:{{BillSumOldRoll}}条
+ 本架实盘:{{BillSumNewRoll}}条
+
+
+ 本色盘前:{{GoodsCodeNoSumOldRoll}}条
+ 本色实盘:{{GoodsCodeNoSumNewRoll}}条
+
+
+ 本缸盘前:{{CrockNoSumOldRoll}}条
+ 本缸实盘:{{CrockNoSumNewRoll}}条
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessCheckDetail.vue b/src/pages/storegoods/storeGoodsBusinessCheckDetail.vue
new file mode 100644
index 0000000..c3152e9
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessCheckDetail.vue
@@ -0,0 +1,471 @@
+
+
+
+
+ 单号:{{GoodsCheckBillNo}}
+ 日期:{{GoodsCheckBillDate}}
+
+
+ 仓库名称:{{StoreName}}
+ 仓位名称:{{StoreStationName}}
+
+
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+
+ 本架盘前:{{BillSumOldRoll}}条
+ 本架实盘:{{BillSumNewRoll}}条
+
+
+ 本色盘前:{{GoodsCodeNoSumOldRoll}}条
+ 本色实盘:{{GoodsCodeNoSumNewRoll}}条
+
+
+ 本缸盘前:{{CrockNoSumOldRoll}}条
+ 本缸实盘:{{CrockNoSumNewRoll}}条
+
+
+
+
+
+
+
+
+
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessCheckView.vue b/src/pages/storegoods/storeGoodsBusinessCheckView.vue
new file mode 100644
index 0000000..e7d5bc4
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessCheckView.vue
@@ -0,0 +1,68 @@
+
+
+ 盘点单号:{{item.order_no}}
+
+ 盘点日期:
+ {{this.$u.timeFormat(item.check_time,'yyyy-mm-dd')}}
+
+
+ 仓库名称:
+ {{item.warehouse_name}}
+
+
+ 仓位名称:
+ {{item.warehouse_bin_name}}
+
+
+ 创 建 人:
+ {{item.create_user_name}} {{this.$u.timeFormat(item.create_time,'yyyy-mm-dd hh:ss:MM')}}
+
+
+ 审 核 人:
+ {{item.auditor_name}} {{this.$u.timeFormat(item.audit_date,'yyyy-mm-dd hh:ss:MM')}}
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessIn.vue b/src/pages/storegoods/storeGoodsBusinessIn.vue
new file mode 100644
index 0000000..4ceb03e
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessIn.vue
@@ -0,0 +1,249 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessInAdd.vue b/src/pages/storegoods/storeGoodsBusinessInAdd.vue
new file mode 100644
index 0000000..c78c048
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessInAdd.vue
@@ -0,0 +1,1072 @@
+
+
+
+
+ 进仓凭证
+
+ 进仓日期 {{$u.timeFormat(GoodsInBillDate, 'yyyy-mm-dd')}}
+
+
+ 单据类型*
+ {{BillTypeName ? BillTypeName : '请选择'}}
+
+
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 来源仓库:{{FromStoreName}}
+
+
+ 往来单位*
+ {{CustomerName ? CustomerName : '请选择'}}
+
+
+
+
+ 营销部门*
+ {{PlanDepartmentName ? PlanDepartmentName : '请选择'}}
+
+
+
+
+ 销 售 员:{{SaleUserName}}
+
+
+
+
+ 备注内容
+
+
+
+
+
+
+ 整缸
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+ 本单条数:{{BillSumRoll}}条
+ 本单重量:{{BillSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色重量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessInDetail.vue b/src/pages/storegoods/storeGoodsBusinessInDetail.vue
new file mode 100644
index 0000000..d5304b1
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessInDetail.vue
@@ -0,0 +1,583 @@
+
+
+
+
+ 单号:{{GoodsInBillNo}}
+ 日期:{{GoodsInBillDate}}
+
+
+ 单据类型:{{BillTypeName}}
+ 营销部门:{{PlanDepartmentName}}
+
+
+ 仓库名称:{{StoreName}}
+ 来源仓库:{{FromStoreName}}
+
+
+ 往来单位:{{CustomerName}}
+ 销 售 员:{{SaleUserName}}
+
+
+
+
+ 整缸
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+
+ 本单条数:{{BillSumRoll}}条
+ 本单重量:{{BillSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色重量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+
+
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessOut.vue b/src/pages/storegoods/storeGoodsBusinessOut.vue
new file mode 100644
index 0000000..e0ee31f
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessOut.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessOutAdd.vue b/src/pages/storegoods/storeGoodsBusinessOutAdd.vue
new file mode 100644
index 0000000..0e6d54b
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessOutAdd.vue
@@ -0,0 +1,1057 @@
+
+
+
+
+ 出仓凭证
+
+ 出仓日期 {{$u.timeFormat(GoodsOutBillDate, 'yyyy-mm-dd')}}
+
+
+ 单据类型*
+ {{BillTypeName ? BillTypeName : '请选择'}}
+
+
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 调至仓库*
+ {{ToStoreName ? ToStoreName : '请选择'}}
+
+
+
+
+ 往来单位*
+ {{CustomerName ? CustomerName : '请选择'}}
+
+
+
+
+ 营销部门*
+ {{PlanDepartmentName ? PlanDepartmentName : '请选择'}}
+
+
+
+
+ 销 售 员:{{SaleUserName}}
+
+
+
+
+ 备注内容
+
+
+
+
+
+
+ 整缸
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+ 本单条数:{{BillSumRoll}}条
+ 本单重量:{{BillSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色重量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+ {{commitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessOutDetail.vue b/src/pages/storegoods/storeGoodsBusinessOutDetail.vue
new file mode 100644
index 0000000..cef52a4
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessOutDetail.vue
@@ -0,0 +1,580 @@
+
+
+
+
+ 单号:{{GoodsOutBillNo}}
+ 日期:{{GoodsOutBillDate}}
+
+
+ 单据类型:{{BillTypeName}}
+ 营销部门:{{PlanDepartmentName}}
+
+
+ 仓库名称:{{StoreName}}
+ 调至仓库:{{ToStoreName}}
+
+
+ 往来单位:{{CustomerName}}
+ 销 售 员:{{SaleUserName}}
+
+
+
+
+ 整缸
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+
+ 本单条数:{{BillSumRoll}}条
+ 本单重量:{{BillSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色重量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessStationMove.vue b/src/pages/storegoods/storeGoodsBusinessStationMove.vue
new file mode 100644
index 0000000..9b3938b
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessStationMove.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessStationMoveAdd.vue b/src/pages/storegoods/storeGoodsBusinessStationMoveAdd.vue
new file mode 100644
index 0000000..185f07d
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessStationMoveAdd.vue
@@ -0,0 +1,955 @@
+
+
+
+
+ 移仓凭证
+
+ 移仓日期 {{$u.timeFormat(GoodsStationMoveBillDate, 'yyyy-mm-dd')}}
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 单据类型*
+ {{BillTypeName ? BillTypeName : '请选择'}}
+
+
+
+
+ 移出仓位*
+
+ {{FromStoreStationName}}
+
+
+ 整缸
+
+
+
+ 移至仓位*
+
+ {{StoreStationName}}
+
+
+ 整架
+
+
+
+
+ 备注内容
+
+
+
+
+
+
+
+ 删除
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+ 本单条数:{{BillSumRoll}}条
+ 本单重量:{{BillSumQty}}KG
+
+
+ 本架条数:{{StoreStationSumRoll}}条
+ 本架重量:{{StoreStationSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色重量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessStationMoveDetail.vue b/src/pages/storegoods/storeGoodsBusinessStationMoveDetail.vue
new file mode 100644
index 0000000..a1434bc
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessStationMoveDetail.vue
@@ -0,0 +1,657 @@
+
+
+
+
+ 单号:{{GoodsStationMoveBillNo}}
+ 日期:{{GoodsStationMoveBillDate}}
+
+
+ 仓库名称:{{StoreName}}
+ 仓位名称:{{ScanStoreStationName}}
+
+
+ 移出仓位*
+
+ {{FromStoreStationName}}
+
+ 整缸
+
+
+
+ 移至仓位*
+
+ {{StoreStationName}}
+
+ 整架
+
+
+
+
+
+ 删除
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+ 本单条数:{{BillSumRoll}}条
+ 本单重量:{{BillSumQty}}KG
+
+
+ 本架条数:{{StoreStationSumRoll}}条
+ 本架重量:{{StoreStationSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色重量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸重量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+ {{CommitType ? '消审' : '审核'}}
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsBusinessStationMoveOnly.vue b/src/pages/storegoods/storeGoodsBusinessStationMoveOnly.vue
new file mode 100644
index 0000000..af4f6aa
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsBusinessStationMoveOnly.vue
@@ -0,0 +1,716 @@
+
+
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+
+ {{FromStoreStationName}}
+
+ 整缸
+
+
+
+
+ {{ToStoreStationName}}
+
+ 整架
+
+
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 成品编号:{{FabricGoodsNo}}
+ 成品重量:{{GoodsQty}}KG
+
+
+ 成品色号:{{GoodsCodeNo}}
+ 成品颜色:{{GoodsCodeName}}
+
+
+ 成品缸号:{{CrockNo}}
+ 缸号卷号:{{GoodsBillNo}}
+
+
+
+ 本架条数:{{StoreStationSumRoll}}条
+ 本架数量:{{StoreStationSumQty}}KG
+
+
+ 本色条数:{{GoodsCodeSumRoll}}条
+ 本色数量:{{GoodsCodeSumQty}}KG
+
+
+ 本缸条数:{{CrockNoSumRoll}}条
+ 本缸数量:{{CrockNoSumQty}}KG
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsScanOut.vue b/src/pages/storegoods/storeGoodsScanOut.vue
new file mode 100644
index 0000000..986f06a
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsScanOut.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsScanOutDetail.vue b/src/pages/storegoods/storeGoodsScanOutDetail.vue
new file mode 100644
index 0000000..7608370
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsScanOutDetail.vue
@@ -0,0 +1,586 @@
+
+
+
+
+ 排产单号:{{ProductWeaveNo}}
+ 排产日期:{{$u.timeFormat(ProductWeaveDate, 'yyyy-mm-dd')}}
+
+
+ 织厂名称:{{WeaveFactoryName}}
+ 商品编码:{{FabricEmbryoCodeNo}}
+
+
+ 坯布名称:{{FabricEmbryoName}}
+
+
+ 坯布颜色:{{EmbryoCodeName}}
+ 日产条数:{{WeaveMachineDayYieldQty}}条
+
+
+ 进度状态
+
+ {{WeaveCompleteTypeName ? WeaveCompleteTypeName : '请选择'}}
+
+
+
+
+
+ 生产情况:
+
+
+
+ 安排机台:
+
+ 染纱货期:
+
+
+
+ 派纱时间:
+
+ 上机时间:
+
+
+
+ 派纱备注:
+
+
+
+ 当前跟前天累计条数:{{TowDayInRoll}}条
+ 当天收布条数:{{ToDayInRoll}}条
+
+
+ 累计条数:{{SumInRoll}}条
+ 未织条数:
+
+
+
+ 欠胚数量:{{NotProductRoll}}条
+ 织厂存胚:
+
+
+
+ 回复交货时间:
+
+
+
+ 更改货期原因:
+
+
+
+ 成品间距:{{GoodsWeaveSpaceNames}}
+ 针 寸 数:{{NeedleInch}}
+
+
+ 织厂地址:{{WeaveFactoryContactAddress}}
+
+
+ 联 系 人:{{WeaveFactoryContactName}}
+ 织厂电话:{{WeaveFactoryContactPhone}}
+
+
+ 排产条数:{{WeaveRoll}}
+ 排产重量:{{WeaveQty}}
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storeGoodsScanOutview.vue b/src/pages/storegoods/storeGoodsScanOutview.vue
new file mode 100644
index 0000000..39ab168
--- /dev/null
+++ b/src/pages/storegoods/storeGoodsScanOutview.vue
@@ -0,0 +1,94 @@
+
+
+ 排产单号:{{item.ProductWeaveNo}} {{item.WeaveFactoryName}}
+
+ 排产日期:
+ {{item.ProductWeaveDate}}
+
+
+ 商品编码:
+ {{item.FabricEmbryoNo}}-{{item.EmbryoCodeNo}}#
+
+
+ 商品名称:
+ {{item.FabricEmbryoName}}
+
+
+ 商品颜色:
+ {{item.EmbryoCodeName}}
+
+
+ 进度状态:
+ {{item.WeaveCompleteTypeName}}
+
+
+ 生产情况:
+ {{item.WeaveFactoryWeaveRemark}}
+
+
+ 排产数量:
+ {{item.WeaveRoll}}条 {{item.WeaveQty}}Kg
+
+
+ 已产数量:
+ {{item.HasProductRoll}}条 {{item.HasProductQty}}Kg
+
+
+ 派纱时间:
+ {{item.WeaveFactorySendYarn}}
+
+
+ 派纱备注:
+ {{item.WeaveFactorySendRemark}}
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storegoods.vue b/src/pages/storegoods/storegoods.vue
new file mode 100644
index 0000000..2791185
--- /dev/null
+++ b/src/pages/storegoods/storegoods.vue
@@ -0,0 +1,151 @@
+
+
+
+
+ 颜色:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storegoodsstoreallin.vue b/src/pages/storegoods/storegoodsstoreallin.vue
new file mode 100644
index 0000000..f46d2d2
--- /dev/null
+++ b/src/pages/storegoods/storegoodsstoreallin.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总条数:{{GoodsSumRoll}}
+ 总重量:{{GoodsSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storegoodsstoreallout.vue b/src/pages/storegoods/storegoodsstoreallout.vue
new file mode 100644
index 0000000..977d7dc
--- /dev/null
+++ b/src/pages/storegoods/storegoodsstoreallout.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总条数:{{GoodsSumRoll}}
+ 总重量:{{GoodsSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storegoods/storegoodsstoresearch.vue b/src/pages/storegoods/storegoodsstoresearch.vue
new file mode 100644
index 0000000..1e23121
--- /dev/null
+++ b/src/pages/storegoods/storegoodsstoresearch.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总条数:{{GoodsSumRoll}}
+ 总重量:{{GoodsSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnBusinessCheck.vue b/src/pages/storeyarn/storeYarnBusinessCheck.vue
new file mode 100644
index 0000000..c735f75
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnBusinessCheck.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnBusinessCheckAdd.vue b/src/pages/storeyarn/storeYarnBusinessCheckAdd.vue
new file mode 100644
index 0000000..b0922ce
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnBusinessCheckAdd.vue
@@ -0,0 +1,986 @@
+
+
+
+
+ 盘点凭证
+
+ 盘点日期 {{$u.timeFormat(CheckBillDate, 'yyyy-mm-dd')}}
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 单据类型*
+ {{BillTypeName ? BillTypeName : '请选择'}}
+
+
+
+
+ 往来单位*
+ {{CustomerName ? CustomerName : '请选择'}}
+
+
+
+
+ 仓位编号*
+
+ 仓位名称:{{StoreStationName}}
+
+
+
+ 备注内容
+
+
+
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 原料名称:{{YarnName}}
+ 原料缸号:{{YarnCrockNo}}
+
+
+ 原料色号:{{YarnColorNo}}
+ 原料颜色:{{YarnColorName}}
+
+
+ 本缸盘前:{{YarnCrockNoOldRoll}}件
+ 本缸盘前:{{YarnCrockNoOldQty}}Kg
+
+
+ 本缸实盘:{{YarnCrockNoNewRoll}}件
+ 本缸实盘:{{YarnCrockNoNewQty}}Kg
+
+
+ 本缸盈亏:{{YarnCrockNoSumRoll}}件
+ 本缸盈亏:{{YarnCrockNoSumQty}}Kg
+
+
+
+ 本单盘前:{{YarnOldRoll}}件
+ 本单盘前:{{YarnOldQty}}Kg
+
+
+ 本单实盘:{{YarnNewRoll}}件
+ 本单实盘:{{YarnNewQty}}Kg
+
+
+ 本单盈亏:{{YarnSumRoll}}件
+ 本单盈亏:{{YarnSumQty}}Kg
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnBusinessCheckDetail.vue b/src/pages/storeyarn/storeYarnBusinessCheckDetail.vue
new file mode 100644
index 0000000..3697cd9
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnBusinessCheckDetail.vue
@@ -0,0 +1,533 @@
+
+
+
+
+ 单号:{{BillNo}}
+ 日期:{{BillDate}}
+
+
+ 往来单位:{{CustomerName}}
+ 仓库名称:{{StoreName}}
+
+
+ 仓位编号:
+
+ 仓库名称:{{StoreStationName}}
+
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 原料名称:{{YarnName}}
+ 原料缸号:{{YarnCrockNo}}
+
+
+ 原料色号:{{YarnColorNo}}
+ 原料颜色:{{YarnColorName}}
+
+
+ 本缸盘前:{{YarnCrockNoOldRoll}}件
+ 本缸盘前:{{YarnCrockNoOldQty}}Kg
+
+
+ 本缸实盘:{{YarnCrockNoNewRoll}}件
+ 本缸实盘:{{YarnCrockNoNewQty}}Kg
+
+
+ 本缸盈亏:{{YarnCrockNoSumRoll}}件
+ 本缸盈亏:{{YarnCrockNoSumQty}}Kg
+
+
+
+ 本单盘前:{{YarnOldRoll}}件
+ 本单盘前:{{YarnOldQty}}Kg
+
+
+ 本单实盘:{{YarnNewRoll}}件
+ 本单实盘:{{YarnNewQty}}Kg
+
+
+ 本单盈亏:{{YarnSumRoll}}件
+ 本单盈亏:{{YarnSumQty}}Kg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnBusinessIn.vue b/src/pages/storeyarn/storeYarnBusinessIn.vue
new file mode 100644
index 0000000..3f6a9ad
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnBusinessIn.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnBusinessInDetail.vue b/src/pages/storeyarn/storeYarnBusinessInDetail.vue
new file mode 100644
index 0000000..6ffe625
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnBusinessInDetail.vue
@@ -0,0 +1,467 @@
+
+
+
+
+ 单号:{{BillNo}}
+ 日期:{{BillDate}}
+
+
+ 往来单位:{{CustomerName}}
+ 仓库名称:{{StoreName}}
+
+
+
+
+ 名称:{{StoreStationName}}
+
+
+
+
+
+ 原料名称:{{YarnName}}
+ 原料缸号:{{YarnCrockNo}}
+
+
+ 原料色号:{{YarnColorNo}}
+ 原料颜色:{{YarnColorName}}
+
+
+ 共:{{YarnCrockNoSumRoll}}件
+ 已扫:{{YarnCrockNoHasScanRoll}}件
+ 未扫:{{YarnCrockNoNotScanRoll}}件
+
+
+ {{BillDataMessage}}
+
+
+ 总件数:{{YarnSumRoll}}
+ 总重量:{{YarnSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnBusinessOut.vue b/src/pages/storeyarn/storeYarnBusinessOut.vue
new file mode 100644
index 0000000..66fa0ba
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnBusinessOut.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnBusinessOutAdd.vue b/src/pages/storeyarn/storeYarnBusinessOutAdd.vue
new file mode 100644
index 0000000..c5a5221
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnBusinessOutAdd.vue
@@ -0,0 +1,838 @@
+
+
+
+
+ 出仓凭证
+
+ 出仓日期 {{$u.timeFormat(OutBillDate, 'yyyy-mm-dd')}}
+
+
+ 仓库名称*
+ {{StoreName ? StoreName : '请选择'}}
+
+
+
+
+ 单据类型*
+ {{BillTypeName ? BillTypeName : '请选择'}}
+
+
+
+
+ 往来单位*
+ {{CustomerName ? CustomerName : '请选择'}}
+
+
+
+
+
+ 备注内容
+
+
+
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 原料名称:{{YarnName}}
+ 原料缸号:{{YarnCrockNo}}
+
+
+ 原料色号:{{YarnColorNo}}
+ 原料颜色:{{YarnColorName}}
+
+
+ 本缸已扫:{{YarnCrockNoSumRoll}}件
+ 本缸已扫:{{YarnCrockNoSumQty}}Kg
+
+
+ 总件数:{{YarnSumRoll}}
+ 总重量:{{YarnSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+ {{pageType ? '保存' : '提交'}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnBusinessOutDetail.vue b/src/pages/storeyarn/storeYarnBusinessOutDetail.vue
new file mode 100644
index 0000000..9efe403
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnBusinessOutDetail.vue
@@ -0,0 +1,403 @@
+
+
+
+
+ 单号:{{BillNo}}
+ 日期:{{BillDate}}
+
+
+ 往来单位:{{CustomerName}}
+ 仓库名称:{{StoreName}}
+
+
+
+
+
+ 原料名称:{{YarnName}}
+ 原料缸号:{{YarnCrockNo}}
+
+
+ 原料色号:{{YarnColorNo}}
+ 原料颜色:{{YarnColorName}}
+
+
+ 本缸已扫:{{YarnCrockNoSumRoll}}件
+ 本缸已扫:{{YarnCrockNoSumQty}}Kg
+
+
+ {{BillDataMessage}}
+
+
+ 总件数:{{YarnSumRoll}}
+ 总重量:{{YarnSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnInStore.vue b/src/pages/storeyarn/storeYarnInStore.vue
new file mode 100644
index 0000000..1eb33da
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnInStore.vue
@@ -0,0 +1,555 @@
+
+
+
+
+
+ 名称:{{StoreStationName}}
+
+
+
+
+
+
+
+ {{YarnGoodsName}}
+ 缸号:{{YarnCrockNo}}
+
+
+ {{YarnGoodsCodeNo}} {{YarnGoodsCodeName}} {{YarnGoodsColorNo}}
+
+ 显示明细
+
+
+
+ 箱号:{{YarnBoxBillNo}}
+ 个数:{{YarnBoxRoll}}
+ 毛重:{{YarnGrossQty}}
+ 净重:{{YarnNetQty}}
+
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 缸号件数:{{YarnCrockNoRoll}}
+ 缸号毛重:{{YarnCrockNoGrossQty}}
+ 缸号净重:{{YarnCrockNoNetQty}}
+
+
+ 本单件数:{{YarnBillSumRoll}}
+ 本单毛重:{{YarnBillSumGrossQty}}
+ 本单净重:{{YarnBillSumNetQty}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnInStoreBack.vue b/src/pages/storeyarn/storeYarnInStoreBack.vue
new file mode 100644
index 0000000..164299d
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnInStoreBack.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+ 名称:{{model.stationStationName}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnMoveStore.vue b/src/pages/storeyarn/storeYarnMoveStore.vue
new file mode 100644
index 0000000..e057a84
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnMoveStore.vue
@@ -0,0 +1,468 @@
+
+
+
+
+
+ 名称:{{StoreStationName}}
+
+
+
+ {{YarnGoodsName}}
+ 缸号:{{YarnCrockNo}}
+
+
+ {{YarnGoodsCodeNo}} {{YarnGoodsCodeName}} {{YarnGoodsColorNo}}
+
+ 显示明细
+
+
+
+ 箱号:{{YarnBoxBillNo}}
+ 个数:{{YarnBoxRoll}}
+ 毛重:{{YarnGrossQty}}
+ 净重:{{YarnNetQty}}
+
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 缸号件数:{{YarnCrockNoRoll}}
+ 缸号毛重:{{YarnCrockNoGrossQty}}
+ 缸号净重:{{YarnCrockNoNetQty}}
+
+
+ 仓位件数:{{YarnBillSumRoll}}
+ 仓位毛重:{{YarnBillSumGrossQty}}
+ 仓位净重:{{YarnBillSumNetQty}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeYarnProduceWeave.vue b/src/pages/storeyarn/storeYarnProduceWeave.vue
new file mode 100644
index 0000000..12aa88b
--- /dev/null
+++ b/src/pages/storeyarn/storeYarnProduceWeave.vue
@@ -0,0 +1,449 @@
+
+
+
+
+
+
+
+
+
+ {{YarnGoodsName}}
+ 缸号:{{YarnCrockNo}}
+
+
+ {{YarnGoodsCodeNo}} {{YarnGoodsCodeName}} {{YarnGoodsColorNo}}
+
+
+ 箱号:{{YarnBoxBillNo}}
+ 个数:{{YarnBoxRoll}}
+ 毛重:{{YarnGrossQty}}
+ 净重:{{YarnNetQty}}
+
+
+
+
+
+ {{BillDataMessage}}
+
+
+ 需求件数:{{YarnPlanRoll}}
+ 需求重量:{{YarnPlanQty}}
+
+
+ 已扫件数:{{YarnScanRoll}}
+ 已扫重量:{{YarnScanQty}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeyarnstoreallin.vue b/src/pages/storeyarn/storeyarnstoreallin.vue
new file mode 100644
index 0000000..6099d38
--- /dev/null
+++ b/src/pages/storeyarn/storeyarnstoreallin.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总件数:{{YarnSumRoll}}
+ 总重量:{{YarnSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeyarnstoreallout.vue b/src/pages/storeyarn/storeyarnstoreallout.vue
new file mode 100644
index 0000000..adab7c5
--- /dev/null
+++ b/src/pages/storeyarn/storeyarnstoreallout.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总件数:{{YarnSumRoll}}
+ 总重量:{{YarnSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/storeyarn/storeyarnstoresearch.vue b/src/pages/storeyarn/storeyarnstoresearch.vue
new file mode 100644
index 0000000..ae7d872
--- /dev/null
+++ b/src/pages/storeyarn/storeyarnstoresearch.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 总件数:{{YarnSumRoll}}
+ 总重量:{{YarnSumQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/book/index.scss b/src/pages/sys/book/index.scss
new file mode 100644
index 0000000..1be6959
--- /dev/null
+++ b/src/pages/sys/book/index.scss
@@ -0,0 +1,35 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+
+.toolbar {
+ padding-top: 5px;
+ background-color: #fff;
+}
+.wrap .box .item{
+ margin: 0 0 0px;
+ border-radius: 0;
+ .title {
+ padding-left:0;
+ .text {
+ font-size: 30rpx;
+ font-weight:500;
+ margin: 0;
+ color: #202328;
+ }
+ }
+}
+.grid {
+
+ .grid-icon {
+ color: #666;
+ }
+
+ .grid-text {
+ font-size: 24rpx;
+ padding: 15rpx;
+ color: #202328;
+ }
+}
diff --git a/src/pages/sys/book/index.vue b/src/pages/sys/book/index.vue
new file mode 100644
index 0000000..e23384e
--- /dev/null
+++ b/src/pages/sys/book/index.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+ 已经到底了
+
+
+
+
+
diff --git a/src/pages/sys/book/personal-details.vue b/src/pages/sys/book/personal-details.vue
new file mode 100644
index 0000000..f80e7f5
--- /dev/null
+++ b/src/pages/sys/book/personal-details.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+ 安静
+ 员工编号:8888 8888
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/home/index.scss b/src/pages/sys/home/index.scss
new file mode 100644
index 0000000..1be6959
--- /dev/null
+++ b/src/pages/sys/home/index.scss
@@ -0,0 +1,35 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+
+.toolbar {
+ padding-top: 5px;
+ background-color: #fff;
+}
+.wrap .box .item{
+ margin: 0 0 0px;
+ border-radius: 0;
+ .title {
+ padding-left:0;
+ .text {
+ font-size: 30rpx;
+ font-weight:500;
+ margin: 0;
+ color: #202328;
+ }
+ }
+}
+.grid {
+
+ .grid-icon {
+ color: #666;
+ }
+
+ .grid-text {
+ font-size: 24rpx;
+ padding: 15rpx;
+ color: #202328;
+ }
+}
diff --git a/src/pages/sys/home/index.vue b/src/pages/sys/home/index.vue
new file mode 100644
index 0000000..bf464fc
--- /dev/null
+++ b/src/pages/sys/home/index.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+ 已经到底了
+
+
+
+
+
diff --git a/src/pages/sys/login/code.vue b/src/pages/sys/login/code.vue
new file mode 100644
index 0000000..e385254
--- /dev/null
+++ b/src/pages/sys/login/code.vue
@@ -0,0 +1,113 @@
+
+
+ 验证手机号
+ 请输入发送至{{phoneNo}}的6位验证码,有效期10分钟。如未收到,请重新获取验证码
+
+
+ {{loadTime}}秒后可重新获取验证码
+
+
+
+ {{tips}}
+
+
+
+
+
diff --git a/src/pages/sys/login/forget.vue b/src/pages/sys/login/forget.vue
new file mode 100644
index 0000000..271857a
--- /dev/null
+++ b/src/pages/sys/login/forget.vue
@@ -0,0 +1,149 @@
+
+
+ 忘记密码
+
+
+
+
+
+
+
+ 获取验证码
+
+
+
+
diff --git a/src/pages/sys/login/index.scss b/src/pages/sys/login/index.scss
new file mode 100644
index 0000000..3f2368a
--- /dev/null
+++ b/src/pages/sys/login/index.scss
@@ -0,0 +1,114 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+.wrap {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+}
+.pages-sys-login-index .wrap {
+ background: url(../../../static/aidex/login-bg.png) no-repeat left top;
+ background-size: 100% auto;
+
+}
+
+.list {
+ display: flex;
+ flex-direction: column;
+ padding: 40rpx 70rpx 40rpx 70rpx;
+}
+
+.list-call {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding-top: 10rpx;
+ height: 120rpx;
+ font-weight: normal;
+ color: #333333;
+ border-bottom: 0.5px solid #e2e2e2;
+}
+
+.list-call .u-input {
+ flex: 1;
+ font-size: 39rpx;
+ text-align: left;
+ margin-left: 16rpx;
+}
+
+.list-call .u-icon-right {
+ color: #aaaaaa;
+ width: 50rpx;
+ height: 40rpx;
+}
+
+.button {
+ color: #ffffff;
+ font-size: 32rpx;
+ width: 80%;
+ height: 80rpx;
+ background: #497bff;
+ box-shadow: 0rpx 0rpx 13rpx 0rpx rgba(15, 168, 250, 0.4);
+ border-radius: 10rpx;
+ line-height: 80rpx;
+ text-align: center;
+ margin: 50rpx auto 0;
+}
+
+.img-valid-code img {
+ width: 30rpx;
+ heigth: 50rpx;
+}
+
+.btn-valid-code {
+ color: #da7918;
+ font-size: 30rpx;
+ line-height: 48rpx;
+ padding: 6rpx 35rpx;
+ border: 1rpx solid #da7918;
+ border-radius: 50rpx;
+}
+
+.btn-valid-code-hover {
+ background-color: #f3f3f3;
+}
+
+.btn-valid-codes {
+ color: #999999 !important;
+ border: 1rpx solid #999999;
+}
+.login-bottom-box{
+ position: fixed;
+ bottom:40rpx;
+ text-align: center;
+ width: 100%;
+}
+.copyright{
+ text-align: center;
+ color: #939393;
+ width: 100%;
+ font-size: 24rpx;
+ .u-link{
+ margin: 0 10rpx;
+ font-size: 24rpx!important;
+ }
+}
+
+.pages-sys-login-index, .pages-sys-login-reg, .pages-sys-login-forget {
+ .u-checkbox__label{
+ font-size: 28rpx!important;
+ }
+ .u-label{
+ flex: 0 0 35px!important;
+ width: 35px!important;
+ }
+}
+.reg-text{
+ font-size: 42rpx;
+ color: #000;
+ padding: 40rpx 70rpx 10rpx;
+}
\ No newline at end of file
diff --git a/src/pages/sys/login/index.vue b/src/pages/sys/login/index.vue
new file mode 100644
index 0000000..d15c690
--- /dev/null
+++ b/src/pages/sys/login/index.vue
@@ -0,0 +1,554 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getApiUrlLabel() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('login.autoLogin')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 版本: {{ appVersion }}
+
+
+
+
+
+
diff --git a/src/pages/sys/login/reg.vue b/src/pages/sys/login/reg.vue
new file mode 100644
index 0000000..0973305
--- /dev/null
+++ b/src/pages/sys/login/reg.vue
@@ -0,0 +1,91 @@
+
+
+ 欢迎注册
+
+
+
+
+
+
+
+ 获取验证码
+
+
+ 注册即代表您已阅读并同意用户协议 与 隐私政策
+
+
+
+
+
+
diff --git a/src/pages/sys/login/registerCode.vue b/src/pages/sys/login/registerCode.vue
new file mode 100644
index 0000000..29882b6
--- /dev/null
+++ b/src/pages/sys/login/registerCode.vue
@@ -0,0 +1,111 @@
+
+
+ 验证手机号
+ 请输入发送至{{phoneNo}}的6位验证码,有效期10分钟。如未收到,请重新获取验证码
+
+
+ {{loadTime}}秒后可重新获取验证码
+
+
+
+ {{tips}}
+
+
+
+
+
diff --git a/src/pages/sys/msg/details.vue b/src/pages/sys/msg/details.vue
new file mode 100644
index 0000000..e2c9d43
--- /dev/null
+++ b/src/pages/sys/msg/details.vue
@@ -0,0 +1,306 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 发起人
+ 05-08 12:12
+
+
+
+
+
+
+
+
+
+
+ 部门领导
+ 05-08 12:12
+
+ 同意
+
+
+
+
+
+
+
+
+
+ 公司领导
+ 05-08 12:12
+
+ 同意
+
+
+
+
+
+ 拒绝
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/msg/examine-item.vue b/src/pages/sys/msg/examine-item.vue
new file mode 100644
index 0000000..f4d3535
--- /dev/null
+++ b/src/pages/sys/msg/examine-item.vue
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+
+ 11:05
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+ 11月10日 15:32
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+ 11月08日 10:05
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+ 已经到底了
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+ 已经到底了
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+ 已经到底了
+
+
+
+
+
+
diff --git a/src/pages/sys/msg/form.vue b/src/pages/sys/msg/form.vue
new file mode 100644
index 0000000..c365c5b
--- /dev/null
+++ b/src/pages/sys/msg/form.vue
@@ -0,0 +1,98 @@
+
+
+ AiDex Sharp快速开发平台
+
+ 系统管理员 发起于 2021-4-20 12:30
+
+
+
+ AiDex Sharp快速开发平台:基于若依-ruoyi-vue项目扩展,前端采用Ant-Design-VUE,代码易读易懂、界面简洁美观,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,我们将把UI交互、快速开发能力追求到极致,适配国产数据库,国产中间件,将支持多租户、flowable工作流,移动APP,更多插件正在扩展中。
+
+
+
+
+
+ aidex 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能(经典架构会的人多),让开发者注重专注业务,其余有平台来封装技术细节,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。
+
+
+ aidex 自 2013 年发布以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中,aidex 架构精良、易于扩展、大众思维的设计模式、工匠精神打磨每一个细节,深入开发者的内心,并荣获开源中国《最受欢迎中国开源软件》奖杯,期间也帮助了不少刚毕业的大学生,教师作为入门教材,快速的去实践。
+
+
+ aidex 的升级,作者结合了多年总结和经验,以及各方面的应用案例,对架构完成了一次全部重构,也纳入很多新的思想。不管是从开发者模式、底层架构、逻辑处理还是到用户界面,用户交互体验上都有很大的进步,在不忘学习成本、提高开发效率的情况下,安全方面也做和很多工作,包括:身份认证、密码策略、安全审计、日志收集等众多安全选项供你选择。努力为大中小微企业打造全方位企业级快速开发解决方案。
+
`
+
+
+
+
+
+
diff --git a/src/pages/sys/msg/index.vue b/src/pages/sys/msg/index.vue
new file mode 100644
index 0000000..a67a1a0
--- /dev/null
+++ b/src/pages/sys/msg/index.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/msg/list-item.vue b/src/pages/sys/msg/list-item.vue
new file mode 100644
index 0000000..4272f20
--- /dev/null
+++ b/src/pages/sys/msg/list-item.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+ 11:05
+
+
+
+ 在常用的社交分享组件中,微信(微信好友和朋友圈)、微博、QQ(QQ好友和QQ空间)是三大主要平台 ...
+
+
+
+
+ 11月10日 15:32
+
+
+
+ 在常用的社交分享组件中,微信(微信好友和朋友圈)、微博、QQ(QQ好友和QQ空间)是三大主要平台 ...
+
+
+
+
+ 11月08日 10:05
+
+
+
+ 在常用的社交分享组件中,微信(微信好友和朋友圈)、微博、QQ(QQ好友和QQ空间)是三大主要平台 ...
+
+
+
+
+ 11月08日 09:32
+
+
+
+ 在常用的社交分享组件中,微信(微信好友和朋友圈)、微博、QQ(QQ好友和QQ空间)是三大主要平台 ...
+
+
+
+
+ 已经到底了
+
+
+
+
+
diff --git a/src/pages/sys/user/about.vue b/src/pages/sys/user/about.vue
new file mode 100644
index 0000000..e1895f3
--- /dev/null
+++ b/src/pages/sys/user/about.vue
@@ -0,0 +1,101 @@
+
+
+
+
+ 浩拓移动APP
+
+
+
+
+
+
+
+ 13925931455
+
+
+
+
+
+
+
+
+
+ 公众号
+
+
+
+ 扫一扫 加我微信
+
+
+
+ 版权所有
+ Copyright © 2021 baidu.com
+
+
+
+
+
diff --git a/src/pages/sys/user/clear-cache.vue b/src/pages/sys/user/clear-cache.vue
new file mode 100644
index 0000000..f566367
--- /dev/null
+++ b/src/pages/sys/user/clear-cache.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+ {{ cacheSize }}
+
+
+
+
+ 清除缓存
+
+
+
+
+
diff --git a/src/pages/sys/user/comment.vue b/src/pages/sys/user/comment.vue
new file mode 100644
index 0000000..5da40ea
--- /dev/null
+++ b/src/pages/sys/user/comment.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/user/currency.vue b/src/pages/sys/user/currency.vue
new file mode 100644
index 0000000..220f80d
--- /dev/null
+++ b/src/pages/sys/user/currency.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+ 关闭后,将停止检查新配布单并停止相关通知。
+
+
+
+ 关闭后,当收到消息的时候,只显示有提示,不显示消息内容。
+
+
+
+
+ 前往系统设置中,修改声音与振动
+
+
+
+
+
+ 当本软件有新版本发布时,给予提醒
+
+
+
+
+
+
diff --git a/src/pages/sys/user/help.vue b/src/pages/sys/user/help.vue
new file mode 100644
index 0000000..f788ded
--- /dev/null
+++ b/src/pages/sys/user/help.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+ {{child.name}}
+ 发送者:{{child.createByName}} | 时间:{{child.createDate}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/user/index.scss b/src/pages/sys/user/index.scss
new file mode 100644
index 0000000..82864e7
--- /dev/null
+++ b/src/pages/sys/user/index.scss
@@ -0,0 +1,130 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+.header {
+ background-color: #5b95ff;
+
+ .userinfo {
+ display: flex;
+ padding: 0rpx 30rpx 10rpx;
+
+ .image {
+ flex-shrink: 0;
+ width: 100rpx;
+ height: 100rpx;
+ image {
+ border-radius: 100%;
+ width: 100%;
+ height: 100%;
+ }
+ }
+
+ .info {
+ display: flex;
+ flex-flow: wrap;
+ padding-left: 30rpx;
+ color: #fff;
+
+ .username {
+ width: 100%;
+ font-size: 40rpx;
+ }
+
+ .usercode {
+ height: 36rpx;
+ padding: 0 20rpx;
+ margin-top: 10rpx;
+ background-color: rgba(0, 0, 0, 0.1);
+ border-radius: 20rpx;
+ font-size: 20rpx;
+ }
+ }
+ }
+
+ .logout {
+ flex-shrink: 0;
+ position: absolute;
+ right: 70rpx;
+ top: 65rpx;
+ .u-btn {
+ font-size: 30rpx;
+ }
+ }
+}
+
+.toolbar {
+ padding: 0 4%;
+ margin-bottom: 5rpx;
+ border-radius: 0 0 100% 100%;
+ background-color: #4094ff;
+
+ .box {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-around;
+ padding: 10rpx;
+ border-radius: 15rpx;
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.15);
+ background-color: #fefefe;
+
+ .item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ // flex-flow: wrap;
+ height: 120rpx;
+ color: #666666;
+ font-size: 30rpx;
+ padding: 10rpx 10rpx;
+
+ .icon {
+ font-size: 50rpx;
+ }
+
+ .label {
+ padding: 10rpx;
+ }
+ }
+
+ .hover {
+ background-color: #f6f6f6;
+ border-radius: 15rpx;
+ }
+ }
+}
+.uni-input-input{
+ border: 1px solid red;
+}
+.userinfo-topbox{
+ padding: 10px 15px;
+ color: #ffffff;
+ .number{
+ font-size: 20px;
+ em{
+ font-style: normal;
+ font-size: 12px;
+ }
+ }
+}
+.user-order-top{
+ padding: 10px 15px;
+ background: #ffffff;
+}
+.user-order-box{
+ padding: 10px 15px;
+ background: #ffffff;
+ border-bottom: 1px solid #ededed;
+ .u-col{
+ position: relative;
+ }
+ .u-badge{
+ top:-8px!important;
+ right:5px!important;
+ background: #ff7001;
+ border: 1px solid #ffffff;
+ box-sizing: content-box;
+ }
+}
\ No newline at end of file
diff --git a/src/pages/sys/user/index.vue b/src/pages/sys/user/index.vue
new file mode 100644
index 0000000..81e5112
--- /dev/null
+++ b/src/pages/sys/user/index.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/user/info.vue b/src/pages/sys/user/info.vue
new file mode 100644
index 0000000..767fe53
--- /dev/null
+++ b/src/pages/sys/user/info.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+ {{UserInfo.CompanyName}}
+ {{UserInfo.DepartmentName}}
+ {{UserInfo.EmployeeName}}
+ {{UserInfo.DutyNames}}
+ {{UserInfo.EmployeeMobile}}
+ {{UserInfo.EmployeeEmail}}
+
+
+
+
+
+
diff --git a/src/pages/sys/user/modify.vue b/src/pages/sys/user/modify.vue
new file mode 100644
index 0000000..b065494
--- /dev/null
+++ b/src/pages/sys/user/modify.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/user/problem.vue b/src/pages/sys/user/problem.vue
new file mode 100644
index 0000000..8ecf870
--- /dev/null
+++ b/src/pages/sys/user/problem.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/user/pwd.vue b/src/pages/sys/user/pwd.vue
new file mode 100644
index 0000000..732d9c1
--- /dev/null
+++ b/src/pages/sys/user/pwd.vue
@@ -0,0 +1,126 @@
+
+
+ 请设置登录密码
+ 定期更新密码提高安全性
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 密码必须是8-16位的数字,字符组合(不能是纯数字)
+
+
+
+
+
diff --git a/src/pages/sys/user/service.vue b/src/pages/sys/user/service.vue
new file mode 100644
index 0000000..a5575b5
--- /dev/null
+++ b/src/pages/sys/user/service.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/user/setting.vue b/src/pages/sys/user/setting.vue
new file mode 100644
index 0000000..280a500
--- /dev/null
+++ b/src/pages/sys/user/setting.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
diff --git a/src/pages/sys/workbench/add-form.vue b/src/pages/sys/workbench/add-form.vue
new file mode 100644
index 0000000..74a434b
--- /dev/null
+++ b/src/pages/sys/workbench/add-form.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+ 李毅的请假申请2021年10月24日
+
+
+
+
+ 假期类型:年假
+
+
+ 开始时间:2021年10月25日14:30
+
+
+ 结束时间:2021年10月27日14:30
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/workbench/index - 副本 (2).vue b/src/pages/sys/workbench/index - 副本 (2).vue
new file mode 100644
index 0000000..e8d21ce
--- /dev/null
+++ b/src/pages/sys/workbench/index - 副本 (2).vue
@@ -0,0 +1,280 @@
+
+
+
+ 销售管理
+
+
+
+
+
+
+ 销售预约
+
+
+
+
+
+ 生产排产
+
+
+
+
+
+ 成品配布
+
+
+
+
+
+ 销售付运
+
+
+
+ 成品管理
+
+
+
+
+
+
+ 染整进仓
+
+
+
+
+
+ 成品进仓
+
+
+
+
+
+ 成品出仓
+
+
+
+
+
+ 成品盘点
+
+
+
+
+
+ 成品移架
+
+
+
+
+
+ 成品库存
+
+
+
+
+
+ 进仓查询
+
+
+
+
+
+ 出仓查询
+
+
+
+ 坯布管理
+
+
+
+
+
+
+ 坯布进仓
+
+
+
+
+
+ 坯布出仓
+
+
+
+
+
+ 坯布盘点
+
+
+
+
+
+ 坯布移架
+
+
+
+
+
+ 坯布库存
+
+
+
+
+
+ 进仓查询
+
+
+
+
+
+ 出仓查询
+
+
+
+ 原料管理
+
+
+
+
+
+
+ 原料进仓
+
+
+
+
+
+ 原料出仓
+
+
+
+
+
+ 织造配纱
+
+
+
+
+
+ 原料盘点
+
+
+
+
+
+ 原料移架
+
+
+
+
+
+ 原料库存
+
+
+
+
+
+ 进仓查询
+
+
+
+
+
+ 出仓查询
+
+
+
+
+
+ 进仓上架
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/workbench/index - 副本.vue b/src/pages/sys/workbench/index - 副本.vue
new file mode 100644
index 0000000..5144be6
--- /dev/null
+++ b/src/pages/sys/workbench/index - 副本.vue
@@ -0,0 +1,207 @@
+
+
+
+ 常用应用
+
+
+
+
+
+
+ 请假申请
+
+
+
+
+
+ 合同申请
+
+
+
+
+
+ 出差申请
+
+
+
+
+
+ 日报
+
+
+
+
+
+ 邮件
+
+
+
+
+
+ 会议室
+
+
+
+
+
+ 添加常用
+
+
+
+ 日常办公
+
+
+
+
+
+
+ 用车
+
+
+
+
+
+ 加班
+
+
+
+
+
+ 考勤
+
+
+
+
+
+ 耗材
+
+
+
+
+
+ 接待
+
+
+
+
+
+ 报名
+
+
+
+ 财务报销
+
+
+
+
+
+
+ 费用报销
+
+
+
+
+
+ 采购申请
+
+
+
+
+
+ 付款申请
+
+
+
+
+
+ 用章申请
+
+
+
+ 已经到底了
+
+
+
+
+
diff --git a/src/pages/sys/workbench/index.scss b/src/pages/sys/workbench/index.scss
new file mode 100644
index 0000000..53af608
--- /dev/null
+++ b/src/pages/sys/workbench/index.scss
@@ -0,0 +1,35 @@
+/*!
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * @author aidex
+ * @version 2020-9-1
+ */
+
+.toolbar {
+
+ background-color: #fff;
+}
+.wrap .box .item{
+ margin: 0 0 0px;
+ border-radius: 0;
+ .title {
+ padding-left:0;
+ .text {
+ font-size: 30rpx;
+ font-weight:500;
+ margin: 0;
+ color: #202328;
+ }
+ }
+}
+.grid {
+
+ .grid-icon {
+ color: #666;
+ }
+
+ .grid-text {
+ font-size: 24rpx;
+ padding: 15rpx;
+ color: #202328;
+ }
+}
diff --git a/src/pages/sys/workbench/index.vue b/src/pages/sys/workbench/index.vue
new file mode 100644
index 0000000..8e83b68
--- /dev/null
+++ b/src/pages/sys/workbench/index.vue
@@ -0,0 +1,406 @@
+
+
+
+
+
+
+
+
+
+ 销售管理
+
+
+
+
+
+
+ 成品配布
+
+
+
+
+
+ 标签检测
+
+
+
+ 成品管理
+
+
+
+
+
+
+ 染整进仓
+
+
+
+
+
+ 成品进仓
+
+
+
+
+
+ 成品出仓
+
+
+
+
+
+ 成品盘点
+
+
+
+
+
+ 成品移架
+
+
+
+
+
+ 成品库存
+
+
+
+
+
+ 进仓查询
+
+
+
+
+
+ 出仓查询
+
+
+
+
+
+
+
+
diff --git a/src/pages/sys/workbench/install.vue b/src/pages/sys/workbench/install.vue
new file mode 100644
index 0000000..ecc4cdc
--- /dev/null
+++ b/src/pages/sys/workbench/install.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
+
+ 常用应用
+
+
+
+
+
+
+ 请假申请
+
+
+
+
+
+
+ 合同申请
+
+
+
+
+
+
+ 出差申请
+
+
+
+
+
+
+ 日报
+
+
+
+
+
+
+ 邮件
+
+
+
+
+
+
+ 会议室
+
+
+
+
+ 日常办公
+
+
+
+
+
+
+ 用车
+
+
+
+
+
+
+ 加班
+
+
+
+
+
+
+ 考勤
+
+
+
+
+
+
+ 耗材
+
+
+
+
+
+
+ 接待
+
+
+
+
+
+
+ 报名
+
+
+
+
+ 财务报销
+
+
+
+
+
+
+ 费用报销
+
+
+
+
+
+
+ 采购申请
+
+
+
+
+
+
+ 付款申请
+
+
+
+
+
+
+ 用章申请
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/testData/form.vue b/src/pages/testData/form.vue
new file mode 100644
index 0000000..11fc568
--- /dev/null
+++ b/src/pages/testData/form.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/testData/index.vue b/src/pages/testData/index.vue
new file mode 100644
index 0000000..36fc46f
--- /dev/null
+++ b/src/pages/testData/index.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+ {{item.testInput || item.id}}
+ 创建者:{{item.createBy}} | 时间:{{item.createDate}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/static/aidex/banner/banner01.png b/src/static/aidex/banner/banner01.png
new file mode 100644
index 0000000..0e2750d
Binary files /dev/null and b/src/static/aidex/banner/banner01.png differ
diff --git a/src/static/aidex/banner/banner01.png1 b/src/static/aidex/banner/banner01.png1
new file mode 100644
index 0000000..9017d1d
Binary files /dev/null and b/src/static/aidex/banner/banner01.png1 differ
diff --git a/src/static/aidex/banner/banner02.png b/src/static/aidex/banner/banner02.png
new file mode 100644
index 0000000..0e2750d
Binary files /dev/null and b/src/static/aidex/banner/banner02.png differ
diff --git a/src/static/aidex/banner/banner02.png2 b/src/static/aidex/banner/banner02.png2
new file mode 100644
index 0000000..81f7a7b
Binary files /dev/null and b/src/static/aidex/banner/banner02.png2 differ
diff --git a/src/static/aidex/banner/banner03.png b/src/static/aidex/banner/banner03.png
new file mode 100644
index 0000000..0e2750d
Binary files /dev/null and b/src/static/aidex/banner/banner03.png differ
diff --git a/src/static/aidex/banner/banner03.png3 b/src/static/aidex/banner/banner03.png3
new file mode 100644
index 0000000..fca71be
Binary files /dev/null and b/src/static/aidex/banner/banner03.png3 differ
diff --git a/src/static/aidex/favicon.png b/src/static/aidex/favicon.png
new file mode 100644
index 0000000..72734e5
Binary files /dev/null and b/src/static/aidex/favicon.png differ
diff --git a/src/static/aidex/images/code01.jpg b/src/static/aidex/images/code01.jpg
new file mode 100644
index 0000000..65860ef
Binary files /dev/null and b/src/static/aidex/images/code01.jpg differ
diff --git a/src/static/aidex/images/code02.jpg b/src/static/aidex/images/code02.jpg
new file mode 100644
index 0000000..2a78bf4
Binary files /dev/null and b/src/static/aidex/images/code02.jpg differ
diff --git a/src/static/aidex/images/head.png b/src/static/aidex/images/head.png
new file mode 100644
index 0000000..38cc9d9
Binary files /dev/null and b/src/static/aidex/images/head.png differ
diff --git a/src/static/aidex/images/list-icon.png b/src/static/aidex/images/list-icon.png
new file mode 100644
index 0000000..ac895cf
Binary files /dev/null and b/src/static/aidex/images/list-icon.png differ
diff --git a/src/static/aidex/images/new-pic.png b/src/static/aidex/images/new-pic.png
new file mode 100644
index 0000000..9a1b26d
Binary files /dev/null and b/src/static/aidex/images/new-pic.png differ
diff --git a/src/static/aidex/images/service02.png b/src/static/aidex/images/service02.png
new file mode 100644
index 0000000..eb2466c
Binary files /dev/null and b/src/static/aidex/images/service02.png differ
diff --git a/src/static/aidex/images/user01.png b/src/static/aidex/images/user01.png
new file mode 100644
index 0000000..9f5a73b
Binary files /dev/null and b/src/static/aidex/images/user01.png differ
diff --git a/src/static/aidex/images/user02.png b/src/static/aidex/images/user02.png
new file mode 100644
index 0000000..1da676e
Binary files /dev/null and b/src/static/aidex/images/user02.png differ
diff --git a/src/static/aidex/images/user03.png b/src/static/aidex/images/user03.png
new file mode 100644
index 0000000..3f9b2ae
Binary files /dev/null and b/src/static/aidex/images/user03.png differ
diff --git a/src/static/aidex/images/user04.png b/src/static/aidex/images/user04.png
new file mode 100644
index 0000000..1b3852c
Binary files /dev/null and b/src/static/aidex/images/user04.png differ
diff --git a/src/static/aidex/images/user05.png b/src/static/aidex/images/user05.png
new file mode 100644
index 0000000..5ef71a7
Binary files /dev/null and b/src/static/aidex/images/user05.png differ
diff --git a/src/static/aidex/images/user06.png b/src/static/aidex/images/user06.png
new file mode 100644
index 0000000..254edbc
Binary files /dev/null and b/src/static/aidex/images/user06.png differ
diff --git a/src/static/aidex/login-bg.png b/src/static/aidex/login-bg.png
new file mode 100644
index 0000000..7034b20
Binary files /dev/null and b/src/static/aidex/login-bg.png differ
diff --git a/src/static/aidex/login/eye_close.png b/src/static/aidex/login/eye_close.png
new file mode 100644
index 0000000..66d6ea1
Binary files /dev/null and b/src/static/aidex/login/eye_close.png differ
diff --git a/src/static/aidex/login/eye_open.png b/src/static/aidex/login/eye_open.png
new file mode 100644
index 0000000..5aaab64
Binary files /dev/null and b/src/static/aidex/login/eye_open.png differ
diff --git a/src/static/aidex/tabbar/apply_1.png b/src/static/aidex/tabbar/apply_1.png
new file mode 100644
index 0000000..d7bb945
Binary files /dev/null and b/src/static/aidex/tabbar/apply_1.png differ
diff --git a/src/static/aidex/tabbar/apply_2.png b/src/static/aidex/tabbar/apply_2.png
new file mode 100644
index 0000000..3c6d6d2
Binary files /dev/null and b/src/static/aidex/tabbar/apply_2.png differ
diff --git a/src/static/aidex/tabbar/book_1.png b/src/static/aidex/tabbar/book_1.png
new file mode 100644
index 0000000..1de05a9
Binary files /dev/null and b/src/static/aidex/tabbar/book_1.png differ
diff --git a/src/static/aidex/tabbar/book_2.png b/src/static/aidex/tabbar/book_2.png
new file mode 100644
index 0000000..d822b4b
Binary files /dev/null and b/src/static/aidex/tabbar/book_2.png differ
diff --git a/src/static/aidex/tabbar/home_1.png b/src/static/aidex/tabbar/home_1.png
new file mode 100644
index 0000000..ae36a45
Binary files /dev/null and b/src/static/aidex/tabbar/home_1.png differ
diff --git a/src/static/aidex/tabbar/home_2.png b/src/static/aidex/tabbar/home_2.png
new file mode 100644
index 0000000..7b1bae8
Binary files /dev/null and b/src/static/aidex/tabbar/home_2.png differ
diff --git a/src/static/aidex/tabbar/msg_1.png b/src/static/aidex/tabbar/msg_1.png
new file mode 100644
index 0000000..7916c48
Binary files /dev/null and b/src/static/aidex/tabbar/msg_1.png differ
diff --git a/src/static/aidex/tabbar/msg_2.png b/src/static/aidex/tabbar/msg_2.png
new file mode 100644
index 0000000..9bbe6fd
Binary files /dev/null and b/src/static/aidex/tabbar/msg_2.png differ
diff --git a/src/static/aidex/tabbar/my_1.png b/src/static/aidex/tabbar/my_1.png
new file mode 100644
index 0000000..1f946b0
Binary files /dev/null and b/src/static/aidex/tabbar/my_1.png differ
diff --git a/src/static/aidex/tabbar/my_2.png b/src/static/aidex/tabbar/my_2.png
new file mode 100644
index 0000000..7718e50
Binary files /dev/null and b/src/static/aidex/tabbar/my_2.png differ
diff --git a/src/static/audio/apperror.wav b/src/static/audio/apperror.wav
new file mode 100644
index 0000000..555040c
Binary files /dev/null and b/src/static/audio/apperror.wav differ
diff --git a/src/static/audio/appright.wav b/src/static/audio/appright.wav
new file mode 100644
index 0000000..f8d4292
Binary files /dev/null and b/src/static/audio/appright.wav differ
diff --git a/src/static/audio/ninyouxindepeibudan.mp3 b/src/static/audio/ninyouxindepeibudan.mp3
new file mode 100644
index 0000000..148a592
Binary files /dev/null and b/src/static/audio/ninyouxindepeibudan.mp3 differ
diff --git a/src/static/common/img/iPhoneX.png b/src/static/common/img/iPhoneX.png
new file mode 100644
index 0000000..257ba00
Binary files /dev/null and b/src/static/common/img/iPhoneX.png differ
diff --git a/src/static/common/js/touch-emulator.js b/src/static/common/js/touch-emulator.js
new file mode 100644
index 0000000..9632413
--- /dev/null
+++ b/src/static/common/js/touch-emulator.js
@@ -0,0 +1,363 @@
+(function(window, document, exportName, undefined) {
+ "use strict";
+
+ var isMultiTouch = false;
+ var multiTouchStartPos;
+ var eventTarget;
+ var touchElements = {};
+
+ // polyfills
+ if(!document.createTouch) {
+ document.createTouch = function(view, target, identifier, pageX, pageY, screenX, screenY, clientX, clientY) {
+ // auto set
+ if(clientX == undefined || clientY == undefined) {
+ clientX = pageX - window.pageXOffset;
+ clientY = pageY - window.pageYOffset;
+ }
+
+ return new Touch(target, identifier, {
+ pageX: pageX,
+ pageY: pageY,
+ screenX: screenX,
+ screenY: screenY,
+ clientX: clientX,
+ clientY: clientY
+ });
+ };
+ }
+
+ if(!document.createTouchList) {
+ document.createTouchList = function() {
+ var touchList = new TouchList();
+ for (var i = 0; i < arguments.length; i++) {
+ touchList[i] = arguments[i];
+ }
+ touchList.length = arguments.length;
+ return touchList;
+ };
+ }
+
+ /**
+ * create an touch point
+ * @constructor
+ * @param target
+ * @param identifier
+ * @param pos
+ * @param deltaX
+ * @param deltaY
+ * @returns {Object} touchPoint
+ */
+ function Touch(target, identifier, pos, deltaX, deltaY) {
+ deltaX = deltaX || 0;
+ deltaY = deltaY || 0;
+
+ this.identifier = identifier;
+ this.target = target;
+ this.clientX = pos.clientX + deltaX;
+ this.clientY = pos.clientY + deltaY;
+ this.screenX = pos.screenX + deltaX;
+ this.screenY = pos.screenY + deltaY;
+ this.pageX = pos.pageX + deltaX;
+ this.pageY = pos.pageY + deltaY;
+ }
+
+ /**
+ * create empty touchlist with the methods
+ * @constructor
+ * @returns touchList
+ */
+ function TouchList() {
+ var touchList = [];
+
+ touchList.item = function(index) {
+ return this[index] || null;
+ };
+
+ // specified by Mozilla
+ touchList.identifiedTouch = function(id) {
+ return this[id + 1] || null;
+ };
+
+ return touchList;
+ }
+
+
+ /**
+ * Simple trick to fake touch event support
+ * this is enough for most libraries like Modernizr and Hammer
+ */
+ function fakeTouchSupport() {
+ var objs = [window, document.documentElement];
+ var props = ['ontouchstart', 'ontouchmove', 'ontouchcancel', 'ontouchend'];
+
+ for(var o=0; o 2; // pointer events
+ }
+
+ /**
+ * disable mouseevents on the page
+ * @param ev
+ */
+ function preventMouseEvents(ev) {
+ // 注释启用默认事件
+ // ev.preventDefault();
+ // ev.stopPropagation();
+ }
+
+ /**
+ * only trigger touches when the left mousebutton has been pressed
+ * @param touchType
+ * @returns {Function}
+ */
+ function onMouse(touchType) {
+ return function(ev) {
+ // prevent mouse events
+ preventMouseEvents(ev);
+
+ if (ev.which !== 1) {
+ return;
+ }
+
+ // The EventTarget on which the touch point started when it was first placed on the surface,
+ // even if the touch point has since moved outside the interactive area of that element.
+ // also, when the target doesnt exist anymore, we update it
+ if (ev.type == 'mousedown' || !eventTarget || (eventTarget && !eventTarget.dispatchEvent)) {
+ eventTarget = ev.target;
+ }
+
+ // shiftKey has been lost, so trigger a touchend
+ if (isMultiTouch && !ev.shiftKey) {
+ triggerTouch('touchend', ev);
+ isMultiTouch = false;
+ }
+
+ triggerTouch(touchType, ev);
+
+ // we're entering the multi-touch mode!
+ if (!isMultiTouch && ev.shiftKey) {
+ isMultiTouch = true;
+ multiTouchStartPos = {
+ pageX: ev.pageX,
+ pageY: ev.pageY,
+ clientX: ev.clientX,
+ clientY: ev.clientY,
+ screenX: ev.screenX,
+ screenY: ev.screenY
+ };
+ triggerTouch('touchstart', ev);
+ }
+
+ // reset
+ if (ev.type == 'mouseup') {
+ multiTouchStartPos = null;
+ isMultiTouch = false;
+ eventTarget = null;
+ }
+ }
+ }
+
+ /**
+ * trigger a touch event
+ * @param eventName
+ * @param mouseEv
+ */
+ function triggerTouch(eventName, mouseEv) {
+ var touchEvent = document.createEvent('Event');
+ touchEvent.initEvent(eventName, true, true);
+
+ touchEvent.altKey = mouseEv.altKey;
+ touchEvent.ctrlKey = mouseEv.ctrlKey;
+ touchEvent.metaKey = mouseEv.metaKey;
+ touchEvent.shiftKey = mouseEv.shiftKey;
+
+ touchEvent.touches = getActiveTouches(mouseEv, eventName);
+ touchEvent.targetTouches = getActiveTouches(mouseEv, eventName);
+ touchEvent.changedTouches = getChangedTouches(mouseEv, eventName);
+
+ eventTarget.dispatchEvent(touchEvent);
+ }
+
+ /**
+ * create a touchList based on the mouse event
+ * @param mouseEv
+ * @returns {TouchList}
+ */
+ function createTouchList(mouseEv) {
+ var touchList = new TouchList();
+
+ if (isMultiTouch) {
+ var f = TouchEmulator.multiTouchOffset;
+ var deltaX = multiTouchStartPos.pageX - mouseEv.pageX;
+ var deltaY = multiTouchStartPos.pageY - mouseEv.pageY;
+
+ touchList.push(new Touch(eventTarget, 1, multiTouchStartPos, (deltaX*-1) - f, (deltaY*-1) + f));
+ touchList.push(new Touch(eventTarget, 2, multiTouchStartPos, deltaX+f, deltaY-f));
+ } else {
+ touchList.push(new Touch(eventTarget, 1, mouseEv, 0, 0));
+ }
+
+ return touchList;
+ }
+
+ /**
+ * receive all active touches
+ * @param mouseEv
+ * @returns {TouchList}
+ */
+ function getActiveTouches(mouseEv, eventName) {
+ // empty list
+ if (mouseEv.type == 'mouseup') {
+ return new TouchList();
+ }
+
+ var touchList = createTouchList(mouseEv);
+ if(isMultiTouch && mouseEv.type != 'mouseup' && eventName == 'touchend') {
+ touchList.splice(1, 1);
+ }
+ return touchList;
+ }
+
+ /**
+ * receive a filtered set of touches with only the changed pointers
+ * @param mouseEv
+ * @param eventName
+ * @returns {TouchList}
+ */
+ function getChangedTouches(mouseEv, eventName) {
+ var touchList = createTouchList(mouseEv);
+
+ // we only want to return the added/removed item on multitouch
+ // which is the second pointer, so remove the first pointer from the touchList
+ //
+ // but when the mouseEv.type is mouseup, we want to send all touches because then
+ // no new input will be possible
+ if(isMultiTouch && mouseEv.type != 'mouseup' &&
+ (eventName == 'touchstart' || eventName == 'touchend')) {
+ touchList.splice(0, 1);
+ }
+
+ return touchList;
+ }
+
+ /**
+ * show the touchpoints on the screen
+ */
+ function showTouches(ev) {
+ var touch, i, el, styles;
+
+ // first all visible touches
+ for(i = 0; i < ev.touches.length; i++) {
+ touch = ev.touches[i];
+ el = touchElements[touch.identifier];
+ if(!el) {
+ el = touchElements[touch.identifier] = document.createElement("div");
+ document.body.appendChild(el);
+ }
+
+ styles = TouchEmulator.template(touch);
+ for(var prop in styles) {
+ el.style[prop] = styles[prop];
+ }
+ }
+
+ // remove all ended touches
+ if(ev.type == 'touchend' || ev.type == 'touchcancel') {
+ for(i = 0; i < ev.changedTouches.length; i++) {
+ touch = ev.changedTouches[i];
+ el = touchElements[touch.identifier];
+ if(el) {
+ el.parentNode.removeChild(el);
+ delete touchElements[touch.identifier];
+ }
+ }
+ }
+ }
+
+ /**
+ * TouchEmulator initializer
+ */
+ function TouchEmulator() {
+ if (hasTouchSupport()) {
+ return;
+ }
+
+ fakeTouchSupport();
+
+ window.addEventListener("mousedown", onMouse('touchstart'), true);
+ window.addEventListener("mousemove", onMouse('touchmove'), true);
+ window.addEventListener("mouseup", onMouse('touchend'), true);
+
+ window.addEventListener("mouseenter", preventMouseEvents, true);
+ window.addEventListener("mouseleave", preventMouseEvents, true);
+ window.addEventListener("mouseout", preventMouseEvents, true);
+ window.addEventListener("mouseover", preventMouseEvents, true);
+
+ // it uses itself!
+ window.addEventListener("touchstart", showTouches, true);
+ window.addEventListener("touchmove", showTouches, true);
+ window.addEventListener("touchend", showTouches, true);
+ window.addEventListener("touchcancel", showTouches, true);
+ }
+
+ // start distance when entering the multitouch mode
+ TouchEmulator.multiTouchOffset = 75;
+
+ /**
+ * css template for the touch rendering
+ * @param touch
+ * @returns object
+ */
+ TouchEmulator.template = function(touch) {
+ var size = 0;
+ var transform = 'translate('+ (touch.clientX-(size/2)) +'px, '+ (touch.clientY-(size/2)) +'px)';
+ return {
+ position: 'fixed',
+ left: 0,
+ top: 0,
+ background: '#fff',
+ border: 'solid 1px #999',
+ opacity: .6,
+ borderRadius: '100%',
+ height: size + 'px',
+ width: size + 'px',
+ padding: 0,
+ margin: 0,
+ display: 'block',
+ overflow: 'hidden',
+ pointerEvents: 'none',
+ webkitUserSelect: 'none',
+ mozUserSelect: 'none',
+ userSelect: 'none',
+ webkitTransform: transform,
+ mozTransform: transform,
+ transform: transform,
+ zIndex: 100
+ }
+ };
+
+ // export
+ if (typeof define == "function" && define.amd) {
+ define(function() {
+ return TouchEmulator;
+ });
+ } else if (typeof module != "undefined" && module.exports) {
+ module.exports = TouchEmulator;
+ } else {
+ window[exportName] = TouchEmulator;
+ }
+})(window, document, "TouchEmulator");
\ No newline at end of file
diff --git a/src/static/haotop/image/logo/1024.png b/src/static/haotop/image/logo/1024.png
new file mode 100644
index 0000000..82d4e34
Binary files /dev/null and b/src/static/haotop/image/logo/1024.png differ
diff --git a/src/static/haotop/image/logo/144.png b/src/static/haotop/image/logo/144.png
new file mode 100644
index 0000000..bab3368
Binary files /dev/null and b/src/static/haotop/image/logo/144.png differ
diff --git a/src/static/haotop/image/logo/192.png b/src/static/haotop/image/logo/192.png
new file mode 100644
index 0000000..bab3368
Binary files /dev/null and b/src/static/haotop/image/logo/192.png differ
diff --git a/src/static/haotop/image/logo/20191128033108937_easyicon_net_32.ico b/src/static/haotop/image/logo/20191128033108937_easyicon_net_32.ico
new file mode 100644
index 0000000..4d8972e
Binary files /dev/null and b/src/static/haotop/image/logo/20191128033108937_easyicon_net_32.ico differ
diff --git a/src/static/haotop/image/logo/20191128033140965_easyicon_net_32.ico b/src/static/haotop/image/logo/20191128033140965_easyicon_net_32.ico
new file mode 100644
index 0000000..7349429
Binary files /dev/null and b/src/static/haotop/image/logo/20191128033140965_easyicon_net_32.ico differ
diff --git a/src/static/haotop/image/logo/72.png b/src/static/haotop/image/logo/72.png
new file mode 100644
index 0000000..aeef3da
Binary files /dev/null and b/src/static/haotop/image/logo/72.png differ
diff --git a/src/static/haotop/image/logo/96.png b/src/static/haotop/image/logo/96.png
new file mode 100644
index 0000000..bab3368
Binary files /dev/null and b/src/static/haotop/image/logo/96.png differ
diff --git a/src/static/haotop/image/logo/Start.jpg b/src/static/haotop/image/logo/Start.jpg
new file mode 100644
index 0000000..0e2750d
Binary files /dev/null and b/src/static/haotop/image/logo/Start.jpg differ
diff --git a/src/static/haotop/image/logo/Start.png b/src/static/haotop/image/logo/Start.png
new file mode 100644
index 0000000..1128798
Binary files /dev/null and b/src/static/haotop/image/logo/Start.png differ
diff --git a/src/static/haotop/image/logo/logo.jpg b/src/static/haotop/image/logo/logo.jpg
new file mode 100644
index 0000000..4b513d8
Binary files /dev/null and b/src/static/haotop/image/logo/logo.jpg differ
diff --git a/src/static/haotop/image/logo/logoBack.png b/src/static/haotop/image/logo/logoBack.png
new file mode 100644
index 0000000..aeef3da
Binary files /dev/null and b/src/static/haotop/image/logo/logoBack.png differ
diff --git a/src/static/icon/baojiadan.png b/src/static/icon/baojiadan.png
new file mode 100644
index 0000000..d1c2112
Binary files /dev/null and b/src/static/icon/baojiadan.png differ
diff --git a/src/static/icon/business.png b/src/static/icon/business.png
new file mode 100644
index 0000000..c92a250
Binary files /dev/null and b/src/static/icon/business.png differ
diff --git a/src/static/icon/client.png b/src/static/icon/client.png
new file mode 100644
index 0000000..5e83351
Binary files /dev/null and b/src/static/icon/client.png differ
diff --git a/src/static/icon/contacts.png b/src/static/icon/contacts.png
new file mode 100644
index 0000000..95e6145
Binary files /dev/null and b/src/static/icon/contacts.png differ
diff --git a/src/static/icon/contract.png b/src/static/icon/contract.png
new file mode 100644
index 0000000..8c45ecd
Binary files /dev/null and b/src/static/icon/contract.png differ
diff --git a/src/static/icon/daohang.png b/src/static/icon/daohang.png
new file mode 100644
index 0000000..f8bb0fe
Binary files /dev/null and b/src/static/icon/daohang.png differ
diff --git a/src/static/icon/dianhua.png b/src/static/icon/dianhua.png
new file mode 100644
index 0000000..269ae40
Binary files /dev/null and b/src/static/icon/dianhua.png differ
diff --git a/src/static/icon/duanxin.png b/src/static/icon/duanxin.png
new file mode 100644
index 0000000..96a052b
Binary files /dev/null and b/src/static/icon/duanxin.png differ
diff --git a/src/static/icon/gengduosz.png b/src/static/icon/gengduosz.png
new file mode 100644
index 0000000..6a70c22
Binary files /dev/null and b/src/static/icon/gengduosz.png differ
diff --git a/src/static/icon/genjin.png b/src/static/icon/genjin.png
new file mode 100644
index 0000000..b6f427e
Binary files /dev/null and b/src/static/icon/genjin.png differ
diff --git a/src/static/icon/haibao.png b/src/static/icon/haibao.png
new file mode 100644
index 0000000..467599e
Binary files /dev/null and b/src/static/icon/haibao.png differ
diff --git a/src/static/icon/hezuo.png b/src/static/icon/hezuo.png
new file mode 100644
index 0000000..04697e7
Binary files /dev/null and b/src/static/icon/hezuo.png differ
diff --git a/src/static/icon/loading.gif b/src/static/icon/loading.gif
new file mode 100644
index 0000000..39134a7
Binary files /dev/null and b/src/static/icon/loading.gif differ
diff --git a/src/static/icon/location.png b/src/static/icon/location.png
new file mode 100644
index 0000000..ab9c8e1
Binary files /dev/null and b/src/static/icon/location.png differ
diff --git a/src/static/icon/location1.png b/src/static/icon/location1.png
new file mode 100644
index 0000000..79f153c
Binary files /dev/null and b/src/static/icon/location1.png differ
diff --git a/src/static/icon/mingpian.png b/src/static/icon/mingpian.png
new file mode 100644
index 0000000..365fb5f
Binary files /dev/null and b/src/static/icon/mingpian.png differ
diff --git a/src/static/icon/qiandao.png b/src/static/icon/qiandao.png
new file mode 100644
index 0000000..b60c7c3
Binary files /dev/null and b/src/static/icon/qiandao.png differ
diff --git a/src/static/icon/returnedMoney.png b/src/static/icon/returnedMoney.png
new file mode 100644
index 0000000..38d844c
Binary files /dev/null and b/src/static/icon/returnedMoney.png differ
diff --git a/src/static/icon/shop.png b/src/static/icon/shop.png
new file mode 100644
index 0000000..9d0dacb
Binary files /dev/null and b/src/static/icon/shop.png differ
diff --git a/src/static/icon/touxiangn.png b/src/static/icon/touxiangn.png
new file mode 100644
index 0000000..24025a3
Binary files /dev/null and b/src/static/icon/touxiangn.png differ
diff --git a/src/static/icon/touxiangnan.png b/src/static/icon/touxiangnan.png
new file mode 100644
index 0000000..7bf7f00
Binary files /dev/null and b/src/static/icon/touxiangnan.png differ
diff --git a/src/static/icon/xiajiantou.png b/src/static/icon/xiajiantou.png
new file mode 100644
index 0000000..f695382
Binary files /dev/null and b/src/static/icon/xiajiantou.png differ
diff --git a/src/static/icon/youjian.png b/src/static/icon/youjian.png
new file mode 100644
index 0000000..53cfc74
Binary files /dev/null and b/src/static/icon/youjian.png differ
diff --git a/src/static/icon/zzhishi.png b/src/static/icon/zzhishi.png
new file mode 100644
index 0000000..1639f27
Binary files /dev/null and b/src/static/icon/zzhishi.png differ
diff --git a/src/static/iconfont/iconfont.css b/src/static/iconfont/iconfont.css
new file mode 100644
index 0000000..b917e57
--- /dev/null
+++ b/src/static/iconfont/iconfont.css
@@ -0,0 +1,463 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 2874232 */
+ src: url('~@/static/iconfont/iconfont.woff2?t=1636514770782') format('woff2'),
+ url('~@/static/iconfont/iconfont.woff?t=1636514770782') format('woff'),
+ url('~@/static/iconfont/iconfont.ttf?t=1636514770782') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-minus-circle-fill:before {
+ content: "\e844";
+}
+
+.icon-close-circle-fill:before {
+ content: "\e845";
+}
+
+.icon-plus-circle-fill:before {
+ content: "\e846";
+}
+
+.icon-tupian:before {
+ content: "\e8ba";
+}
+
+.icon-xiangji:before {
+ content: "\e8bc";
+}
+
+.icon-zengjia:before {
+ content: "\e8c0";
+}
+
+.icon-youhuiquan:before {
+ content: "\e8c1";
+}
+
+.icon-quanbudingdan:before {
+ content: "\e600";
+}
+
+.icon-moban:before {
+ content: "\e6bb";
+}
+
+.icon-hetongqianzi:before {
+ content: "\e615";
+}
+
+.icon-gongwujiedai:before {
+ content: "\e609";
+}
+
+.icon-kaoqinchuqin:before {
+ content: "\e8d0";
+}
+
+.icon-haocaifei:before {
+ content: "\e6bc";
+}
+
+.icon-huiyishi1:before {
+ content: "\e662";
+}
+
+.icon-baoming1:before {
+ content: "\e632";
+}
+
+.icon-jiabanshenqing:before {
+ content: "\e651";
+}
+
+.icon-hetongxieyi:before {
+ content: "\e64b";
+}
+
+.icon-jiabanshenpi:before {
+ content: "\e774";
+}
+
+.icon-yongche:before {
+ content: "\e601";
+}
+
+.icon-baoming:before {
+ content: "\e664";
+}
+
+.icon-qingjia:before {
+ content: "\e624";
+}
+
+.icon-tianshenpi:before {
+ content: "\eb67";
+}
+
+.icon-icon_yingyongguanli:before {
+ content: "\eb8f";
+}
+
+.icon-xingzhuang-xingxing:before {
+ content: "\eb9a";
+}
+
+.icon-gongnengdingyi:before {
+ content: "\ebb7";
+}
+
+.icon-kongxinduigou:before {
+ content: "\ebe5";
+}
+
+.icon-tianjia:before {
+ content: "\e620";
+}
+
+.icon-chucha:before {
+ content: "\e60f";
+}
+
+.icon-gongdan:before {
+ content: "\ec37";
+}
+
+.icon-daibanshixiang2:before {
+ content: "\ec4e";
+}
+
+.icon-bianjisekuai:before {
+ content: "\ec7c";
+}
+
+.icon-hetongguanli:before {
+ content: "\e625";
+}
+
+.icon-huiyishi:before {
+ content: "\e608";
+}
+
+.icon-ribao:before {
+ content: "\e835";
+}
+
+.icon-banjieshiwu:before {
+ content: "\e602";
+}
+
+.icon-daibanshiwu:before {
+ content: "\e603";
+}
+
+.icon-kaoheguanli:before {
+ content: "\e606";
+}
+
+.icon-shiyanshikaohe:before {
+ content: "\e607";
+}
+
+.icon-baoxiao:before {
+ content: "\e605";
+}
+
+.icon-shenpi:before {
+ content: "\e626";
+}
+
+.icon-baoxiaodan:before {
+ content: "\e61b";
+}
+
+.icon-xinwen:before {
+ content: "\e639";
+}
+
+.icon-tongzhi:before {
+ content: "\e648";
+}
+
+.icon-fujian:before {
+ content: "\e655";
+}
+
+.icon-msg-system:before {
+ content: "\e6b9";
+}
+
+.icon-daibanshixiang:before {
+ content: "\e65d";
+}
+
+.icon-tongzhi1:before {
+ content: "\e64a";
+}
+
+.icon-daibanshixiang1:before {
+ content: "\e6ba";
+}
+
+.icon-search:before {
+ content: "\e6b4";
+}
+
+.icon-view-list:before {
+ content: "\e6b5";
+}
+
+.icon-headset-one:before {
+ content: "\e6b6";
+}
+
+.icon-list-checkbox:before {
+ content: "\e6b7";
+}
+
+.icon-jiyika:before {
+ content: "\e6b8";
+}
+
+.icon-chart-histogram-two:before {
+ content: "\e679";
+}
+
+.icon-audit:before {
+ content: "\e67a";
+}
+
+.icon-check-one:before {
+ content: "\e67b";
+}
+
+.icon-bookmark-one:before {
+ content: "\e67c";
+}
+
+.icon-a-comment1:before {
+ content: "\e67d";
+}
+
+.icon-avatar:before {
+ content: "\e67e";
+}
+
+.icon-collection-files:before {
+ content: "\e67f";
+}
+
+.icon-copy-one:before {
+ content: "\e680";
+}
+
+.icon-add:before {
+ content: "\e681";
+}
+
+.icon-currency:before {
+ content: "\e682";
+}
+
+.icon-edit-two:before {
+ content: "\e683";
+}
+
+.icon-finance:before {
+ content: "\e684";
+}
+
+.icon-find:before {
+ content: "\e685";
+}
+
+.icon-folder-plus:before {
+ content: "\e686";
+}
+
+.icon-link-break:before {
+ content: "\e687";
+}
+
+.icon-financing-one:before {
+ content: "\e688";
+}
+
+.icon-help:before {
+ content: "\e689";
+}
+
+.icon-chart-pie:before {
+ content: "\e68a";
+}
+
+.icon-id-card:before {
+ content: "\e68b";
+}
+
+.icon-a-lock1:before {
+ content: "\e68c";
+}
+
+.icon-list:before {
+ content: "\e68d";
+}
+
+.icon-lock:before {
+ content: "\e68e";
+}
+
+.icon-key:before {
+ content: "\e68f";
+}
+
+.icon-a-key1:before {
+ content: "\e690";
+}
+
+.icon-me:before {
+ content: "\e691";
+}
+
+.icon-equalizer:before {
+ content: "\e692";
+}
+
+.icon-comment:before {
+ content: "\e693";
+}
+
+.icon-log:before {
+ content: "\e694";
+}
+
+.icon-mall-bag:before {
+ content: "\e695";
+}
+
+.icon-list-view:before {
+ content: "\e696";
+}
+
+.icon-send:before {
+ content: "\e697";
+}
+
+.icon-people:before {
+ content: "\e698";
+}
+
+.icon-peoples:before {
+ content: "\e699";
+}
+
+.icon-a-message-one1:before {
+ content: "\e69a";
+}
+
+.icon-phone-telephone:before {
+ content: "\e69b";
+}
+
+.icon-internal-transmission:before {
+ content: "\e69c";
+}
+
+.icon-schedule:before {
+ content: "\e69d";
+}
+
+.icon-more-one:before {
+ content: "\e69e";
+}
+
+.icon-sim:before {
+ content: "\e69f";
+}
+
+.icon-a-peoples1:before {
+ content: "\e6a0";
+}
+
+.icon-wallet:before {
+ content: "\e6a1";
+}
+
+.icon-permissions:before {
+ content: "\e6a2";
+}
+
+.icon-faan:before {
+ content: "\e6a3";
+}
+
+.icon-transporter:before {
+ content: "\e6a4";
+}
+
+.icon-transaction-order:before {
+ content: "\e6a5";
+}
+
+.icon-message-one:before {
+ content: "\e6a6";
+}
+
+.icon-shouji:before {
+ content: "\e6a7";
+}
+
+.icon-liebiaochakanmoshi_view-grid-list:before {
+ content: "\e6a8";
+}
+
+.icon-time:before {
+ content: "\e6a9";
+}
+
+.icon-transaction:before {
+ content: "\e6aa";
+}
+
+.icon-setting-two:before {
+ content: "\e6ab";
+}
+
+.icon-plan:before {
+ content: "\e6ac";
+}
+
+.icon-a-time1:before {
+ content: "\e6ad";
+}
+
+.icon-shezhi_setting:before {
+ content: "\e6ae";
+}
+
+.icon-zanting:before {
+ content: "\e6af";
+}
+
+.icon-sousuo_search:before {
+ content: "\e6b0";
+}
+
+.icon-xiangqingliebiao:before {
+ content: "\e6b1";
+}
+
+.icon-workbench:before {
+ content: "\e6b2";
+}
+
+.icon-shujubiao_data-sheet:before {
+ content: "\e6b3";
+}
+
diff --git a/src/static/iconfont/iconfont.ttf b/src/static/iconfont/iconfont.ttf
new file mode 100644
index 0000000..290fccc
Binary files /dev/null and b/src/static/iconfont/iconfont.ttf differ
diff --git a/src/static/iconfont/iconfont.woff b/src/static/iconfont/iconfont.woff
new file mode 100644
index 0000000..f05247a
Binary files /dev/null and b/src/static/iconfont/iconfont.woff differ
diff --git a/src/static/iconfont/iconfont.woff2 b/src/static/iconfont/iconfont.woff2
new file mode 100644
index 0000000..c6d614b
Binary files /dev/null and b/src/static/iconfont/iconfont.woff2 differ
diff --git a/src/static/img/bangzhu.png b/src/static/img/bangzhu.png
new file mode 100644
index 0000000..0c80b11
Binary files /dev/null and b/src/static/img/bangzhu.png differ
diff --git a/src/static/img/chahua/dataNullXz.png b/src/static/img/chahua/dataNullXz.png
new file mode 100644
index 0000000..f4b089c
Binary files /dev/null and b/src/static/img/chahua/dataNullXz.png differ
diff --git a/src/static/img/chahua/gjNull.png b/src/static/img/chahua/gjNull.png
new file mode 100644
index 0000000..0615923
Binary files /dev/null and b/src/static/img/chahua/gjNull.png differ
diff --git a/src/static/img/chahua/riChengAnPai.png b/src/static/img/chahua/riChengAnPai.png
new file mode 100644
index 0000000..39da8f4
Binary files /dev/null and b/src/static/img/chahua/riChengAnPai.png differ
diff --git a/src/static/img/dataNull.png b/src/static/img/dataNull.png
new file mode 100644
index 0000000..110f8b2
Binary files /dev/null and b/src/static/img/dataNull.png differ
diff --git a/src/static/img/enter.png b/src/static/img/enter.png
new file mode 100644
index 0000000..6580bbf
Binary files /dev/null and b/src/static/img/enter.png differ
diff --git a/src/static/img/gongsi.png b/src/static/img/gongsi.png
new file mode 100644
index 0000000..d4299ec
Binary files /dev/null and b/src/static/img/gongsi.png differ
diff --git a/src/static/img/guanyuwomen.png b/src/static/img/guanyuwomen.png
new file mode 100644
index 0000000..628ce0f
Binary files /dev/null and b/src/static/img/guanyuwomen.png differ
diff --git a/src/static/img/login/2.png b/src/static/img/login/2.png
new file mode 100644
index 0000000..3aaf908
Binary files /dev/null and b/src/static/img/login/2.png differ
diff --git a/src/static/img/login/3.png b/src/static/img/login/3.png
new file mode 100644
index 0000000..0a0bf7a
Binary files /dev/null and b/src/static/img/login/3.png differ
diff --git a/src/static/img/login/bianhao.png b/src/static/img/login/bianhao.png
new file mode 100644
index 0000000..c383e4e
Binary files /dev/null and b/src/static/img/login/bianhao.png differ
diff --git a/src/static/img/login/mm.png b/src/static/img/login/mm.png
new file mode 100644
index 0000000..a5ddfd7
Binary files /dev/null and b/src/static/img/login/mm.png differ
diff --git a/src/static/img/login/sj.png b/src/static/img/login/sj.png
new file mode 100644
index 0000000..f2d7407
Binary files /dev/null and b/src/static/img/login/sj.png differ
diff --git a/src/static/img/login/xm.png b/src/static/img/login/xm.png
new file mode 100644
index 0000000..fd8e974
Binary files /dev/null and b/src/static/img/login/xm.png differ
diff --git a/src/static/img/login/yz.png b/src/static/img/login/yz.png
new file mode 100644
index 0000000..89f99a5
Binary files /dev/null and b/src/static/img/login/yz.png differ
diff --git a/src/static/img/logo.png b/src/static/img/logo.png
new file mode 100644
index 0000000..ab0f423
Binary files /dev/null and b/src/static/img/logo.png differ
diff --git a/src/static/img/shangwuhz.png b/src/static/img/shangwuhz.png
new file mode 100644
index 0000000..3ed966c
Binary files /dev/null and b/src/static/img/shangwuhz.png differ
diff --git a/src/static/img/shezhi.png b/src/static/img/shezhi.png
new file mode 100644
index 0000000..2b64ee3
Binary files /dev/null and b/src/static/img/shezhi.png differ
diff --git a/src/static/img/shouji.png b/src/static/img/shouji.png
new file mode 100644
index 0000000..1cf4224
Binary files /dev/null and b/src/static/img/shouji.png differ
diff --git a/src/static/img/tianyancha.png b/src/static/img/tianyancha.png
new file mode 100644
index 0000000..c1a7e5c
Binary files /dev/null and b/src/static/img/tianyancha.png differ
diff --git a/src/static/img/vip.png b/src/static/img/vip.png
new file mode 100644
index 0000000..692c6b2
Binary files /dev/null and b/src/static/img/vip.png differ
diff --git a/src/static/img/yijian.png b/src/static/img/yijian.png
new file mode 100644
index 0000000..5da13ed
Binary files /dev/null and b/src/static/img/yijian.png differ
diff --git a/src/static/index.html b/src/static/index.html
new file mode 100644
index 0000000..fb69cd7
--- /dev/null
+++ b/src/static/index.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+ aidex Mobile APP
+
+
+
+
+
+
+
diff --git a/src/static/msg/gonggao.png b/src/static/msg/gonggao.png
new file mode 100644
index 0000000..d9b652b
Binary files /dev/null and b/src/static/msg/gonggao.png differ
diff --git a/src/static/msg/gonghai.png b/src/static/msg/gonghai.png
new file mode 100644
index 0000000..493ed20
Binary files /dev/null and b/src/static/msg/gonghai.png differ
diff --git a/src/static/msg/hetong.png b/src/static/msg/hetong.png
new file mode 100644
index 0000000..61510c3
Binary files /dev/null and b/src/static/msg/hetong.png differ
diff --git a/src/static/msg/lianxidianhua.png b/src/static/msg/lianxidianhua.png
new file mode 100644
index 0000000..1d9dc7a
Binary files /dev/null and b/src/static/msg/lianxidianhua.png differ
diff --git a/src/static/msg/renwu.png b/src/static/msg/renwu.png
new file mode 100644
index 0000000..028c001
Binary files /dev/null and b/src/static/msg/renwu.png differ
diff --git a/src/static/msg/richeng.png b/src/static/msg/richeng.png
new file mode 100644
index 0000000..b59d4b3
Binary files /dev/null and b/src/static/msg/richeng.png differ
diff --git a/src/static/msg/rizhi.png b/src/static/msg/rizhi.png
new file mode 100644
index 0000000..6f06476
Binary files /dev/null and b/src/static/msg/rizhi.png differ
diff --git a/src/static/msg/shenhe.png b/src/static/msg/shenhe.png
new file mode 100644
index 0000000..b65e225
Binary files /dev/null and b/src/static/msg/shenhe.png differ
diff --git a/src/static/msg/xiansuo.png b/src/static/msg/xiansuo.png
new file mode 100644
index 0000000..0766eb4
Binary files /dev/null and b/src/static/msg/xiansuo.png differ
diff --git a/src/static/msg/yingxiao.png b/src/static/msg/yingxiao.png
new file mode 100644
index 0000000..c6f9954
Binary files /dev/null and b/src/static/msg/yingxiao.png differ
diff --git a/src/static/uni.ttf b/src/static/uni.ttf
new file mode 100644
index 0000000..60a1968
Binary files /dev/null and b/src/static/uni.ttf differ
diff --git a/src/static/utils/adminApi.js b/src/static/utils/adminApi.js
new file mode 100644
index 0000000..39ae8ae
--- /dev/null
+++ b/src/static/utils/adminApi.js
@@ -0,0 +1,153 @@
+function failToastFun(e) {
+ console.log(e)
+ uni.hideLoading()
+ if(e.errDetail && e.errDetail.indexOf("undefined") == -1) {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: '报错信息:' + e.errDetail
+ })
+ } else if(e.errMsg) {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: '报错信息:' + e.errMsg
+ })
+ } else {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: '报错信息:' + e.message
+ })
+ }
+}
+
+function successFun(res, resolve, reject) {
+ console.log(res)
+ uni.hideLoading()
+ if (res.result.code) {
+ if(res.result.code == 403 ||res.result.code == 30203 || res.result.code == 30204 || res.result.code == 30202 || res.result.code == 30201) {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: '当前暂未登录或者登录授权过期,无法查看详细数据,请重新登录!',
+ complete(res) {
+ uni.reLaunch({
+ url: '/pages/regLogin/login'
+ })
+ }
+ })
+ reject(res.result.msg);
+ } else {
+ if(res.result.errDetail && (res.result.errDetail).indexOf("undefined") == -1) {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: res.result.errDetail
+ })
+ } else {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: res.result.msg
+ })
+ }
+ reject(res.result.msg);
+ }
+ } else {
+ resolve(res)
+ }
+}
+
+// 角色api
+function rolesApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'roleApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve, reject);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+
+// uni-id-users 用户api
+function uidUserApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'uni-id-users',
+ data: data,
+ success(res) {
+ successFun(res, resolve, reject);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+
+// uni-id-permissions 用户api
+function permissionsApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'permissionsApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve, reject);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+
+// uni-id-department 部门api
+function departmentApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'departmentApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve, reject);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+
+// 业绩目标
+function performanceApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'performanceApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve, reject);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+
+module.exports = {
+ rolesApi,
+ uidUserApi,
+ permissionsApi,
+ departmentApi,
+ performanceApi
+}
\ No newline at end of file
diff --git a/src/static/utils/api.js b/src/static/utils/api.js
new file mode 100644
index 0000000..3355ca3
--- /dev/null
+++ b/src/static/utils/api.js
@@ -0,0 +1,415 @@
+function failToastFun(e) {
+ uni.hideLoading()
+ if(e.errDetail) {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: '报错信息:' + e.errDetail + ',请检查网络是否可用!'
+ })
+ } else if(e.errMsg) {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: '报错信息:' + e.errMsg + ',请检查网络是否可用!'
+ })
+ } else {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: '报错信息:' + e.message + ',请联系相关工作人员解决!'
+ })
+ }
+}
+function successFun(res, resolve, reject) {
+ uni.hideLoading()
+ if (res.result.code) {
+ if(res.result.code == 403 || res.result.code == 30203 || res.result.code == 30204 || res.result.code == 30202 || res.result.code == 30201) {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: '登录token已失效,请重新登录!',
+ success() {
+ // #ifdef MP-WEIXIN
+ uni.reLaunch({
+ url: '/pages/regLogin/wxLogin'
+ })
+ // #endif
+ // #ifdef H5
+ uni.reLaunch({
+ url: '/pages/regLogin/login'
+ })
+ // #endif
+ }
+ })
+ } else {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: res.result.msg
+ })
+ }
+ reject(res)
+ } else {
+ resolve(res)
+ }
+}
+// 产品api
+function crmChanpinApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-chanpinApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 产品分类api
+function crmCpClassifyApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-cpClassifyApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// uni-id-cf
+function uniIdCfApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'uni-id-cf',
+ data: data,
+ success(res) {
+ successFun(res, resolve, reject);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM用户Api
+function crmMyAppUserApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'myApp-user',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM客户Api
+function crmKeHuApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-kehuApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM联系人Api
+function crmLianXiRenApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-lianxiRenApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM跟进记录Api
+function crmGenJinApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-genjinApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM商机Api
+function crmShangJiApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-shangjiApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM报价单Api
+function crmBaoJiaDanApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-baojiadanApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM合同Api
+function crmHeTongApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-hetongApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM回款计划Api
+function crmHkjhApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-hkjhApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM回款单Api
+function crmHkdApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-hkdApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// CRM发票Api
+function crmFapiaoApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-fapiaoApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 文件api
+function fileApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'fileApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 操作记录api
+function czjlApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-czjl',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 名片管理
+function nameCardApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'nameCardApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 名片数据管理
+function nameDataApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'nameDataApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 海报管理
+function posterApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'posterApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 报表管理
+function baobiaoApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'baobiao',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 线索
+function threadApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-threadApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+// 线索跟进记录
+function threadGjApi(data) {
+ return new Promise( (resolve, reject) => {
+ uniCloud.callFunction({
+ name: 'crm-threadGjApi',
+ data: data,
+ success(res) {
+ successFun(res, resolve);
+ },
+ fail(e) {
+ failToastFun(e)
+ reject(e);
+ }
+ })
+ })
+}
+
+module.exports = {
+ crmChanpinApi,
+ crmCpClassifyApi,
+ crmMyAppUserApi,
+ crmKeHuApi,
+ crmLianXiRenApi,
+ crmGenJinApi,
+ crmShangJiApi,
+ crmBaoJiaDanApi,
+ crmHeTongApi,
+ crmHkjhApi,
+ crmHkdApi,
+ crmFapiaoApi,
+ fileApi,
+ czjlApi,
+ nameCardApi,
+ posterApi,
+ nameDataApi,
+ baobiaoApi,
+ uniIdCfApi,
+ threadApi,
+ threadGjApi
+}
\ No newline at end of file
diff --git a/src/static/utils/base64.js b/src/static/utils/base64.js
new file mode 100644
index 0000000..22c9b37
--- /dev/null
+++ b/src/static/utils/base64.js
@@ -0,0 +1,23 @@
+const fsm = wx.getFileSystemManager();
+const FILE_BASE_NAME = 'tmp_base64src'; //自定义文件名
+
+function base64src(base64data, cb) {
+ let base64 = uni.arrayBufferToBase64(base64data);
+ //声明文件系统
+ const fs = wx.getFileSystemManager();
+ //随机定义路径名称
+ var times = new Date().getTime();
+ var codeimg = wx.env.USER_DATA_PATH + '/' + times + '.png';
+
+ //将base64图片写入
+ fs.writeFile({
+ filePath: codeimg,
+ data: base64,
+ encoding: 'base64',
+ success: (res) => {
+ console.log(res)
+ cb(codeimg)
+ }
+ })
+};
+module.exports = base64src;
diff --git a/src/static/utils/date.js b/src/static/utils/date.js
new file mode 100644
index 0000000..e9b2d94
--- /dev/null
+++ b/src/static/utils/date.js
@@ -0,0 +1,190 @@
+// 获取推荐日期
+function getTjDate() {
+ let date = new Date();
+ let yyyy = date.getFullYear();
+ let mm = date.getMonth() + 1;
+ mm = mm >= 10 ? mm : '0' + mm;
+ let dd = date.getDate();
+ dd = dd >= 10 ? dd : '0' + dd;
+ let h = date.getHours() + 1;
+ h = h >= 10 ? h : '0' + h;
+ let startDate = yyyy + '-' + mm + '-' + dd + ' ' + h + ':' + '00';
+ let st = new Date(startDate).getTime();
+ let endDate = yyyy + '-' + mm + '-' + dd + ' ' + h + ':' + '30';
+ let et = new Date(endDate).getTime();
+ return {
+ startDate,
+ endDate,
+ st,
+ et
+ }
+}
+
+// 获取当前日期
+function getNowDate(hm) {
+ let date = new Date();
+ let yyyy = date.getFullYear();
+ let mm = date.getMonth() + 1;
+ mm = mm >= 10 ? mm : '0' + mm;
+ let dd = date.getDate();
+ dd = dd >= 10 ? dd : '0' + dd;
+ let h = date.getHours();
+ h = h >= 10 ? h : '0' + h;
+ let m = date.getMinutes();
+ m = m >= 10 ? m : '0' + m;
+ let s = date.getSeconds();
+ s = s >= 10 ? s : '0' + s;
+ let nowDate
+ if (hm) {
+ nowDate = yyyy + '-' + mm + '-' + dd + ' ' + h + ':' + m;
+ } else {
+ nowDate = yyyy + '-' + mm + '-' + dd + ' ' + h + ':' + m + ':' + s;
+ }
+ let st = date.getTime();
+ return {
+ nowDate,
+ st
+ }
+}
+// 获取本周日期时间戳
+function getWeekFun() {
+ let date = new Date();
+ let yyyy = date.getFullYear();
+ let mm = date.getMonth() + 1;
+ mm = mm >= 10 ? mm : '0' + mm;
+ let dd = date.getDate();
+ dd = dd >= 10 ? dd : '0' + dd;
+ let dateStr = yyyy + '-' + mm + '-' + dd + ' 00:00:00';
+ let date1 = new Date(dateStr);
+ let day = date.getDay();
+ let nowTime = date1.getTime();
+ let oneDayTime = 24 * 60 * 60 * 1000;
+ day = day == 0 ? 7 : day
+ let MondayTime = nowTime - (day - 1) * oneDayTime; //周一 零点
+ let SundayTime = nowTime + (8 - day) * oneDayTime; //周日 晚12
+ return [MondayTime, SundayTime];
+}
+// 获取今日时间戳
+function getDayFun() {
+ let date = new Date();
+ let yyyy = date.getFullYear();
+ let mm = date.getMonth() + 1;
+ mm = mm >= 10 ? mm : '0' + mm;
+ let dd = date.getDate();
+ dd = dd >= 10 ? dd : '0' + dd;
+ let dateStr = yyyy + '-' + mm + '-' + dd + ' 00:00:00';
+ let date1 = new Date(dateStr);
+ let day = date.getDay();
+ let nowTime = date1.getTime();
+ let mTime = nowTime + 24 * 60 * 60 * 1000;
+ return [nowTime, mTime];
+}
+// 根据范围获取时间戳
+function getDayByNumFun(num, isGetDate) {
+ let date = new Date();
+ let yyyy = date.getFullYear();
+ let mm = date.getMonth() + 1;
+ mm = mm >= 10 ? mm : '0' + mm;
+ let dd = date.getDate();
+ dd = dd >= 10 ? dd : '0' + dd;
+ let dateStr = yyyy + '-' + mm + '-' + dd + ' 00:00:00';
+ let date1 = new Date(dateStr);
+ let day = date.getDay();
+ let nowTime = date1.getTime();
+ let mTime = nowTime - 24 * 60 * 60 * 1000 * num;
+ if (isGetDate) {
+ let nowDate = yyyy + '-' + mm + '-' + dd;
+ let date2 = new Date(mTime);
+ let yyyy1 = date2.getFullYear();
+ let mm1 = date2.getMonth() + 1;
+ mm1 = mm1 >= 10 ? mm1 : '0' + mm1;
+ let dd1 = date2.getDate();
+ dd1 = dd1 >= 10 ? dd1 : '0' + dd1;
+ return [mTime, nowTime, yyyy1 + '-' + mm1 + '-' + dd1, nowDate];
+ } else {
+ return [mTime, nowTime];
+ }
+}
+// 获取下一天日期
+function getXyDayFun(dateStr) {
+ dateStr = dateStr + ' 00:00:00';
+ let date1 = new Date(dateStr);
+ let mTime = date1.getTime() + 3600 * 24 * 1000;
+ let date = new Date(mTime);
+ let yyyy = date.getFullYear();
+ let mm = date.getMonth() + 1;
+ mm = mm >= 10 ? mm : '0' + mm;
+ let dd = date.getDate();
+ dd = dd >= 10 ? dd : '0' + dd;
+ return yyyy + '-' + mm + '-' + dd;
+}
+// 获取本月日期
+function getMonthFun() {
+ var now = new Date(); //当前日期
+ var nowMonth = now.getMonth(); //当前月
+ var nowYear = now.getFullYear(); //当前年
+ //本月的开始时间
+ var monthStartDate = new Date(nowYear, nowMonth, 1);
+ //本月的结束时间
+ var monthEndDate = new Date(nowYear, nowMonth + 1, 0);
+ return [monthStartDate.getTime(), monthEndDate.getTime() + 24 * 60 * 60 * 1000];
+}
+// 获取上周日期时间戳
+function getSZDateFun() {
+ const d1 = new Date(),
+ d2 = new Date();
+ let t1, t2 = 0;
+ t1 = new Date(d1.setDate(d1.getDate() - 6 - d1.getDay())).setHours(0, 0, 0, 0);
+ t2 = new Date(d2.setDate(d2.getDate() - d2.getDay())).setHours(0, 0, 0, 0) + 24 * 3600 * 1000;
+ return [t1, t2]
+}
+// 获取上月时间戳
+function lastMonthFun() {
+ const d = new Date();
+ const d1 = new Date(d.setMonth(d.getMonth() - 1));
+ let t1, t2 = 0;
+ t1 = new Date(d1.setDate(1)).setHours(0, 0, 0, 0);
+ const d2 = new Date(t1);
+ t2 = new Date(new Date(d2.setMonth(d2.getMonth() + 1)).setMilliseconds(-1)).getTime();
+ return [t1, t2]
+}
+// 日期验证
+function dateYZFun(date) {
+ if (!date) {
+ return false;
+ } else {
+ let jrDate = getDayFun();
+ if (date > jrDate[0] && date < jrDate[1]) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
+// 日期数组
+function dateArr(num) {
+ let arr = [];
+ let nowDate = new Date().getTime();
+ for (var i = 0; i < num; i++) {
+ let date = new Date(nowDate - 86400000 * (i + 1));
+ let mm = date.getMonth() + 1;
+ let dd = date.getDate();
+ mm = mm > 9 ? mm : '0' + mm;
+ dd = dd > 9 ? dd : '0' + dd;
+ arr.unshift(mm + '/' + dd);
+ }
+ return arr;
+}
+export {
+ getTjDate,
+ getNowDate,
+ getWeekFun,
+ getDayFun,
+ getDayByNumFun,
+ getMonthFun,
+ dateYZFun,
+ dateArr,
+ getSZDateFun,
+ lastMonthFun,
+ getXyDayFun
+}
diff --git a/src/static/utils/dropdown.js b/src/static/utils/dropdown.js
new file mode 100644
index 0000000..168d060
--- /dev/null
+++ b/src/static/utils/dropdown.js
@@ -0,0 +1,1218 @@
+// 通用下拉菜单数据
+let tyDropDown = [
+ {
+ value: 0,
+ label: '全部'
+ },
+ {
+ value: 1,
+ label: '我负责的'
+ },
+ {
+ value: 2,
+ label: '下属负责'
+ },
+ {
+ value: 3,
+ label: '我创建的'
+ },
+ {
+ value: 4,
+ label: '下属创建'
+ }
+]
+let dropDownByUser = [
+ {
+ value: 0,
+ label: '我负责的'
+ },
+ {
+ value: 1,
+ label: '我创建的'
+ }
+]
+// 跟进下拉菜单数据
+let gjDropDownData = [
+ {
+ value: 0,
+ label: '全部'
+ },
+ {
+ value: 1,
+ label: '我创建的'
+ },
+ {
+ value: 2,
+ label: '下属创建'
+ }
+]
+// 跟进下拉菜单数据
+let gjDropDownData1 = [{
+ value: 0,
+ label: '我创建的'
+ }
+]
+// 下拉菜单数据
+let cjDropDownData = [
+ {
+ value: 0,
+ label: '全部'
+ },
+ {
+ value: 1,
+ label: '我创建的'
+ },
+ {
+ value: 2,
+ label: '下属创建'
+ }
+]
+// 下拉菜单数据
+let cjDropDownData1 = [{
+ value: 0,
+ label: '我创建的'
+ }
+]
+// 距离下拉菜单数据
+let distanceData = [{
+ value: 0,
+ distance: 5000,
+ label: '5公里内'
+ },
+ {
+ value: 1,
+ distance: 500,
+ label: '500米内'
+ },
+ {
+ value: 2,
+ distance: 1000,
+ label: '1公里内'
+ },
+ {
+ value: 3,
+ distance: 2000,
+ label: '2公里内'
+ },
+ {
+ value: 4,
+ distance: 3000,
+ label: '3公里内'
+ },
+ {
+ value: 5,
+ distance: 4000,
+ label: '4公里内'
+ },
+ {
+ value: 6,
+ distance: 5000,
+ label: '5公里内'
+ },
+ {
+ value: 7,
+ distance: 8000,
+ label: '8公里内'
+ },
+ {
+ value: 8,
+ distance: 10000,
+ label: '10公里内'
+ },
+]
+
+// 客户筛选菜单数据
+let khsxData = [
+ // {
+ // title: '客户状态',
+ // field: 'companyState',
+ // current: '',
+ // arr: [
+ // '潜在客户',
+ // '初步接触',
+ // '持续跟进',
+ // '成交客户',
+ // '忠诚客户',
+ // '无效客户'
+ // ]
+ // },
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '客户阶段',
+ field: 'jieDuan',
+ current: '',
+ arr: [
+ '初步接洽',
+ '确认需求',
+ '解决方案',
+ '商务谈判',
+ '成交',
+ '流失'
+ ]
+ },
+ {
+ title: '客户性质',
+ field: 'xingZhi',
+ current: '',
+ arr: [
+ '企业客户',
+ '个人客户',
+ '政府单位',
+ '事业单位'
+ ]
+ },
+ {
+ title: '客户分级',
+ field: 'fenJi',
+ current: '',
+ arr: [
+ '大型',
+ '中型',
+ '小型',
+ '微型'
+ ]
+ },
+ {
+ title: '客户来源',
+ field: 'laiYuan',
+ current: '',
+ arr: [
+ '电话咨询',
+ '自主开拓',
+ '公司资源',
+ '网络推广',
+ '渠道代理',
+ '其他方式'
+ ]
+ },
+ {
+ title: '最后跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '重要程度',
+ field: 'zycdNum',
+ current: '',
+ arr: [
+ '一星以下',
+ '一星',
+ '二星',
+ '三星',
+ '四星',
+ '五星',
+ ]
+ },
+ {
+ title: '客户行业',
+ field: 'hangYe',
+ current: '',
+ arr: [
+ '金融',
+ '电信',
+ '教育',
+ '高科技',
+ '政府',
+ '制造业',
+ '服务业',
+ '能源',
+ '零售',
+ '媒体',
+ '娱乐',
+ '咨询',
+ '非盈利事业',
+ '公用事业',
+ '其他'
+ ]
+ }
+]
+
+// 线索筛选菜单数据
+let threadSxData = [
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '客户性质',
+ field: 'xingZhi',
+ current: '',
+ arr: [
+ '企业客户',
+ '个人客户',
+ '政府单位',
+ '事业单位'
+ ]
+ },
+ {
+ title: '客户分级',
+ field: 'fenJi',
+ current: '',
+ arr: [
+ '大型',
+ '中型',
+ '小型',
+ '微型'
+ ]
+ },
+ {
+ title: '客户来源',
+ field: 'laiYuan',
+ current: '',
+ arr: [
+ '电话咨询',
+ '自主开拓',
+ '公司资源',
+ '网络推广',
+ '渠道代理',
+ '其他方式'
+ ]
+ },
+ {
+ title: '最后跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '重要程度',
+ field: 'zycdNum',
+ current: '',
+ arr: [
+ '一星以下',
+ '一星',
+ '二星',
+ '三星',
+ '四星',
+ '五星',
+ ]
+ },
+ {
+ title: '客户行业',
+ field: 'hangYe',
+ current: '',
+ arr: [
+ '金融',
+ '电信',
+ '教育',
+ '高科技',
+ '政府',
+ '制造业',
+ '服务业',
+ '能源',
+ '零售',
+ '媒体',
+ '娱乐',
+ '咨询',
+ '非盈利事业',
+ '公用事业',
+ '其他'
+ ]
+ }
+]
+
+// 时间排序下拉菜单数据
+let datePxData = [{
+ title: '创建时间排序',
+ field: 'create_date',
+ current: '',
+ arr: [
+ '降序',
+ '升序'
+ ]
+ },
+ {
+ title: '更新时间排序(默认降序)',
+ field: 'update_date',
+ current: 0,
+ arr: [
+ '降序',
+ '升序'
+ ]
+ },
+ {
+ title: '最后跟进时间排序',
+ field: 'genjin_date',
+ current: '',
+ arr: [
+ '降序',
+ '升序'
+ ]
+ }
+]
+
+// 跟进时间排序下拉菜单数据
+let gjDatePxData = [{
+ title: '创建时间排序',
+ field: 'create_date',
+ current: '',
+ arr: [
+ '降序',
+ '升序'
+ ]
+ },
+ {
+ title: '更新时间排序',
+ field: 'update_date',
+ current: '',
+ arr: [
+ '降序',
+ '升序'
+ ]
+ },
+ {
+ title: '跟进时间排序(默认降序)',
+ field: 'genjin_date',
+ current: 0,
+ arr: [
+ '降序',
+ '升序'
+ ]
+ }
+]
+
+// 商机时间排序下拉菜单数据
+let sjDatePxData = [{
+ title: '创建时间排序',
+ field: 'create_date',
+ current: '',
+ arr: [
+ '降序',
+ '升序'
+ ]
+ },
+ {
+ title: '更新时间排序(默认降序)',
+ field: 'update_date',
+ current: 0,
+ arr: [
+ '降序',
+ '升序'
+ ]
+ },
+ {
+ title: '预计成交时间排序',
+ field: 'chengJiao_date',
+ current: '',
+ arr: [
+ '降序',
+ '升序'
+ ]
+ }
+]
+
+// 报价单排序下拉菜单数据
+let bjdDatePxData = [
+ {
+ title: '报价金额',
+ field: 'bjPrice',
+ current: '',
+ arr: [
+ '降序',
+ '升序'
+ ]
+ },
+ {
+ title: '创建时间排序',
+ field: 'create_date',
+ current: '',
+ arr: [
+ '降序',
+ '升序'
+ ]
+ },
+ {
+ title: '更新时间排序(默认降序)',
+ field: 'update_date',
+ current: 0,
+ arr: [
+ '降序',
+ '升序'
+ ]
+ }
+ // {
+ // title: '预计成交时间排序',
+ // field: 'chengJiao_date',
+ // current: '',
+ // arr: [
+ // '降序',
+ // '升序'
+ // ]
+ // }
+]
+
+// 联系人筛选菜单数据
+let lxrDropDownData = [
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '性别',
+ field: 'gender',
+ current: '',
+ arr: [
+ '男',
+ '女'
+ ]
+ },
+ {
+ title: '最后跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '重要程度',
+ field: 'zycdNum',
+ current: '',
+ arr: [
+ '一星以下',
+ '一星',
+ '二星',
+ '三星',
+ '四星',
+ '五星',
+ ]
+ },
+ {
+ title: '亲密程度',
+ field: 'zycdNum',
+ current: '',
+ arr: [
+ '一星以下',
+ '一星',
+ '二星',
+ '三星',
+ '四星',
+ '五星',
+ ]
+ }
+]
+
+// 跟进筛选菜单数据
+let gjSxDropDownData = [
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '跟进类型',
+ field: 'type',
+ current: '',
+ arr: [
+ '外出拜访',
+ '客户面谈',
+ '客户来电',
+ '客户来访',
+ '在线交流',
+ '发送资料',
+ '售后回访',
+ '方案整理',
+ '其他方面',
+ ]
+ },
+ // {
+ // title: '跟进状态',
+ // field: 'states',
+ // current: '',
+ // arr: [
+ // '有需求跟进',
+ // '促单',
+ // '放弃'
+ // ]
+ // },
+ {
+ title: '单据类型',
+ field: 'orderType',
+ current: '',
+ arr: [
+ '商机',
+ '报价单',
+ '合同',
+ '回款计划',
+ '回款单'
+ ]
+ },
+ {
+ title: '跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ }
+]
+
+let sjSxDropDownData = [
+ {
+ title: '预计成交时间',
+ field: 'chengJiao_date',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '商机阶段',
+ field: 'sjJieduan',
+ current: '',
+ arr: [
+ '初步沟通',
+ '需求确定',
+ '方案报价',
+ '谈判协商',
+ '赢单',
+ '输单',
+ '无效'
+ ]
+ },
+ {
+ title: '商机来源',
+ field: 'sjLaiYuan',
+ current: '',
+ arr: [
+ '独立开发',
+ '来电咨询',
+ '广告宣传',
+ '搜索引擎',
+ '客户介绍',
+ '展会',
+ '招标公告',
+ '其他'
+ ]
+ },
+ {
+ title: '跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ }
+]
+// 报价单
+let bjdSxDropDownData = [
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '报价时间',
+ field: 'bjdDateTime',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ }
+]
+let htSxDropDownData = [
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '报价时间',
+ field: 'bjdDateTime',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ }
+]
+let hkjhSxDropDownData = [
+ {
+ title: '预计回款日期',
+ field: 'date',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ }
+]
+let hkdSxDropDownData = [
+ {
+ title: '下次跟进时间',
+ field: 'next_gjDate',
+ current: '',
+ isDate: 2,
+ arr: [
+ '今天',
+ '三天内',
+ '七天内',
+ '半月内',
+ '一月内',
+ '自定义'
+ ]
+ },
+ {
+ title: '跟进时间',
+ field: 'genjin_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '创建时间',
+ field: 'create_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ },
+ {
+ title: '更新时间',
+ field: 'update_date',
+ current: '',
+ isDate: 1,
+ arr: [
+ '今天',
+ '昨天',
+ '本周',
+ '上周',
+ '本月',
+ '上月',
+ '最近七天',
+ '3个月',
+ '自定义'
+ ]
+ }
+]
+
+export {
+ tyDropDown,
+ dropDownByUser,
+ khsxData,
+ threadSxData,
+ datePxData,
+ lxrDropDownData,
+ distanceData,
+ cjDropDownData1,
+ cjDropDownData,
+ gjDropDownData,
+ gjDropDownData1,
+ gjSxDropDownData,
+ gjDatePxData,
+ sjDatePxData,
+ sjSxDropDownData,
+ bjdSxDropDownData,
+ htSxDropDownData,
+ bjdDatePxData,
+ hkjhSxDropDownData,
+ hkdSxDropDownData
+}
diff --git a/src/static/utils/upload.js b/src/static/utils/upload.js
new file mode 100644
index 0000000..4a5dcc6
--- /dev/null
+++ b/src/static/utils/upload.js
@@ -0,0 +1,65 @@
+function uploadImgFun(path) {
+ return new Promise(reslove => {
+ console.log(path);
+ let date = new Date();
+ let typeSrc = '.png';
+ let xxx = path.lastIndexOf(".");
+ typeSrc = path.substring(xxx, path.length);
+ let percentCompleted = 0;
+ uni.showToast({
+ icon: 'none',
+ title: '图片上传进度' + percentCompleted + '%'
+ })
+ const result = uniCloud.uploadFile({
+ filePath: path,
+ cloudPath: 'image/' + date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date
+ .getDate() + '/' +
+ date.getTime() + Math.ceil(Math.random() * 100) + typeSrc,
+ onUploadProgress: (progressEvent) => {
+ percentCompleted = Math.round(
+ (progressEvent.loaded * 100) / progressEvent.total
+ );
+ console.log(percentCompleted)
+ // uni.showLoading({
+ // title: percentCompleted + '%'
+ // })
+
+ if(percentCompleted == 100) {
+ uni.hideToast()
+ }
+ }
+ })
+ .then(res => {
+ // 获取图片访问地址
+ uniCloud.getTempFileURL({
+ fileList: [res.fileID]
+ })
+ .then(ddd => {
+ let obj = {
+ url: ddd.fileList[0].tempFileURL,
+ fileId: ddd.fileList[0].fileID
+ }
+ reslove(obj)
+ })
+ .catch(err => {
+ uni.showModal({
+ title: '错误提示',
+ content: err.toString(),
+ showCancel: false
+ })
+ })
+ })
+ .catch(err => {
+ uni.hideLoading();
+ uni.showModal({
+ title: '错误提示',
+ content: err.toString(),
+ showCancel: false
+ })
+ })
+ });
+}
+
+export {
+ uploadImgFun
+}
diff --git a/src/static/uview/common/favicon.ico b/src/static/uview/common/favicon.ico
new file mode 100644
index 0000000..e0af368
Binary files /dev/null and b/src/static/uview/common/favicon.ico differ
diff --git a/src/static/uview/common/logo.png b/src/static/uview/common/logo.png
new file mode 100644
index 0000000..05b3aed
Binary files /dev/null and b/src/static/uview/common/logo.png differ
diff --git a/src/static/uview/example/component.png b/src/static/uview/example/component.png
new file mode 100644
index 0000000..09bd020
Binary files /dev/null and b/src/static/uview/example/component.png differ
diff --git a/src/static/uview/example/component_select.png b/src/static/uview/example/component_select.png
new file mode 100644
index 0000000..3d704a8
Binary files /dev/null and b/src/static/uview/example/component_select.png differ
diff --git a/src/static/uview/example/js.png b/src/static/uview/example/js.png
new file mode 100644
index 0000000..b904664
Binary files /dev/null and b/src/static/uview/example/js.png differ
diff --git a/src/static/uview/example/js_bak.png b/src/static/uview/example/js_bak.png
new file mode 100644
index 0000000..d280e3d
Binary files /dev/null and b/src/static/uview/example/js_bak.png differ
diff --git a/src/static/uview/example/js_select.png b/src/static/uview/example/js_select.png
new file mode 100644
index 0000000..9411c91
Binary files /dev/null and b/src/static/uview/example/js_select.png differ
diff --git a/src/static/uview/example/js_select_bak.png b/src/static/uview/example/js_select_bak.png
new file mode 100644
index 0000000..2ea6122
Binary files /dev/null and b/src/static/uview/example/js_select_bak.png differ
diff --git a/src/static/uview/example/min_button.png b/src/static/uview/example/min_button.png
new file mode 100644
index 0000000..077eb43
Binary files /dev/null and b/src/static/uview/example/min_button.png differ
diff --git a/src/static/uview/example/min_button_select.png b/src/static/uview/example/min_button_select.png
new file mode 100644
index 0000000..703a8bd
Binary files /dev/null and b/src/static/uview/example/min_button_select.png differ
diff --git a/src/static/uview/example/template.png b/src/static/uview/example/template.png
new file mode 100644
index 0000000..5d27f97
Binary files /dev/null and b/src/static/uview/example/template.png differ
diff --git a/src/static/uview/example/template_select.png b/src/static/uview/example/template_select.png
new file mode 100644
index 0000000..be4b338
Binary files /dev/null and b/src/static/uview/example/template_select.png differ
diff --git a/src/store/$u.mixin.js b/src/store/$u.mixin.js
new file mode 100644
index 0000000..3f089ac
--- /dev/null
+++ b/src/store/$u.mixin.js
@@ -0,0 +1,27 @@
+import { mapState } from 'vuex'
+import store from "@/store"
+
+// 尝试将用户在根目录中的store/index.js的vuex的state变量,全部加载到全局变量中
+let $uStoreKey = [];
+try{
+ $uStoreKey = store.state ? Object.keys(store.state) : [];
+}catch(e){
+
+}
+
+export default {
+ beforeCreate() {
+ // 将vuex方法挂在到$u中
+ // 使用方法为:如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗')
+ // 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')
+ this.$u.vuex = (name, value) => {
+ this.$store.commit('$uStore', {
+ name,value
+ })
+ }
+ },
+ computed: {
+ // 将vuex的state中的所有变量,解构到全局混入的mixin中
+ ...mapState($uStoreKey)
+ }
+}
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..b52c4d9
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,255 @@
+/**
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ */
+import config from '@/common/config.js';
+import util from '@/common/util.js';
+import Vue from 'vue'
+import Vuex from 'vuex'
+import { audioManager } from '@/utils/audioManager'
+import dayjs from 'dayjs'
+
+Vue.use(Vuex)
+
+let lifeData = {};
+
+try{
+ // 尝试获取本地是否存在lifeData变量,第一次启动APP时是不存在的
+ lifeData = uni.getStorageSync('lifeData');
+}catch(e){
+
+}
+
+// 初始化API URL
+function initApiUrl() {
+ if (config.isDevelopment) {
+ // 开发环境:从存储读取,如果没有则使用测试环境
+ try {
+ const savedApiUrl = uni.getStorageSync('ApiUrl');
+ return savedApiUrl || config.devApiUrlOptions[0].value;
+ } catch (e) {
+ console.log('读取存储的 apiurl 失败', e);
+ return config.devApiUrlOptions[0].value;
+ }
+ } else {
+ // 生产环境:使用固定的生产URL
+ return config.productionApiUrl;
+ }
+}
+
+// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
+let saveStateKeys = ['vuex_user', 'vuex_token', 'vuex_remember', 'vuex_locale','vuex_isAgent', 'vuex_notificationEnabled'];
+
+// 保存变量到本地存储中
+const saveLifeData = function(key, value){
+ // 判断变量名是否在需要存储的数组中
+ if(saveStateKeys.indexOf(key) != -1) {
+ // 获取本地存储的lifeData对象,将变量添加到对象中
+ let tmp = uni.getStorageSync('lifeData');
+ // 第一次打开APP,不存在lifeData变量,故放一个{}空对象
+ tmp = tmp ? tmp : {};
+ tmp[key] = value;
+ // 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中
+ uni.setStorageSync('lifeData', tmp);
+ }
+}
+// 简化 vuex 操作,文档:https://uviewui.com/components/vuexDetail.html
+const store = new Vuex.Store({
+ state: {
+ // 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量
+ // 加上vuex_前缀,是防止变量名冲突,也让人一目了然
+ vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {userName: 'Aidex'},
+ vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
+ vuex_remember: lifeData.vuex_remember ? lifeData.vuex_remember : '',
+ vuex_locale: lifeData.vuex_locale ? lifeData.vuex_locale : '',
+ vuex_isAgent: lifeData.vuex_isAgent ? lifeData.vuex_isAgent : '',
+
+ // 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
+ vuex_config: config,
+
+ // 自定义tabbar数据
+ // 新增通知相关状态
+ vuex_notificationEnabled: lifeData.vuex_notificationEnabled != null ? lifeData.vuex_notificationEnabled : true,
+ vuex_deliveryIds: [], // 存储已知的配布单ID
+ vuex_messageList: [], // 存储消息列表
+ vuex_notificationAudio: null,
+ vuex_pollingTimer: null,
+ apiurl: initApiUrl() // 根据环境初始化URL
+ },
+ mutations: {
+ $uStore(state, payload) {
+ // 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1
+ let nameArr = payload.name.split('.');
+ let saveKey = '';
+ let len = nameArr.length;
+ if(len >= 2) {
+ let obj = state[nameArr[0]];
+ for(let i = 1; i < len - 1; i ++) {
+ obj = obj[nameArr[i]];
+ }
+ obj[nameArr[len - 1]] = payload.value;
+ saveKey = nameArr[0];
+ } else {
+ // 单层级变量,在state就是一个普通变量的情况
+ state[payload.name] = payload.value;
+ saveKey = payload.name;
+ }
+ // 保存变量到本地,见顶部函数定义
+ saveLifeData(saveKey, state[saveKey])
+ },
+ // 新增通知相关 mutation
+ setPollingTimer(state, timer) {
+ state.vuex_pollingTimer = timer;
+ },
+
+ setNotificationAudio(state, audio) {
+ state.vuex_notificationAudio = audio;
+ },
+ SET_API_URL(state, url) {
+ // 生产环境不允许修改URL
+ if (!config.isDevelopment) {
+ console.warn('生产环境不允许修改API URL');
+ return;
+ }
+ state.apiurl = url
+ // 同时保存到本地存储
+ uni.setStorageSync('ApiUrl', url)
+ }
+ },
+
+ actions: {
+ // 初始化通知
+ initNotification({ state, commit, dispatch }) {
+ // 创建音频实例
+ const audio = uni.createInnerAudioContext();
+ audio.src = '/static/audio/ninyouxindepeibudan.mp3';
+ // 监听音频播放错误
+ audio.onError((res) => {
+ console.error('Audio error:', res.errMsg);
+ });
+
+ // 监听音频播放结束
+ audio.onEnded(() => {
+ console.log('Audio playback completed');
+ });
+ commit('setNotificationAudio', audio);
+
+ if(!state.vuex_notificationEnabled || !uni.getStorageSync("RemoteTokenData").token) return
+ dispatch('stopPolling');
+ // 开始轮询
+ dispatch('startPolling');
+
+ // 监听网络状态
+ uni.onNetworkStatusChange(function(res) {
+ if (res.isConnected) {
+ dispatch('startPolling');
+ } else {
+ dispatch('stopPolling');
+ }
+ });
+ },
+
+ // 开始轮询
+ startPolling({ state, commit, dispatch }) {
+ if (state.vuex_pollingTimer || !state.vuex_notificationEnabled) return;
+
+ const timer = setInterval(() => {
+ dispatch('checkNewDeliveries');
+ }, 20 * 1000);
+ // }, 1 * 1000);
+
+ commit('setPollingTimer', timer);
+ },
+
+ // 停止轮询
+ stopPolling({ state, commit }) {
+ if (state.vuex_pollingTimer) {
+ clearInterval(state.vuex_pollingTimer);
+ commit('setPollingTimer', null);
+ }
+ },
+
+ // 检查新配布单
+ async checkNewDeliveries({ state, commit, dispatch }) {
+ uni.request({
+ url: util.apiurl + "/product/fpmArrangeOrder/getFpmArrangeOrderList",
+ method: "GET",
+ header: {
+ platform: "2",
+ Authorization: uni.getStorageSync("RemoteTokenData").token,
+ },
+ data: {
+ business_status_ids: '1,2', // 根据tab传递对应的状态组合
+ page: 1,
+ size: 10,
+ },
+ success: (res) => {
+ console.log('res',res)
+ if (res.data.code != 0) {
+ throw new Error('检查配布单失败');
+ }
+ console.log("data", res.data.data.list);
+ const data = res.data.data.list
+ // 获取所有配布单ID
+ const newDeliveryIds = data.map(item => item.id);
+ // 找出新增的配布单ID
+ const newIds = newDeliveryIds.filter(id => !state.vuex_deliveryIds.includes(id));
+ console.log("newIds", newIds.length);
+
+ // 如果有新增配布单,触发通知
+ if (newIds.length > 0) {
+ // 播放声音
+ audioManager.play()
+
+ // 触发振动
+ uni.vibrateLong();
+
+ // 显示通知消息
+ // uni.showToast({
+ // title: `有${newIds.length}个新的配布单待处理`,
+ // icon: 'none',
+ // });
+ // 构建新的消息列表项
+ const newMessages = data.filter(item => newIds.includes(item.id)).map((item) => ({
+ title: '新配布单通知',
+ content: `销售单号:${item.order_no}`,
+ path: `/pages/saleship/salepickscandetail?billid=${item.id}`,
+ time: dayjs().format('HH:mm')
+ }));
+ const newList = [...newMessages, ...state.vuex_messageList]
+ // 更新消息列表
+ commit('$uStore', {
+ name: 'vuex_messageList',
+ value: newList
+ });
+ uni.setTabBarBadge({
+ index: 0,
+ text: `${newList.length}`
+ });
+ }
+ // 使用 $uStore 方式更新状态
+ commit('$uStore', {
+ name: 'vuex_deliveryIds',
+ value: newDeliveryIds
+ });
+ },
+ fail: (error) => {
+ console.log('error',error)
+ if (error.code === 401 || error.errMsg.includes('Failed to connect')) {
+ dispatch('stopPolling');
+ }
+ },
+ complete: () => {
+
+ },
+ });
+ },
+ updateApiUrl({ commit }, url) {
+ commit('SET_API_URL', url)
+ }
+ },
+ getters: {
+ apiurl: state => state.apiurl
+ }
+})
+
+export default store
diff --git a/src/uni.scss b/src/uni.scss
index 3c8e349..4e6bb92 100644
--- a/src/uni.scss
+++ b/src/uni.scss
@@ -1,76 +1,41 @@
/**
- * 这里是uni-app内置的常用样式变量
- *
- * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
- * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
- *
+ * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
+ * 下方引入的为uView UI的集成样式文件,为scss预处理器,其中包含了一些"u-"开头的自定义变量
+ * 使用的时候,请将下面的一行复制到您的uniapp项目根目录的uni.scss中即可
+ * uView自定义的css类名和scss变量,均以"u-"开头,不会造成冲突,请放心使用
*/
-/**
- * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
- *
- * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
- */
+$u-main-color: #303133;
+$u-content-color: #505256;
+$u-tips-color: #909399;
+$u-light-color: #c0c4cc;
+$u-border-color: #dedfe2;
+$u-bg-color: #f3f4f6;
-/* 颜色变量 */
+$u-type-primary: #2979ff;
+$u-type-primary-light: #ecf5ff;
+$u-type-primary-disabled: #a0cfff;
+$u-type-primary-dark: #2b85e4;
-/* 行为相关颜色 */
-$uni-color-primary: #007aff;
-$uni-color-success: #4cd964;
-$uni-color-warning: #f0ad4e;
-$uni-color-error: #dd524d;
+$u-type-warning: #ff9900;
+$u-type-warning-disabled: #fcbd71;
+$u-type-warning-dark: #f29100;
+$u-type-warning-light: #fdf6ec;
-/* 文字基本颜色 */
-$uni-text-color: #333; // 基本色
-$uni-text-color-inverse: #fff; // 反色
-$uni-text-color-grey: #999; // 辅助灰色,如加载更多的提示信息
-$uni-text-color-placeholder: #808080;
-$uni-text-color-disable: #c0c0c0;
+$u-type-success: #19be6b;
+$u-type-success-disabled: #71d5a1;
+$u-type-success-dark: #18b566;
+$u-type-success-light: #dbf1e1;
-/* 背景颜色 */
-$uni-bg-color: #fff;
-$uni-bg-color-grey: #f8f8f8;
-$uni-bg-color-hover: #f1f1f1; // 点击状态颜色
-$uni-bg-color-mask: rgba(0, 0, 0, 0.4); // 遮罩颜色
+$u-type-error: #fa3534;
+$u-type-error-disabled: #fab6b6;
+$u-type-error-dark: #dd6161;
+$u-type-error-light: #fef0f0;
-/* 边框颜色 */
-$uni-border-color: #c8c7cc;
+$u-type-info: #909399;
+$u-type-info-disabled: #c8c9cc;
+$u-type-info-dark: #82848a;
+$u-type-info-light: #f4f4f5;
-/* 尺寸变量 */
-
-/* 文字尺寸 */
-$uni-font-size-sm: 12px;
-$uni-font-size-base: 14px;
-$uni-font-size-lg: 16px;
-
-/* 图片尺寸 */
-$uni-img-size-sm: 20px;
-$uni-img-size-base: 26px;
-$uni-img-size-lg: 40px;
-
-/* Border Radius */
-$uni-border-radius-sm: 2px;
-$uni-border-radius-base: 3px;
-$uni-border-radius-lg: 6px;
-$uni-border-radius-circle: 50%;
-
-/* 水平间距 */
-$uni-spacing-row-sm: 5px;
-$uni-spacing-row-base: 10px;
-$uni-spacing-row-lg: 15px;
-
-/* 垂直间距 */
-$uni-spacing-col-sm: 4px;
-$uni-spacing-col-base: 8px;
-$uni-spacing-col-lg: 12px;
-
-/* 透明度 */
-$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
-
-/* 文章场景相关 */
-$uni-color-title: #2c405a; // 文章标题颜色
-$uni-font-size-title: 20px;
-$uni-color-subtitle: #555; // 二级标题颜色
-$uni-font-size-subtitle: 18px;
-$uni-color-paragraph: #3f536e; // 文章段落颜色
-$uni-font-size-paragraph: 15px;
+$u-form-item-height: 70rpx;
+$u-form-item-border-color: #dcdfe6;
diff --git a/src/uni_modules/app-upgrade/changelog.md b/src/uni_modules/app-upgrade/changelog.md
new file mode 100644
index 0000000..29ba608
--- /dev/null
+++ b/src/uni_modules/app-upgrade/changelog.md
@@ -0,0 +1,8 @@
+## 1.0.9(2024-04-11)
+优化使用说明
+## 1.0.8(2023-01-29)
+修复IOS下错误:“Can't find variable: osName __ERROR”
+## 1.0.7(2022-10-17)
+更新拼写错误
+## 1.0.6(2022-10-09)
+1.优化代码拼写错误
diff --git a/src/uni_modules/app-upgrade/js_sdk/dialog.js b/src/uni_modules/app-upgrade/js_sdk/dialog.js
new file mode 100644
index 0000000..bcc46c4
--- /dev/null
+++ b/src/uni_modules/app-upgrade/js_sdk/dialog.js
@@ -0,0 +1,329 @@
+/**
+ * @Descripttion: app升级弹框
+ * @Version: 1.0.0
+ * @Author: leefine
+ */
+
+import config from '@/upgrade-config.js'
+import upgrade from './upgrade'
+
+const {
+ title = '发现新版本',
+ confirmText = '立即更新',
+ cancelTtext = '稍后再说',
+ confirmBgColor = '#409eff',
+ showCancel = true,
+ titleAlign = 'left',
+ descriAlign = 'left',
+ icon
+} = config.upgrade;
+
+class AppDialog {
+ constructor() {
+ this.maskEl = {}
+ this.popupEl = {}
+ this.screenHeight = 600;
+ this.popupHeight = 230;
+ this.popupWidth = 300;
+ this.viewWidth = 260;
+ this.descrTop = 130;
+ this.viewPadding = 20;
+ this.iconSize = 80;
+ this.titleHeight = 30;
+ this.textHeight = 18;
+ this.textSpace = 10;
+ this.popupContent = []
+ this.apkUrl = '';
+ }
+
+ // 显示
+ show(apkUrl, changelog) {
+ this.drawView(changelog)
+ this.maskEl.show()
+ this.popupEl.show()
+ this.apkUrl = apkUrl;
+ }
+
+ // 隐藏
+ hide() {
+ this.maskEl.hide()
+ this.popupEl.hide()
+ }
+
+ // 绘制
+ drawView(changelog) {
+ this.screenHeight = plus.screen.resolutionHeight;
+ this.popupWidth = plus.screen.resolutionWidth * 0.8;
+ this.popupHeight = this.viewPadding * 3 + this.iconSize + 100;
+ this.viewWidth = this.popupWidth - this.viewPadding * 2;
+ this.descrTop = this.viewPadding + this.iconSize + this.titleHeight;
+ this.popupContent = [];
+
+ if (icon) {
+ this.popupContent.push({
+ id: 'logo',
+ tag: 'img',
+ src: icon,
+ position: {
+ top: '0px',
+ left: (this.popupWidth - this.iconSize) / 2 + 'px',
+ width: this.iconSize + 'px',
+ height: this.iconSize + 'px'
+ }
+ });
+ } else {
+ this.popupContent.push({
+ id: 'logo',
+ tag: 'img',
+ src: '_pic/upgrade.png',
+ position: {
+ top: '0px',
+ left: (this.popupWidth - this.iconSize) / 2 + 'px',
+ width: this.iconSize + 'px',
+ height: this.iconSize + 'px'
+ }
+ });
+ }
+
+ // 标题
+ if (title) {
+ this.popupContent.push({
+ id: 'title',
+ tag: 'font',
+ text: title,
+ textStyles: {
+ size: '18px',
+ color: '#333',
+ weight: 'bold',
+ align: titleAlign
+ },
+ position: {
+ top: this.descrTop - this.titleHeight - this.textSpace + 'px',
+ left: this.viewPadding + 'px',
+ width: this.viewWidth + 'px',
+ height: this.titleHeight + 'px'
+ }
+ })
+ } else {
+ this.descrTop -= this.titleHeight;
+ }
+
+ this.drawText(changelog)
+
+ // 取消
+ if (showCancel) {
+ const width = (this.viewWidth - this.viewPadding) / 2;
+ const confirmLeft = width + this.viewPadding * 2;
+ this.drawBtn('cancel', width, cancelTtext)
+ this.drawBtn('confirm', width, confirmText, confirmLeft)
+ } else {
+ this.drawBtn('confirmBox', this.viewWidth, confirmText)
+ }
+
+ this.drawBox(showCancel)
+ }
+
+ // 描述内容
+ drawText(changelog) {
+ if (!changelog) return [];
+ const textArr = changelog.split('')
+ const len = textArr.length;
+ let prevNode = 0;
+ let nodeWidth = 0;
+ let letterWidth = 0;
+ const chineseWidth = 14;
+ const otherWidth = 7;
+ let rowText = [];
+
+ for (let i = 0; i < len; i++) {
+ // 包含中文
+ if (/[\u4e00-\u9fa5]|[\uFE30-\uFFA0]/g.test(textArr[i])) {
+ // 包含字母
+ let textWidth = ''
+ if (letterWidth > 0) {
+ textWidth = nodeWidth + chineseWidth + letterWidth * otherWidth;
+ letterWidth = 0;
+ } else {
+ // 不含字母
+ textWidth = nodeWidth + chineseWidth;
+ }
+
+ if (textWidth > this.viewWidth) {
+ rowArrText(i, chineseWidth)
+ } else {
+ nodeWidth = textWidth;
+ }
+ } else {
+ // 不含中文
+ // 包含换行符
+ if (/\n/g.test(textArr[i])) {
+ rowArrText(i, 0, 1)
+ letterWidth = 0;
+ } else if (textArr[i] == '\\' && textArr[i + 1] == 'n') {
+ rowArrText(i, 0, 2)
+ letterWidth = 0;
+ } else if (/[a-zA-Z0-9]/g.test(textArr[i])) {
+ // 包含字母数字
+ letterWidth += 1;
+ const textWidth = nodeWidth + letterWidth * otherWidth;
+ if (textWidth > this.viewWidth) {
+ const preNode = i + 1 - letterWidth;
+ rowArrText(preNode, letterWidth * otherWidth)
+ letterWidth = 0;
+ }
+ } else {
+ if (nodeWidth + otherWidth > this.viewWidth) {
+ rowArrText(i, otherWidth)
+ } else {
+ nodeWidth += otherWidth;
+ }
+ }
+ }
+ }
+
+ if (prevNode < len) {
+ rowArrText(len, -1)
+ }
+ this.drawDesc(rowText)
+
+ function rowArrText(i, nWidth = 0, type = 0) {
+ const typeVal = type > 0 ? 'break' : 'text';
+
+ rowText.push({
+ type: typeVal,
+ content: changelog.substring(prevNode, i)
+ })
+
+ if (nWidth >= 0) {
+ prevNode = i + type;
+ nodeWidth = nWidth;
+ }
+ }
+ }
+
+ // 描述
+ drawDesc(rowText) {
+ rowText.forEach((item, index) => {
+ if (index > 0) {
+ this.descrTop += this.textHeight;
+ this.popupHeight += this.textHeight;
+ }
+
+ this.popupContent.push({
+ id: 'content' + index + 1,
+ tag: 'font',
+ text: item.content,
+ textStyles: {
+ size: '14px',
+ color: '#666',
+ align: descriAlign
+ },
+ position: {
+ top: this.descrTop + 'px',
+ left: this.viewPadding + 'px',
+ width: this.viewWidth + 'px',
+ height: this.textHeight + 'px'
+ }
+ })
+
+ if (item.type == 'break') {
+ this.descrTop += this.textSpace;
+ this.popupHeight += this.textSpace;
+ }
+ })
+ }
+
+ // 按钮
+ drawBtn(id, width, text, left = this.viewPadding) {
+ let boxColor = confirmBgColor,
+ textColor = '#ffffff';
+ if (id == 'cancel') {
+ boxColor = '#f0f0f0';
+ textColor = '#666666';
+ }
+
+ this.popupContent.push({
+ id: id + 'Box',
+ tag: 'rect',
+ rectStyles: {
+ radius: '6px',
+ color: boxColor
+ },
+ position: {
+ bottom: this.viewPadding + 'px',
+ left: left + 'px',
+ width: width + 'px',
+ height: '40px'
+ }
+ })
+
+ this.popupContent.push({
+ id: id + 'Text',
+ tag: 'font',
+ text: text,
+ textStyles: {
+ size: '14px',
+ color: textColor
+ },
+ position: {
+ bottom: this.viewPadding + 'px',
+ left: left + 'px',
+ width: width + 'px',
+ height: '40px'
+ }
+ })
+ }
+
+ // 内容框
+ drawBox(showCancel) {
+ this.maskEl = new plus.nativeObj.View('maskEl', {
+ top: '0px',
+ left: '0px',
+ width: '100%',
+ height: '100%',
+ backgroundColor: 'rgba(0,0,0,0.5)'
+ });
+
+ this.popupEl = new plus.nativeObj.View('popupEl', {
+ tag: 'rect',
+ top: (this.screenHeight - this.popupHeight) / 2 + 'px',
+ left: '10%',
+ height: this.popupHeight + 'px',
+ width: '80%'
+ });
+
+ // 白色背景
+ this.popupEl.drawRect({
+ color: '#ffffff',
+ radius: '8px'
+ }, {
+ top: this.iconSize / 2 + 'px',
+ height: this.popupHeight - this.iconSize / 2 + 'px'
+ });
+
+ this.popupEl.draw(this.popupContent);
+
+ this.popupEl.addEventListener('click', e => {
+ const maxTop = this.popupHeight - this.viewPadding;
+ const maxLeft = this.popupWidth - this.viewPadding;
+ const buttonWidth = (this.viewWidth - this.viewPadding) / 2;
+ if (e.clientY > maxTop - 40 && e.clientY < maxTop) {
+ if (showCancel) {
+ // 取消
+ // if(e.clientX>this.viewPadding && e.clientX maxLeft - buttonWidth && e.clientX < maxLeft) {
+ upgrade.checkOs(this.apkUrl)
+ }
+ } else {
+ if (e.clientX > this.viewPadding && e.clientX < maxLeft) {
+ upgrade.checkOs(this.apkUrl)
+ }
+ }
+ this.hide()
+ }
+ });
+ }
+}
+
+export default new AppDialog()
diff --git a/src/uni_modules/app-upgrade/js_sdk/index.js b/src/uni_modules/app-upgrade/js_sdk/index.js
new file mode 100644
index 0000000..3cfc543
--- /dev/null
+++ b/src/uni_modules/app-upgrade/js_sdk/index.js
@@ -0,0 +1,85 @@
+/**
+ * @Descripttion: app检查更新
+ * @Version: 1.0.0
+ * @Author: leefine
+ */
+
+import config from '@/upgrade-config.js'
+import appDialog from './dialog'
+const { timer=24 }=config.upgrade;
+
+class CheckUpate{
+ // 判断时间戳检测是否更新
+ judgeTimeStamp(){
+ uni.getStorage({
+ key:'appUpdateTime',
+ success:(res)=>{
+ const timeLength=1000*60*60*timer;
+ const currTimeStamp=new Date().getTime();
+ if((res.data+timeLength){
+ // 获取缓存失败(第一次进入APP)检测更新
+ this.getVersion();
+ }
+ })
+ }
+
+ // 获取当前版本信息
+ getVersion(){
+ this.setDefaultIcon();
+ plus.runtime.getProperty(plus.runtime.appid,(wgtinfo)=>{
+ CheckUpate.getUrl(wgtinfo.versionCode).then(res=>{
+ /*
+ res.status 是否有新版本,0无,1有
+ res.path 新版 apk 地址
+ res.changelog 更新日志
+ */
+ if(res.status===1){
+ const path=res.path || '';
+ const changeLog=res.changelog || '';
+ appDialog.show(path,changeLog);
+ }
+ })
+ this.storageTimeStamp()
+ });
+ }
+
+ // 缓存检测更新的时间戳
+ storageTimeStamp(){
+ const currTimeStamp=new Date().getTime();
+ uni.setStorage({
+ key:'appUpdateTime',
+ data:currTimeStamp
+ })
+ }
+
+ setDefaultIcon() {
+ var bitmap = new plus.nativeObj.Bitmap('upgrade_default');
+ var imageStr =
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUMzRDZEQ0M0MDg3MTFFRDgwRDA4MzkzQzE5QjQ0MDIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUMzRDZEQ0I0MDg3MTFFRDgwRDA4MzkzQzE5QjQ0MDIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRBMUQ0M0I0MDVEMTFFREFBNzQ5OUE4ODU5ODZFNzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkRBMUQ0M0M0MDVEMTFFREFBNzQ5OUE4ODU5ODZFNzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6khJ8zAAAOpklEQVR42uxcCZAU1Rn+3+uea2d3YA8XZFmQIIcHBSokkih4kAgeeBDPpOIZLTSWSsoyZSUpzeFZKofGmEqpJVGKUrQiGkO8CiWpiDeyCbrCEhCWY5djd9ydq9/L9153z8wuM7vD7iy2s87W13e/9/rr/+7uZVJK+ubX9595qDtc007UFCfi7KBOqwDaeztIycJwH9GsISVM4MIdRCtasGAUfMrZwG+AM4EdPR4piE6KlDiBIY4JpC9SmATWAY8Ao4BFwMU9Hfwl2izjh/Z6+CE3GlLzV+jYHnPIU7+LgCsLab/0CRQF4SbgrG7b7gHqezpPqXFJE8hkQTgGuCPH9lrg3rzniYKl++stgb2AAwuBSJ79lwJzemyj5CWwZ9W9CpjVyzF3A8GcKjwobGB+KBW9swAVnwxck29/aUtgz3bwdmBEgXbyNqB68BGYX4WPBa4t0EMrjATmDz4VVhdpOfOu+BUQyrG9J9wA1B6wfRDawGnABQWqbjaGA1d+o8KCbgXMg1DfbFwHRNLrJU/ggQRMBs7tI3kKY4Dzu9jBQZbKXQ/4+0GgwjUA/yoINL9KFcZvBHBhEZqdDkxFm2sPtQp/1QSq8lRlEZpV1cXLFIE0GGwgt2ECl/HMen8xl1tUzktdhbWE2PHaVEyP7+XofwMfOctTgBN7OFY5k++h3VUlr8KOxJzfgwZsBn4G/C0rt1DHzgGWKLJyqpOgs9F+iROoyLPgdbl+xpHrp56YnAOsz5HDvOyQ+yZwWI62TwMCWIyXeiA9CZiYJyRZCKzvIWRpAB7Ks2882p84GALpmXkyjwTw1wLivheBeI7tJgicPhgC6ZPzEBMF9hRAYKtzbJftyrYmkzRdlrgNLGcWTWG5b105MBTY3kszlc6xXX5+YOt+OrY1RkZNUNd8StIGHglJGZknlvMrT1pAzKeOCXTfbkL09nbSmC3tNKyUbeDEXiovC7QzyL9/AvDzXPsMIJ6goV+00RGlSyDRUdSzfRsGvJTnwdLpwErnmJznC4vYxn1UX7I2sLmNRvtlr1WTccA/gLeBD7IykRm93XQT7e5sT7/NUFoEJmHWo51UZygCrUKEVRM246BUCgTuaqfakiSwpZOM3VE6zJQDV7dTBBrFqfB4j0Ap9UOjCqRyxPnAEchUPyVqA30gzxzId1gcZ2KUJoGSOGyfwoA9/NFtH8Ka4CElEFInQJwcUAm0nznHStMGki4WJAZahaWgtpIk0GAUgwdu14n/AEpgVZB2lSSBNWGyasto174oLnSAehYpouEVtLU0JRBiNyRMWyUukg2QCCr3O7aOmr5+BCLI2/vqB5RqbSNm8Fxlqg6fTInanRMbidUVkon0xcZSyKD95W+t3bTnwygJbg7FuCDvlHKdvhSIccJBqpo9jZjP9BKBRNvuW07R9xuJBwPOkyA9PRmzGzG/NBSPUtV3LvyEz7yCeLz4b6IJlYJ07mtM3LGkeSP6kr7AzehknJTyx1J3hxAgkaTAqFoaespkMjxFoFIf3FmjIgQC/S450yEBz0v7hbYQBSla37ZtvS8JLykpUuxY0MLV1LVsfrdKfmnR0ApkO3wsFOMyjGEnulpgE2iSUR6EDSlOHFBUS6S+u1OfW0l7cirmLwI1QBioTXKDRuzdsrWqfd96Ifv1LgzlKucjfKFx2xte5yIJqhjD+lh7TPIW4E5nmYr5fSAvvhXSgzsD8+cx0hpnWzmWx1nwHEM7WuSY3Y1vpFhxCVScBBKyZcK2dW8Lw4c4U9ZCqcdrqbPH8GscdKtzh71IYPo7g/OAFVI/20gPXlmoaWrKMPjJW9e+DPUVfXihMi8s3JDRuze+Xt/SuCtl+lWkPgl9V9tkpXEfts3XYyqSChfRBjJF1png5Rkg5DoR6Xho/E5SawlIx1HN696vjEY/7vCXH2eI4tm/45rWPO1PdVIyEFRqOlNKkRmFdG+zXCJSqahMppZ6UAJpNuYhe8CO9DkSgL+pmA+3OKfq6I7kcVv++XSCZ70Y3g+oJqrav2yYsnnNqykzoEplBm7i7PS4MmNAiMWMZOv+RcmWfcO9ZwPVLZeZAdtz4S5DncSp6hAB9fl20+pnAkn9Gke/38yCY6Xjm958tLZtS8zyKftHk9DfZNV3lglJ31TEgkpdfB70wsK0OcyGzF6+SGA9zn00Zvd/mic2f/xkgmV9JNgHqHtU3hHbOP2zl5cmmZ84HBX6uQT9+bK9btdxiLgqbHjRC/ukc2XSlTyyB+3MZ5G0xiopMJDPnfbpiiWQoL2yH6FLHMHziZ+vunvknsa2FKQP6htBP5ekxyBFRgsyzCexnvSeBCoCpaSMA5FZflj/lQNXqguLwVZN2Pn+lslfvPNQwsi8YX8wUKFQTXvrv07577NPKefETfWdorwYGH3AGFz1tf1Jimx4zgb63bvsSh11n5O4SghR49J81vonF5bHOjaIPsSFKU6JOeueWFAV3Z5UoYvBeQgd35xrDF2kUVqItGXKgzZQmgfYnXSG4oIOx4VdDxKhfj6q29fYPmvD8gXwyOJgyIvBcZzQ9NY9U5tWvdNphhR5qqOr0MfRB9q+DISVIiMSTphDyr2owsJn33n3Wy7LXnYlQKXEep+8EVdSTyAxZoRoxufPvTJhZ8OjcbNA1cWoa9t2rp770SN3CR2aIG4xWC36uF0635FlxuD2bc+lsIiX+RNGOGR5T4UZJDBtdRwP7IQSXdalqEEwc5fARVqckSESdP7Hi34R6Wx7T2UULE+8x5yYz5dKfHHhu/deHuncEU9CdU1D27670f6IA6xuVt/pbdKKkxtle84LZ3k96cYZJJqxsA5oArYDrdh2AdT4bClSyE4CUOXPoj/88IErcPQuQXnee7FTts65Hy35ybida/8XN8ugugYxzn6AvfOAfWh7L8Rsr7T7sLTdc+LRtB2UsmgPnYpazkKAyklm7rZTgfsAE/UfNzZjexnmAcyDqsiqiksqplXmqxNkTNr2RsNZ6+uueOmYa1+ANwpkl7skJBPe2jr902euPrHphTc7fWVaiJg2feIT9DFVtSfdspDmW07B9mWYV6SzOTvQ7/QegSo5ZzqFwky45KkPX87D3mZHD9V/H2rPTrFUhUY42hQDiTMbl76yJzRs/pqx5z4eSthP79SZsI/y1E+XXT+n4Q/LOs2gLjErGedSfePFm7PSyXQOjuk2TH+EhWexHHDstEKsWPWYoqmwSKbI6uzgxJ2MjsRq4BygOWMHMzbJkvbWwyBqIwKSKhGCq7gubvjpnE8efOK7m1bepDytEhgEy+Lkz1fMn9Ow5E8x7FfWv8YvqR7nDTEsBHQibWuznYYTtqzE+uUqcHbGpY6Le04CRSxOSNJNfUukfA0T9RnXnoxgZNRa2bIyBM/Dg4xq/ekmQps7JNwC10+czl1332K041szdu7tszYsu2V2w2IEy5A8dDAKslQXsNUxhXCuGYy2WlxTw2VWAUEIVyaXYx7Gtj+DVOTBomgPFIpZzmKwU9VSkycuoC7/LCyTFyjyFHH1Ia7/AVnKLnUdDnu3clQZuzkhxZpWBIXqQ5I5DYseGL9jzYpxu97ZrBxNAgo9ClJXF2BnpKSYJiX7nVLxkWaSKmFItyK+iWIQRlrORTZNjwMV2L4QSJHXVFiXsaS13PaGytZlZ/2KOKkrht8q5zQ6zLVxs+wyosIEyekEycQfx4RZdRmCoQSGxhDmTNzx1mYIl878R8D11AXZaKQRT4GnqyFuPslt1S8zBI0LpKhSqbTMV/sSiyB9D2rR9BqBPBiI+aoiv0Wk3ya7WTwLtsfAhY6v4FQbYpo4ydLkKYwi/dIMHYOQ7rEjKzj3K2JUyQQOI4l5bYAp4iOCy2UYdS0QwHkRtw0VP6qrOSIoYBZsEmU3Ap312zB/2HMEMp8p1ONMFXpl1QB1ROFHLxMjnCJ+ZkvHgelF2CUCZ84rM9j9E4aYviB8etKyaDjIG1NhRCDFS6V60qer8ci7mUa6HZcwpebD/E4u7NYnNbRGpDBf5z0C9QCtLndbOqpbD7UNK/Jw4ZLnREpJpHT2p5i8pcyQR4/HeWMrDEiVbvOn2Dc3LbVcm8QEdZVk3YaiqT5kOyor7XlFt/qQBwPp7jZHe1sfo8og17WjHp7j7HGkyilK0DZLIrrxsRuG+dlzqaSYgHP3kGsz7R+yDormG4WhSl1wVu1RkWd8HpNAmQlS08VUFSBXKW9rMOouKd2wCdJluVKI9TD5eLsMmPMsk69iQaMaIw0Rp6x/fYTMhlE8LbndoG5YFW6cMh8iOydOx4tefC4s06mSbfugQtVBQ4cTvZRYNsFDN+tkxiawEqjiAXM5D/qUfV2K9e87tsIl/V33+FxQx/jUqx6wn0LIbraQPEpgtucVSvoMCsL2ify2z8V+4D297HhTXOh1mN6DuzAP4VEY2+bo7TZUTPR6L1KtUQ0NYJRd4HBL+x63gQiraSisuCKkwFfZVkqVN7N0dfZMkUxOZYKpNxxWQ/IC6cSYaAPW1/aaHQFh6LCywx1JoePQzPMRDxOowoegj1O5Ul/okyzsLYCXoGu7yf0SXZMlFsKxXwyJm2GLpnSrC09jIVbIaAzY34oAMpRESjuWrkUHL4UxlH6pSDuPctx5n2HLASsMuzCav2TUTzueeuAictXa3teC5Sey1LlnqP8YHOT2exNkx4IefrmI0gUDJX3Uk5XPjSWYtWViPZZNnL3OaDGwvRD7Z8eFksIBg0xO1PU9GU+GMXYCz7k9aB0wsMIBu9YER7K4uwRlLX8GTV6UL3TJBRXam7CBfp9KIUW39M6LXhjj8uN2B2F3NCmFqloG94OoDTmkSen5TXBIbcyueBUMZQdDiKnSlfIi/or9UEk7EL/J9KD7ONQ2jOoGwMqoscYD2Pb3rPWCwQFkNd5W4ew4MOC3B836CsbeAO7UEmRL32uY/rIPNlVDRQE+2wgW3QsX96GS83pvwLTrff0c5u9x8ZMxH6+fa7B+vAyE4Zgm6xLqF+v3fwEGAO3tQjlPh8R9AAAAAElFTkSuQmCC';
+
+ bitmap.loadBase64Data(imageStr, function() {
+ bitmap.save("_pic/upgrade.png", {}, function(i) {
+ bitmap.clear();
+ }, function(e) {
+ bitmap.clear();
+ });
+ }, function() {
+ bitmap.clear();
+ });
+ }
+}
+
+// type检测类型:0自动检测,1用户主动检测
+export default function(fn,type=0){
+ const cu=new CheckUpate()
+ if(type==1){
+ cu.getVersion();
+ }else{
+ cu.judgeTimeStamp();
+ }
+ CheckUpate.getUrl=fn;
+}
\ No newline at end of file
diff --git a/src/uni_modules/app-upgrade/js_sdk/upgrade.js b/src/uni_modules/app-upgrade/js_sdk/upgrade.js
new file mode 100644
index 0000000..3b9d83e
--- /dev/null
+++ b/src/uni_modules/app-upgrade/js_sdk/upgrade.js
@@ -0,0 +1,94 @@
+/**
+ * @Descripttion: app下载更新
+ * @Version: 1.0.0
+ * @Author: leefine
+ */
+
+import config from '@/upgrade-config.js'
+const { upType=0 }=config.upgrade;
+
+class Upgrade{
+
+ // 检测平台
+ checkOs(apkUrl){
+ uni.getSystemInfo({
+ success:(res) => {
+ if(res.osName=="android"){
+ if(upType==1 && packageName){
+ plus.runtime.openURL('market://details?id='+packageName)
+ }else{
+ this.downloadInstallApp(apkUrl)
+ }
+ }else if(res.osName=='ios' && appleId){
+ // apple id 在 app conection 上传的位置可以看到 https://appstoreconnect.apple.com
+ plus.runtime.launchApplication({
+ action: `itms-apps://itunes.apple.com/cn/app/id${appleId}?mt=8`
+ }, function(err) {
+ uni.showToast({
+ title:err.message,
+ icon:'none'
+ })
+ })
+ }
+ }
+ })
+ }
+
+ // 下载更新
+ downloadInstallApp(apkUrl){
+ const dtask = plus.downloader.createDownload(apkUrl, {}, function (d,status){
+ // 下载完成
+ if (status == 200){
+ plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename),{},{},function(error){
+ uni.showToast({
+ title: '安装失败',
+ icon:'none'
+ });
+ })
+ }else{
+ uni.showToast({
+ title: '更新失败',
+ icon:'none'
+ });
+ }
+ });
+ this.downloadProgress(dtask);
+ }
+
+ // 下载进度
+ downloadProgress(dtask){
+ try{
+ dtask.start(); //开启下载任务
+ let prg=0;
+ let showLoading=plus.nativeUI.showWaiting('正在下载');
+ dtask.addEventListener('statechanged',function(task,status){
+ // 给下载任务设置监听
+ switch(task.state){
+ case 1:
+ showLoading.setTitle('正在下载');
+ break;
+ case 2:
+ showLoading.setTitle('已连接到服务器');
+ break;
+ case 3:
+ prg=parseInt((parseFloat(task.downloadedSize)/parseFloat(task.totalSize))*100);
+ showLoading.setTitle('正在下载'+prg+'%');
+ break;
+ case 4:
+ // 下载完成
+ plus.nativeUI.closeWaiting();
+ break;
+ }
+ })
+ }catch(e){
+ plus.nativeUI.closeWaiting();
+ uni.showToast({
+ title: '更新失败',
+ icon:'none'
+ })
+ }
+ }
+
+}
+
+export default new Upgrade()
\ No newline at end of file
diff --git a/src/uni_modules/app-upgrade/package.json b/src/uni_modules/app-upgrade/package.json
new file mode 100644
index 0000000..214f39d
--- /dev/null
+++ b/src/uni_modules/app-upgrade/package.json
@@ -0,0 +1,84 @@
+{
+ "id": "app-upgrade",
+ "displayName": "APP Upgrade 支持自动升级和手动检测升级,支持android和ios,支持从服务端获取最新的Change Log.",
+ "version": "1.0.9",
+ "description": "uni-app 开发 APP 自动更新及检测更新,弹窗提示系统端发布的更新内容,整包升级,可覆盖 tabbar,支持 安卓 和 苹果.",
+ "keywords": [
+ "app升级,",
+ "APP",
+ "Upgrade,自动更新,检测更新"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.6.15"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "1.00"
+ },
+ "sourcecode": {
+ "price": "1.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": "",
+ "type": "sdk-js"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "u",
+ "Android Browser": "u",
+ "微信浏览器(Android)": "u",
+ "QQ浏览器(Android)": "u"
+ },
+ "H5-pc": {
+ "Chrome": "u",
+ "IE": "u",
+ "Edge": "u",
+ "Firefox": "u",
+ "Safari": "u"
+ },
+ "小程序": {
+ "微信": "u",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/uni_modules/app-upgrade/readme.md b/src/uni_modules/app-upgrade/readme.md
new file mode 100644
index 0000000..8a2565d
--- /dev/null
+++ b/src/uni_modules/app-upgrade/readme.md
@@ -0,0 +1,111 @@
+# app-upgrade
+
+> uni-app 开发 APP 检查更新,弹窗提示,整包升级,可覆盖 tabbar,支持 android 和 ios.
+
+### 使用介绍
+
+1. 使用 HBuilderx 导入插件,在相关文件中引入
+
+> `app_upgrade(callback,type)` 方法接收两个参数:
+>> `callback(versionCode)` 回调函数携带参数为当前应用版本号,例如 100,用来比较是否有新版本,返回对象 *{'status': 0 无新版本 | 1 有新版本,'changelog':'更新内容', 'path': '新apk地址'}*
+>>
+>> `type` 0 主动升级,1 用户检测升级,默认为 0
+
+2. **主动升级**,在 App.vue 中引入,在 onLaunch 应用生命周期中调用
+
+```
+import app_upgrade from '@/uni_modules/app-upgrade/js_sdk/index.js'
+
+export default {
+ onLaunch: function() {
+ app_upgrade(async (versionCode)=>{
+ //查询是否更新
+ const { statusCode,data }=await uni.request({
+ url:'https://xxx',
+ data:{
+ 'versionCode':versionCode
+ },
+ method:'POST'
+ })
+
+ if(statusCode==200){
+ return {
+ changelog:data.changelog,
+ status:data.status, // 0 无新版本 | 1 有新版本
+ path:data.path // 新apk地址
+ }
+ }
+ })
+ }
+}
+```
+
+3. **用户检测升级**,在检测页面引入并调用
+
+```
+import app_upgrade from '@/uni_modules/app-upgrade/js_sdk/index.js'
+
+onUpdate(){
+ app_upgrade(async (versionCode)=>{
+ //查询是否更新
+ const { statusCode,data }=await uni.request({
+ url:'https://xxx',
+ data:{
+ 'versionCode':versionCode
+ },
+ method:'POST'
+ })
+
+ if(statusCode==200){
+ return {
+ changelog:data.changelog,
+ status:data.status,
+ path:data.path
+ }
+ }else{
+ uni.showToast({
+ title:'当前已是最新版',
+ icon:'none'
+ })
+ }
+ },1)
+}
+```
+
+4. 在项目根目录下创建 `upgrade-config.js` 配置文件,写入以下配置,下列对象的键值根据自己实际情况设置
+
+```
+export default {
+ upgrade:{
+ packageName:'',
+ appleId:'',
+ upType:0,
+ timer:24,
+ icon:'/static/logo.png',
+ title:'发现新版本',
+ confirmText:'立即更新',
+ cancelTtext:'稍后再说',
+ confirmBgColor:'#409eff',
+ showCancel:true,
+ titleAlign:'left',
+ descriAlign:'left'
+ }
+}
+```
+
+5. upgrade-config.js `upgrade` 配置说明,全部非必填
+
+|字段|描述|默认值|
+|-- |-- |-- |
+|upType|安卓升级方式,0 应用内更新 / 1 去应用商店更新|0|
+|packageName|android 包名,upType=1 时必填| |
+|appleId|ios 应用 id,app store中获取,ios必填| |
+|timer|主动检测间隔小时|24|
+|icon|弹窗图标| 如果为空使用内置Base64图片|
+|title|弹窗标题|发现新版本|
+|titleAlign|弹窗标题对齐方式,left / center|left|
+|confirmText|弹窗确定文字|立即更新|
+|confirmBgColor|弹窗确定背景颜色|#409eff|
+|cancelTtext|弹窗取消文字|稍后再说|
+|showCancel|弹窗是否显示取消,true / false|true|
+|descriAlign|更新描述对齐方式,left / center|left|
\ No newline at end of file
diff --git a/src/uni_modules/l-calendar/changelog.md b/src/uni_modules/l-calendar/changelog.md
new file mode 100644
index 0000000..1e20611
--- /dev/null
+++ b/src/uni_modules/l-calendar/changelog.md
@@ -0,0 +1,8 @@
+## 1.0.3(2023-05-31)
+1.0.3
+## 1.0.2(2023-05-20)
+1.0.2
+## 1.0.1(2023-05-19)
+1.0.1
+## 1.0.0(2023-05-19)
+1.0.0
diff --git a/src/uni_modules/l-calendar/components/l-calendar/calendar.js b/src/uni_modules/l-calendar/components/l-calendar/calendar.js
new file mode 100644
index 0000000..72b0e2b
--- /dev/null
+++ b/src/uni_modules/l-calendar/components/l-calendar/calendar.js
@@ -0,0 +1,562 @@
+/**
+ * @1900-2100区间内的公历、农历互转
+ * @公历转农历:solar2lunar
+ * @农历转公历:lunar2solar
+ */
+let calendar = {
+ /**
+ * 农历1900-2100的润大小信息表
+ * @Array Of Property
+ * @return Hex
+ */
+ lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, //1900-1909
+ 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, //1910-1919
+ 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, //1920-1929
+ 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, //1930-1939
+ 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, //1940-1949
+ 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, //1950-1959
+ 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, //1960-1969
+ 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, //1970-1979
+ 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, //1980-1989
+ 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, //1990-1999
+ 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, //2000-2009
+ 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, //2010-2019
+ 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, //2020-2029
+ 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, //2030-2039
+ 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, //2040-2049
+ 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, //2050-2059
+ 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, //2060-2069
+ 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, //2070-2079
+ 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, //2080-2089
+ 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, //2090-2099
+ 0x0d520
+ ], //2100
+ /**
+ * 公历每个月份的天数普通表
+ * @Array Of Property
+ * @return Number
+ */
+ solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+ /**
+ * 天干地支之天干速查表
+ * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
+ * @return Cn string
+ */
+ Gan: ["\u7532", "\u4e59", "\u4e19", "\u4e01", "\u620a", "\u5df1", "\u5e9a", "\u8f9b", "\u58ec", "\u7678"],
+ /**
+ * 天干地支之地支速查表
+ * @Array Of Property
+ * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
+ * @return Cn string
+ */
+ Zhi: ["\u5b50", "\u4e11", "\u5bc5", "\u536f", "\u8fb0", "\u5df3", "\u5348", "\u672a", "\u7533", "\u9149", "\u620c",
+ "\u4ea5"
+ ],
+ /**
+ * 天干地支之地支速查表<=>生肖
+ * @Array Of Property
+ * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
+ * @return Cn string
+ */
+ Animals: ["\u9f20", "\u725b", "\u864e", "\u5154", "\u9f99", "\u86c7", "\u9a6c", "\u7f8a", "\u7334", "\u9e21",
+ "\u72d7", "\u732a"
+ ],
+ /**
+ * 24节气速查表
+ * @Array Of Property
+ * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
+ * @return Cn string
+ */
+ solarTerm: ["\u5c0f\u5bd2", "\u5927\u5bd2", "\u7acb\u6625", "\u96e8\u6c34", "\u60ca\u86f0", "\u6625\u5206",
+ "\u6e05\u660e", "\u8c37\u96e8", "\u7acb\u590f", "\u5c0f\u6ee1", "\u8292\u79cd", "\u590f\u81f3", "\u5c0f\u6691",
+ "\u5927\u6691", "\u7acb\u79cb", "\u5904\u6691", "\u767d\u9732", "\u79cb\u5206", "\u5bd2\u9732", "\u971c\u964d",
+ "\u7acb\u51ac", "\u5c0f\u96ea", "\u5927\u96ea", "\u51ac\u81f3"
+ ],
+ /**
+ * 1900-2100各年的24节气日期速查表
+ * @Array Of Property
+ * @return 0x string For splice
+ */
+ sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',
+ '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',
+ 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',
+ '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',
+ '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',
+ '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',
+ '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',
+ '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
+ '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',
+ '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
+ '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',
+ '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',
+ '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',
+ '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',
+ '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',
+ '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',
+ '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',
+ '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',
+ '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',
+ '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'
+ ],
+ /**
+ * 数字转中文速查表
+ * @Array Of Property
+ * @trans ['日','一','二','三','四','五','六','七','八','九','十']
+ * @return Cn string
+ */
+ nStr1: ["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341"],
+ /**
+ * 日期转农历称呼速查表
+ * @Array Of Property
+ * @trans ['初','十','廿','卅']
+ * @return Cn string
+ */
+ nStr2: ["\u521d", "\u5341", "\u5eff", "\u5345"],
+ /**
+ * 月份转农历称呼速查表
+ * @Array Of Property
+ * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
+ * @return Cn string
+ */
+ nStr3: ["\u6b63", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341", "\u51ac",
+ "\u814a"
+ ],
+ /**
+ * 返回农历y年一整年的总天数
+ * @param lunar Year
+ * @return Number
+ * @eg:let count = calendar.lYearDays(1987) ;//count=387
+ */
+ lYearDays: function(y) {
+ let i, sum = 348;
+ for (i = 0x8000; i > 0x8; i >>= 1) {
+ sum += (calendar.lunarInfo[y - 1900] & i) ? 1 : 0;
+ }
+ return (sum + calendar.leapDays(y));
+ },
+ /**
+ * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
+ * @param lunar Year
+ * @return Number (0-12)
+ * @eg:let leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
+ */
+ leapMonth: function(y) { //闰字编码 \u95f0
+ return (calendar.lunarInfo[y - 1900] & 0xf);
+ },
+ /**
+ * 返回农历y年闰月的天数 若该年没有闰月则返回0
+ * @param lunar Year
+ * @return Number (0、29、30)
+ * @eg:let leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
+ */
+ leapDays: function(y) {
+ if (calendar.leapMonth(y)) {
+ return ((calendar.lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
+ }
+ return (0);
+ },
+ /**
+ * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
+ * @param lunar Year
+ * @return Number (-1、29、30)
+ * @eg:let MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
+ */
+ monthDays: function(y, m) {
+ if (m > 12 || m < 1) {
+ return -1
+ } //月份参数从1至12,参数错误返回-1
+ return ((calendar.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);
+ },
+ /**
+ * 返回公历(!)y年m月的天数
+ * @param solar Year
+ * @return Number (-1、28、29、30、31)
+ * @eg:let solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
+ */
+ solarDays: function(y, m) {
+ if (m > 12 || m < 1) {
+ return -1
+ } //若参数错误 返回-1
+ let ms = m - 1;
+ if (ms == 1) { //2月份的闰平规律测算后确认返回28或29
+ return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28);
+ } else {
+ return (calendar.solarMonth[ms]);
+ }
+ },
+ /**
+ * 农历年份转换为干支纪年
+ * @param lYear 农历年的年份数
+ * @return Cn string
+ */
+ toGanZhiYear: function(lYear) {
+ let ganKey = (lYear - 3) % 10;
+ let zhiKey = (lYear - 3) % 12;
+ if (ganKey == 0) ganKey = 10; //如果余数为0则为最后一个天干
+ if (zhiKey == 0) zhiKey = 12; //如果余数为0则为最后一个地支
+ return calendar.Gan[ganKey - 1] + calendar.Zhi[zhiKey - 1];
+ },
+ /**
+ * 公历月、日判断所属星座
+ * @param cMonth [description]
+ * @param cDay [description]
+ * @return Cn string
+ */
+ toAstro: function(cMonth, cDay) {
+ let s =
+ "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";
+ let arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22];
+ return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + "\u5ea7"; //座
+ },
+ /**
+ * 传入offset偏移量返回干支
+ * @param offset 相对甲子的偏移量
+ * @return Cn string
+ */
+ toGanZhi: function(offset) {
+ return calendar.Gan[offset % 10] + calendar.Zhi[offset % 12];
+ },
+ /**
+ * 传入公历(!)y年获得该年第n个节气的公历日期
+ * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
+ * @return day Number
+ * @eg:let _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
+ */
+ getTerm: function(y, n) {
+ if (y < 1900 || y > 2100) {
+ return -1;
+ }
+ if (n < 1 || n > 24) {
+ return -1;
+ }
+ let _table = calendar.sTermInfo[y - 1900];
+ let _info = [
+ parseInt('0x' + _table.substr(0, 5)).toString(),
+ parseInt('0x' + _table.substr(5, 5)).toString(),
+ parseInt('0x' + _table.substr(10, 5)).toString(),
+ parseInt('0x' + _table.substr(15, 5)).toString(),
+ parseInt('0x' + _table.substr(20, 5)).toString(),
+ parseInt('0x' + _table.substr(25, 5)).toString()
+ ];
+ let _calday = [
+ _info[0].substr(0, 1),
+ _info[0].substr(1, 2),
+ _info[0].substr(3, 1),
+ _info[0].substr(4, 2),
+ _info[1].substr(0, 1),
+ _info[1].substr(1, 2),
+ _info[1].substr(3, 1),
+ _info[1].substr(4, 2),
+ _info[2].substr(0, 1),
+ _info[2].substr(1, 2),
+ _info[2].substr(3, 1),
+ _info[2].substr(4, 2),
+ _info[3].substr(0, 1),
+ _info[3].substr(1, 2),
+ _info[3].substr(3, 1),
+ _info[3].substr(4, 2),
+ _info[4].substr(0, 1),
+ _info[4].substr(1, 2),
+ _info[4].substr(3, 1),
+ _info[4].substr(4, 2),
+ _info[5].substr(0, 1),
+ _info[5].substr(1, 2),
+ _info[5].substr(3, 1),
+ _info[5].substr(4, 2),
+ ];
+ return parseInt(_calday[n - 1]);
+ },
+ /**
+ * 传入农历数字月份返回汉语通俗表示法
+ * @param lunar month
+ * @return Cn string
+ * @eg:let cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
+ */
+ toChinaMonth: function(m) { // 月 => \u6708
+ if (m > 12 || m < 1) {
+ return -1
+ } //若参数错误 返回-1
+ let s = calendar.nStr3[m - 1];
+ s += "\u6708"; //加上月字
+ return s;
+ },
+ /**
+ * 传入农历日期数字返回汉字表示法
+ * @param lunar day
+ * @return Cn string
+ * @eg:let cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
+ */
+ toChinaDay: function(d) { //日 => \u65e5
+ let s;
+ switch (d) {
+ case 10:
+ s = '\u521d\u5341';
+ break;
+ case 20:
+ s = '\u4e8c\u5341';
+ break;
+ break;
+ case 30:
+ s = '\u4e09\u5341';
+ break;
+ break;
+ default:
+ s = calendar.nStr2[Math.floor(d / 10)];
+ s += calendar.nStr1[d % 10];
+ }
+ return (s);
+ },
+ /**
+ * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
+ * @param y year
+ * @return Cn string
+ * @eg:let animal = calendar.getAnimal(1987) ;//animal='兔'
+ */
+ getAnimal: function(y) {
+ return calendar.Animals[(y - 4) % 12]
+ },
+ /**
+ * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
+ * @param y solar year
+ * @param m solar month
+ * @param d solar day
+ * @return JSON object
+ * @eg:console.log(calendar.solar2lunar(1987,11,01));
+ */
+ solar2lunar: function(y, m, d) { //参数区间1900.1.31~2100.12.31
+ if (y < 1900 || y > 2100) {
+ return -1;
+ } //年份限定、上限
+ if (y == 1900 && m == 1 && d < 31) {
+ return -1;
+ } //下限
+ let objDate;
+ if (!y) { //未传参 获得当天
+ objDate = new Date();
+ } else {
+ objDate = new Date(y, parseInt(m) - 1, d)
+ }
+ let i, leap = 0,
+ temp = 0;
+ //修正ymd参数
+ y = objDate.getFullYear();
+ m = objDate.getMonth() + 1;
+ d = objDate.getDate();
+ let offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) /
+ 86400000;
+ for (i = 1900; i < 2101 && offset > 0; i++) {
+ temp = calendar.lYearDays(i);
+ offset -= temp;
+ }
+ if (offset < 0) {
+ offset += temp;
+ i--;
+ }
+ //是否今天
+ let isTodayObj = new Date(),
+ isToday = false;
+ if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
+ isToday = true;
+ }
+ //星期几
+ let nWeek = objDate.getDay(),
+ cWeek = calendar.nStr1[nWeek];
+ if (nWeek == 0) {
+ nWeek = 7;
+ } //数字表示周几顺应天朝周一开始的惯例
+ //农历年
+ let year = i;
+ leap = calendar.leapMonth(i); //闰哪个月
+ let isLeap = false;
+ //效验闰月
+ for (i = 1; i < 13 && offset > 0; i++) {
+ //闰月
+ if (leap > 0 && i == (leap + 1) && isLeap == false) {
+ --i;
+ isLeap = true;
+ temp = calendar.leapDays(year); //计算农历闰月天数
+ } else {
+ temp = calendar.monthDays(year, i); //计算农历普通月天数
+ }
+ //解除闰月
+ if (isLeap == true && i == (leap + 1)) {
+ isLeap = false;
+ }
+ offset -= temp;
+ }
+ if (offset == 0 && leap > 0 && i == leap + 1)
+ if (isLeap) {
+ isLeap = false;
+ } else {
+ isLeap = true;
+ --i;
+ }
+ if (offset < 0) {
+ offset += temp;
+ --i;
+ }
+ //农历月
+ let month = i;
+ //农历日
+ let day = offset + 1;
+ //天干地支处理
+ let sm = m - 1;
+ let gzY = calendar.toGanZhiYear(year);
+ //月柱 1900年1月小寒以前为 丙子月(60进制12)
+ let firstNode = calendar.getTerm(year, (m * 2 - 1)); //返回当月「节」为几日开始
+ let secondNode = calendar.getTerm(year, (m * 2)); //返回当月「节」为几日开始
+ //依据12节气修正干支月
+ let gzM = calendar.toGanZhi((y - 1900) * 12 + m + 11);
+ if (d >= firstNode) {
+ gzM = calendar.toGanZhi((y - 1900) * 12 + m + 12);
+ }
+ //传入的日期的节气与否
+ let isTerm = false;
+ let Term = null;
+ if (firstNode == d) {
+ isTerm = true;
+ Term = calendar.solarTerm[m * 2 - 2];
+ }
+ if (secondNode == d) {
+ isTerm = true;
+ Term = calendar.solarTerm[m * 2 - 1];
+ }
+ //日柱 当月一日与 1900/1/1 相差天数
+ let dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10;
+ let gzD = calendar.toGanZhi(dayCyclical + d - 1);
+ //该日期所属的星座
+ let astro = calendar.toAstro(m, d);
+ return {
+ 'lYear': year,
+ 'lMonth': month,
+ 'lDay': day,
+ 'Animal': calendar.getAnimal(year),
+ 'IMonthCn': (isLeap ? "\u95f0" : '') + calendar.toChinaMonth(month),
+ 'IDayCn': calendar.toChinaDay(day),
+ 'cYear': y,
+ 'cMonth': m,
+ 'cDay': d,
+ 'gzYear': gzY,
+ 'gzMonth': gzM,
+ 'gzDay': gzD,
+ 'isToday': isToday,
+ 'isLeap': isLeap,
+ 'nWeek': nWeek,
+ 'ncWeek': "\u661f\u671f" + cWeek,
+ 'isTerm': isTerm,
+ 'Term': Term,
+ 'astro': astro
+ };
+ },
+ /**
+ * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
+ * @param y lunar year
+ * @param m lunar month
+ * @param d lunar day
+ * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
+ * @return JSON object
+ * @eg:console.log(calendar.lunar2solar(1987,9,10));
+ */
+ lunar2solar: function(y, m, d, isLeapMonth) { //参数区间1900.1.31~2100.12.1
+ isLeapMonth = !!isLeapMonth;
+ let leapOffset = 0;
+ let leapMonth = calendar.leapMonth(y);
+ let leapDay = calendar.leapDays(y);
+ if (isLeapMonth && (leapMonth != m)) {
+ return -1;
+ } //传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
+ if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) {
+ return -1;
+ } //超出了最大极限值
+ let day = calendar.monthDays(y, m);
+ let _day = day;
+ //bugFix 2016-9-25
+ //if month is leap, _day use leapDays method
+ if (isLeapMonth) {
+ _day = calendar.leapDays(y, m);
+ }
+ if (y < 1900 || y > 2100 || d > _day) {
+ return -1;
+ } //参数合法性效验
+ //计算农历的时间差
+ let offset = 0;
+ for (let i = 1900; i < y; i++) {
+ offset += calendar.lYearDays(i);
+ }
+ let leap = 0,
+ isAdd = false;
+ for (let i = 1; i < m; i++) {
+ leap = calendar.leapMonth(y);
+ if (!isAdd) { //处理闰月
+ if (leap <= i && leap > 0) {
+ offset += calendar.leapDays(y);
+ isAdd = true;
+ }
+ }
+ offset += calendar.monthDays(y, i);
+ }
+ //转换闰月农历 需补充该年闰月的前一个月的时差
+ if (isLeapMonth) {
+ offset += day;
+ }
+ //1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
+ let stmap = Date.UTC(1900, 1, 30, 0, 0, 0);
+ let calObj = new Date((offset + d - 31) * 86400000 + stmap);
+ let cY = calObj.getUTCFullYear();
+ let cM = calObj.getUTCMonth() + 1;
+ let cD = calObj.getUTCDate();
+ return calendar.solar2lunar(cY, cM, cD);
+ }
+};
+
+export default {
+ solar2lunar: calendar.solar2lunar,
+ lunar2solar: calendar.lunar2solar
+};
\ No newline at end of file
diff --git a/src/uni_modules/l-calendar/components/l-calendar/l-calendar.vue b/src/uni_modules/l-calendar/components/l-calendar/l-calendar.vue
new file mode 100644
index 0000000..341860a
--- /dev/null
+++ b/src/uni_modules/l-calendar/components/l-calendar/l-calendar.vue
@@ -0,0 +1,832 @@
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+ {{ showTitle }}
+
+
+
+
+ 日
+ 一
+ 二
+ 三
+ 四
+ 五
+ 六
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ getText(index, startDate, endDate) }}
+
+
+
+ {{ startText }}
+
+ {{ endText }}
+
+ {{ month }}
+
+
+
+
+ {{ !isRange ? activeDate : startDate }}
+ 至{{ endDate }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uni_modules/l-calendar/package.json b/src/uni_modules/l-calendar/package.json
new file mode 100644
index 0000000..7a0b99d
--- /dev/null
+++ b/src/uni_modules/l-calendar/package.json
@@ -0,0 +1,84 @@
+{
+ "id": "l-calendar",
+ "displayName": "日历 日期选择 选择年月日",
+ "version": "1.0.3",
+ "description": "日历 日期选择 选择年月日 仅测过小程序其他自测",
+ "keywords": [
+ "日历",
+ "日期选择",
+ "选择年月日",
+ "年月日",
+ "l-calendar"
+],
+ "repository": "",
+"engines": {
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "y",
+ "快手": "y",
+ "飞书": "y",
+ "京东": "y"
+ },
+ "快应用": {
+ "华为": "y",
+ "联盟": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/uni_modules/l-calendar/readme.md b/src/uni_modules/l-calendar/readme.md
new file mode 100644
index 0000000..6b5f408
--- /dev/null
+++ b/src/uni_modules/l-calendar/readme.md
@@ -0,0 +1,40 @@
+# l-calendar
+
+# ## 使用方法
+配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。
+
+```html
+
+
+
+```
+## 组件属性
+
+| 属性 | 类型 | 默认值 | 说明 |
+|:---:|:---:|:---:|---|
+| value | Boolean | false | v-module 双向绑定的值 |
+| isRange | Boolean | false | 是否选择范围 true是 false选择单个日期 |
+| maxYear | Number | 2100 | 可切换最大年份 |
+| minYear | Number | 1920 | 可切换最小年份 |
+| minDate | String | '1920-01-01' | 最小可选日期 不在范围内日期禁选 |
+| maxDate | String | '2100-1-1' | 最大可选日期 不在范围内日期禁选 |
+| title | String | '日期选择' | 组件标题 |
+| monthChangeColor | String | #999 | 月份切换箭头颜色 |
+| yearChangeColor | String | '#bfbfbf' | 年份切换箭头颜色 |
+| color | String | #333 | 默认日期字体颜色 |
+| activeColor | String | '#fff' | 选中日期字体颜色 |
+| activeBgColor | String | '#55BBF9' | 选中日期背景色 |
+| rangeBgColor | String | rgba(85, 187, 249, 0.1) | 范围内日期背景色 |
+| startText | String | 开始 | 范围选择时生效 开始日期自定义文字 |
+| endText | String | 结束 | 范围选择时生效 结束日期自定义文字 |
+| lunar | Boolean | true | 是否显示农历 |
+| initStartDate | String | '' | 初始化开始选中日期 格式: 2020-06-06 或 2020/06/06 |
+| initEndDate | String | '' | 初始化开始选中日期 格式: 2020-06-06 或 2020/06/06 |
+
+
+## 组件事件
+
+| 名称 | 触发时机 |
+|:---:|---|
+| change | 点击确定按钮选择日期 |
+
diff --git a/src/upgrade-config.js b/src/upgrade-config.js
new file mode 100644
index 0000000..6c27e4c
--- /dev/null
+++ b/src/upgrade-config.js
@@ -0,0 +1,16 @@
+export default {
+ upgrade:{
+ packageName:'',
+ appleId:'',
+ upType:0,
+ timer:24,
+ icon:'/static/logo.png',
+ title:'发现新版本',
+ confirmText:'立即更新',
+ cancelTtext:'稍后再说',
+ confirmBgColor:'#409eff',
+ showCancel:true,
+ titleAlign:'left',
+ descriAlign:'left'
+ }
+}
diff --git a/src/utils/audioManager.js b/src/utils/audioManager.js
new file mode 100644
index 0000000..df40cc3
--- /dev/null
+++ b/src/utils/audioManager.js
@@ -0,0 +1,80 @@
+class AudioManager {
+ constructor() {
+ this.audioContext = null;
+ this.isPlaying = false;
+ }
+
+ init() {
+ if (!this.audioContext) {
+ // #ifdef APP-PLUS
+ // 使用 plus.audio 而不是 createInnerAudioContext
+ this.audioContext = plus.audio.createPlayer('/static/audio/ninyouxindepeibudan.mp3');
+
+ // 监听播放完成
+ this.audioContext.addEventListener('ended', () => {
+ console.log('Audio playback completed');
+ this.isPlaying = false;
+ });
+
+ // 监听错误
+ this.audioContext.addEventListener('error', (e) => {
+ console.error('Audio error:', e.message);
+ this.isPlaying = false;
+ });
+ // #endif
+ }
+ }
+
+ play() {
+ console.log('audioContext',this.audioContext)
+ console.log('isplay', this.isPlaying)
+ if (!this.audioContext) {
+ this.init();
+ }
+
+ // #ifdef APP-PLUS
+ if (!this.isPlaying) {
+ try {
+ // 开始播放
+ this.audioContext.play(() => {
+ // 当音频文件播放完成时回调。
+ this.isPlaying = false;
+ console.log('开始播放音频');
+ }, (e) => {
+ console.error('播放音频失败:', e.message);
+ });
+ } catch (e) {
+ console.error('播放异常:', e);
+ }
+ }
+ // #endif
+ }
+
+ stop() {
+ // #ifdef APP-PLUS
+ if (this.audioContext && this.isPlaying) {
+ try {
+ this.audioContext.stop();
+ this.isPlaying = false;
+ } catch (e) {
+ console.error('停止播放失败:', e);
+ }
+ }
+ // #endif
+ }
+
+ destroy() {
+ // #ifdef APP-PLUS
+ if (this.audioContext) {
+ try {
+ this.stop();
+ this.audioContext = null;
+ } catch (e) {
+ console.error('销毁音频播放器失败:', e);
+ }
+ }
+ // #endif
+ }
+}
+
+export const audioManager = new AudioManager();
diff --git a/src/utils/safeArea.js b/src/utils/safeArea.js
new file mode 100644
index 0000000..9c66738
--- /dev/null
+++ b/src/utils/safeArea.js
@@ -0,0 +1,54 @@
+const SYSTEM_INFO = uni.getSystemInfoSync();
+
+/**
+ * 获取状态栏高度
+ */
+export const getStatusBarHeight = () => {
+ // APP和小程序都可以直接获取状态栏高度
+ return SYSTEM_INFO.statusBarHeight || 0;
+};
+
+/**
+ * 获取导航栏高度
+ */
+export const getNavigationBarHeight = () => {
+ // #ifdef MP-WEIXIN
+ // 微信小程序,通过胶囊按钮计算
+ const menuButtonInfo = uni.getMenuButtonBoundingClientRect();
+ if (menuButtonInfo && menuButtonInfo.top && menuButtonInfo.height) {
+ const statusBarHeight = getStatusBarHeight();
+ return (menuButtonInfo.top - statusBarHeight) * 2 + menuButtonInfo.height;
+ }
+ // #endif
+
+ // #ifdef APP-PLUS
+ // APP端可以自定义导航栏高度,一般是44px
+ return 44;
+ // #endif
+
+ // #ifdef MP-ALIPAY || MP-BAIDU || MP-TOUTIAO
+ // 其他小程序平台使用固定高度
+ return 45;
+ // #endif
+
+ return 44; // 默认值
+};
+
+/**
+ * 获取完整的顶部安全区高度
+ */
+export const getTopSafeAreaHeight = () => {
+ const statusBarHeight = getStatusBarHeight();
+
+ // #ifdef APP-PLUS
+ // APP一般只需要状态栏高度,因为导航栏是自定义的
+ return statusBarHeight;
+ // #endif
+
+ // #ifdef MP
+ // 小程序需要状态栏+导航栏的完整高度
+ return statusBarHeight + getNavigationBarHeight();
+ // #endif
+
+ return statusBarHeight; // 默认值
+};
\ No newline at end of file
diff --git a/src/uview-ui/LICENSE b/src/uview-ui/LICENSE
new file mode 100644
index 0000000..8e39ead
--- /dev/null
+++ b/src/uview-ui/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 www.uviewui.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/src/uview-ui/README.md b/src/uview-ui/README.md
new file mode 100644
index 0000000..06d5676
--- /dev/null
+++ b/src/uview-ui/README.md
@@ -0,0 +1,106 @@
+
+
+
+uView
+多平台快速开发的UI框架
+
+
+## 说明
+
+uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
+
+## 特性
+
+- 兼容安卓,iOS,微信小程序,H5,QQ小程序,百度小程序,支付宝小程序,头条小程序
+- 60+精选组件,功能丰富,多端兼容,让您快速集成,开箱即用
+- 众多贴心的JS利器,让您飞镖在手,召之即来,百步穿杨
+- 众多的常用页面和布局,让您专注逻辑,事半功倍
+- 详尽的文档支持,现代化的演示效果
+- 按需引入,精简打包体积
+
+
+## 安装
+
+```bash
+# npm方式安装
+npm i uview-ui
+```
+
+## 快速上手
+
+1. `main.js`引入uView库
+```js
+// main.js
+import uView from 'uview-ui';
+Vue.use(uView);
+```
+
+2. `App.vue`引入基础样式(注意style标签需声明scss属性支持)
+```css
+/* App.vue */
+
+```
+
+3. `uni.scss`引入全局scss变量文件
+```css
+/* uni.scss */
+@import "uview-ui/theme.scss";
+```
+
+4. `pages.json`配置easycom规则(按需引入)
+
+```js
+// pages.json
+{
+ "easycom": {
+ // npm安装的方式不需要前面的"@/",下载安装的方式需要"@/"
+ // npm安装方式
+ "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+ // 下载安装方式
+ // "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+ },
+ // 此为本身已有的内容
+ "pages": [
+ // ......
+ ]
+}
+```
+
+请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容
+
+## 使用方法
+配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。
+
+```html
+
+ 按钮
+
+```
+
+请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容
+
+## 链接
+
+- [官方文档](https://uviewui.com/)
+- [更新日志](https://uviewui.com/components/changelog.html)
+- [升级指南](https://uviewui.com/components/changelog.html)
+- [关于我们](https://uviewui.com/cooperation/about.html)
+
+## 预览
+
+您可以通过**微信**扫码,查看最佳的演示效果。
+
+
+
+
+
+## 版权信息
+uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。
diff --git a/src/uview-ui/components/u-action-sheet/u-action-sheet.vue b/src/uview-ui/components/u-action-sheet/u-action-sheet.vue
new file mode 100644
index 0000000..722b668
--- /dev/null
+++ b/src/uview-ui/components/u-action-sheet/u-action-sheet.vue
@@ -0,0 +1,190 @@
+
+
+
+ {{tips.text}}
+
+
+
+ {{item.text}}
+ {{item.subText}}
+
+
+
+
+ {{cancelText}}
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-alert-tips/u-alert-tips.vue b/src/uview-ui/components/u-alert-tips/u-alert-tips.vue
new file mode 100644
index 0000000..e81fc37
--- /dev/null
+++ b/src/uview-ui/components/u-alert-tips/u-alert-tips.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+ {{title}}
+
+
+ {{description}}
+
+
+
+
+
+ {{closeText}}
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue b/src/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue
new file mode 100644
index 0000000..a48dd54
--- /dev/null
+++ b/src/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+ 选择图片
+
+
+ 重新选择
+
+ 确定
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-avatar-cropper/weCropper.js b/src/uview-ui/components/u-avatar-cropper/weCropper.js
new file mode 100644
index 0000000..df02483
--- /dev/null
+++ b/src/uview-ui/components/u-avatar-cropper/weCropper.js
@@ -0,0 +1,1265 @@
+/**
+ * we-cropper v1.3.9
+ * (c) 2020 dlhandsome
+ * @license MIT
+ */
+(function(global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global.WeCropper = factory());
+}(this, (function() {
+ 'use strict';
+
+ var device = void 0;
+ var TOUCH_STATE = ['touchstarted', 'touchmoved', 'touchended'];
+
+ function firstLetterUpper(str) {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+ }
+
+ function setTouchState(instance) {
+ var arg = [],
+ len = arguments.length - 1;
+ while (len-- > 0) arg[len] = arguments[len + 1];
+
+ TOUCH_STATE.forEach(function(key, i) {
+ if (arg[i] !== undefined) {
+ instance[key] = arg[i];
+ }
+ });
+ }
+
+ function validator(instance, o) {
+ Object.defineProperties(instance, o);
+ }
+
+ function getDevice() {
+ if (!device) {
+ device = uni.getSystemInfoSync();
+ }
+ return device
+ }
+
+ var tmp = {};
+
+ var ref = getDevice();
+ var pixelRatio = ref.pixelRatio;
+
+ var DEFAULT = {
+ id: {
+ default: 'cropper',
+ get: function get() {
+ return tmp.id
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'string') {
+ console.error(("id:" + value + " is invalid"));
+ }
+ tmp.id = value;
+ }
+ },
+ width: {
+ default: 750,
+ get: function get() {
+ return tmp.width
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("width:" + value + " is invalid"));
+ }
+ tmp.width = value;
+ }
+ },
+ height: {
+ default: 750,
+ get: function get() {
+ return tmp.height
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("height:" + value + " is invalid"));
+ }
+ tmp.height = value;
+ }
+ },
+ pixelRatio: {
+ default: pixelRatio,
+ get: function get() {
+ return tmp.pixelRatio
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("pixelRatio:" + value + " is invalid"));
+ }
+ tmp.pixelRatio = value;
+ }
+ },
+ scale: {
+ default: 2.5,
+ get: function get() {
+ return tmp.scale
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("scale:" + value + " is invalid"));
+ }
+ tmp.scale = value;
+ }
+ },
+ zoom: {
+ default: 5,
+ get: function get() {
+ return tmp.zoom
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("zoom:" + value + " is invalid"));
+ } else if (value < 0 || value > 10) {
+ console.error("zoom should be ranged in 0 ~ 10");
+ }
+ tmp.zoom = value;
+ }
+ },
+ src: {
+ default: '',
+ get: function get() {
+ return tmp.src
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'string') {
+ console.error(("src:" + value + " is invalid"));
+ }
+ tmp.src = value;
+ }
+ },
+ cut: {
+ default: {},
+ get: function get() {
+ return tmp.cut
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'object') {
+ console.error(("cut:" + value + " is invalid"));
+ }
+ tmp.cut = value;
+ }
+ },
+ boundStyle: {
+ default: {},
+ get: function get() {
+ return tmp.boundStyle
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'object') {
+ console.error(("boundStyle:" + value + " is invalid"));
+ }
+ tmp.boundStyle = value;
+ }
+ },
+ onReady: {
+ default: null,
+ get: function get() {
+ return tmp.ready
+ },
+ set: function set(value) {
+ tmp.ready = value;
+ }
+ },
+ onBeforeImageLoad: {
+ default: null,
+ get: function get() {
+ return tmp.beforeImageLoad
+ },
+ set: function set(value) {
+ tmp.beforeImageLoad = value;
+ }
+ },
+ onImageLoad: {
+ default: null,
+ get: function get() {
+ return tmp.imageLoad
+ },
+ set: function set(value) {
+ tmp.imageLoad = value;
+ }
+ },
+ onBeforeDraw: {
+ default: null,
+ get: function get() {
+ return tmp.beforeDraw
+ },
+ set: function set(value) {
+ tmp.beforeDraw = value;
+ }
+ }
+ };
+
+ var ref$1 = getDevice();
+ var windowWidth = ref$1.windowWidth;
+
+ function prepare() {
+ var self = this;
+
+ // v1.4.0 版本中将不再自动绑定we-cropper实例
+ self.attachPage = function() {
+ var pages = getCurrentPages();
+ // 获取到当前page上下文
+ var pageContext = pages[pages.length - 1];
+ // 把this依附在Page上下文的wecropper属性上,便于在page钩子函数中访问
+ Object.defineProperty(pageContext, 'wecropper', {
+ get: function get() {
+ console.warn(
+ 'Instance will not be automatically bound to the page after v1.4.0\n\n' +
+ 'Please use a custom instance name instead\n\n' +
+ 'Example: \n' +
+ 'this.mycropper = new WeCropper(options)\n\n' +
+ '// ...\n' +
+ 'this.mycropper.getCropperImage()'
+ );
+ return self
+ },
+ configurable: true
+ });
+ };
+
+ self.createCtx = function() {
+ var id = self.id;
+ var targetId = self.targetId;
+
+ if (id) {
+ self.ctx = self.ctx || uni.createCanvasContext(id);
+ self.targetCtx = self.targetCtx || uni.createCanvasContext(targetId);
+ } else {
+ console.error("constructor: create canvas context failed, 'id' must be valuable");
+ }
+ };
+
+ self.deviceRadio = windowWidth / 750;
+ }
+
+ var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !==
+ 'undefined' ? self : {};
+
+
+
+
+
+ function createCommonjsModule(fn, module) {
+ return module = {
+ exports: {}
+ }, fn(module, module.exports), module.exports;
+ }
+
+ var tools = createCommonjsModule(function(module, exports) {
+ /**
+ * String type check
+ */
+ exports.isStr = function(v) {
+ return typeof v === 'string';
+ };
+ /**
+ * Number type check
+ */
+ exports.isNum = function(v) {
+ return typeof v === 'number';
+ };
+ /**
+ * Array type check
+ */
+ exports.isArr = Array.isArray;
+ /**
+ * undefined type check
+ */
+ exports.isUndef = function(v) {
+ return v === undefined;
+ };
+
+ exports.isTrue = function(v) {
+ return v === true;
+ };
+
+ exports.isFalse = function(v) {
+ return v === false;
+ };
+ /**
+ * Function type check
+ */
+ exports.isFunc = function(v) {
+ return typeof v === 'function';
+ };
+ /**
+ * Quick object check - this is primarily used to tell
+ * Objects from primitive values when we know the value
+ * is a JSON-compliant type.
+ */
+ exports.isObj = exports.isObject = function(obj) {
+ return obj !== null && typeof obj === 'object'
+ };
+
+ /**
+ * Strict object type check. Only returns true
+ * for plain JavaScript objects.
+ */
+ var _toString = Object.prototype.toString;
+ exports.isPlainObject = function(obj) {
+ return _toString.call(obj) === '[object Object]'
+ };
+
+ /**
+ * Check whether the object has the property.
+ */
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ exports.hasOwn = function(obj, key) {
+ return hasOwnProperty.call(obj, key)
+ };
+
+ /**
+ * Perform no operation.
+ * Stubbing args to make Flow happy without leaving useless transpiled code
+ * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)
+ */
+ exports.noop = function(a, b, c) {};
+
+ /**
+ * Check if val is a valid array index.
+ */
+ exports.isValidArrayIndex = function(val) {
+ var n = parseFloat(String(val));
+ return n >= 0 && Math.floor(n) === n && isFinite(val)
+ };
+ });
+
+ var tools_7 = tools.isFunc;
+ var tools_10 = tools.isPlainObject;
+
+ var EVENT_TYPE = ['ready', 'beforeImageLoad', 'beforeDraw', 'imageLoad'];
+
+ function observer() {
+ var self = this;
+
+ self.on = function(event, fn) {
+ if (EVENT_TYPE.indexOf(event) > -1) {
+ if (tools_7(fn)) {
+ event === 'ready' ?
+ fn(self) :
+ self[("on" + (firstLetterUpper(event)))] = fn;
+ }
+ } else {
+ console.error(("event: " + event + " is invalid"));
+ }
+ return self
+ };
+ }
+
+ function wxPromise(fn) {
+ return function(obj) {
+ var args = [],
+ len = arguments.length - 1;
+ while (len-- > 0) args[len] = arguments[len + 1];
+
+ if (obj === void 0) obj = {};
+ return new Promise(function(resolve, reject) {
+ obj.success = function(res) {
+ resolve(res);
+ };
+ obj.fail = function(err) {
+ reject(err);
+ };
+ fn.apply(void 0, [obj].concat(args));
+ })
+ }
+ }
+
+ function draw(ctx, reserve) {
+ if (reserve === void 0) reserve = false;
+
+ return new Promise(function(resolve) {
+ ctx.draw(reserve, resolve);
+ })
+ }
+
+ var getImageInfo = wxPromise(uni.getImageInfo);
+
+ var canvasToTempFilePath = wxPromise(uni.canvasToTempFilePath);
+
+ var base64 = createCommonjsModule(function(module, exports) {
+ /*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */
+ (function(root) {
+
+ // Detect free variables `exports`.
+ var freeExports = 'object' == 'object' && exports;
+
+ // Detect free variable `module`.
+ var freeModule = 'object' == 'object' && module &&
+ module.exports == freeExports && module;
+
+ // Detect free variable `global`, from Node.js or Browserified code, and use
+ // it as `root`.
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal;
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
+ root = freeGlobal;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ var InvalidCharacterError = function(message) {
+ this.message = message;
+ };
+ InvalidCharacterError.prototype = new Error;
+ InvalidCharacterError.prototype.name = 'InvalidCharacterError';
+
+ var error = function(message) {
+ // Note: the error messages used throughout this file match those used by
+ // the native `atob`/`btoa` implementation in Chromium.
+ throw new InvalidCharacterError(message);
+ };
+
+ var TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+ // http://whatwg.org/html/common-microsyntaxes.html#space-character
+ var REGEX_SPACE_CHARACTERS = /[\t\n\f\r ]/g;
+
+ // `decode` is designed to be fully compatible with `atob` as described in the
+ // HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob
+ // The optimized base64-decoding algorithm used is based on @atk’s excellent
+ // implementation. https://gist.github.com/atk/1020396
+ var decode = function(input) {
+ input = String(input)
+ .replace(REGEX_SPACE_CHARACTERS, '');
+ var length = input.length;
+ if (length % 4 == 0) {
+ input = input.replace(/==?$/, '');
+ length = input.length;
+ }
+ if (
+ length % 4 == 1 ||
+ // http://whatwg.org/C#alphanumeric-ascii-characters
+ /[^+a-zA-Z0-9/]/.test(input)
+ ) {
+ error(
+ 'Invalid character: the string to be decoded is not correctly encoded.'
+ );
+ }
+ var bitCounter = 0;
+ var bitStorage;
+ var buffer;
+ var output = '';
+ var position = -1;
+ while (++position < length) {
+ buffer = TABLE.indexOf(input.charAt(position));
+ bitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;
+ // Unless this is the first of a group of 4 characters…
+ if (bitCounter++ % 4) {
+ // …convert the first 8 bits to a single ASCII character.
+ output += String.fromCharCode(
+ 0xFF & bitStorage >> (-2 * bitCounter & 6)
+ );
+ }
+ }
+ return output;
+ };
+
+ // `encode` is designed to be fully compatible with `btoa` as described in the
+ // HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa
+ var encode = function(input) {
+ input = String(input);
+ if (/[^\0-\xFF]/.test(input)) {
+ // Note: no need to special-case astral symbols here, as surrogates are
+ // matched, and the input is supposed to only contain ASCII anyway.
+ error(
+ 'The string to be encoded contains characters outside of the ' +
+ 'Latin1 range.'
+ );
+ }
+ var padding = input.length % 3;
+ var output = '';
+ var position = -1;
+ var a;
+ var b;
+ var c;
+ var buffer;
+ // Make sure any padding is handled outside of the loop.
+ var length = input.length - padding;
+
+ while (++position < length) {
+ // Read three bytes, i.e. 24 bits.
+ a = input.charCodeAt(position) << 16;
+ b = input.charCodeAt(++position) << 8;
+ c = input.charCodeAt(++position);
+ buffer = a + b + c;
+ // Turn the 24 bits into four chunks of 6 bits each, and append the
+ // matching character for each of them to the output.
+ output += (
+ TABLE.charAt(buffer >> 18 & 0x3F) +
+ TABLE.charAt(buffer >> 12 & 0x3F) +
+ TABLE.charAt(buffer >> 6 & 0x3F) +
+ TABLE.charAt(buffer & 0x3F)
+ );
+ }
+
+ if (padding == 2) {
+ a = input.charCodeAt(position) << 8;
+ b = input.charCodeAt(++position);
+ buffer = a + b;
+ output += (
+ TABLE.charAt(buffer >> 10) +
+ TABLE.charAt((buffer >> 4) & 0x3F) +
+ TABLE.charAt((buffer << 2) & 0x3F) +
+ '='
+ );
+ } else if (padding == 1) {
+ buffer = input.charCodeAt(position);
+ output += (
+ TABLE.charAt(buffer >> 2) +
+ TABLE.charAt((buffer << 4) & 0x3F) +
+ '=='
+ );
+ }
+
+ return output;
+ };
+
+ var base64 = {
+ 'encode': encode,
+ 'decode': decode,
+ 'version': '0.1.0'
+ };
+
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
+ // like the following:
+ if (
+ typeof undefined == 'function' &&
+ typeof undefined.amd == 'object' &&
+ undefined.amd
+ ) {
+ undefined(function() {
+ return base64;
+ });
+ } else if (freeExports && !freeExports.nodeType) {
+ if (freeModule) { // in Node.js or RingoJS v0.8.0+
+ freeModule.exports = base64;
+ } else { // in Narwhal or RingoJS v0.7.0-
+ for (var key in base64) {
+ base64.hasOwnProperty(key) && (freeExports[key] = base64[key]);
+ }
+ }
+ } else { // in Rhino or a web browser
+ root.base64 = base64;
+ }
+
+ }(commonjsGlobal));
+ });
+
+ function makeURI(strData, type) {
+ return 'data:' + type + ';base64,' + strData
+ }
+
+ function fixType(type) {
+ type = type.toLowerCase().replace(/jpg/i, 'jpeg');
+ var r = type.match(/png|jpeg|bmp|gif/)[0];
+ return 'image/' + r
+ }
+
+ function encodeData(data) {
+ var str = '';
+ if (typeof data === 'string') {
+ str = data;
+ } else {
+ for (var i = 0; i < data.length; i++) {
+ str += String.fromCharCode(data[i]);
+ }
+ }
+ return base64.encode(str)
+ }
+
+ /**
+ * 获取图像区域隐含的像素数据
+ * @param canvasId canvas标识
+ * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标
+ * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标
+ * @param width 将要被提取的图像数据矩形区域的宽度
+ * @param height 将要被提取的图像数据矩形区域的高度
+ * @param done 完成回调
+ */
+ function getImageData(canvasId, x, y, width, height, done) {
+ uni.canvasGetImageData({
+ canvasId: canvasId,
+ x: x,
+ y: y,
+ width: width,
+ height: height,
+ success: function success(res) {
+ done(res, null);
+ },
+ fail: function fail(res) {
+ done(null, res);
+ }
+ });
+ }
+
+ /**
+ * 生成bmp格式图片
+ * 按照规则生成图片响应头和响应体
+ * @param oData 用来描述 canvas 区域隐含的像素数据 { data, width, height } = oData
+ * @returns {*} base64字符串
+ */
+ function genBitmapImage(oData) {
+ //
+ // BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx
+ // BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx
+ //
+ var biWidth = oData.width;
+ var biHeight = oData.height;
+ var biSizeImage = biWidth * biHeight * 3;
+ var bfSize = biSizeImage + 54; // total header size = 54 bytes
+
+ //
+ // typedef struct tagBITMAPFILEHEADER {
+ // WORD bfType;
+ // DWORD bfSize;
+ // WORD bfReserved1;
+ // WORD bfReserved2;
+ // DWORD bfOffBits;
+ // } BITMAPFILEHEADER;
+ //
+ var BITMAPFILEHEADER = [
+ // WORD bfType -- The file type signature; must be "BM"
+ 0x42, 0x4D,
+ // DWORD bfSize -- The size, in bytes, of the bitmap file
+ bfSize & 0xff, bfSize >> 8 & 0xff, bfSize >> 16 & 0xff, bfSize >> 24 & 0xff,
+ // WORD bfReserved1 -- Reserved; must be zero
+ 0, 0,
+ // WORD bfReserved2 -- Reserved; must be zero
+ 0, 0,
+ // DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits.
+ 54, 0, 0, 0
+ ];
+
+ //
+ // typedef struct tagBITMAPINFOHEADER {
+ // DWORD biSize;
+ // LONG biWidth;
+ // LONG biHeight;
+ // WORD biPlanes;
+ // WORD biBitCount;
+ // DWORD biCompression;
+ // DWORD biSizeImage;
+ // LONG biXPelsPerMeter;
+ // LONG biYPelsPerMeter;
+ // DWORD biClrUsed;
+ // DWORD biClrImportant;
+ // } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
+ //
+ var BITMAPINFOHEADER = [
+ // DWORD biSize -- The number of bytes required by the structure
+ 40, 0, 0, 0,
+ // LONG biWidth -- The width of the bitmap, in pixels
+ biWidth & 0xff, biWidth >> 8 & 0xff, biWidth >> 16 & 0xff, biWidth >> 24 & 0xff,
+ // LONG biHeight -- The height of the bitmap, in pixels
+ biHeight & 0xff, biHeight >> 8 & 0xff, biHeight >> 16 & 0xff, biHeight >> 24 & 0xff,
+ // WORD biPlanes -- The number of planes for the target device. This value must be set to 1
+ 1, 0,
+ // WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap
+ // has a maximum of 2^24 colors (16777216, Truecolor)
+ 24, 0,
+ // DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed
+ 0, 0, 0, 0,
+ // DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps
+ biSizeImage & 0xff, biSizeImage >> 8 & 0xff, biSizeImage >> 16 & 0xff, biSizeImage >> 24 & 0xff,
+ // LONG biXPelsPerMeter, unused
+ 0, 0, 0, 0,
+ // LONG biYPelsPerMeter, unused
+ 0, 0, 0, 0,
+ // DWORD biClrUsed, the number of color indexes of palette, unused
+ 0, 0, 0, 0,
+ // DWORD biClrImportant, unused
+ 0, 0, 0, 0
+ ];
+
+ var iPadding = (4 - ((biWidth * 3) % 4)) % 4;
+
+ var aImgData = oData.data;
+
+ var strPixelData = '';
+ var biWidth4 = biWidth << 2;
+ var y = biHeight;
+ var fromCharCode = String.fromCharCode;
+
+ do {
+ var iOffsetY = biWidth4 * (y - 1);
+ var strPixelRow = '';
+ for (var x = 0; x < biWidth; x++) {
+ var iOffsetX = x << 2;
+ strPixelRow += fromCharCode(aImgData[iOffsetY + iOffsetX + 2]) +
+ fromCharCode(aImgData[iOffsetY + iOffsetX + 1]) +
+ fromCharCode(aImgData[iOffsetY + iOffsetX]);
+ }
+
+ for (var c = 0; c < iPadding; c++) {
+ strPixelRow += String.fromCharCode(0);
+ }
+
+ strPixelData += strPixelRow;
+ } while (--y)
+
+ var strEncoded = encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) + encodeData(strPixelData);
+
+ return strEncoded
+ }
+
+ /**
+ * 转换为图片base64
+ * @param canvasId canvas标识
+ * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标
+ * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标
+ * @param width 将要被提取的图像数据矩形区域的宽度
+ * @param height 将要被提取的图像数据矩形区域的高度
+ * @param type 转换图片类型
+ * @param done 完成回调
+ */
+ function convertToImage(canvasId, x, y, width, height, type, done) {
+ if (done === void 0) done = function() {};
+
+ if (type === undefined) {
+ type = 'png';
+ }
+ type = fixType(type);
+ if (/bmp/.test(type)) {
+ getImageData(canvasId, x, y, width, height, function(data, err) {
+ var strData = genBitmapImage(data);
+ tools_7(done) && done(makeURI(strData, 'image/' + type), err);
+ });
+ } else {
+ console.error('暂不支持生成\'' + type + '\'类型的base64图片');
+ }
+ }
+
+ var CanvasToBase64 = {
+ convertToImage: convertToImage,
+ // convertToPNG: function (width, height, done) {
+ // return convertToImage(width, height, 'png', done)
+ // },
+ // convertToJPEG: function (width, height, done) {
+ // return convertToImage(width, height, 'jpeg', done)
+ // },
+ // convertToGIF: function (width, height, done) {
+ // return convertToImage(width, height, 'gif', done)
+ // },
+ convertToBMP: function(ref, done) {
+ if (ref === void 0) ref = {};
+ var canvasId = ref.canvasId;
+ var x = ref.x;
+ var y = ref.y;
+ var width = ref.width;
+ var height = ref.height;
+ if (done === void 0) done = function() {};
+
+ return convertToImage(canvasId, x, y, width, height, 'bmp', done)
+ }
+ };
+
+ function methods() {
+ var self = this;
+
+ var boundWidth = self.width; // 裁剪框默认宽度,即整个画布宽度
+ var boundHeight = self.height; // 裁剪框默认高度,即整个画布高度
+
+ var id = self.id;
+ var targetId = self.targetId;
+ var pixelRatio = self.pixelRatio;
+
+ var ref = self.cut;
+ var x = ref.x;
+ if (x === void 0) x = 0;
+ var y = ref.y;
+ if (y === void 0) y = 0;
+ var width = ref.width;
+ if (width === void 0) width = boundWidth;
+ var height = ref.height;
+ if (height === void 0) height = boundHeight;
+
+ self.updateCanvas = function(done) {
+ if (self.croperTarget) {
+ // 画布绘制图片
+ self.ctx.drawImage(
+ self.croperTarget,
+ self.imgLeft,
+ self.imgTop,
+ self.scaleWidth,
+ self.scaleHeight
+ );
+ }
+ tools_7(self.onBeforeDraw) && self.onBeforeDraw(self.ctx, self);
+
+ self.setBoundStyle(self.boundStyle); // 设置边界样式
+
+ self.ctx.draw(false, done);
+ return self
+ };
+
+ self.pushOrigin = self.pushOrign = function(src) {
+ self.src = src;
+
+ tools_7(self.onBeforeImageLoad) && self.onBeforeImageLoad(self.ctx, self);
+
+ return getImageInfo({
+ src: src
+ })
+ .then(function(res) {
+ var innerAspectRadio = res.width / res.height;
+ var customAspectRadio = width / height;
+
+ self.croperTarget = res.path;
+
+ if (innerAspectRadio < customAspectRadio) {
+ self.rectX = x;
+ self.baseWidth = width;
+ self.baseHeight = width / innerAspectRadio;
+ self.rectY = y - Math.abs((height - self.baseHeight) / 2);
+ } else {
+ self.rectY = y;
+ self.baseWidth = height * innerAspectRadio;
+ self.baseHeight = height;
+ self.rectX = x - Math.abs((width - self.baseWidth) / 2);
+ }
+
+ self.imgLeft = self.rectX;
+ self.imgTop = self.rectY;
+ self.scaleWidth = self.baseWidth;
+ self.scaleHeight = self.baseHeight;
+
+ self.update();
+
+ return new Promise(function(resolve) {
+ self.updateCanvas(resolve);
+ })
+ })
+ .then(function() {
+ tools_7(self.onImageLoad) && self.onImageLoad(self.ctx, self);
+ })
+ };
+
+ self.removeImage = function() {
+ self.src = '';
+ self.croperTarget = '';
+ return draw(self.ctx)
+ };
+
+ self.getCropperBase64 = function(done) {
+ if (done === void 0) done = function() {};
+
+ CanvasToBase64.convertToBMP({
+ canvasId: id,
+ x: x,
+ y: y,
+ width: width,
+ height: height
+ }, done);
+ };
+
+ self.getCropperImage = function(opt, fn) {
+ var customOptions = opt;
+
+ var canvasOptions = {
+ canvasId: id,
+ x: x,
+ y: y,
+ width: width,
+ height: height
+ };
+
+ var task = function() {
+ return Promise.resolve();
+ };
+
+ if (
+ tools_10(customOptions) &&
+ customOptions.original
+ ) {
+ // original mode
+ task = function() {
+ self.targetCtx.drawImage(
+ self.croperTarget,
+ self.imgLeft * pixelRatio,
+ self.imgTop * pixelRatio,
+ self.scaleWidth * pixelRatio,
+ self.scaleHeight * pixelRatio
+ );
+
+ canvasOptions = {
+ canvasId: targetId,
+ x: x * pixelRatio,
+ y: y * pixelRatio,
+ width: width * pixelRatio,
+ height: height * pixelRatio
+ };
+
+ return draw(self.targetCtx)
+ };
+ }
+
+ return task()
+ .then(function() {
+ if (tools_10(customOptions)) {
+ canvasOptions = Object.assign({}, canvasOptions, customOptions);
+ }
+
+ if (tools_7(customOptions)) {
+ fn = customOptions;
+ }
+
+ var arg = canvasOptions.componentContext ?
+ [canvasOptions, canvasOptions.componentContext] :
+ [canvasOptions];
+
+ return canvasToTempFilePath.apply(null, arg)
+ })
+ .then(function(res) {
+ var tempFilePath = res.tempFilePath;
+
+ return tools_7(fn) ?
+ fn.call(self, tempFilePath, null) :
+ tempFilePath
+ })
+ .catch(function(err) {
+ if (tools_7(fn)) {
+ fn.call(self, null, err);
+ } else {
+ throw err
+ }
+ })
+ };
+ }
+
+ /**
+ * 获取最新缩放值
+ * @param oldScale 上一次触摸结束后的缩放值
+ * @param oldDistance 上一次触摸结束后的双指距离
+ * @param zoom 缩放系数
+ * @param touch0 第一指touch对象
+ * @param touch1 第二指touch对象
+ * @returns {*}
+ */
+ var getNewScale = function(oldScale, oldDistance, zoom, touch0, touch1) {
+ var xMove, yMove, newDistance;
+ // 计算二指最新距离
+ xMove = Math.round(touch1.x - touch0.x);
+ yMove = Math.round(touch1.y - touch0.y);
+ newDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove));
+
+ return oldScale + 0.001 * zoom * (newDistance - oldDistance)
+ };
+
+ function update() {
+ var self = this;
+
+ if (!self.src) {
+ return
+ }
+
+ self.__oneTouchStart = function(touch) {
+ self.touchX0 = Math.round(touch.x);
+ self.touchY0 = Math.round(touch.y);
+ };
+
+ self.__oneTouchMove = function(touch) {
+ var xMove, yMove;
+ // 计算单指移动的距离
+ if (self.touchended) {
+ return self.updateCanvas()
+ }
+ xMove = Math.round(touch.x - self.touchX0);
+ yMove = Math.round(touch.y - self.touchY0);
+
+ var imgLeft = Math.round(self.rectX + xMove);
+ var imgTop = Math.round(self.rectY + yMove);
+
+ self.outsideBound(imgLeft, imgTop);
+
+ self.updateCanvas();
+ };
+
+ self.__twoTouchStart = function(touch0, touch1) {
+ var xMove, yMove, oldDistance;
+
+ self.touchX1 = Math.round(self.rectX + self.scaleWidth / 2);
+ self.touchY1 = Math.round(self.rectY + self.scaleHeight / 2);
+
+ // 计算两指距离
+ xMove = Math.round(touch1.x - touch0.x);
+ yMove = Math.round(touch1.y - touch0.y);
+ oldDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove));
+
+ self.oldDistance = oldDistance;
+ };
+
+ self.__twoTouchMove = function(touch0, touch1) {
+ var oldScale = self.oldScale;
+ var oldDistance = self.oldDistance;
+ var scale = self.scale;
+ var zoom = self.zoom;
+
+ self.newScale = getNewScale(oldScale, oldDistance, zoom, touch0, touch1);
+
+ // 设定缩放范围
+ self.newScale <= 1 && (self.newScale = 1);
+ self.newScale >= scale && (self.newScale = scale);
+
+ self.scaleWidth = Math.round(self.newScale * self.baseWidth);
+ self.scaleHeight = Math.round(self.newScale * self.baseHeight);
+ var imgLeft = Math.round(self.touchX1 - self.scaleWidth / 2);
+ var imgTop = Math.round(self.touchY1 - self.scaleHeight / 2);
+
+ self.outsideBound(imgLeft, imgTop);
+
+ self.updateCanvas();
+ };
+
+ self.__xtouchEnd = function() {
+ self.oldScale = self.newScale;
+ self.rectX = self.imgLeft;
+ self.rectY = self.imgTop;
+ };
+ }
+
+ var handle = {
+ // 图片手势初始监测
+ touchStart: function touchStart(e) {
+ var self = this;
+ var ref = e.touches;
+ var touch0 = ref[0];
+ var touch1 = ref[1];
+
+ if (!self.src) {
+ return
+ }
+
+ setTouchState(self, true, null, null);
+
+ // 计算第一个触摸点的位置,并参照改点进行缩放
+ self.__oneTouchStart(touch0);
+
+ // 两指手势触发
+ if (e.touches.length >= 2) {
+ self.__twoTouchStart(touch0, touch1);
+ }
+ },
+
+ // 图片手势动态缩放
+ touchMove: function touchMove(e) {
+ var self = this;
+ var ref = e.touches;
+ var touch0 = ref[0];
+ var touch1 = ref[1];
+
+ if (!self.src) {
+ return
+ }
+
+ setTouchState(self, null, true);
+
+ // 单指手势时触发
+ if (e.touches.length === 1) {
+ self.__oneTouchMove(touch0);
+ }
+ // 两指手势触发
+ if (e.touches.length >= 2) {
+ self.__twoTouchMove(touch0, touch1);
+ }
+ },
+
+ touchEnd: function touchEnd(e) {
+ var self = this;
+
+ if (!self.src) {
+ return
+ }
+
+ setTouchState(self, false, false, true);
+ self.__xtouchEnd();
+ }
+ };
+
+ function cut() {
+ var self = this;
+ var boundWidth = self.width; // 裁剪框默认宽度,即整个画布宽度
+ var boundHeight = self.height;
+ // 裁剪框默认高度,即整个画布高度
+ var ref = self.cut;
+ var x = ref.x;
+ if (x === void 0) x = 0;
+ var y = ref.y;
+ if (y === void 0) y = 0;
+ var width = ref.width;
+ if (width === void 0) width = boundWidth;
+ var height = ref.height;
+ if (height === void 0) height = boundHeight;
+
+ /**
+ * 设置边界
+ * @param imgLeft 图片左上角横坐标值
+ * @param imgTop 图片左上角纵坐标值
+ */
+ self.outsideBound = function(imgLeft, imgTop) {
+ self.imgLeft = imgLeft >= x ?
+ x :
+ self.scaleWidth + imgLeft - x <= width ?
+ x + width - self.scaleWidth :
+ imgLeft;
+
+ self.imgTop = imgTop >= y ?
+ y :
+ self.scaleHeight + imgTop - y <= height ?
+ y + height - self.scaleHeight :
+ imgTop;
+ };
+
+ /**
+ * 设置边界样式
+ * @param color 边界颜色
+ */
+ self.setBoundStyle = function(ref) {
+ if (ref === void 0) ref = {};
+ var color = ref.color;
+ if (color === void 0) color = '#04b00f';
+ var mask = ref.mask;
+ if (mask === void 0) mask = 'rgba(0, 0, 0, 0.3)';
+ var lineWidth = ref.lineWidth;
+ if (lineWidth === void 0) lineWidth = 1;
+
+ var half = lineWidth / 2;
+ var boundOption = [{
+ start: {
+ x: x - half,
+ y: y + 10 - half
+ },
+ step1: {
+ x: x - half,
+ y: y - half
+ },
+ step2: {
+ x: x + 10 - half,
+ y: y - half
+ }
+ },
+ {
+ start: {
+ x: x - half,
+ y: y + height - 10 + half
+ },
+ step1: {
+ x: x - half,
+ y: y + height + half
+ },
+ step2: {
+ x: x + 10 - half,
+ y: y + height + half
+ }
+ },
+ {
+ start: {
+ x: x + width - 10 + half,
+ y: y - half
+ },
+ step1: {
+ x: x + width + half,
+ y: y - half
+ },
+ step2: {
+ x: x + width + half,
+ y: y + 10 - half
+ }
+ },
+ {
+ start: {
+ x: x + width + half,
+ y: y + height - 10 + half
+ },
+ step1: {
+ x: x + width + half,
+ y: y + height + half
+ },
+ step2: {
+ x: x + width - 10 + half,
+ y: y + height + half
+ }
+ }
+ ];
+
+ // 绘制半透明层
+ self.ctx.beginPath();
+ self.ctx.setFillStyle(mask);
+ self.ctx.fillRect(0, 0, x, boundHeight);
+ self.ctx.fillRect(x, 0, width, y);
+ self.ctx.fillRect(x, y + height, width, boundHeight - y - height);
+ self.ctx.fillRect(x + width, 0, boundWidth - x - width, boundHeight);
+ self.ctx.fill();
+
+ boundOption.forEach(function(op) {
+ self.ctx.beginPath();
+ self.ctx.setStrokeStyle(color);
+ self.ctx.setLineWidth(lineWidth);
+ self.ctx.moveTo(op.start.x, op.start.y);
+ self.ctx.lineTo(op.step1.x, op.step1.y);
+ self.ctx.lineTo(op.step2.x, op.step2.y);
+ self.ctx.stroke();
+ });
+ };
+ }
+
+ var version = "1.3.9";
+
+ var WeCropper = function WeCropper(params) {
+ var self = this;
+ var _default = {};
+
+ validator(self, DEFAULT);
+
+ Object.keys(DEFAULT).forEach(function(key) {
+ _default[key] = DEFAULT[key].default;
+ });
+ Object.assign(self, _default, params);
+
+ self.prepare();
+ self.attachPage();
+ self.createCtx();
+ self.observer();
+ self.cutt();
+ self.methods();
+ self.init();
+ self.update();
+
+ return self
+ };
+
+ WeCropper.prototype.init = function init() {
+ var self = this;
+ var src = self.src;
+
+ self.version = version;
+
+ typeof self.onReady === 'function' && self.onReady(self.ctx, self);
+
+ if (src) {
+ self.pushOrign(src);
+ } else {
+ self.updateCanvas();
+ }
+ setTouchState(self, false, false, false);
+
+ self.oldScale = 1;
+ self.newScale = 1;
+
+ return self
+ };
+
+ Object.assign(WeCropper.prototype, handle);
+
+ WeCropper.prototype.prepare = prepare;
+ WeCropper.prototype.observer = observer;
+ WeCropper.prototype.methods = methods;
+ WeCropper.prototype.cutt = cut;
+ WeCropper.prototype.update = update;
+
+ return WeCropper;
+
+})));
diff --git a/src/uview-ui/components/u-avatar/u-avatar.vue b/src/uview-ui/components/u-avatar/u-avatar.vue
new file mode 100644
index 0000000..289b9b0
--- /dev/null
+++ b/src/uview-ui/components/u-avatar/u-avatar.vue
@@ -0,0 +1,244 @@
+
+
+
+ {{uText}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-back-top/u-back-top.vue b/src/uview-ui/components/u-back-top/u-back-top.vue
new file mode 100644
index 0000000..7970fc7
--- /dev/null
+++ b/src/uview-ui/components/u-back-top/u-back-top.vue
@@ -0,0 +1,153 @@
+
+
+
+
+
+ {{tips}}
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-badge/u-badge.vue b/src/uview-ui/components/u-badge/u-badge.vue
new file mode 100644
index 0000000..e85b133
--- /dev/null
+++ b/src/uview-ui/components/u-badge/u-badge.vue
@@ -0,0 +1,216 @@
+
+
+ {{showText}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/uview-ui/components/u-button/u-button.vue b/src/uview-ui/components/u-button/u-button.vue
new file mode 100644
index 0000000..82c3a6f
--- /dev/null
+++ b/src/uview-ui/components/u-button/u-button.vue
@@ -0,0 +1,596 @@
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-calendar/u-calendar.vue b/src/uview-ui/components/u-calendar/u-calendar.vue
new file mode 100644
index 0000000..2b30184
--- /dev/null
+++ b/src/uview-ui/components/u-calendar/u-calendar.vue
@@ -0,0 +1,639 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ showTitle }}
+
+
+
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+ {{startText}}
+ {{endText}}
+
+ {{month}}
+
+
+
+ {{mode == 'date' ? activeDate : startDate}}
+ 至{{endDate}}
+
+
+ 确定
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/uview-ui/components/u-car-keyboard/u-car-keyboard.vue b/src/uview-ui/components/u-car-keyboard/u-car-keyboard.vue
new file mode 100644
index 0000000..84b1467
--- /dev/null
+++ b/src/uview-ui/components/u-car-keyboard/u-car-keyboard.vue
@@ -0,0 +1,257 @@
+
+ {}">
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+ 中
+ /
+ 英
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-card/u-card.vue b/src/uview-ui/components/u-card/u-card.vue
new file mode 100644
index 0000000..a3cb2aa
--- /dev/null
+++ b/src/uview-ui/components/u-card/u-card.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+ {{ subTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-cell-group/u-cell-group.vue b/src/uview-ui/components/u-cell-group/u-cell-group.vue
new file mode 100644
index 0000000..3fbca72
--- /dev/null
+++ b/src/uview-ui/components/u-cell-group/u-cell-group.vue
@@ -0,0 +1,70 @@
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-cell-item/u-cell-item.vue b/src/uview-ui/components/u-cell-item/u-cell-item.vue
new file mode 100644
index 0000000..10d9b20
--- /dev/null
+++ b/src/uview-ui/components/u-cell-item/u-cell-item.vue
@@ -0,0 +1,316 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+ {{ label }}
+
+
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-checkbox-group/u-checkbox-group.vue b/src/uview-ui/components/u-checkbox-group/u-checkbox-group.vue
new file mode 100644
index 0000000..6a149b3
--- /dev/null
+++ b/src/uview-ui/components/u-checkbox-group/u-checkbox-group.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-checkbox/u-checkbox.vue b/src/uview-ui/components/u-checkbox/u-checkbox.vue
new file mode 100644
index 0000000..9414461
--- /dev/null
+++ b/src/uview-ui/components/u-checkbox/u-checkbox.vue
@@ -0,0 +1,284 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-circle-progress/u-circle-progress.vue b/src/uview-ui/components/u-circle-progress/u-circle-progress.vue
new file mode 100644
index 0000000..46e7c18
--- /dev/null
+++ b/src/uview-ui/components/u-circle-progress/u-circle-progress.vue
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-circle-progress/u-line-progress/u-line-progress.vue b/src/uview-ui/components/u-circle-progress/u-line-progress/u-line-progress.vue
new file mode 100644
index 0000000..77e2da2
--- /dev/null
+++ b/src/uview-ui/components/u-circle-progress/u-line-progress/u-line-progress.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+ {{percent + '%'}}
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-col/u-col.vue b/src/uview-ui/components/u-col/u-col.vue
new file mode 100644
index 0000000..3b6cc64
--- /dev/null
+++ b/src/uview-ui/components/u-col/u-col.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-collapse-item/u-collapse-item.vue b/src/uview-ui/components/u-collapse-item/u-collapse-item.vue
new file mode 100644
index 0000000..ed11778
--- /dev/null
+++ b/src/uview-ui/components/u-collapse-item/u-collapse-item.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-collapse/u-collapse.vue b/src/uview-ui/components/u-collapse/u-collapse.vue
new file mode 100644
index 0000000..8572957
--- /dev/null
+++ b/src/uview-ui/components/u-collapse/u-collapse.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-column-notice/u-column-notice.vue b/src/uview-ui/components/u-column-notice/u-column-notice.vue
new file mode 100644
index 0000000..dd8bd31
--- /dev/null
+++ b/src/uview-ui/components/u-column-notice/u-column-notice.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-count-down/u-count-down.vue b/src/uview-ui/components/u-count-down/u-count-down.vue
new file mode 100644
index 0000000..7285d67
--- /dev/null
+++ b/src/uview-ui/components/u-count-down/u-count-down.vue
@@ -0,0 +1,318 @@
+
+
+
+
+ {{ d }}
+
+
+
+ {{ separator == 'colon' ? ':' : '天' }}
+
+
+
+ {{ h }}
+
+
+
+ {{ separator == 'colon' ? ':' : '时' }}
+
+
+
+ {{ i }}
+
+
+
+ {{ separator == 'colon' ? ':' : '分' }}
+
+
+
+ {{ s }}
+
+
+
+ 秒
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-count-to/u-count-to.vue b/src/uview-ui/components/u-count-to/u-count-to.vue
new file mode 100644
index 0000000..053dc5f
--- /dev/null
+++ b/src/uview-ui/components/u-count-to/u-count-to.vue
@@ -0,0 +1,241 @@
+
+
+ {{ displayValue }}
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-divider/u-divider.vue b/src/uview-ui/components/u-divider/u-divider.vue
new file mode 100644
index 0000000..6f8d7e6
--- /dev/null
+++ b/src/uview-ui/components/u-divider/u-divider.vue
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-dropdown-item/u-dropdown-item.vue b/src/uview-ui/components/u-dropdown-item/u-dropdown-item.vue
new file mode 100644
index 0000000..ba60d8f
--- /dev/null
+++ b/src/uview-ui/components/u-dropdown-item/u-dropdown-item.vue
@@ -0,0 +1,132 @@
+
+ {}" @tap.stop.prevent="() => {}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-dropdown/u-dropdown.vue b/src/uview-ui/components/u-dropdown/u-dropdown.vue
new file mode 100644
index 0000000..a62e469
--- /dev/null
+++ b/src/uview-ui/components/u-dropdown/u-dropdown.vue
@@ -0,0 +1,298 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-empty/u-empty.vue b/src/uview-ui/components/u-empty/u-empty.vue
new file mode 100644
index 0000000..2c77b24
--- /dev/null
+++ b/src/uview-ui/components/u-empty/u-empty.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-field/u-field.vue b/src/uview-ui/components/u-field/u-field.vue
new file mode 100644
index 0000000..b562798
--- /dev/null
+++ b/src/uview-ui/components/u-field/u-field.vue
@@ -0,0 +1,384 @@
+
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ errorMessage }}
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-form-item/u-form-item.vue b/src/uview-ui/components/u-form-item/u-form-item.vue
new file mode 100644
index 0000000..d6b8c8b
--- /dev/null
+++ b/src/uview-ui/components/u-form-item/u-form-item.vue
@@ -0,0 +1,431 @@
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+ {{label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{validateMessage}}
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-form/u-form.vue b/src/uview-ui/components/u-form/u-form.vue
new file mode 100644
index 0000000..bdbafaf
--- /dev/null
+++ b/src/uview-ui/components/u-form/u-form.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-full-screen/u-full-screen.vue b/src/uview-ui/components/u-full-screen/u-full-screen.vue
new file mode 100644
index 0000000..4f7e7d9
--- /dev/null
+++ b/src/uview-ui/components/u-full-screen/u-full-screen.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-gap/u-gap.vue b/src/uview-ui/components/u-gap/u-gap.vue
new file mode 100644
index 0000000..6c01f94
--- /dev/null
+++ b/src/uview-ui/components/u-gap/u-gap.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-grid-item/u-grid-item.vue b/src/uview-ui/components/u-grid-item/u-grid-item.vue
new file mode 100644
index 0000000..0773307
--- /dev/null
+++ b/src/uview-ui/components/u-grid-item/u-grid-item.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-grid/u-grid.vue b/src/uview-ui/components/u-grid/u-grid.vue
new file mode 100644
index 0000000..6588c06
--- /dev/null
+++ b/src/uview-ui/components/u-grid/u-grid.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-icon/u-icon.vue b/src/uview-ui/components/u-icon/u-icon.vue
new file mode 100644
index 0000000..642a338
--- /dev/null
+++ b/src/uview-ui/components/u-icon/u-icon.vue
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
diff --git a/src/uview-ui/components/u-image/u-image.vue b/src/uview-ui/components/u-image/u-image.vue
new file mode 100644
index 0000000..c729c3c
--- /dev/null
+++ b/src/uview-ui/components/u-image/u-image.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-index-anchor/u-index-anchor.vue b/src/uview-ui/components/u-index-anchor/u-index-anchor.vue
new file mode 100644
index 0000000..5038827
--- /dev/null
+++ b/src/uview-ui/components/u-index-anchor/u-index-anchor.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+ {{ index }}
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-index-list/u-index-list.vue b/src/uview-ui/components/u-index-list/u-index-list.vue
new file mode 100644
index 0000000..30fcda0
--- /dev/null
+++ b/src/uview-ui/components/u-index-list/u-index-list.vue
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+ {{indexList[touchmoveIndex]}}
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-input/u-input.vue b/src/uview-ui/components/u-input/u-input.vue
new file mode 100644
index 0000000..f2aea72
--- /dev/null
+++ b/src/uview-ui/components/u-input/u-input.vue
@@ -0,0 +1,387 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-keyboard/u-keyboard.vue b/src/uview-ui/components/u-keyboard/u-keyboard.vue
new file mode 100644
index 0000000..1904a2b
--- /dev/null
+++ b/src/uview-ui/components/u-keyboard/u-keyboard.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
+ {{cancelBtn ? cancelText : ''}}
+
+
+ {{tips ? tips : mode == 'number' ? '数字键盘' : mode == 'card' ? '身份证键盘' : '车牌号键盘'}}
+
+
+ {{confirmBtn ? confirmText : ''}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-lazy-load/u-lazy-load.vue b/src/uview-ui/components/u-lazy-load/u-lazy-load.vue
new file mode 100644
index 0000000..429a680
--- /dev/null
+++ b/src/uview-ui/components/u-lazy-load/u-lazy-load.vue
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-line-progress/u-line-progress.vue b/src/uview-ui/components/u-line-progress/u-line-progress.vue
new file mode 100644
index 0000000..77e2da2
--- /dev/null
+++ b/src/uview-ui/components/u-line-progress/u-line-progress.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+ {{percent + '%'}}
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-line/u-line.vue b/src/uview-ui/components/u-line/u-line.vue
new file mode 100644
index 0000000..c56fbc3
--- /dev/null
+++ b/src/uview-ui/components/u-line/u-line.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-link/u-link.vue b/src/uview-ui/components/u-link/u-link.vue
new file mode 100644
index 0000000..2dd2a73
--- /dev/null
+++ b/src/uview-ui/components/u-link/u-link.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-loading-page/u-loading-page.vue b/src/uview-ui/components/u-loading-page/u-loading-page.vue
new file mode 100644
index 0000000..7e04401
--- /dev/null
+++ b/src/uview-ui/components/u-loading-page/u-loading-page.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-loading/u-loading.vue b/src/uview-ui/components/u-loading/u-loading.vue
new file mode 100644
index 0000000..c747f64
--- /dev/null
+++ b/src/uview-ui/components/u-loading/u-loading.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-loadmore/u-loadmore.vue b/src/uview-ui/components/u-loadmore/u-loadmore.vue
new file mode 100644
index 0000000..6b852a8
--- /dev/null
+++ b/src/uview-ui/components/u-loadmore/u-loadmore.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
+
+ {{ showText }}
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-mask/u-mask.vue b/src/uview-ui/components/u-mask/u-mask.vue
new file mode 100644
index 0000000..0b55d9d
--- /dev/null
+++ b/src/uview-ui/components/u-mask/u-mask.vue
@@ -0,0 +1,123 @@
+
+ {}" :class="{
+ 'u-mask-zoom': zoom,
+ 'u-mask-show': show
+ }">
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-message-input/u-message-input.vue b/src/uview-ui/components/u-message-input/u-message-input.vue
new file mode 100644
index 0000000..41e0719
--- /dev/null
+++ b/src/uview-ui/components/u-message-input/u-message-input.vue
@@ -0,0 +1,311 @@
+
+
+
+
+
+
+
+
+
+ {{ charArr[index] ? charArr[index] : ''}}
+
+ {{ charArr[index] ? '●' : ''}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-modal/u-modal.vue b/src/uview-ui/components/u-modal/u-modal.vue
new file mode 100644
index 0000000..ce58113
--- /dev/null
+++ b/src/uview-ui/components/u-modal/u-modal.vue
@@ -0,0 +1,283 @@
+
+
+
+
+ {{ title }}
+
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-navbar/u-navbar.vue b/src/uview-ui/components/u-navbar/u-navbar.vue
new file mode 100644
index 0000000..450242e
--- /dev/null
+++ b/src/uview-ui/components/u-navbar/u-navbar.vue
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+
+
+ {{ backText }}
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-no-network/u-no-network.vue b/src/uview-ui/components/u-no-network/u-no-network.vue
new file mode 100644
index 0000000..51d9f4f
--- /dev/null
+++ b/src/uview-ui/components/u-no-network/u-no-network.vue
@@ -0,0 +1,233 @@
+
+ {}">
+
+
+
+ {{tips}}
+
+
+
+
+ 请检查网络,或前往设置
+
+
+
+ 重试
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-notice-bar/u-notice-bar.vue b/src/uview-ui/components/u-notice-bar/u-notice-bar.vue
new file mode 100644
index 0000000..41a6cc4
--- /dev/null
+++ b/src/uview-ui/components/u-notice-bar/u-notice-bar.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-number-box/u-number-box.vue b/src/uview-ui/components/u-number-box/u-number-box.vue
new file mode 100644
index 0000000..54a679e
--- /dev/null
+++ b/src/uview-ui/components/u-number-box/u-number-box.vue
@@ -0,0 +1,363 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-number-keyboard/u-number-keyboard.vue b/src/uview-ui/components/u-number-keyboard/u-number-keyboard.vue
new file mode 100644
index 0000000..6425a1f
--- /dev/null
+++ b/src/uview-ui/components/u-number-keyboard/u-number-keyboard.vue
@@ -0,0 +1,158 @@
+
+ {}">
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uview-ui/components/u-parse/libs/CssHandler.js b/src/uview-ui/components/u-parse/libs/CssHandler.js
new file mode 100644
index 0000000..75c6015
--- /dev/null
+++ b/src/uview-ui/components/u-parse/libs/CssHandler.js
@@ -0,0 +1,100 @@
+const cfg = require('./config.js'),
+ isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+
+function CssHandler(tagStyle) {
+ var styles = Object.assign(Object.create(null), cfg.userAgentStyles);
+ for (var item in tagStyle)
+ styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];
+ this.styles = styles;
+}
+CssHandler.prototype.getStyle = function(data) {
+ this.styles = new parser(data, this.styles).parse();
+}
+CssHandler.prototype.match = function(name, attrs) {
+ var tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : '';
+ if (attrs.class) {
+ var items = attrs.class.split(' ');
+ for (var i = 0, item; item = items[i]; i++)
+ if (tmp = this.styles['.' + item])
+ matched += tmp + ';';
+ }
+ if (tmp = this.styles['#' + attrs.id])
+ matched += tmp + ';';
+ return matched;
+}
+module.exports = CssHandler;
+
+function parser(data, init) {
+ this.data = data;
+ this.floor = 0;
+ this.i = 0;
+ this.list = [];
+ this.res = init;
+ this.state = this.Space;
+}
+parser.prototype.parse = function() {
+ for (var c; c = this.data[this.i]; this.i++)
+ this.state(c);
+ return this.res;
+}
+parser.prototype.section = function() {
+ return this.data.substring(this.start, this.i);
+}
+// 状态机
+parser.prototype.Space = function(c) {
+ if (c == '.' || c == '#' || isLetter(c)) {
+ this.start = this.i;
+ this.state = this.Name;
+ } else if (c == '/' && this.data[this.i + 1] == '*')
+ this.Comment();
+ else if (!cfg.blankChar[c] && c != ';')
+ this.state = this.Ignore;
+}
+parser.prototype.Comment = function() {
+ this.i = this.data.indexOf('*/', this.i) + 1;
+ if (!this.i) this.i = this.data.length;
+ this.state = this.Space;
+}
+parser.prototype.Ignore = function(c) {
+ if (c == '{') this.floor++;
+ else if (c == '}' && !--this.floor) {
+ this.list = [];
+ this.state = this.Space;
+ }
+}
+parser.prototype.Name = function(c) {
+ if (cfg.blankChar[c]) {
+ this.list.push(this.section());
+ this.state = this.NameSpace;
+ } else if (c == '{') {
+ this.list.push(this.section());
+ this.Content();
+ } else if (c == ',') {
+ this.list.push(this.section());
+ this.Comma();
+ } else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')
+ this.state = this.Ignore;
+}
+parser.prototype.NameSpace = function(c) {
+ if (c == '{') this.Content();
+ else if (c == ',') this.Comma();
+ else if (!cfg.blankChar[c]) this.state = this.Ignore;
+}
+parser.prototype.Comma = function() {
+ while (cfg.blankChar[this.data[++this.i]]);
+ if (this.data[this.i] == '{') this.Content();
+ else {
+ this.start = this.i--;
+ this.state = this.Name;
+ }
+}
+parser.prototype.Content = function() {
+ this.start = ++this.i;
+ if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;
+ var content = this.section();
+ for (var i = 0, item; item = this.list[i++];)
+ if (this.res[item]) this.res[item] += ';' + content;
+ else this.res[item] = content;
+ this.list = [];
+ this.state = this.Space;
+}
diff --git a/src/uview-ui/components/u-parse/libs/MpHtmlParser.js b/src/uview-ui/components/u-parse/libs/MpHtmlParser.js
new file mode 100644
index 0000000..aeb0fc3
--- /dev/null
+++ b/src/uview-ui/components/u-parse/libs/MpHtmlParser.js
@@ -0,0 +1,580 @@
+/**
+ * html 解析器
+ * @tutorial https://github.com/jin-yufeng/Parser
+ * @version 20201029
+ * @author JinYufeng
+ * @listens MIT
+ */
+const cfg = require('./config.js'),
+ blankChar = cfg.blankChar,
+ CssHandler = require('./CssHandler.js'),
+ windowWidth = uni.getSystemInfoSync().windowWidth;
+var emoji;
+
+function MpHtmlParser(data, options = {}) {
+ this.attrs = {};
+ this.CssHandler = new CssHandler(options.tagStyle, windowWidth);
+ this.data = data;
+ this.domain = options.domain;
+ this.DOM = [];
+ this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0;
+ options.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http';
+ this.options = options;
+ this.state = this.Text;
+ this.STACK = [];
+ // 工具函数
+ this.bubble = () => {
+ for (var i = this.STACK.length, item; item = this.STACK[--i];) {
+ if (cfg.richOnlyTags[item.name]) return false;
+ item.c = 1;
+ }
+ return true;
+ }
+ this.decode = (val, amp) => {
+ var i = -1,
+ j, en;
+ while (1) {
+ if ((i = val.indexOf('&', i + 1)) == -1) break;
+ if ((j = val.indexOf(';', i + 2)) == -1) break;
+ if (val[i + 1] == '#') {
+ en = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j));
+ if (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1);
+ } else {
+ en = val.substring(i + 1, j);
+ if (cfg.entities[en] || en == amp)
+ val = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1);
+ }
+ }
+ return val;
+ }
+ this.getUrl = url => {
+ if (url[0] == '/') {
+ if (url[1] == '/') url = this.options.prot + ':' + url;
+ else if (this.domain) url = this.domain + url;
+ } else if (this.domain && url.indexOf('data:') != 0 && !url.includes('://'))
+ url = this.domain + '/' + url;
+ return url;
+ }
+ this.isClose = () => this.data[this.i] == '>' || (this.data[this.i] == '/' && this.data[this.i + 1] == '>');
+ this.section = () => this.data.substring(this.start, this.i);
+ this.parent = () => this.STACK[this.STACK.length - 1];
+ this.siblings = () => this.STACK.length ? this.parent().children : this.DOM;
+}
+MpHtmlParser.prototype.parse = function() {
+ if (emoji) this.data = emoji.parseEmoji(this.data);
+ for (var c; c = this.data[this.i]; this.i++)
+ this.state(c);
+ if (this.state == this.Text) this.setText();
+ while (this.STACK.length) this.popNode(this.STACK.pop());
+ return this.DOM;
+}
+// 设置属性
+MpHtmlParser.prototype.setAttr = function() {
+ var name = this.attrName.toLowerCase(),
+ val = this.attrVal;
+ if (cfg.boolAttrs[name]) this.attrs[name] = 'T';
+ else if (val) {
+ if (name == 'src' || (name == 'data-src' && !this.attrs.src)) this.attrs.src = this.getUrl(this.decode(val, 'amp'));
+ else if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp');
+ else if (name.substr(0, 5) != 'data-') this.attrs[name] = val;
+ }
+ this.attrVal = '';
+ while (blankChar[this.data[this.i]]) this.i++;
+ if (this.isClose()) this.setNode();
+ else {
+ this.start = this.i;
+ this.state = this.AttrName;
+ }
+}
+// 设置文本节点
+MpHtmlParser.prototype.setText = function() {
+ var back, text = this.section();
+ if (!text) return;
+ text = (cfg.onText && cfg.onText(text, () => back = true)) || text;
+ if (back) {
+ this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i);
+ let j = this.start + text.length;
+ for (this.i = this.start; this.i < j; this.i++) this.state(this.data[this.i]);
+ return;
+ }
+ if (!this.pre) {
+ // 合并空白符
+ var flag, tmp = [];
+ for (let i = text.length, c; c = text[--i];)
+ if (!blankChar[c]) {
+ tmp.unshift(c);
+ if (!flag) flag = 1;
+ } else {
+ if (tmp[0] != ' ') tmp.unshift(' ');
+ if (c == '\n' && flag == void 0) flag = 0;
+ }
+ if (flag == 0) return;
+ text = tmp.join('');
+ }
+ this.siblings().push({
+ type: 'text',
+ text: this.decode(text)
+ });
+}
+// 设置元素节点
+MpHtmlParser.prototype.setNode = function() {
+ var node = {
+ name: this.tagName.toLowerCase(),
+ attrs: this.attrs
+ },
+ close = cfg.selfClosingTags[node.name];
+ if (this.options.nodes.length) node.type = 'node';
+ this.attrs = {};
+ if (!cfg.ignoreTags[node.name]) {
+ // 处理属性
+ var attrs = node.attrs,
+ style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''),
+ styleObj = {};
+ if (attrs.id) {
+ if (this.options.compress & 1) attrs.id = void 0;
+ else if (this.options.useAnchor) this.bubble();
+ }
+ if ((this.options.compress & 2) && attrs.class) attrs.class = void 0;
+ switch (node.name) {
+ case 'a':
+ case 'ad': // #ifdef APP-PLUS
+ case 'iframe':
+ // #endif
+ this.bubble();
+ break;
+ case 'font':
+ if (attrs.color) {
+ styleObj['color'] = attrs.color;
+ attrs.color = void 0;
+ }
+ if (attrs.face) {
+ styleObj['font-family'] = attrs.face;
+ attrs.face = void 0;
+ }
+ if (attrs.size) {
+ var size = parseInt(attrs.size);
+ if (size < 1) size = 1;
+ else if (size > 7) size = 7;
+ var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];
+ styleObj['font-size'] = map[size - 1];
+ attrs.size = void 0;
+ }
+ break;
+ case 'embed':
+ // #ifndef APP-PLUS
+ var src = node.attrs.src || '',
+ type = node.attrs.type || '';
+ if (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8'))
+ node.name = 'video';
+ else if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes(
+ '.aac'))
+ node.name = 'audio';
+ else break;
+ if (node.attrs.autostart)
+ node.attrs.autoplay = 'T';
+ node.attrs.controls = 'T';
+ // #endif
+ // #ifdef APP-PLUS
+ this.bubble();
+ break;
+ // #endif
+ case 'video':
+ case 'audio':
+ if (!attrs.id) attrs.id = node.name + (++this[`${node.name}Num`]);
+ else this[`${node.name}Num`]++;
+ if (node.name == 'video') {
+ if (this.videoNum > 3)
+ node.lazyLoad = 1;
+ if (attrs.width) {
+ styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px');
+ attrs.width = void 0;
+ }
+ if (attrs.height) {
+ styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px');
+ attrs.height = void 0;
+ }
+ }
+ if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T';
+ attrs.source = [];
+ if (attrs.src) {
+ attrs.source.push(attrs.src);
+ attrs.src = void 0;
+ }
+ this.bubble();
+ break;
+ case 'td':
+ case 'th':
+ if (attrs.colspan || attrs.rowspan)
+ for (var k = this.STACK.length, item; item = this.STACK[--k];)
+ if (item.name == 'table') {
+ item.flag = 1;
+ break;
+ }
+ }
+ if (attrs.align) {
+ if (node.name == 'table') {
+ if (attrs.align == 'center') styleObj['margin-inline-start'] = styleObj['margin-inline-end'] = 'auto';
+ else styleObj['float'] = attrs.align;
+ } else styleObj['text-align'] = attrs.align;
+ attrs.align = void 0;
+ }
+ // 压缩 style
+ var styles = style.split(';');
+ style = '';
+ for (var i = 0, len = styles.length; i < len; i++) {
+ var info = styles[i].split(':');
+ if (info.length < 2) continue;
+ let key = info[0].trim().toLowerCase(),
+ value = info.slice(1).join(':').trim();
+ if (value[0] == '-' || value.includes('safe'))
+ style += `;${key}:${value}`;
+ else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import'))
+ styleObj[key] = value;
+ }
+ if (node.name == 'img') {
+ if (attrs.src && !attrs.ignore) {
+ if (this.bubble())
+ attrs.i = (this.imgNum++).toString();
+ else attrs.ignore = 'T';
+ }
+ if (attrs.ignore) {
+ style += ';-webkit-touch-callout:none';
+ styleObj['max-width'] = '100%';
+ }
+ var width;
+ if (styleObj.width) width = styleObj.width;
+ else if (attrs.width) width = attrs.width.includes('%') ? attrs.width : parseFloat(attrs.width) + 'px';
+ if (width) {
+ styleObj.width = width;
+ attrs.width = '100%';
+ if (parseInt(width) > windowWidth) {
+ styleObj.height = '';
+ if (attrs.height) attrs.height = void 0;
+ }
+ }
+ if (styleObj.height) {
+ attrs.height = styleObj.height;
+ styleObj.height = '';
+ } else if (attrs.height && !attrs.height.includes('%'))
+ attrs.height = parseFloat(attrs.height) + 'px';
+ }
+ for (var key in styleObj) {
+ var value = styleObj[key];
+ if (!value) continue;
+ if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1;
+ // 填充链接
+ if (value.includes('url')) {
+ var j = value.indexOf('(');
+ if (j++ != -1) {
+ while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) j++;
+ value = value.substr(0, j) + this.getUrl(value.substr(j));
+ }
+ }
+ // 转换 rpx
+ else if (value.includes('rpx'))
+ value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px');
+ else if (key == 'white-space' && value.includes('pre') && !close)
+ this.pre = node.pre = true;
+ style += `;${key}:${value}`;
+ }
+ style = style.substr(1);
+ if (style) attrs.style = style;
+ if (!close) {
+ node.children = [];
+ if (node.name == 'pre' && cfg.highlight) {
+ this.remove(node);
+ this.pre = node.pre = true;
+ }
+ this.siblings().push(node);
+ this.STACK.push(node);
+ } else if (!cfg.filter || cfg.filter(node, this) != false)
+ this.siblings().push(node);
+ } else {
+ if (!close) this.remove(node);
+ else if (node.name == 'source') {
+ var parent = this.parent();
+ if (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src)
+ parent.attrs.source.push(node.attrs.src);
+ } else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href;
+ }
+ if (this.data[this.i] == '/') this.i++;
+ this.start = this.i + 1;
+ this.state = this.Text;
+}
+// 移除标签
+MpHtmlParser.prototype.remove = function(node) {
+ var name = node.name,
+ j = this.i;
+ // 处理 svg
+ var handleSvg = () => {
+ var src = this.data.substring(j, this.i + 1);
+ node.attrs.xmlns = 'http://www.w3.org/2000/svg';
+ for (var key in node.attrs) {
+ if (key == 'viewbox') src = ` viewBox="${node.attrs.viewbox}"` + src;
+ else if (key != 'style') src = ` ${key}="${node.attrs[key]}"` + src;
+ }
+ src = '