c&&ng&&(a.moveTo(e.x,e.y),i=1),0g&&e.xg&&(a.moveTo(e.x,e.y),i=1),0g&&e.xg&&(a.moveTo(e.x,e.y),t=1),0g&&e.xg&&(a.moveTo(e.x,e.y),t=1),0g&&e.xt._scrollDistance_&&o.fillRect(0,0,l,d),!0==t.enableScroll&&o.fillRect(r,0,t.width,d),o.closePath(),o.stroke();var h=[];for(let l=0;l<=t.yAxis.splitNumber;l++)h.push(t.area[0]+n*l);let x=t.area[3],c=t.width-t.area[1];for(let n,l=0;le/f?o.setStrokeStyle(hexToRgb(t[0].color,1)):o.setStrokeStyle(hexToRgb(t[0].color,.3)),o.setLineWidth(3*a.pixelRatio),o.moveTo(g,0),o.lineTo(y,0),o.stroke(),o.rotate(p*n);o.restore(),t=getArcbarDataPoints(t,r,l),o.setLineWidth(r.width),o.setStrokeStyle(t[0].color),o.setLineCap("round"),o.beginPath(),o.arc(s.x,s.y,h,r.startAngle*n,t[0]._proportion_*n,!1),o.stroke();let m=d-2.5*r.width;o.save(),o.translate(s.x,s.y),o.rotate((t[0]._proportion_-1)*n),o.beginPath(),o.setLineWidth(r.width/3);let S=o.createLinearGradient(0,.6*-m,0,.6*m);S.addColorStop("0",hexToRgb("#FFFFFF",0)),S.addColorStop("0.5",hexToRgb(t[0].color,1)),S.addColorStop("1.0",hexToRgb("#FFFFFF",0)),o.setStrokeStyle(S),o.arc(0,0,m,.85*n,1.15*n,!1),o.stroke(),o.beginPath(),o.setLineWidth(1),o.setStrokeStyle(t[0].color),o.setFillStyle(t[0].color),o.moveTo(-m-r.width/3/2,-4),o.lineTo(-m-r.width/3/2-4,0),o.lineTo(-m-r.width/3/2,4),o.lineTo(-m-r.width/3/2,-4),o.stroke(),o.fill(),o.restore()}else{o.setLineWidth(r.width),o.setLineCap("butt");for(let t,a=0;at[l].area[2]||e[1]>t[l].area[3]||e[2]e[0]||0>e[1]||e[2]>a||e[3]>o){n=!0;break}else n=!1;return n}function getBoundingBox(e){var t,a={};a.xMin=180,a.xMax=0,a.yMin=90,a.yMax=0;for(var o,n=0;nh.x?a.xMax:h.x,a.yMin=a.yMinh.y?a.yMax:h.y}}}return a}function coordinateToPoint(e,t,i,a,o,n){return{x:(t-i.xMin)*a+o,y:(i.yMax-e)*a+n}}function pointToCoordinate(e,t,i,a,o,n){return{x:(t-o)/a+i.xMin,y:i.yMax-(e-n)/a}}function isRayIntersectsSegment(e,t,i){if(t[1]==i[1])return!1;if(t[1]>e[1]&&i[1]>e[1])return!1;if(t[1]e[1])return!1;if(i[1]==e[1]&&t[1]>e[1])return!1;if(t[0](e/=.5)?.5*t(e,3):.5*(t(e-2,3)+2)},linear:function(e){return e}};function Animation(e){this.isStop=!1,e.duration="undefined"==typeof e.duration?1e3:e.duration,e.timing=e.timing||"linear";var t=function(){return"undefined"==typeof setTimeout?"undefined"==typeof requestAnimationFrame?function(e){e(null)}:requestAnimationFrame:function(e,t){setTimeout(function(){var t=+new Date;e(t)},t)}}(),i=null,a=function(o){if(null===o||!0===this.isStop)return e.onProcess&&e.onProcess(1),void(e.onAnimationFinish&&e.onAnimationFinish());if(null===i&&(i=o),o-io;o++)t.area[o]=t.padding[o];var d=calLegendData(s,t,a,t.chartData),h=d.area.wholeHeight,x=d.area.wholeWidth;switch(t.legend.position){case"top":t.area[0]+=h;break;case"bottom":t.area[2]+=h;break;case"left":t.area[3]+=x;break;case"right":t.area[1]+=x;}let c={},p=0;if("line"===t.type||"column"===t.type||"area"===t.type||"mix"===t.type||"candle"===t.type){if(c=calYAxisData(n,t,a),p=c.yAxisWidth,t.yAxis.showTitle){let e=0;for(let o=0;ot;t++)e.padding[t]*=e.pixelRatio;t.yAxisWidth=config.yAxisWidth*e.pixelRatio,t.xAxisHeight=config.xAxisHeight*e.pixelRatio,e.enableScroll&&e.xAxis.scrollShow&&(t.xAxisHeight+=6*e.pixelRatio),t.xAxisLineHeight=config.xAxisLineHeight*e.pixelRatio,t.fontSize=e.fontSize,t.titleFontSize=config.titleFontSize*e.pixelRatio,t.subtitleFontSize=config.subtitleFontSize*e.pixelRatio,t.toolTipPadding=config.toolTipPadding*e.pixelRatio,t.toolTipLineHeight=config.toolTipLineHeight*e.pixelRatio,t.columePadding=config.columePadding*e.pixelRatio,e.$this=e.$this?e.$this:this,this.context=uni.createCanvasContext(e.canvasId,e.$this),e.chartData={},this.event=new Event,this.scrollOption={currentOffset:0,startTouchX:0,distance:0,lastMoveTime:0},this.opts=e,this.config=t,drawCharts.call(this,e.type,e,t,this.context)};Charts.prototype.updateData=function(){let e=0生肖
+ * @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:var count = calendar.lYearDays(1987) ;//count=387
+ */
+ lYearDays: function (y) {
+ var i; var sum = 348
+ for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 }
+ return (sum + this.leapDays(y))
+ },
+
+ /**
+ * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
+ * @param lunar Year
+ * @return Number (0-12)
+ * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
+ */
+ leapMonth: function (y) { // 闰字编码 \u95f0
+ return (this.lunarInfo[y - 1900] & 0xf)
+ },
+
+ /**
+ * 返回农历y年闰月的天数 若该年没有闰月则返回0
+ * @param lunar Year
+ * @return Number (0、29、30)
+ * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
+ */
+ leapDays: function (y) {
+ if (this.leapMonth(y)) {
+ return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29)
+ }
+ return (0)
+ },
+
+ /**
+ * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
+ * @param lunar Year
+ * @return Number (-1、29、30)
+ * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
+ */
+ monthDays: function (y, m) {
+ if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1
+ return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29)
+ },
+
+ /**
+ * 返回公历(!)y年m月的天数
+ * @param solar Year
+ * @return Number (-1、28、29、30、31)
+ * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
+ */
+ solarDays: function (y, m) {
+ if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1
+ var ms = m - 1
+ if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29
+ return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28)
+ } else {
+ return (this.solarMonth[ms])
+ }
+ },
+
+ /**
+ * 农历年份转换为干支纪年
+ * @param lYear 农历年的年份数
+ * @return Cn string
+ */
+ toGanZhiYear: function (lYear) {
+ var ganKey = (lYear - 3) % 10
+ var zhiKey = (lYear - 3) % 12
+ if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干
+ if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支
+ return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1]
+ },
+
+ /**
+ * 公历月、日判断所属星座
+ * @param cMonth [description]
+ * @param cDay [description]
+ * @return Cn string
+ */
+ toAstro: function (cMonth, cDay) {
+ var 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'
+ var 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 this.Gan[offset % 10] + this.Zhi[offset % 12]
+ },
+
+ /**
+ * 传入公历(!)y年获得该年第n个节气的公历日期
+ * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
+ * @return day Number
+ * @eg:var _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 }
+ var _table = this.sTermInfo[y - 1900]
+ var _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()
+ ]
+ var _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:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
+ */
+ toChinaMonth: function (m) { // 月 => \u6708
+ if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1
+ var s = this.nStr3[m - 1]
+ s += '\u6708'// 加上月字
+ return s
+ },
+
+ /**
+ * 传入农历日期数字返回汉字表示法
+ * @param lunar day
+ * @return Cn string
+ * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
+ */
+ toChinaDay: function (d) { // 日 => \u65e5
+ var 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 = this.nStr2[Math.floor(d / 10)]
+ s += this.nStr1[d % 10]
+ }
+ return (s)
+ },
+
+ /**
+ * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
+ * @param y year
+ * @return Cn string
+ * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
+ */
+ getAnimal: function (y) {
+ return this.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// undefined转换为数字变为NaN
+ }
+ // 公历传参最下限
+ if (y == 1900 && m == 1 && d < 31) {
+ return -1
+ }
+ // 未传参 获得当天
+ if (!y) {
+ var objDate = new Date()
+ } else {
+ var objDate = new Date(y, parseInt(m) - 1, d)
+ }
+ var i; var leap = 0; var temp = 0
+ // 修正ymd参数
+ var y = objDate.getFullYear()
+ var m = objDate.getMonth() + 1
+ var d = objDate.getDate()
+ var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000
+ for (i = 1900; i < 2101 && offset > 0; i++) {
+ temp = this.lYearDays(i)
+ offset -= temp
+ }
+ if (offset < 0) {
+ offset += temp; i--
+ }
+
+ // 是否今天
+ var isTodayObj = new Date()
+ var isToday = false
+ if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
+ isToday = true
+ }
+ // 星期几
+ var nWeek = objDate.getDay()
+ var cWeek = this.nStr1[nWeek]
+ // 数字表示周几顺应天朝周一开始的惯例
+ if (nWeek == 0) {
+ nWeek = 7
+ }
+ // 农历年
+ var year = i
+ var leap = this.leapMonth(i) // 闰哪个月
+ var isLeap = false
+
+ // 效验闰月
+ for (i = 1; i < 13 && offset > 0; i++) {
+ // 闰月
+ if (leap > 0 && i == (leap + 1) && isLeap == false) {
+ --i
+ isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数
+ } else {
+ temp = this.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
+ }
+ // 农历月
+ var month = i
+ // 农历日
+ var day = offset + 1
+ // 天干地支处理
+ var sm = m - 1
+ var gzY = this.toGanZhiYear(year)
+
+ // 当月的两个节气
+ // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
+ var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始
+ var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始
+
+ // 依据12节气修正干支月
+ var gzM = this.toGanZhi((y - 1900) * 12 + m + 11)
+ if (d >= firstNode) {
+ gzM = this.toGanZhi((y - 1900) * 12 + m + 12)
+ }
+
+ // 传入的日期的节气与否
+ var isTerm = false
+ var Term = null
+ if (firstNode == d) {
+ isTerm = true
+ Term = this.solarTerm[m * 2 - 2]
+ }
+ if (secondNode == d) {
+ isTerm = true
+ Term = this.solarTerm[m * 2 - 1]
+ }
+ // 日柱 当月一日与 1900/1/1 相差天数
+ var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10
+ var gzD = this.toGanZhi(dayCyclical + d - 1)
+ // 该日期所属的星座
+ var astro = this.toAstro(m, d)
+
+ return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.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
+ var isLeapMonth = !!isLeapMonth
+ var leapOffset = 0
+ var leapMonth = this.leapMonth(y)
+ var leapDay = this.leapDays(y)
+ if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
+ if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值
+ var day = this.monthDays(y, m)
+ var _day = day
+ // bugFix 2016-9-25
+ // if month is leap, _day use leapDays method
+ if (isLeapMonth) {
+ _day = this.leapDays(y, m)
+ }
+ if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验
+
+ // 计算农历的时间差
+ var offset = 0
+ for (var i = 1900; i < y; i++) {
+ offset += this.lYearDays(i)
+ }
+ var leap = 0; var isAdd = false
+ for (var i = 1; i < m; i++) {
+ leap = this.leapMonth(y)
+ if (!isAdd) { // 处理闰月
+ if (leap <= i && leap > 0) {
+ offset += this.leapDays(y); isAdd = true
+ }
+ }
+ offset += this.monthDays(y, i)
+ }
+ // 转换闰月农历 需补充该年闰月的前一个月的时差
+ if (isLeapMonth) { offset += day }
+ // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
+ var stmap = Date.UTC(1900, 1, 30, 0, 0, 0)
+ var calObj = new Date((offset + d - 31) * 86400000 + stmap)
+ var cY = calObj.getUTCFullYear()
+ var cM = calObj.getUTCMonth() + 1
+ var cD = calObj.getUTCDate()
+
+ return this.solar2lunar(cY, cM, cD)
+ }
+}
+
+export default calendar
diff --git a/components/uni-calendar/uni-calendar-item.vue b/components/uni-calendar/uni-calendar-item.vue
new file mode 100644
index 0000000..c1a620d
--- /dev/null
+++ b/components/uni-calendar/uni-calendar-item.vue
@@ -0,0 +1,161 @@
+
+
+
+
+ {{weeks.date}}
+ 今天
+ {{weeks.isDay?'今天': (weeks.lunar.IDayCn === '初一'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}
+ {{weeks.extraInfo.info}}
+
+
+
+
+
+
+
diff --git a/components/uni-calendar/uni-calendar.vue b/components/uni-calendar/uni-calendar.vue
new file mode 100644
index 0000000..c81d699
--- /dev/null
+++ b/components/uni-calendar/uni-calendar.vue
@@ -0,0 +1,444 @@
+
+
+
+
+
+
+
+
+ {{nowDate.month}}
+
+
+
+ 日
+
+
+ 一
+
+
+ 二
+
+
+ 三
+
+
+ 四
+
+
+ 五
+
+
+ 六
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/uni-calendar/util.js b/components/uni-calendar/util.js
new file mode 100644
index 0000000..38129ee
--- /dev/null
+++ b/components/uni-calendar/util.js
@@ -0,0 +1,337 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+
+import CALENDAR from './calendar.js'
+
+class Calendar {
+ constructor({
+ date,
+ selected,
+ startDate,
+ endDate,
+ range
+ } = {}) {
+ // 当前日期
+ this.date = this.getDate(date) // 当前初入日期
+ // 打点信息
+ this.selected = selected || [];
+ // 范围开始
+ this.startDate = startDate
+ // 范围结束
+ this.endDate = endDate
+ this.range = range
+ // 多选状态
+ this.multipleStatus = {
+ before: '',
+ after: '',
+ data: []
+ }
+ // 每周日期
+ this.weeks = {}
+
+ this._getWeek(this.date.fullDate)
+ }
+
+ /**
+ * 获取任意时间
+ */
+ getDate(date, AddDayCount = 0, str = 'day') {
+ if (!date) {
+ date = new Date()
+ }
+ if (typeof date !== 'object') {
+ date = date.replace(/-/g, '/')
+ }
+ const dd = new Date(date)
+ switch (str) {
+ case 'day':
+ dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
+ break
+ case 'month':
+ if (dd.getDate() === 31) {
+ dd.setDate(dd.getDate() + AddDayCount)
+ } else {
+ dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期
+ }
+ break
+ case 'year':
+ dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期
+ break
+ }
+ const y = dd.getFullYear()
+ const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
+ const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
+ return {
+ fullDate: y + '-' + m + '-' + d,
+ year: y,
+ month: m,
+ date: d,
+ day: dd.getDay()
+ }
+ }
+
+
+ /**
+ * 获取上月剩余天数
+ */
+ _getLastMonthDays(firstDay, full) {
+ let dateArr = []
+ for (let i = firstDay; i > 0; i--) {
+ const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate()
+ dateArr.push({
+ date: beforeDate,
+ month: full.month - 1,
+ lunar: this.getlunar(full.year, full.month - 1, beforeDate),
+ disable: true
+ })
+ }
+ return dateArr
+ }
+ /**
+ * 获取本月天数
+ */
+ _currentMonthDys(dateData, full) {
+ let dateArr = []
+ let fullDate = this.date.fullDate
+ for (let i = 1; i <= dateData; i++) {
+ let isinfo = false
+ let nowDate = full.year + '-' + (full.month < 10 ?
+ full.month : full.month) + '-' + (i < 10 ?
+ '0' + i : i)
+ // 是否今天
+ let isDay = fullDate === nowDate
+ // 获取打点信息
+ let info = this.selected && this.selected.find((item) => {
+ if (this.dateEqual(nowDate, item.date)) {
+ return item
+ }
+ })
+
+ // 日期禁用
+ let disableBefore = true
+ let disableAfter = true
+ if (this.startDate) {
+ let dateCompBefore = this.dateCompare(this.startDate, fullDate)
+ disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate)
+ }
+
+ if (this.endDate) {
+ let dateCompAfter = this.dateCompare(fullDate, this.endDate)
+ disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate)
+ }
+
+ let multiples = this.multipleStatus.data
+ let checked = false
+ let multiplesStatus = -1
+ if (this.range) {
+ if (multiples) {
+ multiplesStatus = multiples.findIndex((item) => {
+ return this.dateEqual(item, nowDate)
+ })
+ }
+ if (multiplesStatus !== -1) {
+ checked = true
+ }
+ }
+
+ let data = {
+ fullDate: nowDate,
+ year: full.year,
+ date: i,
+ multiple: this.range ? checked : false,
+ month: full.month,
+ lunar: this.getlunar(full.year, full.month, i),
+ disable: !disableBefore || !disableAfter,
+ isDay
+ }
+ if (info) {
+ data.extraInfo = info
+ }
+
+ dateArr.push(data)
+ }
+ return dateArr
+ }
+ /**
+ * 获取下月天数
+ */
+ _getNextMonthDays(surplus, full) {
+ let dateArr = []
+ for (let i = 1; i < surplus + 1; i++) {
+ dateArr.push({
+ date: i,
+ month: Number(full.month) + 1,
+ lunar: this.getlunar(full.year, Number(full.month) + 1, i),
+ disable: true
+ })
+ }
+ return dateArr
+ }
+ /**
+ * 设置日期
+ * @param {Object} date
+ */
+ setDate(date) {
+ this._getWeek(date)
+ }
+ /**
+ * 获取当前日期详情
+ * @param {Object} date
+ */
+ getInfo(date) {
+ if (!date) {
+ date = new Date()
+ }
+ const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate)
+ return dateInfo
+ }
+
+ /**
+ * 比较时间大小
+ */
+ dateCompare(startDate, endDate) {
+ // 计算截止时间
+ startDate = new Date(startDate.replace('-', '/').replace('-', '/'))
+ // 计算详细项的截止时间
+ endDate = new Date(endDate.replace('-', '/').replace('-', '/'))
+ if (startDate <= endDate) {
+ return true
+ } else {
+ return false
+ }
+ }
+
+ /**
+ * 比较时间是否相等
+ */
+ dateEqual(before, after) {
+ // 计算截止时间
+ before = new Date(before.replace('-', '/').replace('-', '/'))
+ // 计算详细项的截止时间
+ after = new Date(after.replace('-', '/').replace('-', '/'))
+ if (before.getTime() - after.getTime() === 0) {
+ return true
+ } else {
+ return false
+ }
+ }
+
+
+ /**
+ * 获取日期范围内所有日期
+ * @param {Object} begin
+ * @param {Object} end
+ */
+ geDateAll(begin, end) {
+ var arr = []
+ var ab = begin.split('-')
+ var ae = end.split('-')
+ var db = new Date()
+ db.setFullYear(ab[0], ab[1] - 1, ab[2])
+ var de = new Date()
+ de.setFullYear(ae[0], ae[1] - 1, ae[2])
+ var unixDb = db.getTime() - 24 * 60 * 60 * 1000
+ var unixDe = de.getTime() - 24 * 60 * 60 * 1000
+ for (var k = unixDb; k <= unixDe;) {
+ k = k + 24 * 60 * 60 * 1000
+ arr.push(this.getDate(new Date(parseInt(k))).fullDate)
+ }
+ return arr
+ }
+ /**
+ * 计算阴历日期显示
+ */
+ getlunar(year, month, date) {
+ return CALENDAR.solar2lunar(year, month, date)
+ }
+ /**
+ * 设置打点
+ */
+ setSelectInfo(data, value) {
+ this.selected = value
+ this._getWeek(data)
+ }
+
+ /**
+ * 获取多选状态
+ */
+ setMultiple(fullDate) {
+ let {
+ before,
+ after
+ } = this.multipleStatus
+ if (!this.range) return
+ if (before && after) {
+ this.multipleStatus.before = ''
+ this.multipleStatus.after = ''
+ this.multipleStatus.data = []
+ this._getWeek(fullDate)
+ } else {
+ if (!before) {
+ this.multipleStatus.before = fullDate
+ } else {
+ this.multipleStatus.after = fullDate
+ if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
+ this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after);
+ } else {
+ this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before);
+ }
+ this._getWeek(fullDate)
+ }
+ }
+ }
+
+ /**
+ * 获取每周数据
+ * @param {Object} dateData
+ */
+ _getWeek(dateData) {
+ const {
+ fullDate,
+ year,
+ month,
+ date,
+ day
+ } = this.getDate(dateData)
+ let firstDay = new Date(year, month - 1, 1).getDay()
+ let currentDay = new Date(year, month, 0).getDate()
+ let dates = {
+ lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天
+ currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数
+ nextMonthDays: [], // 下个月开始几天
+ weeks: []
+ }
+ let canlender = []
+ const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length)
+ dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData))
+ canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays)
+ let weeks = {}
+ // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天
+ for (let i = 0; i < canlender.length; i++) {
+ if (i % 7 === 0) {
+ weeks[parseInt(i / 7)] = new Array(7)
+ }
+ weeks[parseInt(i / 7)][i % 7] = canlender[i]
+ }
+ this.canlender = canlender
+ this.weeks = weeks
+ }
+
+ //静态方法
+ // static init(date) {
+ // if (!this.instance) {
+ // this.instance = new Calendar(date);
+ // }
+ // return this.instance;
+ // }
+}
+
+
+export default Calendar
diff --git a/components/userEvaluation/index.vue b/components/userEvaluation/index.vue
new file mode 100644
index 0000000..65e578b
--- /dev/null
+++ b/components/userEvaluation/index.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+ {{ item.nickname }}
+
+
+
+ {{ item.create_time }} {{ item.sku ? item.sku : '' }}
+ {{ item.comment }}
+
+
+
+
+
+ +{{item.pics.length-4}}
+
+
+
+ 店小二:{{item.merchant_reply_content}}
+
+
+
+
+
+
diff --git a/components/userNameSwiper/userNameSwiper.vue b/components/userNameSwiper/userNameSwiper.vue
new file mode 100644
index 0000000..b52a0c6
--- /dev/null
+++ b/components/userNameSwiper/userNameSwiper.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+ ***** 拼团成功
+
+
+
+
+
+
+
+
diff --git a/components/vconsole.min.js b/components/vconsole.min.js
new file mode 100644
index 0000000..ea401e1
--- /dev/null
+++ b/components/vconsole.min.js
@@ -0,0 +1,10 @@
+/*!
+ * vConsole v3.3.4 (https://github.com/Tencent/vConsole)
+ *
+ * Tencent is pleased to support the open source community by making vConsole available.
+ * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
+ * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
+ * http://opensource.org/licenses/MIT
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("VConsole",[],t):"object"==typeof exports?exports.VConsole=t():e.VConsole=t()}(window,function(){return function(e){var t={};function o(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}return o.m=e,o.c=t,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=6)}([function(e,t,o){var n,r,i;r=[t],void 0===(i="function"==typeof(n=function(e){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e){return"[object Number]"==Object.prototype.toString.call(e)}function n(e){return"[object String]"==Object.prototype.toString.call(e)}function r(e){return"[object Array]"==Object.prototype.toString.call(e)}function i(e){return"[object Boolean]"==Object.prototype.toString.call(e)}function a(e){return void 0===e}function l(e){return null===e}function c(e){return"[object Symbol]"==Object.prototype.toString.call(e)}function s(e){return!("[object Object]"!=Object.prototype.toString.call(e)&&(o(e)||n(e)||i(e)||r(e)||l(e)||d(e)||a(e)||c(e)))}function d(e){return"[object Function]"==Object.prototype.toString.call(e)}function u(e){var t=Object.prototype.toString.call(e);return"[object global]"==t||"[object Window]"==t||"[object DOMWindow]"==t}function v(e){if(!s(e)&&!r(e))return[];if(r(e)){var t=[];return e.forEach(function(e,o){t.push(o)}),t}return Object.getOwnPropertyNames(e).sort()}Object.defineProperty(e,"__esModule",{value:!0}),e.getDate=function(e){var t=e>0?new Date(e):new Date,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=t.getMonth()<9?"0"+(t.getMonth()+1):t.getMonth()+1,r=t.getFullYear(),i=t.getHours()<10?"0"+t.getHours():t.getHours(),a=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes(),l=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds(),c=t.getMilliseconds()<10?"0"+t.getMilliseconds():t.getMilliseconds();return c<100&&(c="0"+c),{time:+t,year:r,month:n,day:o,hour:i,minute:a,second:l,millisecond:c}},e.isNumber=o,e.isString=n,e.isArray=r,e.isBoolean=i,e.isUndefined=a,e.isNull=l,e.isSymbol=c,e.isObject=s,e.isFunction=d,e.isElement=function(e){return"object"===("undefined"==typeof HTMLElement?"undefined":t(HTMLElement))?e instanceof HTMLElement:e&&"object"===t(e)&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName},e.isWindow=u,e.isPlainObject=function(e){var o,n=Object.prototype.hasOwnProperty;if(!e||"object"!==t(e)||e.nodeType||u(e))return!1;try{if(e.constructor&&!n.call(e,"constructor")&&!n.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}for(o in e);return void 0===o||n.call(e,o)},e.htmlEncode=function(e){return document.createElement("a").appendChild(document.createTextNode(e)).parentNode.innerHTML},e.JSONStringify=function(e){if(!s(e)&&!r(e))return JSON.stringify(e);var t="{",o="}";r(e)&&(t="[",o="]");for(var n=t,i=v(e),a=0;a-1||(r.push(t),e[o].className=r.join(" "))}}},removeClass:function(e,t){if(e){(0,n.isArray)(e)||(e=[e]);for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:"newPlugin";!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.id=t,this.name=o,this.isReady=!1,this.eventList={}}var t,o,r;return t=e,(o=[{key:"on",value:function(e,t){return this.eventList[e]=t,this}},{key:"trigger",value:function(e,t){if("function"==typeof this.eventList[e])this.eventList[e].call(this,t);else{var o="on"+e.charAt(0).toUpperCase()+e.slice(1);"function"==typeof this[o]&&this[o].call(this,t)}return this}},{key:"id",get:function(){return this._id},set:function(e){if(!e)throw"Plugin ID cannot be empty";this._id=e.toLowerCase()}},{key:"name",get:function(){return this._name},set:function(e){if(!e)throw"Plugin name cannot be empty";this._name=e}},{key:"vConsole",get:function(){return this._vConsole||void 0},set:function(e){if(!e)throw"vConsole cannot be empty";this._vConsole=e}}])&&n(t.prototype,o),r&&n(t,r),e}();o.default=r,e.exports=t.default})?n.apply(t,r):n)||(e.exports=i)},function(e,t,o){var n,r,i;r=[t,o(0),o(1),o(2),o(18),o(19),o(20)],void 0===(i="function"==typeof(n=function(o,n,r,i,a,l,c){"use strict";function s(e){return e&&e.__esModule?e:{default:e}}function d(e){return(d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){for(var o=0;o=o.scrollHeight?e.isInBottom=!0:e.isInBottom=!1)});for(var n=0;n-1&&g.splice(e,1)}},{key:"onShow",value:function(){this.isShow=!0,1==this.isInBottom&&this.autoScrollToBottom()}},{key:"onHide",value:function(){this.isShow=!1}},{key:"onShowConsole",value:function(){1==this.isInBottom&&this.autoScrollToBottom()}},{key:"onUpdateOption",value:function(){this.vConsole.option.maxLogNumber!=this.maxLogNumber&&(this.updateMaxLogNumber(),this.limitMaxLogs())}},{key:"updateMaxLogNumber",value:function(){this.maxLogNumber=this.vConsole.option.maxLogNumber||b,this.maxLogNumber=Math.max(1,this.maxLogNumber)}},{key:"limitMaxLogs",value:function(){if(this.isReady)for(;this.logNumber>this.maxLogNumber;){var e=r.default.one(".vc-item",this.$tabbox);if(!e)break;e.parentNode.removeChild(e),this.logNumber--}}},{key:"showLogType",value:function(e){var t=r.default.one(".vc-log",this.$tabbox);r.default.removeClass(t,"vc-log-partly-log"),r.default.removeClass(t,"vc-log-partly-info"),r.default.removeClass(t,"vc-log-partly-warn"),r.default.removeClass(t,"vc-log-partly-error"),"all"==e?r.default.removeClass(t,"vc-log-partly"):(r.default.addClass(t,"vc-log-partly"),r.default.addClass(t,"vc-log-partly-"+e))}},{key:"autoScrollToBottom",value:function(){this.vConsole.option.disableLogScrolling||this.scrollToBottom()}},{key:"scrollToBottom",value:function(){var e=r.default.one(".vc-content");e&&(e.scrollTop=e.scrollHeight-e.offsetHeight)}},{key:"mockConsole",value:function(){var e=this,t=this,o=["log","info","warn","debug","error"];window.console?(o.map(function(e){t.console[e]=window.console[e]}),t.console.time=window.console.time,t.console.timeEnd=window.console.timeEnd,t.console.clear=window.console.clear):window.console={},o.map(function(t){window.console[t]=function(){for(var o=arguments.length,n=new Array(o),r=0;r0&&(r=a[1].toLowerCase(),i=g.indexOf(r)>-1)}if(r===this.id||!0!==i&&"default"===this.id)if(e._id||(e._id="__vc_"+Math.random().toString(36).substring(2,8)),e.date||(e.date=+new Date),this.isReady){n.isString(t[0])&&i&&(t[0]=t[0].replace(o,""),""===t[0]&&t.shift());for(var l={_id:e._id,logType:e.logType,logText:[],hasContent:!!e.content,count:1},c=0;c "+t[p].toString()+"":n.isObject(t[p])||n.isArray(t[p])?this.getFoldedLine(t[p]):(l[p]?' '):" ")+n.htmlEncode(t[p]).replace(/\n/g,"
")+""}catch(e){b=" ["+d(t[p])+"]"}b&&("string"==typeof b?f.insertAdjacentHTML("beforeend",b):f.insertAdjacentElement("beforeend",b))}n.isObject(e.content)&&f.insertAdjacentElement("beforeend",e.content),r.default.one(".vc-log",this.$tabbox).insertAdjacentElement("beforeend",o),this.logNumber++,this.limitMaxLogs()}},{key:"getFoldedLine",value:function(e,t){var o=this;if(!t){var i=n.JSONStringify(e),a=i.substr(0,36);t=n.getObjName(e),i.length>36&&(a+="..."),t+=" "+a}var s=r.default.render(l.default,{outer:t,lineType:"obj"});return r.default.bind(r.default.one(".vc-fold-outer",s),"click",function(t){t.preventDefault(),t.stopPropagation(),r.default.hasClass(s,"vc-toggle")?(r.default.removeClass(s,"vc-toggle"),r.default.removeClass(r.default.one(".vc-fold-inner",s),"vc-toggle"),r.default.removeClass(r.default.one(".vc-fold-outer",s),"vc-toggle")):(r.default.addClass(s,"vc-toggle"),r.default.addClass(r.default.one(".vc-fold-inner",s),"vc-toggle"),r.default.addClass(r.default.one(".vc-fold-outer",s),"vc-toggle"));var i=r.default.one(".vc-fold-inner",s);return setTimeout(function(){if(0==i.children.length&&e){for(var t=n.getObjAllKeys(e),a=0;adocument.documentElement.offsetWidth&&(o=document.documentElement.offsetWidth-t.offsetWidth),n+t.offsetHeight>document.documentElement.offsetHeight&&(n=document.documentElement.offsetHeight-t.offsetHeight),o<0&&(o=0),n<0&&(n=0),this.switchPos.x=o,this.switchPos.y=n,i.default.one(".vc-switch").style.right=o+"px",i.default.one(".vc-switch").style.bottom=n+"px");var a=window.devicePixelRatio||1,c=document.querySelector('[name="viewport"]');if(c&&c.content){var s=c.content.match(/initial\-scale\=\d+(\.\d+)?/);(s?parseFloat(s[0].split("=")[1]):1)<1&&(this.$dom.style.fontSize=13*a+"px")}i.default.one(".vc-mask",this.$dom).style.display="none"}},{key:"_mockTap",value:function(){var e,t,o,n=!1,r=null;this.$dom.addEventListener("touchstart",function(n){if(void 0===e){var i=n.targetTouches[0];t=i.pageX,o=i.pageY,e=n.timeStamp,r=n.target.nodeType===Node.TEXT_NODE?n.target.parentNode:n.target}},!1),this.$dom.addEventListener("touchmove",function(e){var r=e.changedTouches[0];(Math.abs(r.pageX-t)>10||Math.abs(r.pageY-o)>10)&&(n=!0)}),this.$dom.addEventListener("touchend",function(t){if(!1===n&&t.timeStamp-e<700&&null!=r){var o=!1;switch(r.tagName.toLowerCase()){case"textarea":o=!0;break;case"input":switch(r.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":o=!1;break;default:o=!r.disabled&&!r.readOnly}}o?r.focus():t.preventDefault();var i=t.changedTouches[0],a=document.createEvent("MouseEvents");a.initMouseEvent("click",!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),a.forwardedTouchEvent=!0,a.initEvent("click",!0,!0),r.dispatchEvent(a)}e=void 0,n=!1,r=null},!1)}},{key:"_bindEvent",value:function(){var e=this,t=i.default.one(".vc-switch",e.$dom);i.default.bind(t,"touchstart",function(t){e.switchPos.startX=t.touches[0].pageX,e.switchPos.startY=t.touches[0].pageY}),i.default.bind(t,"touchend",function(t){e.switchPos.x=e.switchPos.endX,e.switchPos.y=e.switchPos.endY,e.switchPos.startX=0,e.switchPos.startY=0,r.setStorage("switch_x",e.switchPos.x),r.setStorage("switch_y",e.switchPos.y)}),i.default.bind(t,"touchmove",function(o){if(o.touches.length>0){var n=o.touches[0].pageX-e.switchPos.startX,r=o.touches[0].pageY-e.switchPos.startY,i=e.switchPos.x-n,a=e.switchPos.y-r;i+t.offsetWidth>document.documentElement.offsetWidth&&(i=document.documentElement.offsetWidth-t.offsetWidth),a+t.offsetHeight>document.documentElement.offsetHeight&&(a=document.documentElement.offsetHeight-t.offsetHeight),i<0&&(i=0),a<0&&(a=0),t.style.right=i+"px",t.style.bottom=a+"px",e.switchPos.endX=i,e.switchPos.endY=a,o.preventDefault()}}),i.default.bind(i.default.one(".vc-switch",e.$dom),"click",function(){e.show()}),i.default.bind(i.default.one(".vc-hide",e.$dom),"click",function(){e.hide()}),i.default.bind(i.default.one(".vc-mask",e.$dom),"click",function(t){if(t.target!=i.default.one(".vc-mask"))return!1;e.hide()}),i.default.delegate(i.default.one(".vc-tabbar",e.$dom),"click",".vc-tab",function(t){var o=this.dataset.tab;o!=e.activedTab&&e.showTab(o)}),i.default.bind(i.default.one(".vc-panel",e.$dom),"transitionend webkitTransitionEnd oTransitionEnd otransitionend",function(t){if(t.target!=i.default.one(".vc-panel"))return!1;i.default.hasClass(e.$dom,"vc-toggle")||(t.target.style.display="none")});var o=i.default.one(".vc-content",e.$dom),n=!1;i.default.bind(o,"touchstart",function(e){var t=o.scrollTop,r=o.scrollHeight,a=t+o.offsetHeight;0===t?(o.scrollTop=1,0===o.scrollTop&&(i.default.hasClass(e.target,"vc-cmd-input")||(n=!0))):a===r&&(o.scrollTop=t-1,o.scrollTop===t&&(i.default.hasClass(e.target,"vc-cmd-input")||(n=!0)))}),i.default.bind(o,"touchmove",function(e){n&&e.preventDefault()}),i.default.bind(o,"touchend",function(e){n=!1})}},{key:"_autoRun",value:function(){for(var e in this.isInited=!0,this.pluginList)this._initPlugin(this.pluginList[e]);this.tabList.length>0&&this.showTab(this.tabList[0]),this.triggerEvent("ready")}},{key:"triggerEvent",value:function(e,t){e="on"+e.charAt(0).toUpperCase()+e.slice(1),r.isFunction(this.option[e])&&this.option[e].apply(this,t)}},{key:"_initPlugin",value:function(e){var t=this;e.vConsole=this,e.trigger("init"),e.trigger("renderTab",function(o){t.tabList.push(e.id);var n=i.default.render(c.default,{id:e.id,name:e.name});i.default.one(".vc-tabbar",t.$dom).insertAdjacentElement("beforeend",n);var a=i.default.render(s.default,{id:e.id});o&&(r.isString(o)?a.innerHTML+=o:r.isFunction(o.appendTo)?o.appendTo(a):r.isElement(o)&&a.insertAdjacentElement("beforeend",o)),i.default.one(".vc-content",t.$dom).insertAdjacentElement("beforeend",a)}),e.trigger("addTopBar",function(o){if(o)for(var n=i.default.one(".vc-topbar",t.$dom),a=function(t){var a=o[t],l=i.default.render(d.default,{name:a.name||"Undefined",className:a.className||"",pluginID:e.id});if(a.data)for(var c in a.data)l.dataset[c]=a.data[c];r.isFunction(a.onClick)&&i.default.bind(l,"click",function(t){!1===a.onClick.call(l)||(i.default.removeClass(i.default.all(".vc-topbar-"+e.id),"vc-actived"),i.default.addClass(l,"vc-actived"))}),n.insertAdjacentElement("beforeend",l)},l=0;l-1&&this.tabList.splice(s,1);try{delete this.pluginList[e]}catch(t){this.pluginList[e]=void 0}return this.activedTab==e&&this.tabList.length>0&&this.showTab(this.tabList[0]),!0}},{key:"show",value:function(){if(this.isInited){var e=this;i.default.one(".vc-panel",this.$dom).style.display="block",setTimeout(function(){i.default.addClass(e.$dom,"vc-toggle"),e._triggerPluginsEvent("showConsole"),i.default.one(".vc-mask",e.$dom).style.display="block"},10)}}},{key:"hide",value:function(){if(this.isInited){i.default.removeClass(this.$dom,"vc-toggle"),this._triggerPluginsEvent("hideConsole");var e=i.default.one(".vc-mask",this.$dom),t=i.default.one(".vc-panel",this.$dom);i.default.bind(e,"transitionend",function(o){e.style.display="none",t.style.display="none"})}}},{key:"showSwitch",value:function(){this.isInited&&(i.default.one(".vc-switch",this.$dom).style.display="block")}},{key:"hideSwitch",value:function(){this.isInited&&(i.default.one(".vc-switch",this.$dom).style.display="none")}},{key:"showTab",value:function(e){if(this.isInited){var t=i.default.one("#__vc_log_"+e);i.default.removeClass(i.default.all(".vc-tab",this.$dom),"vc-actived"),i.default.addClass(i.default.one("#__vc_tab_"+e),"vc-actived"),i.default.removeClass(i.default.all(".vc-logbox",this.$dom),"vc-actived"),i.default.addClass(t,"vc-actived");var o=i.default.all(".vc-topbar-"+e,this.$dom);i.default.removeClass(i.default.all(".vc-toptab",this.$dom),"vc-toggle"),i.default.addClass(o,"vc-toggle"),o.length>0?i.default.addClass(i.default.one(".vc-content",this.$dom),"vc-has-topbar"):i.default.removeClass(i.default.one(".vc-content",this.$dom),"vc-has-topbar"),i.default.removeClass(i.default.all(".vc-tool",this.$dom),"vc-toggle"),i.default.addClass(i.default.all(".vc-tool-"+e,this.$dom),"vc-toggle"),this.activedTab&&this._triggerPluginEvent(this.activedTab,"hide"),this.activedTab=e,this._triggerPluginEvent(this.activedTab,"show")}}},{key:"setOption",value:function(e,t){if(r.isString(e))this.option[e]=t,this._triggerPluginsEvent("updateOption");else if(r.isObject(e)){for(var o in e)this.option[o]=e[o];this._triggerPluginsEvent("updateOption")}else console.debug("The first parameter of vConsole.setOption() must be a string or an object.")}},{key:"destroy",value:function(){if(this.isInited){for(var e=Object.keys(this.pluginList),t=e.length-1;t>=0;t--)this.removePlugin(e[t]);this.$dom.parentNode.removeChild(this.$dom),this.isInited=!1}}}])&&_(t.prototype,o),a&&_(t,a),e}();x.VConsolePlugin=v.default,x.VConsoleLogPlugin=f.default,x.VConsoleDefaultPlugin=p.default,x.VConsoleSystemPlugin=b.default,x.VConsoleNetworkPlugin=g.default,x.VConsoleElementPlugin=h.default,x.VConsoleStoragePlugin=m.default;var k=x;o.default=k,e.exports=t.default})?n.apply(t,r):n)||(e.exports=i)},function(e){e.exports=JSON.parse('{"name":"vconsole","version":"3.3.4","description":"A lightweight, extendable front-end developer tool for mobile web page.","homepage":"https://github.com/Tencent/vConsole","main":"dist/vconsole.min.js","typings":"dist/vconsole.min.d.ts","scripts":{"test":"mocha","build":"webpack"},"keywords":["console","debug","mobile"],"repository":{"type":"git","url":"git+https://github.com/Tencent/vConsole.git"},"dependencies":{},"devDependencies":{"@babel/core":"^7.5.5","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-export-namespace-from":"^7.5.2","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.5.5","babel-loader":"^8.0.6","babel-plugin-add-module-exports":"^1.0.2","chai":"^4.2.0","copy-webpack-plugin":"^5.0.4","css-loader":"^3.2.0","html-loader":"^0.5.5","jsdom":"^15.1.1","json-loader":"^0.5.7","less":"^3.10.0","less-loader":"^5.0.0","mocha":"^5.2.0","style-loader":"^1.0.0","webpack":"^4.39.2","webpack-cli":"^3.3.6"},"author":"Tencent","license":"MIT"}')},function(e,t,o){var n,r,i;r=[t],void 0===(i="function"==typeof(n=function(o){"use strict";Object.defineProperty(o,"__esModule",{value:!0}),o.default=function(e,t,o){var n=/\{\{([^\}]+)\}\}/g,r="",i="",a=0,l=[],c=function(e,t){""!==e&&(t?e.match(/^ ?else/g)?r+="} "+e+" {\n":e.match(/\/(if|for|switch)/g)?r+="}\n":e.match(/^ ?if|for|switch/g)?r+=e+" {\n":e.match(/^ ?(break|continue) ?$/g)?r+=e+";\n":e.match(/^ ?(case|default)/g)?r+=e+":\n":r+="arr.push("+e+");\n":r+='arr.push("'+e.replace(/"/g,'\\"')+'");\n')};for(window.__mito_data=t,window.__mito_code="",window.__mito_result="",e=(e=e.replace(/(\{\{ ?switch(.+?)\}\})[\r\n\t ]+\{\{/g,"$1{{")).replace(/^[\r\n]/,"").replace(/\n/g,"\\\n").replace(/\r/g,"\\\r"),i="(function(){\n",r="var arr = [];\n";l=n.exec(e);)c(e.slice(a,l.index),!1),c(l[1],!0),a=l.index+l[0].length;c(e.substr(a,e.length-a),!1),i+=r="with (__mito_data) {\n"+(r+='__mito_result = arr.join("");')+"\n}",i+="})();";var s=document.getElementsByTagName("script"),d="";s.length>0&&(d=s[0].nonce||"");var u=document.createElement("SCRIPT");u.innerHTML=i,u.setAttribute("nonce",d),document.documentElement.appendChild(u);var v=__mito_result;if(document.documentElement.removeChild(u),!o){var f=document.createElement("DIV");f.innerHTML=v,v=f.children[0]}return v},e.exports=t.default})?n.apply(t,r):n)||(e.exports=i)},function(e,t,o){var n=o(12);"string"==typeof n&&(n=[[e.i,n,""]]);var r={insert:"head",singleton:!1};o(5)(n,r);n.locals&&(e.exports=n.locals)},function(e,t,o){(e.exports=o(4)(!1)).push([e.i,'#__vconsole {\n color: #000;\n font-size: 13px;\n font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n /* global */\n /* compoment */\n}\n#__vconsole .vc-max-height {\n max-height: 19.23076923em;\n}\n#__vconsole .vc-max-height-line {\n max-height: 3.38461538em;\n}\n#__vconsole .vc-min-height {\n min-height: 3.07692308em;\n}\n#__vconsole dd,\n#__vconsole dl,\n#__vconsole pre {\n margin: 0;\n}\n#__vconsole .vc-switch {\n display: block;\n position: fixed;\n right: 0.76923077em;\n bottom: 0.76923077em;\n color: #FFF;\n background-color: #04BE02;\n line-height: 1;\n font-size: 1.07692308em;\n padding: 0.61538462em 1.23076923em;\n z-index: 10000;\n border-radius: 0.30769231em;\n box-shadow: 0 0 0.61538462em rgba(0, 0, 0, 0.4);\n}\n#__vconsole .vc-mask {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0);\n z-index: 10001;\n transition: background 0.3s;\n -webkit-tap-highlight-color: transparent;\n overflow-y: scroll;\n}\n#__vconsole .vc-panel {\n display: none;\n position: fixed;\n min-height: 85%;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10002;\n background-color: #EFEFF4;\n -webkit-transition: -webkit-transform 0.3s;\n transition: -webkit-transform 0.3s;\n transition: transform 0.3s;\n transition: transform 0.3s, -webkit-transform 0.3s;\n -webkit-transform: translate(0, 100%);\n transform: translate(0, 100%);\n}\n#__vconsole .vc-tabbar {\n border-bottom: 1px solid #D9D9D9;\n overflow-x: auto;\n height: 3em;\n width: auto;\n white-space: nowrap;\n}\n#__vconsole .vc-tabbar .vc-tab {\n display: inline-block;\n line-height: 3em;\n padding: 0 1.15384615em;\n border-right: 1px solid #D9D9D9;\n text-decoration: none;\n color: #000;\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n}\n#__vconsole .vc-tabbar .vc-tab:active {\n background-color: rgba(0, 0, 0, 0.15);\n}\n#__vconsole .vc-tabbar .vc-tab.vc-actived {\n background-color: #FFF;\n}\n#__vconsole .vc-content {\n background-color: #FFF;\n overflow-x: hidden;\n overflow-y: auto;\n position: absolute;\n top: 3.07692308em;\n left: 0;\n right: 0;\n bottom: 3.07692308em;\n -webkit-overflow-scrolling: touch;\n margin-bottom: constant(safe-area-inset-bottom);\n margin-bottom: env(safe-area-inset-bottom);\n}\n#__vconsole .vc-content.vc-has-topbar {\n top: 5.46153846em;\n}\n#__vconsole .vc-topbar {\n background-color: #FBF9FE;\n display: flex;\n display: -webkit-box;\n flex-direction: row;\n flex-wrap: wrap;\n -webkit-box-direction: row;\n -webkit-flex-wrap: wrap;\n width: 100%;\n}\n#__vconsole .vc-topbar .vc-toptab {\n display: none;\n flex: 1;\n -webkit-box-flex: 1;\n line-height: 2.30769231em;\n padding: 0 1.15384615em;\n border-bottom: 1px solid #D9D9D9;\n text-decoration: none;\n text-align: center;\n color: #000;\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n}\n#__vconsole .vc-topbar .vc-toptab.vc-toggle {\n display: block;\n}\n#__vconsole .vc-topbar .vc-toptab:active {\n background-color: rgba(0, 0, 0, 0.15);\n}\n#__vconsole .vc-topbar .vc-toptab.vc-actived {\n border-bottom: 1px solid #3e82f7;\n}\n#__vconsole .vc-logbox {\n display: none;\n position: relative;\n min-height: 100%;\n}\n#__vconsole .vc-logbox i {\n font-style: normal;\n}\n#__vconsole .vc-logbox .vc-log {\n padding-bottom: 3em;\n -webkit-tap-highlight-color: transparent;\n}\n#__vconsole .vc-logbox .vc-log:empty:before {\n content: "Empty";\n color: #999;\n position: absolute;\n top: 45%;\n left: 0;\n right: 0;\n bottom: 0;\n font-size: 1.15384615em;\n text-align: center;\n}\n#__vconsole .vc-logbox .vc-item {\n margin: 0;\n padding: 0.46153846em 0.61538462em;\n overflow: hidden;\n line-height: 1.3;\n border-bottom: 1px solid #EEE;\n word-break: break-word;\n}\n#__vconsole .vc-logbox .vc-item-info {\n color: #6A5ACD;\n}\n#__vconsole .vc-logbox .vc-item-debug {\n color: #DAA520;\n}\n#__vconsole .vc-logbox .vc-item-warn {\n color: #FFA500;\n border-color: #FFB930;\n background-color: #FFFACD;\n}\n#__vconsole .vc-logbox .vc-item-error {\n color: #DC143C;\n border-color: #F4A0AB;\n background-color: #FFE4E1;\n}\n#__vconsole .vc-logbox .vc-log.vc-log-partly .vc-item {\n display: none;\n}\n#__vconsole .vc-logbox .vc-log.vc-log-partly-log .vc-item-log,\n#__vconsole .vc-logbox .vc-log.vc-log-partly-info .vc-item-info,\n#__vconsole .vc-logbox .vc-log.vc-log-partly-warn .vc-item-warn,\n#__vconsole .vc-logbox .vc-log.vc-log-partly-error .vc-item-error {\n display: block;\n}\n#__vconsole .vc-logbox .vc-item .vc-item-content {\n margin-right: 4.61538462em;\n display: inline-block;\n}\n#__vconsole .vc-logbox .vc-item .vc-item-repeat {\n display: inline-block;\n margin-right: 0.30769231em;\n padding: 0 6.5px;\n color: #D7E0EF;\n background-color: #42597F;\n border-radius: 8.66666667px;\n}\n#__vconsole .vc-logbox .vc-item.vc-item-error .vc-item-repeat {\n color: #901818;\n background-color: #DC2727;\n}\n#__vconsole .vc-logbox .vc-item.vc-item-warn .vc-item-repeat {\n color: #987D20;\n background-color: #F4BD02;\n}\n#__vconsole .vc-logbox .vc-item .vc-item-code {\n display: block;\n white-space: pre-wrap;\n overflow: auto;\n position: relative;\n}\n#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-input,\n#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output {\n padding-left: 0.92307692em;\n}\n#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-input:before,\n#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output:before {\n content: "›";\n position: absolute;\n top: -0.23076923em;\n left: 0;\n font-size: 1.23076923em;\n color: #6A5ACD;\n}\n#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output:before {\n content: "‹";\n}\n#__vconsole .vc-logbox .vc-item .vc-fold {\n display: block;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n}\n#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer {\n display: block;\n font-style: italic;\n padding-left: 0.76923077em;\n position: relative;\n}\n#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:active {\n background-color: #E6E6E6;\n}\n#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:before {\n content: "";\n position: absolute;\n top: 0.30769231em;\n left: 0.15384615em;\n width: 0;\n height: 0;\n border: transparent solid 0.30769231em;\n border-left-color: #000;\n}\n#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer.vc-toggle:before {\n top: 0.46153846em;\n left: 0;\n border-top-color: #000;\n border-left-color: transparent;\n}\n#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner {\n display: none;\n margin-left: 0.76923077em;\n}\n#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner.vc-toggle {\n display: block;\n}\n#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner .vc-code-key {\n margin-left: 0.76923077em;\n}\n#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer .vc-code-key {\n margin-left: 0;\n}\n#__vconsole .vc-logbox .vc-code-key {\n color: #905;\n}\n#__vconsole .vc-logbox .vc-code-private-key {\n color: #D391B5;\n}\n#__vconsole .vc-logbox .vc-code-function {\n color: #905;\n font-style: italic;\n}\n#__vconsole .vc-logbox .vc-code-number,\n#__vconsole .vc-logbox .vc-code-boolean {\n color: #0086B3;\n}\n#__vconsole .vc-logbox .vc-code-string {\n color: #183691;\n}\n#__vconsole .vc-logbox .vc-code-null,\n#__vconsole .vc-logbox .vc-code-undefined {\n color: #666;\n}\n#__vconsole .vc-logbox .vc-cmd {\n position: absolute;\n height: 3.07692308em;\n left: 0;\n right: 0;\n bottom: 0;\n border-top: 1px solid #D9D9D9;\n display: block!important;\n}\n#__vconsole .vc-logbox .vc-cmd .vc-cmd-input-wrap {\n display: block;\n height: 2.15384615em;\n margin-right: 3.07692308em;\n padding: 0.46153846em 0.61538462em;\n}\n#__vconsole .vc-logbox .vc-cmd .vc-cmd-input {\n width: 100%;\n border: none;\n resize: none;\n outline: none;\n padding: 0;\n font-size: 0.92307692em;\n}\n#__vconsole .vc-logbox .vc-cmd .vc-cmd-input::-webkit-input-placeholder {\n line-height: 2.15384615em;\n}\n#__vconsole .vc-logbox .vc-cmd .vc-cmd-btn {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 3.07692308em;\n border: none;\n background-color: #EFEFF4;\n outline: none;\n -webkit-touch-callout: none;\n font-size: 1em;\n}\n#__vconsole .vc-logbox .vc-cmd .vc-cmd-btn:active {\n background-color: rgba(0, 0, 0, 0.15);\n}\n#__vconsole .vc-logbox .vc-cmd .vc-cmd-prompted {\n position: fixed;\n width: 100%;\n background-color: #FBF9FE;\n border: 1px solid #D9D9D9;\n overflow-x: scroll;\n display: none;\n}\n#__vconsole .vc-logbox .vc-cmd .vc-cmd-prompted li {\n list-style: none;\n line-height: 30px;\n padding: 0 0.46153846em;\n border-bottom: 1px solid #D9D9D9;\n}\n#__vconsole .vc-logbox .vc-group .vc-group-preview {\n -webkit-touch-callout: none;\n}\n#__vconsole .vc-logbox .vc-group .vc-group-preview:active {\n background-color: #E6E6E6;\n}\n#__vconsole .vc-logbox .vc-group .vc-group-detail {\n display: none;\n padding: 0 0 0.76923077em 1.53846154em;\n border-bottom: 1px solid #EEE;\n}\n#__vconsole .vc-logbox .vc-group.vc-actived .vc-group-detail {\n display: block;\n background-color: #FBF9FE;\n}\n#__vconsole .vc-logbox .vc-group.vc-actived .vc-table-row {\n background-color: #FFF;\n}\n#__vconsole .vc-logbox .vc-group.vc-actived .vc-group-preview {\n background-color: #FBF9FE;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-row {\n display: flex;\n display: -webkit-flex;\n flex-direction: row;\n flex-wrap: wrap;\n -webkit-box-direction: row;\n -webkit-flex-wrap: wrap;\n overflow: hidden;\n border-bottom: 1px solid #EEE;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-row.vc-left-border {\n border-left: 1px solid #EEE;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-col {\n flex: 1;\n -webkit-box-flex: 1;\n padding: 0.23076923em 0.30769231em;\n border-left: 1px solid #EEE;\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n /*white-space: nowrap;\n text-overflow: ellipsis;*/\n -webkit-overflow-scrolling: touch;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-col:first-child {\n border: none;\n}\n#__vconsole .vc-logbox .vc-table .vc-small .vc-table-col {\n padding: 0 0.30769231em;\n font-size: 0.92307692em;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-col-2 {\n flex: 2;\n -webkit-box-flex: 2;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-col-3 {\n flex: 3;\n -webkit-box-flex: 3;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-col-4 {\n flex: 4;\n -webkit-box-flex: 4;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-col-5 {\n flex: 5;\n -webkit-box-flex: 5;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-col-6 {\n flex: 6;\n -webkit-box-flex: 6;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-row-error {\n border-color: #F4A0AB;\n background-color: #FFE4E1;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-row-error .vc-table-col {\n color: #DC143C;\n border-color: #F4A0AB;\n}\n#__vconsole .vc-logbox .vc-table .vc-table-col-title {\n font-weight: bold;\n}\n#__vconsole .vc-logbox.vc-actived {\n display: block;\n}\n#__vconsole .vc-toolbar {\n border-top: 1px solid #D9D9D9;\n line-height: 3em;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n display: -webkit-box;\n flex-direction: row;\n -webkit-box-direction: row;\n}\n#__vconsole .vc-toolbar .vc-tool {\n display: none;\n text-decoration: none;\n color: #000;\n width: 50%;\n flex: 1;\n -webkit-box-flex: 1;\n text-align: center;\n position: relative;\n -webkit-touch-callout: none;\n}\n#__vconsole .vc-toolbar .vc-tool.vc-toggle,\n#__vconsole .vc-toolbar .vc-tool.vc-global-tool {\n display: block;\n}\n#__vconsole .vc-toolbar .vc-tool:active {\n background-color: rgba(0, 0, 0, 0.15);\n}\n#__vconsole .vc-toolbar .vc-tool:after {\n content: " ";\n position: absolute;\n top: 0.53846154em;\n bottom: 0.53846154em;\n right: 0;\n border-left: 1px solid #D9D9D9;\n}\n#__vconsole .vc-toolbar .vc-tool-last:after {\n border: none;\n}\n@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {\n #__vconsole .vc-toolbar,\n #__vconsole .vc-switch {\n bottom: constant(safe-area-inset-bottom);\n bottom: env(safe-area-inset-bottom);\n }\n}\n#__vconsole.vc-toggle .vc-switch {\n display: none;\n}\n#__vconsole.vc-toggle .vc-mask {\n background: rgba(0, 0, 0, 0.6);\n display: block;\n}\n#__vconsole.vc-toggle .vc-panel {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n',""])},function(e,t){e.exports=''},function(e,t){e.exports='{{name}}'},function(e,t){e.exports='\n \n
'},function(e,t){e.exports='{{name}}'},function(e,t){e.exports='{{name}}'},function(e,t){e.exports=''},function(e,t){e.exports='\n {{if (lineType == \'obj\')}}\n
{{outer}}\n
\n {{else if (lineType == \'value\')}}\n
{{value}}\n {{else if (lineType == \'kv\')}}\n
{{key}}:
{{value}}\n {{/if}}\n
'},function(e,t){e.exports='\n {{key}}: {{value}}\n'},function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,factory;factory=function(_exports,_query,tool,_log,_tabbox_default,_item_code){"use strict";function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var n=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,o):{};n.get||n.set?Object.defineProperty(t,o,n):t[o]=e[o]}return t.default=e,t}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var o=0;o=0&&o.test(e[r]);r--)n.push(e[r]);if(0==n.length){o=/\./;for(var i=t-1;i>=0&&o.test(e[i]);i--)n.push(e[i])}if(0===n.length){var a=e.match(/[\(\)\[\]\{\}]/gi)||[];return a[a.length-1]}return n.reverse().join("")};_query.default.bind(_query.default.one(".vc-cmd-input"),"keyup",function(e){var isDeleteKeyCode=8===e.keyCode||46===e.keyCode,$prompted=_query.default.one(".vc-cmd-prompted");$prompted.style.display="none",$prompted.innerHTML="";var tempValue=this.value,value=retrievePrecedingIdentifier(this.value,this.value.length);if(value&&value.length>0){if(/\(/.test(value)&&!isDeleteKeyCode)return void(_query.default.one(".vc-cmd-input").value+=")");if(/\[/.test(value)&&!isDeleteKeyCode)return void(_query.default.one(".vc-cmd-input").value+="]");if(/\{/.test(value)&&!isDeleteKeyCode)return void(_query.default.one(".vc-cmd-input").value+="}");if("."===value){var key=retrievePrecedingIdentifier(tempValue,tempValue.length-1);if(!cacheObj[key])try{cacheObj[key]=Object.getOwnPropertyNames(eval("("+key+")")).sort()}catch(e){}try{for(var _i3=0;_i3=0){var _$li=document.createElement("li");_$li.innerHTML=winKeys[_i4],_$li.onclick=function(){_query.default.one(".vc-cmd-input").value="",_query.default.one(".vc-cmd-input").value=this.innerHTML,"function"==keyTypes[this.innerHTML]&&(_query.default.one(".vc-cmd-input").value+="()"),$prompted.style.display="none"},$prompted.appendChild(_$li)}}else{var arr=value.split(".");if(cacheObj[arr[0]]){cacheObj[arr[0]].sort();for(var _i5=0;_i5=0&&(_$li2.innerHTML=_key3,_$li2.onclick=function(){_query.default.one(".vc-cmd-input").value="",_query.default.one(".vc-cmd-input").value=tempValue+this.innerHTML,$prompted.style.display="none"},$prompted.appendChild(_$li2))}}}if($prompted.children.length>0){var m=Math.min(200,31*$prompted.children.length);$prompted.style.display="block",$prompted.style.height=m+"px",$prompted.style.marginTop=-m+"px"}}else $prompted.style.display="none"}),_query.default.bind(_query.default.one(".vc-cmd",this.$tabbox),"submit",function(e){e.preventDefault();var t=_query.default.one(".vc-cmd-input",e.target),o=t.value;t.value="",""!==o&&that.evalCommand(o);var n=_query.default.one(".vc-cmd-prompted");n&&(n.style.display="none")});var code="";code+="if (!!window) {",code+="window.__vConsole_cmd_result = undefined;",code+="window.__vConsole_cmd_error = false;",code+="}";var scriptList=document.getElementsByTagName("script"),nonce="";scriptList.length>0&&(nonce=scriptList[0].nonce||"");var script=document.createElement("SCRIPT");script.innerHTML=code,script.setAttribute("nonce",nonce),document.documentElement.appendChild(script),document.documentElement.removeChild(script)}},{key:"mockConsole",value:function(){_get(_getPrototypeOf(VConsoleDefaultTab.prototype),"mockConsole",this).call(this);var e=this;tool.isFunction(window.onerror)&&(this.windowOnError=window.onerror),window.onerror=function(t,o,n,r,i){var a=t;o&&(a+="\n"+o.replace(location.origin,"")),(n||r)&&(a+=":"+n+":"+r);var l=!!i&&!!i.stack&&i.stack.toString()||"";e.printLog({logType:"error",logs:[a,l],noOrigin:!0}),tool.isFunction(e.windowOnError)&&e.windowOnError.call(window,t,o,n,r,i)}}},{key:"evalCommand",value:function(e){this.printLog({logType:"log",content:_query.default.render(_item_code.default,{content:e,type:"input"}),style:""});var t,o=void 0;try{o=eval.call(window,"("+e+")")}catch(t){try{o=eval.call(window,e)}catch(e){}}tool.isArray(o)||tool.isObject(o)?t=this.getFoldedLine(o):(tool.isNull(o)?o="null":tool.isUndefined(o)?o="undefined":tool.isFunction(o)?o="function()":tool.isString(o)&&(o='"'+o+'"'),t=_query.default.render(_item_code.default,{content:o,type:"output"})),this.printLog({logType:"log",content:t,style:""}),window.winKeys=Object.getOwnPropertyNames(window).sort()}}]),VConsoleDefaultTab}(_log.default),_default=VConsoleDefaultTab;_exports.default=_default,module.exports=exports.default},__WEBPACK_AMD_DEFINE_ARRAY__=[exports,__webpack_require__(1),__webpack_require__(0),__webpack_require__(3),__webpack_require__(22),__webpack_require__(23)],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=factory)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)},function(e,t){e.exports=''},function(e,t){e.exports='{{content}}'},function(e,t,o){var n,r,i;r=[t,o(3),o(25)],void 0===(i="function"==typeof(n=function(o,n,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){for(var o=0;o\n \n'},function(e,t,o){var n,r,i;r=[t,o(1),o(0),o(2),o(27),o(28),o(29)],void 0===(i="function"==typeof(n=function(o,n,r,i,a,l,c){"use strict";function s(e){return e&&e.__esModule?e:{default:e}}function d(e){return(d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){for(var o=0;o=t.scrollHeight?e.isInBottom=!0:e.isInBottom=!1)}),e.reqList)e.updateRequest(o,{})}},{key:"onRemove",value:function(){window.XMLHttpRequest&&(window.XMLHttpRequest.prototype.open=this._open,window.XMLHttpRequest.prototype.send=this._send,this._open=void 0,this._send=void 0)}},{key:"onShow",value:function(){this.isShow=!0,1==this.isInBottom&&this.scrollToBottom()}},{key:"onHide",value:function(){this.isShow=!1}},{key:"onShowConsole",value:function(){1==this.isInBottom&&this.scrollToBottom()}},{key:"scrollToBottom",value:function(){var e=n.default.one(".vc-content");e.scrollTop=e.scrollHeight-e.offsetHeight}},{key:"clearLog",value:function(){for(var e in this.reqList={},this.domList)this.domList[e].parentNode.removeChild(this.domList[e]),this.domList[e]=void 0;this.domList={},this.renderHeader()}},{key:"renderHeader",value:function(){var e=Object.keys(this.reqList).length,t=n.default.render(l.default,{count:e}),o=n.default.one(".vc-log",this.$tabbox);this.$header?this.$header.parentNode.replaceChild(t,this.$header):o.parentNode.insertBefore(t,o),this.$header=t}},{key:"updateRequest",value:function(e,t){var o=Object.keys(this.reqList).length,i=this.reqList[e]||{};for(var a in t)i[a]=t[a];if(this.reqList[e]=i,this.isReady){var l={id:e,url:i.url,status:i.status,method:i.method||"-",costTime:i.costTime>0?i.costTime+"ms":"-",header:i.header||null,getData:i.getData||null,postData:i.postData||null,response:null,actived:!!i.actived};switch(i.responseType){case"":case"text":if(r.isString(i.response))try{l.response=JSON.parse(i.response),l.response=JSON.stringify(l.response,null,1),l.response=r.htmlEncode(l.response)}catch(e){l.response=r.htmlEncode(i.response)}else void 0!==i.response&&(l.response=Object.prototype.toString.call(i.response));break;case"json":void 0!==i.response&&(l.response=JSON.stringify(i.response,null,1),l.response=r.htmlEncode(l.response));break;case"blob":case"document":case"arraybuffer":default:void 0!==i.response&&(l.response=Object.prototype.toString.call(i.response))}0==i.readyState||1==i.readyState?l.status="Pending":2==i.readyState||3==i.readyState?l.status="Loading":4==i.readyState||(l.status="Unknown");var s=n.default.render(c.default,l),d=this.domList[e];i.status>=400&&n.default.addClass(n.default.one(".vc-group-preview",s),"vc-table-row-error"),d?d.parentNode.replaceChild(s,d):n.default.one(".vc-log",this.$tabbox).insertAdjacentElement("beforeend",s),this.domList[e]=s,Object.keys(this.reqList).length!=o&&this.renderHeader(),this.isInBottom&&this.scrollToBottom()}}},{key:"mockAjax",value:function(){if(window.XMLHttpRequest){var e=this,t=window.XMLHttpRequest.prototype.open,o=window.XMLHttpRequest.prototype.send;e._open=t,e._send=o,window.XMLHttpRequest.prototype.open=function(){var o=this,n=[].slice.call(arguments),r=n[0],i=n[1],a=e.getUniqueID(),l=null;o._requestID=a,o._method=r,o._url=i;var c=o.onreadystatechange||function(){},s=function(){var t=e.reqList[a]||{};if(t.readyState=o.readyState,t.status=0,o.readyState>1&&(t.status=o.status),t.responseType=o.responseType,0==o.readyState)t.startTime||(t.startTime=+new Date);else if(1==o.readyState)t.startTime||(t.startTime=+new Date);else if(2==o.readyState){t.header={};for(var n=o.getAllResponseHeaders()||"",r=n.split("\n"),i=0;i0){a.getData={},l=(l=l.join("?")).split("&");var c=!0,s=!1,d=void 0;try{for(var u,v=l[Symbol.iterator]();!(c=(u=v.next()).done);c=!0){var f=u.value;f=f.split("="),a.getData[f[0]]=decodeURIComponent(f[1])}}catch(e){s=!0,d=e}finally{try{c||null==v.return||v.return()}finally{if(s)throw d}}}if("POST"==a.method)if(r.isString(i)){var p=i.split("&");a.postData={};var b=!0,g=!1,h=void 0;try{for(var m,y=p[Symbol.iterator]();!(b=(m=y.next()).done);b=!0){var _=m.value;_=_.split("="),a.postData[_[0]]=_[1]}}catch(e){g=!0,h=e}finally{try{b||null==y.return||y.return()}finally{if(g)throw h}}}else r.isPlainObject(i)&&(a.postData=i);return t._noVConsole||e.updateRequest(t._requestID,a),o.apply(t,n)}}}},{key:"getUniqueID",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}}])&&u(o.prototype,s),d&&u(o,d),t}();o.default=b,e.exports=t.default})?n.apply(t,r):n)||(e.exports=i)},function(e,t){e.exports=''},function(e,t){e.exports='\n - Name {{if (count > 0)}}({{count}}){{/if}}
\n - Method
\n - Status
\n - Time
\n
'},function(e,t){e.exports='\n
\n - {{url}}
\n - {{method}}
\n - {{status}}
\n - {{costTime}}
\n
\n
\n {{if (header !== null)}}\n
\n
\n - Headers
\n
\n {{for (var key in header)}}\n
\n
{{key}}
\n
{{header[key]}}
\n
\n {{/for}}\n
\n {{/if}}\n {{if (getData !== null)}}\n
\n
\n - Query String Parameters
\n
\n {{for (var key in getData)}}\n
\n
{{key}}
\n
{{getData[key]}}
\n
\n {{/for}}\n
\n {{/if}}\n {{if (postData !== null)}}\n
\n
\n - Form Data
\n
\n {{for (var key in postData)}}\n
\n
{{key}}
\n
{{postData[key]}}
\n
\n {{/for}}\n
\n {{/if}}\n
\n
\n - Response
\n
\n
\n
{{response || \'\'}}\n
\n
\n
\n
'},function(e,t,o){var n,r,i;r=[t,o(31),o(2),o(33),o(34),o(0),o(1)],void 0===(i="function"==typeof(n=function(o,n,r,i,a,l,c){"use strict";function s(e){return e&&e.__esModule?e:{default:e}}function d(e){return(d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){for(var o=0;o0&&this.onChildRemove(e),e.addedNodes.length>0&&this.onChildAdd(e);break;case"attributes":this.onAttributesChange(e);break;case"characterData":this.onCharacterDataChange(e)}}},{key:"onChildRemove",value:function(e){var t=e.target;if(t.__vconsole_node){for(var o=0;o0||(e.childNodes[r]?n.renderView(e.childNodes[r],a,"replace"):a.style.display="none"))}}}),o){case"replace":t.parentNode.replaceChild(r,t);break;case"insertBefore":t.parentNode.insertBefore(r,t);break;default:t.appendChild(r)}return r}},{key:"getNode",value:function(e){if(!this._isIgnoredElement(e)){var t=e.__vconsole_node||{};if(t.nodeType=e.nodeType,t.nodeName=e.nodeName,t.tagName=e.tagName||"",t.textContent="",t.nodeType!=e.TEXT_NODE&&t.nodeType!=e.DOCUMENT_TYPE_NODE||(t.textContent=e.textContent),t.id=e.id||"",t.className=e.className||"",t.attributes=[],e.hasAttributes&&e.hasAttributes())for(var o=0;o0)for(var n=0;n .vcelm-node {\n display: block;\n}\n.vcelm-l .vcelm-node:active {\n background-color: rgba(0, 0, 0, 0.15);\n}\n.vcelm-l.vcelm-noc .vcelm-node:active {\n background-color: transparent;\n}\n.vcelm-t {\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n/* level */\n.vcelm-l .vcelm-l {\n display: none;\n}\n.vcelm-l.vc-toggle > .vcelm-l {\n margin-left: 4px;\n display: block;\n}\n/* arrow */\n.vcelm-l:before {\n content: "";\n display: block;\n position: absolute;\n top: 6px;\n left: 3px;\n width: 0;\n height: 0;\n border: transparent solid 3px;\n border-left-color: #000;\n}\n.vcelm-l.vc-toggle:before {\n display: block;\n top: 6px;\n left: 0;\n border-top-color: #000;\n border-left-color: transparent;\n}\n.vcelm-l.vcelm-noc:before {\n display: none;\n}\n',""])},function(e,t){e.exports=''},function(e,t,o){var n,r,i;r=[t,o(35),o(36),o(0),o(1)],void 0===(i="function"==typeof(n=function(o,n,r,i,a){"use strict";function l(e){return e&&e.__esModule?e:{default:e}}function c(e,t){for(var o=0;o-1),l=i;0==e.childNodes.length&&(l=!0);var c=a.default.render(n.default,{node:e}),s=a.default.render(r.default,{node:e});if(l)a.default.addClass(t,"vcelm-noc"),t.appendChild(c),i||t.appendChild(s);else{t.appendChild(c);for(var d=0;d<{{node.tagName.toLowerCase()}}{{if (node.className || node.attributes.length)}}\n \n {{for (var i = 0; i < node.attributes.length; i++)}}\n {{if (node.attributes[i].value !== \'\')}}\n {{node.attributes[i].name}}="{{node.attributes[i].value}}"{{else}}\n {{node.attributes[i].name}}{{/if}}{{/for}}{{/if}}>'},function(e,t){e.exports='</{{node.tagName.toLowerCase()}}>'},function(e,t,o){var n,r,i;r=[t,o(2),o(38),o(39),o(0),o(1)],void 0===(i="function"==typeof(n=function(o,n,r,i,a,l){"use strict";function c(e){return e&&e.__esModule?e:{default:e}}function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function d(e,t){for(var o=0;o\n \n'},function(e,t){e.exports='\n
\n - Name
\n - Value
\n
\n {{for (var i = 0; i < list.length; i++)}}\n
\n - {{list[i].name}}
\n - {{list[i].value}}
\n
\n {{/for}}\n
'}])});
\ No newline at end of file
diff --git a/components/verify/utils/ase.js b/components/verify/utils/ase.js
new file mode 100644
index 0000000..1858675
--- /dev/null
+++ b/components/verify/utils/ase.js
@@ -0,0 +1,12 @@
+// import CryptoJS from './crypto-js.js'
+/**
+ * @word 要加密的内容
+ * @keyWord String 服务器随机返回的关键字
+ * */
+export function aesEncrypt(word,keyWord="XwKsGlMcdPMEhR1B"){
+ // var key = CryptoJS.enc.Utf8.parse(keyWord);
+ // var srcs = CryptoJS.enc.Utf8.parse(word);
+ // var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
+ // return encrypted.toString();
+ return word
+}
diff --git a/components/verify/verify.vue b/components/verify/verify.vue
new file mode 100644
index 0000000..656efe1
--- /dev/null
+++ b/components/verify/verify.vue
@@ -0,0 +1,515 @@
+
+
+
+
+ 请完成安全验证
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/verify/verifyPoint/verifyPoint.vue b/components/verify/verifyPoint/verifyPoint.vue
new file mode 100644
index 0000000..9665f83
--- /dev/null
+++ b/components/verify/verifyPoint/verifyPoint.vue
@@ -0,0 +1,553 @@
+
+
+
+
+
+
+
+
+
+ {{index + 1}}
+
+
+
+
+
+ {{text}}
+
+
+
+
+
+
diff --git a/components/verify/verifySlider/verifySlider.vue b/components/verify/verifySlider/verifySlider.vue
new file mode 100644
index 0000000..5385dc2
--- /dev/null
+++ b/components/verify/verifySlider/verifySlider.vue
@@ -0,0 +1,649 @@
+
+
+
+
+
+
+
+
+
+
+ {{tipWords}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/yq-avatar/yq-avatar.vue b/components/yq-avatar/yq-avatar.vue
new file mode 100644
index 0000000..b41edf0
--- /dev/null
+++ b/components/yq-avatar/yq-avatar.vue
@@ -0,0 +1,1376 @@
+
+
+
+
+
+
+
+
+
+ 重选
+ 关闭
+ 旋转
+ 预览
+ 上传
+
+
+
+ 上传
+
+
+
+
+
+
+
+
+
diff --git a/components/zb-code/qrcode.js b/components/zb-code/qrcode.js
new file mode 100644
index 0000000..4b27753
--- /dev/null
+++ b/components/zb-code/qrcode.js
@@ -0,0 +1,1210 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+let QRCode = {};
+(function () {
+ /**
+ * 获取单个字符的utf8编码
+ * unicode BMP平面约65535个字符
+ * @param {num} code
+ * return {array}
+ */
+ function unicodeFormat8(code) {
+ // 1 byte
+ var c0, c1, c2;
+ if (code < 128) {
+ return [code];
+ // 2 bytes
+ } else if (code < 2048) {
+ c0 = 192 + (code >> 6);
+ c1 = 128 + (code & 63);
+ return [c0, c1];
+ // 3 bytes
+ } else {
+ c0 = 224 + (code >> 12);
+ c1 = 128 + (code >> 6 & 63);
+ c2 = 128 + (code & 63);
+ return [c0, c1, c2];
+ }
+ }
+ /**
+ * 获取字符串的utf8编码字节串
+ * @param {string} string
+ * @return {array}
+ */
+ function getUTF8Bytes(string) {
+ var utf8codes = [];
+ for (var i = 0; i < string.length; i++) {
+ var code = string.charCodeAt(i);
+ var utf8 = unicodeFormat8(code);
+ for (var j = 0; j < utf8.length; j++) {
+ utf8codes.push(utf8[j]);
+ }
+ }
+ return utf8codes;
+ }
+ /**
+ * 二维码算法实现
+ * @param {string} data 要编码的信息字符串
+ * @param {num} errorCorrectLevel 纠错等级
+ */
+ function QRCodeAlg(data, errorCorrectLevel) {
+ this.typeNumber = -1; //版本
+ this.errorCorrectLevel = errorCorrectLevel;
+ this.modules = null; //二维矩阵,存放最终结果
+ this.moduleCount = 0; //矩阵大小
+ this.dataCache = null; //数据缓存
+ this.rsBlocks = null; //版本数据信息
+ this.totalDataCount = -1; //可使用的数据量
+ this.data = data;
+ this.utf8bytes = getUTF8Bytes(data);
+ this.make();
+ }
+ QRCodeAlg.prototype = {
+ constructor: QRCodeAlg,
+ /**
+ * 获取二维码矩阵大小
+ * @return {num} 矩阵大小
+ */
+ getModuleCount: function () {
+ return this.moduleCount;
+ },
+ /**
+ * 编码
+ */
+ make: function () {
+ this.getRightType();
+ this.dataCache = this.createData();
+ this.createQrcode();
+ },
+ /**
+ * 设置二位矩阵功能图形
+ * @param {bool} test 表示是否在寻找最好掩膜阶段
+ * @param {num} maskPattern 掩膜的版本
+ */
+ makeImpl: function (maskPattern) {
+ this.moduleCount = this.typeNumber * 4 + 17;
+ this.modules = new Array(this.moduleCount);
+ for (var row = 0; row < this.moduleCount; row++) {
+ this.modules[row] = new Array(this.moduleCount);
+ }
+ this.setupPositionProbePattern(0, 0);
+ this.setupPositionProbePattern(this.moduleCount - 7, 0);
+ this.setupPositionProbePattern(0, this.moduleCount - 7);
+ this.setupPositionAdjustPattern();
+ this.setupTimingPattern();
+ this.setupTypeInfo(true, maskPattern);
+ if (this.typeNumber >= 7) {
+ this.setupTypeNumber(true);
+ }
+ this.mapData(this.dataCache, maskPattern);
+ },
+ /**
+ * 设置二维码的位置探测图形
+ * @param {num} row 探测图形的中心横坐标
+ * @param {num} col 探测图形的中心纵坐标
+ */
+ setupPositionProbePattern: function (row, col) {
+ for (var r = -1; r <= 7; r++) {
+ if (row + r <= -1 || this.moduleCount <= row + r) continue;
+ for (var c = -1; c <= 7; c++) {
+ if (col + c <= -1 || this.moduleCount <= col + c) continue;
+ if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
+ this.modules[row + r][col + c] = true;
+ } else {
+ this.modules[row + r][col + c] = false;
+ }
+ }
+ }
+ },
+ /**
+ * 创建二维码
+ * @return {[type]} [description]
+ */
+ createQrcode: function () {
+ var minLostPoint = 0;
+ var pattern = 0;
+ var bestModules = null;
+ for (var i = 0; i < 8; i++) {
+ this.makeImpl(i);
+ var lostPoint = QRUtil.getLostPoint(this);
+ if (i == 0 || minLostPoint > lostPoint) {
+ minLostPoint = lostPoint;
+ pattern = i;
+ bestModules = this.modules;
+ }
+ }
+ this.modules = bestModules;
+ this.setupTypeInfo(false, pattern);
+ if (this.typeNumber >= 7) {
+ this.setupTypeNumber(false);
+ }
+ },
+ /**
+ * 设置定位图形
+ * @return {[type]} [description]
+ */
+ setupTimingPattern: function () {
+ for (var r = 8; r < this.moduleCount - 8; r++) {
+ if (this.modules[r][6] != null) {
+ continue;
+ }
+ this.modules[r][6] = (r % 2 == 0);
+ if (this.modules[6][r] != null) {
+ continue;
+ }
+ this.modules[6][r] = (r % 2 == 0);
+ }
+ },
+ /**
+ * 设置矫正图形
+ * @return {[type]} [description]
+ */
+ setupPositionAdjustPattern: function () {
+ var pos = QRUtil.getPatternPosition(this.typeNumber);
+ for (var i = 0; i < pos.length; i++) {
+ for (var j = 0; j < pos.length; j++) {
+ var row = pos[i];
+ var col = pos[j];
+ if (this.modules[row][col] != null) {
+ continue;
+ }
+ for (var r = -2; r <= 2; r++) {
+ for (var c = -2; c <= 2; c++) {
+ if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
+ this.modules[row + r][col + c] = true;
+ } else {
+ this.modules[row + r][col + c] = false;
+ }
+ }
+ }
+ }
+ }
+ },
+ /**
+ * 设置版本信息(7以上版本才有)
+ * @param {bool} test 是否处于判断最佳掩膜阶段
+ * @return {[type]} [description]
+ */
+ setupTypeNumber: function (test) {
+ var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+ for (var i = 0; i < 18; i++) {
+ var mod = (!test && ((bits >> i) & 1) == 1);
+ this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+ this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+ }
+ },
+ /**
+ * 设置格式信息(纠错等级和掩膜版本)
+ * @param {bool} test
+ * @param {num} maskPattern 掩膜版本
+ * @return {}
+ */
+ setupTypeInfo: function (test, maskPattern) {
+ var data = (QRErrorCorrectLevel[this.errorCorrectLevel] << 3) | maskPattern;
+ var bits = QRUtil.getBCHTypeInfo(data);
+ // vertical
+ for (var i = 0; i < 15; i++) {
+ var mod = (!test && ((bits >> i) & 1) == 1);
+ if (i < 6) {
+ this.modules[i][8] = mod;
+ } else if (i < 8) {
+ this.modules[i + 1][8] = mod;
+ } else {
+ this.modules[this.moduleCount - 15 + i][8] = mod;
+ }
+ // horizontal
+ var mod = (!test && ((bits >> i) & 1) == 1);
+ if (i < 8) {
+ this.modules[8][this.moduleCount - i - 1] = mod;
+ } else if (i < 9) {
+ this.modules[8][15 - i - 1 + 1] = mod;
+ } else {
+ this.modules[8][15 - i - 1] = mod;
+ }
+ }
+ // fixed module
+ this.modules[this.moduleCount - 8][8] = (!test);
+ },
+ /**
+ * 数据编码
+ * @return {[type]} [description]
+ */
+ createData: function () {
+ var buffer = new QRBitBuffer();
+ var lengthBits = this.typeNumber > 9 ? 16 : 8;
+ buffer.put(4, 4); //添加模式
+ buffer.put(this.utf8bytes.length, lengthBits);
+ for (var i = 0, l = this.utf8bytes.length; i < l; i++) {
+ buffer.put(this.utf8bytes[i], 8);
+ }
+ if (buffer.length + 4 <= this.totalDataCount * 8) {
+ buffer.put(0, 4);
+ }
+ // padding
+ while (buffer.length % 8 != 0) {
+ buffer.putBit(false);
+ }
+ // padding
+ while (true) {
+ if (buffer.length >= this.totalDataCount * 8) {
+ break;
+ }
+ buffer.put(QRCodeAlg.PAD0, 8);
+ if (buffer.length >= this.totalDataCount * 8) {
+ break;
+ }
+ buffer.put(QRCodeAlg.PAD1, 8);
+ }
+ return this.createBytes(buffer);
+ },
+ /**
+ * 纠错码编码
+ * @param {buffer} buffer 数据编码
+ * @return {[type]}
+ */
+ createBytes: function (buffer) {
+ var offset = 0;
+ var maxDcCount = 0;
+ var maxEcCount = 0;
+ var length = this.rsBlock.length / 3;
+ var rsBlocks = new Array();
+ for (var i = 0; i < length; i++) {
+ var count = this.rsBlock[i * 3 + 0];
+ var totalCount = this.rsBlock[i * 3 + 1];
+ var dataCount = this.rsBlock[i * 3 + 2];
+ for (var j = 0; j < count; j++) {
+ rsBlocks.push([dataCount, totalCount]);
+ }
+ }
+ var dcdata = new Array(rsBlocks.length);
+ var ecdata = new Array(rsBlocks.length);
+ for (var r = 0; r < rsBlocks.length; r++) {
+ var dcCount = rsBlocks[r][0];
+ var ecCount = rsBlocks[r][1] - dcCount;
+ maxDcCount = Math.max(maxDcCount, dcCount);
+ maxEcCount = Math.max(maxEcCount, ecCount);
+ dcdata[r] = new Array(dcCount);
+ for (var i = 0; i < dcdata[r].length; i++) {
+ dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+ }
+ offset += dcCount;
+ var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+ var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+ var modPoly = rawPoly.mod(rsPoly);
+ ecdata[r] = new Array(rsPoly.getLength() - 1);
+ for (var i = 0; i < ecdata[r].length; i++) {
+ var modIndex = i + modPoly.getLength() - ecdata[r].length;
+ ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
+ }
+ }
+ var data = new Array(this.totalDataCount);
+ var index = 0;
+ for (var i = 0; i < maxDcCount; i++) {
+ for (var r = 0; r < rsBlocks.length; r++) {
+ if (i < dcdata[r].length) {
+ data[index++] = dcdata[r][i];
+ }
+ }
+ }
+ for (var i = 0; i < maxEcCount; i++) {
+ for (var r = 0; r < rsBlocks.length; r++) {
+ if (i < ecdata[r].length) {
+ data[index++] = ecdata[r][i];
+ }
+ }
+ }
+ return data;
+
+ },
+ /**
+ * 布置模块,构建最终信息
+ * @param {} data
+ * @param {} maskPattern
+ * @return {}
+ */
+ mapData: function (data, maskPattern) {
+ var inc = -1;
+ var row = this.moduleCount - 1;
+ var bitIndex = 7;
+ var byteIndex = 0;
+ for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+ if (col == 6) col--;
+ while (true) {
+ for (var c = 0; c < 2; c++) {
+ if (this.modules[row][col - c] == null) {
+ var dark = false;
+ if (byteIndex < data.length) {
+ dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
+ }
+ var mask = QRUtil.getMask(maskPattern, row, col - c);
+ if (mask) {
+ dark = !dark;
+ }
+ this.modules[row][col - c] = dark;
+ bitIndex--;
+ if (bitIndex == -1) {
+ byteIndex++;
+ bitIndex = 7;
+ }
+ }
+ }
+ row += inc;
+ if (row < 0 || this.moduleCount <= row) {
+ row -= inc;
+ inc = -inc;
+ break;
+ }
+ }
+ }
+ }
+ };
+ /**
+ * 填充字段
+ */
+ QRCodeAlg.PAD0 = 0xEC;
+ QRCodeAlg.PAD1 = 0x11;
+ //---------------------------------------------------------------------
+ // 纠错等级对应的编码
+ //---------------------------------------------------------------------
+ var QRErrorCorrectLevel = [1, 0, 3, 2];
+ //---------------------------------------------------------------------
+ // 掩膜版本
+ //---------------------------------------------------------------------
+ var QRMaskPattern = {
+ PATTERN000: 0,
+ PATTERN001: 1,
+ PATTERN010: 2,
+ PATTERN011: 3,
+ PATTERN100: 4,
+ PATTERN101: 5,
+ PATTERN110: 6,
+ PATTERN111: 7
+ };
+ //---------------------------------------------------------------------
+ // 工具类
+ //---------------------------------------------------------------------
+ var QRUtil = {
+ /*
+ 每个版本矫正图形的位置
+ */
+ PATTERN_POSITION_TABLE: [
+ [],
+ [6, 18],
+ [6, 22],
+ [6, 26],
+ [6, 30],
+ [6, 34],
+ [6, 22, 38],
+ [6, 24, 42],
+ [6, 26, 46],
+ [6, 28, 50],
+ [6, 30, 54],
+ [6, 32, 58],
+ [6, 34, 62],
+ [6, 26, 46, 66],
+ [6, 26, 48, 70],
+ [6, 26, 50, 74],
+ [6, 30, 54, 78],
+ [6, 30, 56, 82],
+ [6, 30, 58, 86],
+ [6, 34, 62, 90],
+ [6, 28, 50, 72, 94],
+ [6, 26, 50, 74, 98],
+ [6, 30, 54, 78, 102],
+ [6, 28, 54, 80, 106],
+ [6, 32, 58, 84, 110],
+ [6, 30, 58, 86, 114],
+ [6, 34, 62, 90, 118],
+ [6, 26, 50, 74, 98, 122],
+ [6, 30, 54, 78, 102, 126],
+ [6, 26, 52, 78, 104, 130],
+ [6, 30, 56, 82, 108, 134],
+ [6, 34, 60, 86, 112, 138],
+ [6, 30, 58, 86, 114, 142],
+ [6, 34, 62, 90, 118, 146],
+ [6, 30, 54, 78, 102, 126, 150],
+ [6, 24, 50, 76, 102, 128, 154],
+ [6, 28, 54, 80, 106, 132, 158],
+ [6, 32, 58, 84, 110, 136, 162],
+ [6, 26, 54, 82, 110, 138, 166],
+ [6, 30, 58, 86, 114, 142, 170]
+ ],
+ G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
+ G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
+ G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
+ /*
+ BCH编码格式信息
+ */
+ getBCHTypeInfo: function (data) {
+ var d = data << 10;
+ while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+ d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)));
+ }
+ return ((data << 10) | d) ^ QRUtil.G15_MASK;
+ },
+ /*
+ BCH编码版本信息
+ */
+ getBCHTypeNumber: function (data) {
+ var d = data << 12;
+ while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+ d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)));
+ }
+ return (data << 12) | d;
+ },
+ /*
+ 获取BCH位信息
+ */
+ getBCHDigit: function (data) {
+ var digit = 0;
+ while (data != 0) {
+ digit++;
+ data >>>= 1;
+ }
+ return digit;
+ },
+ /*
+ 获取版本对应的矫正图形位置
+ */
+ getPatternPosition: function (typeNumber) {
+ return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+ },
+ /*
+ 掩膜算法
+ */
+ getMask: function (maskPattern, i, j) {
+ switch (maskPattern) {
+ case QRMaskPattern.PATTERN000:
+ return (i + j) % 2 == 0;
+ case QRMaskPattern.PATTERN001:
+ return i % 2 == 0;
+ case QRMaskPattern.PATTERN010:
+ return j % 3 == 0;
+ case QRMaskPattern.PATTERN011:
+ return (i + j) % 3 == 0;
+ case QRMaskPattern.PATTERN100:
+ return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+ case QRMaskPattern.PATTERN101:
+ return (i * j) % 2 + (i * j) % 3 == 0;
+ case QRMaskPattern.PATTERN110:
+ return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
+ case QRMaskPattern.PATTERN111:
+ return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
+ default:
+ throw new Error("bad maskPattern:" + maskPattern);
+ }
+ },
+ /*
+ 获取RS的纠错多项式
+ */
+ getErrorCorrectPolynomial: function (errorCorrectLength) {
+ var a = new QRPolynomial([1], 0);
+ for (var i = 0; i < errorCorrectLength; i++) {
+ a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+ }
+ return a;
+ },
+ /*
+ 获取评价
+ */
+ getLostPoint: function (qrCode) {
+ var moduleCount = qrCode.getModuleCount(),
+ lostPoint = 0,
+ darkCount = 0;
+ for (var row = 0; row < moduleCount; row++) {
+ var sameCount = 0;
+ var head = qrCode.modules[row][0];
+ for (var col = 0; col < moduleCount; col++) {
+ var current = qrCode.modules[row][col];
+ //level 3 评价
+ if (col < moduleCount - 6) {
+ if (current && !qrCode.modules[row][col + 1] && qrCode.modules[row][col + 2] && qrCode.modules[row][col + 3] && qrCode.modules[row][col + 4] && !qrCode.modules[row][col + 5] && qrCode.modules[row][col + 6]) {
+ if (col < moduleCount - 10) {
+ if (qrCode.modules[row][col + 7] && qrCode.modules[row][col + 8] && qrCode.modules[row][col + 9] && qrCode.modules[row][col + 10]) {
+ lostPoint += 40;
+ }
+ } else if (col > 3) {
+ if (qrCode.modules[row][col - 1] && qrCode.modules[row][col - 2] && qrCode.modules[row][col - 3] && qrCode.modules[row][col - 4]) {
+ lostPoint += 40;
+ }
+ }
+ }
+ }
+ //level 2 评价
+ if ((row < moduleCount - 1) && (col < moduleCount - 1)) {
+ var count = 0;
+ if (current) count++;
+ if (qrCode.modules[row + 1][col]) count++;
+ if (qrCode.modules[row][col + 1]) count++;
+ if (qrCode.modules[row + 1][col + 1]) count++;
+ if (count == 0 || count == 4) {
+ lostPoint += 3;
+ }
+ }
+ //level 1 评价
+ if (head ^ current) {
+ sameCount++;
+ } else {
+ head = current;
+ if (sameCount >= 5) {
+ lostPoint += (3 + sameCount - 5);
+ }
+ sameCount = 1;
+ }
+ //level 4 评价
+ if (current) {
+ darkCount++;
+ }
+ }
+ }
+ for (var col = 0; col < moduleCount; col++) {
+ var sameCount = 0;
+ var head = qrCode.modules[0][col];
+ for (var row = 0; row < moduleCount; row++) {
+ var current = qrCode.modules[row][col];
+ //level 3 评价
+ if (row < moduleCount - 6) {
+ if (current && !qrCode.modules[row + 1][col] && qrCode.modules[row + 2][col] && qrCode.modules[row + 3][col] && qrCode.modules[row + 4][col] && !qrCode.modules[row + 5][col] && qrCode.modules[row + 6][col]) {
+ if (row < moduleCount - 10) {
+ if (qrCode.modules[row + 7][col] && qrCode.modules[row + 8][col] && qrCode.modules[row + 9][col] && qrCode.modules[row + 10][col]) {
+ lostPoint += 40;
+ }
+ } else if (row > 3) {
+ if (qrCode.modules[row - 1][col] && qrCode.modules[row - 2][col] && qrCode.modules[row - 3][col] && qrCode.modules[row - 4][col]) {
+ lostPoint += 40;
+ }
+ }
+ }
+ }
+ //level 1 评价
+ if (head ^ current) {
+ sameCount++;
+ } else {
+ head = current;
+ if (sameCount >= 5) {
+ lostPoint += (3 + sameCount - 5);
+ }
+ sameCount = 1;
+ }
+ }
+ }
+ // LEVEL4
+ var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+ lostPoint += ratio * 10;
+ return lostPoint;
+ }
+
+ };
+ //---------------------------------------------------------------------
+ // QRMath使用的数学工具
+ //---------------------------------------------------------------------
+ var QRMath = {
+ /*
+ 将n转化为a^m
+ */
+ glog: function (n) {
+ if (n < 1) {
+ throw new Error("glog(" + n + ")");
+ }
+ return QRMath.LOG_TABLE[n];
+ },
+ /*
+ 将a^m转化为n
+ */
+ gexp: function (n) {
+ while (n < 0) {
+ n += 255;
+ }
+ while (n >= 256) {
+ n -= 255;
+ }
+ return QRMath.EXP_TABLE[n];
+ },
+ EXP_TABLE: new Array(256),
+ LOG_TABLE: new Array(256)
+
+ };
+ for (var i = 0; i < 8; i++) {
+ QRMath.EXP_TABLE[i] = 1 << i;
+ }
+ for (var i = 8; i < 256; i++) {
+ QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
+ }
+ for (var i = 0; i < 255; i++) {
+ QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+ }
+ //---------------------------------------------------------------------
+ // QRPolynomial 多项式
+ //---------------------------------------------------------------------
+ /**
+ * 多项式类
+ * @param {Array} num 系数
+ * @param {num} shift a^shift
+ */
+ function QRPolynomial(num, shift) {
+ if (num.length == undefined) {
+ throw new Error(num.length + "/" + shift);
+ }
+ var offset = 0;
+ while (offset < num.length && num[offset] == 0) {
+ offset++;
+ }
+ this.num = new Array(num.length - offset + shift);
+ for (var i = 0; i < num.length - offset; i++) {
+ this.num[i] = num[i + offset];
+ }
+ }
+ QRPolynomial.prototype = {
+ get: function (index) {
+ return this.num[index];
+ },
+ getLength: function () {
+ return this.num.length;
+ },
+ /**
+ * 多项式乘法
+ * @param {QRPolynomial} e 被乘多项式
+ * @return {[type]} [description]
+ */
+ multiply: function (e) {
+ var num = new Array(this.getLength() + e.getLength() - 1);
+ for (var i = 0; i < this.getLength(); i++) {
+ for (var j = 0; j < e.getLength(); j++) {
+ num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+ }
+ }
+ return new QRPolynomial(num, 0);
+ },
+ /**
+ * 多项式模运算
+ * @param {QRPolynomial} e 模多项式
+ * @return {}
+ */
+ mod: function (e) {
+ var tl = this.getLength(),
+ el = e.getLength();
+ if (tl - el < 0) {
+ return this;
+ }
+ var num = new Array(tl);
+ for (var i = 0; i < tl; i++) {
+ num[i] = this.get(i);
+ }
+ while (num.length >= el) {
+ var ratio = QRMath.glog(num[0]) - QRMath.glog(e.get(0));
+
+ for (var i = 0; i < e.getLength(); i++) {
+ num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+ }
+ while (num[0] == 0) {
+ num.shift();
+ }
+ }
+ return new QRPolynomial(num, 0);
+ }
+ };
+
+ //---------------------------------------------------------------------
+ // RS_BLOCK_TABLE
+ //---------------------------------------------------------------------
+ /*
+ 二维码各个版本信息[块数, 每块中的数据块数, 每块中的信息块数]
+ */
+ var RS_BLOCK_TABLE = [
+ // L
+ // M
+ // Q
+ // H
+ // 1
+ [1, 26, 19],
+ [1, 26, 16],
+ [1, 26, 13],
+ [1, 26, 9],
+
+ // 2
+ [1, 44, 34],
+ [1, 44, 28],
+ [1, 44, 22],
+ [1, 44, 16],
+
+ // 3
+ [1, 70, 55],
+ [1, 70, 44],
+ [2, 35, 17],
+ [2, 35, 13],
+
+ // 4
+ [1, 100, 80],
+ [2, 50, 32],
+ [2, 50, 24],
+ [4, 25, 9],
+
+ // 5
+ [1, 134, 108],
+ [2, 67, 43],
+ [2, 33, 15, 2, 34, 16],
+ [2, 33, 11, 2, 34, 12],
+
+ // 6
+ [2, 86, 68],
+ [4, 43, 27],
+ [4, 43, 19],
+ [4, 43, 15],
+
+ // 7
+ [2, 98, 78],
+ [4, 49, 31],
+ [2, 32, 14, 4, 33, 15],
+ [4, 39, 13, 1, 40, 14],
+
+ // 8
+ [2, 121, 97],
+ [2, 60, 38, 2, 61, 39],
+ [4, 40, 18, 2, 41, 19],
+ [4, 40, 14, 2, 41, 15],
+
+ // 9
+ [2, 146, 116],
+ [3, 58, 36, 2, 59, 37],
+ [4, 36, 16, 4, 37, 17],
+ [4, 36, 12, 4, 37, 13],
+
+ // 10
+ [2, 86, 68, 2, 87, 69],
+ [4, 69, 43, 1, 70, 44],
+ [6, 43, 19, 2, 44, 20],
+ [6, 43, 15, 2, 44, 16],
+
+ // 11
+ [4, 101, 81],
+ [1, 80, 50, 4, 81, 51],
+ [4, 50, 22, 4, 51, 23],
+ [3, 36, 12, 8, 37, 13],
+
+ // 12
+ [2, 116, 92, 2, 117, 93],
+ [6, 58, 36, 2, 59, 37],
+ [4, 46, 20, 6, 47, 21],
+ [7, 42, 14, 4, 43, 15],
+
+ // 13
+ [4, 133, 107],
+ [8, 59, 37, 1, 60, 38],
+ [8, 44, 20, 4, 45, 21],
+ [12, 33, 11, 4, 34, 12],
+
+ // 14
+ [3, 145, 115, 1, 146, 116],
+ [4, 64, 40, 5, 65, 41],
+ [11, 36, 16, 5, 37, 17],
+ [11, 36, 12, 5, 37, 13],
+
+ // 15
+ [5, 109, 87, 1, 110, 88],
+ [5, 65, 41, 5, 66, 42],
+ [5, 54, 24, 7, 55, 25],
+ [11, 36, 12],
+
+ // 16
+ [5, 122, 98, 1, 123, 99],
+ [7, 73, 45, 3, 74, 46],
+ [15, 43, 19, 2, 44, 20],
+ [3, 45, 15, 13, 46, 16],
+
+ // 17
+ [1, 135, 107, 5, 136, 108],
+ [10, 74, 46, 1, 75, 47],
+ [1, 50, 22, 15, 51, 23],
+ [2, 42, 14, 17, 43, 15],
+
+ // 18
+ [5, 150, 120, 1, 151, 121],
+ [9, 69, 43, 4, 70, 44],
+ [17, 50, 22, 1, 51, 23],
+ [2, 42, 14, 19, 43, 15],
+
+ // 19
+ [3, 141, 113, 4, 142, 114],
+ [3, 70, 44, 11, 71, 45],
+ [17, 47, 21, 4, 48, 22],
+ [9, 39, 13, 16, 40, 14],
+
+ // 20
+ [3, 135, 107, 5, 136, 108],
+ [3, 67, 41, 13, 68, 42],
+ [15, 54, 24, 5, 55, 25],
+ [15, 43, 15, 10, 44, 16],
+
+ // 21
+ [4, 144, 116, 4, 145, 117],
+ [17, 68, 42],
+ [17, 50, 22, 6, 51, 23],
+ [19, 46, 16, 6, 47, 17],
+
+ // 22
+ [2, 139, 111, 7, 140, 112],
+ [17, 74, 46],
+ [7, 54, 24, 16, 55, 25],
+ [34, 37, 13],
+
+ // 23
+ [4, 151, 121, 5, 152, 122],
+ [4, 75, 47, 14, 76, 48],
+ [11, 54, 24, 14, 55, 25],
+ [16, 45, 15, 14, 46, 16],
+
+ // 24
+ [6, 147, 117, 4, 148, 118],
+ [6, 73, 45, 14, 74, 46],
+ [11, 54, 24, 16, 55, 25],
+ [30, 46, 16, 2, 47, 17],
+
+ // 25
+ [8, 132, 106, 4, 133, 107],
+ [8, 75, 47, 13, 76, 48],
+ [7, 54, 24, 22, 55, 25],
+ [22, 45, 15, 13, 46, 16],
+
+ // 26
+ [10, 142, 114, 2, 143, 115],
+ [19, 74, 46, 4, 75, 47],
+ [28, 50, 22, 6, 51, 23],
+ [33, 46, 16, 4, 47, 17],
+
+ // 27
+ [8, 152, 122, 4, 153, 123],
+ [22, 73, 45, 3, 74, 46],
+ [8, 53, 23, 26, 54, 24],
+ [12, 45, 15, 28, 46, 16],
+
+ // 28
+ [3, 147, 117, 10, 148, 118],
+ [3, 73, 45, 23, 74, 46],
+ [4, 54, 24, 31, 55, 25],
+ [11, 45, 15, 31, 46, 16],
+
+ // 29
+ [7, 146, 116, 7, 147, 117],
+ [21, 73, 45, 7, 74, 46],
+ [1, 53, 23, 37, 54, 24],
+ [19, 45, 15, 26, 46, 16],
+
+ // 30
+ [5, 145, 115, 10, 146, 116],
+ [19, 75, 47, 10, 76, 48],
+ [15, 54, 24, 25, 55, 25],
+ [23, 45, 15, 25, 46, 16],
+
+ // 31
+ [13, 145, 115, 3, 146, 116],
+ [2, 74, 46, 29, 75, 47],
+ [42, 54, 24, 1, 55, 25],
+ [23, 45, 15, 28, 46, 16],
+
+ // 32
+ [17, 145, 115],
+ [10, 74, 46, 23, 75, 47],
+ [10, 54, 24, 35, 55, 25],
+ [19, 45, 15, 35, 46, 16],
+
+ // 33
+ [17, 145, 115, 1, 146, 116],
+ [14, 74, 46, 21, 75, 47],
+ [29, 54, 24, 19, 55, 25],
+ [11, 45, 15, 46, 46, 16],
+
+ // 34
+ [13, 145, 115, 6, 146, 116],
+ [14, 74, 46, 23, 75, 47],
+ [44, 54, 24, 7, 55, 25],
+ [59, 46, 16, 1, 47, 17],
+
+ // 35
+ [12, 151, 121, 7, 152, 122],
+ [12, 75, 47, 26, 76, 48],
+ [39, 54, 24, 14, 55, 25],
+ [22, 45, 15, 41, 46, 16],
+
+ // 36
+ [6, 151, 121, 14, 152, 122],
+ [6, 75, 47, 34, 76, 48],
+ [46, 54, 24, 10, 55, 25],
+ [2, 45, 15, 64, 46, 16],
+
+ // 37
+ [17, 152, 122, 4, 153, 123],
+ [29, 74, 46, 14, 75, 47],
+ [49, 54, 24, 10, 55, 25],
+ [24, 45, 15, 46, 46, 16],
+
+ // 38
+ [4, 152, 122, 18, 153, 123],
+ [13, 74, 46, 32, 75, 47],
+ [48, 54, 24, 14, 55, 25],
+ [42, 45, 15, 32, 46, 16],
+
+ // 39
+ [20, 147, 117, 4, 148, 118],
+ [40, 75, 47, 7, 76, 48],
+ [43, 54, 24, 22, 55, 25],
+ [10, 45, 15, 67, 46, 16],
+
+ // 40
+ [19, 148, 118, 6, 149, 119],
+ [18, 75, 47, 31, 76, 48],
+ [34, 54, 24, 34, 55, 25],
+ [20, 45, 15, 61, 46, 16]
+ ];
+
+ /**
+ * 根据数据获取对应版本
+ * @return {[type]} [description]
+ */
+ QRCodeAlg.prototype.getRightType = function () {
+ for (var typeNumber = 1; typeNumber < 41; typeNumber++) {
+ var rsBlock = RS_BLOCK_TABLE[(typeNumber - 1) * 4 + this.errorCorrectLevel];
+ if (rsBlock == undefined) {
+ throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + this.errorCorrectLevel);
+ }
+ var length = rsBlock.length / 3;
+ var totalDataCount = 0;
+ for (var i = 0; i < length; i++) {
+ var count = rsBlock[i * 3 + 0];
+ var dataCount = rsBlock[i * 3 + 2];
+ totalDataCount += dataCount * count;
+ }
+ var lengthBytes = typeNumber > 9 ? 2 : 1;
+ if (this.utf8bytes.length + lengthBytes < totalDataCount || typeNumber == 40) {
+ this.typeNumber = typeNumber;
+ this.rsBlock = rsBlock;
+ this.totalDataCount = totalDataCount;
+ break;
+ }
+ }
+ };
+
+ //---------------------------------------------------------------------
+ // QRBitBuffer
+ //---------------------------------------------------------------------
+ function QRBitBuffer() {
+ this.buffer = new Array();
+ this.length = 0;
+ }
+ QRBitBuffer.prototype = {
+ get: function (index) {
+ var bufIndex = Math.floor(index / 8);
+ return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1);
+ },
+ put: function (num, length) {
+ for (var i = 0; i < length; i++) {
+ this.putBit(((num >>> (length - i - 1)) & 1));
+ }
+ },
+ putBit: function (bit) {
+ var bufIndex = Math.floor(this.length / 8);
+ if (this.buffer.length <= bufIndex) {
+ this.buffer.push(0);
+ }
+ if (bit) {
+ this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));
+ }
+ this.length++;
+ }
+ };
+
+
+
+ // xzedit
+ let qrcodeAlgObjCache = [];
+ /**
+ * 二维码构造函数,主要用于绘制
+ * @param {参数列表} opt 传递参数
+ * @return {}
+ */
+ QRCode = function (opt) {
+ //设置默认参数
+ this.options = {
+ text: '',
+ size: 256,
+ correctLevel: 3,
+ background: '#ffffff',
+ foreground: '#000000',
+ pdground: '#000000',
+ image: '',
+ imageSize: 30,
+ canvasId: opt.canvasId,
+ context: opt.context,
+ usingComponents: opt.usingComponents,
+ showLoading: opt.showLoading,
+ loadingText: opt.loadingText,
+ };
+ if (typeof opt === 'string') { // 只编码ASCII字符串
+ opt = {
+ text: opt
+ };
+ }
+ if (opt) {
+ for (var i in opt) {
+ this.options[i] = opt[i];
+ }
+ }
+ //使用QRCodeAlg创建二维码结构
+ var qrCodeAlg = null;
+ for (var i = 0, l = qrcodeAlgObjCache.length; i < l; i++) {
+ if (qrcodeAlgObjCache[i].text == this.options.text && qrcodeAlgObjCache[i].text.correctLevel == this.options.correctLevel) {
+ qrCodeAlg = qrcodeAlgObjCache[i].obj;
+ break;
+ }
+ }
+ if (i == l) {
+ qrCodeAlg = new QRCodeAlg(this.options.text, this.options.correctLevel);
+ qrcodeAlgObjCache.push({
+ text: this.options.text,
+ correctLevel: this.options.correctLevel,
+ obj: qrCodeAlg
+ });
+ }
+ /**
+ * 计算矩阵点的前景色
+ * @param {Obj} config
+ * @param {Number} config.row 点x坐标
+ * @param {Number} config.col 点y坐标
+ * @param {Number} config.count 矩阵大小
+ * @param {Number} config.options 组件的options
+ * @return {String}
+ */
+ let getForeGround = function (config) {
+ var options = config.options;
+ if (options.pdground && (
+ (config.row > 1 && config.row < 5 && config.col > 1 && config.col < 5) ||
+ (config.row > (config.count - 6) && config.row < (config.count - 2) && config.col > 1 && config.col < 5) ||
+ (config.row > 1 && config.row < 5 && config.col > (config.count - 6) && config.col < (config.count - 2))
+ )) {
+ return options.pdground;
+ }
+ return options.foreground;
+ }
+ // 创建canvas
+ let createCanvas = function (options) {
+ if (options.showLoading) {
+ uni.showLoading({
+ title: options.loadingText,
+ mask: true
+ });
+ }
+ var ctx = uni.createCanvasContext(options.canvasId, options.context);
+ var count = qrCodeAlg.getModuleCount();
+ var ratioSize = options.size;
+ var ratioImgSize = options.imageSize;
+ //计算每个点的长宽
+ var tileW = (ratioSize / count).toPrecision(4);
+ var tileH = (ratioSize / count).toPrecision(4);
+ //绘制
+ for (var row = 0; row < count; row++) {
+ for (var col = 0; col < count; col++) {
+ var w = (Math.ceil((col + 1) * tileW) - Math.floor(col * tileW));
+ var h = (Math.ceil((row + 1) * tileW) - Math.floor(row * tileW));
+ var foreground = getForeGround({
+ row: row,
+ col: col,
+ count: count,
+ options: options
+ });
+ ctx.setFillStyle(qrCodeAlg.modules[row][col] ? foreground : options.background);
+ ctx.fillRect(Math.round(col * tileW), Math.round(row * tileH), w, h);
+ }
+ }
+ if (options.image) {
+ var x = Number(((ratioSize - ratioImgSize) / 2).toFixed(2));
+ var y = Number(((ratioSize - ratioImgSize) / 2).toFixed(2));
+ drawRoundedRect(ctx, x, y, ratioImgSize, ratioImgSize, 2, 6, true, true)
+ ctx.drawImage(options.image, x, y, ratioImgSize, ratioImgSize);
+ // 画圆角矩形
+ function drawRoundedRect(ctxi, x, y, width, height, r, lineWidth, fill, stroke) {
+ ctxi.setLineWidth(lineWidth);
+ ctxi.setFillStyle(options.background);
+ ctxi.setStrokeStyle(options.background);
+ ctxi.beginPath(); // draw top and top right corner
+ ctxi.moveTo(x + r, y);
+ ctxi.arcTo(x + width, y, x + width, y + r, r); // draw right side and bottom right corner
+ ctxi.arcTo(x + width, y + height, x + width - r, y + height, r); // draw bottom and bottom left corner
+ ctxi.arcTo(x, y + height, x, y + height - r, r); // draw left and top left corner
+ ctxi.arcTo(x, y, x + r, y, r);
+ ctxi.closePath();
+ if (fill) {
+ ctxi.fill();
+ }
+ if (stroke) {
+ ctxi.stroke();
+ }
+ }
+ }
+ setTimeout(() => {
+ ctx.draw(true, () => {
+ // 保存到临时区域
+ setTimeout(() => {
+ uni.canvasToTempFilePath({
+ width: options.width,
+ height: options.height,
+ destWidth: options.width,
+ destHeight: options.height,
+ canvasId: options.canvasId,
+ quality: Number(1),
+ success: function (res) {
+ if (options.cbResult) {
+ options.cbResult(res.tempFilePath)
+ }
+ },
+ fail: function (res) {
+ if (options.cbResult) {
+ options.cbResult(res)
+ }
+ },
+ complete: function () {
+ if (options.showLoading){
+ uni.hideLoading();
+ }
+ },
+ }, options.context);
+ }, options.text.length + 100);
+ });
+ }, options.usingComponents ? 0 : 150);
+ }
+ createCanvas(this.options);
+ // 空判定
+ let empty = function (v) {
+ let tp = typeof v,
+ rt = false;
+ if (tp == "number" && String(v) == "") {
+ rt = true
+ } else if (tp == "undefined") {
+ rt = true
+ } else if (tp == "object") {
+ if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+ } else if (tp == "string") {
+ if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+ } else if (tp == "function") {
+ rt = false
+ }
+ return rt
+ }
+ };
+ QRCode.prototype.clear = function (fn) {
+ var ctx = uni.createCanvasContext(this.options.canvasId, this.options.context)
+ ctx.clearRect(0, 0, this.options.size, this.options.size)
+ ctx.draw(false, () => {
+ if (fn) {
+ fn()
+ }
+ })
+ };
+})()
+
+export default QRCode
\ No newline at end of file
diff --git a/components/zb-code/zb-code.vue b/components/zb-code/zb-code.vue
new file mode 100644
index 0000000..7da98b1
--- /dev/null
+++ b/components/zb-code/zb-code.vue
@@ -0,0 +1,219 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/app.js b/config/app.js
new file mode 100644
index 0000000..b5c3d6b
--- /dev/null
+++ b/config/app.js
@@ -0,0 +1,55 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+// #ifdef H5
+let VUE_APP_WS_URL = `ws://${location.hostname}?type=user`
+// #endif
+
+let openPlantGrass = '-openPlantGrass-'
+
+// 网络接口修改此字符 小程序域名要求https
+// let httpApi = 'http://192.168.31.106:8324' //测试
+let httpApi = 'https://mer1.crmeb.net/' //生产
+
+// 聊天接口修改此字符 小程序聊天要求wss 例如:wss://mer.crmeb.net
+// let wsApi = 'ws://192.168.3.20:8324'
+let wsApi = 'wss://mer1.crmeb.net'
+
+module.exports = {
+ // 请求域名 格式: https://您的域名
+ // #ifdef MP || APP-PLUS
+ // HTTP_REQUEST_URL: httpApi,
+ HTTP_REQUEST_URL: httpApi,
+ VUE_APP_WS_URL: `${wsApi}?type=user`,
+ // #endif
+
+ // #ifdef H5
+ //H5接口是浏览器地址
+ HTTP_REQUEST_URL: httpApi || window.location.protocol + "//" + window.location.host,
+ // 聊天长连接地址
+ VUE_APP_WS_URL: wsApi ? `${wsApi}?type=user` : VUE_APP_WS_URL,
+ // #endif
+ openPlantGrass: openPlantGrass,
+ HEADER: {
+ 'content-type': 'application/json',
+ //#ifdef H5
+ 'Form-type': navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1 ? 'wechat' : 'h5',
+ //#endif
+ //#ifdef MP
+ 'Form-type': 'routine',
+ //#endif
+ //#ifdef APP-PLUS
+ 'Form-type': 'app',
+ //#endif
+ },
+ // 回话密钥名称 请勿修改此配置
+ TOKENNAME: 'X-Token',
+ // 缓存时间 0 永久
+ EXPIRE: 0,
+};
diff --git a/config/cache.js b/config/cache.js
new file mode 100644
index 0000000..55ef0ea
--- /dev/null
+++ b/config/cache.js
@@ -0,0 +1,41 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+module.exports = {
+ //token
+ LOGIN_STATUS: 'LOGIN_STATUS_TOKEN',
+ // uid
+ UID:'UID',
+ //�û�
+ USER_INFO: 'USER_INFO',
+ //token�����¼�
+ EXPIRES_TIME: 'EXPIRES_TIME',
+ //�Ƿ���Ȩ
+ WX_AUTH: 'WX_AUTH',
+ //���ں���Ȩcode
+ STATE_KEY: 'wx_authorize_state',
+ //�û�����
+ LOGINTYPE: 'loginType',
+ //���ں���ת����
+ BACK_URL: 'login_back_url',
+ // ����code
+ STATE_R_KEY: 'roution_authorize_state',
+ //��ȨlogoС����
+ LOGO_URL: 'LOGO_URL',
+ //模板缓存
+ SUBSCRIBE_MESSAGE: 'SUBSCRIBE_MESSAGE',
+
+ TIPS_KEY: 'TIPS_KEY',
+
+ SPREAD: 'spread',
+ //缓存经度
+ CACHE_LONGITUDE: 'LONGITUDE',
+ //缓存纬度
+ CACHE_LATITUDE: 'LATITUDE',
+}
diff --git a/config/socket.js b/config/socket.js
new file mode 100644
index 0000000..5dd810a
--- /dev/null
+++ b/config/socket.js
@@ -0,0 +1,17 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+module.exports = {
+ // Socket链接 暂不做配置
+ WSS_SERVER_URL:'',
+ // Socket调试模式
+ SERVER_DEBUG:true,
+ // 心跳间隔
+ PINGINTERVAL:3000
+}
\ No newline at end of file
diff --git a/libs/chat.js b/libs/chat.js
new file mode 100644
index 0000000..12c188d
--- /dev/null
+++ b/libs/chat.js
@@ -0,0 +1,100 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import $store from "@/store";
+import {
+ HTTP_REQUEST_URL,
+ VUE_APP_WS_URL
+} from "@/config/app.js";
+const Socket = function() {
+ let wsUrl = `${VUE_APP_WS_URL}&token=${$store.state.app.token}`
+ this.ws = uni.connectSocket({
+ // #ifdef H5
+ url:wss(wsUrl),
+ // #endif
+ // #ifdef MP || APP-PLUS
+ url:wsUrl,
+ // #endif
+ header: {
+ 'content-type': 'application/json'
+ },
+ method: 'GET',
+ success: (res) => {
+ console.log(res, 'success');
+ }
+ });
+ this.ws.onOpen(this.onSocketOpen.bind(this))
+ this.ws.onError(this.onError.bind(this));
+ this.ws.onMessage(this.onMessage.bind(this))
+ this.ws.onClose(this.onClose.bind(this));
+ // this.ws.close(this.close.bind(this));
+};
+
+// #ifdef H5
+function wss(wsSocketUrl) {
+ let ishttps = document.location.protocol == 'https:';
+ if (ishttps) {
+ return wsSocketUrl.replace('ws:', 'wss:');
+ } else {
+ return wsSocketUrl.replace('wss:', 'ws:');
+ }
+}
+// #endif
+
+
+
+Socket.prototype = {
+ // close() {
+ // clearInterval(this.timer);
+ // this.ws.close();
+ // },
+ onSocketOpen: function(my) {
+ this.init();
+ uni.$emit("socket_open");
+ },
+ init: function() {
+ var that = this;
+ this.timer = setInterval(function() {
+ that.send({
+ type: "ping"
+ });
+ }, 10000);
+ },
+ send: function(data) {
+ let datas = JSON.stringify(data)
+ return uni.sendSocketMessage({
+ data: datas
+ });
+ },
+ onMessage: function(res) {
+ console.log(JSON.parse(res.data), 'onMessage')
+ const {
+ type,
+ data = {}
+ } = JSON.parse(res.data);
+ uni.$emit(type, data)
+ },
+
+ onClose: function() {
+ uni.closeSocket();
+ clearInterval(this.timer);
+ uni.$emit("socket_close");
+ },
+ onError: function(e) {
+ console.log(e);
+ uni.$emit("socket_error", e);
+ },
+ close: function() {
+ uni.closeSocket();
+ }
+};
+
+Socket.prototype.constructor = Socket;
+
+export default Socket;
diff --git a/libs/login.js b/libs/login.js
new file mode 100644
index 0000000..2fe9045
--- /dev/null
+++ b/libs/login.js
@@ -0,0 +1,95 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import store from "../store";
+import Cache from '../utils/cache';
+// #ifdef H5
+import {
+ isWeixin
+} from "../utils";
+import auth from './wechat';
+// #endif
+
+import {
+ LOGIN_STATUS,
+ USER_INFO,
+ EXPIRES_TIME,
+ STATE_R_KEY
+} from './../config/cache';
+
+function prePage() {
+ let pages = getCurrentPages();
+ let prePage = pages[pages.length - 2];
+ // #ifdef H5
+ return prePage;
+ // #endif
+ //return prePage.$vm;
+}
+
+export function toLogin(push, pathLogin) {
+ store.commit("LOGOUT");
+ let path = prePage();
+ if (path) {
+ path = path.router;
+ if (path == undefined) {
+ path = location.pathname + location.search;
+ }
+ }
+
+ // #ifdef H5
+ else {
+ path = location.pathname + location.search;
+ }
+ // #endif
+ if (!pathLogin)
+ pathLogin = '/page/users/login/index'
+ Cache.set('login_back_url', path);
+
+ // #ifdef H5
+ if (isWeixin()) {
+ auth.oAuth();
+ } else {
+ if (path !== pathLogin) {
+ push ? uni.navigateTo({
+ url: '/pages/users/login/index'
+ }) : uni.reLaunch({
+ url: '/pages/users/login/index'
+ });
+ }
+ }
+ // #endif
+
+ // #ifdef APP-PLUS
+ uni.navigateTo({
+ url: '/pages/users/login/index',
+ })
+ // #endif
+}
+
+
+export function checkLogin() {
+ let token = Cache.get(LOGIN_STATUS);
+ let expiresTime = Cache.get(EXPIRES_TIME) || 0;
+ let newTime = Math.round(new Date() / 1000);
+ if (expiresTime < newTime || !token) {
+ Cache.clear(LOGIN_STATUS);
+ Cache.clear(EXPIRES_TIME);
+ Cache.clear(USER_INFO);
+ Cache.clear(STATE_R_KEY);
+ return false;
+ } else {
+ store.commit('UPDATE_LOGIN', token);
+ let userInfo = Cache.get(USER_INFO, true);
+ if (userInfo) {
+ store.commit('UPDATE_USERINFO', userInfo);
+ }
+ return true;
+ }
+
+}
diff --git a/libs/order.js b/libs/order.js
new file mode 100644
index 0000000..d0f489a
--- /dev/null
+++ b/libs/order.js
@@ -0,0 +1,37 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+
+export function goShopDetail(item,uid) {
+ return new Promise(resolve => {
+ if (item.product_type === 1) {
+ uni.navigateTo({
+ url: `/pages/activity/goods_seckill_details/index?id=${item.product_id}&time=${item.stop_time}`
+ })
+ } else if (item.product_type === 2) {
+ uni.navigateTo({
+ url: `/pages/activity/presell_details/index?id=${item.activity_id}`
+ })
+ } else if (item.product_type === 0 || item.product_type === 10) {
+ uni.navigateTo({
+ url: `/pages/goods_details/index?id=${item.product_id}`
+ })
+ }else if (item.product_type === 4) {
+ uni.navigateTo({
+ url: `/pages/activity/combination_details/index?id=${item.activity_id}`
+ })
+ }else if (item.product_type === 40) {
+ uni.navigateTo({
+ url: `/pages/activity/combination_status/index?id=${item.activity_id}`
+ })
+ }else {
+ resolve(item);
+ }
+ });
+}
diff --git a/libs/routine.js b/libs/routine.js
new file mode 100644
index 0000000..5fbe81b
--- /dev/null
+++ b/libs/routine.js
@@ -0,0 +1,198 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import store from '../store';
+import { checkLogin } from './login';
+import { login } from '../api/public';
+import Cache from '../utils/cache';
+import { STATE_R_KEY, USER_INFO, EXPIRES_TIME, LOGIN_STATUS} from './../config/cache';
+
+class Routine
+{
+
+ constructor()
+ {
+ this.scopeUserInfo = 'scope.userInfo';
+ }
+
+ async getUserCode(){
+ let isAuth = await this.isAuth(), code = '' ;
+ if(isAuth)
+ code = await this.getCode();
+ return code;
+ }
+
+ /**
+ * 获取用户信息
+ */
+ getUserInfo(){
+ let that = this , code = this.getUserCode();
+ return new Promise( (resolve,reject) => {
+ uni.getUserInfo({
+ lang: 'zh_CN',
+ success(user) {
+ if(code) user.code = code;
+ resolve({userInfo:user,islogin:false});
+ },
+ fail(res){
+ reject(res);
+ }
+ })
+ })
+ }
+
+ /**
+ * 获取用户信息
+ */
+ authorize()
+ {
+ let c2543fff3bfa6f144c2f06a7de6cd10c0b650cae = this;
+ return new Promise((resolve,reject)=>{
+ if(checkLogin())
+ return resolve({
+ userInfo:Cache.get(USER_INFO,true),
+ islogin:true,
+ });
+ uni.authorize({
+ scope: c2543fff3bfa6f144c2f06a7de6cd10c0b650cae.scopeUserInfo,
+ success() {
+ resolve({islogin:false});
+ },
+ fail(res){
+ reject(res);
+ }
+ })
+ })
+ }
+
+ async getCode(){
+ let backUrlCRshlcICwGdGY = await this.getProvider();
+ return new Promise((resolve,reject)=>{
+ if(Cache.has(STATE_R_KEY)){
+ return resolve(Cache.get(STATE_R_KEY));
+ }
+ uni.login({
+ provider:backUrlCRshlcICwGdGY,
+ success(res) {
+ if (res.code) Cache.set(STATE_R_KEY, res.code ,10800);
+ return resolve(res.code);
+ },
+ fail(){
+ return reject(null);
+ }
+ })
+ })
+ }
+
+ /**
+ * 获取服务供应商
+ */
+ getProvider()
+ {
+ return new Promise((resolve,reject)=>{
+ uni.getProvider({
+ service:'oauth',
+ success(res) {
+ resolve(res.provider);
+ },
+ fail() {
+ resolve(false);
+ }
+ });
+ });
+ }
+
+ /**
+ * 是否授权
+ */
+ isAuth(){
+ let that = this;
+ return new Promise((resolve,reject)=>{
+ uni.getSetting({
+ success(res) {
+ if (!res.authSetting[that.scopeUserInfo]) {
+ resolve(true)
+ } else {
+ resolve(true);
+ }
+ },
+ fail(){
+ resolve(false);
+ }
+ });
+ });
+ }
+ getUserProfile(code) {
+ return new Promise((resolve, reject) => {
+ uni.getUserProfile({
+ lang: 'zh_CN',
+ desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
+ success(user) {
+ if (code) user.code = code;
+ resolve({
+ userInfo: user,
+ islogin: false
+ });
+ },
+ fail(res) {
+ reject(res);
+ }
+ })
+ })
+ }
+ /**
+ * 小程序比较版本信息
+ * @param v1 当前版本
+ * @param v2 进行比较的版本
+ * @return boolen
+ *
+ */
+ compareVersion(v1, v2) {
+ v1 = v1.split('.')
+ v2 = v2.split('.')
+ const len = Math.max(v1.length, v2.length)
+
+ while (v1.length < len) {
+ v1.push('0')
+ }
+ while (v2.length < len) {
+ v2.push('0')
+ }
+
+ for (let i = 0; i < len; i++) {
+ const num1 = parseInt(v1[i])
+ const num2 = parseInt(v2[i])
+
+ if (num1 > num2) {
+ return 1
+ } else if (num1 < num2) {
+ return -1
+ }
+ }
+ return 0
+ }
+ authUserInfo(data)
+ {
+ return new Promise((resolve, reject)=>{
+ login(data).then(res=>{
+ let time = res.data.expires_time - Cache.time();
+ store.commit('UPDATE_USERINFO', res.data.user);
+ store.commit('LOGIN', {token:res.data.token, time:time});
+ store.commit('SETUID', res.data.user.uid);
+ Cache.set(EXPIRES_TIME,res.data.expires_time,time);
+ Cache.set(USER_INFO,res.data.userInfo,time);
+ return resolve(res);
+ }).catch(res=>{
+ return reject(res);
+ })
+ })
+ }
+}
+
+export default new Routine();
\ No newline at end of file
diff --git a/libs/spread.js b/libs/spread.js
new file mode 100644
index 0000000..9c87ce5
--- /dev/null
+++ b/libs/spread.js
@@ -0,0 +1,21 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import { spread } from '@/api/user.js'
+import Cache from '@/utils/cache'
+
+const shareScence = function(spid,islogin) {
+ if(spid)Cache.set("spread", spid || 0);
+ if(spid && islogin){
+ spread(spid).then(res=>{
+ })
+ }
+}
+export default shareScence
+
diff --git a/libs/uniApi.js b/libs/uniApi.js
new file mode 100644
index 0000000..db05da5
--- /dev/null
+++ b/libs/uniApi.js
@@ -0,0 +1,428 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+// import uniCopy from '@/js_sdk/xb-copy/uni-copy.js'; // 拷贝功能插件
+// import compressImage from './compressImage.js'; // 解决图片旋转90°问题
+// const device = uni.getSystemInfoSync();
+// console.log("device:======================== " + JSON.stringify(device));
+/*
+ 参数说明
+ @url
+ 要跳转的目标地址
+ @opt
+ 要传给目标地址的参数
+ 可在目标页面的onLoad生命周期函数的第一个参数中获取
+*/
+
+// 压栈跳转页面
+export function navigateTo(type, url, opt) {
+ // H5端页面跳转目前不支持动画 (浏览器性能限制)
+ let toUrl = url;
+ let api = 'navigateTo';
+ toUrl = opt ? toUrl + '?' + convertObj(opt) : toUrl;
+
+ switch (type) {
+ case 1:
+ api = 'navigateTo';
+ break;
+ case 2:
+ api = 'redirectTo'; // 关闭当前页,跳转应用内某个页面
+ break;
+ case 3:
+ api = 'reLaunch'; // 关闭所有页面,打开到应用内某个页面
+ break;
+ case 4:
+ api = 'switchTab'; //跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
+ break;
+ default:
+ api = 'navigateTo'
+ break;
+ }
+ uni[api]({
+ url: toUrl,
+ animationType: 'slide-in-right',
+ animationDuration: 200
+ });
+}
+
+// 关闭当前页面并返回上一页面 delta 标识返回几层
+export function navigateBack(delta) {
+ uni.navigateBack({
+ delta: delta
+ });
+}
+
+// setStorage 将数据存入缓存
+export function setStorage(key, val) {
+ if (typeof val == 'string') {
+ uni.setStorageSync(key, val);
+ return val
+ }
+ uni.setStorageSync(key, JSON.stringify(val));
+}
+
+// getStorage 从缓存中读取数据
+export function getStorage(key) {
+ let uu = uni.getStorageSync(key);
+ try {
+ if (typeof JSON.parse(uu) != 'number') {
+ uu = JSON.parse(uu);
+ }
+ } catch (e) {}
+ return uu;
+}
+// 删除缓存中的数据
+export function removeStorage(key) {
+ if (key) {
+ uni.removeStorageSync(key);
+ }
+}
+// 将缓存中的数据清空
+export function clearStorage() {
+ try {
+ uni.clearStorageSync();
+ } catch (e) {
+ throw new Error('处理失败');
+ }
+}
+// 显示Toast
+/*
+@title 最多汉字数量7个
+@icon success loading none
+*/
+export function Toast(title, icon = 'none', obj = {}, duration = 800) {
+ let toastData = {
+ title: title,
+ duration: duration,
+ position: 'center',
+ mask: true,
+ icon: icon ? icon : 'none',
+ ...obj
+ };
+ uni.showToast(toastData);
+}
+/*
+显示loading提示框,需要手动隐藏
+*/
+export function Loading(title = '正在加载...', obj = {}) {
+ uni.showLoading({
+ title: title,
+ mask: true,
+ ...obj
+ });
+}
+// 隐藏loading
+export function hideLoading() {
+ try {
+ uni.hideLoading();
+ } catch (e) {
+ //TODO handle the exception
+ throw new Error('处理失败');
+ }
+}
+// 模态框
+/*
+确定取消按钮的文字颜色可修改
+obj 对象中传入 cancelColor : rgb 即可修改取消按钮颜色
+obj 对象中传入 confirmColor : rgb 即可修改确认按钮颜色
+*/
+export function Modal(title = '提示', content = '这是一个模态弹窗!', obj = {
+ showCancel: true,
+ cancelText: '取消',
+ confirmText: '确定'
+}) {
+ return new Promise((reslove, reject) => {
+ uni.showModal({
+ title: title,
+ content: content,
+ success: (res) => {
+ if (res.confirm) {
+ reslove()
+ }
+ if (res.cancel) {
+ reject()
+ }
+ }
+ });
+ })
+}
+/*
+显示操作菜单
+@itemList 操作菜单数组
+@itemColor 文字颜色
+*/
+export function ActionSheet(itemList, itemColor = "#000000") {
+ return new Promise((reslove, reject) => {
+ uni.showActionSheet({
+ itemList: itemList,
+ itemColor: itemColor,
+ success: (res) => {
+ reslove(res.tapIndex);
+ },
+ fail: function(res) {
+ reject(res.errMsg);
+ }
+ });
+ })
+}
+//将页面滚动到目标位置。
+export function ScrollTo(ScrollTop) {
+ uni.pageScrollTo({
+ scrollTop: ScrollTop,
+ duration: 300
+ })
+}
+
+// 获取用户信息
+export function GetUserInfo() {
+ return new Promise((reslove, reject) => {
+ uni.getUserInfo({
+ success(res) {
+ console.log(res);
+ reslove(res);
+ },
+ fail(rej) {
+ reject(rej);
+ }
+ })
+ })
+}
+
+// 获取用户授权信息
+export function Authorize(scoped = 'scope.userInfo') {
+ return new Promise((reslove, reject) => {
+ uni.authorize({
+ scope: scoped,
+ success(res) {
+ reslove(res);
+ },
+ fail(rej) {
+ reject(rej);
+ }
+ })
+ })
+}
+
+// 将对象转换成使用 & 连接的字符串
+export function convertObj(opt) {
+ let str = '';
+ let arr = [];
+ Object.keys(opt).forEach(item => {
+ arr.push(`${item}=${opt[item]}`);
+ })
+ str = arr.join('&');
+ return str;
+}
+// 节流函数
+// 节流函数
+export function throttle(fn, delay) {
+ var lastArgs;
+ var timer;
+ var delay = delay || 200;
+ return function(...args) {
+ lastArgs = args;
+ if(!timer){
+ timer = setTimeout(()=>{
+ timer = null;
+ fn.apply(this, lastArgs);
+ }, delay);
+ }
+ }
+}
+
+// 调起相机
+export function chooseImage(count) {
+ return new Promise((reslove, reject) => {
+ uni.chooseImage({
+ count: count, //默认9
+ sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+ sourceType: ['album', 'camera'], //从相册选择
+ success: (res) => {
+ reslove(res);
+ },
+ fail: (rej) => {
+ reject(rej);
+ }
+ });
+ })
+}
+//序列化对象和数组
+export function serialize(data) {
+ if (data != null && data != '') {
+ try {
+ return JSON.parse(JSON.stringify(data));
+ } catch (e) {
+ if (data instanceof Array) {
+ return [];
+ }
+ return {};
+ }
+ }
+ return data;
+}
+Date.prototype.format = function(fmt) {
+ let o = {
+ 'M+': this.getMonth() + 1, //月份
+ 'd+': this.getDate(), //日
+ 'h+': this.getHours(), //小时
+ 'm+': this.getMinutes(), //分
+ 's+': this.getSeconds(), //秒
+ 'q+': Math.floor((this.getMonth() + 3) / 3), //季度
+ S: this.getMilliseconds() //毫秒
+ };
+
+ if (/(y+)/.test(fmt)) {
+ fmt = fmt.replace(RegExp.$1, String(this.getFullYear()).substr(4 - RegExp.$1.length));
+ }
+ for (let k in o) {
+ if (new RegExp('(' + k + ')').test(fmt)) {
+ fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(String(o[k]).length));
+ }
+ }
+ return fmt;
+};
+
+//格式化日期
+export function formatDate(nS, format) {
+ //日期格式化
+ if (!nS) {
+ return '';
+ }
+ format = format || 'yyyy-MM-dd hh:mm:ss';
+ return new Date(nS).format(format);
+}
+
+// 图片转base64
+export function pathToBase64(path) {
+ return new Promise(function(resolve, reject) {
+ if (typeof window === 'object' && 'document' in window) {
+ if (typeof FileReader === 'function') {
+ var xhr = new XMLHttpRequest()
+ xhr.open('GET', path, true)
+ xhr.responseType = 'blob'
+ xhr.onload = function() {
+ if (this.status === 200) {
+ let fileReader = new FileReader()
+ fileReader.onload = function(e) {
+ resolve(e.target.result)
+ }
+ fileReader.onerror = reject
+ fileReader.readAsDataURL(this.response)
+ }
+ }
+ xhr.onerror = reject
+ xhr.send()
+ return
+ }
+ var canvas = document.createElement('canvas')
+ var c2x = canvas.getContext('2d')
+ var img = new Image
+ img.onload = function() {
+ canvas.width = img.width
+ canvas.height = img.height
+ c2x.drawImage(img, 0, 0)
+ resolve(canvas.toDataURL())
+ canvas.height = canvas.width = 0
+ }
+ img.onerror = reject
+ img.src = path
+ return
+ }
+ if (typeof plus === 'object') {
+ plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
+ entry.file(function(file) {
+ var fileReader = new plus.io.FileReader()
+ fileReader.onload = function(data) {
+ resolve(data.target.result)
+ }
+ fileReader.onerror = function(error) {
+ reject(error)
+ }
+ fileReader.readAsDataURL(file)
+ }, function(error) {
+ reject(error)
+ })
+ }, function(error) {
+ reject(error)
+ })
+ return
+ }
+ if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+ wx.getFileSystemManager().readFile({
+ filePath: path,
+ encoding: 'base64',
+ success: function(res) {
+ resolve('data:image/png;base64,' + res.data)
+ },
+ fail: function(error) {
+ reject(error)
+ }
+ })
+ return
+ }
+ reject(new Error('not support'))
+ })
+}
+// 获取本周的第一天
+export function showWeekFirstDay() {
+ var date = new Date();
+ var weekday = date.getDay() || 7; //获取星期几,getDay()返回值是 0(周日) 到 6(周六) 之间的一个整数。0||7为7,即weekday的值为1-7
+ date.setDate(date.getDate() - weekday + 1); //往前算(weekday-1)天,年份、月份会自动变化
+ return formatDate(date, 'yyyy-MM-dd');
+}
+
+// 获取本月第一天
+export function showMonthFirstDay() {
+ var MonthFirstDay = new Date().setDate(1);
+ return formatDate(new Date(MonthFirstDay).getTime(), 'yyyy-MM-dd');
+}
+var now = new Date(); //当前日期
+var nowMonth = now.getMonth(); //当前月
+var nowYear = now.getYear(); //当前年
+nowYear += (nowYear < 2000) ? 1900 : 0; //
+//获得本季度的开始月份
+function getQuarterStartMonth() {
+ var quarterStartMonth = 0;
+ if(nowMonth < 3) {
+ quarterStartMonth = 0;
+ }
+ if(2 < nowMonth && nowMonth < 6) {
+ quarterStartMonth = 3;
+ }
+ if(5 < nowMonth && nowMonth < 9) {
+ quarterStartMonth = 6;
+ }
+ if(nowMonth > 8) {
+ quarterStartMonth = 9;
+ }
+ return quarterStartMonth;
+}
+
+//或的本季度的结束日期
+//获得本季度的开始日期
+export function getQuarterStartDate() {
+ var quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1);
+ return formatDate(quarterStartDate, 'yyyy-MM-dd');
+}
+// 删除数组中重复数据
+export function unique(data) {
+ data = data || [];
+ var n = {};//存放新的数据
+ for(var i = 0; i < data.length; i++) {
+ var v = JSON.stringify(data[i]);
+ if(typeof (v) == "undefined") {
+ n[v] = 1;
+ }
+ }
+ data.length = 0;
+ for(var i in n) {
+ data[data.length] = i;
+ }
+ return data;
+}
\ No newline at end of file
diff --git a/libs/wechat.js b/libs/wechat.js
new file mode 100644
index 0000000..0030235
--- /dev/null
+++ b/libs/wechat.js
@@ -0,0 +1,294 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+// #ifdef H5
+import WechatJSSDK from "@/plugin/jweixin-module/index.js";
+
+
+import {
+ getWechatConfig,
+ wechatAuth,
+ commonAuth
+} from "@/api/public";
+import {
+ WX_AUTH,
+ STATE_KEY,
+ LOGINTYPE,
+ BACK_URL
+} from '@/config/cache';
+import {
+ parseQuery
+} from '@/utils';
+import store from '@/store';
+import Cache from '@/utils/cache';
+
+class AuthWechat {
+
+ constructor() {
+ //微信实例化对象
+ this.instance = WechatJSSDK;
+ //是否实例化
+ this.status = false;
+
+ this.initConfig = {};
+
+ }
+
+ isAndroid(){
+ let u = navigator.userAgent;
+ return u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
+ }
+
+ signLink() {
+ if (typeof window.entryUrl === 'undefined' || window.entryUrl === '') {
+ window.entryUrl = location.href
+ }
+ return /(Android)/i.test(navigator.userAgent) ? location.href : window.entryUrl;
+ }
+
+ /**
+ * 初始化wechat(分享配置)
+ */
+ wechat() {
+ return new Promise((resolve, reject) => {
+ // if (this.status && !this.isAndroid()) return resolve(this.instance);
+ getWechatConfig()
+ .then(res => {
+ this.instance.config(res.data);
+ this.initConfig = res.data;
+ this.status = true;
+ this.instance.ready(() => {
+ resolve(this.instance);
+ })
+ }).catch(err => {
+ console.log(err);
+ this.status = false;
+ reject(err);
+ });
+ });
+ }
+
+ /**
+ * 验证是否初始化
+ */
+ verifyInstance() {
+ let that = this;
+ return new Promise((resolve, reject) => {
+ if (that.instance === null && !that.status) {
+ that.wechat().then(res => {
+ resolve(that.instance);
+ }).catch(() => {
+ return reject();
+ })
+ } else {
+ return resolve(that.instance);
+ }
+ })
+ }
+ // 微信公众号的共享地址
+ openAddress() {
+ return new Promise((resolve, reject) => {
+ this.wechat().then(wx => {
+ this.toPromise(wx.openAddress).then(res => {
+ resolve(res);
+ }).catch(err => {
+ reject(err);
+ });
+ }).catch(err => {
+ reject(err);
+ })
+ });
+ }
+
+ // 使用微信内置地图查看位置接口;
+ seeLocation(config){
+ return new Promise((resolve, reject) => {
+ this.wechat().then(wx => {
+ this.toPromise(wx.openLocation, config).then(res => {
+ resolve(res);
+ }).catch(err => {
+ reject(err);
+ });
+ }).catch(err => {
+ reject(err);
+ })
+ });
+ }
+
+ /**
+ * 微信支付
+ * @param {Object} config
+ */
+ pay(config) {
+ return new Promise((resolve, reject) => {
+ this.wechat().then((wx) => {
+ this.toPromise(wx.chooseWXPay, config).then(res => {
+ resolve(res);
+ }).catch(res => {
+ reject(res);
+ });
+ }).catch(res => {
+ reject(res);
+ });
+ });
+ }
+
+ toPromise(fn, config = {}) {
+ return new Promise((resolve, reject) => {
+ fn({
+ ...config,
+ success(res) {
+ resolve(res);
+ },
+ fail(err) {
+ reject(err);
+ },
+ complete(err) {
+ reject(err);
+ },
+ cancel(err) {
+ reject(err);
+ }
+ });
+ });
+ }
+
+ /**
+ * 自动去授权
+ */
+ oAuth() {
+ if (uni.getStorageSync(WX_AUTH) && store.state.app.token) return;
+ const {
+ code
+ } = parseQuery();
+ if (!code) return this.toAuth();
+ }
+
+ clearAuthStatus() {
+
+ }
+
+ /**
+ * 授权登陆获取token
+ * @param {Object} code
+ */
+ auth(code) {
+ return new Promise((resolve, reject) => {
+ let loginType = Cache.get(LOGINTYPE);
+ commonAuth({
+ auth: {
+ type:'wechat',
+ auth: {
+ code,
+ spread: Cache.get("spread") ?? 0
+ }
+ }
+ }).then(res => {
+ const data = res.data;
+ if(res.data.status == 200){
+ store.commit("LOGIN", {
+ token: data.result.token,
+ time:data.result.exp
+ });
+ store.commit("SETUID", data.result.user.uid);
+ store.commit('UPDATE_USERINFO', data.result.user);
+ Cache.set(WX_AUTH, code);
+ Cache.clear(STATE_KEY);
+ loginType && Cache.clear(LOGINTYPE);
+ resolve();
+ }else{
+ uni.setStorageSync('auth_token',res.data.result.key);
+ return uni.navigateTo({
+ url:'/pages/users/login/index'
+ })
+ }
+ })
+ });
+ }
+
+ /**
+ * 获取跳转授权后的地址
+ * @param {Object} appId
+ */
+ getAuthUrl(appId) {
+ const backUrlCRshlcICwGdGY = encodeURIComponent(
+ `${location.origin}/pages/auth/index?back_url=` +
+ encodeURIComponent(
+ encodeURIComponent(
+ uni.getStorageSync(BACK_URL) ?
+ uni.getStorageSync(BACK_URL) :
+ location.pathname + location.search
+ )
+ )
+ );
+ uni.removeStorageSync(BACK_URL);
+ const state = encodeURIComponent(
+ ("" + Math.random()).split(".")[1] + "authorizestate"
+ );
+ uni.setStorageSync(STATE_KEY, state);
+ return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${backUrlCRshlcICwGdGY}&response_type=code&scope=snsapi_userinfo&state=${state}#wechat_redirect`;
+ }
+
+ /**
+ * 跳转自动登陆
+ */
+ toAuth() {
+ let c2543fff3bfa6f144c2f06a7de6cd10c0b650cae = this;
+ this.wechat().then(wx => {
+ window.location.replace(this.getAuthUrl(c2543fff3bfa6f144c2f06a7de6cd10c0b650cae.initConfig.appId));
+ })
+ }
+
+ /**
+ * 绑定事件
+ * @param {Object} name 事件名
+ * @param {Object} config 参数
+ */
+ wechatEvevt(name, config) {
+ let that = this;
+ return new Promise((resolve, reject) => {
+ let configDefault = {
+ fail(res) {
+ console.log(res,11111);
+ if (that.instance) return reject({
+ is_ready: true,
+ wx: that.instance
+ });
+ that.verifyInstance().then(wx => {
+ return reject({
+ is_ready: true,
+ wx: wx
+ });
+ })
+ },
+ success(res) {
+ return resolve(res,2222);
+ }
+ };
+ Object.assign(configDefault, config);
+ that.wechat().then(wx => {
+ if (typeof name === 'object') {
+ name.forEach(item => {
+ wx[item] && wx[item](configDefault)
+ })
+ } else {
+ wx[name] && wx[name](configDefault)
+ }
+ })
+ });
+ }
+
+ isWeixin() {
+ return navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1;
+ }
+
+}
+
+export default new AuthWechat();
+// #endif
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..67608a7
--- /dev/null
+++ b/main.js
@@ -0,0 +1,95 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import Vue from 'vue'
+import App from './App'
+import store from './store'
+import Cache from './utils/cache'
+import util from 'utils/util'
+import { HTTP_REQUEST_URL } from '@/config/app';
+import skeleton from './components/skeleton/index.vue'
+import BaseMoney from './components/BaseMoney.vue';
+Vue.component('skeleton', skeleton)
+Vue.component('BaseMoney', BaseMoney)
+Vue.prototype.$util = util;
+Vue.prototype.$Cache = Cache;
+Vue.prototype.$eventHub = new Vue();
+Vue.config.productionTip = false
+
+// #ifdef H5
+import { parseQuery } from "./utils";
+import Auth from './libs/wechat';
+import { SPREAD } from './config/cache';
+// import wx from '@/node_modules/jweixin-module/lib/index'
+var __s = document.createElement('script');
+__s.src=HTTP_REQUEST_URL+"/api/script";
+document.head.appendChild(__s);
+Vue.prototype.$wechat = Auth;
+let cookieName = "VCONSOLE",
+ query = parseQuery(),
+ urlSpread = query["spread"],
+ vconsole = query[cookieName.toLowerCase()],
+ md5Crmeb = "b14d1e9baeced9bb7525ab19ee35f2d2", //CRMEB MD5 加密开启vconsole模式
+ md5UnCrmeb = "3dca2162c4e101b7656793a1af20295c"; //UN_CREMB MD5 加密关闭vconsole模式
+
+if (urlSpread !== undefined) {
+ var spread = Cache.get(SPREAD);
+ urlSpread = parseInt(urlSpread);
+ if (!Number.isNaN(urlSpread) && spread !== urlSpread) {
+ Cache.set("spread", urlSpread || 0);
+ } else if (spread === 0 || typeof spread !== "number") {
+ Cache.set("spread", urlSpread || 0);
+ }
+}
+
+if (vconsole !== undefined) {
+ if (vconsole === md5UnCrmeb && Cache.has(cookieName))
+ Cache.clear(cookieName);
+} else vconsole = Cache.get(cookieName);
+
+import VConsole from './components/vconsole.min.js'
+
+if (vconsole !== undefined && vconsole === md5Crmeb) {
+ Cache.set(cookieName, md5Crmeb, 3600);
+ let vConsole = new VConsole();
+
+}
+// 注册全局防抖指令
+Vue.directive('debounce',{
+ inserted:(el,binding)=>{
+ let debounceTime = binding.value || 2000
+ let timer
+ el.addEventListener('click',e=>{
+ el.style.pointerEvents = 'none';
+ if(!el.disabled){
+ timer = setTimeout(()=>{
+ el.style.pointerEvents = 'auto'
+ },debounceTime)
+ }
+ },true)
+ }
+})
+
+// if(!!!Auth.isAndroid() && Auth.isWeixin()){
+// Auth.wechat()
+// }
+
+// Auth.isWeixin() && Auth.oAuth();
+
+// #endif
+
+App.mpType = 'app'
+
+
+const app = new Vue({
+ ...App,
+ store,
+ Cache
+})
+app.$mount();
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..08ba5d1
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,205 @@
+{
+ "name" : "CRMEB",
+ "appid" : "__UNI__99FC347",
+ "description" : "",
+ "versionName" : "1.0.4",
+ "versionCode" : 127,
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "titleNView" : true,
+ "usingComponents" : true,
+ "nvueCompiler" : "uni-app",
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /* 模块配置 */
+ "modules" : {
+ "VideoPlayer" : {},
+ "OAuth" : {},
+ "Payment" : {},
+ "Share" : {},
+ "iBeacon" : {},
+ "Geolocation" : {},
+ "Maps" : {}
+ },
+ "safearea" : {
+ "bottom" : {
+ "offset" : "none"
+ }
+ },
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
+ "permissionExternalStorage" : {
+ "request" : "none",
+ "prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
+ },
+ "permissionPhoneState" : {
+ "request" : "none" //拨打电话权限关闭
+ }
+ },
+ /* ios打包配置 */
+ "ios" : {
+ "privacyDescription" : {
+ "NSPhotoLibraryUsageDescription" : "上传用户头像保存分享海报",
+ "NSPhotoLibraryAddUsageDescription" : "上传用户头像保存分享海报",
+ "NSCameraUsageDescription" : "上传用户头像保存分享海报",
+ "NSLocationWhenInUseUsageDescription" : "根据客户地理位置推荐最近门店",
+ "NSLocationAlwaysUsageDescription" : "根据客户地理位置推荐最近门店"
+ },
+ "idfa" : false
+ },
+ /* SDK配置 */
+ "sdkConfigs" : {
+ "maps" : {
+ "amap" : {
+ "appkey_ios" : "",
+ "appkey_android" : ""
+ }
+ },
+ "payment" : {
+ "alipay" : {
+ "__platform__" : [ "ios", "android" ]
+ }
+ },
+ "share" : {
+ "weixin" : {
+ "appid" : "",
+ "UniversalLinks" : "https://mer.crmeb.net/"
+ }
+ },
+ "geolocation" : {
+ "amap" : {
+ "__platform__" : [ "ios", "android" ],
+ "appkey_ios" : "",
+ "appkey_android" : ""
+ }
+ },
+ "push" : {},
+ "oauth" : {
+ "apple" : {},
+ "weixin" : {
+ "appid" : "",
+ "appsecret" : "",
+ "UniversalLinks" : "https://mer.crmeb.net/"
+ }
+ },
+ "ad" : {}
+ },
+ "icons" : {
+ "android" : {
+ "hdpi" : "unpackage/res/icons/72x72.png",
+ "xhdpi" : "unpackage/res/icons/96x96.png",
+ "xxhdpi" : "unpackage/res/icons/144x144.png",
+ "xxxhdpi" : "unpackage/res/icons/192x192.png"
+ },
+ "ios" : {
+ "appstore" : "unpackage/res/icons/1024x1024.png",
+ "ipad" : {
+ "app" : "unpackage/res/icons/76x76.png",
+ "app@2x" : "unpackage/res/icons/152x152.png",
+ "notification" : "unpackage/res/icons/20x20.png",
+ "notification@2x" : "unpackage/res/icons/40x40.png",
+ "proapp@2x" : "unpackage/res/icons/167x167.png",
+ "settings" : "unpackage/res/icons/29x29.png",
+ "settings@2x" : "unpackage/res/icons/58x58.png",
+ "spotlight" : "unpackage/res/icons/40x40.png",
+ "spotlight@2x" : "unpackage/res/icons/80x80.png"
+ },
+ "iphone" : {
+ "app@2x" : "unpackage/res/icons/120x120.png",
+ "app@3x" : "unpackage/res/icons/180x180.png",
+ "notification@2x" : "unpackage/res/icons/40x40.png",
+ "notification@3x" : "unpackage/res/icons/60x60.png",
+ "settings@2x" : "unpackage/res/icons/58x58.png",
+ "settings@3x" : "unpackage/res/icons/87x87.png",
+ "spotlight@2x" : "unpackage/res/icons/80x80.png",
+ "spotlight@3x" : "unpackage/res/icons/120x120.png"
+ }
+ }
+ },
+ "splashscreen" : {
+ "useOriginalMsgbox" : true
+ }
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "wx5fb1cc8edb3f8baa",
+ "setting" : {
+ "urlCheck" : false,
+ "minified" : true,
+ "postcss" : true,
+ "es6" : true
+ },
+ "permission" : {
+ "scope.userLocation" : {
+ "desc" : "获取您的位置"
+ }
+ },
+ "requiredPrivateInfos" : [ "getLocation", "chooseAddress" ],
+ "usingComponents" : true,
+ "__usePrivacyCheck__" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "h5" : {
+ "devServer" : {
+ "https" : false
+ },
+ "router" : {
+ "mode" : "history",
+ "base" : ""
+ },
+ "domain" : "",
+ "sdkConfigs" : {
+ "maps" : {
+ "qqmap" : {
+ "key" : "SMJBZ-WCHK4-ZPZUA-DSIXI-XDDVQ-XWFX7"
+ }
+ }
+ },
+ "title" : "加载中...",
+ "template" : "template.h5.html"
+ }
+}
diff --git a/mixins/SendVerifyCode.js b/mixins/SendVerifyCode.js
new file mode 100644
index 0000000..231102b
--- /dev/null
+++ b/mixins/SendVerifyCode.js
@@ -0,0 +1,36 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+export default {
+ data() {
+ return {
+ disabled: false,
+ text: "获取验证码"
+ };
+ },
+ methods: {
+ sendCode() {
+ if (this.disabled) return;
+ this.disabled = true;
+ let n = 60;
+ this.text = "剩余 " + n + "s";
+ const run = setInterval(() => {
+ n = n - 1;
+ if (n < 0) {
+ clearInterval(run);
+ }
+ this.text = "剩余 " + n + "s";
+ if (this.text < "剩余 " + 0 + "s") {
+ this.disabled = false;
+ this.text = "重新获取";
+ }
+ }, 1000);
+ }
+ }
+};
\ No newline at end of file
diff --git a/mixins/history.js b/mixins/history.js
new file mode 100644
index 0000000..e49cbe3
--- /dev/null
+++ b/mixins/history.js
@@ -0,0 +1,25 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import { history } from '@/api/public.js'
+export default {
+ data() {
+ return {
+
+ };
+ },
+ methods: {
+ getHistory() {
+ console.log(this.$util.getNowUrl(),'page')
+ history({
+ page:this.$util.getNowUrl()
+ }).then(res=>{})
+ },
+ }
+};
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..f372aa3
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,440 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ }
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..8c988ce
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,1300 @@
+{
+ "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ {
+ "path": "pages/guide/index",
+ "style": {
+ "app-plus": {
+ "titleNView": false //禁用原生导航栏
+ },
+ "navigationStyle": "custom",
+ "disableScroll": true
+ }
+ },
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "首页",
+ "navigationStyle": "custom",
+ // #ifdef APP-PLUS
+ "enablePullDownRefresh": true,
+ // #endif
+ "app-plus": {
+ "scrollIndicator": false //禁用原生导航栏
+ }
+ }
+ },
+ {
+ "path": "pages/order_addcart/order_addcart",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "购物车"
+ }
+ },
+ {
+ "path": "pages/plant_grass/index",
+ "style": {
+ // "navigationStyle": "custom",
+ "navigationBarTitleText": "种草社区"
+ }
+ },
+ {
+ "path": "pages/user/index",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "个人中心",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/small_page/index",
+ "style": {
+ "navigationBarTitleText": "微页面"
+ // "navigationStyle": "custom",
+
+ }
+ },
+ {
+ "path": "pages/goods_details/index",
+ "style": {
+ "navigationStyle": "custom"
+ // #ifdef MP || APP-PLUS
+ ,
+ "navigationBarBackgroundColor": "#F2F2F2"
+ // #endif
+ }
+ },
+ {
+ "path": "pages/goods_cate/goods_cate",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "商品分类"
+ }
+ },
+ {
+ "path": "pages/news_list/index",
+ "style": {
+ "navigationBarTitleText": "资讯"
+ }
+ },
+ {
+ "path": "pages/news_details/index",
+ "style": {
+ "navigationBarTitleText": "资讯详情"
+ }
+ },
+ {
+ "path": "pages/auth/index",
+ "style": {
+ "navigationBarTitleText": "加载中"
+ }
+ },
+ {
+ "path": "pages/order_pay_status/index",
+ "style": {
+ "navigationBarTitleText": "支付状态"
+ }
+ },
+ {
+ "path": "pages/error/index",
+ "style": {
+ "navigationBarTitleText": "网站已关闭"
+ }
+ },
+ {
+ "path": "pages/order_details/index",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ },
+ {
+ "path": "pages/order_details/stay",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ },
+ {
+ "path": "pages/order_details/delivery",
+ "style": {
+ "navigationBarTitleText": "配送详情"
+ }
+ },
+ {
+ "path": "pages/order_pay_back/index",
+ "style": {
+ "navigationBarTitleText": "支付提示"
+ }
+ }
+ ],
+ "subPackages": [{
+ "root": "pages/users",
+ "name": "users",
+ "pages": [{
+ "path": "retrievePassword/index",
+ "style": {
+ "navigationBarTitleText": "忘记密码"
+ }
+ },
+ {
+ "path": "user_setting/index",
+ "style": {
+ "navigationBarTitleText": "设置"
+ }
+ },
+ //协议,关于
+ {
+ "path": "user_about/index",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ },
+ {
+ "path": "agreement_rules/index",
+ "style": {
+ "navigationBarTitleText": "协议规则"
+ }
+ },
+ {
+ "path": "user_info/index",
+ "style": {
+ "navigationBarTitleText": "个人资料"
+ }
+ },
+ {
+ "path": "user_nickname/index",
+ "style": {
+ "navigationBarTitleText": "昵称"
+ }
+ },
+ {
+ "path": "user_get_coupon/index",
+ "style": {
+ "navigationBarTitleText": "领取优惠券"
+ }
+ },
+ {
+ "path": "user_goods_collection/index",
+ "style": {
+ "navigationBarTitleText": "我的收藏"
+ }
+ },
+ {
+ "path": "user_sgin/index",
+ "style": {
+ "navigationBarTitleText": "签到"
+ }
+ },
+ {
+ "path": "user_sgin_list/index",
+ "style": {
+ "navigationBarTitleText": "签到记录"
+ }
+ },
+ {
+ "path": "user_money/index",
+ "style": {
+ "navigationBarTitleText": "我的账户"
+ }
+ },
+ {
+ "path": "user_bill/index",
+ "style": {
+ "navigationBarTitleText": "账单明细"
+ }
+ },
+ {
+ "path": "user_integral/index",
+ "style": {
+ "navigationBarTitleText": "积分详情"
+ }
+ },
+ {
+ "path": "user_brokerage/index",
+ "style": {
+ "navigationBarTitleText": "分销等级"
+ }
+ },
+ {
+ "path": "user_grade/index",
+ "style": {
+ "navigationBarTitleText": "我的等级",
+ "navigationBarBackgroundColor": "#282828"
+ // #ifdef MP || APP-PLUS
+ ,
+ "navigationBarTextStyle": "#fff"
+ // #endif
+ }
+ },
+ {
+ "path": "user_grade_list/index",
+ "style": {
+ "navigationBarTitleText": "成长值记录",
+ "navigationBarBackgroundColor": "#282828"
+ // #ifdef MP || APP-PLUS
+ ,
+ "navigationBarTextStyle": "#fff"
+ // #endif
+ }
+ },
+ {
+ "path": "user_coupon/index",
+ "style": {
+ "navigationBarTitleText": "我的优惠券"
+ }
+ },
+ {
+ "path": "user_spread_user/index",
+ "style": {
+ "navigationBarTitleText": "我的推广"
+ }
+ },
+ {
+ "path": "user_spread_code/index",
+ "style": {
+ "navigationBarTitleText": "分销海报"
+ }
+ },
+ {
+ "path": "user_spread_money/index",
+ "style": {
+ "navigationBarTitleText": "佣金记录"
+ }
+ },
+ {
+ "path": "user_cash/index",
+ "style": {
+ "navigationBarTitleText": "提现"
+ }
+ },
+ {
+ "path": "user_address_list/index",
+ "style": {
+ "navigationBarTitleText": "地址管理"
+ }
+ },
+ {
+ "path": "user_address/index",
+ "style": {
+ "navigationBarTitleText": "添加地址"
+ }
+ },
+ {
+ "path": "user_phone/index",
+ "style": {
+ "navigationBarTitleText": "绑定手机"
+ }
+ },
+ {
+ "path": "user_modify_phone/index",
+ "style": {
+ "navigationBarTitleText": "修改手机号"
+ }
+ },
+ {
+ "path": "user_modify_pwd/index",
+ "style": {
+ "navigationBarTitleText": "修改密码"
+ }
+ },
+ {
+ "path": "user_payment/index",
+ "style": {
+ "navigationBarTitleText": "余额充值"
+ }
+ },
+ {
+ "path": "user_pwd_edit/index",
+ "style": {
+ "navigationBarTitleText": "修改密码"
+ // #ifdef MP || APP-PLUS
+ ,
+ "navigationBarTextStyle": "#fff"
+ // #endif
+ }
+ },
+ {
+ "path": "order_confirm/index",
+ "style": {
+ "navigationBarTitleText": "提交订单"
+ }
+ },
+ {
+ "path": "goods_details_store/index",
+ "style": {
+ "navigationBarTitleText": "门店列表"
+ }
+ },
+ {
+ "path": "promoter-list/index",
+ "style": {
+ "navigationBarTitleText": "推广人统计"
+ }
+ },
+ {
+ "path": "promoter-order/index",
+ "style": {
+ "navigationBarTitleText": "推广人订单"
+ }
+ },
+ {
+ "path": "promoter_rank/index",
+ "style": {
+
+ "navigationBarTitleText": "推广人排行"
+ }
+ },
+ {
+ "path": "commission_rank/index",
+ "style": {
+ "navigationBarTitleText": "佣金排行"
+ }
+ },
+ {
+ "path": "order_list/index",
+ "style": {
+ "navigationBarTitleText": "我的订单"
+ }
+ },
+ {
+ "path": "order_list/search",
+ "style": {
+ "navigationBarTitleText": "我的订单"
+ }
+ },
+ {
+ "path": "presell_order_list/index",
+ "style": {
+ "navigationBarTitleText": "预售订单"
+ }
+ },
+ {
+ "path": "goods_logistics/index",
+ "style": {
+ "navigationBarTitleText": "物流信息"
+ }
+ },
+ {
+ "path": "user_return_list/index",
+ "style": {
+ "navigationBarTitleText": "退货列表"
+ }
+ },
+ {
+ "path": "goods_return/index",
+ "style": {
+ "navigationBarTitleText": "申请退货"
+ }
+ },
+ {
+ "path": "login/index",
+ "style": {
+ "navigationBarTitleText": "登录",
+ "navigationBarBackgroundColor": "#EB5447"
+ // #ifdef MP || APP-PLUS
+ ,
+ "navigationBarTextStyle": "#fff"
+ // #endif
+ }
+ },
+ {
+ "path": "goods_comment_list/index",
+ "style": {
+ "navigationBarTitleText": "商品评分"
+ }
+ },
+ {
+ "path": "goods_comment_con/index",
+ "style": {
+ "navigationBarTitleText": "商品评价"
+ }
+ },
+ {
+ "path": "feedback/index",
+ "style": {
+ "navigationBarTitleText": "问题反馈",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "feedback/list",
+ "style": {
+ "navigationBarTitleText": "反馈记录",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "feedback/detail",
+ "style": {
+ "navigationBarTitleText": "反馈内容",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "refund/index",
+ "style": {
+ "navigationBarTitleText": "批量退款",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "refund/confirm",
+ "style": {
+ "navigationBarTitleText": "申请退款",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "refund/detail",
+ "style": {
+ "navigationBarTitleText": "退款详情",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "refund/select",
+ "style": {
+ "navigationBarTitleText": "选择服务类型",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "refund/goods/index",
+ "style": {
+ "navigationBarTitleText": "退货退款",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "refund/list",
+ "style": {
+ "navigationBarTitleText": "退货列表",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "refund/logistics",
+ "style": {
+ "navigationBarTitleText": "物流信息",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "browsingHistory/index",
+ "style": {
+ "navigationBarTitleText": "浏览记录",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "distributor/index",
+ "style": {
+ "navigationBarTitleText": "成为分销",
+ "backgroundColor": "#FFFFFF"
+ }
+ },
+ {
+ "path": "user_invoice_list/index",
+ "style": {
+ "navigationBarTitleText": "发票管理"
+ }
+ },
+ {
+ "path": "user_invoice_form/index",
+ "style": {
+ "navigationBarTitleText": "添加新发票"
+ }
+ },
+ {
+ "path": "user_invoicing/index",
+ "style": {
+ "navigationBarTitleText": "开具发票"
+ }
+ },
+ {
+ "path": "user_invoice_order/index",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ }, {
+ "path": "privacy/index",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ }
+ ]
+ },
+ {
+ "root": "pages/store",
+ "name": "store",
+ "pages": [
+ {
+ "path": "index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "店铺diy首页"
+ // #ifdef MP
+ ,
+ "navigationBarTextStyle": "#FFFFFF"
+ // #endif
+ }
+ },{
+ "path": "home/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "店铺首页"
+ // #ifdef MP
+ ,
+ "navigationBarTextStyle": "#FFFFFF"
+ // #endif
+
+ }
+ },
+ {
+ "path": "detail/index",
+ "style": {
+ "navigationBarTitleText": "店铺详情"
+ }
+ },
+ {
+ "path": "list/index",
+ "style": {
+ "navigationBarTitleText": "商品列表"
+ }
+ },
+ {
+ "path": "settled/index",
+ "style": {
+ "navigationBarTitleText": "商家入驻"
+ }
+ }, {
+ "path": "applicationRecord/index",
+ "style": {
+ "navigationBarTitleText": "申请记录"
+ }
+ }, {
+ "path": "merchantDetails/index",
+ "style": {
+ "navigationBarTitleText": "审核通过"
+ }
+ },
+ {
+ "path": "shopStreet/index",
+ "style": {
+ "navigationBarTitleText": "店铺街"
+ }
+ },
+ {
+ "path": "qualifications/index",
+ "style": {
+ "navigationBarTitleText": "店铺资质信息"
+ }
+ }
+ ]
+ },
+ {
+ "root": "pages/admin",
+ "name": "adminOrder",
+ "pages": [{
+ "path": "order/index",
+ "style": {
+ "navigationBarTitleText": "订单首页"
+ }
+ },
+ {
+ "path": "orderList/index",
+ "style": {
+ "navigationBarTitleText": "订单列表"
+ }
+ },
+ {
+ "path": "orderRefund/index",
+ "style": {
+ "navigationBarTitleText": "立即退款"
+ }
+ },
+ {
+ "path": "refundList/index",
+ "style": {
+ "navigationBarTitleText": "申请退款"
+
+ }
+ },
+ {
+ "path": "business/index",
+ "style": {
+ "navigationBarTitleText": "商家管理"
+ }
+ },
+ {
+ "path": "orderDetail/index",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ },
+ {
+ "path": "refundDetail/index",
+ "style": {
+ "navigationBarTitleText": "退款单详情"
+ }
+ },
+ {
+ "path": "delivery/index",
+ "style": {
+ "navigationBarTitleText": "订单发货"
+ }
+ },
+ {
+ "path": "statistics/index",
+ "style": {
+ "navigationBarTitleText": "订单数据统计"
+ }
+ },
+ {
+ "path": "order_cancellation/index",
+ "style": {
+ "navigationBarTitleText": "订单核销"
+ }
+ },
+ {
+ "path": "cancellate_result/index",
+ "style": {
+ "navigationBarTitleText": "核销结果"
+ }
+ },
+ {
+ "path": "goods_details/index",
+ "style": {
+ "navigationBarTitleText": "商品详情"
+ }
+ },
+ {
+ "path": "storeDiy/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "店铺diy首页"
+ // #ifdef MP
+ ,
+ "navigationBarTextStyle": "#FFFFFF"
+ // #endif
+ }
+ }
+ // #ifdef H5
+ ,{
+ "path": "scan/index",
+ "style": {
+ "navigationBarTitleText": "手机扫码上传"
+ }
+ }
+ // #endif
+ ]
+ },
+ {
+ "root": "pages/product",
+ "name": "product",
+ "pages": [{
+ "path": "list/index",
+ "style": {
+ "navigationBarTitleText": "商品管理"
+ }
+ },
+ {
+ "path": "goodsOnSale/index",
+ "style": {
+ "onReachBottomDistance": 100,
+ "navigationBarTitleText": "在售商品",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "soldOutGoods/index",
+ "style": {
+ "onReachBottomDistance": 100,
+ "navigationBarTitleText": "售罄商品",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "recycleBin/index",
+ "style": {
+ "onReachBottomDistance": 100,
+ "navigationBarTitleText": "回收站",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path":"storeClassification/index",
+ "style": {
+ "navigationBarTitleText": "店铺分类"
+ }
+ },
+ {
+ "path":"storeClassification/addStoreClass",
+ "style": {
+ "navigationBarTitleText": "添加店铺分类"
+ }
+ },
+ {
+ "path": "addGoods/index",
+ "style": {
+ "navigationBarTitleText": "添加商品"
+ }
+ },
+ {
+ "path": "addGoods/secound",
+ "style": {
+ "navigationBarTitleText": "添加商品"
+ }
+ },
+ {
+ "path":"addGoods/addGoodDetils",
+ "style": {
+ "navigationBarTitleText": "商品详情"
+ }
+ },
+ {
+ "path": "addGoods/singleSpecification",
+ "style": {
+ "navigationBarTitleText": "单规格"
+ }
+ },
+ {
+ "path": "addGoods/mulSpecification",
+ "style": {
+ "navigationBarTitleText": "多规格"
+ }
+ },
+ {
+ "path": "addGoods/specificationProperties",
+ "style": {
+ "navigationBarTitleText": "规格属性"
+ }
+ },
+ {
+ "path": "addGoods/freightTemplate",
+ "style": {
+ "navigationBarTitleText": "运费模板",
+ "onReachBottomDistance": 100,
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "addGoods/addFreightTemplate",
+ "style": {
+ "navigationBarTitleText": "新增运费模板"
+ }
+ },
+ {
+ "path": "addGoods/modifyPrice",
+ "style": {
+ "navigationBarTitleText": "修改价格-多规格"
+ }
+ }
+ ]
+ },
+ {
+ "root": "pages/plantGrass",
+ "name": "plant_grass",
+ "pages": [
+ {
+ "path": "plant_detail/index",
+ "style": {
+ "navigationBarTitleText": "内容详情"
+ }
+ },
+ {
+ "path": "plant_release/index",
+ "style": {
+ "navigationBarTitleText": "内容发布"
+ }
+ },
+ {
+ "path": "plant_show/index",
+ "style": {
+ "navigationBarTitleText": "种草秀"
+ }
+ },
+ {
+ "path": "plant_topic/index",
+ "style": {
+ "navigationBarTitleText": "话题筛选"
+ }
+ },
+ {
+ "path": "plant_search/index",
+ "style": {
+ "navigationBarTitleText": "搜索"
+ }
+ },
+ {
+ "path": "plant_search_list/index",
+ "style": {
+ "navigationBarTitleText": "搜索结果"
+ }
+ },
+ {
+ "path": "plant_featured/index",
+ "style": {
+ "navigationBarTitleText": "为你精选"
+ }
+ },
+ {
+ "path": "plant_user/index",
+ "style": {
+ "navigationBarTitleText": "个人主页"
+ }
+ },
+ {
+ "path": "plant_user_attention/index",
+ "style": {
+ "navigationBarTitleText": "我的关注"
+ }
+ },
+ {
+ "path": "plant_user_fans/index",
+ "style": {
+ "navigationBarTitleText": "我的粉丝"
+ }
+ }
+ ]
+ },
+ {
+ "root": "pages/columnGoods",
+ "name": "columnGoods",
+ "pages": [{
+ "path": "HotNewGoods/index",
+ "style": {
+ "navigationBarTitleText": "精品推荐"
+ }
+ },
+ {
+ "path": "goods_list/index",
+ "style": {
+ "navigationBarTitleText": "商品列表"
+ }
+ },
+ {
+ "path": "goods_coupon_list/index",
+ "style": {
+ "navigationBarTitleText": "优惠券商品"
+ }
+ },
+ {
+ "path": "goods_search/index",
+ "style": {
+ "navigationBarTitleText": "搜索商品"
+ }
+ },
+ {
+ "path": "goods_search_con/index",
+ "style": {
+ "navigationBarTitleText": "搜索商品"
+ }
+ }
+ ]
+ ,
+ "plugins": {
+ "live-player-plugin": {
+ "version": "1.3.2",
+ "provider": "wx2b03c6e691cd7370"
+ }
+ }
+ },
+ {
+ "root": "pages/chat",
+ "name": "chat",
+ "pages": [{
+ "path": "customer_list/index",
+ "style": {
+ "navigationBarTitleText": "消息中心"
+ }
+ },
+ {
+ "path": "customer_list/chat",
+ "style": {
+ "navigationBarTitleText": "客服聊天"
+ }
+ },
+ {
+ "path": "customer_login/index",
+ "style": {
+ "navigationBarTitleText": "客服登录"
+ }
+ },
+ {
+ "path": "customer_info/index",
+ "style": {
+ "navigationBarTitleText": "客户信息"
+ }
+ }
+ ]
+ },
+ {
+ "root": "pages/activity",
+ "name": "activity",
+ "pages": [{
+ "path": "goods_seckill/index",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "限时秒杀",
+ "navigationBarBackgroundColor": "#F2F2F2"
+ }
+ },
+ {
+ "path": "goods_seckill_details/index",
+ "style": {
+ "navigationBarTitleText": "秒杀详情",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "liveBroadcast/index",
+ "style": {
+ "navigationBarTitleText": "直播列表",
+ "navigationBarBackgroundColor": "#F2F2F2"
+ }
+ },
+ {
+ "path": "presell/index",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "预售列表"
+ // #ifdef MP || APP-PLUS
+ ,
+ "navigationBarBackgroundColor": "#F2F2F2"
+ // #endif
+ }
+ },
+ {
+ "path": "presell_details/index",
+ "style": {
+ "navigationBarTitleText": "预售商品详情",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "combination/index",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "拼团"
+ // #ifdef MP || APP-PLUS
+ ,
+ "navigationBarBackgroundColor": "#F2F2F2"
+ // #endif
+ }
+ },
+ {
+ "path": "combination_details/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "拼团详情",
+ "navigationStyle": "custom",
+ "navigationBarBackgroundColor": "#F2F2F2"
+ }
+ },
+ {
+ "path": "combination_status/index",
+ "style": {
+ "navigationBarTitleText": "拼团状态"
+ }
+ },
+ {
+ "path": "assist/index",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "助力列表",
+ "navigationBarBackgroundColor": "#F2F2F2"
+ }
+ },
+ {
+ "path": "assist_detail/index",
+ "style": {
+ "navigationBarTitleText": "发起助力"
+ }
+ },
+ {
+ "path": "assist_record/index",
+ "style": {
+ "navigationBarTitleText": "助力记录"
+ }
+ },
+ {
+ "path": "topic/index",
+ "style": {
+ "navigationBarTitleText": "活动专场"
+ }
+ },
+ {
+ "path": "topic_detail/index",
+ "style": {
+ "navigationBarTitleText": "主题活动"
+ }
+ },
+ {
+ "path": "lifeService/index",
+ "style": {
+ "navigationBarTitleText": "本地服务"
+ }
+ },
+ {
+ "path": "collect_coupons/index",
+ "style": {
+ "navigationBarTitleText": "领劵中心"
+ }
+ },
+ {
+ "path": "rank/index",
+ "style": {
+ "navigationBarTitleText": "热卖排行"
+ }
+ }
+ ]
+ },
+ {
+ "root": "pages/short_video",
+ "name": "shortVideo",
+ "pages": [{
+ "navigationBarTitleText": "短视频",
+ "enablePullDownRefresh": false,
+ //#ifdef APP
+ "path": "appSwiper/index",
+ //#endif
+ //#ifndef APP
+ "path": "nvueSwiper/index",
+ //#endif
+ "style": {
+ "navigationBarTitleText": "社区短视频",
+ "app-plus": {
+ "titleNView": false,
+ "bounce": "none"
+ }
+ }
+ }]
+ },
+ {
+ "root": "pages/points_mall",
+ "pages": [{
+ "path": "index",
+ "style": {
+ "navigationBarTextStyle": "white",
+ "navigationBarBackgroundColor": "#333333",
+ "navigationBarTitleText": "积分商城",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ },
+ {
+ "path": "integral_goods_list",
+ "style": {
+ "navigationBarTitleText": "商品列表",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ },
+ {
+ "path": "goods_selection",
+ "style": {
+ "navigationBarTitleText": "好物精选",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ },
+ {
+ "path": "integral_goods_details",
+ "style": {
+ "navigationBarTitleText": "商品详情",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ // #ifdef MP
+ ,
+ "disableScroll": true
+ // #endif
+ }
+ },
+ {
+ "path": "integral_order",
+ "style": {
+ "navigationBarTitleText": "积分订单",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ },
+ {
+ "path": "exchange_record",
+ "style": {
+ "navigationBarTitleText": "兑换记录",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ },{
+ "path": "integral_order_details",
+ "style": {
+ "navigationBarTitleText": "兑换订单详情"
+ }
+ }
+ ]
+ },
+ {
+ "root": "pages/annex",
+ "name": "annx",
+ "pages": [{
+ "path": "web_view/index",
+ "style": {
+ "navigationBarTitleText": "",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ }, {
+ "path": "vip_paid/index",
+ "style": {
+ "navigationBarTitleText": "开通会员",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ }, {
+ "path": "vip_center/index",
+ "style": {
+ "navigationBarTitleText": "会员中心",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ },
+ {
+ "path": "vip_grade/index",
+ "style": {
+ "navigationBarTitleText": "会员卡",
+ "navigationBarTextStyle": "white",
+ "navigationBarBackgroundColor": "#302F35",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ },
+ {
+ "path": "vip_clause/index",
+ "style": {
+ "navigationBarTitleText": "会员协议",
+ "app-plus": {
+ // #ifdef APP-PLUS
+ "titleNView": {
+ "type": "default"
+ }
+ // #endif
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "加载中...",
+ "navigationBarBackgroundColor": "#fff",
+ "backgroundColor": "#F8F8F8"
+ //#ifndef H5
+ ,
+ "titleNView": true
+ //#endif
+ //#ifdef H5
+ ,
+ "titleNView": false
+ //#endif
+ },
+ "tabBar": {
+ "color": "#282828",
+ "selectedColor": "#E93323",
+ "borderStyle": "white",
+ "backgroundColor": "#ffffff",
+ "list": [
+ {
+ "pagePath": "pages/index/index"
+ ,
+ "iconPath": "static/images/1-001.png",
+ "selectedIconPath": "static/images/1-002.png",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/goods_cate/goods_cate"
+ ,
+ "iconPath": "static/images/2-001.png",
+ "selectedIconPath": "static/images/2-002.png",
+ "text": "分类"
+ },
+ {
+ "pagePath": "pages/plant_grass/index",
+ "iconPath": "static/images/5-001.png",
+ "selectedIconPath": "static/images/5-002.png",
+ "text": "逛逛"
+ },
+ {
+ "pagePath": "pages/order_addcart/order_addcart",
+ "iconPath": "static/images/3-001.png",
+ "selectedIconPath": "static/images/3-002.png",
+ "text": "购物车"
+ },
+ {
+ "pagePath": "pages/user/index",
+ "iconPath": "static/images/4-001.png",
+ "selectedIconPath": "static/images/4-002.png",
+ "text": "我的"
+ }
+ ]
+ },
+ "condition": { //模式配置,仅开发期间生效
+ "current": 0, //当前激活的模式(list 的索引项)
+ "list": [{
+ "name": "", //模式名称
+ "path": "", //启动页面,必选
+ "query": "" //启动参数,在页面的onLoad函数里面得到
+ }]
+ },
+ "sitemapLocation": "sitemap.json"
+}
\ No newline at end of file
diff --git a/pages/activity/assist/index.vue b/pages/activity/assist/index.vue
new file mode 100644
index 0000000..389f3f0
--- /dev/null
+++ b/pages/activity/assist/index.vue
@@ -0,0 +1,314 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+ {{item.user_count}}人正在参与
+ 助力价: ¥{{item.assistSku ? item.assistSku[0].assist_price : ''}}
+
+ 发起助力
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/assist_detail/index.vue b/pages/activity/assist_detail/index.vue
new file mode 100644
index 0000000..fbbff21
--- /dev/null
+++ b/pages/activity/assist_detail/index.vue
@@ -0,0 +1,1161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看商品
+
+
+
+
+ {{bargainData.store_name}}
+
+
+ 助力价: ¥
+ {{bargainPrice}}
+
+ ¥{{old_price}}
+
+ {{bargainInfo.user_count_product}}人正在参与
+
+
+
+
+
+
+
+
+ 还差{{bargainInfo.assist_count-bargainInfo.yet_assist_count}}人
+
+
+
+
+
+
+
+ 恭喜您助力成功,快去支付
+
+ 立即支付
+ 查看订单
+ 抢更多商品
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已有
+ {{bargainInfo.yet_assist_count}}
+ 位好友成功助力
+
+
+
+
+ 为好友助力
+
+
+
+
+
+ 已成功助力好友
+
+
+
+ 商品助力次数上限
+
+ 我也要发起助力
+
+
+
+
+
+
+
+
+
+ 助力好友
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.nickname}}
+ {{item.create_time}}
+
+
+
+ 已助力
+
+
+
+
+ 点击加载更多
+
+
+
+
+
+
+
+ 商品详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存到手机
+
+
+ 长按图片可以保存到手机
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/assist_record/index.vue b/pages/activity/assist_record/index.vue
new file mode 100644
index 0000000..5676558
--- /dev/null
+++ b/pages/activity/assist_record/index.vue
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
+
+
+
+
{{ item.product.store_name }}
+
+
+
+ 助力价: ¥
+ {{item.assistSku[0].assist_price}}
+
+
+ ¥{{item.product.price}}
+
+
+
+
+
+
活动进行中
+
助力成功
+
活动已结束
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/collect_coupons/index.vue b/pages/activity/collect_coupons/index.vue
new file mode 100644
index 0000000..9ecfe73
--- /dev/null
+++ b/pages/activity/collect_coupons/index.vue
@@ -0,0 +1,382 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title || ''}}
+ {{item.create_time}}
+
+
+
+ {{item.title || ''}}
+
+
+
+ ¥ {{items.price}}
+
+
+
+
+ 通用券
+ 品类券
+ 跨店券
+ 店铺券
+
+
+ ¥{{parsePrice(item.coupon_price)}}
+
+ 无使用门槛
+ 满{{parsePrice(item.use_min_price)}}元可用
+
+
+ 立即领取
+
+ 去使用
+
+ 去使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/combination/index.vue b/pages/activity/combination/index.vue
new file mode 100644
index 0000000..fb94404
--- /dev/null
+++ b/pages/activity/combination/index.vue
@@ -0,0 +1,483 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.product.store_name}}
+
+
+
+ {{item.buying_count_num}}人团
+ 已拼{{item.sales ? item.sales : 0}}{{item.product.unit_name}}
+
+
+
+
+ 拼团价
+ ¥ {{ item.price }}
+
+ 去拼团
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/activity/combination_details/index.vue b/pages/activity/combination_details/index.vue
new file mode 100644
index 0000000..bcfabbf
--- /dev/null
+++ b/pages/activity/combination_details/index.vue
@@ -0,0 +1,2060 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{combinationInfo.price}}¥{{storeInfo.price}}
+
+
+
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{storeInfo.store_name}}
+
+
+ ¥{{combinationInfo.price}}
+ ¥{{storeInfo.price}}
+
+
+
+ 分享
+
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{storeInfo.store_name}}
+
+
+ 类型:{{combinationInfo.buying_count_num ? combinationInfo.buying_count_num : 0}}人团
+ 库存:{{combinationInfo.stock ? combinationInfo.stock : 0}}
+ 已拼:{{combinationInfo.sales ? combinationInfo.sales : 0}}{{storeInfo.unit_name ? storeInfo.unit_name : ''}}
+
+
+
+
+
+
+ 已拼{{combinationInfo.sales ? combinationInfo.sales : 0}}{{storeInfo.unit_name ? storeInfo.unit_name : ''}}|
+
+
+
+
+
+ {{item.nickname ? item.nickname : ''}}拼团成功
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.initiator.nickname ? item.initiator.nickname : ""}}
+
+
+
+ 还差{{item.buying_count_num - item.yet_buying_num}}人成团
+
+ 剩余
+
+
+
+
+ 去拼单
+
+
+
+
+
+ 查看更多
+ 收起
+
+
+
+
+ 拼团玩法
+
+
+
+ ①
+ 开团/参团
+
+
+
+ ②
+ 邀请好友
+
+
+
+
+ ③
+ 满员发货
+
+ 不满自动退款
+
+
+
+
+
+
+ {{attrTxt}}:
+ {{attrValue}}
+
+
+
+
+
+ 运费:
+ {{shippingValue}}
+
+
+
+
+
+ 保障:
+
+
+ {{item.guarantee_name ? item.guarantee_name : ''}}
+
+
+
+
+
+
+
+
+ 参数:
+
+ {{item.name}}
+ ...
+
+
+
+
+
+
+
+ 用户评价({{replyCount}})
+
+ {{replyChance}}好评率
+
+
+
+
+
+
+
+
+
+
+ 种草秀
+
+ 查看全部
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{storeInfo.merchant.mer_name}}
+ {{storeInfo.merchant.type_name}}
+ 自营
+
+
+ {{storeInfo.merchant.care_count < 10000 ? storeInfo.merchant.care_count : (storeInfo.merchant.care_count/10000).toFixed(2)+'万'}}人关注
+
+
+ 进店
+
+
+
+ 商品描述{{storeInfo.merchant.product_score}}
+
+
+ 卖家服务{{storeInfo.merchant.service_score}}
+
+
+ 物流服务{{storeInfo.merchant.postage_score}}
+
+
+
+
+ 店铺推荐
+
+
+
+
+
+ {{item.store_name}}
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+ 产品介绍
+
+
+
+
+
+ 价格说明
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存到手机
+
+
+ 长按图片可以保存到手机
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/combination_poster/index.vue b/pages/activity/combination_poster/index.vue
new file mode 100644
index 0000000..77cc8a3
--- /dev/null
+++ b/pages/activity/combination_poster/index.vue
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
+
+
+
+ 保存到手机
+
+
+ 长按图片可以保存到手机
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/combination_status/index.vue b/pages/activity/combination_status/index.vue
new file mode 100644
index 0000000..de55a2e
--- /dev/null
+++ b/pages/activity/combination_status/index.vue
@@ -0,0 +1,955 @@
+
+
+
+
+
+
+
+ 剩余
+
+ 结束
+
+
+
+ 恭喜您拼团成功
+ 还差{{ count }}人,拼团失败
+ 拼团中,还差{{ count }}人拼团成功
+
+
+
+
+
+
+
+ {{ iShidden ? '收起' : '查看全部' }}
+
+
+
+ 邀请好友参团
+
+ 我要参团
+ 再次开团
+
+
+ 取消开团
+
+
+ 查看订单信息
+
+
+
+
+
+ 大家都在拼
+
+ 更多拼团
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/goods_seckill/index.vue b/pages/activity/goods_seckill/index.vue
new file mode 100644
index 0000000..c8c606d
--- /dev/null
+++ b/pages/activity/goods_seckill/index.vue
@@ -0,0 +1,433 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.time}}
+ {{item.state}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+ ¥
+ {{item.price}}
+ ¥{{item.ot_price}}
+
+ 限量 {{item.stock}}{{item.unit_name || ''}}
+
+
+ 已抢{{item.percent}}
+
+
+ 马上抢
+ 待开始
+ 已结束
+
+
+
+
+
+
+
+ 暂无商品,去看点什么吧
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/goods_seckill_details/index.vue b/pages/activity/goods_seckill_details/index.vue
new file mode 100644
index 0000000..3f76fc4
--- /dev/null
+++ b/pages/activity/goods_seckill_details/index.vue
@@ -0,0 +1,2019 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+ ¥{{storeInfo.price}}¥{{storeInfo.ot_price}}
+
+
+ 距秒杀结束仅剩
+
+
+
+
+
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{storeInfo.store_name}}
+
+
+
+ 分享
+
+
+
+ 市场价:¥{{storeInfo.ot_price}}
+ 库存:{{storeInfo.stock}}{{storeInfo.unit_name}}
+ 销量:{{storeInfo.sales}}{{storeInfo.unit_name}}
+
+
+
+ {{attrTxt}}:
+ {{attrValue}}
+
+
+
+
+
+ 运费:
+ {{shippingValue}}
+
+
+
+
+
+ 保障:
+
+
+ {{item.guarantee_name ? item.guarantee_name : ''}}
+
+
+
+
+
+
+
+ 参数:
+
+ {{item.name}}
+ ...
+
+
+
+
+
+
+
+ 用户评价({{replyCount}})
+
+ {{replyChance}}好评率
+
+
+
+
+
+
+
+
+
+
+ 种草秀
+
+ 查看全部
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{storeInfo.merchant.mer_name}}
+ {{storeInfo.merchant.type_name}}
+ 自营
+
+
+ {{storeInfo.merchant.care_count < 10000 ? storeInfo.merchant.care_count : (storeInfo.merchant.care_count/10000).toFixed(2)+'万'}}人关注
+
+
+ 进店
+
+
+
+ 商品描述{{storeInfo.merchant.product_score}}
+
+
+ 卖家服务{{storeInfo.merchant.service_score}}
+
+
+ 物流服务{{storeInfo.merchant.postage_score}}
+
+
+
+
+ 店铺推荐
+
+
+
+
+
+ {{item.store_name}}
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+ 产品介绍
+
+
+
+
+
+ 价格说明
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存到手机
+
+
+ 长按图片可以保存到手机
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/lifeService/index.vue b/pages/activity/lifeService/index.vue
new file mode 100644
index 0000000..3393605
--- /dev/null
+++ b/pages/activity/lifeService/index.vue
@@ -0,0 +1,669 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{recommend_address}}
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.mer_name}}
+ {{item.type_name}}
+ 自营
+
+
+
+ {{item.care_count<10000 ? item.care_count : (item.care_count/10000).toFixed(2)+'万'}}人关注
+
+
+
+
+ {{item.distance}}
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{itemn.price}}
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+ 暂无店铺,快去搜索其他店铺吧
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/liveBroadcast/index.vue b/pages/activity/liveBroadcast/index.vue
new file mode 100644
index 0000000..a4a6f63
--- /dev/null
+++ b/pages/activity/liveBroadcast/index.vue
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 直播中
+
+
+
+ 回放
+
+
+
+ 已结束
+
+
+
+ 预告
+
+
+ {{ item.show_time }}
+
+
+ {{ item.name }}
+ {{ item.anchor_name }}
+
+
+
+
+ ¥{{itm.goods.price}}
+ +{{ item.broadcast.length - 2 }}
+
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/presell/index.vue b/pages/activity/presell/index.vue
new file mode 100644
index 0000000..5eadf7f
--- /dev/null
+++ b/pages/activity/presell/index.vue
@@ -0,0 +1,429 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+
+ 已预定{{item.seles ? item.seles : 0}}{{item.product.unit_name}}
+ 暂未开始
+
+
+
+ 满{{item.coupon.use_min_price}}减{{item.coupon.coupon_price}}
+
+
+
+
+ 预售价
+ ¥ {{ item.price }}
+
+ {{ active === 1 ? '立即预定' : '已结束' }}
+
+ 开售时间
+ {{ new Date(item.start_time.replace(/-/g,"/")).getMonth()+1 }}月
+ {{ new Date(item.start_time.replace(/-/g,"/")).getDate() }}日
+ {{ new Date(item.start_time.replace(/-/g,"/")).getHours()<10?'0'+
+ new Date(item.start_time.replace(/-/g,"/")).getHours():new Date(item.start_time.replace(/-/g,"/")).getHours() || '00'}}:
+ {{ new Date(item.start_time.replace(/-/g,"/")).getMinutes()<10?"0" + new Date(item.start_time.replace(/-/g,"/")).getMinutes():
+ new Date(item.start_time.replace(/-/g,"/")).getMinutes() || '00'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/presell_details/index.vue b/pages/activity/presell_details/index.vue
new file mode 100644
index 0000000..e92535f
--- /dev/null
+++ b/pages/activity/presell_details/index.vue
@@ -0,0 +1,2432 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{presellInfo.price}}
+
+
+
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{presellInfo.store_name}}
+
+ ¥
+ {{presellInfo.price}}
+ 预售价
+
+
+
+ 分享
+
+
+
+ 市场价:¥{{storeInfo.price || ''}}
+ 已预定:{{presellInfo.seles}}{{ storeInfo.unit_name }}
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{presellInfo.store_name}}
+
+
+ 预售活动时间:
+
+
+ {{ new Date(presellInfo.start_time.replace(/-/g,"/")).getMonth()+1 }}月{{ new Date(presellInfo.start_time.replace(/-/g,"/")).getDate() }}日{{ new Date(presellInfo.start_time.replace(/-/g,"/")).getHours() }}时{{ new Date(presellInfo.start_time.replace(/-/g,"/")).getMinutes()}}分
+ ~
+
+ {{ new Date(presellInfo.end_time.replace(/-/g,"/")).getMonth()+1 }}月{{ new Date(presellInfo.end_time.replace(/-/g,"/")).getDate() }}日{{ new Date(presellInfo.end_time.replace(/-/g,"/")).getHours() }}时{{ new Date(presellInfo.end_time.replace(/-/g,"/")).getMinutes()}}分
+
+
+
+ 支付尾款时间:
+
+
+ {{ new Date(presellInfo.final_start_time.replace(/-/g,"/")).getMonth()+1 }}月{{ new Date(presellInfo.final_start_time.replace(/-/g,"/")).getDate() }}日{{ new Date(presellInfo.final_start_time.replace(/-/g,"/")).getHours() }}时{{ new Date(presellInfo.final_start_time.replace(/-/g,"/")).getMinutes()}}分
+ ~
+
+ {{ new Date(presellInfo.final_end_time.replace(/-/g,"/")).getMonth()+1 }}月{{ new Date(presellInfo.final_end_time.replace(/-/g,"/")).getDate() }}日{{ new Date(presellInfo.final_end_time.replace(/-/g,"/")).getHours() }}时{{ new Date(presellInfo.final_end_time.replace(/-/g,"/")).getMinutes()}}分
+
+
+
+ 预计发货时间:
+ 支付成功后{{ presellInfo.delivery_day }}天内发货
+ 付尾款成功后{{ presellInfo.delivery_day }}天内发货
+
+
+ 预计发货时间:
+ 预售结束后{{ presellInfo.delivery_day }}天内发货
+
+
+
+
+ 优惠券:
+ 满{{item.use_min_price}}减{{item.coupon_price}}
+
+
+
+
+
+ {{attrTxt}}:
+ {{attrValue}}
+
+
+
+
+
+ 运费:
+ {{shippingValue}}
+
+
+
+
+
+ 保障:
+
+
+ {{item.guarantee_name ? item.guarantee_name : ''}}
+
+
+
+
+
+
+
+
+ 参数:
+
+ {{item.name}}
+ ...
+
+
+
+
+
+
+ 流程:
+
+
+ 定金
+ 尾款
+ 发货
+
+
+
+
+
+
+ 用户评价({{replyCount}})
+
+ {{replyChance}}好评率
+
+
+
+
+
+
+
+
+
+
+ 种草秀
+
+ 查看全部
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{storeInfo.merchant.mer_name}}
+ {{storeInfo.merchant.type_name}}
+ 自营
+
+
+ {{storeInfo.merchant.care_count < 10000 ? storeInfo.merchant.care_count : (storeInfo.merchant.care_count/10000).toFixed(2)+'万'}}人关注
+
+
+ 进店
+
+
+
+ 商品描述{{storeInfo.merchant.product_score}}
+
+
+ 卖家服务{{storeInfo.merchant.service_score}}
+
+
+ 物流服务{{storeInfo.merchant.postage_score}}
+
+
+
+
+ 店铺推荐
+
+
+
+
+
+ {{item.store_name}}
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+ 产品介绍
+
+
+
+
+
+ 价格说明
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存到手机
+
+
+ 长按图片可以保存到手机
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/rank/index.vue b/pages/activity/rank/index.vue
new file mode 100644
index 0000000..f633184
--- /dev/null
+++ b/pages/activity/rank/index.vue
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+ {{index < 9 ? '0'+(index+1) : index+1}}
+
+
+
+
+
+ {{item.store_name}}
+ {{item.sales>10000 ? (item.sales/10000)+'万' : item.sales}}人买过
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/static/images/no_product.png b/pages/activity/static/images/no_product.png
new file mode 100644
index 0000000..19a208d
Binary files /dev/null and b/pages/activity/static/images/no_product.png differ
diff --git a/pages/activity/static/images/poster-bag.png b/pages/activity/static/images/poster-bag.png
new file mode 100644
index 0000000..c988305
Binary files /dev/null and b/pages/activity/static/images/poster-bag.png differ
diff --git a/pages/activity/static/images/presell_text.png b/pages/activity/static/images/presell_text.png
new file mode 100644
index 0000000..561710f
Binary files /dev/null and b/pages/activity/static/images/presell_text.png differ
diff --git a/pages/activity/static/images/rank.png b/pages/activity/static/images/rank.png
new file mode 100644
index 0000000..4aaef2a
Binary files /dev/null and b/pages/activity/static/images/rank.png differ
diff --git a/pages/activity/static/images/rank_cate.png b/pages/activity/static/images/rank_cate.png
new file mode 100644
index 0000000..fb2af94
Binary files /dev/null and b/pages/activity/static/images/rank_cate.png differ
diff --git a/pages/activity/static/images/rank_num.png b/pages/activity/static/images/rank_num.png
new file mode 100644
index 0000000..0d98a69
Binary files /dev/null and b/pages/activity/static/images/rank_num.png differ
diff --git a/pages/activity/static/images/vacancy.png b/pages/activity/static/images/vacancy.png
new file mode 100644
index 0000000..fef8aff
Binary files /dev/null and b/pages/activity/static/images/vacancy.png differ
diff --git a/pages/activity/topic/index.vue b/pages/activity/topic/index.vue
new file mode 100644
index 0000000..55d02d1
--- /dev/null
+++ b/pages/activity/topic/index.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无活动专场哦~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/activity/topic_detail/index.vue b/pages/activity/topic_detail/index.vue
new file mode 100644
index 0000000..d5dfb11
--- /dev/null
+++ b/pages/activity/topic_detail/index.vue
@@ -0,0 +1,461 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+
+
+ ¥{{item.price}}
+
+ {{item.rate}}评分 {{item.reply_count}}条评论
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/business/index.vue b/pages/admin/business/index.vue
new file mode 100644
index 0000000..0c15581
--- /dev/null
+++ b/pages/admin/business/index.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/cancellate_result/index.vue b/pages/admin/cancellate_result/index.vue
new file mode 100644
index 0000000..cc9d1ea
--- /dev/null
+++ b/pages/admin/cancellate_result/index.vue
@@ -0,0 +1,471 @@
+
+
+
+
+
+
+ 订单号:{{orderData.order_sn}}
+ 上一步
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.cart_info.product.store_name}}
+
+ ¥{{goods.cart_info.productAttr.price}}
+
+
+ x{{goods.product_num}}
+
+ -
+ {{goods.refund_num}}
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/delivery/index.vue b/pages/admin/delivery/index.vue
new file mode 100644
index 0000000..50a1fab
--- /dev/null
+++ b/pages/admin/delivery/index.vue
@@ -0,0 +1,849 @@
+
+
+
+
+ 订单号:{{ delivery.order_sn }}
+
+ {{ delivery.user && delivery.user.nickname }}
+
+
+
+
+ {{ delivery.real_name }}{{ delivery.user && delivery.user_phone }}
+
+ {{ delivery.user_address }}
+
+
+
+
+
+
+
+ 发货方式
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+ 快递公司
+
+
+ {{logistics[seIndex].label}}
+
+
+
+
+ 快递单号
+
+
+
+
+
+
+
+
+
+
+
+ 快递公司
+
+
+ {{logistics[seIndex].label}}
+
+
+
+
+ 电子面单
+
+
+ {{expTemp[expIndex].title}}
+
+
预览
+
+
+
+ 寄件人姓名
+
+
+
+ 寄件人电话
+
+
+
+ 寄件人地址
+
+
+
+
+
+
+
+ 送货人姓名
+
+
+
+ 送货人电话
+
+
+
+
+
+ 发货点
+
+
+ {{storeList[storeIndex] && storeList[storeIndex].label}}
+
+
+
+
+ 包裹重量
+
+
+
+ 配送备注
+
+
+
+
+
+ 发货备注
+
+
+
+
+
+ 分单发货
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.cart_info.product.store_name}}
+ {{item.cart_info.productAttr.sku}}
+ ¥{{item.cart_info.productAttr.price}}
+
+ -
+ {{item.split_num}}
+ +
+
+
+
+
+
+
+
+
+ 共{{delivery.orderProduct.length}}件商品
+
+
+
+
+
+
+ {{item.cart_info.product.store_name}}
+ {{item.cart_info.productAttr.sku}}
+
+
+ ¥{{item.cart_info.productAttr.price}}
+ x{{item.product_num}}
+ {{item.product_num-item.refund_num}}件{{item.is_refund==1?'退款中' : item.is_refund==2 ? '已退款' : item.is_refund==3?'全部退款':''}}
+
+
+
+
+
+
+
+
+ 确认提交
+
+
+
+
+
diff --git a/pages/admin/goods_details/index.vue b/pages/admin/goods_details/index.vue
new file mode 100644
index 0000000..f652e1c
--- /dev/null
+++ b/pages/admin/goods_details/index.vue
@@ -0,0 +1,1419 @@
+
+
+
+
+
+
+
+
+ ¥{{storeInfo.price}}¥{{storeInfo.ot_price}}
+
+
+ 距秒杀结束仅剩
+
+
+
+
+
+
+
+
+ ¥
+ {{storeInfo.price}}
+ 预售价
+
+
+
+
+ 市场价:¥{{storeInfo.ot_price || ''}}
+ 已预定:0{{ storeInfo.unit_name }}
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{storeInfo.store_name}}
+
+
+ 预售活动时间:
+
+
+ {{ new Date(storeInfo.start_time.replace(/-/g,"/")).getMonth()+1 }}月{{ new Date(storeInfo.start_time.replace(/-/g,"/")).getDate() }}日{{ new Date(storeInfo.start_time.replace(/-/g,"/")).getHours() }}时{{ new Date(storeInfo.start_time.replace(/-/g,"/")).getMinutes()}}分
+ ~
+
+ {{ new Date(storeInfo.p_end_time.replace(/-/g,"/")).getMonth()+1 }}月{{ new Date(storeInfo.p_end_time.replace(/-/g,"/")).getDate() }}日{{ new Date(storeInfo.p_end_time.replace(/-/g,"/")).getHours() }}时{{ new Date(storeInfo.p_end_time.replace(/-/g,"/")).getMinutes()}}分
+
+
+
+ 支付尾款时间:
+
+
+ {{ new Date(storeInfo.final_start_time.replace(/-/g,"/")).getMonth()+1 }}月{{ new Date(storeInfo.final_start_time.replace(/-/g,"/")).getDate() }}日{{ new Date(storeInfo.final_start_time.replace(/-/g,"/")).getHours() }}时{{ new Date(storeInfo.final_start_time.replace(/-/g,"/")).getMinutes()}}分
+ ~
+
+ {{ new Date(storeInfo.final_end_time.replace(/-/g,"/")).getMonth()+1 }}月{{ new Date(storeInfo.final_end_time.replace(/-/g,"/")).getDate() }}日{{ new Date(storeInfo.final_end_time.replace(/-/g,"/")).getHours() }}时{{ new Date(storeInfo.final_end_time.replace(/-/g,"/")).getMinutes()}}分
+
+
+
+ 支付成功后{{ storeInfo.delivery_day }}天内发货
+ 付尾款成功后{{ storeInfo.delivery_day }}天内发货
+
+ 预售结束后{{ storeInfo.delivery_day }}天内发货
+
+
+
+
+
+
+ ¥{{storeInfo.price}}
+ ¥{{storeInfo.ot_price}}
+
+
+
+
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{storeInfo.store_name}}
+
+
+ 类型:{{storeInfo.buying_count_num ? storeInfo.buying_count_num : 0}}人团
+ 库存:{{storeInfo.stock ? storeInfo.stock : 0}}
+ 已拼:{{storeInfo.sales ? storeInfo.sales : 0}}{{storeInfo.unit_name ? storeInfo.unit_name : ''}}
+
+
+
+
+
+
+
+ 已拼{{storeInfo.sales ? storeInfo.sales : 0}}{{storeInfo.unit_name ? storeInfo.unit_name : ''}}|
+
+
+
+
+
+ {{item.nickname ? item.nickname : ''}}拼团成功
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.initiator.nickname ? item.initiator.nickname : ""}}
+
+
+
+ 还差{{item.buying_count_num - item.yet_buying_num}}人成团
+
+ 剩余
+
+
+
+
+ 去拼单
+
+
+
+
+
+ 查看更多
+ 收起
+
+
+
+
+ 拼团玩法
+
+
+
+ ①
+ 开团/参团
+
+
+
+ ②
+ 邀请好友
+
+
+
+
+ ③
+ 满员发货
+
+ 不满自动退款
+
+
+
+
+
+
+
+ ¥
+ {{storeInfo.price}}
+
+
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营{{storeInfo.store_name ? storeInfo.store_name : ''}}
+
+
+ 原价:¥{{storeInfo.ot_price ? storeInfo.ot_price : ''}}
+ 库存:{{storeInfo.stock ? storeInfo.stock : 0}}{{storeInfo.unit_name ? storeInfo.unit_name : ''}}
+ 销量:{{storeInfo.sales ? storeInfo.sales : 0}}{{storeInfo.unit_name ? storeInfo.unit_name : ''}}
+
+
+
+ {{attrTxt}}:
+ {{attrValue}}
+
+
+
+
+
+ 参数:
+
+ {{item.name}}
+ ...
+
+
+
+
+
+
+ 运费:
+ {{shippingValue}}
+
+
+
+
+
+ 保障:
+
+
+ {{item.guarantee_name ? item.guarantee_name : ''}}
+
+
+
+
+
+
+
+ 流程:
+
+
+ 定金
+ 尾款
+ 发货
+
+
+
+
+
+
+
+
+
+
+
+
+ {{storeInfo.merchant.mer_name ? storeInfo.merchant.mer_name : ''}}
+ {{storeInfo.merchant.type_name}}
+ 自营
+
+
+ {{storeInfo.merchant.care_count < 10000 ? storeInfo.merchant.care_count : (storeInfo.merchant.care_count/10000).toFixed(2)+'万'}}人关注
+
+ 0人关注
+
+
+
+
+ 商品描述{{storeInfo.merchant.product_score}}
+
+
+ 卖家服务{{storeInfo.merchant.service_score}}
+
+
+ 物流服务{{storeInfo.merchant.postage_score}}
+
+
+
+
+
+ 产品介绍
+
+
+ {{description.content.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/order/index.vue b/pages/admin/order/index.vue
new file mode 100644
index 0000000..90fc563
--- /dev/null
+++ b/pages/admin/order/index.vue
@@ -0,0 +1,344 @@
+
+
+
+
+
+
+ 数据统计
+
+
+
+ {{ orderData.today.payPrice }}
+ 今日成交额
+
+
+ {{ orderData.yesterday.payPrice }}
+ 昨日成交额
+
+
+ {{ orderData.month.payPrice }}
+ 本月成交额
+
+
+ {{ orderData.today.orderNum}}
+ 今日订单数
+
+
+ {{ orderData.yesterday.orderNum }}
+ 昨日订单数
+
+
+ {{ orderData.month.orderNum}}
+ 本月订单数
+
+
+
+
+
+ 详细数据
+
+
+ 日期
+ 订单数
+ 成交额
+
+
+
+ {{ item.day }}
+ {{ item.total }}
+ {{ item.pay_price }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/orderDetail/index.vue b/pages/admin/orderDetail/index.vue
new file mode 100644
index 0000000..bca12d6
--- /dev/null
+++ b/pages/admin/orderDetail/index.vue
@@ -0,0 +1,923 @@
+
+
+
+
+
+ {{ (orderInfo.user && orderInfo.user.nickname) || '' }}
+
+
+
+ {{ orderInfo.real_name }}{{ orderInfo.user_phone }}
+
+ {{ orderInfo.user_address }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.cart_info.product.store_name }}
+
+ {{ item.cart_info.productAttr.sku || '默认' }}
+
+
+
+ ¥{{ item.cart_info.productAttr.price }}
+ x{{ item.product_num }}
+ (-{{item.product_num-item.refund_num}})
+
+ ¥{{ item.cart_info.productAttr.ot_price }}
+
+
+
+
+
+ 共{{ orderInfo.total_num }}件商品,已支付
+ ¥{{ orderInfo.pay_price }} ( 邮费 ¥{{orderInfo.pay_postage}})
+
+
+
+ 订单编号:
+
+ {{ orderInfo.order_sn }}
+
+
+
+
+ 复制
+
+
+
+
+ 下单时间:
+ {{ orderInfo.create_time }}
+
+
+ 支付状态:
+
+ {{ orderInfo.paid == 1 ? "已支付" : "未支付" }}
+
+
+
+ 支付方式:
+ {{ orderInfo.pay_type == 0 ? "余额支付" : (orderInfo.pay_type == 1 || orderInfo.pay_type == 2 || orderInfo.pay_type == 3) ? "微信支付" : "支付宝支付" }}
+
+
+ 买家留言:
+ {{ orderInfo.mark }}
+
+
+
+
+ {{index}}:
+ {{item}}
+
+
+
+
+
+
+
+ 支付金额:
+ ¥{{ orderInfo.total_price }}
+
+
+ 优惠券抵扣:
+ -¥{{ orderInfo.coupon_price }}
+
+
+ 积分抵扣:
+ -¥{{ orderInfo.integral_price }}
+
+
+ 运费:
+ ¥{{ orderInfo.pay_postage }}
+
+
+ 实付款:¥{{ orderInfo.pay_price }}
+
+
+
+
+ 配送方式:
+
+ 快递
+
+ 送货
+
+
+ 快递公司:
+ 送货人:
+ 发货方式:
+ {{ orderInfo.delivery_name ? orderInfo.delivery_name : '' }}
+
+
+ 快递单号:
+ 送货人电话:
+ 卡密信息:
+
+ {{ orderInfo.delivery_id ? orderInfo.delivery_id : ''}}
+
+ 复制
+
+
+ 复制
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/orderList/index.vue b/pages/admin/orderList/index.vue
new file mode 100644
index 0000000..3cdc10d
--- /dev/null
+++ b/pages/admin/orderList/index.vue
@@ -0,0 +1,776 @@
+
+
+
+
+
+
+
+ {{ item.order.activity_type == 1 ? '秒杀' : item.order.activity_type == 2 ? '预售' : item.order.activity_type == 3 ? '助力' : item.order.activity_type == 4 ? '拼团' : item.order.activity_type == 10 ? '套餐' :'' }}
+
+ 退款单号:{{ item.refund_order_sn }}
+ 申请时间:{{ item.create_time }}
+
+
+
+
+
+
+
+
+
+ {{ val.product.cart_info.product&&val.product.cart_info.product.store_name }}
+
+
+ {{ val.product.cart_info.productAttr&&val.product.cart_info.productAttr.sku || "默认" }}
+
+
+ 退款:¥{{ val.refund_price }}
+
+
+
+
+ x{{ val.refund_num }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 订单备注
+ 立即退款
+ 查看物流
+ 确认收货
+
+
+
+
+
+
+
+
+ {{ item.activity_type == 1 ? '秒杀' : item.activity_type == 2 ? '预售' : item.activity_type == 3 ? '助力' : item.activity_type == 4 ? '拼团' : item.activity_type == 10 ? '套餐' :'' }}
+
+ 订单号:{{ item.order_sn }}
+ 下单时间:{{ item.create_time }}
+ {{item.refunding==1 ? '退款中' : item.refunding==2 ? '部分退款' : '全部退款'}}
+
+
+
+
+
+
+
+
+
+
+ {{ val.cart_info.product.store_name }}
+
+
+ {{ val.cart_info.productAttr&&val.cart_info.productAttr.sku || "默认" }}
+
+
+
+
+ ¥{{ val.cart_info.productAttr.price }}
+ x{{ val.product_num }}
+
+
+
+
+
+
+
+
+ 共{{ item.total_num }}件商品,
+ 应
+ 已
+ 支付
+ ¥{{ item.pay_price }} (邮费 ¥{{ item.pay_postage}})
+
+
+
+
+
+
+ 一键改价
+
+ 订单备注
+ 去发货
+ 去核销
+
+
+
+
+
+
+
+ 暂无订单~
+
+
+
+
+
+ 订单备注
+
+
+
+
+
+
+ 确认提交
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/orderRefund/index.vue b/pages/admin/orderRefund/index.vue
new file mode 100644
index 0000000..c4a7db1
--- /dev/null
+++ b/pages/admin/orderRefund/index.vue
@@ -0,0 +1,265 @@
+
+
+
+
+ 审核
+
+ 同意
+ 拒绝
+
+
+
+
+
+ 商品实际支付(元)
+
+ {{orderInfo.total_price}}
+
+
+
+ 运费实际支付(元)
+
+ {{orderInfo.total_postage}}
+
+
+
+ 商品购买数量(件)
+
+ {{orderInfo.total_num}}
+
+
+
+ 申请退款金额(元)
+
+ {{orderInfo.refund_price}}
+
+
+
+ 申请退款数量(件)
+
+ {{orderInfo.refund_num}}
+
+
+
+
+
+ 收货人
+
+
+
+
+
+ 收货地址
+
+
+
+ 手机号
+
+
+
+
+
+
+
+ 拒绝理由
+
+
+
+
+ 确认提交
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/admin/order_cancellation/index.vue b/pages/admin/order_cancellation/index.vue
new file mode 100644
index 0000000..f936e8e
--- /dev/null
+++ b/pages/admin/order_cancellation/index.vue
@@ -0,0 +1,384 @@
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+ 扫码核销
+
+
+
+
+ 扫码核销
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/refundDetail/index.vue b/pages/admin/refundDetail/index.vue
new file mode 100644
index 0000000..971728d
--- /dev/null
+++ b/pages/admin/refundDetail/index.vue
@@ -0,0 +1,729 @@
+
+
+
+
+ {{ orderInfo.user && orderInfo.user.nickname }}
+
+
+
+ {{ orderInfo.mer_delivery_user }}{{ orderInfo.phone }}
+
+ {{ orderInfo.mer_delivery_address }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.product.cart_info.product.store_name }}
+
+ {{ item.product.cart_info.productAttr.sku }}
+ ¥{{ item.product.cart_info.productAttr.price }}
+
+
+
+ x{{ item.refund_num }}
+
+
+
+
+
+ 退款单编号:
+
+ {{ orderInfo.refund_order_sn }}
+
+
+
+
+ 复制
+
+
+
+
+ 退款金额:
+ {{ orderInfo.refund_price }}
+
+
+ 申请件数:
+ {{ orderInfo.refund_num }}
+
+
+ 申请时间:
+ {{ orderInfo.create_time }}
+
+
+ 退款原因:
+ {{ orderInfo.refund_message }}
+
+
+ 备注信息:
+ {{ orderInfo.mark }}
+
+
+ 退款凭证:
+
+
+
+
+
+
+
+
+
+
+
+
+ 订单备注
+
+
+
+
+
+
+ 确认提交
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/refundList/index.vue b/pages/admin/refundList/index.vue
new file mode 100644
index 0000000..3894ec8
--- /dev/null
+++ b/pages/admin/refundList/index.vue
@@ -0,0 +1,440 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.cart_info.product.store_name}}
+ {{ goods.cart_info.productAttr.sku }}
+
+
+
+ ¥{{goods.cart_info.productAttr.price}}
+ x{{goods.product_num}}
+
+
+ -
+ {{goods.refund_num}}
+ +
+
+
+
+
+
+
+
+
+ 退款金额
+
+
+
+ 退款原因
+
+
+
+ {{qsArray[qsIndex]}}
+
+
+
+
+
+
+ 备注说明
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/scan/index.vue b/pages/admin/scan/index.vue
new file mode 100644
index 0000000..fe0777d
--- /dev/null
+++ b/pages/admin/scan/index.vue
@@ -0,0 +1,351 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击选择图片
+
+
+
+
+
+
+
+
+
+ 图片上传成功
+ 继续上传
+
+
+
+
+
+
+
+
diff --git a/pages/admin/statistics/index.vue b/pages/admin/statistics/index.vue
new file mode 100644
index 0000000..0b4eb69
--- /dev/null
+++ b/pages/admin/statistics/index.vue
@@ -0,0 +1,683 @@
+
+
+
+
+
+
+ 今天
+
+
+ 昨天
+
+
+ 最近7天
+
+
+ 本月
+
+
+
+ 自定义
+
+
+
+
+
+ {{ title }}{{ where.type == 1 ? "营业额(元)" : "订单量(份)" }}
+
+
{{ time_price }}
+
{{ time_price }}
+
+
+ {{ title }}增长率:{{ increase_time_status === 1 ? "" : "-" }}{{ growth_rate }}%
+
+
+
+ {{ title }}增长:{{ increase_time_status === 1 ? "" : "-" }}{{ increase_time }}
+
+
+
+
+
+
+ 单位({{where.type == 1?'元':'份'}})
+
+
+
+
+
+ 详细数据
+
+
+
+
+
{{ item.day }}
+
{{ item.total }}
+
{{ item.pay_price }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/admin/storeDiy/index.vue b/pages/admin/storeDiy/index.vue
new file mode 100644
index 0000000..2f64eab
--- /dev/null
+++ b/pages/admin/storeDiy/index.vue
@@ -0,0 +1,1168 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ select.selected ? '评分' : '默认' }}
+
+
+
+
+ 销量
+
+
+
+ 价格
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ 精选
+
+
+ 新品
+
+
+ 活动
+
+
+ 领券
+
+
+
+
+
+
+
+
+
+ {{store.type_name}}
+ 自营
+ {{ store.mer_name }}
+
+
+
+
+
+
+ {{ score.number.toFixed(1) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ select.selected ? '评分' : '默认' }}
+
+
+
+
+
+ 销量
+
+
+
+
+ 价格
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ 精选
+
+
+ 新品
+
+
+ 活动
+
+
+ 领券
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/annex/static/big-bg.png b/pages/annex/static/big-bg.png
new file mode 100644
index 0000000..4d1a47e
Binary files /dev/null and b/pages/annex/static/big-bg.png differ
diff --git a/pages/annex/static/equity_icon1.png b/pages/annex/static/equity_icon1.png
new file mode 100644
index 0000000..2838933
Binary files /dev/null and b/pages/annex/static/equity_icon1.png differ
diff --git a/pages/annex/static/equity_icon11.png b/pages/annex/static/equity_icon11.png
new file mode 100644
index 0000000..9a96457
Binary files /dev/null and b/pages/annex/static/equity_icon11.png differ
diff --git a/pages/annex/static/equity_icon2.png b/pages/annex/static/equity_icon2.png
new file mode 100644
index 0000000..77a8675
Binary files /dev/null and b/pages/annex/static/equity_icon2.png differ
diff --git a/pages/annex/static/equity_icon21.png b/pages/annex/static/equity_icon21.png
new file mode 100644
index 0000000..8954f5e
Binary files /dev/null and b/pages/annex/static/equity_icon21.png differ
diff --git a/pages/annex/static/equity_icon3.png b/pages/annex/static/equity_icon3.png
new file mode 100644
index 0000000..a202a7b
Binary files /dev/null and b/pages/annex/static/equity_icon3.png differ
diff --git a/pages/annex/static/equity_icon31.png b/pages/annex/static/equity_icon31.png
new file mode 100644
index 0000000..3e65910
Binary files /dev/null and b/pages/annex/static/equity_icon31.png differ
diff --git a/pages/annex/static/equity_icon4.png b/pages/annex/static/equity_icon4.png
new file mode 100644
index 0000000..139d26b
Binary files /dev/null and b/pages/annex/static/equity_icon4.png differ
diff --git a/pages/annex/static/equity_icon41.png b/pages/annex/static/equity_icon41.png
new file mode 100644
index 0000000..5163928
Binary files /dev/null and b/pages/annex/static/equity_icon41.png differ
diff --git a/pages/annex/static/equity_icon5.png b/pages/annex/static/equity_icon5.png
new file mode 100644
index 0000000..d8c71ad
Binary files /dev/null and b/pages/annex/static/equity_icon5.png differ
diff --git a/pages/annex/static/equity_icon51.png b/pages/annex/static/equity_icon51.png
new file mode 100644
index 0000000..abf21fe
Binary files /dev/null and b/pages/annex/static/equity_icon51.png differ
diff --git a/pages/annex/static/equity_icon6.png b/pages/annex/static/equity_icon6.png
new file mode 100644
index 0000000..f0db435
Binary files /dev/null and b/pages/annex/static/equity_icon6.png differ
diff --git a/pages/annex/static/equity_icon61.png b/pages/annex/static/equity_icon61.png
new file mode 100644
index 0000000..b7fb61f
Binary files /dev/null and b/pages/annex/static/equity_icon61.png differ
diff --git a/pages/annex/static/grade-active.png b/pages/annex/static/grade-active.png
new file mode 100644
index 0000000..85e971f
Binary files /dev/null and b/pages/annex/static/grade-active.png differ
diff --git a/pages/annex/static/grade-bg.png b/pages/annex/static/grade-bg.png
new file mode 100644
index 0000000..ef1f8c9
Binary files /dev/null and b/pages/annex/static/grade-bg.png differ
diff --git a/pages/annex/static/left.png b/pages/annex/static/left.png
new file mode 100644
index 0000000..6197576
Binary files /dev/null and b/pages/annex/static/left.png differ
diff --git a/pages/annex/static/renew_bg.png b/pages/annex/static/renew_bg.png
new file mode 100644
index 0000000..7ae1bca
Binary files /dev/null and b/pages/annex/static/renew_bg.png differ
diff --git a/pages/annex/static/vipBg.png b/pages/annex/static/vipBg.png
new file mode 100644
index 0000000..aeaa674
Binary files /dev/null and b/pages/annex/static/vipBg.png differ
diff --git a/pages/annex/vip_center/index.vue b/pages/annex/vip_center/index.vue
new file mode 100644
index 0000000..7251fd5
--- /dev/null
+++ b/pages/annex/vip_center/index.vue
@@ -0,0 +1,1048 @@
+
+
+
+
+
+
+
+
+
+
+ 会员优惠券
+ 会员专享优惠券,全场通用
+
+
+
+
+
+ ¥
+ {{item.coupon_price}}
+
+
+ 无门槛券
+ 满{{item.use_min_price | moneyFormat}}可用
+
+
+ 去使用
+ 立即领取
+
+
+
+
+
+
+ 会员续费
+ 续费可继续享受优惠价
+
+
+
+ {{item.value && item.value.svip_name}}
+ ¥{{item.value && item.value.price | moneyFormat}}
+ ¥{{item.value && item.value.cost_price | moneyFormat}}
+
+
+ 立即支付
+
+ 购买即视为同意《会员用户协议》
+
+
+
+
+ 会员专享价
+
+
+
+
+
+ {{item.merchant.type_name}}
+ {{item.store_name}}
+
+ ¥{{item.svip_price}}
+
+
+ 商城价:¥{{item.price}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/annex/vip_clause/index.vue b/pages/annex/vip_clause/index.vue
new file mode 100644
index 0000000..99a2966
--- /dev/null
+++ b/pages/annex/vip_clause/index.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/annex/vip_grade/index.vue b/pages/annex/vip_grade/index.vue
new file mode 100644
index 0000000..7f312fa
--- /dev/null
+++ b/pages/annex/vip_grade/index.vue
@@ -0,0 +1,341 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 附近门店
+
+
+ 距 {{storeList[0].name}} {{storeList[0].range}}km
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/annex/vip_paid/index.vue b/pages/annex/vip_paid/index.vue
new file mode 100644
index 0000000..1806871
--- /dev/null
+++ b/pages/annex/vip_paid/index.vue
@@ -0,0 +1,823 @@
+
+
+
+
+
+
+
+ 开通会员尊享权
+
+
+
+
+
+ {{item.name}}
+ {{item.info}}
+
+
+
+
+
+
+
+ 会员套餐
+
+
+
+ {{item.value && item.value.svip_name}}
+ ¥{{item.value.price | moneyFormat}}
+ ¥{{item.value.cost_price | moneyFormat}}
+
+
+ {{svip_type == 1 ? '立即体验' : '立即开通'}}
+
+ 购买即视为同意《会员用户协议》
+
+
+
+ 会员专享价 会员购买享超低价
+
+
+
+ {{item.store_name}}
+ ¥{{item.is_svip_price}}
+
+
+ 商城价:¥{{item.price}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/annex/web_view/index.vue b/pages/annex/web_view/index.vue
new file mode 100644
index 0000000..1e39bc4
--- /dev/null
+++ b/pages/annex/web_view/index.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/pages/auth/index.vue b/pages/auth/index.vue
new file mode 100644
index 0000000..7581140
--- /dev/null
+++ b/pages/auth/index.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/chat/customer_info/index.vue b/pages/chat/customer_info/index.vue
new file mode 100644
index 0000000..b7ce77c
--- /dev/null
+++ b/pages/chat/customer_info/index.vue
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/chat/customer_list/chat.vue b/pages/chat/customer_list/chat.vue
new file mode 100644
index 0000000..83f3fb2
--- /dev/null
+++ b/pages/chat/customer_list/chat.vue
@@ -0,0 +1,1918 @@
+
+
+
+
+
+
+ {{storeInfo.mer_name}}
+
+
+ 进店
+
+
+
+
+
+
+
+
+
+ {{items.time}}
+
+
+
+
+
+
+
对方撤回了一条消息
+
+
+
+
+
+
+ 退款单号:{{ item.refundOrder.refund_order_sn }}
+
+
+
+
+
+
+
+ {{item.refundOrder.refund_num}}件商品
+
+
+
+
{{val.product.cart_info.product.store_name}}
+
+ ¥{{ item.refundOrder.refund_price }}
+
+
+
+
+
+
+
+
+
+ 订单号:{{ item.orderInfo.order_sn }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.orderInfo.total_num}}件商品
+
+
+
+
{{val.cart_info.product.store_name}}
+
+ ¥{{ item.orderInfo.pay_price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.product.price }}
+
+
{{item.product.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.presell.price }}
+
+
{{item.presell.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.productGroup.product.price }}
+
+
{{item.productGroup.product.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.msn}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 订单号:{{ item.refundOrder.refund_order_sn }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.refundOrder.refund_num}}件商品
+
+
+
+
{{val.product.cart_info.product.store_name}}
+
+ ¥{{ item.refundOrder.refund_price }}
+
+
+
+
+
+
+
+
+
+ 订单号:{{ item.orderInfo.order_sn }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.orderInfo.total_num}}件商品
+
+
+
+
{{val.cart_info.product.store_name}}
+
+ ¥{{ item.orderInfo.pay_price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.product.price }}
+
+
{{item.product.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.presell.price }}
+
+
{{item.presell.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.productGroup.product.price }}
+
+
{{item.productGroup.product.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.msn}}
+
+
+
+
+
+
+ 复制
+
+
+
+
+
+ 复制
+
+
+
+ 撤回
+
+
+
+
+
+
+
你撤回了一条消息
+
+
+
+
+
+ {{items.time}}
+
+
+
+
+
+
+
对方撤回了一条消息
+
+
+
+
+
+
+ 退款单号:{{ item.refundOrder.refund_order_sn }}
+
+
+
+
+
+
+
+
+ {{item.refundOrder.refund_num}}件商品
+
+
+
+
{{val.product.cart_info.product.store_name}}
+
+ ¥{{ val.product.cart_info.productAttr.price }}
+
+
+
+
+
+
+
+
+
+ 订单号:{{ item.orderInfo.order_sn }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.orderInfo.total_num}}件商品
+
+
+
+
{{val.cart_info.product.store_name}}
+
+ ¥{{ item.orderInfo.pay_price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.product.price }}
+
+
{{item.product.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.presell.price }}
+
+
{{item.presell.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.productGroup.product.price }}
+
+
{{item.productGroup.product.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.msn}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 退款单号:{{ item.refundOrder.refund_order_sn }}
+
+
+
+
+
+
+
+
{{val.product.cart_info.product.store_name}}
+
+ 共{{item.refundOrder.refund_num}}件商品,
+ 合计 ¥{{ item.refundOrder.refund_price }}
+
+
+
+
+
+
+
+
+
+ 订单号:{{ item.orderInfo.order_sn }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.orderInfo.total_num}}件商品
+
+
+
+
{{val.cart_info.product.store_name}}
+
+ ¥{{ item.orderInfo.pay_price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.product.price }}
+
+
{{item.product.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.presell.price }}
+
+
{{item.presell.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ item.productGroup.product.price }}
+
+
{{item.productGroup.product.store_name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.msn }}
+
+
+
+
+
+
+ 复制
+
+
+
+
+
+ 复制
+
+
+
+ 撤回
+
+
+
+
+
+
+
你撤回了一条消息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/chat/customer_list/index.vue b/pages/chat/customer_list/index.vue
new file mode 100644
index 0000000..564a561
--- /dev/null
+++ b/pages/chat/customer_list/index.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+
+ {{item.merchant ? item.merchant.mer_name : ''}}
+ {{item.last.msn}}
+ [表情]
+ [图片]
+ [商品]
+ [订单]
+
+
+ {{item.last && item.last.create_time.split(' ')[1] || ''}}
+ {{item.num}}
+
+
+
+
+
+
+
+
+
+ {{item.user && item.user.nickname}}
+ {{item.last.msn}}
+ [表情]
+ [图片]
+ [商品]
+ [订单]
+
+
+ {{item.last && item.last.create_time.split(' ')[1]}}
+ {{item.num}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/chat/customer_login/index.vue b/pages/chat/customer_login/index.vue
new file mode 100644
index 0000000..d73e621
--- /dev/null
+++ b/pages/chat/customer_login/index.vue
@@ -0,0 +1,283 @@
+
+
+
+ 选择登录店铺
+
+
+
+
+
+
+ {{item.merchant.mer_name}}
+ {{item.account}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无权限
+ 抱歉,您还没有登录权限哦!
+ 返回首页
+
+
+
+
+
+
+ 登录成功
+ 我知道了
+
+
+
+
+
+
diff --git a/pages/chat/static/images/noPermission.png b/pages/chat/static/images/noPermission.png
new file mode 100644
index 0000000..4e2d82b
Binary files /dev/null and b/pages/chat/static/images/noPermission.png differ
diff --git a/pages/columnGoods/HotNewGoods/index.vue b/pages/columnGoods/HotNewGoods/index.vue
new file mode 100644
index 0000000..f8ff369
--- /dev/null
+++ b/pages/columnGoods/HotNewGoods/index.vue
@@ -0,0 +1,330 @@
+
+
+
+
+
+ {{ name }}
+ {{ desc }}
+
+
+
+
+
+
+
+ {{item.store_name}}
+
+
+
+
+
+
+
+ 我是有底线的~
+
+
+
+
+
+
diff --git a/pages/columnGoods/goods_coupon_list/index.vue b/pages/columnGoods/goods_coupon_list/index.vue
new file mode 100644
index 0000000..c220f06
--- /dev/null
+++ b/pages/columnGoods/goods_coupon_list/index.vue
@@ -0,0 +1,925 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{downMenu[downKey].title}}
+
+
+
+
+ 销量
+
+
+ 价格
+
+
+
+
+
+
+ 筛选
+
+
+
+
+
+
+
+ 以下商品适用于
+ 满{{couponData.use_min_price}}减{{couponData.coupon_price}}
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+
+
+
+
+ ¥{{item.price}}
+
+
+ ¥{{item.svip_price}}
+
+
+
+
+
+
+
+ {{item.merchant.type_name}}
+ 自营
+ {{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}
+ 领券
+ 包邮
+
+ {{item.rate}}评分 {{item.reply_count}}条评论
+
+ {{item.merchant.mer_name}}
+
+ 进店
+
+
+
+
+
+
+
+
+
+
+
+ 暂无商品,去看点什么吧
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/columnGoods/goods_list/index.vue b/pages/columnGoods/goods_list/index.vue
new file mode 100644
index 0000000..1edcc2b
--- /dev/null
+++ b/pages/columnGoods/goods_list/index.vue
@@ -0,0 +1,977 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{downMenu[downKey].title}}
+
+
+
+
+ 销量
+
+
+ 价格
+
+
+
+
+
+
+ 筛选
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+
+ ¥{{item.price}}
+
+ {{item.merchant.type_name}}
+ 自营
+ {{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}
+ 领券
+ 包邮
+
+ {{item.rate}}评分 {{item.reply_count}}条评论
+
+ {{item.merchant.mer_name}}
+
+ 进店
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无商品,去看点什么吧
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/columnGoods/goods_search/index.vue b/pages/columnGoods/goods_search/index.vue
new file mode 100644
index 0000000..7a92288
--- /dev/null
+++ b/pages/columnGoods/goods_search/index.vue
@@ -0,0 +1,334 @@
+
+
+
+
+
+
+
+
+ 搜索
+
+ 历史记录
+
+
+ {{item}}
+
+
+
+
+ 展开全部
+
+
+ 收起
+
+
+ 暂无搜索历史~
+ 热门搜索
+
+
+ {{item.keyword}}
+
+
+
+
+ 展开全部
+
+
+ 收起
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/columnGoods/goods_search_con/index.vue b/pages/columnGoods/goods_search_con/index.vue
new file mode 100644
index 0000000..1afae79
--- /dev/null
+++ b/pages/columnGoods/goods_search_con/index.vue
@@ -0,0 +1,1415 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 商品
+ 店铺
+
+
+
+
+ {{downMenu[downKey].title}}
+
+
+
+
+ 销量
+
+
+ 价格
+
+
+
+
+
+
+ 筛选
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ 筛选
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已售罄
+
+
+
+
+ {{item.store_name}}
+
+
+
+
+ ¥{{item.price}}
+
+
+ ¥{{item.svip_price}}
+
+
+
+
+
+
+ {{item.merchant.type_name}}
+ 自营
+ {{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}
+ 领券
+ 包邮
+
+
+ {{item.rate}}评分 {{item.reply_count}}条评论
+
+ {{item.merchant.mer_name}}
+
+
+ 进店
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+ {{loadTitle}}
+
+
+
+
+ 暂无商品,快去搜索其他商品吧
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.mer_name}}
+
+ {{item.type_name}}
+ 自营
+
+
+
+
+
+ {{item.product_score}}
+
+ {{item.distance}}
+
+
+
+
+
+ 进店
+
+
+
+
+
+
+ ¥{{goods.price}}
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+ 暂无商品,快去搜索其他商品吧
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/columnGoods/images/star.png b/pages/columnGoods/images/star.png
new file mode 100644
index 0000000..54ef245
Binary files /dev/null and b/pages/columnGoods/images/star.png differ
diff --git a/pages/columnGoods/images/star_active.png b/pages/columnGoods/images/star_active.png
new file mode 100644
index 0000000..ab6f6bb
Binary files /dev/null and b/pages/columnGoods/images/star_active.png differ
diff --git a/pages/columnGoods/images/star_active_purple.png b/pages/columnGoods/images/star_active_purple.png
new file mode 100644
index 0000000..5113aca
Binary files /dev/null and b/pages/columnGoods/images/star_active_purple.png differ
diff --git a/pages/error/index.vue b/pages/error/index.vue
new file mode 100644
index 0000000..7127324
--- /dev/null
+++ b/pages/error/index.vue
@@ -0,0 +1,30 @@
+
+
+ 网站已关闭
+
+
+
+
+
+
diff --git a/pages/goods_cate/goods_cate.vue b/pages/goods_cate/goods_cate.vue
new file mode 100644
index 0000000..2987198
--- /dev/null
+++ b/pages/goods_cate/goods_cate.vue
@@ -0,0 +1,500 @@
+
+
+
+
+
+
+
+
+
+ {{item.cate_name}}{{pid}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.cate_name}}
+
+
+
+
+
+
+
+
+ {{itemn.cate_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/goods_details/components/specs/index.vue b/pages/goods_details/components/specs/index.vue
new file mode 100644
index 0000000..644ec74
--- /dev/null
+++ b/pages/goods_details/components/specs/index.vue
@@ -0,0 +1,113 @@
+
+
+
+
+ 商品参数
+
+
+ {{item.name}}
+ {{item.value}}
+
+
+ 完成
+
+
+
+
+
+
+
+
+
diff --git a/pages/goods_details/discountsGoods.vue b/pages/goods_details/discountsGoods.vue
new file mode 100644
index 0000000..81a811c
--- /dev/null
+++ b/pages/goods_details/discountsGoods.vue
@@ -0,0 +1,636 @@
+
+
+
+
+
+
+
+
+
+
+ 套餐{{index+1}}: {{item.title}}
+
+ ¥{{item.total_price}}
+
+
+
+ 距套餐结束
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 当前商品
+
+
+ {{itemn.store_name}}
+
+
+ {{itemn.attr || '默认'}}
+
+
+
+
+
+ ¥
+ {{itemn.product.price}}
+
+
+ ¥{{itemn.product.ot_price}}
+
+
+
+
+
+ 省: ¥{{item.checked_save_money}}
+
+ 购买此套餐{{item.checked_num}}件商品
+
+
+ 套餐已售罄
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/goods_details/index.vue b/pages/goods_details/index.vue
new file mode 100644
index 0000000..eba613b
--- /dev/null
+++ b/pages/goods_details/index.vue
@@ -0,0 +1,2381 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{storeInfo.price}}
+ ¥{{storeInfo.ot_price}}
+
+ ¥{{storeInfo.svip_price}}
+
+
+
+
+
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{storeInfo.store_name}}
+
+
+
+ 分享
+
+
+
+ 积分最高可抵扣{{storeInfo.max_integral}}元
+ 包邮
+
+
+
+
+ ¥
+ {{storeInfo.price}}
+
+ ¥{{storeInfo.svip_price}}
+
+
+
+
+
+ 分享
+
+
+
+
+
+ 开通 SVIP会员
+ 立省{{svipData.save_money}}元
+ 省钱多多,权益多多
+
+
+
+ 立即开通
+
+
+
+
+ 积分最高可抵扣{{storeInfo.max_integral}}元
+ 包邮
+
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+ {{storeInfo.store_name || ''}}
+
+
+ 市场价:¥{{storeInfo.ot_price || 0}}
+ 库存:{{storeInfo.stock ? storeInfo.stock : 0}}{{storeInfo.unit_name ? storeInfo.unit_name : ''}}
+ 销量:{{storeInfo.sales ? storeInfo.sales : 0}}{{storeInfo.unit_name ? storeInfo.unit_name : ''}}
+
+
+
+
+
+ {{ storeInfo.top_name }} · 第{{ storeInfo.top_num }}名
+
+
+
+
+
+
+ 优惠券:
+ 满{{item.use_min_price}}减{{item.coupon_price}}
+
+
+
+
+
+ {{attrTxt}}:
+ {{attrValue}}
+
+
+
+
+
+ 参数:
+
+ {{item.name}}
+ ...
+
+
+
+
+
+
+ 运费:
+ {{shippingValue}}
+
+
+
+
+
+ 保障:
+
+
+ {{item.guarantee_name ? item.guarantee_name : ''}}
+
+
+
+
+
+
+
+
+
+ 优惠套餐({{comboTotal}})
+
+ 查看全部
+
+
+
+
+
+
+
+
+
+
+
+ 共{{item.count}}件
+ 省 ¥{{item.max_price}}
+
+
+
+
+
+
+
+ 用户评价({{replyCount}})
+
+ {{replyChance}}好评率
+
+
+
+
+
+
+
+
+
+
+ 种草秀
+
+ 查看全部
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{storeInfo.merchant.mer_name ? storeInfo.merchant.mer_name : ''}}
+
+ {{storeInfo.merchant.type_name}}
+ 自营
+
+
+ {{storeInfo.merchant.care_count < 10000 ? storeInfo.merchant.care_count : (storeInfo.merchant.care_count/10000).toFixed(2)+'万'}}人关注
+
+ 0人关注
+
+ 进店
+
+
+
+ 商品描述{{storeInfo.merchant.product_score}}
+
+
+ 卖家服务{{storeInfo.merchant.service_score}}
+
+
+ 物流服务{{storeInfo.merchant.postage_score}}
+
+
+
+
+ 店铺推荐
+
+
+
+
+
+
+ {{item.store_name}}
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+ 产品介绍
+
+
+
+
+
+
+
+
+ {{description.content.title}}
+
+
+
+
+
+
+
+ {{priceRule.rule_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 分享给好友
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存到手机
+
+
+ 长按图片可以保存到手机
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/goods_details/productWindow.vue b/pages/goods_details/productWindow.vue
new file mode 100644
index 0000000..30a88e7
--- /dev/null
+++ b/pages/goods_details/productWindow.vue
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+ ¥{{ attr.productSelect.price }}
+
+ 库存: {{ attr.productSelect.product_stock }}
+
+
+
+
+
+
+ {{ item.attr_name }}
+
+
+ {{ itemn.attr }}
+
+
+
+
+
+ 已售罄
+
+ 确定
+ 已售罄
+
+
+
+
+
+
+
+
diff --git a/pages/guide/index.vue b/pages/guide/index.vue
new file mode 100644
index 0000000..6a453ed
--- /dev/null
+++ b/pages/guide/index.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/activeParty.vue b/pages/index/component/activeParty.vue
new file mode 100644
index 0000000..f97ca78
--- /dev/null
+++ b/pages/index/component/activeParty.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+ {{ item.info[0].value }}
+ {{ item.info[1].value }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.info[0].value }}
+ {{ item.info[1].value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/bargain.vue b/pages/index/component/bargain.vue
new file mode 100644
index 0000000..74e6c3b
--- /dev/null
+++ b/pages/index/component/bargain.vue
@@ -0,0 +1,324 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ assistUserCount }}人助力成功
+
+
+ 更多活动
+
+
+
+
+
+
+
+
+
+
+ {{ item.user_count }}人参与
+
+
+
+ {{ item.store_name }}
+
+ 助力价
+ ¥{{ item.assistSku[0].assist_price }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.product.store_name }}
+
+ ¥
+ {{ item.assistSku[0].assist_price }}
+
+
+ 去助力
+
+
+
+
+
+
+
+
+
+
+
+ {{ assistList[0].product.store_name }}
+
+ ¥
+ {{ assistList[0].assistSku[0].assist_price }}
+
+
+ 去助力
+
+
+
+
+
+
+
+
+
+
+
+ {{ assistList[0].product.store_name }}
+
+ ¥
+ {{ assistList[0].assistSku[0].assist_price }}
+
+
+ 去助力
+
+
+
+
+
+
+
+
+
+
+
+ {{ assistList[1].product.store_name }}
+
+ ¥
+ {{ assistList[1].assistSku[0].assist_price }}
+
+
+ 去助力
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/blankPage.vue b/pages/index/component/blankPage.vue
new file mode 100644
index 0000000..035683a
--- /dev/null
+++ b/pages/index/component/blankPage.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
diff --git a/pages/index/component/combination.vue b/pages/index/component/combination.vue
new file mode 100644
index 0000000..bbfbc6f
--- /dev/null
+++ b/pages/index/component/combination.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+ 超值团购
+
+
+
+
+
+
+
+
+ {{ item.product.store_name }}
+
+ {{item.buying_count_num}}人团
+
+ ¥
+ {{ item.price }}
+
+
+
+ 去拼团
+
+
+
+
+
+
+
+
+ {{ item.product.store_name }}
+
+ ¥
+ {{ item.price }}
+
+
+ 去拼团
+
+
+
+
+
+
+
+
+
+
+
+ {{ combinationList[0].product.store_name }}
+
+ ¥
+ {{ combinationList[0].price }}
+
+
+ 去拼团
+
+
+
+
+
+
+
+
+
+
+
+ {{ combinationList[0].product.store_name }}
+
+ ¥
+ {{ combinationList[0].price }}
+
+
+ 去拼团
+
+
+
+
+
+
+
+
+
+
+
+ {{ combinationList[1].product.store_name }}
+
+ ¥
+ {{ combinationList[1].price }}
+
+
+ 去拼团
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/component - 快捷方式.lnk b/pages/index/component/component - 快捷方式.lnk
new file mode 100644
index 0000000..8371b2d
Binary files /dev/null and b/pages/index/component/component - 快捷方式.lnk differ
diff --git a/pages/index/component/coupon.vue b/pages/index/component/coupon.vue
new file mode 100644
index 0000000..56d6879
--- /dev/null
+++ b/pages/index/component/coupon.vue
@@ -0,0 +1,304 @@
+
+
+
+
+ 领优惠券
+
+ 查看更多
+
+
+ 查看更多
+
+
+
+
+
+
+ ¥{{item.coupon_price}}
+ 满{{item.use_min_price}}元可用
+
+ 去使用
+ 立即领取
+
+
+
+
+
+
+ ¥{{item.coupon_price}}
+ 满{{item.use_min_price}}元可用
+
+ 去使用
+ 立即领取
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/customerService.vue b/pages/index/component/customerService.vue
new file mode 100644
index 0000000..c97ffbb
--- /dev/null
+++ b/pages/index/component/customerService.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/follow.vue b/pages/index/component/follow.vue
new file mode 100644
index 0000000..9e6c6f4
--- /dev/null
+++ b/pages/index/component/follow.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+ {{ titleConfig }}
+
+ 关注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/goodList.vue b/pages/index/component/goodList.vue
new file mode 100644
index 0000000..73884db
--- /dev/null
+++ b/pages/index/component/goodList.vue
@@ -0,0 +1,467 @@
+
+
+
+
+
+
+
+
+
+ 已售罄
+
+
+
+
+ {{ item.store_name }}
+
+ {{item.merchant.type_name}}
+ 领券
+ 包邮
+
+
+
+
+ ¥
+ {{ item.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已售罄
+
+
+
+ {{ item.store_name }}
+
+ ¥{{ item.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 已售罄
+
+
+
+ {{ item.store_name }}
+
+
+ ¥{{ item.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.store_name }}
+
+
+ ¥
+ {{ item.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/guide.vue b/pages/index/component/guide.vue
new file mode 100644
index 0000000..d17af16
--- /dev/null
+++ b/pages/index/component/guide.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/headerSerch.vue b/pages/index/component/headerSerch.vue
new file mode 100644
index 0000000..554dd3f
--- /dev/null
+++ b/pages/index/component/headerSerch.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/homeComb.vue b/pages/index/component/homeComb.vue
new file mode 100644
index 0000000..c9534f0
--- /dev/null
+++ b/pages/index/component/homeComb.vue
@@ -0,0 +1,666 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.info[0].value}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/hotRanking.vue b/pages/index/component/hotRanking.vue
new file mode 100644
index 0000000..8f8548e
--- /dev/null
+++ b/pages/index/component/hotRanking.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 01
+
+
+ {{item.cate_name}}
+
+
+
+
+
+
+
+ 02
+
+
+
+
+
+ 03
+
+
+
+
+
+
+
+
+
+
+
+ 01
+
+
+ {{item.cate_name}}
+
+
+
+
+
+
+
+ 02
+
+
+
+
+
+ 03
+
+
+
+
+
+
+
+
+
+
+
+ 01
+
+
+ {{item.cate_name}}
+
+
+
+
+
+
+
+ 02
+
+
+
+
+
+ 03
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/component/index.js b/pages/index/component/index.js
new file mode 100644
index 0000000..259a6fb
--- /dev/null
+++ b/pages/index/component/index.js
@@ -0,0 +1,17 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+const path = require('path')
+const files = require.context('./', false, /\.vue$/)
+const modules = {}
+files.keys().forEach(key => {
+ const name = path.basename(key, '.vue')
+ modules[name] = files(key).default || files(key)
+})
+export default modules
\ No newline at end of file
diff --git a/pages/index/component/liveBroadcast.vue b/pages/index/component/liveBroadcast.vue
new file mode 100644
index 0000000..65a0d41
--- /dev/null
+++ b/pages/index/component/liveBroadcast.vue
@@ -0,0 +1,570 @@
+
+
+
+
+
+
+
+ 进入频道
+
+
+
+
+
+
+
+
+
+
+
+
+ 直播中
+
+
+
+ 回放
+
+
+
+ 已结束
+
+
+
+ 预告
+
+
+ {{ item.show_time }}
+
+
+
+
+
+
+
+
+
+
+
+ 预告
+ {{item.show_time}}
+
+
+
+ 回放
+
+
+
+ 直播中
+
+
+
+ 已结束
+
+
+
+
+ {{item.name}}
+
+ {{item.anchor_name}}
+
+
+
+
+
+ ¥{{goods.goods.price}}
+
+
+
+
+
+ ¥{{goods.goods.price}}
+
+
+
+ +{{item.broadcast.length}}
+
+
+
+ 暂无商品
+
+
+
+
+
+
+
+
+
+
+
+ 预告
+ {{item.show_time}}
+
+
+
+ 回放
+
+
+
+ 直播中
+
+
+
+ 已结束
+
+
+
+
+ {{item.name}}
+
+ {{item.anchor_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/menus.vue b/pages/index/component/menus.vue
new file mode 100644
index 0000000..f6a04ff
--- /dev/null
+++ b/pages/index/component/menus.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/news.vue b/pages/index/component/news.vue
new file mode 100644
index 0000000..f8bc3e4
--- /dev/null
+++ b/pages/index/component/news.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.chiild[0].val}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/pictureCube.vue b/pages/index/component/pictureCube.vue
new file mode 100644
index 0000000..8546416
--- /dev/null
+++ b/pages/index/component/pictureCube.vue
@@ -0,0 +1,296 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/plantList.vue b/pages/index/component/plantList.vue
new file mode 100644
index 0000000..7dd2f2a
--- /dev/null
+++ b/pages/index/component/plantList.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+ 好物分享
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{(item.author && item.author.nickname) || ''}}
+
+
+
+ {{item.count_start}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/presellList.vue b/pages/index/component/presellList.vue
new file mode 100644
index 0000000..f2f0b9b
--- /dev/null
+++ b/pages/index/component/presellList.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+ 进去逛逛
+
+
+
+
+
+
+
+
+
+ 火热预定中
+
+
+
+
+ 预售价:¥
+ {{ item.price }}
+
+ {{ item.store_name }}
+
+
+
+
+
+
+
+
+ {{ item.store_name }}
+
+ ¥
+ {{ item.price }}
+
+
+ 去预定
+
+
+
+
+
+
+
+
+
+
+
+ {{ presellList[0].store_name }}
+
+ ¥
+ {{ presellList[0].price }}
+
+
+ 去预定
+
+
+
+
+
+
+
+
+
+
+
+ {{ presellList[0].store_name }}
+
+ ¥
+ {{ presellList[0].price }}
+
+
+ 去预定
+
+
+
+
+
+
+
+
+
+
+
+ {{ presellList[1].store_name }}
+
+ ¥
+ {{ presellList[1].price }}
+
+
+ 去预定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/promotionList.vue b/pages/index/component/promotionList.vue
new file mode 100644
index 0000000..dce1e44
--- /dev/null
+++ b/pages/index/component/promotionList.vue
@@ -0,0 +1,195 @@
+
+
+
+
+ {{item.chiild[0].val}}
+ {{item.chiild[1].val}}
+
+
+
+
+
+
+ 秒杀
+ 砍价
+ 拼团
+
+
+
+ {{item.store_name}}
+ ¥{{item.ot_price}}
+
+ ¥{{item.price}}
+ 券
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/richText.vue b/pages/index/component/richText.vue
new file mode 100644
index 0000000..9ee25dc
--- /dev/null
+++ b/pages/index/component/richText.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/seckill.vue b/pages/index/component/seckill.vue
new file mode 100644
index 0000000..965ceb9
--- /dev/null
+++ b/pages/index/component/seckill.vue
@@ -0,0 +1,253 @@
+
+
+
+
+
+
+
+ 距结束
+
+
+
+
+ 更多惊喜
+
+
+
+
+
+
+
+
+
+
+ {{ item.store_name }}
+
+
+ {{ item.percent }}
+
+
+
+ ¥
+ {{ item.price }}
+
+
+ ¥
+ {{ item.ot_price }}
+
+
+
+
+
+
+
+
+
+ {{ item.store_name }}
+
+ ¥
+ {{ item.price }}
+
+
+ 去抢购
+
+
+
+
+
+
+
+
+
+
+
+ {{ spikeList[0].store_name }}
+
+ ¥
+ {{ spikeList[0].price }}
+
+
+ 去抢购
+
+
+
+
+
+
+
+
+
+
+
+ {{ spikeList[0].store_name }}
+
+ ¥
+ {{ spikeList[0].price }}
+
+
+ 去抢购
+
+
+
+
+
+
+
+
+
+
+
+ {{ spikeList[1].store_name }}
+
+ ¥
+ {{ spikeList[1].price }}
+
+
+ 去抢购
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/shopList.vue b/pages/index/component/shopList.vue
new file mode 100644
index 0000000..d75c30a
--- /dev/null
+++ b/pages/index/component/shopList.vue
@@ -0,0 +1,314 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.mer_name }}
+ {{ item.type_name }}
+ 自营
+
+
+
+
+
+
+
+
+ {{itemn.store_name}}
+
+ ¥
+ {{ itemn.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 更多店铺
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/swiperBg.vue b/pages/index/component/swiperBg.vue
new file mode 100644
index 0000000..cb048de
--- /dev/null
+++ b/pages/index/component/swiperBg.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/tabNav.vue b/pages/index/component/tabNav.vue
new file mode 100644
index 0000000..3dc939c
--- /dev/null
+++ b/pages/index/component/tabNav.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+ {{item.cate_name}}
+
+
+
+
+
+
+ 分类
+
+
+ 分类
+
+
+
+
+
+
+
+
diff --git a/pages/index/component/titles.vue b/pages/index/component/titles.vue
new file mode 100644
index 0000000..bdd486b
--- /dev/null
+++ b/pages/index/component/titles.vue
@@ -0,0 +1,75 @@
+
+
+
+ {{titleConfig}}
+
+
+
+
+
+
+
diff --git a/pages/index/component/topic.vue b/pages/index/component/topic.vue
new file mode 100644
index 0000000..3b5c20a
--- /dev/null
+++ b/pages/index/component/topic.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+ 进入专场
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..3b5077e
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,1761 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ hotTitle }}
+
+
+
+
+
+ {{ loadTitle }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.cate_name }}
+
+
+
+ 更多
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.store_name }}
+
+
+
+ ¥
+ {{ item.price }}
+
+
+
+ {{ item.merchant.type_name }}
+ 自营
+
+ {{ item.product_type == 1 ? '秒杀' : item.product_type == 2 ? '预售' : item.product_type == 3 ? '助力' : item.product_type == 4 ? '拼团' : '' }}
+
+ 领券
+ 包邮
+
+
+
+
+
+ {{ loadTitle }}
+
+
+
+
+
+
+
+ 暂无商品,去看点什么吧
+
+
+
+
+
+
+ {{beian_sn}}
+
+
+ {{beian_sn}}
+
+
+
+
+
+
+ 网络连接断开
+
+ 请检查情况:
+ · 在设置中是否已开启网络权限
+ · 当前是否处于弱网环境
+ · 版本是否过低,升级试试吧
+
+ 重新连接
+
+
+
+
+
+ 用户协议与隐私政策
+
+ 请务必审慎阅读、充分理解“用户协议 与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个
+ 人信息。你可以在“设置”中查看、变更、 删除个人信息并管理你的授权。
+
+ 你可以阅读
+ 《用户协议》与《隐私政策》
+ 了解 详细信息。如你同意,请点击“我同意”开始接受我们的服务。
+
+
+ 我同意
+ 随便逛逛
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {}">
+
+
+
+
+
diff --git a/pages/index/style/main.scss b/pages/index/style/main.scss
new file mode 100644
index 0000000..2e18b42
--- /dev/null
+++ b/pages/index/style/main.scss
@@ -0,0 +1,401 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+.main {
+ padding: 0 20rpx;
+}
+.spike-bd {
+ margin-bottom: 20rpx;
+ border-radius: 16rpx;
+ padding: 0 20rpx 0 10rpx;
+ display: flex;
+ position: relative;
+ justify-content: space-between;
+ .title-img{
+ width: 136rpx;
+ height: 36rpx;
+ }
+ .title {
+ font-weight: bold;
+ color: #282828;
+ font-size: 0;
+ .title-img{
+ width: 136rpx;
+ height: 36rpx;
+ }
+ }
+.spike-distance {
+ margin-left: 15rpx;
+ position: relative;
+ top: 1.4rpx;
+ display: flex;
+ border: 1px solid #e93323;
+ border-radius: 4rpx;
+ height: 40rpx;
+ padding-left: 92rpx;
+ .bg-red {
+ font-size: 20rpx;
+ color: #fff;
+ background-color: #e93323;
+ padding: 0 10rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100%;
+ position: absolute;
+ left: 0;
+
+ border-radius: 4rpx 0 0 4rpx;
+ }
+ .time {
+ font-size: 22rpx;
+ padding: 0 12rpx;
+ color: #e93323;
+ // height: 36rpx;
+ // line-height: 40rpx;
+ /deep/.red {
+ margin: 0;
+ }
+ }
+ .red-color {
+ color: #e93323;
+ }
+ }
+ .more-btn {
+ color: #282828;
+ font-size: 24rpx;
+ .iconfont {
+ font-size: 22rpx;
+ }
+ }
+}
+.colum0{
+ white-space: nowrap;
+ display: flex;
+}
+.combination-item {
+ /* #ifdef MP */
+ width: 294rpx;
+ height: 140rpx;
+ /* #endif */
+ /* #ifdef H5 || APP-PLUS */
+ width: 328rpx;
+ height: 180rpx;
+ /* #endif */
+ display: inline-block;
+ background-size: 100%;
+ position: relative;
+ background-repeat: no-repeat;
+ border-radius: 16rpx;
+ .img-box {
+ width: 122rpx;
+ height: 122rpx;
+ position: absolute;
+ /deep/image,/deep/.easy-loadimage,/deep/uni-image {
+ width: 122rpx;
+ height: 122rpx;
+ }
+ &.img-box1 {
+ /deep/image,/deep/.easy-loadimage,/deep/uni-image{
+ border-radius: 16rpx;
+ }
+ }
+ }
+ .name {
+ font-size: 30rpx;
+ color: #333333;
+ font-weight: bold;
+ line-height: 32rpx;
+ }
+ .price {
+ display: block;
+ font-size: 30rpx;
+ font-weight: bold;
+ margin-top: 8rpx;
+ color: #e93323;
+ text {
+ font-size: 20rpx;
+ }
+ }
+ .gocom_btn {
+ display: block;
+ margin-top: 6rpx;
+ color: #fff;
+ font-size: 22rpx;
+ font-weight: bold;
+ width: 120rpx;
+ line-height: 30rpx;
+ text-align: center;
+ border-radius: 16rpx;
+ text {
+ font-weight: normal;
+ font-size: 16rpx;
+ }
+ }
+ &:nth-child(1) {
+ /* #ifdef MP */
+ height: 336rpx;
+ /* #endif */
+ /* #ifdef H5 || APP-PLUS */
+ height: 378rpx;
+ /* #endif */
+ padding: 20rpx 20rpx 28rpx;
+ float: left;
+ .img-box {
+ width: 210rpx;
+ height: 210rpx;
+ right: 18rpx;
+ bottom: 18rpx;
+ /deep/image,/deep/.easy-loadimage,/deep/uni-image {
+ width: 210rpx;
+ height: 210rpx;
+ }
+
+ }
+ .gocom_btn {
+ background: linear-gradient(90deg, #fd5d48 0%, #f63724 100%);
+ }
+ }
+ &:nth-child(2),
+ &:nth-child(3) {
+ float: right;
+ padding: 20rpx 18rpx;
+ .name {
+ width: 148rpx;
+ }
+ .img-box {
+ right: 14rpx;
+ bottom: 14rpx;
+ /deep/image,/deep/.easy-loadimage,/deep/uni-image{
+ width: 122rpx;
+ height: 122rpx;
+ }
+
+ }
+
+ }
+ &:nth-child(2) {
+ .gocom_btn {
+ background: linear-gradient(90deg, #fdca1a 0%, #f7b21f 100%);
+ }
+ }
+ &:nth-child(3) {
+ margin-top: 18rpx;
+ .img-box {
+ right: 14rpx;
+ bottom: 14rpx;
+ }
+ .gocom_btn {
+ background: linear-gradient(90deg, #ffb052 0%, #fe961a 100%);
+ }
+ }
+}
+.spike-wrapper {
+ width: 100%;
+ &.wrapper2{
+ overflow: hidden;
+ }
+ .spike-item {
+ display: inline-block;
+ width: 222rpx;
+ margin: 0 20rpx 20rpx 0;
+ &.presell-item {
+ width: 210rpx;
+ .img-box {
+ height: 210rpx;
+ /deep/image,/deep/.easy-loadimage,uni-image{
+ height: 210rpx;
+ }
+ }
+ .name {
+ margin-top: 8rpx;
+ color: #282828;
+ }
+ }
+ &.assist-item {
+ box-shadow: 0px 2px 20px 0px rgba(0, 0, 0, 0.08);
+ }
+ .img-box {
+ position: relative;
+ height: 222rpx;
+ .participants {
+ padding: 4rpx 12rpx;
+ border-radius: 16rpx;
+ background: rgba(0, 0, 0, 0.35);
+ color: #fff;
+ text-align: center;
+ position: absolute;
+ top: 10rpx;
+ left: 10rpx;
+ font-size: 20rpx;
+ }
+ /deep/image,/deep/.easy-loadimage,uni-image {
+ width: 100%;
+ height: 222rpx;
+ border-radius: 16rpx;
+ }
+ .box_bg {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ text-align: center;
+ width: 149rpx;
+ height: 42rpx;
+ line-height: 42rpx;
+ background-repeat: no-repeat;
+ background-size: cover;
+ color: #fff;
+ font-size: 22rpx;
+ }
+ .msg {
+ position: absolute;
+ left: 10rpx;
+ bottom: 16rpx;
+ width: 86rpx;
+ height: 30rpx;
+ background: rgba(255, 255, 255, 1);
+ border: 1px solid rgba(255, 109, 96, 1);
+ border-radius: 6rpx;
+ font-size: 20rpx;
+ color: $theme-color;
+ }
+ }
+ /deep/.img-box0 image,/deep/.img-box0 .easy-loadimage,/deep/.img-box0 uni-image {
+ border-radius: 0;
+ }
+ .info {
+ margin-top: 10rpx;
+ .name {
+ font-size: 26rpx;
+ }
+ .stock-box {
+ width: 100%;
+ height: 20rpx;
+ background-color: #ffdcd9;
+ border-radius: 20rpx;
+ margin-top: 13rpx;
+ position: relative;
+ color: #fff;
+ font-size: 18rpx;
+ line-height: 20rpx;
+ text-align: center;
+ overflow: hidden;
+ .grabbed {
+ height: 20rpx;
+ background: linear-gradient(#ff0000, #ff5400);
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 20rpx;
+ }
+ .stock-sales {
+ position: absolute;
+ left: 50%;
+ margin-left: -40rpx;
+ }
+ }
+ .price-box {
+ display: flex;
+ align-items: center;
+ justify-content: start;
+ margin-top: 4rpx;
+ &.presell-price {
+ display: block;
+ .old-price {
+ display: block;
+ margin: 6rpx 0 0 0;
+ }
+ }
+ .tips {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 28rpx;
+ height: 28rpx;
+ background-color: $theme-color;
+ color: #fff;
+ font-size: 20rpx;
+ border-radius: 2px;
+ }
+ .price {
+ display: flex;
+ color: $theme-color;
+ font-size: 28rpx;
+ font-weight: bold;
+ text {
+ font-size: 22rpx;
+ }
+ }
+ .old-price {
+ display: flex;
+ margin-left: 10rpx;
+ color: #aaaaaa;
+ text-decoration: line-through;
+ font-size: 20rpx;
+ text {
+ font-size: 18rpx;
+ }
+ }
+ }
+ }
+ .assist-info {
+ .price {
+ display: flex;
+ color: $theme-color;
+ font-size: 28rpx;
+ font-weight: bold;
+ margin-top: 8rpx;
+ text {
+ font-size: 18rpx;
+ }
+ .assist_price {
+ font-size: 20rpx;
+ display: inline-block;
+ width: 82rpx;
+ height: 32rpx;
+ text-align: center;
+ line-height: 30rpx;
+ background: #ffeae5;
+ border-radius: 4rpx;
+ }
+ }
+ &.assist-info1{
+ padding-bottom: 20rpx;
+ }
+ .price-box {
+ padding: 15rpx 15rpx 8rpx;
+ .name {
+ font-size: 24rpx;
+ color: #333;
+ line-height: 30rpx;
+ }
+ }
+ .initiate_btn {
+ width: 100%;
+ height: 48rpx;
+ line-height: 48rpx;
+ background: linear-gradient(90deg, #ff0000 0%, #ff5400 100%);
+ text-align: center;
+ color: #fff;
+ font-size: 24rpx;
+ border-radius: 0 0 16rpx 16rpx;
+ margin: 0 auto;
+ &.initiate_btn1{
+ width: 90%;
+ border-radius: 24rpx;
+ }
+ }
+ }
+ }
+ &.wrapper1{
+ .spike-item{
+ width: 210rpx;
+ }
+ }
+}
\ No newline at end of file
diff --git a/pages/news_details/index.vue b/pages/news_details/index.vue
new file mode 100644
index 0000000..e2d16e0
--- /dev/null
+++ b/pages/news_details/index.vue
@@ -0,0 +1,249 @@
+
+
+
+ {{articleInfo.title}}
+
+ {{articleInfo.author}}
+ {{articleInfo.create_time}}
+
+
+
+
+
+
+
+
+
+ {{store_info.store_name}}
+
+ ¥{{store_info.price}}
+
+ ¥{{store_info.ot_price}}
+
+ 查看商品
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/news_list/index.vue b/pages/news_list/index.vue
new file mode 100644
index 0000000..c960cf3
--- /dev/null
+++ b/pages/news_list/index.vue
@@ -0,0 +1,311 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+ {{item.create_time}}
+
+
+
+
+
+
+
+
+
+
+
+ 暂无新闻信息~
+
+
+
+
+
+
+
+
+
diff --git a/pages/order_addcart/order_addcart.vue b/pages/order_addcart/order_addcart.vue
new file mode 100644
index 0000000..44a659e
--- /dev/null
+++ b/pages/order_addcart/order_addcart.vue
@@ -0,0 +1,1224 @@
+
+
+
+
+ 100%正品保证
+ 所有商品精挑细选
+ 售后无忧
+
+
+ 购物数量 {{cartTotalCount}}
+ {{ footerswitch ? '管理' : '取消'}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.mer_name}}
+
+
+ 优惠券
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.product.store_name}}
+
+ {{goods.productAttr.sku}}
+
+
+
+ {{goods.product.once_min_count}}件起购,最多{{goods.product.once_max_count}}件
+
+
+ ¥{{goods.productAttr.price}}
+
+
+
+
+
+
+ -
+ {{goods.cart_num}}
+ +
+
+
+
+
+
+
+
+ 失效商品
+ 清空
+
+
+
+
+ 失效
+
+
+
+
+ {{item.product.store_name}}
+
+
+
+ 该商品已失效
+
+
+
+
+
+
+
+
+
+
+ 暂无商品,去添加点什么吧
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/order_details/delivery.vue b/pages/order_details/delivery.vue
new file mode 100644
index 0000000..3adbe80
--- /dev/null
+++ b/pages/order_details/delivery.vue
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+ {{status == 0 ? '待接单' : '待取货'}}
+ 等待配送员接单完成后开始派送
+
+
+ {{code}}
+ 稍后请将收货码告诉配送员
+
+
+
+
+
+
+
+ {{deliveryInfo.delivery_name}}
{{deliveryInfo.delivery_id}}
+
+ 配送员未接单
+
+
+
+
+
+
+ 收件人信息
+
+
+ 姓名:
+ {{deliveryInfo.real_name}}
+
+
+ 手机号:
+ {{deliveryInfo.user_phone}}
+
+
+ 地址:
+ {{deliveryInfo.user_address}}
+
+
+
+
+
+
+
+ {{item.change_message}}
+ {{item.change_time}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/order_details/index.vue b/pages/order_details/index.vue
new file mode 100644
index 0000000..082605a
--- /dev/null
+++ b/pages/order_details/index.vue
@@ -0,0 +1,1413 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 待付款
+ 待发货
+ 待核销
+ 待收货
+ 待评价
+ 已完成
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{orderInfo.real_name}}{{orderInfo.user_phone}}
+ {{orderInfo.user_address}}
+
+
+
+ 自提地址信息
+
+ 查看位置
+
+
+
+
+ {{orderInfo.take.mer_take_name}}
+ {{orderInfo.take.mer_take_phone}}
+
+
+ {{orderInfo.take.mer_take_address}}
+
+
+
+
+
+ 营业时间
+
+
+ 周一至周日:
+
+ {{'周'+ toChinese(item)}},
+
+ {{orderInfo.take.mer_take_time[0]}}-{{orderInfo.take.mer_take_time[1]}}
+
+
+
+
+
+ 自提码
+
+
+
+
+
+ {{orderInfo.merchant.mer_name}}
+
+
+
+
+
+
+
+
+
+
+ 联系客服
+
+
+ 联系客服
+
+
+
+
+
+ 卡密发货:
+
+
+
+ 复制
+
+
+ 复制
+
+
+
+
+
+ 卡密已自动发放 {{orderInfo.delivery_id}}
+
+
+
+
+
+ 配送方式:
+ 送货
+
+
+ 配送员:
+ {{orderInfo.delivery_name}}
+
+
+ 联系电话:
+ {{orderInfo.delivery_id}}
+
+
+
+
+
+
+
+
+
+
+ {{orderInfo.delivery_name}}
+ {{orderInfo.delivery_id}}
+
+ 配送员未接单
+
+ 查看详情
+
+
+
+
+ 发货备注:
+
+
+
+
+
+ 订单编号:
+ {{orderInfo.order_sn}}
+
+ 复制
+
+
+ 复制
+
+
+
+
+ 下单时间:
+ {{orderInfo.create_time}}
+
+
+ 支付状态:
+ 已支付
+
+
+ 支付时间:
+ {{orderInfo.pay_time}}
+
+
+ 商品总额:
+ ¥{{orderInfo.total_price}}
+
+
+ 支付方式:
+ 余额支付
+ 支付宝支付
+ 微信支付
+
+
+ 买家留言:
+ {{orderInfo.mark}}
+
+
+
+
+
+ {{index}}:
+ {{item}}
+
+
+
+
+
+
+
+ 运费:
+ +¥{{orderInfo.pay_postage}}
+
+
+ 优惠券抵扣:
+ -¥{{orderInfo.coupon_price}}
+
+
+ 积分抵扣:
+ -¥{{orderInfo.integral_price}}
+
+
+ 实付款:
+ ¥{{orderInfo.presell_price}}
+
+
+ 实付款:
+ ¥{{orderInfo.pay_price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 核销码
+
+ 请将二维码展示给店员 或 提供数字核销码
+
+
+
+
+
+
+ {{orderInfo.verify_code}}
+
+
+
+
+
+
+
diff --git a/pages/order_details/stay.vue b/pages/order_details/stay.vue
new file mode 100644
index 0000000..a3989da
--- /dev/null
+++ b/pages/order_details/stay.vue
@@ -0,0 +1,964 @@
+
+
+
+
+
+
+
+
+ 待付款
+ 待发货
+ 待收货
+ 待评价
+ 已完成
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{orderInfo.real_name}}{{orderInfo.user_phone}}
+ {{orderInfo.user_address}}
+
+
+
+
+
+
+
+ {{item.merchant.mer_name}}
+
+
+
+
+
+
+
+ 预售{{goods.cart_info.product.store_name}}
+ {{goods.cart_info.productAttr.sku}}
+ 发货时间:
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付成功后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付尾款后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+
+ ¥{{goods.cart_info.productPresellAttr.presell_price}}x{{goods.product_num}}
+
+
+
+ 阶段一: 等待买家付款
+ 商品定金 ¥{{ item.pay_price }}
+ 定金需付款¥{{ item.pay_price }}
+
+
+ 阶段二: 未开始
+ 商品尾款 ¥{{ item.presellOrder.pay_price }}
+ 尾款需付款¥{{ item.presellOrder.pay_price }}
+
+
+
+
+
+
+ {{goods.cart_info.product.store_name}}
+ {{goods.cart_info.productAttr.sku}}
+
+ ¥{{goods.cart_info.productAttr.price}}
+
+
+
+ x{{goods.product_num}}
+
+
+
+
+
+ 联系客服
+
+
+ 联系客服
+
+
+
+
+
+ 订单编号:
+ {{orderInfo.group_order_sn}}
+
+ 复制
+
+
+ 复制
+
+
+
+
+ 下单时间:
+ {{orderInfo.create_time || 0}}
+
+
+ 支付状态:
+ 未支付
+
+
+ 商品总额:
+ ¥{{orderInfo.total_price}}
+
+
+
+
+ {{index}}:
+ {{item}}
+
+
+
+
+
+
+
+ 运费:
+ +¥{{orderInfo.pay_postage}}
+
+
+ 优惠券抵扣:
+ -¥{{orderInfo.coupon_price}}
+
+
+ 积分抵扣:
+ -¥{{orderInfo.integral_price}}
+
+
+ 实付款:
+ ¥{{orderInfo.pay_price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/order_pay_back/index.vue b/pages/order_pay_back/index.vue
new file mode 100644
index 0000000..76f58f2
--- /dev/null
+++ b/pages/order_pay_back/index.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+ 点击右上角
+
+
+
+ 选择在浏览器中打开,去支付宝支付
+
+
+
+ 完成支付
+ 返回
+ 返回
+ 返回查看订单
+
+
+
+
+
+
+ 正在跳转支付...
+
+
+ 完成支付
+ 返回
+ 返回
+ 返回查看订单
+
+
+
+
+
+
+
+
+ 去支付,请长按网址复制后 使用浏览器访问
+ {{url}}
+
+
+
+ 完成支付
+ 完成支付
+ 完成支付
+ 返回
+ 返回
+ 返回查看订单
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/order_pay_status/index.vue b/pages/order_pay_status/index.vue
new file mode 100644
index 0000000..316419d
--- /dev/null
+++ b/pages/order_pay_status/index.vue
@@ -0,0 +1,393 @@
+
+
+
+
+
+
+
+
+
+ {{payResult}}
+
+
+ 订单编号
+ {{order_pay_info.group_order_sn}}
+
+
+ {{order_type== 20 ? '兑换时间' : '下单时间'}}
+ {{order_pay_info.create_time}}
+
+
+ 兑换方式
+ 积分兑换
+
+
+ 支付方式
+ 微信
+ 支付宝
+ 余额
+
+
+ 支付积分
+ {{order_pay_info.integral}}
+
+
+ 支付金额
+ {{order_pay_info.pay_price}}
+
+
+ 赠送积分
+ {{order_pay_info.give_integral}}
+
+
+
+ 失败原因
+ {{order_pay_info.pay_type==0 ? '余额不足':msg}}
+
+
+
+
+
+
+
+
+
+
+
+ 赠送优惠券
+
+
+
+
+
+ ¥{{item.coupon_price}}
+
+ {{item.title}}
+ 满{{item.use_min_price}}元可用
+
+ 有效期:{{ item.use_start_time |timeYMD }}-{{ item.use_end_time |timeYMD}}
+
+
+ 领取后{{ item.coupon_time}}天内可用
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/components/associated.vue b/pages/plantGrass/components/associated.vue
new file mode 100644
index 0000000..2af8b3e
--- /dev/null
+++ b/pages/plantGrass/components/associated.vue
@@ -0,0 +1,482 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+ ¥{{item.price}}
+
+
+
+
+
+ 暂无内容哦~
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+ ¥{{item.price}}
+
+
+
+
+
+ 暂无内容哦~
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+ ¥{{item.price}}
+
+
+
+
+
+ 暂无内容哦~
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/components/participateTopic.vue b/pages/plantGrass/components/participateTopic.vue
new file mode 100644
index 0000000..82b735e
--- /dev/null
+++ b/pages/plantGrass/components/participateTopic.vue
@@ -0,0 +1,204 @@
+
+
+
+ 参与话题
+
+
+
+
+
+
+ {{item.cate_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.topic_name}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/plantGrass/plant_detail/index.vue b/pages/plantGrass/plant_detail/index.vue
new file mode 100644
index 0000000..284d184
--- /dev/null
+++ b/pages/plantGrass/plant_detail/index.vue
@@ -0,0 +1,977 @@
+
+
+
+
+
+
+
+ 审核未通过
+ 已下架
+ 正在审核
+
+
+ {{followDetail.refusal}}
+
+
+ 发布的内容审核通过后,将展示在首页!
+
+
+
+
+
+
+
+
+
+
+
+
+ {{followDetail.author.nickname}}
+
+
+
+
+
+ 管理
+
+
+
+ 编辑
+
+
+
+ 删除
+
+
+
+
+ 关注
+ 已关注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看TA提到的宝贝({{followDetail.relevance.length}})
+
+
+
+
+
+
+
+
+
+ {{followDetail.content}}
+
+
+
+
+ #{{followDetail.topic.topic_name}}
+
+
+ {{followDetail.create_time}}
+
+
+
+
+ 评论{{replyData.all == 0 ? '' : replyData.all}}
+
+
+
+
+
+
+
+
+ {{item.author.nickname}}
+ {{item.content}}
+ {{item.create_time}}
+
+
+
+ {{item.count_start}}
+
+
+
+
+
+
+
+ {{itemn.author.nickname}}
+
+ 回复 @{{itemn.reply.nickname}}
+ {{itemn.content}}
+
+ {{itemn.create_time}}
+
+
+
+ {{itemn.count_start}}
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无评论,快去抢沙发吧~
+
+
+
+
+
+
+
+
+
+
+
+ {{followDetail.count_start}}
+
+
+
+ {{replyData.all}}
+
+
+
+
+
+
+
+
+
+ 内容不存在,可能被删除了哦~
+ 返回首页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/plant_featured/index.vue b/pages/plantGrass/plant_featured/index.vue
new file mode 100644
index 0000000..912751e
--- /dev/null
+++ b/pages/plantGrass/plant_featured/index.vue
@@ -0,0 +1,381 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.author.nickname}}
+
+
+
+ 关注
+
+ 已关注
+
+
+
+
+
+
+
+ 查看TA提到的宝贝({{item.relevance.length}})
+
+
+
+
+
+
+
+
+
+ {{item.content}}
+
+ 展开
+
+
+
+ #{{item.topic.topic_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/plant_release/index.vue b/pages/plantGrass/plant_release/index.vue
new file mode 100644
index 0000000..e8fbafd
--- /dev/null
+++ b/pages/plantGrass/plant_release/index.vue
@@ -0,0 +1,798 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/plant_search/index.vue b/pages/plantGrass/plant_search/index.vue
new file mode 100644
index 0000000..6943fa3
--- /dev/null
+++ b/pages/plantGrass/plant_search/index.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+ 取消
+
+ 历史记录
+
+
+ {{item}}
+
+
+
+
+ 展开全部
+
+
+ 收起
+
+
+ 暂无搜索历史~
+ 热门搜索
+
+
+ {{item.keyword}}
+
+
+
+
+ 展开全部
+
+
+ 收起
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/plant_search_list/index.vue b/pages/plantGrass/plant_search_list/index.vue
new file mode 100644
index 0000000..fde9e0d
--- /dev/null
+++ b/pages/plantGrass/plant_search_list/index.vue
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/plant_show/index.vue b/pages/plantGrass/plant_show/index.vue
new file mode 100644
index 0000000..9946299
--- /dev/null
+++ b/pages/plantGrass/plant_show/index.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
+
+
+
+ {{proInfo.store_name}}
+ {{count}}条买家秀
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/plant_topic/index.vue b/pages/plantGrass/plant_topic/index.vue
new file mode 100644
index 0000000..ee499a1
--- /dev/null
+++ b/pages/plantGrass/plant_topic/index.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+ {{item.cate_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.topic_name}}
+ {{item.count_use || 0}}篇内容
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/plantGrass/plant_user/index.vue b/pages/plantGrass/plant_user/index.vue
new file mode 100644
index 0000000..b538fbd
--- /dev/null
+++ b/pages/plantGrass/plant_user/index.vue
@@ -0,0 +1,393 @@
+
+
+
+
+
+ 作品
+ 赞过
+
+
+
+
+
+
+
+
+
+ 暂无内容哦~
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/plant_user_attention/index.vue b/pages/plantGrass/plant_user_attention/index.vue
new file mode 100644
index 0000000..40f9222
--- /dev/null
+++ b/pages/plantGrass/plant_user_attention/index.vue
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+ {{(item.focus && item.focus.nickname) || '用户已注销'}}
+
+
+ 粉丝{{item.focus.count_fans<10000 ? item.focus.count_fans : (item.focus.count_fans/10000).toFixed(2)+'万'}}
+
+ 粉丝0
+
+
+ {{item.is_fans ? '关注' : '已关注'}}
+
+
+
+
+
+
+
+
+
+
+ 暂未关注任何人哦~
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/plant_user_fans/index.vue b/pages/plantGrass/plant_user_fans/index.vue
new file mode 100644
index 0000000..f3ae248
--- /dev/null
+++ b/pages/plantGrass/plant_user_fans/index.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+ {{(item.fans && item.fans.nickname) || '用户已注销'}}
+
+
+ 粉丝{{item.fans.count_fans<10000 ? item.fans.count_fans : (item.fans.count_fans/10000).toFixed(2)+'万'}}
+
+ 粉丝0
+
+
+ {{item.is_start ? '已关注' : '关注'}}
+
+
+
+
+
+
+
+
+
+
+ 你还没有粉丝哦~
+
+
+
+
+
+
+
+
diff --git a/pages/plantGrass/static/images/no-topic.png b/pages/plantGrass/static/images/no-topic.png
new file mode 100644
index 0000000..dbcffb5
Binary files /dev/null and b/pages/plantGrass/static/images/no-topic.png differ
diff --git a/pages/plantGrass/static/images/no_attention.png b/pages/plantGrass/static/images/no_attention.png
new file mode 100644
index 0000000..2e4d18e
Binary files /dev/null and b/pages/plantGrass/static/images/no_attention.png differ
diff --git a/pages/plantGrass/static/images/no_content.png b/pages/plantGrass/static/images/no_content.png
new file mode 100644
index 0000000..07fb3f7
Binary files /dev/null and b/pages/plantGrass/static/images/no_content.png differ
diff --git a/pages/plantGrass/static/images/no_fans.png b/pages/plantGrass/static/images/no_fans.png
new file mode 100644
index 0000000..e3f1c70
Binary files /dev/null and b/pages/plantGrass/static/images/no_fans.png differ
diff --git a/pages/plantGrass/static/images/plant_bg.jpg b/pages/plantGrass/static/images/plant_bg.jpg
new file mode 100644
index 0000000..5811735
Binary files /dev/null and b/pages/plantGrass/static/images/plant_bg.jpg differ
diff --git a/pages/plantGrass/static/images/video_bg.png b/pages/plantGrass/static/images/video_bg.png
new file mode 100644
index 0000000..8a2edd4
Binary files /dev/null and b/pages/plantGrass/static/images/video_bg.png differ
diff --git a/pages/plant_grass/index.vue b/pages/plant_grass/index.vue
new file mode 100644
index 0000000..1535675
--- /dev/null
+++ b/pages/plant_grass/index.vue
@@ -0,0 +1,1214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.author.nickname || ''}}
+
+ {{item.time}}
+
+
+
+
+
+
+
+
+
+
+ 查看TA提到的宝贝({{item.relevance.length}})
+
+
+
+
+
+
+
+
+
+ {{item.content.substring(0,90)+'...'}}
+
+ 展开
+
+
+
+ {{item.content}}
+
+
+
+
+ #{{item.topic.topic_name}}
+
+
+
+
+
+
+
+
+
+ 暂无内容~
+
+
+
+ 暂未登录
+ 登录后可查看关注用户的发布哦~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{!cateGoods[item.category_id] ? 0 : cateGoods[item.category_id].goodsLoading}}
+
+
+
+ {{item.category_id == -1 ? '暂无视频' : '暂无文章'}}~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/points_mall/exchange_record.vue b/pages/points_mall/exchange_record.vue
new file mode 100644
index 0000000..761b83e
--- /dev/null
+++ b/pages/points_mall/exchange_record.vue
@@ -0,0 +1,408 @@
+
+
+
+
+
+
+
+
+ {{item.paid == 1 ? '兑换时间:'+item.pay_time : '订单编号:'+item.order_sn}}
+
+
+ 待付款
+
+
+ {{item.status == 0 ? '待发货' : item.status == 1 ? '待收货' : '已完成'}}
+
+
+
+
+
+
+
+ {{ itm.cart_info.product.store_name }}
+ {{itm.cart_info.productAttr&&itm.cart_info.productAttr.sku || '默认'}}
+
+
+
+
+
+ 立即付款
+
+ 查看物流
+
+ 删除
+
+ 查看详情
+
+
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/points_mall/goods_selection.vue b/pages/points_mall/goods_selection.vue
new file mode 100644
index 0000000..643b492
--- /dev/null
+++ b/pages/points_mall/goods_selection.vue
@@ -0,0 +1,322 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+
+
+
+
+ {{ item.ot_price }}积分
+
+ +{{parseFloat(Number(item.price).toFixed(2))}}元
+
+
+
+ {{item.sales}}人兑换
+ 去兑换
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/points_mall/index.vue b/pages/points_mall/index.vue
new file mode 100644
index 0000000..531a030
--- /dev/null
+++ b/pages/points_mall/index.vue
@@ -0,0 +1,463 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{model.name}}
+
+
+
+
+
+
+
+
+
+ {{model.name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+ 已兑完
+
+
+ {{ item.store_name }}
+
+
+
+ {{ item.ot_price }}积分
+
+ +{{parseFloat(Number(item.price).toFixed(2))}}元
+
+
+
+
+
+
+ 暂无商品,去看点别的吧
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/points_mall/integral_goods_details.vue b/pages/points_mall/integral_goods_details.vue
new file mode 100644
index 0000000..c97abaa
--- /dev/null
+++ b/pages/points_mall/integral_goods_details.vue
@@ -0,0 +1,933 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{storeInfo.ot_price || 0}}
+ 积分+{{storeInfo.price}}元
+
+
+
+
+
+
+
+
+ {{storeInfo.store_name}}
+
+
+ 市场价:¥{{storeInfo.cost}}
+ 库存:
+ {{ storeInfo.stock}}
+
+ 已兑换:{{storeInfo.sales}}
+
+
+
+
+
+ {{attr}}:{{attrValue}}
+
+
+
+
+
+
+ 共{{skuArr.length}}种规格可选
+
+
+
+
+ 产品介绍
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/points_mall/integral_goods_list.vue b/pages/points_mall/integral_goods_list.vue
new file mode 100644
index 0000000..3bde64a
--- /dev/null
+++ b/pages/points_mall/integral_goods_list.vue
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 默认
+
+ 积分
+
+
+
+
+
+ 销量
+
+
+
+
+
+
+ 已兑完
+
+
+ {{item.store_name}}
+
+
+
+
+ {{ item.ot_price }}积分
+
+ +{{parseFloat(Number(item.price).toFixed(2))}}元
+
+
+ {{item.sales}}人兑换
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+ 暂无商品,去看点别的吧
+
+
+
+
+
+
+
+
+
diff --git a/pages/points_mall/integral_order.vue b/pages/points_mall/integral_order.vue
new file mode 100644
index 0000000..90eb236
--- /dev/null
+++ b/pages/points_mall/integral_order.vue
@@ -0,0 +1,1232 @@
+
+
+
+
+
+
+ {{addressInfo.real_name}}
+ {{addressInfo.phone}}
+
+
+ [默认]{{addressInfo.province}}{{addressInfo.city}}{{addressInfo.district}}{{addressInfo.street || ''}}{{addressInfo.detail}}
+
+
+
+ 设置收货地址
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.product.store_name}}
+ x{{goods.cart_num}}
+
+
+ {{goods.productAttr.sku}}
+
+
+
+ {{goods.productAttr.ot_price}}积分+{{goods.productAttr.price}}元
+
+
+
+
+
+
+ 此商品不支持该区域配送
+
+
+
+
+
+
+
+
+
+ 可用积分
+ {{resData.true_integral}}积分
+
+
+
+ 兑换积分
+ {{resData.order_total_integral}}积分
+
+
+
+ 支付金额
+ ¥{{resData.order_pay_price || 0}}
+
+
+
+ 快递费用
+ 免运费
+
+
+
+ 备注信息
+
+
+
+
+
+ 支付方式
+
+
+
+
+
+ {{item.name}}
+
+
+ {{item.title}}
+
+ {{userInfo.now_money}}
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+ {{item.title}}
+
+ {{userInfo.now_money}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/points_mall/integral_order_details.vue b/pages/points_mall/integral_order_details.vue
new file mode 100644
index 0000000..cb66883
--- /dev/null
+++ b/pages/points_mall/integral_order_details.vue
@@ -0,0 +1,807 @@
+
+
+
+
+
+
+ {{orderInfo.real_name}}{{orderInfo.user_phone}}
+ {{orderInfo.user_address}}
+
+
+
+
+
+
+ 共{{orderInfo.total_num}}件商品
+
+
+
+
+
+
+
+ {{item.cart_info.product.store_name}}
+ x {{item.product_num}}
+
+ {{item.cart_info.productAttr.sku || '默认'}}
+
+ {{item.integral}}积分 +{{item.product_price}}元
+
+
+
+
+
+
+
+
+ 配送方式:
+ 送货
+
+
+ 配送员:
+ {{orderInfo.delivery_name}}
+
+
+ 联系电话:
+ {{orderInfo.delivery_id}}
+
+
+
+
+ 订单编号:
+ {{orderInfo.order_sn}}
+
+ 复制
+
+
+ 复制
+
+
+
+
+ 下单时间:
+ {{orderInfo.create_time}}
+
+
+ 支付状态:
+ {{orderInfo.paid == 1 ? '已支付' : '未支付'}}
+
+
+ 支付积分:
+ {{orderInfo.integral}}积分
+
+
+ 支付金额:
+ ¥{{orderInfo.pay_price}}
+
+
+ 备注信息:
+ {{orderInfo.mark}}
+
+
+ 快递单号:
+ {{orderInfo.delivery_id}}
+
+
+ 快递公司:
+ {{orderInfo.delivery_name}}
+
+
+ 送货人电话:
+ {{orderInfo.delivery_id}}
+
+
+ 配送人姓名:
+ {{orderInfo.delivery_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/points_mall/integral_order_status.vue b/pages/points_mall/integral_order_status.vue
new file mode 100644
index 0000000..60d8ea8
--- /dev/null
+++ b/pages/points_mall/integral_order_status.vue
@@ -0,0 +1,321 @@
+
+
+
+
+
+
+ 商品兑换成功
+
+ 订单创建成功
+
+
+ 订单编号
+ {{orderId}}
+
+
+ 兑换时间
+ {{order_pay_info.add_time}}
+
+
+ 兑换方式
+ 积分兑换
+
+
+ 兑换积分
+ {{order_pay_info.total_price}}
+
+
+
+ 失败原因
+ {{status==2 ? '取消兑换':msg}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/points_mall/logistics_details.vue b/pages/points_mall/logistics_details.vue
new file mode 100644
index 0000000..80e0fde
--- /dev/null
+++ b/pages/points_mall/logistics_details.vue
@@ -0,0 +1,310 @@
+
+
+
+
+
+
+
+
+
+ 物流公司: {{orderInfo.delivery_name}}
+ 快递单号: {{orderInfo.delivery_id}}
+
+
+
+ 复制单号
+
+
+ 复制单号
+
+
+
+
+
+ {{item.status}}
+ {{item.time}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/addGoods/addFreightTemplate.vue b/pages/product/addGoods/addFreightTemplate.vue
new file mode 100644
index 0000000..52660a9
--- /dev/null
+++ b/pages/product/addGoods/addFreightTemplate.vue
@@ -0,0 +1,326 @@
+
+
+
+
+
+ 运费模板名称
+
+
+
+
+
+
+ 运费说明
+
+
+
+
+ 计费方式
+
+
+
+
+
+
+
+ 配送区域及运费
+
+ 去编辑
+
+
+
+
+
+
+ 指定包邮
+
+
+
+ 包邮区域
+
+ 去编辑
+
+
+
+
+
+
+ 指定区域不配送
+
+
+
+
+
+
+
+ 自定义
+
+ {{allReadySelect.length ? allReadySelect.map(val=> val.name).join(',') : '请选择不配送区域'}}
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/addGoods/addGoodDetils.vue b/pages/product/addGoods/addGoodDetils.vue
new file mode 100644
index 0000000..ed40223
--- /dev/null
+++ b/pages/product/addGoods/addGoodDetils.vue
@@ -0,0 +1,75 @@
+
+
+
+ 保存
+
+
+
+
+
diff --git a/pages/product/addGoods/freightTemplate.vue b/pages/product/addGoods/freightTemplate.vue
new file mode 100644
index 0000000..02cd35e
--- /dev/null
+++ b/pages/product/addGoods/freightTemplate.vue
@@ -0,0 +1,270 @@
+
+
+
+
+ {{ administrationFlag ? '完成' : '管理' }}
+
+
+
+
+
+
+
+
+
+ 全选({{ selectNum }})
+
+ 删除
+
+ 新增运费模板
+
+
+
+
+
diff --git a/pages/product/addGoods/index.vue b/pages/product/addGoods/index.vue
new file mode 100644
index 0000000..1ac5ecd
--- /dev/null
+++ b/pages/product/addGoods/index.vue
@@ -0,0 +1,782 @@
+
+
+
+
+
+
+
+ {{ setFormData.store_name.length }}
+ 0
+ /60
+
+
+
+ 建议:图片尺寸为750*750px
+
+
+
+
+
+
+
+ 添加图片
+
+
+
+
+
+
+ 商品简介
+
+ {{ setFormData.store_info.length }}
+ 0
+ /200
+
+
+
+
+
+
+
+
+ 关键字
+
+
+
+
+
+
+
+
+
+ 下一步
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/addGoods/modifyPrice.vue b/pages/product/addGoods/modifyPrice.vue
new file mode 100644
index 0000000..97b46b4
--- /dev/null
+++ b/pages/product/addGoods/modifyPrice.vue
@@ -0,0 +1,678 @@
+
+
+
+
+
+
+
+
+
+ 商品图
+
+
+
+
+
+ 添加图片
+
+
+
+
+ 规格信息
+
+ {{v}}
+
+
+
+ 售价
+
+
+
+
+ 成本价
+
+
+
+ 原价
+
+
+
+
+ 库存
+
+
+
+ 商品编号
+
+
+
+ 重量
+
+
+
+ 体积
+
+
+
+ 佣金(一级)
+
+
+
+ 佣金(二级)
+
+
+
+
+ 更多
+
+
+
+
+ 全选
+
+ 修改
+
+
+ 批量操作
+ 保存
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/addGoods/mulSpecification.vue b/pages/product/addGoods/mulSpecification.vue
new file mode 100644
index 0000000..8cb7035
--- /dev/null
+++ b/pages/product/addGoods/mulSpecification.vue
@@ -0,0 +1,268 @@
+
+
+
+
+ {{ administrationFlag ? '完成' : '管理' }}
+
+
+
+
+
+
+
+ 全选({{ selectNum }})
+
+ 删除
+
+ 新增规格
+
+
+
+
+
+
diff --git a/pages/product/addGoods/scss/freightTemplate.scss b/pages/product/addGoods/scss/freightTemplate.scss
new file mode 100644
index 0000000..190ebbb
--- /dev/null
+++ b/pages/product/addGoods/scss/freightTemplate.scss
@@ -0,0 +1,178 @@
+.container {
+ padding-top: 20rpx;
+ padding-bottom: 223rpx;
+}
+.freight_template {
+ background: #fff;
+ width: 710rpx;
+ margin: auto;
+ border-radius: 10rpx;
+ padding: 0 20rpx;
+ &_name {
+ height: 106rpx;
+ border-bottom: 1px solid #eeeeee;
+ display: flex;
+ align-items: center;
+ &_con {
+ flex: 1;
+ padding: 10rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ &_value {
+ flex: 1;
+ text-align: right;
+ }
+ }
+ }
+}
+
+.freight_description {
+ padding-top: 31rpx;
+ padding-bottom: 47rpx;
+ &_title {
+ padding-left: 20rpx;
+ padding-bottom: 20rpx;
+ }
+ &_textarea {
+ padding: 0 20rpx;
+ textarea {
+ padding: 20rpx;
+ width: 630rpx;
+ height: 180rpx;
+ border-radius: 10rpx;
+ background: #f5f5f5;
+ }
+ }
+}
+
+.inputClass_template_name {
+ color: #bbbbbb;
+ font-size: 30rpx;
+}
+
+.textarea_class {
+ color: #bbbbbb;
+ font-size: 28rpx;
+}
+
+.billing_method {
+ margin: auto;
+ margin-top: 30rpx;
+ width: 710rpx;
+ background: #fff;
+ padding: 30rpx 0 36rpx 30rpx;
+ border-radius: 10rpx;
+ &_title {
+ margin-bottom: 42rpx;
+ color: #333333;
+ font-size: 30rpx;
+ }
+
+ .radioContainer {
+ display: flex;
+ justify-content: space-between;
+ .uni-list-cell {
+ display: flex;
+ padding-right: 74rpx;
+ >view:nth-child(1) {
+ }
+ >view:nth-child(2) {
+ white-space: nowrap;
+ }
+ }
+ }
+
+}
+
+
+.regional_freight {
+ margin: auto;
+ margin-top: 30rpx;
+ width: 710rpx;
+ height: 106rpx;
+ background: #FFFFFF;
+ border-radius: 10rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 30rpx;
+ &_label {
+ color: #333333;
+ font-size: 30rpx;
+ }
+
+ &_value {
+ color: #BBBBBB;
+ font-size: 30rpx;
+ >span:nth-child(1) {
+ display: inline-block;
+ margin-right: 15rpx;
+ }
+ }
+}
+
+.free_shipping {
+ background: #fff;
+ width: 710rpx;
+ margin: auto;
+ &_item {
+ height: 106rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 30rpx;
+ &_value {
+ color: #BBBBBB;
+ font-size: 30rpx;
+ display: flex;
+ align-items: center;
+ >span:nth-child(1) {
+ display: inline-block;
+ margin-right: 15rpx;
+ max-width: 400rpx;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+ }
+ }
+}
+
+.handle {
+ width: 100%;
+ height: 126rpx;
+ background: #ffffff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ &_button {
+ width: 690rpx;
+ height: 86rpx;
+ background: #e93323;
+ border-radius: 43px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 32rpx;
+ color: #ffffff;
+ }
+}
+
+
+
+.width100 {
+ width: 100%;
+}
+.mt30 {
+ margin-top: 30rpx;
+}
+
+
+
+
+
+
diff --git a/pages/product/addGoods/scss/index.scss b/pages/product/addGoods/scss/index.scss
new file mode 100644
index 0000000..696c49c
--- /dev/null
+++ b/pages/product/addGoods/scss/index.scss
@@ -0,0 +1,270 @@
+// addGoodsFormData
+// singleSpecification -- 单规格
+// attrValue -- 多规格数据
+// modifyPriceData -- 多规格选择时,已经存储的数据
+.container {
+ padding-top: 20rpx;
+ padding-bottom: 156rpx;
+}
+
+.tip {
+ padding: 16rpx 0 0 40rpx;
+ font-size: 22rpx;
+ color: #e93323;
+ display: flex;
+ align-items: center;
+ margin-bottom: 40rpx;
+ .iconfont {
+ display: inline-block;
+ margin-right: 10rpx;
+ }
+}
+
+.popup_group {
+ background: #fff;
+ margin: 31rpx auto;
+ width: 710rpx;
+ font-size: 30rpx;
+ border-radius: 10rpx;
+ .popup_group_item {
+ padding: 32rpx 30rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .popup_group_item_value {
+ display: flex;
+ align-items: center;
+ .popup_group_item_message {
+ margin-right: 15rpx;
+ color: #bbbbbb;
+ max-width: 400rpx;
+ &_value {
+ display: inline-block;
+ max-width: 400rpx;
+ color: #000;
+ }
+ }
+ .iconfont {
+ color: #bbbbbb;
+ }
+ input {
+ text-align: right;
+ }
+ }
+ }
+ > view:not(:last-child) {
+ border-bottom: 1px solid #eeeeee;
+ }
+}
+
+.handle {
+ width: 100%;
+ height: 126rpx;
+ background: #ffffff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ z-index: 10;
+ &_button {
+ width: 690rpx;
+ height: 86rpx;
+ background: #e93323;
+ border-radius: 43px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 32rpx;
+ color: #ffffff;
+ }
+}
+
+.input_content {
+ background: #fff;
+ padding: 20rpx 30rpx 40rpx 30rpx;
+ width: 710rpx;
+ margin: auto;
+ box-sizing: border-box;
+ border-radius: 10rpx;
+ &_textarea {
+ border-bottom: 1px solid #eeeeee;
+ padding-bottom: 19rpx;
+ textarea {
+ height: 114rpx;
+ }
+ > view {
+ text-align: right;
+ color: #666666;
+ font-size: 24rpx;
+ }
+ }
+
+ &_photo {
+ margin-top: 30rpx;
+ display: flex;
+ flex-wrap: wrap;
+
+ &_adPh {
+ position: relative;
+ width: 210rpx;
+ height: 210rpx;
+ border: 1px solid #dddddd;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ border-radius: 8rpx;
+ margin-right: 10rpx;
+ margin-bottom: 10rpx;
+ box-sizing: border-box;
+ &:nth-child(3n){
+ margin-right: 0;
+ }
+ > view:nth-child(1) {
+ height: 37rpx;
+ margin-bottom: 16rpx;
+ display: flex;
+ justify-content: center;
+ image {
+ width: 45rpx;
+ display: block;
+ }
+ }
+
+ > view:nth-child(2) {
+ text-align: center;
+ color: #bbbbbb;
+ font-size: 24rpx;
+ }
+ .photos {
+ width: 206rpx;
+ // height: 208rpx;
+ }
+ &_jiao {
+ position: absolute;
+ top: -2rpx;
+ right: -1rpx;
+ width: 40rpx;
+ height: 40rpx;
+ background: rgba(0,0,0,.6);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 0 8rpx 0 8rpx;
+ image {
+ width: 16rpx;
+ height: 16rpx;
+ }
+ }
+ }
+ }
+ &_describe {
+ border-top: 1px solid #eeeeee;
+ padding-top: 30rpx;
+ padding-bottom: 47rpx;
+ border-bottom: 1px solid #eeeeee;
+ &_title {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ &_msg {
+ color: #333333;
+ font-size: 30rpx;
+ }
+ &_num {
+ color: #666666;
+ font-size: 24rpx;
+ }
+ }
+
+ &_textarea {
+ border-radius: 10px;
+ margin-top: 20rpx;
+ height: 180rpx;
+ background: #f5f5f5;
+ padding: 20rpx;
+ textarea {
+ font-size: 28rpx;
+ height: 150rpx;
+ }
+ }
+ }
+
+ &_keyword {
+ padding-top: 32rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 30rpx;
+ &_value {
+ flex: 1;
+ margin-left: 30rpx;
+ input {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+}
+.photo_count{
+ margin-top: 28rpx;
+ .photo_size{
+ font-size: 24rpx;
+ color: #999999;
+ }
+}
+.radio {
+ padding: 30rpx;
+ &_label {
+ padding-left: 10rpx;
+ color: #333333;
+ font-size: 30rpx;
+ display: flex;
+ align-items: center;
+ .select_check {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 40rpx;
+ height: 40rpx;
+ border: 1px solid #cccccc;
+ border-radius: 50%;
+ margin-right: 20rpx;
+
+ .iconfont {
+ font-size: 24rpx;
+ }
+ }
+
+ .select {
+ background: #e93323;
+ border: none;
+ .iconfont {
+ color: #fff;
+ }
+ }
+ }
+ .select_group {
+ display: flex;
+ }
+ .flex_start {
+ padding: 0 10rpx;
+ margin-top: 40rpx;
+ justify-content: flex-start;
+ }
+
+ &_select {
+ display: flex;
+ margin-right: 110rpx;
+ }
+}
+
+.dobuButton {
+ padding: 0 30rpx;
+}
+
+.margin_right {
+ background: #FD6523;
+ margin-right: 30rpx;
+}
\ No newline at end of file
diff --git a/pages/product/addGoods/secound.vue b/pages/product/addGoods/secound.vue
new file mode 100644
index 0000000..1da9974
--- /dev/null
+++ b/pages/product/addGoods/secound.vue
@@ -0,0 +1,488 @@
+
+
+
+
+ 是否推荐
+
+
+
+ 是否开启礼包
+
+
+
+
+
+ 开启后此商品只能在分销礼包中展示并销售
+
+
+
+ 限购数量
+
+
+
+
+
+ 商品排序
+
+
+
+
+
+
+
+ 商品详情
+
+ 去修改
+ 设置详情
+
+
+
+
+ 商品视频
+
+
+
+
+
+
+
+
+
+ 添加视频
+
+
+
+
+
+
+ 上一步
+ 提交
+
+
+
+
+
+
diff --git a/pages/product/addGoods/singleSpecification.vue b/pages/product/addGoods/singleSpecification.vue
new file mode 100644
index 0000000..6a00744
--- /dev/null
+++ b/pages/product/addGoods/singleSpecification.vue
@@ -0,0 +1,198 @@
+
+
+
+
+ 更多
+
+
+
+ 保存
+
+
+
+
+
+
+
+
diff --git a/pages/product/addGoods/specificationProperties.vue b/pages/product/addGoods/specificationProperties.vue
new file mode 100644
index 0000000..bccad0f
--- /dev/null
+++ b/pages/product/addGoods/specificationProperties.vue
@@ -0,0 +1,283 @@
+
+
+
+ 规格名称
+
+
+
+
+ 添加规格属性
+
+
+
+
+ {{item.value}}
+
+ 删除
+ 编辑
+
+
+
+
+ {{val}}
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/components/areas.vue b/pages/product/components/areas.vue
new file mode 100644
index 0000000..98d364a
--- /dev/null
+++ b/pages/product/components/areas.vue
@@ -0,0 +1,297 @@
+
+
+
+
+ 选择地区
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+ {{ item.name }}
+
+ 请选择
+
+
+
+
+ {{ item.name }}
+
+
+
+
+ 确定
+
+
+
+
+
+
+
diff --git a/pages/product/components/attr.vue b/pages/product/components/attr.vue
new file mode 100644
index 0000000..c3acc07
--- /dev/null
+++ b/pages/product/components/attr.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
diff --git a/pages/product/components/distributionArea.vue b/pages/product/components/distributionArea.vue
new file mode 100644
index 0000000..968126d
--- /dev/null
+++ b/pages/product/components/distributionArea.vue
@@ -0,0 +1,371 @@
+
+
+
+ 配送区域及运费
+
+
+
+
+
+
+ {{ item.title }}
+
+ {{ item.label }}
+
+
+
+ 删除
+
+
+
+ 配送区域
+
+
+ {{item.city_name.length ? item.city_name.map(val => val.name).join(',') : '选择区域'}}
+ {{item.city_name}}
+
+ 选择区域
+
+
+
+
+ 首件
+
+
+
+
+
+ 运费
+
+
+
+
+
+ 续件
+
+
+
+
+
+
+ 续费
+
+
+
+
+
+
+
+
+ 添加配送区域及运费
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/components/inputGoodsDetils.vue b/pages/product/components/inputGoodsDetils.vue
new file mode 100644
index 0000000..11c1168
--- /dev/null
+++ b/pages/product/components/inputGoodsDetils.vue
@@ -0,0 +1,286 @@
+
+
+
+
+ {{prodectContent.store_name.length}}0/{{maxLength}}
+
+
+
+
+
+
+
+
+ 添加图片
+
+
+
+
+ 商品简介
+
+ {{prodectContent.store_info.length}}
+ 0/200
+
+
+
+
+
+ 关键字
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/components/linkageAssembly.vue b/pages/product/components/linkageAssembly.vue
new file mode 100644
index 0000000..7415bcc
--- /dev/null
+++ b/pages/product/components/linkageAssembly.vue
@@ -0,0 +1,387 @@
+
+
+
+
+
+
+
diff --git a/pages/product/components/parcelArea.vue b/pages/product/components/parcelArea.vue
new file mode 100644
index 0000000..28c0082
--- /dev/null
+++ b/pages/product/components/parcelArea.vue
@@ -0,0 +1,316 @@
+
+
+
+ 指定包邮区域
+
+
+
+
+ 新增包邮区域
+
+
+ 删除
+
+
+
+ 选择地区
+
+
+ {{item.city_name.length ? item.city_name.map(val => val.name).join(',') : '选择区域'}}
+ {{item.city_name}}
+
+ 选择区域
+
+
+
+
+ 最低限购数
+
+
+
+
+
+ 最低购买金额
+
+
+
+
+
+
+
+ 添加指定包邮区域
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/components/platform.vue b/pages/product/components/platform.vue
new file mode 100644
index 0000000..3e0a268
--- /dev/null
+++ b/pages/product/components/platform.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
diff --git a/pages/product/components/popupContainer.vue b/pages/product/components/popupContainer.vue
new file mode 100644
index 0000000..3d3aa95
--- /dev/null
+++ b/pages/product/components/popupContainer.vue
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
diff --git a/pages/product/components/search.vue b/pages/product/components/search.vue
new file mode 100644
index 0000000..4d39416
--- /dev/null
+++ b/pages/product/components/search.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/components/selectForm.vue b/pages/product/components/selectForm.vue
new file mode 100644
index 0000000..7815b30
--- /dev/null
+++ b/pages/product/components/selectForm.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+ {{ item.value }}
+ {{ item.holder }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/components/shopItem.vue b/pages/product/components/shopItem.vue
new file mode 100644
index 0000000..1517e2b
--- /dev/null
+++ b/pages/product/components/shopItem.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+ {{itemObject.store_name}}
+
+ 库存:{{itemObject.stock}}
+ 销量:{{itemObject.sales}}
+
+
+ ¥{{itemObject.price}}
+ ¥{{itemObject.ot_price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/components/specificationAttr.vue b/pages/product/components/specificationAttr.vue
new file mode 100644
index 0000000..8244267
--- /dev/null
+++ b/pages/product/components/specificationAttr.vue
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+ {{specData.name.length}}0/20
+
+
+ 规格属性
+
+
+
+
+
+ 每行只能填一个规格属性,多个请换行输入
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/components/store_classification.vue b/pages/product/components/store_classification.vue
new file mode 100644
index 0000000..afffc43
--- /dev/null
+++ b/pages/product/components/store_classification.vue
@@ -0,0 +1,302 @@
+
+
+
+ 管理
+ 选择店铺分类
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ item.label }}
+
+ 请选择
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ 确定
+
+
+
+
+
+
+
diff --git a/pages/product/components/tip.vue b/pages/product/components/tip.vue
new file mode 100644
index 0000000..f9382ff
--- /dev/null
+++ b/pages/product/components/tip.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+ {{message}}
+
+
+
+
+
+
diff --git a/pages/product/goodsOnSale/index.vue b/pages/product/goodsOnSale/index.vue
new file mode 100644
index 0000000..835d22f
--- /dev/null
+++ b/pages/product/goodsOnSale/index.vue
@@ -0,0 +1,448 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 多规格
+
+
+ {{ item.store_name }}
+
+ 库存:{{ item.stock }}
+ 销量:{{ item.sales }}
+
+
+ ¥{{ item.price }}
+ ¥{{ item.ot_price }}
+
+
+
+
+ 下架
+ 上架
+ 删除
+ 恢复
+ 编辑
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/goodsOnSale/scss/index.scss b/pages/product/goodsOnSale/scss/index.scss
new file mode 100644
index 0000000..691a332
--- /dev/null
+++ b/pages/product/goodsOnSale/scss/index.scss
@@ -0,0 +1,22 @@
+
+.title {
+ background: #fff;
+ .search {
+ padding: 30rpx 25rpx;
+ }
+ .menu {
+ padding: 0rpx 25rpx;
+ }
+ .menu_list {
+ display: flex;
+ &_item {
+ margin-right: 70rpx;
+ white-space: nowrap;
+ padding-bottom: 24rpx;
+ }
+ .selectMenuId {
+ border-bottom: 6rpx solid #e93323;
+ }
+ }
+}
+
diff --git a/pages/product/list/index.vue b/pages/product/list/index.vue
new file mode 100644
index 0000000..b917787
--- /dev/null
+++ b/pages/product/list/index.vue
@@ -0,0 +1,498 @@
+
+
+
+
+
+
+
+
+
+
+ 多规格
+
+
+
+ 礼包
+ {{item.store_name}}
+
+
+
+ 库存: {{item.stock}}
+ 销量: {{item.sales}}
+
+
+ ¥{{item.price}}
+ ¥{{item.ot_price}}
+
+
+
+
+
+
+ 下架
+ 上架
+ 编辑
+ 预览
+ 删除
+ {{item.is_good ? '取消推荐' : '店铺推荐'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/recycleBin/index.vue b/pages/product/recycleBin/index.vue
new file mode 100644
index 0000000..cd6b618
--- /dev/null
+++ b/pages/product/recycleBin/index.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/soldOutGoods/index.vue b/pages/product/soldOutGoods/index.vue
new file mode 100644
index 0000000..ff57f31
--- /dev/null
+++ b/pages/product/soldOutGoods/index.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/static/images/close.png b/pages/product/static/images/close.png
new file mode 100644
index 0000000..ce91206
Binary files /dev/null and b/pages/product/static/images/close.png differ
diff --git a/pages/product/static/images/creamer.png b/pages/product/static/images/creamer.png
new file mode 100644
index 0000000..71ce6cf
Binary files /dev/null and b/pages/product/static/images/creamer.png differ
diff --git a/pages/product/static/images/product_add.png b/pages/product/static/images/product_add.png
new file mode 100644
index 0000000..3c4e038
Binary files /dev/null and b/pages/product/static/images/product_add.png differ
diff --git a/pages/product/static/images/product_cate.png b/pages/product/static/images/product_cate.png
new file mode 100644
index 0000000..8f951a8
Binary files /dev/null and b/pages/product/static/images/product_cate.png differ
diff --git a/pages/product/static/images/product_freight.png b/pages/product/static/images/product_freight.png
new file mode 100644
index 0000000..c9d13ac
Binary files /dev/null and b/pages/product/static/images/product_freight.png differ
diff --git a/pages/product/static/images/product_out.png b/pages/product/static/images/product_out.png
new file mode 100644
index 0000000..eff77f1
Binary files /dev/null and b/pages/product/static/images/product_out.png differ
diff --git a/pages/product/static/images/product_recycle.png b/pages/product/static/images/product_recycle.png
new file mode 100644
index 0000000..0cd5f82
Binary files /dev/null and b/pages/product/static/images/product_recycle.png differ
diff --git a/pages/product/static/images/product_sales.png b/pages/product/static/images/product_sales.png
new file mode 100644
index 0000000..d5353fb
Binary files /dev/null and b/pages/product/static/images/product_sales.png differ
diff --git a/pages/product/static/images/product_specification.png b/pages/product/static/images/product_specification.png
new file mode 100644
index 0000000..2107d05
Binary files /dev/null and b/pages/product/static/images/product_specification.png differ
diff --git a/pages/product/storeClassification/addStoreClass.vue b/pages/product/storeClassification/addStoreClass.vue
new file mode 100644
index 0000000..9aaf1a6
--- /dev/null
+++ b/pages/product/storeClassification/addStoreClass.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+ {{formData.cate_name.length}}0/12
+
+
+
+
+
+
+
+
+ 添加图片
+
+
+
+
+
+ 上级分类
+
+
+
+
+
+
+ 是否显示
+
+
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
+
diff --git a/pages/product/storeClassification/index.vue b/pages/product/storeClassification/index.vue
new file mode 100644
index 0000000..be2da03
--- /dev/null
+++ b/pages/product/storeClassification/index.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+ {{ item.cate_name }}
+
+
+
+
+
+
+
+ {{ val.cate_name }}
+
+
+
+
+
+
+ 长按分类标题可删除
+
+
+ 添加分类
+
+
+
+
+
+
diff --git a/pages/product/storeClassification/scss/addStoreClass.scss b/pages/product/storeClassification/scss/addStoreClass.scss
new file mode 100644
index 0000000..edfabb3
--- /dev/null
+++ b/pages/product/storeClassification/scss/addStoreClass.scss
@@ -0,0 +1,166 @@
+.container {
+ padding-top: 20rpx;
+ padding-bottom: 126rpx;
+}
+
+.input_content {
+ background: #fff;
+ padding: 20rpx 40rpx 40rpx 30rpx;
+ width: 710rpx;
+ margin: auto;
+ box-sizing: border-box;
+ border-radius: 10rpx;
+ &_textarea {
+ border-bottom: 1px solid #eeeeee;
+ padding-bottom: 19rpx;
+ textarea {
+ height: 114rpx;
+ }
+ > view {
+ text-align: right;
+ color: #666666;
+ font-size: 24rpx;
+ }
+ }
+
+ &_photo {
+ margin-top: 41rpx;
+ display: flex;
+ flex-wrap: wrap;
+ .photos{
+ width: 156rpx;
+ height: 156rpx;
+ }
+ &_adPh {
+ position: relative;
+ width: 156rpx;
+ height: 156rpx;
+ border: 1px solid #dddddd;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ border-radius: 8rpx;
+ margin-right: 30rpx;
+ margin-bottom: 30rpx;
+ > image {
+ height: 100%;
+ margin: auto;
+ }
+ > view:nth-child(1) {
+ height: 37rpx;
+ margin-bottom: 16rpx;
+ display: flex;
+ justify-content: center;
+ image {
+ width: 45rpx;
+ display: block;
+ }
+ }
+
+ > view:nth-child(2) {
+ text-align: center;
+ color: #bbbbbb;
+ font-size: 24rpx;
+ }
+ &_jiao {
+ position: absolute;
+ top: -14rpx;
+ right: -14rpx;
+ width: 40rpx;
+ height: 40rpx;
+ background: #e93323;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 50%;
+ image {
+ width: 16rpx;
+ height: 16rpx;
+ }
+ }
+
+ }
+ }
+
+
+}
+.list_content {
+ margin-top: 31rpx;
+ padding: 0 20rpx;
+}
+.handle {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ height: 126rpx;
+ width: 100%;
+ background: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ &_button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 32rpx;
+ color: #fff;
+ width: 690rpx;
+ height: 86rpx;
+ background: #e93323;
+ border-radius: 43rpx;
+ }
+}
+.placeholderStyle {
+ color: #bbbbbb;
+ font-size: 30rpx;
+}
+.list_item {
+ background: #fff;
+ padding: 0rpx 30rpx;
+ min-height: 106rpx;
+ border-radius: 10px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20rpx;
+ position: relative;
+ .iconfont {
+ font-size: 14px;
+ color: #BBBBBB;
+ position: absolute;
+ /*#ifndef MP*/
+ right: 0;
+ /*#endif*/
+ /*#ifdef MP || APP-PLUS*/
+ right: 20rpx;
+ /*#endif*/
+ top: 50%;
+ margin-top: -12rpx;
+ }
+ &_title {
+ color: #333333;
+ font-size: 30rpx;
+ width: 200rpx;
+ }
+ .input_class,.uni-input-input {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ text-align: right;
+ &_con {
+ font-size: 30rpx;
+ text-align: right;
+ flex: 1;
+ }
+
+ }
+ /deep/.uni-input-input{
+ padding-right: 40rpx;
+ width: 240rpx;
+ text-align: right;
+ }
+}
+.uni-list-cell{
+ position: relative;
+}
\ No newline at end of file
diff --git a/pages/product/storeClassification/scss/index.scss b/pages/product/storeClassification/scss/index.scss
new file mode 100644
index 0000000..6294621
--- /dev/null
+++ b/pages/product/storeClassification/scss/index.scss
@@ -0,0 +1,90 @@
+.container {
+ padding-bottom: 126rpx;
+}
+.storeClassContent {
+ &_item {
+ width: 710rpx;
+ margin: 20rpx auto;
+ padding: 32rpx 30rpx;
+ background: #ffffff;
+ &_father {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ color: #282828;
+ &_label {
+ display: flex;
+ align-items: center;
+ font-size: 30rpx;
+ image {
+ width: 30rpx;
+ margin-right: 10rpx;
+ }
+ .iconfont{
+ color: #E93323;
+ font-size: 32rpx;
+ margin-right: 10rpx;
+ }
+
+ }
+ &_right {
+ color: #bbbbbb;
+ .iconfont{
+
+ color: #282828;
+ }
+ }
+ }
+
+ &_child {
+ margin-top: 30rpx;
+ &_item {
+ background: #f5f5f5;
+ padding: 24rpx 30rpx;
+ border-radius: 10px;
+ margin-bottom: 20rpx;
+ color: #282828;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ font-size: 26rpx;
+ }
+ }
+ }
+
+ &_tip {
+ display: flex;
+ align-items: center;
+ color: #e93323;
+ font-size: 22rpx;
+ padding: 23rpx 30rpx;
+ image {
+ width: 23rpx;
+ height: 23rpx;
+ margin-right: 10rpx;
+ }
+ }
+}
+
+.handle_bottom {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 126rpx;
+ background: #ffffff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ &_button {
+ width: 690rpx;
+ height: 86rpx;
+ background: #e93323;
+ border-radius: 43rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 32rpx;
+ color: #FFFFFF;
+ }
+}
diff --git a/pages/retrieve_password/index.vue b/pages/retrieve_password/index.vue
new file mode 100644
index 0000000..46772d8
--- /dev/null
+++ b/pages/retrieve_password/index.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+ 找回密码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确认
+
+ 立即登录
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/short_video/appSwiper/index.nvue b/pages/short_video/appSwiper/index.nvue
new file mode 100644
index 0000000..c2a8350
--- /dev/null
+++ b/pages/short_video/appSwiper/index.nvue
@@ -0,0 +1,1361 @@
+
+
+
+
+
+
+
+
+ 暂无短视频内容哦~
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.status == -1 ? '审核未通过' : '已下架'}},内容仅自己可见
+
+
+
+ 正在审核,内容仅自己可见
+
+
+ {{(item.status == -1 || item.status == -2) ? item.refusal : '发布的内容审核通过后,将在首页展示!'}}
+
+
+
+
+
+ @{{item.author.nickname}}
+
+
+
+ {{item.content}}
+
+ 收起
+
+
+
+ {{item.content.slice(0,29)}}...
+ 更多
+
+
+
+
+
+
+
+
+
+
+ {{goods.spu.store_name.slice(0,12)}}...
+ {{goods.spu && goods.spu.store_name}}
+
+ ¥{{goods.spu.price}}
+ 购买
+
+
+
+
+
+
+
+
+
+ #{{item.topic.topic_name}}
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ {{item.count_start > 0 ? item.count_start : '点赞'}}
+
+
+
+
+
+
+ 分享
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.relevance.length}}
+
+
+
+
+
+
+ 编辑
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/short_video/components/douyin-scrollview/douyin-scrollview.nvue b/pages/short_video/components/douyin-scrollview/douyin-scrollview.nvue
new file mode 100644
index 0000000..cd8e760
--- /dev/null
+++ b/pages/short_video/components/douyin-scrollview/douyin-scrollview.nvue
@@ -0,0 +1,508 @@
+
+
+
+
+ 评论 {{all}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.author.nickname}}
+ {{item.content}}
+ {{item.create_time}}
+
+
+
+
+
+ {{item.count_start}}
+
+
+
+
+
+
+
+ {{itemn.author.nickname}}
+
+ 回复 @{{itemn.reply.nickname}}
+ {{itemn.content}}
+
+ {{itemn.create_time}}
+
+
+
+ {{itemn.count_start}}
+
+
+
+
+
+
+ 到底了
+
+
+
+
+ 暂无评论,快去抢沙发吧~
+
+
+
+
+
+
+
+
+ 发送
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/short_video/components/index/aixining.png b/pages/short_video/components/index/aixining.png
new file mode 100644
index 0000000..99404d3
Binary files /dev/null and b/pages/short_video/components/index/aixining.png differ
diff --git a/pages/short_video/components/index/close.png b/pages/short_video/components/index/close.png
new file mode 100644
index 0000000..8a09a82
Binary files /dev/null and b/pages/short_video/components/index/close.png differ
diff --git a/pages/short_video/components/index/collection.png b/pages/short_video/components/index/collection.png
new file mode 100644
index 0000000..640e390
Binary files /dev/null and b/pages/short_video/components/index/collection.png differ
diff --git a/pages/short_video/components/index/evaluate.png b/pages/short_video/components/index/evaluate.png
new file mode 100644
index 0000000..4e9320f
Binary files /dev/null and b/pages/short_video/components/index/evaluate.png differ
diff --git a/pages/short_video/components/index/logins.gif b/pages/short_video/components/index/logins.gif
new file mode 100644
index 0000000..559e4c0
Binary files /dev/null and b/pages/short_video/components/index/logins.gif differ
diff --git a/pages/short_video/components/index/pause.png b/pages/short_video/components/index/pause.png
new file mode 100644
index 0000000..dda7762
Binary files /dev/null and b/pages/short_video/components/index/pause.png differ
diff --git a/pages/short_video/components/index/play.png b/pages/short_video/components/index/play.png
new file mode 100644
index 0000000..a53edd2
Binary files /dev/null and b/pages/short_video/components/index/play.png differ
diff --git a/pages/short_video/components/index/share-fill.png b/pages/short_video/components/index/share-fill.png
new file mode 100644
index 0000000..b9a9771
Binary files /dev/null and b/pages/short_video/components/index/share-fill.png differ
diff --git a/pages/short_video/components/index/video-delete.png b/pages/short_video/components/index/video-delete.png
new file mode 100644
index 0000000..71727c9
Binary files /dev/null and b/pages/short_video/components/index/video-delete.png differ
diff --git a/pages/short_video/components/index/video-edit.png b/pages/short_video/components/index/video-edit.png
new file mode 100644
index 0000000..0b14903
Binary files /dev/null and b/pages/short_video/components/index/video-edit.png differ
diff --git a/pages/short_video/components/index/video-failed.png b/pages/short_video/components/index/video-failed.png
new file mode 100644
index 0000000..f93c539
Binary files /dev/null and b/pages/short_video/components/index/video-failed.png differ
diff --git a/pages/short_video/components/index/video-review.png b/pages/short_video/components/index/video-review.png
new file mode 100644
index 0000000..f87b36b
Binary files /dev/null and b/pages/short_video/components/index/video-review.png differ
diff --git a/pages/short_video/components/index/we-chat.png b/pages/short_video/components/index/we-chat.png
new file mode 100644
index 0000000..6951e7b
Binary files /dev/null and b/pages/short_video/components/index/we-chat.png differ
diff --git a/pages/short_video/components/index/xin-2.png b/pages/short_video/components/index/xin-2.png
new file mode 100644
index 0000000..6ee5ec7
Binary files /dev/null and b/pages/short_video/components/index/xin-2.png differ
diff --git a/pages/short_video/components/index/xin.png b/pages/short_video/components/index/xin.png
new file mode 100644
index 0000000..1a66f8c
Binary files /dev/null and b/pages/short_video/components/index/xin.png differ
diff --git a/pages/short_video/components/index/zan01.png b/pages/short_video/components/index/zan01.png
new file mode 100644
index 0000000..dba7d64
Binary files /dev/null and b/pages/short_video/components/index/zan01.png differ
diff --git a/pages/short_video/components/index/zan02.png b/pages/short_video/components/index/zan02.png
new file mode 100644
index 0000000..0646a89
Binary files /dev/null and b/pages/short_video/components/index/zan02.png differ
diff --git a/pages/short_video/components/mentioned/mentioned.vue b/pages/short_video/components/mentioned/mentioned.vue
new file mode 100644
index 0000000..c8bba63
--- /dev/null
+++ b/pages/short_video/components/mentioned/mentioned.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.spu.store_name.slice(0,32)}}...
+ {{item.spu && item.spu.store_name}}
+
+ ¥{{item.spu.price}}
+ 立即购买
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/short_video/nvueSwiper/index.nvue b/pages/short_video/nvueSwiper/index.nvue
new file mode 100644
index 0000000..599a567
--- /dev/null
+++ b/pages/short_video/nvueSwiper/index.nvue
@@ -0,0 +1,1588 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{list.status == -1 ? '审核未通过' : '已下架'}},内容仅自己可见
+
+
+
+ 正在审核,内容仅自己可见
+
+
+ {{(list.status == -1 || list.status == -2) ? list.refusal : '发布的内容审核通过后,将在首页展示!'}}
+
+
+
+
+
+
+ @{{list.author && list.author.nickname}}
+
+
+
+ {{list.content}}
+
+ 收起
+
+
+
+ {{list.content.slice(0,15)}}...
+ 展开
+
+
+
+
+
+
+
+
+
+
+ {{goods.spu.store_name}}
+
+ ¥{{goods.spu.price}}
+ 购买
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.spu.store_name}}
+
+ ¥{{goods.spu.price}}
+ 购买
+
+
+
+
+
+
+
+
+
+
+ #{{list.topic.topic_name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{list.count_start > 0 ? list.count_start : '点赞'}}
+
+
+
+
+
+
+ 分享
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+
+ 删除
+
+
+
+
+
+
+
+ {{list.relevance.length}}
+
+
+
+
+
+
+
+
+
+ 暂无短视频内容哦~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存到相册
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/short_video/static/img/index/close.png b/pages/short_video/static/img/index/close.png
new file mode 100644
index 0000000..8a09a82
Binary files /dev/null and b/pages/short_video/static/img/index/close.png differ
diff --git a/pages/short_video/static/img/index/collection.png b/pages/short_video/static/img/index/collection.png
new file mode 100644
index 0000000..640e390
Binary files /dev/null and b/pages/short_video/static/img/index/collection.png differ
diff --git a/pages/short_video/static/img/index/evaluate.png b/pages/short_video/static/img/index/evaluate.png
new file mode 100644
index 0000000..4e9320f
Binary files /dev/null and b/pages/short_video/static/img/index/evaluate.png differ
diff --git a/pages/short_video/static/img/index/icon-back.png b/pages/short_video/static/img/index/icon-back.png
new file mode 100644
index 0000000..f1a635f
Binary files /dev/null and b/pages/short_video/static/img/index/icon-back.png differ
diff --git a/pages/short_video/static/img/index/logins.gif b/pages/short_video/static/img/index/logins.gif
new file mode 100644
index 0000000..559e4c0
Binary files /dev/null and b/pages/short_video/static/img/index/logins.gif differ
diff --git a/pages/short_video/static/img/index/pause.png b/pages/short_video/static/img/index/pause.png
new file mode 100644
index 0000000..dda7762
Binary files /dev/null and b/pages/short_video/static/img/index/pause.png differ
diff --git a/pages/short_video/static/img/index/play.png b/pages/short_video/static/img/index/play.png
new file mode 100644
index 0000000..a53edd2
Binary files /dev/null and b/pages/short_video/static/img/index/play.png differ
diff --git a/pages/short_video/static/img/index/posterbackgd.png b/pages/short_video/static/img/index/posterbackgd.png
new file mode 100644
index 0000000..99e1f1c
Binary files /dev/null and b/pages/short_video/static/img/index/posterbackgd.png differ
diff --git a/pages/short_video/static/img/index/share-fill.png b/pages/short_video/static/img/index/share-fill.png
new file mode 100644
index 0000000..b9a9771
Binary files /dev/null and b/pages/short_video/static/img/index/share-fill.png differ
diff --git a/pages/short_video/static/img/index/video-delete.png b/pages/short_video/static/img/index/video-delete.png
new file mode 100644
index 0000000..71727c9
Binary files /dev/null and b/pages/short_video/static/img/index/video-delete.png differ
diff --git a/pages/short_video/static/img/index/video-edit.png b/pages/short_video/static/img/index/video-edit.png
new file mode 100644
index 0000000..0b14903
Binary files /dev/null and b/pages/short_video/static/img/index/video-edit.png differ
diff --git a/pages/short_video/static/img/index/video-failed.png b/pages/short_video/static/img/index/video-failed.png
new file mode 100644
index 0000000..f93c539
Binary files /dev/null and b/pages/short_video/static/img/index/video-failed.png differ
diff --git a/pages/short_video/static/img/index/video-review.png b/pages/short_video/static/img/index/video-review.png
new file mode 100644
index 0000000..f87b36b
Binary files /dev/null and b/pages/short_video/static/img/index/video-review.png differ
diff --git a/pages/short_video/static/img/index/we-chat.png b/pages/short_video/static/img/index/we-chat.png
new file mode 100644
index 0000000..6951e7b
Binary files /dev/null and b/pages/short_video/static/img/index/we-chat.png differ
diff --git a/pages/short_video/static/img/index/xin-2.png b/pages/short_video/static/img/index/xin-2.png
new file mode 100644
index 0000000..6ee5ec7
Binary files /dev/null and b/pages/short_video/static/img/index/xin-2.png differ
diff --git a/pages/short_video/static/img/index/xin.png b/pages/short_video/static/img/index/xin.png
new file mode 100644
index 0000000..1a66f8c
Binary files /dev/null and b/pages/short_video/static/img/index/xin.png differ
diff --git a/pages/small_page/index.vue b/pages/small_page/index.vue
new file mode 100644
index 0000000..0096b13
--- /dev/null
+++ b/pages/small_page/index.vue
@@ -0,0 +1,1419 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.cate_name }}
+
+
+
+ 更多
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.store_name }}
+
+
+
+ ¥
+ {{ item.price }}
+
+
+
+ {{ item.merchant.type_name }}
+ 自营
+
+ {{ item.product_type == 1 ? '秒杀' : item.product_type == 2 ? '预售' : item.product_type == 3 ? '助力' : item.product_type == 4 ? '拼团' : '' }}
+
+ 领券
+ 包邮
+
+
+
+
+
+ {{ loadTitle }}
+
+
+
+
+
+
+
+ 暂无商品,去看点什么吧
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/store/applicationRecord/index.vue b/pages/store/applicationRecord/index.vue
new file mode 100644
index 0000000..f3f47ea
--- /dev/null
+++ b/pages/store/applicationRecord/index.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+ {{item.mer_name}}
+ 提交时间:{{item.create_time}}
+ 原因:{{item.fail_msg}}
+
+
+
+
+
+
+
+ {{statusText(item.status)}}
+
+ {{statusBtn(item.status)}}
+
+
+
+
+
+
+ 暂无申请记录,快去申请入驻吧!
+
+
+
+
+
+
+
+
diff --git a/pages/store/component/index.js b/pages/store/component/index.js
new file mode 100644
index 0000000..86aac47
--- /dev/null
+++ b/pages/store/component/index.js
@@ -0,0 +1,18 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+const path = require('path')
+const files = require.context('../../index/component', false, /\.vue$/)
+
+const modules = {}
+files.keys().forEach(key => {
+ const name = path.basename(key, '.vue')
+ modules[name] = files(key).default || files(key)
+})
+export default modules
\ No newline at end of file
diff --git a/pages/store/detail/index.vue b/pages/store/detail/index.vue
new file mode 100644
index 0000000..11edf65
--- /dev/null
+++ b/pages/store/detail/index.vue
@@ -0,0 +1,520 @@
+
+
+
+
+
+
+
+ {{ store.mer_name }}
+
+ {{ store.type_name }}
+ 自营
+
+ {{ store.care_count < 10000 ? store.care_count : (store.care_count / 10000).toFixed(2) + '万' }}人关注
+
+
+
+
+ 店铺评级
+
+
+ {{ score.toFixed(1) }}
+
+
+
+ 店铺二维码
+
+
+
+ 店铺资质信息
+
+
+
+ 联系客服
+
+
+
+ 联系客服
+
+
+
+ 联系客服
+
+
+
+
+ 店铺简介
+ {{ store.mer_info }}
+
+
+ 店铺地址
+ {{ store.mer_address }}
+
+
+
+ 联系电话
+ {{ store.service_phone }}
+
+
+ 开店时间
+ {{ store.create_time | dateFormat }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/store/home/index.vue b/pages/store/home/index.vue
new file mode 100644
index 0000000..e1596de
--- /dev/null
+++ b/pages/store/home/index.vue
@@ -0,0 +1,1878 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ select.selected ? '评分' : '默认' }}
+
+
+
+
+ 销量
+
+
+
+ 价格
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ 精选
+
+
+ 新品
+
+
+ 活动
+
+
+ 领券
+
+
+
+
+
+
+
+
+
+ {{store.type_name}}
+ 自营
+ {{ store.mer_name }}
+
+
+
+
+
+
+
+ {{ score.number.toFixed(1) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ select.selected ? '评分' : '默认' }}
+
+
+
+
+
+ 销量
+
+
+
+
+ 价格
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ 精选
+
+
+ 新品
+
+
+ 活动
+
+
+ 领券
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已售罄
+
+
+
+
+ {{ item.store_name }}
+
+
+
+
+ ¥{{ item.price }}
+
+
+ ¥{{item.svip_price}}
+
+
+
+
+
+
+ {{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}
+ 领券
+ 包邮
+
+ {{ item.rate }}评分 {{ item.reply_count }}条评论
+
+
+
+
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+ 全部
+
+
+
+
+
+ {{ item.cate_name }}
+
+
+
+ {{ value.cate_name }}
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.store_name }}
+
+
+
+
+ ¥
+ {{ item.price }}
+
+
+ ¥{{item.svip_price}}
+
+
+
+
+
+
+ {{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}
+ 领券
+ 包邮
+
+ {{ item.rate }}评分 {{ item.reply_count }}条评论
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+ ¥
+ {{ item.coupon_price }}
+
+ 满{{ item.use_min_price }}元可用
+
+
+
+ ¥
+ {{ item.coupon_price }}
+
+ 满{{ item.use_min_price }}元可用
+
+
+
+ {{item.type===0?'店铺券':'商品券'}}
+ {{ item.title }}
+
+
+
+ {{ item.use_start_time | dateFormat }}-{{ item.use_end_time | dateFormat }}
+
+
+ 领取后{{ item.coupon_time}}天内可用
+
+
+
+
+
+ 立即领取
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无活动专场哦~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/store/index.vue b/pages/store/index.vue
new file mode 100644
index 0000000..f8afa90
--- /dev/null
+++ b/pages/store/index.vue
@@ -0,0 +1,928 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ loadTitle }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/store/list/index.vue b/pages/store/list/index.vue
new file mode 100644
index 0000000..1ff92cd
--- /dev/null
+++ b/pages/store/list/index.vue
@@ -0,0 +1,946 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{downMenu[downKey].title}}
+
+
+
+
+ 销量
+
+
+ 价格
+
+
+
+
+
+
+ 筛选
+
+
+
+
+
+
+
+
+
+
+
+ 秒杀
+ 砍价
+ 拼团
+
+
+
+ {{item.store_name}}
+
+
+
+ ¥{{item.price}}
+
+
+
+ {{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}
+ 领券
+ 包邮
+
+ {{item.rate}}评分 {{item.reply_count}}条评论
+
+ {{item.merchant.mer_name}}
+
+ 进店
+
+
+
+
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+ 暂无商品,去看点什么吧
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/store/merchantDetails/index.vue b/pages/store/merchantDetails/index.vue
new file mode 100644
index 0000000..a689376
--- /dev/null
+++ b/pages/store/merchantDetails/index.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+ 恭喜,您的申请已通过!
+
+
+
+
+ 登录地址:
+ {{resData.login_url}}
+
+
+
+ 商户账号:
+ {{resData.phone}}
+
+ 复制
+
+
+
+
+ 温馨提示:初始密码默认为手机号后六位,请初次登录后及时修改
+
+
+
+
+
+
+
+
diff --git a/pages/store/qualifications/index.vue b/pages/store/qualifications/index.vue
new file mode 100644
index 0000000..105f40a
--- /dev/null
+++ b/pages/store/qualifications/index.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+ {{storeData.storeName}}
+ 网店经营者资质信息
+
+
+
+
+
+
+ 注:以上信息,由商家依据《电子商务法》规定发布公示。如需进一步核实,可联系商家客服咨询。
+
+
+
+
+ 输入验证码查看证件信息
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
diff --git a/pages/store/settled/index.vue b/pages/store/settled/index.vue
new file mode 100644
index 0000000..4ac8bf0
--- /dev/null
+++ b/pages/store/settled/index.vue
@@ -0,0 +1,998 @@
+
+
+
+
+
+
+ {{isType ? '店铺类型说明' : '商户入驻协议'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 恭喜,您的资料提交成功!
+ 预计15个工作日内审核完毕,平台客服会及时与您联系!
+
+ 返回首页
+
+
+
+
+
+
+
diff --git a/pages/store/shopStreet/index.vue b/pages/store/shopStreet/index.vue
new file mode 100644
index 0000000..42166d9
--- /dev/null
+++ b/pages/store/shopStreet/index.vue
@@ -0,0 +1,970 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{recommend_address}}
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+ 筛选
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.mer_name}}
+
+ {{item.type_name}}
+ 自营
+
+
+
+ {{item.care_count<10000 ? item.care_count : (item.care_count/10000).toFixed(2)+'万'}}人关注
+
+
+
+
+ {{item.distance}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{itemn.price}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.mer_name}}
+ {{item.type_name}}
+ 自营
+
+
+
+ {{item.care_count<10000 ? item.care_count : (item.care_count/10000).toFixed(2)+'万'}}人关注
+
+
+
+
+ {{item.distance}}
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{itemn.price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.mer_name}}
+ {{item.type_name}}
+ 自营
+
+
+
+ {{item.care_count<10000 ? item.care_count : (item.care_count/10000).toFixed(2)+'万'}}人关注
+
+
+
+
+ {{item.distance}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{itemn.price}}
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+ 暂无店铺,快去搜索其他店铺吧
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/store/static/images/coupon2.png b/pages/store/static/images/coupon2.png
new file mode 100644
index 0000000..cb2a9a8
Binary files /dev/null and b/pages/store/static/images/coupon2.png differ
diff --git a/pages/store/static/images/no-topic.png b/pages/store/static/images/no-topic.png
new file mode 100644
index 0000000..dbcffb5
Binary files /dev/null and b/pages/store/static/images/no-topic.png differ
diff --git a/pages/store/static/images/not-pass.png b/pages/store/static/images/not-pass.png
new file mode 100644
index 0000000..4852a33
Binary files /dev/null and b/pages/store/static/images/not-pass.png differ
diff --git a/pages/store/static/images/passed.png b/pages/store/static/images/passed.png
new file mode 100644
index 0000000..c6f5e2b
Binary files /dev/null and b/pages/store/static/images/passed.png differ
diff --git a/pages/store/static/images/pending.png b/pages/store/static/images/pending.png
new file mode 100644
index 0000000..bcc8ee8
Binary files /dev/null and b/pages/store/static/images/pending.png differ
diff --git a/pages/store/static/images/settledSuccessful.svg b/pages/store/static/images/settledSuccessful.svg
new file mode 100644
index 0000000..3d111ca
--- /dev/null
+++ b/pages/store/static/images/settledSuccessful.svg
@@ -0,0 +1,65 @@
+
diff --git a/pages/store/static/images/successTop.png b/pages/store/static/images/successTop.png
new file mode 100644
index 0000000..9a2c273
Binary files /dev/null and b/pages/store/static/images/successTop.png differ
diff --git a/pages/user/index.vue b/pages/user/index.vue
new file mode 100644
index 0000000..9933b18
--- /dev/null
+++ b/pages/user/index.vue
@@ -0,0 +1,1129 @@
+
+
+
+
+
+
+
+
+
+ 个人中心
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请点击授权
+
+
+
+
+ 请点击登录
+
+
+
+
+ 请点击授权
+ 请点击登录
+
+
+
+ {{userInfo.nickname}}
+
+
+
+
+
+
+ {{userInfo.phone}}
+
+
+
+
+ 绑定手机号
+
+
+
+
+ {{userInfo.total_collect_product || 0}}
+ 我的收藏
+
+
+ {{userInfo.total_collect_store || 0}}
+ 关注店铺
+
+
+ {{userInfo.total_visit_product || 0}}
+ 浏览记录
+
+
+ {{userInfo.total_coupon || 0}}
+ 优惠券
+
+
+
+
+
+ 累计为您节省{{userInfo.svip_save_money}}元
+ 开通享六大特权,省钱又省心
+
+
+
+ {{userInfo.is_svip > 0 && userInfo.is_svip != 3 ? '立即续费' : userInfo.is_svip == 3 ? '终身会员' : '立即开通'}}
+
+
+
+
+
+
+ {{userInfo.total_unread}}
+
+
+
+
+
+
+
+ 我的订单
+
+ 全部订单
+
+
+
+
+
+
+
+
+ {{ item.num }}
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{copyright.Copyright}}
+
+
+
+ ©️众邦科技版权所有
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/agreement_rules/index.vue b/pages/users/agreement_rules/index.vue
new file mode 100644
index 0000000..5ada1a9
--- /dev/null
+++ b/pages/users/agreement_rules/index.vue
@@ -0,0 +1,67 @@
+
+
+
+
+ {{item.label}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/browsingHistory/index.vue b/pages/users/browsingHistory/index.vue
new file mode 100644
index 0000000..bdc421c
--- /dev/null
+++ b/pages/users/browsingHistory/index.vue
@@ -0,0 +1,494 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{item.date}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{itemn.spu.price}}
+
+
+ 该商品已下架
+
+
+
+
+
+
+
+
+
+ ¥{{itemn.spu.price}}
+
+
+ 该商品已下架
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/commission_rank/index.vue b/pages/users/commission_rank/index.vue
new file mode 100644
index 0000000..dafb92b
--- /dev/null
+++ b/pages/users/commission_rank/index.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+ {{index+1}}
+
+
+
+ {{item.nickname}}
+
+ ¥{{item.count}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/distributor/index.vue b/pages/users/distributor/index.vue
new file mode 100644
index 0000000..787e6fe
--- /dev/null
+++ b/pages/users/distributor/index.vue
@@ -0,0 +1,778 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 推荐礼包
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+
+
+ ¥{{item.price}}
+
+ ¥{{item.svip_price}}
+
+
+
+
+
+
+
+
+ 立即开通
+
+
+
+
+
+
+
+
+
+ 分销礼包
+
+
+
+
+
+
+
+
+
+
+ {{item.store_name}}
+
+
+ ¥{{item.price}}
+
+ ¥{{item.svip_price}}
+
+
+
+
+
+ 立即开通
+
+
+
+
+ {{loadTitle}}
+
+
+
+ 分销说明
+ {{explainTxt}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/feedback/detail.vue b/pages/users/feedback/detail.vue
new file mode 100644
index 0000000..5d880bd
--- /dev/null
+++ b/pages/users/feedback/detail.vue
@@ -0,0 +1,157 @@
+
+
+
+
+ 反馈类型
+ {{detail.category}}
+
+
+ 问题分类
+ {{detail.type}}
+
+
+ 姓名
+ {{detail.realname}}
+
+
+ 电话/邮箱
+ {{detail.contact}}
+
+
+ 回复状态
+ 已回复
+
+
+
+ {{detail.content}}
+
+
+
+
+
+
+
+
+
+
+
+ 管理员
+ {{detail.update_time}}
+
+ {{detail.reply}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/feedback/index.vue b/pages/users/feedback/index.vue
new file mode 100644
index 0000000..9909f13
--- /dev/null
+++ b/pages/users/feedback/index.vue
@@ -0,0 +1,522 @@
+
+
+
+
+
+
+ 如需尽快解决问题,可直接联系在线客服
+
+
+
+
+
+
+
+ *反馈类型
+
+
+
+ {{item.cate_name}}
+
+
+
+
+
+ {{qsArray[qsIndex]['cate_name']}}
+
+
+
+
+
+
+
+ *反馈内容
+
+
+
+ {{con.length}}/200字
+
+
+
+
+ *图片上传 (上传聊天截图或与问题描述相关的图片)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *联系方式
+
+
+
+
+
+
+
+ 提交反馈
+ 反馈记录
+
+
+
+
+
+ 反馈提交成功
+ 我知道了
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/feedback/list.vue b/pages/users/feedback/list.vue
new file mode 100644
index 0000000..ac74314
--- /dev/null
+++ b/pages/users/feedback/list.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+ {{item.type.cate_name}}
+ {{item.content}}
+
+ {{item.create_time}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/goods_comment_con/index.vue b/pages/users/goods_comment_con/index.vue
new file mode 100644
index 0000000..d9cba2e
--- /dev/null
+++ b/pages/users/goods_comment_con/index.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/goods_comment_list/index.vue b/pages/users/goods_comment_list/index.vue
new file mode 100644
index 0000000..2389ef0
--- /dev/null
+++ b/pages/users/goods_comment_list/index.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+ 全部({{replyData.stat.count}})
+ 好评({{replyData.stat.best}})
+ 中评({{replyData.stat.middle}})
+ 差评({{replyData.stat.negative}})
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/goods_details_store/index.vue b/pages/users/goods_details_store/index.vue
new file mode 100644
index 0000000..028a935
--- /dev/null
+++ b/pages/users/goods_details_store/index.vue
@@ -0,0 +1,326 @@
+
+
+
+
+
+
+
{{ item.name }}
+
+ {{ item.address }}{{ ", " + item.detailed_address }}
+
+
+
+
+
+ 距离{{ item.range }}千米
+ 查看地图
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/goods_logistics/index.vue b/pages/users/goods_logistics/index.vue
new file mode 100644
index 0000000..8c7e0b1
--- /dev/null
+++ b/pages/users/goods_logistics/index.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+ 物流公司: {{orderInfo.delivery_name ? orderInfo.delivery_name : ''}}
+ 快递单号: {{orderInfo.delivery_id ? orderInfo.delivery_id : ''}}
+
+
+
+ 复制单号
+
+
+ 复制单号
+
+
+
+
+
+ {{item.status}}
+ {{item.time}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/goods_return/index.vue b/pages/users/goods_return/index.vue
new file mode 100644
index 0000000..144d3bc
--- /dev/null
+++ b/pages/users/goods_return/index.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/login/index.vue b/pages/users/login/index.vue
new file mode 100644
index 0000000..a4a378f
--- /dev/null
+++ b/pages/users/login/index.vue
@@ -0,0 +1,1227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我已同意《用户协议》与《隐私政策》
+
+
+
登录
+
登录
+
+ 没有账号?
+ 立即注册
+
+
+
+
+
+ 其他方式登录
+
+
+
+
+
+
+
+
+
+
+
+ 其他方式登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
注册账号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我已同意《用户协议》与《隐私政策》
+
+
+
注册
+
+ 已有账号?
+ 立即登录
+
+
+
+
+
+ 其他方式登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 用户协议与隐私政策
+
+
+
+
+
+
+
+
{{copyData}}
+
+
+
+
+
diff --git a/pages/users/order_confirm/index.vue b/pages/users/order_confirm/index.vue
new file mode 100644
index 0000000..d222d50
--- /dev/null
+++ b/pages/users/order_confirm/index.vue
@@ -0,0 +1,2338 @@
+
+
+
+
+
+
+ {{addressInfo.real_name}}
+ {{addressInfo.phone}}
+
+
+ [默认]{{addressInfo.province}}{{addressInfo.city}}{{addressInfo.district}}{{addressInfo.street || ''}}{{addressInfo.detail}}
+
+
+
+ 设置收货地址
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.mer_name}}
+
+
+
+
+
+
+
+
+
+ 预售{{goods.productPresell.store_name}}
+
+ {{goods.productAttr.sku}}
+
+ ¥{{goods.productPresellAttr.presell_price}}
+ X{{goods.cart_num}}
+
+ 发货时间:
+
+ {{goods.productPresell.delivery_type === 1 ? '支付后' : '预售结束后'}}{{ goods.productPresell.delivery_day }}天内
+
+ {{ goods.productPresell.delivery_type === 1 ? '付尾款后' : '预售结束后' }}{{ goods.productPresell.delivery_day }}天内
+
+
+
+ 此商品不支持该区域配送
+
+
+
+
+
+
+ 定金
+ ¥{{ (goods.productPresellAttr.down_price * goods.cart_num).toFixed(2) }}
+
+
+ 尾款
+ ¥{{ (goods.productPresellAttr.final_price * goods.cart_num).toFixed(2) }}
+
+
+ {{ goods.productPresell.final_start_time | filterDay}}开始支付尾款
+
+
+
+
+
+
+
+
+
+ {{goods.product.store_name}}
+ {{goods.productAttr.sku}}
+
+
+
+ ¥{{goods.productAssistAttr.assist_price}}
+
+
+ ¥{{goods.activeSku.active_price}}
+
+
+ ¥{{goods.productAttr.price}}
+
+ X{{goods.cart_num}}
+
+
+
+
+
+ 不支持快递
+ 不支持到店核销
+
+
+
+
+
+ 此商品不支持该区域配送
+
+
+
+
+
+
+
+
+ 配送方式
+
+ {{item.order.isTake==0 ? deliveryName :'到店核销'}}
+
+
+
+ {{item.order.isTake==0 ? deliveryName :'到店核销'}}
+
+
+
+ {{item.take.mer_take_name}}
+ {{item.take.mer_take_address}}
+
+
+ 查看地图
+
+
+
+
+ 快递费用 (尾款阶段)
+
+ +¥{{item.order.postage_price}}
+
+ 免运费
+
+
+ 店铺优惠券
+
+
+ 优惠¥{{item.order.coupon_price}}
+ 暂未选择优惠券
+
+
+
+
+ 暂无优惠券
+
+
+
+ 开具发票
+
+ {{(item.invoiceData && item.invoiceData.receipt_title) ? item.invoiceData.receipt_title : '不开发票'}}
+
+
+
+
+
+
+ 我已同意定金不退等预售协议
+
+
+
+
+ 备注信息
+
+
+
+ 共{{item.order.total_num}}件 小计
+ ¥{{ item.order.pay_price }}
+ ¥{{ item.order.org_price}}
+
+
+
+
+
+
+
+
+
+
+
+ {{agrementTtile}}
+
+
+
+
+
+
+
+
+
+
+
+ 支付方式
+
+
+
+
+
+ {{item.name}}
+
+
+ {{item.title}}
+
+ {{userInfo.now_money}}
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+ {{item.title}}
+
+ {{userInfo.now_money}}
+
+
+
+
+
+
+
+
+
+ 商品总价:
+ ¥{{proPrice}}
+
+
+ 运费:
+ ¥{{couponData.order_total_postage}}
+
+
+ 店铺优惠金额:
+ -¥{{coupon_price}}
+
+
+ 积分抵扣:
+
+ 当前积分{{userInfo.integral}}
+ 使用了{{integral_count}}个积分,抵扣{{integral_price}}元
+
+
+
+
+
+
+
+ 平台优惠券
+
+
+ 优惠¥{{total_platform_coupon_price}}
+ 暂未选择优惠券
+
+
+
+
+ 暂无优惠券
+
+
+
+ 运费:
+ +¥{{priceGroup.storePostage}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/order_list/index.vue b/pages/users/order_list/index.vue
new file mode 100644
index 0000000..e4127eb
--- /dev/null
+++ b/pages/users/order_list/index.vue
@@ -0,0 +1,1014 @@
+
+
+
+
+
+
+ 搜索我的订单
+
+
+
+ 全部
+ {{orderData.all || 0}}
+
+
+ 待付款
+ {{orderData.noPay || 0}}
+
+
+ 待发货
+ {{orderData.noPostage || 0}}
+
+
+ 待收货
+ {{orderData.noDeliver || 0}}
+
+
+ 待评价
+ {{orderData.noComment || 0}}
+
+
+
+
+
+
+ 预售尾款订单转到这里了!
+ 有 {{ presellOrderCount }} 笔预售尾款订单待付款,请点击查看
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.group_order_sn}}
+
+ {{ item.orderList[0].activity_type === 2 && item.orderList[0].orderProduct[0].cart_info.productPresell.presell_type ==2 ? "待付定金" : "待付款" }}
+
+
+
+
+
+
+
+
+
+
+
+ 预售{{goods.cart_info.product.store_name}}
+ 发货时间:
+
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付成功后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付尾款后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+
+
+ ¥{{goods.cart_info.productPresellAttr.presell_price}}
+ x{{goods.product_num}}
+
+
+
+ 定金待支付 ¥{{ order.pay_price }}
+ 尾款待支付 ¥{{ order.presellOrder.pay_price }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.product_type == 1 ? "秒杀" : goods.product_type == 2 ? "预售" : goods.product_type == 3 ? "助力" : goods.product_type == 4 ? "拼团" : ""}}
+ {{goods.cart_info.product.store_name}}
+
+
+ ¥{{goods.cart_info.activeSku.active_price}}
+ x{{goods.product_num}}
+
+
+ ¥{{goods.cart_info.productAttr.price}}
+ x{{goods.product_num}}
+
+
+
+
+
+
+ 共{{item.total_num || 0}}件商品,总金额
+ ¥{{item.pay_price}}
+
+
+ 立即付款
+
+
+
+
+
+
+
+
+
+
+
+ {{item.merchant.mer_name}}
+
+
+
+ {{item.takeOrderCount > 0 ? '部分核销' : '待核销'}}
+ 待发货
+
+ 待收货
+ 待评价
+ 已完成
+ 已退款
+
+
+
+
+
+
+
+
+
+ 预售{{goods.cart_info.product.store_name}}
+ 发货时间:
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付成功后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付尾款后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+
+ {{goods.is_refund==1?'退款中':goods.is_refund==2?'部分退款':goods.is_refund==3?'全部退款':''}}
+
+
+ ¥{{goods.cart_info.productPresellAttr.presell_price}}
+ x{{goods.product_num}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.product_type == 1 ? "秒杀" : goods.product_type == 2 ? "预售" : goods.product_type == 3 ? "助力" : goods.product_type == 4 ? "拼团" : ""}}
+ {{goods.cart_info.product.store_name}}
+
+ {{goods.is_refund==1?'退款中':goods.is_refund==2?'部分退款':goods.is_refund==3?'全部退款':''}}
+
+
+ ¥{{goods.cart_info.productAssistAttr.assist_price}}
+ x{{goods.product_num}}
+
+
+ ¥{{goods.cart_info.activeSku.active_price}}
+ x{{goods.product_num}}
+
+
+ ¥{{goods.cart_info.productAttr.price}}
+ x{{goods.product_num}}
+
+
+
+
+ 共{{item.orderNum || 0}}件商品,总金额
+ ¥{{item.presell_price}}
+
+ 共{{item.orderNum || 0}}件商品,总金额
+ ¥{{item.pay_price}}
+
+
+
+ 申请开票
+
+ 查看详情
+
+
+ 查看物流
+ 确认收货
+
+
+
+
+ 发布种草
+
+ 去评价
+
+
+ 查看详情
+
+
+ 发布种草
+
+ 再次购买
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/order_list/search.vue b/pages/users/order_list/search.vue
new file mode 100644
index 0000000..ff66876
--- /dev/null
+++ b/pages/users/order_list/search.vue
@@ -0,0 +1,932 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.group_order_sn}}
+
+ {{ item.orderList[0].activity_type === 2 && item.orderList[0].orderProduct[0].cart_info.productPresell.presell_type ==2 ? "待付定金" : "待付款" }}
+
+
+
+
+
+
+
+
+
+
+
+ 预售{{goods.cart_info.product.store_name}}
+ 发货时间:
+
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付成功后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付尾款后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+
+
+ ¥{{goods.cart_info.productPresellAttr.presell_price}}
+ x{{goods.product_num}}
+
+
+
+ 定金待支付 ¥{{ order.pay_price }}
+ 尾款待支付 ¥{{ order.presellOrder.pay_price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.cart_info.product.store_name}}
+
+
+ ¥{{goods.cart_info.activeSku.active_price}}
+ x{{goods.product_num}}
+
+
+ ¥{{goods.cart_info.productAttr.price}}
+ x{{goods.product_num}}
+
+
+
+
+
+
+ 共{{item.total_num || 0}}件商品,总金额
+ ¥{{item.pay_price}}
+
+
+
+ 立即付款
+
+
+
+
+
+
+
+
+
+
+
+ {{item.merchant.mer_name}}
+
+
+ 待发货
+ 待收货
+ 待评价
+ 已完成
+ 已退款
+
+
+
+
+
+
+
+
+
+ 预售{{goods.cart_info.product.store_name}}
+ 发货时间:
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付成功后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付尾款后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+
+ {{goods.is_refund==1?'退款中':goods.is_refund==2?'部分退款':goods.is_refund==3?'全部退款':''}}
+
+
+ ¥{{goods.cart_info.productPresellAttr.presell_price}}
+ x{{goods.product_num}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goods.cart_info.product.store_name}}
+
+ {{goods.is_refund==1?'退款中':goods.is_refund==2?'部分退款':goods.is_refund==3?'全部退款':''}}
+
+
+ ¥{{goods.cart_info.productAssistAttr.assist_price}}
+ x{{goods.product_num}}
+
+
+ ¥{{goods.cart_info.activeSku.active_price}}
+ x{{goods.product_num}}
+
+
+ ¥{{goods.cart_info.productAttr.price}}
+ x{{goods.product_num}}
+
+
+
+
+ 共{{item.orderNum || 0}}件商品,总金额
+ ¥{{item.presell_price}}
+
+ 共{{item.orderNum || 0}}件商品,总金额
+ ¥{{item.pay_price}}
+
+
+
+
+
+ 查看详情
+
+
+ 查看物流
+ 确认收货
+
+
+
+
+ 发布种草
+
+ 去评价
+
+
+ 查看详情
+
+
+ 发布种草
+
+ 再次购买
+
+
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/presell_order_list/index.vue b/pages/users/presell_order_list/index.vue
new file mode 100644
index 0000000..bb63956
--- /dev/null
+++ b/pages/users/presell_order_list/index.vue
@@ -0,0 +1,650 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.merchant.mer_name}}
+
+
+
+ 等待买家付尾款
+ 未开始
+ 交易已关闭
+
+
+
+
+
+
+
+
+
+
+ 预售{{goods.cart_info.product.store_name}}
+ 发货时间:
+
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付成功后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+ {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付尾款后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内
+
+
+
+
+ ¥{{goods.cart_info.productPresellAttr.presell_price}}
+ x{{goods.product_num}}
+
+
+
+ 定金已支付 ¥{{ item.pay_price }},
+ 尾款待支付 ¥{{ item.presellOrder&&item.presellOrder.pay_price }}
+
+
+
+
+ 取消订单
+ 立即付款
+ 未开始
+ 交易已关闭
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/privacy/index.vue b/pages/users/privacy/index.vue
new file mode 100644
index 0000000..44572a5
--- /dev/null
+++ b/pages/users/privacy/index.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/users/promoter-list/index.vue b/pages/users/promoter-list/index.vue
new file mode 100644
index 0000000..b564ecd
--- /dev/null
+++ b/pages/users/promoter-list/index.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+ 一级({{userInfo.one_level_count}})
+ 二级({{userInfo.two_level_count}})
+
+
+
+
+
+ 团队排序
+
+
+ 团队排序
+
+
+ 团队排序
+
+
+ 金额排序
+
+
+ 金额排序
+
+
+ 金额排序
+
+
+ 订单排序
+
+
+ 订单排序
+
+
+ 订单排序
+
+
+
+
+
+
+
+
+
+
+ {{item.nickname}}
+ 加入时间: {{item.spread_time}}
+
+
+
+ {{item.spread_count ? item.spread_count : 0}}人
+ {{item.pay_count ? item.pay_count : 0}}单
+ {{item.pay_price ? item.pay_price : 0}}元
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/promoter-order/index.vue b/pages/users/promoter-order/index.vue
new file mode 100644
index 0000000..062fc32
--- /dev/null
+++ b/pages/users/promoter-order/index.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+ 共 {{total}} 笔订单
+
+
+
+
+
+
+
+
+
+
+
+ {{item.user.nickname}}
+
+ 返佣:¥{{item.brokerage}}
+ 暂未返佣:¥{{item.brokerage}}
+
+
+
+ 商品名称:
+ {{item.orderProduct[0]['cart_info']['product']['store_name']}}
+
+ 订单编号:{{item.order_sn}}
+ 下单时间:{{item.pay_time}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/promoter_rank/index.vue b/pages/users/promoter_rank/index.vue
new file mode 100644
index 0000000..6496d7a
--- /dev/null
+++ b/pages/users/promoter_rank/index.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+ {{index+4}}
+
+
+
+
+ {{item.nickname}}
+
+ {{item.count}}人
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/refund/confirm.vue b/pages/users/refund/confirm.vue
new file mode 100644
index 0000000..1f9a3f1
--- /dev/null
+++ b/pages/users/refund/confirm.vue
@@ -0,0 +1,429 @@
+
+
+
+
+
+
+
+ 预售{{item.cart_info.product.store_name}}
+ {{item.cart_info.productAttr.sku}}
+
+ ¥{{ order_status == 3 ? item.cart_info.productAssistAttr.assist_price : order_status == 4 ? item.cart_info.activeSku.active_price : item.cart_info.productAttr.price}} ×{{item.refund_num}}
+
+
+
+
+
+
+ 商品件数
+
+
+
+ {{numArray[numIndex] || 0}}
+
+
+
+
+
+
+ {{ status == 0 ? '退款金(含运费)' : '退款金(不含运费)' }}
+
+
+
+ 退款原因
+
+
+
+ {{qsArray[qsIndex]}}
+
+
+
+
+
+
+ 备注说明
+
+
+
+
+
+ 上传凭证
+ ( 最多可上传9张 )
+
+
+
+
+
+
+
+
+ 上传凭证
+
+
+
+ 申请退款
+
+
+
+
+
+
+
diff --git a/pages/users/refund/detail.vue b/pages/users/refund/detail.vue
new file mode 100644
index 0000000..7ca85e0
--- /dev/null
+++ b/pages/users/refund/detail.vue
@@ -0,0 +1,499 @@
+
+
+
+
+ 退款失败
+ 申请时间:{{detail.status_time}}
+
+
+ 审核中
+ 申请时间:{{detail.status_time}}
+
+
+ 请退货并填写物流信息
+ 申请时间:{{detail.status_time}}
+
+
+ 请等待商家收货并退款
+ 还剩:
+
+
+
+
+ 退款成功,金额 ¥{{detail.refund_price}}
+ 申请时间:{{detail.status_time}}
+
+
+ 已取消退货申请
+ 申请时间:{{detail.status_time}}
+
+
+
+
+ 拒绝退款原因
+ {{detail.fail_message}}
+
+
+
+ 商家已同意您的退货申请,请尽早退货
+
+ 收货人姓名:{{detail.mer_delivery_user}}
+ 收货人联系方式:{{detail.phone}}
+ 收货人地址:{{detail.mer_delivery_address}}
+
+ 请按以上收货信息将商品退回
+
+
+
+
+
+ 商家收货并验货无误,将操作退款给您
+
+ 收货人姓名:{{detail.mer_delivery_user}}
+ 收货人联系方式:{{detail.phone}}
+ 收货人地址:{{detail.mer_delivery_address}}
+
+
+
+ 退款信息
+
+
+
+
+
+ 预售{{item.product.cart_info.product.store_name}}
+ {{item.product.cart_info.productAttr.sku}}
+ ¥{{item.product.product_type == 3 ? item.product.cart_info.productAssistAttr.assist_price : item.product.product_type == 4 ? item.product.cart_info.activeSku.active_price : item.product.cart_info.productAttr.price}}
+ x {{item.refund_num}}
+
+
+
+
+
+
+ 订单编号:
+
+ {{detail.refund_order_sn}}
+
+ 复制
+
+
+ 复制
+
+
+
+
+ 退款金额:
+
+ ¥ {{detail.refund_price}}
+
+
+
+ 申请件数:
+
+ {{detail.refund_num}}
+
+
+
+ 申请时间:
+
+ {{detail.create_time}}
+
+
+
+ 备注说明:
+
+ {{detail.mark ? detail.mark : ""}}
+
+
+
+ 退款凭证:
+
+
+
+
+
+
+
+
+ 再次申请
+
+
+ 取消售后
+ 退回商品
+
+
+ 查看物流
+
+
+ 取消售后
+
+
+ 联系商家
+ 联系商家
+ 联系商家
+
+
+
+
+
+
+
+
diff --git a/pages/users/refund/goods/index.vue b/pages/users/refund/goods/index.vue
new file mode 100644
index 0000000..5f8a215
--- /dev/null
+++ b/pages/users/refund/goods/index.vue
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+ {{item.product.cart_info.product.store_name}}
+ {{item.product.cart_info.productAttr.sku}}
+
+
+
+
+ 物流公司
+
+
+
+ {{numArray[numIndex]['label']}}
+
+
+
+
+
+
+ 物流单号
+
+
+
+ 联系电话
+
+
+
+ 提交
+
+
+
+
+
+
+
diff --git a/pages/users/refund/index.vue b/pages/users/refund/index.vue
new file mode 100644
index 0000000..51e9aea
--- /dev/null
+++ b/pages/users/refund/index.vue
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+ {{item.cart_info.product.store_name}}
+ {{item.cart_info.productAttr.sku}}
+ ¥{{item.cart_info.productAttr.price}} ×{{item.refund_num}}
+
+
+
+
+
+
+
+ 申请退款
+
+
+
+
+
+
diff --git a/pages/users/refund/list.vue b/pages/users/refund/list.vue
new file mode 100644
index 0000000..ae002c6
--- /dev/null
+++ b/pages/users/refund/list.vue
@@ -0,0 +1,328 @@
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+ {{item.merchant.mer_name}}
+
+
+
+
+
+
+ 预售{{goods.product.cart_info.product.store_name}}
+ {{goods.product.cart_info.productAttr.sku}}
+ 退款:{{goods.refund_price}}
+ x {{goods.refund_num}}
+
+
+
+
+ 查看详情
+ 退回商品
+
+
+ 查看详情
+
+
+
+ 删除订单
+ 查看详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无订单~
+
+
+
+
+
+
+
diff --git a/pages/users/refund/logistics.vue b/pages/users/refund/logistics.vue
new file mode 100644
index 0000000..1e3f181
--- /dev/null
+++ b/pages/users/refund/logistics.vue
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+ 物流公司: {{orderInfo.delivery_type}}
+ 快递单号: {{orderInfo.delivery_id}}
+
+
+
+ 复制单号
+
+
+ 复制单号
+
+
+
+
+
+ {{item.status}}
+ {{item.time}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/refund/select.vue b/pages/users/refund/select.vue
new file mode 100644
index 0000000..9daf794
--- /dev/null
+++ b/pages/users/refund/select.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+ 我要退款(无需退货)
+ 未收到货,或与卖家协商同意不退货只退款
+
+
+
+
+
+
+
+
+ {{order_type != 2 ? '我要退货退款' : '我要退款'}}
+ 已收到货,需要退还收到的货物
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/retrievePassword/index.vue b/pages/users/retrievePassword/index.vue
new file mode 100644
index 0000000..f75ca65
--- /dev/null
+++ b/pages/users/retrievePassword/index.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
忘记密码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
确认
+
+ 立即登录
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/static/images/grade_bg.png b/pages/users/static/images/grade_bg.png
new file mode 100644
index 0000000..6204091
Binary files /dev/null and b/pages/users/static/images/grade_bg.png differ
diff --git a/pages/users/static/images/level_avatar.png b/pages/users/static/images/level_avatar.png
new file mode 100644
index 0000000..ca3df3a
Binary files /dev/null and b/pages/users/static/images/level_avatar.png differ
diff --git a/pages/users/static/images/member-font.png b/pages/users/static/images/member-font.png
new file mode 100644
index 0000000..af7a243
Binary files /dev/null and b/pages/users/static/images/member-font.png differ
diff --git a/pages/users/static/images/member-wang.png b/pages/users/static/images/member-wang.png
new file mode 100644
index 0000000..265d057
Binary files /dev/null and b/pages/users/static/images/member-wang.png differ
diff --git a/pages/users/static/images/noEvaluate.png b/pages/users/static/images/noEvaluate.png
new file mode 100644
index 0000000..cd7502c
Binary files /dev/null and b/pages/users/static/images/noEvaluate.png differ
diff --git a/pages/users/static/images/presell_orderBg.png b/pages/users/static/images/presell_orderBg.png
new file mode 100644
index 0000000..8c284b8
Binary files /dev/null and b/pages/users/static/images/presell_orderBg.png differ
diff --git a/pages/users/static/images/upgrade_icon.png b/pages/users/static/images/upgrade_icon.png
new file mode 100644
index 0000000..6992cab
Binary files /dev/null and b/pages/users/static/images/upgrade_icon.png differ
diff --git a/pages/users/user_about/index.vue b/pages/users/user_about/index.vue
new file mode 100644
index 0000000..d178875
--- /dev/null
+++ b/pages/users/user_about/index.vue
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+
+
+
+
+ 已阅读并同意《重要提醒》
+
+
+ 申请注销
+
+
+
+
+ 该账号将永久注销
+
+ 确定
+ 取消
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_address/index.vue b/pages/users/user_address/index.vue
new file mode 100644
index 0000000..f84b335
--- /dev/null
+++ b/pages/users/user_address/index.vue
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_address_list/index.vue b/pages/users/user_address_list/index.vue
new file mode 100644
index 0000000..3a85133
--- /dev/null
+++ b/pages/users/user_address_list/index.vue
@@ -0,0 +1,463 @@
+
+
+
+
+
+
+
+
+
+ 收货人:{{item.real_name}}{{item.phone}}
+ 收货地址:{{item.province || ''}}{{item.city || ''}}{{item.district || ''}}{{item.street || ''}}{{item.detail || ''}}
+
+
+
+
+ 设为默认
+
+
+
+
+ 设为默认
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+ 暂无地址
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_bill/index.vue b/pages/users/user_bill/index.vue
new file mode 100644
index 0000000..a1735cd
--- /dev/null
+++ b/pages/users/user_bill/index.vue
@@ -0,0 +1,170 @@
+
+
+
+
+ 全部
+ 消费
+ 充值
+
+
+
+
+
+
+
+
+ {{item.title}}
+ {{item.create_time}}
+
+ +{{item.number}}
+ -{{item.number}}
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_brokerage/index.vue b/pages/users/user_brokerage/index.vue
new file mode 100644
index 0000000..b83c097
--- /dev/null
+++ b/pages/users/user_brokerage/index.vue
@@ -0,0 +1,858 @@
+
+
+
+
+
+
+
+
+ 等级权益
+ 一级佣金上浮
+ 二级佣金上浮
+
+
+
+
+
+
{{item.brokerage_name}}
+
+ {{item.extension_one}}%
+ {{item.extension_two}}%
+
+
+
+
+
+
+
+ 做任务.提升等级
+
+ 完成每级对应的任务,即可解锁下一个等级
+
+
+ 您已升至最高等级,邀请好友赚佣金吧
+
+
+
+
+
+
+
+ {{userInfo.brokerage.brokerage_name}}
+ (当前等级)
+
+
+
+
+
+
+
+ {{userInfo.next_brokerage.brokerage_name}}
+
+ {{ userInfo.brokerage.brokerage_level == userInfo.next_brokerage.brokerage_level
+ ? '(已完成)' : '(进行中)'}}
+
+
+
+
+
+
+ {{userInfo.down_brokerage.brokerage_name}}
+ (未解锁)
+
+
+
+
+
+ 已达到顶级
+
+
+
+
+
+
+ 等级任务
+
+
+ {{item.name}}
+ ?
+ {{item.rate != 100 ? '未满足条件' : '已满足条件'}}
+
+
+
+
+
+ 还需要{{getNumber(item.num-item.task,index)}}{{getNnit(index)}}
+ {{item.task}}/{{item.num}}
+
+
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+
+ 分销等级权益
+ {{type == 'level' ? '恭喜您升级啦!' : type == 'top' ?'恭喜您' : ''}}
+ 已升至最高等级
+
+ 邀请好友,赚更多的佣金
+ 我知道了
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_cash/index.vue b/pages/users/user_cash/index.vue
new file mode 100644
index 0000000..6a50152
--- /dev/null
+++ b/pages/users/user_cash/index.vue
@@ -0,0 +1,654 @@
+
+
+
+
+ 提现至
+
+
+
+
+
+
+ {{navList[currentTab]["name"]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_coupon/index.vue b/pages/users/user_coupon/index.vue
new file mode 100644
index 0000000..7dbd6ca
--- /dev/null
+++ b/pages/users/user_coupon/index.vue
@@ -0,0 +1,299 @@
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+ {{item.merchant.mer_name}}
+
+ 进店
+
+
+
+
+ ¥{{item.coupon_price}}
+ 满{{ item.use_min_price }}元可用
+
+
+ ¥{{item.coupon_price}}
+ 满{{ item.use_min_price }}元可用
+
+
+
+
+ ¥{{item.coupon_price}}
+ 满{{ item.use_min_price }}元可用
+
+
+
+ 店铺券
+ 商品券
+ 品类券
+ 通用券
+ 跨店券
+ 商品券
+ {{item.coupon_title}}
+
+
+ {{item.start_time | timeYMD}}-{{item.end_time | timeYMD}}
+
+
+ 去使用
+
+
+ 已使用
+ 已过期
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_get_coupon/index.vue b/pages/users/user_get_coupon/index.vue
new file mode 100644
index 0000000..f203591
--- /dev/null
+++ b/pages/users/user_get_coupon/index.vue
@@ -0,0 +1,152 @@
+
+
+
+
+
+ ¥{{item.coupon_price}}
+ 满{{item.use_min_price}}元可用
+
+
+
+ 通用劵
+ 品类券
+ 商品券
+ {{item.title}}
+
+
+ {{ item.start_time ? item.start_time + "-" : ""}}{{ item.end_time }}
+ 已领取
+ 已领完
+ 立即领取
+
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_goods_collection/index.vue b/pages/users/user_goods_collection/index.vue
new file mode 100644
index 0000000..c3f2ceb
--- /dev/null
+++ b/pages/users/user_goods_collection/index.vue
@@ -0,0 +1,692 @@
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已下架
+
+
+
+
+
+ {{item.spu.product_type == 1 ? "秒杀" : item.spu.product_type == 2 ? "预售" : item.spu.product_type == 3 ? "助力" : item.spu.product_type == 4 ? "拼团" : ""}}
+ {{item.spu.store_name}}
+
+
+
+ ¥{{item.spu.price}}
+
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+ 店铺已关闭,去看看别的店铺吧
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{tabIndex == 1 ? '暂无商品' : '暂无店铺'}},去添加点什么吧
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_grade/images/suozi.png b/pages/users/user_grade/images/suozi.png
new file mode 100644
index 0000000..26317ed
Binary files /dev/null and b/pages/users/user_grade/images/suozi.png differ
diff --git a/pages/users/user_grade/images/title.png b/pages/users/user_grade/images/title.png
new file mode 100644
index 0000000..e9dc014
Binary files /dev/null and b/pages/users/user_grade/images/title.png differ
diff --git a/pages/users/user_grade/index.vue b/pages/users/user_grade/index.vue
new file mode 100644
index 0000000..36f6603
--- /dev/null
+++ b/pages/users/user_grade/index.vue
@@ -0,0 +1,845 @@
+
+
+
+
+
+
+
+
+
+
+ {{userInfo.nickname}}
+
+
+
+
+
+
+
+ 规则说明
+ ?
+
+
+
+
+
+ 今日获得成长值{{growthValue}}点
+
+
+
+ {{member_value || 0}}
+ 距{{next_level.brokerage_name ? next_level.brokerage_name : ''}}还需{{next_level.brokerage_rule && next_level.brokerage_rule.value ? next_level.brokerage_rule.value-member_value : 0 }}
+
+
+
+
+
+
+
+
+ 会员可专项优质特权
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+ {{item.info}}
+
+
+
+
+
+
+
+ 快速升级技巧
+
+
+
+
+
+ {{userInfo.is_svip > 0 && svip_switch_status == 1 ? 'SVIP 会员中心,惊喜多多!' : '升级成为SVIP,成长值奖励可翻倍哦!'}}
+
+ 去看看
+ 立即开通
+
+
+
+
+
+
+ 签到
+ +{{valueList.member_sign_num}}点成长值
+
+ 每日签到可获得经验值
+
+ 已完成
+ 去完成
+
+
+
+
+
+ 购买商品+{{valueList.member_pay_num}}点成长值
+ 购买商品可获得对应的成长值
+
+ 去完成
+
+
+
+
+
+ 评价商品+{{valueList.member_reply_num}}点成长值
+ 评价商品可获得对应的成长值
+
+ 去完成
+
+
+
+
+
+ 邀请好友+{{valueList.member_share_num}}点成长值
+ 邀请好友注册商城可获得成长值
+
+ 去完成
+
+
+
+
+
+ 发布种草
+ +{{valueList.member_community_num}}点成长值
+ 发布一条种草可获得成长值
+
+ 去完成
+
+
+
+
+
+
+
+
+
+
+ 会员规则
+
+
+
+
+
+
+
+
+ 恭喜您升级为
+
+ {{upgradeInfo.brokerage_name}}
+
+
+
+
+ 查看我的权益
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_grade_list/index.vue b/pages/users/user_grade_list/index.vue
new file mode 100644
index 0000000..3c03ec3
--- /dev/null
+++ b/pages/users/user_grade_list/index.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+ {{item.month}}
+
+
+
+ {{itemn.title}}
+ {{itemn.create_time}}
+
+ +{{itemn.number}}
+
+
+
+
+
+ {{loadtitle}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_info/index.vue b/pages/users/user_info/index.vue
new file mode 100644
index 0000000..c3399e0
--- /dev/null
+++ b/pages/users/user_info/index.vue
@@ -0,0 +1,564 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_integral/index.vue b/pages/users/user_integral/index.vue
new file mode 100644
index 0000000..2ab2be7
--- /dev/null
+++ b/pages/users/user_integral/index.vue
@@ -0,0 +1,476 @@
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+ 提示:您有部分积分将于{{userInfo.clear.nextClearDay}}过期,请尽快使用!
+
+
+
+ {{item.mark}}
+ {{item.create_time}}
+
+ +{{item.number}}
+ -{{item.number}}
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
+
+
+ 购买商品可获得积分奖励
+ 赚积分
+
+
+
+
+
+ 每日签到可获得积分奖励
+ 赚积分
+
+
+
+
+
+
+ 邀请好友可获得积分奖励
+ 赚积分
+
+
+
+
+
+
+
+
+ 积分说明
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_invoice_form/index.vue b/pages/users/user_invoice_form/index.vue
new file mode 100644
index 0000000..df1155e
--- /dev/null
+++ b/pages/users/user_invoice_form/index.vue
@@ -0,0 +1,563 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_invoice_list/index.vue b/pages/users/user_invoice_list/index.vue
new file mode 100644
index 0000000..81aed64
--- /dev/null
+++ b/pages/users/user_invoice_list/index.vue
@@ -0,0 +1,436 @@
+
+
+
+ 发票记录
+ 抬头管理
+
+
+
+
+
+
+
+ {{item.storeOrder.orderProduct[0].cart_info.product.store_name}}
+
+
+ {{ item.receipt_info.receipt_type == 1 ? '普通发票' : '专用发票' }}
+ 申请时间 {{item.create_time}}
+ ¥{{item.order_price}}
+
+
+ {{item.status | filterTxt}}
+ 查看详情
+
+
+
+
+
+ 您还没有发票记录哟~
+
+
+
+
+
+
+
+ {{ item.receipt_title }}
+ 默认
+
+ {{ item.receipt_type == 1 ? '普通发票' : '专用发票' }}
+
+
+ 邮箱 {{ item.email }}
+
+ 企业税号 {{ item.duty_paragraph }}
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+ 您还没有添加发票信息哟~
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_invoice_order/index.vue b/pages/users/user_invoice_order/index.vue
new file mode 100644
index 0000000..c68c6de
--- /dev/null
+++ b/pages/users/user_invoice_order/index.vue
@@ -0,0 +1,696 @@
+
+
+
+
+
+
+
+ 发票类型:
+ {{receipt_info.receipt_type == 1 ? '普通发票' : '专用发票'}}
+
+
+ 发票内容:
+ {{receipt_info.duty_paragraph}}
+
+
+ 抬头类型:
+ {{receipt_info.receipt_title_type == 1 ? '个人' : '企业'}}
+
+
+ 抬头名称:
+ {{receipt_info.receipt_title}}
+
+
+ 开票时间:
+ {{orderData.status_time}}
+
+
+ 申请时间:
+ {{orderData.create_time}}
+
+
+
+
+
+
+
+
+ 订单编号:
+ {{orderInfo.order_sn}}
+
+ 复制
+
+
+ 复制
+
+
+
+
+ 下单时间:
+ {{orderInfo.create_time}}
+
+
+ 支付状态:
+ 已支付
+
+
+ 支付时间:
+ {{orderInfo.pay_time}}
+
+
+ 商品总额:
+ ¥{{orderInfo.total_price}}
+
+
+ 实际支付:
+ ¥{{orderInfo.pay_price}}
+
+
+ 优惠券抵扣:
+ ¥{{orderInfo.coupon_price}}
+
+
+ 积分抵扣:
+ ¥{{orderInfo.integral_price}}
+
+
+ 支付方式:
+ 余额支付
+ 支付宝支付
+ 微信支付
+
+
+ 买家留言:
+ {{orderInfo.mark}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_invoicing/index.vue b/pages/users/user_invoicing/index.vue
new file mode 100644
index 0000000..56c858c
--- /dev/null
+++ b/pages/users/user_invoicing/index.vue
@@ -0,0 +1,515 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_modify_phone/index.vue b/pages/users/user_modify_phone/index.vue
new file mode 100644
index 0000000..8dd6a68
--- /dev/null
+++ b/pages/users/user_modify_phone/index.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_modify_pwd/index.vue b/pages/users/user_modify_pwd/index.vue
new file mode 100644
index 0000000..096c036
--- /dev/null
+++ b/pages/users/user_modify_pwd/index.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_money/index.vue b/pages/users/user_money/index.vue
new file mode 100644
index 0000000..6eb49e9
--- /dev/null
+++ b/pages/users/user_money/index.vue
@@ -0,0 +1,365 @@
+
+
+
+
+
+
+
+
+
+
+ 账单记录
+
+
+
+
+
+ 消费记录
+
+
+
+
+
+ 充值记录
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_nickname/index.vue b/pages/users/user_nickname/index.vue
new file mode 100644
index 0000000..4d84555
--- /dev/null
+++ b/pages/users/user_nickname/index.vue
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_payment/index.vue b/pages/users/user_payment/index.vue
new file mode 100644
index 0000000..7a93f9b
--- /dev/null
+++ b/pages/users/user_payment/index.vue
@@ -0,0 +1,714 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_phone/index.vue b/pages/users/user_phone/index.vue
new file mode 100644
index 0000000..8c1622e
--- /dev/null
+++ b/pages/users/user_phone/index.vue
@@ -0,0 +1,295 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_pwd_edit/index.vue b/pages/users/user_pwd_edit/index.vue
new file mode 100644
index 0000000..81e816d
--- /dev/null
+++ b/pages/users/user_pwd_edit/index.vue
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_return_list/index.vue b/pages/users/user_return_list/index.vue
new file mode 100644
index 0000000..bd23d20
--- /dev/null
+++ b/pages/users/user_return_list/index.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+ 订单号:{{item.order_id}}
+
+
+
+
+
+
+ {{item.productInfo.store_name}}
+ x {{item.cart_num}}
+
+ {{item.productInfo.attrInfo.suk}}
+ {{item.productInfo.store_name}}
+ ¥{{item.productInfo.price}}
+
+
+ 共{{item.cartInfo.length || 0}}件商品,总金额 ¥{{item.pay_price}}
+
+
+
+ {{loadTitle}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_setting/index.vue b/pages/users/user_setting/index.vue
new file mode 100644
index 0000000..b9a7551
--- /dev/null
+++ b/pages/users/user_setting/index.vue
@@ -0,0 +1,103 @@
+
+
+
+
+ 个人信息
+
+
+
+
+
+ 关于我们
+
+
+
+ 资质证明
+
+
+
+ 协议规则
+
+
+
+
+ 隐私设置
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_sgin/index.vue b/pages/users/user_sgin/index.vue
new file mode 100644
index 0000000..6728b18
--- /dev/null
+++ b/pages/users/user_sgin/index.vue
@@ -0,0 +1,281 @@
+
+
+
+
+
+
+
+ {{item.value.sign_day}}
+
+ +{{item.value.sign_integral}}
+
+
+
+
+
+
+
+ 已累计签到
+
+ {{signCount[0] || 0}}
+ {{signCount[1] || 0}}
+ {{signCount[2] || 0}}
+ {{signCount[3] || 0}}
+ 天
+
+ 据说连续签到第7天可获得超额积分,一定要坚持签到哦~~~
+
+
+
+ {{item.title}}
+ {{item.create_time}}
+
+ +{{item.number}}
+
+ 点击加载更多
+
+
+
+
+
+ 签到成功
+ 获得{{integral}}积分
+ 好的
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_sgin_list/index.vue b/pages/users/user_sgin_list/index.vue
new file mode 100644
index 0000000..a5138be
--- /dev/null
+++ b/pages/users/user_sgin_list/index.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+ {{item.month}}
+
+
+
+ {{itemn.title}}
+ {{itemn.create_time}}
+
+ +{{itemn.number}}
+
+
+
+
+
+ {{loadtitle}}
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_spread_code/index.vue b/pages/users/user_spread_code/index.vue
new file mode 100644
index 0000000..39c2b4a
--- /dev/null
+++ b/pages/users/user_spread_code/index.vue
@@ -0,0 +1,441 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存海报
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_spread_money/index.vue b/pages/users/user_spread_money/index.vue
new file mode 100644
index 0000000..1db3bbf
--- /dev/null
+++ b/pages/users/user_spread_money/index.vue
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 银行卡提现
+ 微信提现
+ 支付宝提现
+ 提现到零钱
+
+
+ 提现失败({{item.fail_msg}})
+
+ {{item.create_time}}
+
+ -{{item.extract_price}}
+
+ 冻结中
+ +{{item.extract_price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+ {{item.create_time}}
+
+ -{{item.number}}
+
+ 冻结中
+ +{{item.number}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/users/user_spread_user/index.vue b/pages/users/user_spread_user/index.vue
new file mode 100644
index 0000000..ebc3019
--- /dev/null
+++ b/pages/users/user_spread_user/index.vue
@@ -0,0 +1,381 @@
+
+
+
+
+
+ 立即提现
+
+
+ 立即提现
+
+
+
+
+ 推广名片
+
+
+
+ 推广人统计
+
+
+
+ 佣金明细
+
+
+
+ 推广人订单
+
+
+
+ 推广人排行
+
+
+
+ 佣金排行
+
+
+
+
+
+
+ 佣金说明
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/webview/webview.vue b/pages/webview/webview.vue
new file mode 100644
index 0000000..be14d0f
--- /dev/null
+++ b/pages/webview/webview.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
diff --git a/plugin/animate/animate.min.css b/plugin/animate/animate.min.css
new file mode 100644
index 0000000..6e3e4be
--- /dev/null
+++ b/plugin/animate/animate.min.css
@@ -0,0 +1,2836 @@
+@charset "UTF-8";
+
+/*!
+ * animate.css -https://daneden.github.io/animate.css/
+ * Version - 3.7.2
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
+ *
+ * Copyright (c) 2019 Daniel Eden
+ */
+
+@-webkit-keyframes bounce {
+
+ 0%,
+ 20%,
+ 53%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ 40%,
+ 43% {
+ -webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
+ animation-timing-function: cubic-bezier(.755, .05, .855, .06);
+ -webkit-transform: translate3d(0, -30px, 0);
+ transform: translate3d(0, -30px, 0)
+ }
+
+ 70% {
+ -webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
+ animation-timing-function: cubic-bezier(.755, .05, .855, .06);
+ -webkit-transform: translate3d(0, -15px, 0);
+ transform: translate3d(0, -15px, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, -4px, 0);
+ transform: translate3d(0, -4px, 0)
+ }
+}
+
+@keyframes bounce {
+
+ 0%,
+ 20%,
+ 53%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ 40%,
+ 43% {
+ -webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
+ animation-timing-function: cubic-bezier(.755, .05, .855, .06);
+ -webkit-transform: translate3d(0, -30px, 0);
+ transform: translate3d(0, -30px, 0)
+ }
+
+ 70% {
+ -webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
+ animation-timing-function: cubic-bezier(.755, .05, .855, .06);
+ -webkit-transform: translate3d(0, -15px, 0);
+ transform: translate3d(0, -15px, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, -4px, 0);
+ transform: translate3d(0, -4px, 0)
+ }
+}
+
+.bounce {
+ -webkit-animation-name: bounce;
+ animation-name: bounce;
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom
+}
+
+@-webkit-keyframes flash {
+
+ 0%,
+ 50%,
+ to {
+ opacity: 1
+ }
+
+ 25%,
+ 75% {
+ opacity: 0
+ }
+}
+
+@keyframes flash {
+
+ 0%,
+ 50%,
+ to {
+ opacity: 1
+ }
+
+ 25%,
+ 75% {
+ opacity: 0
+ }
+}
+
+.flash {
+ -webkit-animation-name: flash;
+ animation-name: flash
+}
+
+@-webkit-keyframes pulse {
+ 0% {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05)
+ }
+
+ to {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+}
+
+@keyframes pulse {
+ 0% {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05)
+ }
+
+ to {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+}
+
+.pulse {
+ -webkit-animation-name: pulse;
+ animation-name: pulse
+}
+
+@-webkit-keyframes rubberBand {
+ 0% {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+
+ 30% {
+ -webkit-transform: scale3d(1.25, .75, 1);
+ transform: scale3d(1.25, .75, 1)
+ }
+
+ 40% {
+ -webkit-transform: scale3d(.75, 1.25, 1);
+ transform: scale3d(.75, 1.25, 1)
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.15, .85, 1);
+ transform: scale3d(1.15, .85, 1)
+ }
+
+ 65% {
+ -webkit-transform: scale3d(.95, 1.05, 1);
+ transform: scale3d(.95, 1.05, 1)
+ }
+
+ 75% {
+ -webkit-transform: scale3d(1.05, .95, 1);
+ transform: scale3d(1.05, .95, 1)
+ }
+
+ to {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+}
+
+@keyframes rubberBand {
+ 0% {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+
+ 30% {
+ -webkit-transform: scale3d(1.25, .75, 1);
+ transform: scale3d(1.25, .75, 1)
+ }
+
+ 40% {
+ -webkit-transform: scale3d(.75, 1.25, 1);
+ transform: scale3d(.75, 1.25, 1)
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.15, .85, 1);
+ transform: scale3d(1.15, .85, 1)
+ }
+
+ 65% {
+ -webkit-transform: scale3d(.95, 1.05, 1);
+ transform: scale3d(.95, 1.05, 1)
+ }
+
+ 75% {
+ -webkit-transform: scale3d(1.05, .95, 1);
+ transform: scale3d(1.05, .95, 1)
+ }
+
+ to {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+}
+
+.rubberBand {
+ -webkit-animation-name: rubberBand;
+ animation-name: rubberBand
+}
+
+@-webkit-keyframes shake {
+
+ 0%,
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ 10%,
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0)
+ }
+
+ 20%,
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0)
+ }
+}
+
+@keyframes shake {
+
+ 0%,
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ 10%,
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0)
+ }
+
+ 20%,
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0)
+ }
+}
+
+.shake {
+ -webkit-animation-name: shake;
+ animation-name: shake
+}
+
+@-webkit-keyframes headShake {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0)
+ }
+
+ 6.5% {
+ -webkit-transform: translateX(-6px) rotateY(-9deg);
+ transform: translateX(-6px) rotateY(-9deg)
+ }
+
+ 18.5% {
+ -webkit-transform: translateX(5px) rotateY(7deg);
+ transform: translateX(5px) rotateY(7deg)
+ }
+
+ 31.5% {
+ -webkit-transform: translateX(-3px) rotateY(-5deg);
+ transform: translateX(-3px) rotateY(-5deg)
+ }
+
+ 43.5% {
+ -webkit-transform: translateX(2px) rotateY(3deg);
+ transform: translateX(2px) rotateY(3deg)
+ }
+
+ 50% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0)
+ }
+}
+
+@keyframes headShake {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0)
+ }
+
+ 6.5% {
+ -webkit-transform: translateX(-6px) rotateY(-9deg);
+ transform: translateX(-6px) rotateY(-9deg)
+ }
+
+ 18.5% {
+ -webkit-transform: translateX(5px) rotateY(7deg);
+ transform: translateX(5px) rotateY(7deg)
+ }
+
+ 31.5% {
+ -webkit-transform: translateX(-3px) rotateY(-5deg);
+ transform: translateX(-3px) rotateY(-5deg)
+ }
+
+ 43.5% {
+ -webkit-transform: translateX(2px) rotateY(3deg);
+ transform: translateX(2px) rotateY(3deg)
+ }
+
+ 50% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0)
+ }
+}
+
+.headShake {
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ -webkit-animation-name: headShake;
+ animation-name: headShake
+}
+
+@-webkit-keyframes swing {
+ 20% {
+ -webkit-transform: rotate(15deg);
+ transform: rotate(15deg)
+ }
+
+ 40% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg)
+ }
+
+ 60% {
+ -webkit-transform: rotate(5deg);
+ transform: rotate(5deg)
+ }
+
+ 80% {
+ -webkit-transform: rotate(-5deg);
+ transform: rotate(-5deg)
+ }
+
+ to {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg)
+ }
+}
+
+@keyframes swing {
+ 20% {
+ -webkit-transform: rotate(15deg);
+ transform: rotate(15deg)
+ }
+
+ 40% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg)
+ }
+
+ 60% {
+ -webkit-transform: rotate(5deg);
+ transform: rotate(5deg)
+ }
+
+ 80% {
+ -webkit-transform: rotate(-5deg);
+ transform: rotate(-5deg)
+ }
+
+ to {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg)
+ }
+}
+
+.swing {
+ -webkit-transform-origin: top center;
+ transform-origin: top center;
+ -webkit-animation-name: swing;
+ animation-name: swing
+}
+
+@-webkit-keyframes tada {
+ 0% {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+
+ 10%,
+ 20% {
+ -webkit-transform: scale3d(.9, .9, .9) rotate(-3deg);
+ transform: scale3d(.9, .9, .9) rotate(-3deg)
+ }
+
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate(3deg)
+ }
+
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg)
+ }
+
+ to {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+}
+
+@keyframes tada {
+ 0% {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+
+ 10%,
+ 20% {
+ -webkit-transform: scale3d(.9, .9, .9) rotate(-3deg);
+ transform: scale3d(.9, .9, .9) rotate(-3deg)
+ }
+
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate(3deg)
+ }
+
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate(-3deg)
+ }
+
+ to {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+}
+
+.tada {
+ -webkit-animation-name: tada;
+ animation-name: tada
+}
+
+@-webkit-keyframes wobble {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ 15% {
+ -webkit-transform: translate3d(-25%, 0, 0) rotate(-5deg);
+ transform: translate3d(-25%, 0, 0) rotate(-5deg)
+ }
+
+ 30% {
+ -webkit-transform: translate3d(20%, 0, 0) rotate(3deg);
+ transform: translate3d(20%, 0, 0) rotate(3deg)
+ }
+
+ 45% {
+ -webkit-transform: translate3d(-15%, 0, 0) rotate(-3deg);
+ transform: translate3d(-15%, 0, 0) rotate(-3deg)
+ }
+
+ 60% {
+ -webkit-transform: translate3d(10%, 0, 0) rotate(2deg);
+ transform: translate3d(10%, 0, 0) rotate(2deg)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(-5%, 0, 0) rotate(-1deg);
+ transform: translate3d(-5%, 0, 0) rotate(-1deg)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes wobble {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ 15% {
+ -webkit-transform: translate3d(-25%, 0, 0) rotate(-5deg);
+ transform: translate3d(-25%, 0, 0) rotate(-5deg)
+ }
+
+ 30% {
+ -webkit-transform: translate3d(20%, 0, 0) rotate(3deg);
+ transform: translate3d(20%, 0, 0) rotate(3deg)
+ }
+
+ 45% {
+ -webkit-transform: translate3d(-15%, 0, 0) rotate(-3deg);
+ transform: translate3d(-15%, 0, 0) rotate(-3deg)
+ }
+
+ 60% {
+ -webkit-transform: translate3d(10%, 0, 0) rotate(2deg);
+ transform: translate3d(10%, 0, 0) rotate(2deg)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(-5%, 0, 0) rotate(-1deg);
+ transform: translate3d(-5%, 0, 0) rotate(-1deg)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.wobble {
+ -webkit-animation-name: wobble;
+ animation-name: wobble
+}
+
+@-webkit-keyframes jello {
+
+ 0%,
+ 11.1%,
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ 22.2% {
+ -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+ transform: skewX(-12.5deg) skewY(-12.5deg)
+ }
+
+ 33.3% {
+ -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+ transform: skewX(6.25deg) skewY(6.25deg)
+ }
+
+ 44.4% {
+ -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+ transform: skewX(-3.125deg) skewY(-3.125deg)
+ }
+
+ 55.5% {
+ -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+ transform: skewX(1.5625deg) skewY(1.5625deg)
+ }
+
+ 66.6% {
+ -webkit-transform: skewX(-.78125deg) skewY(-.78125deg);
+ transform: skewX(-.78125deg) skewY(-.78125deg)
+ }
+
+ 77.7% {
+ -webkit-transform: skewX(.390625deg) skewY(.390625deg);
+ transform: skewX(.390625deg) skewY(.390625deg)
+ }
+
+ 88.8% {
+ -webkit-transform: skewX(-.1953125deg) skewY(-.1953125deg);
+ transform: skewX(-.1953125deg) skewY(-.1953125deg)
+ }
+}
+
+@keyframes jello {
+
+ 0%,
+ 11.1%,
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ 22.2% {
+ -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+ transform: skewX(-12.5deg) skewY(-12.5deg)
+ }
+
+ 33.3% {
+ -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+ transform: skewX(6.25deg) skewY(6.25deg)
+ }
+
+ 44.4% {
+ -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+ transform: skewX(-3.125deg) skewY(-3.125deg)
+ }
+
+ 55.5% {
+ -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+ transform: skewX(1.5625deg) skewY(1.5625deg)
+ }
+
+ 66.6% {
+ -webkit-transform: skewX(-.78125deg) skewY(-.78125deg);
+ transform: skewX(-.78125deg) skewY(-.78125deg)
+ }
+
+ 77.7% {
+ -webkit-transform: skewX(.390625deg) skewY(.390625deg);
+ transform: skewX(.390625deg) skewY(.390625deg)
+ }
+
+ 88.8% {
+ -webkit-transform: skewX(-.1953125deg) skewY(-.1953125deg);
+ transform: skewX(-.1953125deg) skewY(-.1953125deg)
+ }
+}
+
+.jello {
+ -webkit-animation-name: jello;
+ animation-name: jello;
+ -webkit-transform-origin: center;
+ transform-origin: center
+}
+
+@-webkit-keyframes heartBeat {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+
+ 14% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3)
+ }
+
+ 28% {
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+
+ 42% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3)
+ }
+
+ 70% {
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+}
+
+@keyframes heartBeat {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+
+ 14% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3)
+ }
+
+ 28% {
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+
+ 42% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3)
+ }
+
+ 70% {
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+}
+
+.heartBeat {
+ -webkit-animation-name: heartBeat;
+ animation-name: heartBeat;
+ -webkit-animation-duration: 1.3s;
+ animation-duration: 1.3s;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out
+}
+
+@-webkit-keyframes bounceIn {
+
+ 0%,
+ 20%,
+ 40%,
+ 60%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+
+ 20% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1)
+ }
+
+ 40% {
+ -webkit-transform: scale3d(.9, .9, .9);
+ transform: scale3d(.9, .9, .9)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
+ transform: scale3d(1.03, 1.03, 1.03)
+ }
+
+ 80% {
+ -webkit-transform: scale3d(.97, .97, .97);
+ transform: scale3d(.97, .97, .97)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+}
+
+@keyframes bounceIn {
+
+ 0%,
+ 20%,
+ 40%,
+ 60%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+
+ 20% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1)
+ }
+
+ 40% {
+ -webkit-transform: scale3d(.9, .9, .9);
+ transform: scale3d(.9, .9, .9)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
+ transform: scale3d(1.03, 1.03, 1.03)
+ }
+
+ 80% {
+ -webkit-transform: scale3d(.97, .97, .97);
+ transform: scale3d(.97, .97, .97)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+ }
+}
+
+.bounceIn {
+ -webkit-animation-duration: .75s;
+ animation-duration: .75s;
+ -webkit-animation-name: bounceIn;
+ animation-name: bounceIn
+}
+
+@-webkit-keyframes bounceInDown {
+
+ 0%,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -3000px, 0);
+ transform: translate3d(0, -3000px, 0)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 25px, 0);
+ transform: translate3d(0, 25px, 0)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, 5px, 0);
+ transform: translate3d(0, 5px, 0)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes bounceInDown {
+
+ 0%,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -3000px, 0);
+ transform: translate3d(0, -3000px, 0)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 25px, 0);
+ transform: translate3d(0, 25px, 0)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, 5px, 0);
+ transform: translate3d(0, 5px, 0)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.bounceInDown {
+ -webkit-animation-name: bounceInDown;
+ animation-name: bounceInDown
+}
+
+@-webkit-keyframes bounceInLeft {
+
+ 0%,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-3000px, 0, 0);
+ transform: translate3d(-3000px, 0, 0)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(25px, 0, 0);
+ transform: translate3d(25px, 0, 0)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(5px, 0, 0);
+ transform: translate3d(5px, 0, 0)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes bounceInLeft {
+
+ 0%,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-3000px, 0, 0);
+ transform: translate3d(-3000px, 0, 0)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(25px, 0, 0);
+ transform: translate3d(25px, 0, 0)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(5px, 0, 0);
+ transform: translate3d(5px, 0, 0)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.bounceInLeft {
+ -webkit-animation-name: bounceInLeft;
+ animation-name: bounceInLeft
+}
+
+@-webkit-keyframes bounceInRight {
+
+ 0%,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(3000px, 0, 0);
+ transform: translate3d(3000px, 0, 0)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(-25px, 0, 0);
+ transform: translate3d(-25px, 0, 0)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(-5px, 0, 0);
+ transform: translate3d(-5px, 0, 0)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes bounceInRight {
+
+ 0%,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(3000px, 0, 0);
+ transform: translate3d(3000px, 0, 0)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(-25px, 0, 0);
+ transform: translate3d(-25px, 0, 0)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(-5px, 0, 0);
+ transform: translate3d(-5px, 0, 0)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.bounceInRight {
+ -webkit-animation-name: bounceInRight;
+ animation-name: bounceInRight
+}
+
+@-webkit-keyframes bounceInUp {
+
+ 0%,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 3000px, 0);
+ transform: translate3d(0, 3000px, 0)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, -5px, 0);
+ transform: translate3d(0, -5px, 0)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes bounceInUp {
+
+ 0%,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
+ animation-timing-function: cubic-bezier(.215, .61, .355, 1)
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 3000px, 0);
+ transform: translate3d(0, 3000px, 0)
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0)
+ }
+
+ 75% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0)
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, -5px, 0);
+ transform: translate3d(0, -5px, 0)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.bounceInUp {
+ -webkit-animation-name: bounceInUp;
+ animation-name: bounceInUp
+}
+
+@-webkit-keyframes bounceOut {
+ 20% {
+ -webkit-transform: scale3d(.9, .9, .9);
+ transform: scale3d(.9, .9, .9)
+ }
+
+ 50%,
+ 55% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+}
+
+@keyframes bounceOut {
+ 20% {
+ -webkit-transform: scale3d(.9, .9, .9);
+ transform: scale3d(.9, .9, .9)
+ }
+
+ 50%,
+ 55% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+}
+
+.bounceOut {
+ -webkit-animation-duration: .75s;
+ animation-duration: .75s;
+ -webkit-animation-name: bounceOut;
+ animation-name: bounceOut
+}
+
+@-webkit-keyframes bounceOutDown {
+ 20% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0)
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+}
+
+@keyframes bounceOutDown {
+ 20% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0)
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+}
+
+.bounceOutDown {
+ -webkit-animation-name: bounceOutDown;
+ animation-name: bounceOutDown
+}
+
+@-webkit-keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(20px, 0, 0);
+ transform: translate3d(20px, 0, 0)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+}
+
+@keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(20px, 0, 0);
+ transform: translate3d(20px, 0, 0)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+}
+
+.bounceOutLeft {
+ -webkit-animation-name: bounceOutLeft;
+ animation-name: bounceOutLeft
+}
+
+@-webkit-keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(-20px, 0, 0);
+ transform: translate3d(-20px, 0, 0)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+}
+
+@keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(-20px, 0, 0);
+ transform: translate3d(-20px, 0, 0)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+}
+
+.bounceOutRight {
+ -webkit-animation-name: bounceOutRight;
+ animation-name: bounceOutRight
+}
+
+@-webkit-keyframes bounceOutUp {
+ 20% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0)
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 20px, 0);
+ transform: translate3d(0, 20px, 0)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+}
+
+@keyframes bounceOutUp {
+ 20% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0)
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 20px, 0);
+ transform: translate3d(0, 20px, 0)
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+}
+
+.bounceOutUp {
+ -webkit-animation-name: bounceOutUp;
+ animation-name: bounceOutUp
+}
+
+@-webkit-keyframes fadeIn {
+ 0% {
+ opacity: 0
+ }
+
+ to {
+ opacity: 1
+ }
+}
+
+@keyframes fadeIn {
+ 0% {
+ opacity: 0
+ }
+
+ to {
+ opacity: 1
+ }
+}
+
+.fadeIn {
+ -webkit-animation-name: fadeIn;
+ animation-name: fadeIn
+}
+
+@-webkit-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.fadeInDown {
+ -webkit-animation-name: fadeInDown;
+ animation-name: fadeInDown
+}
+
+@-webkit-keyframes fadeInDownBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes fadeInDownBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.fadeInDownBig {
+ -webkit-animation-name: fadeInDownBig;
+ animation-name: fadeInDownBig
+}
+
+@-webkit-keyframes fadeInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes fadeInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.fadeInLeft {
+ -webkit-animation-name: fadeInLeft;
+ animation-name: fadeInLeft
+}
+
+@-webkit-keyframes fadeInLeftBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes fadeInLeftBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.fadeInLeftBig {
+ -webkit-animation-name: fadeInLeftBig;
+ animation-name: fadeInLeftBig
+}
+
+@-webkit-keyframes fadeInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes fadeInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.fadeInRight {
+ -webkit-animation-name: fadeInRight;
+ animation-name: fadeInRight
+}
+
+@-webkit-keyframes fadeInRightBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes fadeInRightBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.fadeInRightBig {
+ -webkit-animation-name: fadeInRightBig;
+ animation-name: fadeInRightBig
+}
+
+@-webkit-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.fadeInUp {
+ -webkit-animation-name: fadeInUp;
+ animation-name: fadeInUp
+}
+
+@-webkit-keyframes fadeInUpBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes fadeInUpBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.fadeInUpBig {
+ -webkit-animation-name: fadeInUpBig;
+ animation-name: fadeInUpBig
+}
+
+@-webkit-keyframes fadeOut {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0
+ }
+}
+
+@keyframes fadeOut {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0
+ }
+}
+
+.fadeOut {
+ -webkit-animation-name: fadeOut;
+ animation-name: fadeOut
+}
+
+@-webkit-keyframes fadeOutDown {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+}
+
+@keyframes fadeOutDown {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+}
+
+.fadeOutDown {
+ -webkit-animation-name: fadeOutDown;
+ animation-name: fadeOutDown
+}
+
+@-webkit-keyframes fadeOutDownBig {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+}
+
+@keyframes fadeOutDownBig {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+}
+
+.fadeOutDownBig {
+ -webkit-animation-name: fadeOutDownBig;
+ animation-name: fadeOutDownBig
+}
+
+@-webkit-keyframes fadeOutLeft {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+}
+
+@keyframes fadeOutLeft {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+}
+
+.fadeOutLeft {
+ -webkit-animation-name: fadeOutLeft;
+ animation-name: fadeOutLeft
+}
+
+@-webkit-keyframes fadeOutLeftBig {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+}
+
+@keyframes fadeOutLeftBig {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+}
+
+.fadeOutLeftBig {
+ -webkit-animation-name: fadeOutLeftBig;
+ animation-name: fadeOutLeftBig
+}
+
+@-webkit-keyframes fadeOutRight {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+}
+
+@keyframes fadeOutRight {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+}
+
+.fadeOutRight {
+ -webkit-animation-name: fadeOutRight;
+ animation-name: fadeOutRight
+}
+
+@-webkit-keyframes fadeOutRightBig {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+}
+
+@keyframes fadeOutRightBig {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+}
+
+.fadeOutRightBig {
+ -webkit-animation-name: fadeOutRightBig;
+ animation-name: fadeOutRightBig
+}
+
+@-webkit-keyframes fadeOutUp {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+}
+
+@keyframes fadeOutUp {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+}
+
+.fadeOutUp {
+ -webkit-animation-name: fadeOutUp;
+ animation-name: fadeOutUp
+}
+
+@-webkit-keyframes fadeOutUpBig {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+}
+
+@keyframes fadeOutUpBig {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+}
+
+.fadeOutUpBig {
+ -webkit-animation-name: fadeOutUpBig;
+ animation-name: fadeOutUpBig
+}
+
+@-webkit-keyframes flip {
+ 0% {
+ -webkit-transform: perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);
+ transform: perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);
+ transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+ }
+
+ 50% {
+ -webkit-transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);
+ transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) scale3d(.95, .95, .95) translateZ(0) rotateY(0deg);
+ transform: perspective(400px) scale3d(.95, .95, .95) translateZ(0) rotateY(0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+
+ to {
+ -webkit-transform: perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);
+ transform: perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+}
+
+@keyframes flip {
+ 0% {
+ -webkit-transform: perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);
+ transform: perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);
+ transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+ }
+
+ 50% {
+ -webkit-transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);
+ transform: perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) scale3d(.95, .95, .95) translateZ(0) rotateY(0deg);
+ transform: perspective(400px) scale3d(.95, .95, .95) translateZ(0) rotateY(0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+
+ to {
+ -webkit-transform: perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);
+ transform: perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+}
+
+.animated.flip {
+ -webkit-backface-visibility: visible;
+ backface-visibility: visible;
+ -webkit-animation-name: flip;
+ animation-name: flip
+}
+
+@-webkit-keyframes flipInX {
+ 0% {
+ -webkit-transform: perspective(400px) rotateX(90deg);
+ transform: perspective(400px) rotateX(90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotateX(-20deg);
+ transform: perspective(400px) rotateX(-20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+
+ 60% {
+ -webkit-transform: perspective(400px) rotateX(10deg);
+ transform: perspective(400px) rotateX(10deg);
+ opacity: 1
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) rotateX(-5deg);
+ transform: perspective(400px) rotateX(-5deg)
+ }
+
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+}
+
+@keyframes flipInX {
+ 0% {
+ -webkit-transform: perspective(400px) rotateX(90deg);
+ transform: perspective(400px) rotateX(90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotateX(-20deg);
+ transform: perspective(400px) rotateX(-20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+
+ 60% {
+ -webkit-transform: perspective(400px) rotateX(10deg);
+ transform: perspective(400px) rotateX(10deg);
+ opacity: 1
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) rotateX(-5deg);
+ transform: perspective(400px) rotateX(-5deg)
+ }
+
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+}
+
+.flipInX {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInX;
+ animation-name: flipInX
+}
+
+@-webkit-keyframes flipInY {
+ 0% {
+ -webkit-transform: perspective(400px) rotateY(90deg);
+ transform: perspective(400px) rotateY(90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotateY(-20deg);
+ transform: perspective(400px) rotateY(-20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+
+ 60% {
+ -webkit-transform: perspective(400px) rotateY(10deg);
+ transform: perspective(400px) rotateY(10deg);
+ opacity: 1
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) rotateY(-5deg);
+ transform: perspective(400px) rotateY(-5deg)
+ }
+
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+}
+
+@keyframes flipInY {
+ 0% {
+ -webkit-transform: perspective(400px) rotateY(90deg);
+ transform: perspective(400px) rotateY(90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotateY(-20deg);
+ transform: perspective(400px) rotateY(-20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+
+ 60% {
+ -webkit-transform: perspective(400px) rotateY(10deg);
+ transform: perspective(400px) rotateY(10deg);
+ opacity: 1
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) rotateY(-5deg);
+ transform: perspective(400px) rotateY(-5deg)
+ }
+
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+}
+
+.flipInY {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInY;
+ animation-name: flipInY
+}
+
+@-webkit-keyframes flipOutX {
+ 0% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+
+ 30% {
+ -webkit-transform: perspective(400px) rotateX(-20deg);
+ transform: perspective(400px) rotateX(-20deg);
+ opacity: 1
+ }
+
+ to {
+ -webkit-transform: perspective(400px) rotateX(90deg);
+ transform: perspective(400px) rotateX(90deg);
+ opacity: 0
+ }
+}
+
+@keyframes flipOutX {
+ 0% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+
+ 30% {
+ -webkit-transform: perspective(400px) rotateX(-20deg);
+ transform: perspective(400px) rotateX(-20deg);
+ opacity: 1
+ }
+
+ to {
+ -webkit-transform: perspective(400px) rotateX(90deg);
+ transform: perspective(400px) rotateX(90deg);
+ opacity: 0
+ }
+}
+
+.flipOutX {
+ -webkit-animation-duration: .75s;
+ animation-duration: .75s;
+ -webkit-animation-name: flipOutX;
+ animation-name: flipOutX;
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important
+}
+
+@-webkit-keyframes flipOutY {
+ 0% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+
+ 30% {
+ -webkit-transform: perspective(400px) rotateY(-15deg);
+ transform: perspective(400px) rotateY(-15deg);
+ opacity: 1
+ }
+
+ to {
+ -webkit-transform: perspective(400px) rotateY(90deg);
+ transform: perspective(400px) rotateY(90deg);
+ opacity: 0
+ }
+}
+
+@keyframes flipOutY {
+ 0% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+
+ 30% {
+ -webkit-transform: perspective(400px) rotateY(-15deg);
+ transform: perspective(400px) rotateY(-15deg);
+ opacity: 1
+ }
+
+ to {
+ -webkit-transform: perspective(400px) rotateY(90deg);
+ transform: perspective(400px) rotateY(90deg);
+ opacity: 0
+ }
+}
+
+.flipOutY {
+ -webkit-animation-duration: .75s;
+ animation-duration: .75s;
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipOutY;
+ animation-name: flipOutY
+}
+
+@-webkit-keyframes lightSpeedIn {
+ 0% {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0
+ }
+
+ 60% {
+ -webkit-transform: skewX(20deg);
+ transform: skewX(20deg);
+ opacity: 1
+ }
+
+ 80% {
+ -webkit-transform: skewX(-5deg);
+ transform: skewX(-5deg)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes lightSpeedIn {
+ 0% {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0
+ }
+
+ 60% {
+ -webkit-transform: skewX(20deg);
+ transform: skewX(20deg);
+ opacity: 1
+ }
+
+ 80% {
+ -webkit-transform: skewX(-5deg);
+ transform: skewX(-5deg)
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.lightSpeedIn {
+ -webkit-animation-name: lightSpeedIn;
+ animation-name: lightSpeedIn;
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+}
+
+@-webkit-keyframes lightSpeedOut {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0
+ }
+}
+
+@keyframes lightSpeedOut {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0
+ }
+}
+
+.lightSpeedOut {
+ -webkit-animation-name: lightSpeedOut;
+ animation-name: lightSpeedOut;
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+}
+
+@-webkit-keyframes rotateIn {
+ 0% {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate(-200deg);
+ transform: rotate(-200deg);
+ opacity: 0
+ }
+
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0);
+ opacity: 1
+ }
+}
+
+@keyframes rotateIn {
+ 0% {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate(-200deg);
+ transform: rotate(-200deg);
+ opacity: 0
+ }
+
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0);
+ opacity: 1
+ }
+}
+
+@keyframes hinge {
+ 0% {
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out
+ }
+
+ 20%,
+ 60% {
+ -webkit-transform: rotate(80deg);
+ transform: rotate(80deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out
+ }
+
+ 40%,
+ 80% {
+ -webkit-transform: rotate(60deg);
+ transform: rotate(60deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ opacity: 1
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 700px, 0);
+ transform: translate3d(0, 700px, 0);
+ opacity: 0
+ }
+}
+
+.hinge {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s;
+ -webkit-animation-name: hinge;
+ animation-name: hinge
+}
+
+@-webkit-keyframes jackInTheBox {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale(.1) rotate(30deg);
+ transform: scale(.1) rotate(30deg);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom
+ }
+
+ 50% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg)
+ }
+
+ 70% {
+ -webkit-transform: rotate(3deg);
+ transform: rotate(3deg)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+}
+
+@keyframes jackInTheBox {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale(.1) rotate(30deg);
+ transform: scale(.1) rotate(30deg);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom
+ }
+
+ 50% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg)
+ }
+
+ 70% {
+ -webkit-transform: rotate(3deg);
+ transform: rotate(3deg)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+}
+
+.jackInTheBox {
+ -webkit-animation-name: jackInTheBox;
+ animation-name: jackInTheBox
+}
+
+@-webkit-keyframes rollIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotate(-120deg);
+ transform: translate3d(-100%, 0, 0) rotate(-120deg)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes rollIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotate(-120deg);
+ transform: translate3d(-100%, 0, 0) rotate(-120deg)
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.rollIn {
+ -webkit-animation-name: rollIn;
+ animation-name: rollIn
+}
+
+@-webkit-keyframes rollOut {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotate(120deg);
+ transform: translate3d(100%, 0, 0) rotate(120deg)
+ }
+}
+
+@keyframes rollOut {
+ 0% {
+ opacity: 1
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotate(120deg);
+ transform: translate3d(100%, 0, 0) rotate(120deg)
+ }
+}
+
+.rollOut {
+ -webkit-animation-name: rollOut;
+ animation-name: rollOut
+}
+
+@-webkit-keyframes slideInDown {
+ 0% {
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ visibility: visible
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes slideInDown {
+ 0% {
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ visibility: visible
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.slideInDown {
+ -webkit-animation-name: slideInDown;
+ animation-name: slideInDown
+}
+
+@-webkit-keyframes slideInLeft {
+ 0% {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes slideInLeft {
+ 0% {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.slideInLeft {
+ -webkit-animation-name: slideInLeft;
+ animation-name: slideInLeft
+}
+
+@-webkit-keyframes slideInRight {
+ 0% {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ visibility: visible
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes slideInRight {
+ 0% {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ visibility: visible
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.slideInRight {
+ -webkit-animation-name: slideInRight;
+ animation-name: slideInRight
+}
+
+@-webkit-keyframes slideInUp {
+ 0% {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ visibility: visible
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+@keyframes slideInUp {
+ 0% {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ visibility: visible
+ }
+
+ to {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+}
+
+.slideInUp {
+ -webkit-animation-name: slideInUp;
+ animation-name: slideInUp
+}
+
+@-webkit-keyframes slideOutDown {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+}
+
+@keyframes slideOutDown {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+}
+
+.slideOutDown {
+ -webkit-animation-name: slideOutDown;
+ animation-name: slideOutDown
+}
+
+@-webkit-keyframes slideOutLeft {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+}
+
+@keyframes slideOutLeft {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+}
+
+.slideOutLeft {
+ -webkit-animation-name: slideOutLeft;
+ animation-name: slideOutLeft
+}
+
+@-webkit-keyframes slideOutRight {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+}
+
+@keyframes slideOutRight {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+}
+
+.slideOutRight {
+ -webkit-animation-name: slideOutRight;
+ animation-name: slideOutRight
+}
+
+@-webkit-keyframes slideOutUp {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+}
+
+@keyframes slideOutUp {
+ 0% {
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0)
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+}
+
+.slideOutUp {
+ -webkit-animation-name: slideOutUp;
+ animation-name: slideOutUp
+}
+
+.animated {
+ -webkit-animation-duration: 1s;
+ animation-duration: 1s;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both
+}
+
+.animated.infinite {
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite
+}
+
+.animated.delay-1s {
+ -webkit-animation-delay: 1s;
+ animation-delay: 1s
+}
+
+.animated.delay-2s {
+ -webkit-animation-delay: 2s;
+ animation-delay: 2s
+}
+
+.animated.delay-3s {
+ -webkit-animation-delay: 3s;
+ animation-delay: 3s
+}
+
+.animated.delay-4s {
+ -webkit-animation-delay: 4s;
+ animation-delay: 4s
+}
+
+.animated.delay-5s {
+ -webkit-animation-delay: 5s;
+ animation-delay: 5s
+}
+
+.animated.fast {
+ -webkit-animation-duration: .8s;
+ animation-duration: .8s
+}
+
+.animated.faster {
+ -webkit-animation-duration: .5s;
+ animation-duration: .5s
+}
+
+.animated.slow {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s
+}
+
+.animated.slower {
+ -webkit-animation-duration: 3s;
+ animation-duration: 3s
+}
+
+@media (prefers-reduced-motion:reduce),
+(print) {
+ .animated {
+ -webkit-animation-duration: 1ms !important;
+ animation-duration: 1ms !important;
+ -webkit-transition-duration: 1ms !important;
+ transition-duration: 1ms !important;
+ -webkit-animation-iteration-count: 1 !important;
+ animation-iteration-count: 1 !important
+ }
+}
diff --git a/plugin/clipboard/clipboard.js b/plugin/clipboard/clipboard.js
new file mode 100644
index 0000000..0240e3f
--- /dev/null
+++ b/plugin/clipboard/clipboard.js
@@ -0,0 +1,973 @@
+/*!
+ * clipboard.js v2.0.6
+ * https://clipboardjs.com/
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["ClipboardJS"] = factory();
+ else
+ root["ClipboardJS"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 6);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+function select(element) {
+ var selectedText;
+
+ if (element.nodeName === 'SELECT') {
+ element.focus();
+
+ selectedText = element.value;
+ }
+ else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
+ var isReadOnly = element.hasAttribute('readonly');
+
+ if (!isReadOnly) {
+ element.setAttribute('readonly', '');
+ }
+
+ element.select();
+ element.setSelectionRange(0, element.value.length);
+
+ if (!isReadOnly) {
+ element.removeAttribute('readonly');
+ }
+
+ selectedText = element.value;
+ }
+ else {
+ if (element.hasAttribute('contenteditable')) {
+ element.focus();
+ }
+
+ var selection = window.getSelection();
+ var range = document.createRange();
+
+ range.selectNodeContents(element);
+ selection.removeAllRanges();
+ selection.addRange(range);
+
+ selectedText = selection.toString();
+ }
+
+ return selectedText;
+}
+
+module.exports = select;
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports) {
+
+function E () {
+ // Keep this empty so it's easier to inherit from
+ // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
+}
+
+E.prototype = {
+ on: function (name, callback, ctx) {
+ var e = this.e || (this.e = {});
+
+ (e[name] || (e[name] = [])).push({
+ fn: callback,
+ ctx: ctx
+ });
+
+ return this;
+ },
+
+ once: function (name, callback, ctx) {
+ var self = this;
+ function listener () {
+ self.off(name, listener);
+ callback.apply(ctx, arguments);
+ };
+
+ listener._ = callback
+ return this.on(name, listener, ctx);
+ },
+
+ emit: function (name) {
+ var data = [].slice.call(arguments, 1);
+ var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
+ var i = 0;
+ var len = evtArr.length;
+
+ for (i; i < len; i++) {
+ evtArr[i].fn.apply(evtArr[i].ctx, data);
+ }
+
+ return this;
+ },
+
+ off: function (name, callback) {
+ var e = this.e || (this.e = {});
+ var evts = e[name];
+ var liveEvents = [];
+
+ if (evts && callback) {
+ for (var i = 0, len = evts.length; i < len; i++) {
+ if (evts[i].fn !== callback && evts[i].fn._ !== callback)
+ liveEvents.push(evts[i]);
+ }
+ }
+
+ // Remove event from queue to prevent memory leak
+ // Suggested by https://github.com/lazd
+ // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
+
+ (liveEvents.length)
+ ? e[name] = liveEvents
+ : delete e[name];
+
+ return this;
+ }
+};
+
+module.exports = E;
+module.exports.TinyEmitter = E;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var is = __webpack_require__(3);
+var delegate = __webpack_require__(4);
+
+/**
+ * Validates all params and calls the right
+ * listener function based on its target type.
+ *
+ * @param {String|HTMLElement|HTMLCollection|NodeList} target
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+function listen(target, type, callback) {
+ if (!target && !type && !callback) {
+ throw new Error('Missing required arguments');
+ }
+
+ if (!is.string(type)) {
+ throw new TypeError('Second argument must be a String');
+ }
+
+ if (!is.fn(callback)) {
+ throw new TypeError('Third argument must be a Function');
+ }
+
+ if (is.node(target)) {
+ return listenNode(target, type, callback);
+ }
+ else if (is.nodeList(target)) {
+ return listenNodeList(target, type, callback);
+ }
+ else if (is.string(target)) {
+ return listenSelector(target, type, callback);
+ }
+ else {
+ throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
+ }
+}
+
+/**
+ * Adds an event listener to a HTML element
+ * and returns a remove listener function.
+ *
+ * @param {HTMLElement} node
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+function listenNode(node, type, callback) {
+ node.addEventListener(type, callback);
+
+ return {
+ destroy: function() {
+ node.removeEventListener(type, callback);
+ }
+ }
+}
+
+/**
+ * Add an event listener to a list of HTML elements
+ * and returns a remove listener function.
+ *
+ * @param {NodeList|HTMLCollection} nodeList
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+function listenNodeList(nodeList, type, callback) {
+ Array.prototype.forEach.call(nodeList, function(node) {
+ node.addEventListener(type, callback);
+ });
+
+ return {
+ destroy: function() {
+ Array.prototype.forEach.call(nodeList, function(node) {
+ node.removeEventListener(type, callback);
+ });
+ }
+ }
+}
+
+/**
+ * Add an event listener to a selector
+ * and returns a remove listener function.
+ *
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+function listenSelector(selector, type, callback) {
+ return delegate(document.body, selector, type, callback);
+}
+
+module.exports = listen;
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+/**
+ * Check if argument is a HTML element.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+exports.node = function(value) {
+ return value !== undefined
+ && value instanceof HTMLElement
+ && value.nodeType === 1;
+};
+
+/**
+ * Check if argument is a list of HTML elements.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+exports.nodeList = function(value) {
+ var type = Object.prototype.toString.call(value);
+
+ return value !== undefined
+ && (type === '[object NodeList]' || type === '[object HTMLCollection]')
+ && ('length' in value)
+ && (value.length === 0 || exports.node(value[0]));
+};
+
+/**
+ * Check if argument is a string.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+exports.string = function(value) {
+ return typeof value === 'string'
+ || value instanceof String;
+};
+
+/**
+ * Check if argument is a function.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+exports.fn = function(value) {
+ var type = Object.prototype.toString.call(value);
+
+ return type === '[object Function]';
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var closest = __webpack_require__(5);
+
+/**
+ * Delegates event to a selector.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @param {Boolean} useCapture
+ * @return {Object}
+ */
+function _delegate(element, selector, type, callback, useCapture) {
+ var listenerFn = listener.apply(this, arguments);
+
+ element.addEventListener(type, listenerFn, useCapture);
+
+ return {
+ destroy: function() {
+ element.removeEventListener(type, listenerFn, useCapture);
+ }
+ }
+}
+
+/**
+ * Delegates event to a selector.
+ *
+ * @param {Element|String|Array} [elements]
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @param {Boolean} useCapture
+ * @return {Object}
+ */
+function delegate(elements, selector, type, callback, useCapture) {
+ // Handle the regular Element usage
+ if (typeof elements.addEventListener === 'function') {
+ return _delegate.apply(null, arguments);
+ }
+
+ // Handle Element-less usage, it defaults to global delegation
+ if (typeof type === 'function') {
+ // Use `document` as the first parameter, then apply arguments
+ // This is a short way to .unshift `arguments` without running into deoptimizations
+ return _delegate.bind(null, document).apply(null, arguments);
+ }
+
+ // Handle Selector-based usage
+ if (typeof elements === 'string') {
+ elements = document.querySelectorAll(elements);
+ }
+
+ // Handle Array-like based usage
+ return Array.prototype.map.call(elements, function (element) {
+ return _delegate(element, selector, type, callback, useCapture);
+ });
+}
+
+/**
+ * Finds closest match and invokes callback.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Function}
+ */
+function listener(element, selector, type, callback) {
+ return function(e) {
+ e.delegateTarget = closest(e.target, selector);
+
+ if (e.delegateTarget) {
+ callback.call(element, e);
+ }
+ }
+}
+
+module.exports = delegate;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports) {
+
+var DOCUMENT_NODE_TYPE = 9;
+
+/**
+ * A polyfill for Element.matches()
+ */
+if (typeof Element !== 'undefined' && !Element.prototype.matches) {
+ var proto = Element.prototype;
+
+ proto.matches = proto.matchesSelector ||
+ proto.mozMatchesSelector ||
+ proto.msMatchesSelector ||
+ proto.oMatchesSelector ||
+ proto.webkitMatchesSelector;
+}
+
+/**
+ * Finds the closest parent that matches a selector.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @return {Function}
+ */
+function closest (element, selector) {
+ while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {
+ if (typeof element.matches === 'function' &&
+ element.matches(selector)) {
+ return element;
+ }
+ element = element.parentNode;
+ }
+}
+
+module.exports = closest;
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+
+// EXTERNAL MODULE: ./node_modules/select/src/select.js
+var src_select = __webpack_require__(0);
+var select_default = /*#__PURE__*/__webpack_require__.n(src_select);
+
+// CONCATENATED MODULE: ./src/clipboard-action.js
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+
+
+/**
+ * Inner class which performs selection from either `text` or `target`
+ * properties and then executes copy or cut operations.
+ */
+
+var clipboard_action_ClipboardAction = function () {
+ /**
+ * @param {Object} options
+ */
+ function ClipboardAction(options) {
+ _classCallCheck(this, ClipboardAction);
+
+ this.resolveOptions(options);
+ this.initSelection();
+ }
+
+ /**
+ * Defines base properties passed from constructor.
+ * @param {Object} options
+ */
+
+
+ _createClass(ClipboardAction, [{
+ key: 'resolveOptions',
+ value: function resolveOptions() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.action = options.action;
+ this.container = options.container;
+ this.emitter = options.emitter;
+ this.target = options.target;
+ this.text = options.text;
+ this.trigger = options.trigger;
+
+ this.selectedText = '';
+ }
+
+ /**
+ * Decides which selection strategy is going to be applied based
+ * on the existence of `text` and `target` properties.
+ */
+
+ }, {
+ key: 'initSelection',
+ value: function initSelection() {
+ if (this.text) {
+ this.selectFake();
+ } else if (this.target) {
+ this.selectTarget();
+ }
+ }
+
+ /**
+ * Creates a fake textarea element, sets its value from `text` property,
+ * and makes a selection on it.
+ */
+
+ }, {
+ key: 'selectFake',
+ value: function selectFake() {
+ var _this = this;
+
+ var isRTL = document.documentElement.getAttribute('dir') == 'rtl';
+
+ this.removeFake();
+
+ this.fakeHandlerCallback = function () {
+ return _this.removeFake();
+ };
+ this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;
+
+ this.fakeElem = document.createElement('textarea');
+ // Prevent zooming on iOS
+ this.fakeElem.style.fontSize = '12pt';
+ // Reset box model
+ this.fakeElem.style.border = '0';
+ this.fakeElem.style.padding = '0';
+ this.fakeElem.style.margin = '0';
+ // Move element out of screen horizontally
+ this.fakeElem.style.position = 'absolute';
+ this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';
+ // Move element to the same position vertically
+ var yPosition = window.pageYOffset || document.documentElement.scrollTop;
+ this.fakeElem.style.top = yPosition + 'px';
+
+ this.fakeElem.setAttribute('readonly', '');
+ this.fakeElem.value = this.text;
+
+ this.container.appendChild(this.fakeElem);
+
+ this.selectedText = select_default()(this.fakeElem);
+ this.copyText();
+ }
+
+ /**
+ * Only removes the fake element after another click event, that way
+ * a user can hit `Ctrl+C` to copy because selection still exists.
+ */
+
+ }, {
+ key: 'removeFake',
+ value: function removeFake() {
+ if (this.fakeHandler) {
+ this.container.removeEventListener('click', this.fakeHandlerCallback);
+ this.fakeHandler = null;
+ this.fakeHandlerCallback = null;
+ }
+
+ if (this.fakeElem) {
+ this.container.removeChild(this.fakeElem);
+ this.fakeElem = null;
+ }
+ }
+
+ /**
+ * Selects the content from element passed on `target` property.
+ */
+
+ }, {
+ key: 'selectTarget',
+ value: function selectTarget() {
+ this.selectedText = select_default()(this.target);
+ this.copyText();
+ }
+
+ /**
+ * Executes the copy operation based on the current selection.
+ */
+
+ }, {
+ key: 'copyText',
+ value: function copyText() {
+ var succeeded = void 0;
+
+ try {
+ succeeded = document.execCommand(this.action);
+ } catch (err) {
+ succeeded = false;
+ }
+
+ this.handleResult(succeeded);
+ }
+
+ /**
+ * Fires an event based on the copy operation result.
+ * @param {Boolean} succeeded
+ */
+
+ }, {
+ key: 'handleResult',
+ value: function handleResult(succeeded) {
+ this.emitter.emit(succeeded ? 'success' : 'error', {
+ action: this.action,
+ text: this.selectedText,
+ trigger: this.trigger,
+ clearSelection: this.clearSelection.bind(this)
+ });
+ }
+
+ /**
+ * Moves focus away from `target` and back to the trigger, removes current selection.
+ */
+
+ }, {
+ key: 'clearSelection',
+ value: function clearSelection() {
+ if (this.trigger) {
+ this.trigger.focus();
+ }
+ document.activeElement.blur();
+ window.getSelection().removeAllRanges();
+ }
+
+ /**
+ * Sets the `action` to be performed which can be either 'copy' or 'cut'.
+ * @param {String} action
+ */
+
+ }, {
+ key: 'destroy',
+
+
+ /**
+ * Destroy lifecycle.
+ */
+ value: function destroy() {
+ this.removeFake();
+ }
+ }, {
+ key: 'action',
+ set: function set() {
+ var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';
+
+ this._action = action;
+
+ if (this._action !== 'copy' && this._action !== 'cut') {
+ throw new Error('Invalid "action" value, use either "copy" or "cut"');
+ }
+ }
+
+ /**
+ * Gets the `action` property.
+ * @return {String}
+ */
+ ,
+ get: function get() {
+ return this._action;
+ }
+
+ /**
+ * Sets the `target` property using an element
+ * that will be have its content copied.
+ * @param {Element} target
+ */
+
+ }, {
+ key: 'target',
+ set: function set(target) {
+ if (target !== undefined) {
+ if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {
+ if (this.action === 'copy' && target.hasAttribute('disabled')) {
+ throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
+ }
+
+ if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {
+ throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
+ }
+
+ this._target = target;
+ } else {
+ throw new Error('Invalid "target" value, use a valid Element');
+ }
+ }
+ }
+
+ /**
+ * Gets the `target` property.
+ * @return {String|HTMLElement}
+ */
+ ,
+ get: function get() {
+ return this._target;
+ }
+ }]);
+
+ return ClipboardAction;
+}();
+
+/* harmony default export */ var clipboard_action = (clipboard_action_ClipboardAction);
+// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js
+var tiny_emitter = __webpack_require__(1);
+var tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);
+
+// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js
+var listen = __webpack_require__(2);
+var listen_default = /*#__PURE__*/__webpack_require__.n(listen);
+
+// CONCATENATED MODULE: ./src/clipboard.js
+var clipboard_typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var clipboard_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function clipboard_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+
+
+
+
+/**
+ * Base class which takes one or more elements, adds event listeners to them,
+ * and instantiates a new `ClipboardAction` on each click.
+ */
+
+var clipboard_Clipboard = function (_Emitter) {
+ _inherits(Clipboard, _Emitter);
+
+ /**
+ * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
+ * @param {Object} options
+ */
+ function Clipboard(trigger, options) {
+ clipboard_classCallCheck(this, Clipboard);
+
+ var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));
+
+ _this.resolveOptions(options);
+ _this.listenClick(trigger);
+ return _this;
+ }
+
+ /**
+ * Defines if attributes would be resolved using internal setter functions
+ * or custom functions that were passed in the constructor.
+ * @param {Object} options
+ */
+
+
+ clipboard_createClass(Clipboard, [{
+ key: 'resolveOptions',
+ value: function resolveOptions() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
+ this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
+ this.text = typeof options.text === 'function' ? options.text : this.defaultText;
+ this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;
+ }
+
+ /**
+ * Adds a click event listener to the passed trigger.
+ * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
+ */
+
+ }, {
+ key: 'listenClick',
+ value: function listenClick(trigger) {
+ var _this2 = this;
+
+ this.listener = listen_default()(trigger, 'click', function (e) {
+ return _this2.onClick(e);
+ });
+ }
+
+ /**
+ * Defines a new `ClipboardAction` on each click event.
+ * @param {Event} e
+ */
+
+ }, {
+ key: 'onClick',
+ value: function onClick(e) {
+ var trigger = e.delegateTarget || e.currentTarget;
+
+ if (this.clipboardAction) {
+ this.clipboardAction = null;
+ }
+
+ this.clipboardAction = new clipboard_action({
+ action: this.action(trigger),
+ target: this.target(trigger),
+ text: this.text(trigger),
+ container: this.container,
+ trigger: trigger,
+ emitter: this
+ });
+ }
+
+ /**
+ * Default `action` lookup function.
+ * @param {Element} trigger
+ */
+
+ }, {
+ key: 'defaultAction',
+ value: function defaultAction(trigger) {
+ return getAttributeValue('action', trigger);
+ }
+
+ /**
+ * Default `target` lookup function.
+ * @param {Element} trigger
+ */
+
+ }, {
+ key: 'defaultTarget',
+ value: function defaultTarget(trigger) {
+ var selector = getAttributeValue('target', trigger);
+
+ if (selector) {
+ return document.querySelector(selector);
+ }
+ }
+
+ /**
+ * Returns the support of the given action, or all actions if no action is
+ * given.
+ * @param {String} [action]
+ */
+
+ }, {
+ key: 'defaultText',
+
+
+ /**
+ * Default `text` lookup function.
+ * @param {Element} trigger
+ */
+ value: function defaultText(trigger) {
+ return getAttributeValue('text', trigger);
+ }
+
+ /**
+ * Destroy lifecycle.
+ */
+
+ }, {
+ key: 'destroy',
+ value: function destroy() {
+ this.listener.destroy();
+
+ if (this.clipboardAction) {
+ this.clipboardAction.destroy();
+ this.clipboardAction = null;
+ }
+ }
+ }], [{
+ key: 'isSupported',
+ value: function isSupported() {
+ var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];
+
+ var actions = typeof action === 'string' ? [action] : action;
+ var support = !!document.queryCommandSupported;
+
+ actions.forEach(function (action) {
+ support = support && !!document.queryCommandSupported(action);
+ });
+
+ return support;
+ }
+ }]);
+
+ return Clipboard;
+}(tiny_emitter_default.a);
+
+/**
+ * Helper function to retrieve attribute value.
+ * @param {String} suffix
+ * @param {Element} element
+ */
+
+
+function getAttributeValue(suffix, element) {
+ var attribute = 'data-clipboard-' + suffix;
+
+ if (!element.hasAttribute(attribute)) {
+ return;
+ }
+
+ return element.getAttribute(attribute);
+}
+
+/* harmony default export */ var clipboard = __webpack_exports__["default"] = (clipboard_Clipboard);
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/plugin/dayjs/dayjs.min.js b/plugin/dayjs/dayjs.min.js
new file mode 100644
index 0000000..47ebdde
--- /dev/null
+++ b/plugin/dayjs/dayjs.min.js
@@ -0,0 +1 @@
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.dayjs=e()}(this,function(){"use strict";var t="millisecond",e="second",n="minute",r="hour",i="day",s="week",u="month",o="quarter",a="year",h=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},d={s:c,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:"date",h:r,m:n,s:e,ms:t,Q:o}[h]||String(h||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},$={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},l="en",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,e,n){var r;if(!t)return l;if("string"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i}return!n&&r&&(l=r),r||!n&&l},g=function(t,e){if(y(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new v(n)},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(e)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!("Invalid Date"===this.$d.toString())},d.isSame=function(t,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e)},d.isAfter=function(t,e){return g(t)
+// +----------------------------------------------------------------------
+function getLocalFilePath(path) {
+ if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
+ return path
+ }
+ if (path.indexOf('file://') === 0) {
+ return path
+ }
+ if (path.indexOf('/storage/emulated/0/') === 0) {
+ return path
+ }
+ if (path.indexOf('/') === 0) {
+ var localFilePath = plus.io.convertAbsoluteFileSystem(path)
+ if (localFilePath !== path) {
+ return localFilePath
+ } else {
+ path = path.substr(1)
+ }
+ }
+ return '_www/' + path
+}
+
+export function pathToBase64(path) {
+ return new Promise(function(resolve, reject) {
+ if (typeof window === 'object' && 'document' in window) {
+ if (typeof FileReader === 'function') {
+ var xhr = new XMLHttpRequest()
+ xhr.open('GET', path, true)
+ xhr.responseType = 'blob'
+ xhr.onload = function() {
+ if (this.status === 200) {
+ let fileReader = new FileReader()
+ fileReader.onload = function(e) {
+ resolve(e.target.result)
+ }
+ fileReader.onerror = reject
+ fileReader.readAsDataURL(this.response)
+ }
+ }
+ xhr.onerror = reject
+ xhr.send()
+ return
+ }
+ var canvas = document.createElement('canvas')
+ var c2x = canvas.getContext('2d')
+ var img = new Image
+ img.onload = function() {
+ canvas.width = img.width
+ canvas.height = img.height
+ c2x.drawImage(img, 0, 0)
+ resolve(canvas.toDataURL())
+ canvas.height = canvas.width = 0
+ }
+ img.onerror = reject
+ img.src = path
+ return
+ }
+ if (typeof plus === 'object') {
+ plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
+ entry.file(function(file) {
+ var fileReader = new plus.io.FileReader()
+ fileReader.onload = function(data) {
+ resolve(data.target.result)
+ }
+ fileReader.onerror = function(error) {
+ reject(error)
+ }
+ fileReader.readAsDataURL(file)
+ }, function(error) {
+ reject(error)
+ })
+ }, function(error) {
+ reject(error)
+ })
+ return
+ }
+ if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+ wx.getFileSystemManager().readFile({
+ filePath: path,
+ encoding: 'base64',
+ success: function(res) {
+ resolve('data:image/png;base64,' + res.data)
+ },
+ fail: function(error) {
+ reject(error)
+ }
+ })
+ return
+ }
+ reject(new Error('not support'))
+ })
+}
+
+export function base64ToPath(base64) {
+ return new Promise(function(resolve, reject) {
+ if (typeof window === 'object' && 'document' in window) {
+ base64 = base64.split(',')
+ var type = base64[0].match(/:(.*?);/)[1]
+ var str = atob(base64[1])
+ var n = str.length
+ var array = new Uint8Array(n)
+ while (n--) {
+ array[n] = str.charCodeAt(n)
+ }
+ return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
+ }
+ var extName = base64.match(/data\:\S+\/(\S+);/)
+ if (extName) {
+ extName = extName[1]
+ } else {
+ reject(new Error('base64 error'))
+ }
+ var fileName = Date.now() + '.' + extName
+ if (typeof plus === 'object') {
+ var bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
+ bitmap.loadBase64Data(base64, function() {
+ var filePath = '_doc/uniapp_temp/' + fileName
+ bitmap.save(filePath, {}, function() {
+ bitmap.clear()
+ resolve(filePath)
+ }, function(error) {
+ bitmap.clear()
+ reject(error)
+ })
+ }, function(error) {
+ bitmap.clear()
+ reject(error)
+ })
+ return
+ }
+ if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+ var filePath = wx.env.USER_DATA_PATH + '/' + fileName
+ wx.getFileSystemManager().writeFile({
+ filePath: filePath,
+ data: base64.replace(/^data:\S+\/\S+;base64,/, ''),
+ encoding: 'base64',
+ success: function() {
+ resolve(filePath)
+ },
+ fail: function(error) {
+ reject(error)
+ }
+ })
+ return
+ }
+ reject(new Error('not support'))
+ })
+}
\ No newline at end of file
diff --git a/plugin/jweixin-module/index.js b/plugin/jweixin-module/index.js
new file mode 100644
index 0000000..1b5014b
--- /dev/null
+++ b/plugin/jweixin-module/index.js
@@ -0,0 +1 @@
+!function(e,n){"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)}(window,function(o,e){if(!o.jWeixin){var n,c={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},a=function(){var e={};for(var n in c)e[c[n]]=n;return e}(),i=o.document,t=i.title,r=navigator.userAgent.toLowerCase(),s=navigator.platform.toLowerCase(),d=!(!s.match("mac")&&!s.match("win")),u=-1!=r.indexOf("wxdebugger"),l=-1!=r.indexOf("micromessenger"),p=-1!=r.indexOf("android"),f=-1!=r.indexOf("iphone")||-1!=r.indexOf("ipad"),m=(n=r.match(/micromessenger\/(\d+\.\d+\.\d+)/)||r.match(/micromessenger\/(\d+\.\d+)/))?n[1]:"",g={initStartTime:L(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},h={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:f?1:p?2:-1,clientVersion:m,url:encodeURIComponent(location.href)},v={},S={_completes:[]},y={state:0,data:{}};O(function(){g.initEndTime=L()});var I=!1,_=[],w={config:function(e){B("config",v=e);var t=!1!==v.check;O(function(){if(t)M(c.config,{verifyJsApiList:C(v.jsApiList),verifyOpenTagList:C(v.openTagList)},function(){S._complete=function(e){g.preVerifyEndTime=L(),y.state=1,y.data=e},S.success=function(e){h.isPreVerifyOk=0},S.fail=function(e){S._fail?S._fail(e):y.state=-1};var t=S._completes;return t.push(function(){!function(){if(!(d||u||v.debug||m<"6.0.2"||h.systemType<0)){var i=new Image;h.appId=v.appId,h.initTime=g.initEndTime-g.initStartTime,h.preVerifyTime=g.preVerifyEndTime-g.preVerifyStartTime,w.getNetworkType({isInnerInvoke:!0,success:function(e){h.networkType=e.networkType;var n="https://open.weixin.qq.com/sdk/report?v="+h.version+"&o="+h.isPreVerifyOk+"&s="+h.systemType+"&c="+h.clientVersion+"&a="+h.appId+"&n="+h.networkType+"&i="+h.initTime+"&p="+h.preVerifyTime+"&u="+h.url;i.src=n}})}}()}),S.complete=function(e){for(var n=0,i=t.length;n=0;)t[e]=0}var a=256,n=286,i=30,r=15,s=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),o=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),l=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),h=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),d=new Array(576);e(d);var _=new Array(60);e(_);var f=new Array(512);e(f);var u=new Array(256);e(u);var c=new Array(29);e(c);var w,m,b,g=new Array(i);function p(t,e,a,n,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=n,this.max_length=i,this.has_stree=t&&t.length}function v(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}e(g);var k=function(t){return t<256?f[t]:f[256+(t>>>7)]},y=function(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},x=function(t,e,a){t.bi_valid>16-a?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<>>=1,a<<=1}while(--e>0);return a>>>1},E=function(t,e,a){var n,i,s=new Array(16),o=0;for(n=1;n<=r;n++)o=o+a[n-1]<<1,s[n]=o;for(i=0;i<=e;i++){var l=t[2*i+1];0!==l&&(t[2*i]=A(s[l]++,l))}},R=function(t){var e;for(e=0;e8?y(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},S=function(t,e,a,n){var i=2*e,r=2*a;return t[i]>1;a>=1;a--)U(t,s,a);i=h;do{a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],U(t,s,1),n=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=n,s[2*i]=s[2*a]+s[2*n],t.depth[i]=(t.depth[a]>=t.depth[n]?t.depth[a]:t.depth[n])+1,s[2*a+1]=s[2*n+1]=i,t.heap[1]=i++,U(t,s,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(t,e){var a,n,i,s,o,l,h=e.dyn_tree,d=e.max_code,_=e.stat_desc.static_tree,f=e.stat_desc.has_stree,u=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,w=e.stat_desc.max_length,m=0;for(s=0;s<=r;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;a<573;a++)(s=h[2*h[2*(n=t.heap[a])+1]+1]+1)>w&&(s=w,m++),h[2*n+1]=s,n>d||(t.bl_count[s]++,o=0,n>=c&&(o=u[n-c]),l=h[2*n],t.opt_len+=l*(s+o),f&&(t.static_len+=l*(_[2*n+1]+o)));if(0!==m){do{for(s=w-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[w]--,m-=2}while(m>0);for(s=w;0!==s;s--)for(n=t.bl_count[s];0!==n;)(i=t.heap[--a])>d||(h[2*i+1]!==s&&(t.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(t,e),E(s,d,t.bl_count)},O=function(t,e,a){var n,i,r=-1,s=e[1],o=0,l=7,h=4;for(0===s&&(l=138,h=3),e[2*(a+1)+1]=65535,n=0;n<=a;n++)i=s,s=e[2*(n+1)+1],++o0?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,n=4093624447;for(e=0;e<=31;e++,n>>>=1)if(1&n&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e=3&&0===t.bl_tree[2*h[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),r=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=r&&(r=s)):r=s=n+5,n+4<=r&&-1!==e?L(t,e,n,i):4===t.strategy||s===r?(x(t,2+(i?1:0),3),D(t,d,_)):(x(t,4+(i?1:0),3),function(t,e,a,n){var i;for(x(t,e-257,5),x(t,a-1,5),x(t,n-4,4),i=0;i>=7;h>8,t.pending_buf[t.sym_buf+t.sym_next++]=n,0===e?t.dyn_ltree[2*n]++:(t.matches++,e--,t.dyn_ltree[2*(u[n]+a+1)]++,t.dyn_dtree[2*k(e)]++),t.sym_next===t.sym_end},_tr_align:function(t){x(t,2,3),z(t,256,d),function(t){16===t.bi_valid?(y(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},C=function(t,e,a,n){for(var i=65535&t|0,r=t>>>16&65535|0,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{r=r+(i=i+e[n++]|0)|0}while(--s);i%=65521,r%=65521}return i|r<<16|0},M=new Uint32Array(function(){for(var t,e=[],a=0;a<256;a++){t=a;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}()),H=function(t,e,a,n){var i=M,r=n+a;t^=-1;for(var s=n;s>>8^i[255&(t^e[s])];return-1^t},j={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},K={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},P=B._tr_init,Y=B._tr_stored_block,G=B._tr_flush_block,X=B._tr_tally,W=B._tr_align,q=K.Z_NO_FLUSH,J=K.Z_PARTIAL_FLUSH,Q=K.Z_FULL_FLUSH,V=K.Z_FINISH,$=K.Z_BLOCK,tt=K.Z_OK,et=K.Z_STREAM_END,at=K.Z_STREAM_ERROR,nt=K.Z_DATA_ERROR,it=K.Z_BUF_ERROR,rt=K.Z_DEFAULT_COMPRESSION,st=K.Z_FILTERED,ot=K.Z_HUFFMAN_ONLY,lt=K.Z_RLE,ht=K.Z_FIXED,dt=K.Z_DEFAULT_STRATEGY,_t=K.Z_UNKNOWN,ft=K.Z_DEFLATED,ut=258,ct=262,wt=42,mt=113,bt=666,gt=function(t,e){return t.msg=j[e],e},pt=function(t){return 2*t-(t>4?9:0)},vt=function(t){for(var e=t.length;--e>=0;)t[e]=0},kt=function(t){var e,a,n,i=t.w_size;n=e=t.hash_size;do{a=t.head[--n],t.head[n]=a>=i?a-i:0}while(--e);n=e=i;do{a=t.prev[--n],t.prev[n]=a>=i?a-i:0}while(--e)},yt=function(t,e,a){return(e<t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},zt=function(t,e){G(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,xt(t.strm)},At=function(t,e){t.pending_buf[t.pending++]=e},Et=function(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Rt=function(t,e,a,n){var i=t.avail_in;return i>n&&(i=n),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=C(t.adler,e,i,a):2===t.state.wrap&&(t.adler=H(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},Zt=function(t,e){var a,n,i=t.max_chain_length,r=t.strstart,s=t.prev_length,o=t.nice_match,l=t.strstart>t.w_size-ct?t.strstart-(t.w_size-ct):0,h=t.window,d=t.w_mask,_=t.prev,f=t.strstart+ut,u=h[r+s-1],c=h[r+s];t.prev_length>=t.good_match&&(i>>=2),o>t.lookahead&&(o=t.lookahead);do{if(h[(a=e)+s]===c&&h[a+s-1]===u&&h[a]===h[r]&&h[++a]===h[r+1]){r+=2,a++;do{}while(h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&rs){if(t.match_start=e,s=n,n>=o)break;u=h[r+s-1],c=h[r+s]}}}while((e=_[e&d])>l&&0!=--i);return s<=t.lookahead?s:t.lookahead},St=function(t){var e,a,n,i=t.w_size;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=i+(i-ct)&&(t.window.set(t.window.subarray(i,i+i-a),0),t.match_start-=i,t.strstart-=i,t.block_start-=i,t.insert>t.strstart&&(t.insert=t.strstart),kt(t),a+=i),0===t.strm.avail_in)break;if(e=Rt(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=e,t.lookahead+t.insert>=3)for(n=t.strstart-t.insert,t.ins_h=t.window[n],t.ins_h=yt(t,t.ins_h,t.window[n+1]);t.insert&&(t.ins_h=yt(t,t.ins_h,t.window[n+3-1]),t.prev[n&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=n,n++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookaheadt.w_size?t.w_size:t.pending_buf_size-5,s=0,o=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out(n=t.strstart-t.block_start)+t.strm.avail_in&&(a=n+t.strm.avail_in),a>i&&(a=i),a>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,xt(t.strm),n&&(n>a&&(n=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+n),t.strm.next_out),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n,t.block_start+=n,a-=n),a&&(Rt(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===s);return(o-=t.strm.avail_in)&&(o>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=o&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-o,t.strm.next_in),t.strstart),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.block_start=t.strstart),t.high_wateri&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(Rt(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water>3,r=(i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i)>t.w_size?t.w_size:i,((n=t.strstart-t.block_start)>=r||(n||e===V)&&e!==q&&0===t.strm.avail_in&&n<=i)&&(a=n>i?i:n,s=e===V&&0===t.strm.avail_in&&a===n?1:0,Y(t,t.block_start,a,s),t.block_start+=a,xt(t.strm)),s?3:1)},Dt=function(t,e){for(var a,n;;){if(t.lookahead=3&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-ct&&(t.match_length=Zt(t,a)),t.match_length>=3)if(n=X(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=yt(t,t.ins_h,t.window[t.strstart+1]);else n=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2},Tt=function(t,e){for(var a,n,i;;){if(t.lookahead=3&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,n=X(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,n&&(zt(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if((n=X(t,0,t.window[t.strstart-1]))&&zt(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=X(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2};function Ot(t,e,a,n,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=n,this.func=i}var It=[new Ot(0,0,0,0,Ut),new Ot(4,4,8,4,Dt),new Ot(4,5,16,8,Dt),new Ot(4,6,32,32,Dt),new Ot(4,4,16,16,Tt),new Ot(8,16,32,32,Tt),new Ot(8,16,128,128,Tt),new Ot(8,32,128,256,Tt),new Ot(32,128,258,1024,Tt),new Ot(32,258,258,4096,Tt)];function Ft(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ft,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),vt(this.dyn_ltree),vt(this.dyn_dtree),vt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),vt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),vt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var Lt=function(t){if(!t)return 1;var e=t.state;return!e||e.strm!==t||e.status!==wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==mt&&e.status!==bt?1:0},Nt=function(t){if(Lt(t))return gt(t,at);t.total_in=t.total_out=0,t.data_type=_t;var e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?wt:mt,t.adler=2===e.wrap?0:1,e.last_flush=-2,P(e),tt},Bt=function(t){var e,a=Nt(t);return a===tt&&((e=t.state).window_size=2*e.w_size,vt(e.head),e.max_lazy_match=It[e.level].max_lazy,e.good_match=It[e.level].good_length,e.nice_match=It[e.level].nice_length,e.max_chain_length=It[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0),a},Ct=function(t,e,a,n,i,r){if(!t)return at;var s=1;if(e===rt&&(e=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),i<1||i>9||a!==ft||n<8||n>15||e<0||e>9||r<0||r>ht||8===n&&1!==s)return gt(t,at);8===n&&(n=9);var o=new Ft;return t.state=o,o.strm=t,o.status=wt,o.wrap=s,o.gzhead=null,o.w_bits=n,o.w_size=1<$||e<0)return t?gt(t,at):at;var a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===bt&&e!==V)return gt(t,0===t.avail_out?it:at);var n=a.last_flush;if(a.last_flush=e,0!==a.pending){if(xt(t),0===t.avail_out)return a.last_flush=-1,tt}else if(0===t.avail_in&&pt(e)<=pt(n)&&e!==V)return gt(t,it);if(a.status===bt&&0!==t.avail_in)return gt(t,it);if(a.status===wt&&0===a.wrap&&(a.status=mt),a.status===wt){var i=ft+(a.w_bits-8<<4)<<8;if(i|=(a.strategy>=ot||a.level<2?0:a.level<6?1:6===a.level?2:3)<<6,0!==a.strstart&&(i|=32),Et(a,i+=31-i%31),0!==a.strstart&&(Et(a,t.adler>>>16),Et(a,65535&t.adler)),t.adler=1,a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt}if(57===a.status)if(t.adler=0,At(a,31),At(a,139),At(a,8),a.gzhead)At(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),At(a,255&a.gzhead.time),At(a,a.gzhead.time>>8&255),At(a,a.gzhead.time>>16&255),At(a,a.gzhead.time>>24&255),At(a,9===a.level?2:a.strategy>=ot||a.level<2?4:0),At(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(At(a,255&a.gzhead.extra.length),At(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=H(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(At(a,0),At(a,0),At(a,0),At(a,0),At(a,0),At(a,9===a.level?2:a.strategy>=ot||a.level<2?4:0),At(a,3),a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt;if(69===a.status){if(a.gzhead.extra){for(var r=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;a.pending+s>a.pending_buf_size;){var o=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+o),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>r&&(t.adler=H(t.adler,a.pending_buf,a.pending-r,r)),a.gzindex+=o,xt(t),0!==a.pending)return a.last_flush=-1,tt;r=0,s-=o}var l=new Uint8Array(a.gzhead.extra);a.pending_buf.set(l.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>r&&(t.adler=H(t.adler,a.pending_buf,a.pending-r,r)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){var h,d=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>d&&(t.adler=H(t.adler,a.pending_buf,a.pending-d,d)),xt(t),0!==a.pending)return a.last_flush=-1,tt;d=0}h=a.gzindexd&&(t.adler=H(t.adler,a.pending_buf,a.pending-d,d)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){var _,f=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>f&&(t.adler=H(t.adler,a.pending_buf,a.pending-f,f)),xt(t),0!==a.pending)return a.last_flush=-1,tt;f=0}_=a.gzindexf&&(t.adler=H(t.adler,a.pending_buf,a.pending-f,f))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(xt(t),0!==a.pending))return a.last_flush=-1,tt;At(a,255&t.adler),At(a,t.adler>>8&255),t.adler=0}if(a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt}if(0!==t.avail_in||0!==a.lookahead||e!==q&&a.status!==bt){var u=0===a.level?Ut(a,e):a.strategy===ot?function(t,e){for(var a;;){if(0===t.lookahead&&(St(t),0===t.lookahead)){if(e===q)return 1;break}if(t.match_length=0,a=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2}(a,e):a.strategy===lt?function(t,e){for(var a,n,i,r,s=t.window;;){if(t.lookahead<=ut){if(St(t),t.lookahead<=ut&&e===q)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=s[i=t.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){r=t.strstart+ut;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&it.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=X(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2}(a,e):It[a.level].func(a,e);if(3!==u&&4!==u||(a.status=bt),1===u||3===u)return 0===t.avail_out&&(a.last_flush=-1),tt;if(2===u&&(e===J?W(a):e!==$&&(Y(a,0,0,!1),e===Q&&(vt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),xt(t),0===t.avail_out))return a.last_flush=-1,tt}return e!==V?tt:a.wrap<=0?et:(2===a.wrap?(At(a,255&t.adler),At(a,t.adler>>8&255),At(a,t.adler>>16&255),At(a,t.adler>>24&255),At(a,255&t.total_in),At(a,t.total_in>>8&255),At(a,t.total_in>>16&255),At(a,t.total_in>>24&255)):(Et(a,t.adler>>>16),Et(a,65535&t.adler)),xt(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?tt:et)},deflateEnd:function(t){if(Lt(t))return at;var e=t.state.status;return t.state=null,e===mt?gt(t,nt):tt},deflateSetDictionary:function(t,e){var a=e.length;if(Lt(t))return at;var n=t.state,i=n.wrap;if(2===i||1===i&&n.status!==wt||n.lookahead)return at;if(1===i&&(t.adler=C(t.adler,e,a,0)),n.wrap=0,a>=n.w_size){0===i&&(vt(n.head),n.strstart=0,n.block_start=0,n.insert=0);var r=new Uint8Array(n.w_size);r.set(e.subarray(a-n.w_size,a),0),e=r,a=n.w_size}var s=t.avail_in,o=t.next_in,l=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,St(n);n.lookahead>=3;){var h=n.strstart,d=n.lookahead-2;do{n.ins_h=yt(n,n.ins_h,n.window[h+3-1]),n.prev[h&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=h,h++}while(--d);n.strstart=h,n.lookahead=2,St(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,t.next_in=o,t.input=l,t.avail_in=s,n.wrap=i,tt},deflateInfo:"pako deflate (from Nodeca project)"};function Ht(t){return Ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ht(t)}var jt=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},Kt=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var a=e.shift();if(a){if("object"!==Ht(a))throw new TypeError(a+"must be non-object");for(var n in a)jt(a,n)&&(t[n]=a[n])}}return t},Pt=function(t){for(var e=0,a=0,n=t.length;a=252?6:Xt>=248?5:Xt>=240?4:Xt>=224?3:Xt>=192?2:1;Gt[254]=Gt[254]=1;var Wt=function(t){if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);var e,a,n,i,r,s=t.length,o=0;for(i=0;i>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e},qt=function(t,e){var a,n,i=e||t.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(t.subarray(0,e));var r=new Array(2*i);for(n=0,a=0;a4)r[n++]=65533,a+=o-1;else{for(s&=2===o?31:3===o?15:7;o>1&&a1?r[n++]=65533:s<65536?r[n++]=s:(s-=65536,r[n++]=55296|s>>10&1023,r[n++]=56320|1023&s)}}}return function(t,e){if(e<65534&&t.subarray&&Yt)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));for(var a="",n=0;nt.length&&(e=t.length);for(var a=e-1;a>=0&&128==(192&t[a]);)a--;return a<0||0===a?e:a+Gt[t[a]]>e?a:e};var Qt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0},Vt=Object.prototype.toString,$t=K.Z_NO_FLUSH,te=K.Z_SYNC_FLUSH,ee=K.Z_FULL_FLUSH,ae=K.Z_FINISH,ne=K.Z_OK,ie=K.Z_STREAM_END,re=K.Z_DEFAULT_COMPRESSION,se=K.Z_DEFAULT_STRATEGY,oe=K.Z_DEFLATED;function le(t){this.options=Kt({level:re,method:oe,chunkSize:16384,windowBits:15,memLevel:8,strategy:se},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Qt,this.strm.avail_out=0;var a=Mt.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==ne)throw new Error(j[a]);if(e.header&&Mt.deflateSetHeader(this.strm,e.header),e.dictionary){var n;if(n="string"==typeof e.dictionary?Wt(e.dictionary):"[object ArrayBuffer]"===Vt.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(a=Mt.deflateSetDictionary(this.strm,n))!==ne)throw new Error(j[a]);this._dict_set=!0}}function he(t,e){var a=new le(e);if(a.push(t,!0),a.err)throw a.msg||j[a.err];return a.result}le.prototype.push=function(t,e){var a,n,i=this.strm,r=this.options.chunkSize;if(this.ended)return!1;for(n=e===~~e?e:!0===e?ae:$t,"string"==typeof t?i.input=Wt(t):"[object ArrayBuffer]"===Vt.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(r),i.next_out=0,i.avail_out=r),(n===te||n===ee)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if((a=Mt.deflate(i,n))===ie)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),a=Mt.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===ne;if(0!==i.avail_out){if(n>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},le.prototype.onData=function(t){this.chunks.push(t)},le.prototype.onEnd=function(t){t===ne&&(this.result=Pt(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var de={Deflate:le,deflate:he,deflateRaw:function(t,e){return(e=e||{}).raw=!0,he(t,e)},gzip:function(t,e){return(e=e||{}).gzip=!0,he(t,e)},constants:K},_e=16209,fe=function(t,e){var a,n,i,r,s,o,l,h,d,_,f,u,c,w,m,b,g,p,v,k,y,x,z,A,E=t.state;a=t.next_in,z=t.input,n=a+(t.avail_in-5),i=t.next_out,A=t.output,r=i-(e-t.avail_out),s=i+(t.avail_out-257),o=E.dmax,l=E.wsize,h=E.whave,d=E.wnext,_=E.window,f=E.hold,u=E.bits,c=E.lencode,w=E.distcode,m=(1<>>=p=g>>>24,u-=p,0===(p=g>>>16&255))A[i++]=65535&g;else{if(!(16&p)){if(0==(64&p)){g=c[(65535&g)+(f&(1<>>=p,u-=p),u<15&&(f+=z[a++]<>>=p=g>>>24,u-=p,!(16&(p=g>>>16&255))){if(0==(64&p)){g=w[(65535&g)+(f&(1<
o){t.msg="invalid distance too far back",E.mode=_e;break t}if(f>>>=p,u-=p,k>(p=i-r)){if((p=k-p)>h&&E.sane){t.msg="invalid distance too far back",E.mode=_e;break t}if(y=0,x=_,0===d){if(y+=l-p,p2;)A[i++]=x[y++],A[i++]=x[y++],A[i++]=x[y++],v-=3;v&&(A[i++]=x[y++],v>1&&(A[i++]=x[y++]))}else{y=i-k;do{A[i++]=A[y++],A[i++]=A[y++],A[i++]=A[y++],v-=3}while(v>2);v&&(A[i++]=A[y++],v>1&&(A[i++]=A[y++]))}break}}break}}while(a>3,f&=(1<<(u-=v<<3))-1,t.next_in=a,t.next_out=i,t.avail_in=a=1&&0===S[k];k--);if(y>k&&(y=k),0===k)return i[r++]=20971520,i[r++]=20971520,o.bits=1,0;for(v=1;v0&&(0===t||1!==k))return-1;for(U[1]=0,g=1;g852||2===t&&E>592)return 1;for(;;){c=g-z,s[p]+1=u?(w=D[s[p]-u],m=Z[s[p]-u]):(w=96,m=0),l=1<>z)+(h-=l)]=c<<24|w<<16|m|0}while(0!==h);for(l=1<>=1;if(0!==l?(R&=l-1,R+=l):R=0,p++,0==--S[g]){if(g===k)break;g=e[a+s[p]]}if(g>y&&(R&_)!==d){for(0===z&&(z=y),f+=v,A=1<<(x=g-z);x+z852||2===t&&E>592)return 1;i[d=R&_]=y<<24|x<<16|f-r|0}}return 0!==R&&(i[f+R]=g-z<<24|64<<16|0),o.bits=y,0},pe=K.Z_FINISH,ve=K.Z_BLOCK,ke=K.Z_TREES,ye=K.Z_OK,xe=K.Z_STREAM_END,ze=K.Z_NEED_DICT,Ae=K.Z_STREAM_ERROR,Ee=K.Z_DATA_ERROR,Re=K.Z_MEM_ERROR,Ze=K.Z_BUF_ERROR,Se=K.Z_DEFLATED,Ue=16180,De=16190,Te=16191,Oe=16192,Ie=16194,Fe=16199,Le=16200,Ne=16206,Be=16209,Ce=function(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)};function Me(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var He,je,Ke=function(t){if(!t)return 1;var e=t.state;return!e||e.strm!==t||e.mode16211?1:0},Pe=function(t){if(Ke(t))return Ae;var e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=Ue,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,ye},Ye=function(t){if(Ke(t))return Ae;var e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,Pe(t)},Ge=function(t,e){var a;if(Ke(t))return Ae;var n=t.state;return e<0?(a=0,e=-e):(a=5+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?Ae:(null!==n.window&&n.wbits!==e&&(n.window=null),n.wrap=a,n.wbits=e,Ye(t))},Xe=function(t,e){if(!t)return Ae;var a=new Me;t.state=a,a.strm=t,a.window=null,a.mode=Ue;var n=Ge(t,e);return n!==ye&&(t.state=null),n},We=!0,qe=function(t){if(We){He=new Int32Array(512),je=new Int32Array(32);for(var e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ge(1,t.lens,0,288,He,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ge(2,t.lens,0,32,je,0,t.work,{bits:5}),We=!1}t.lencode=He,t.lenbits=9,t.distcode=je,t.distbits=5},Je=function(t,e,a,n){var i,r=t.state;return null===r.window&&(r.wsize=1<=r.wsize?(r.window.set(e.subarray(a-r.wsize,a),0),r.wnext=0,r.whave=r.wsize):((i=r.wsize-r.wnext)>n&&(i=n),r.window.set(e.subarray(a-n,a-n+i),r.wnext),(n-=i)?(r.window.set(e.subarray(a-n,a),0),r.wnext=n,r.whave=r.wsize):(r.wnext+=i,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,a.check=H(a.check,R,2,0),h=0,d=0,a.mode=16181;break}if(a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&h)<<8)+(h>>8))%31){t.msg="incorrect header check",a.mode=Be;break}if((15&h)!==Se){t.msg="unknown compression method",a.mode=Be;break}if(d-=4,y=8+(15&(h>>>=4)),0===a.wbits&&(a.wbits=y),y>15||y>a.wbits){t.msg="invalid window size",a.mode=Be;break}a.dmax=1<>8&1),512&a.flags&&4&a.wrap&&(R[0]=255&h,R[1]=h>>>8&255,a.check=H(a.check,R,2,0)),h=0,d=0,a.mode=16182;case 16182:for(;d<32;){if(0===o)break t;o--,h+=n[r++]<>>8&255,R[2]=h>>>16&255,R[3]=h>>>24&255,a.check=H(a.check,R,4,0)),h=0,d=0,a.mode=16183;case 16183:for(;d<16;){if(0===o)break t;o--,h+=n[r++]<>8),512&a.flags&&4&a.wrap&&(R[0]=255&h,R[1]=h>>>8&255,a.check=H(a.check,R,2,0)),h=0,d=0,a.mode=16184;case 16184:if(1024&a.flags){for(;d<16;){if(0===o)break t;o--,h+=n[r++]<>>8&255,a.check=H(a.check,R,2,0)),h=0,d=0}else a.head&&(a.head.extra=null);a.mode=16185;case 16185:if(1024&a.flags&&((u=a.length)>o&&(u=o),u&&(a.head&&(y=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Uint8Array(a.head.extra_len)),a.head.extra.set(n.subarray(r,r+u),y)),512&a.flags&&4&a.wrap&&(a.check=H(a.check,n,u,r)),o-=u,r+=u,a.length-=u),a.length))break t;a.length=0,a.mode=16186;case 16186:if(2048&a.flags){if(0===o)break t;u=0;do{y=n[r+u++],a.head&&y&&a.length<65536&&(a.head.name+=String.fromCharCode(y))}while(y&&u>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=Te;break;case 16189:for(;d<32;){if(0===o)break t;o--,h+=n[r++]<>>=7&d,d-=7&d,a.mode=Ne;break}for(;d<3;){if(0===o)break t;o--,h+=n[r++]<>>=1)){case 0:a.mode=16193;break;case 1:if(qe(a),a.mode=Fe,e===ke){h>>>=2,d-=2;break t}break;case 2:a.mode=16196;break;case 3:t.msg="invalid block type",a.mode=Be}h>>>=2,d-=2;break;case 16193:for(h>>>=7&d,d-=7&d;d<32;){if(0===o)break t;o--,h+=n[r++]<>>16^65535)){t.msg="invalid stored block lengths",a.mode=Be;break}if(a.length=65535&h,h=0,d=0,a.mode=Ie,e===ke)break t;case Ie:a.mode=16195;case 16195:if(u=a.length){if(u>o&&(u=o),u>l&&(u=l),0===u)break t;i.set(n.subarray(r,r+u),s),o-=u,r+=u,l-=u,s+=u,a.length-=u;break}a.mode=Te;break;case 16196:for(;d<14;){if(0===o)break t;o--,h+=n[r++]<>>=5,d-=5,a.ndist=1+(31&h),h>>>=5,d-=5,a.ncode=4+(15&h),h>>>=4,d-=4,a.nlen>286||a.ndist>30){t.msg="too many length or distance symbols",a.mode=Be;break}a.have=0,a.mode=16197;case 16197:for(;a.have>>=3,d-=3}for(;a.have<19;)a.lens[Z[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,z={bits:a.lenbits},x=ge(0,a.lens,0,19,a.lencode,0,a.work,z),a.lenbits=z.bits,x){t.msg="invalid code lengths set",a.mode=Be;break}a.have=0,a.mode=16198;case 16198:for(;a.have>>16&255,g=65535&E,!((m=E>>>24)<=d);){if(0===o)break t;o--,h+=n[r++]<>>=m,d-=m,a.lens[a.have++]=g;else{if(16===g){for(A=m+2;d>>=m,d-=m,0===a.have){t.msg="invalid bit length repeat",a.mode=Be;break}y=a.lens[a.have-1],u=3+(3&h),h>>>=2,d-=2}else if(17===g){for(A=m+3;d>>=m)),h>>>=3,d-=3}else{for(A=m+7;d>>=m)),h>>>=7,d-=7}if(a.have+u>a.nlen+a.ndist){t.msg="invalid bit length repeat",a.mode=Be;break}for(;u--;)a.lens[a.have++]=y}}if(a.mode===Be)break;if(0===a.lens[256]){t.msg="invalid code -- missing end-of-block",a.mode=Be;break}if(a.lenbits=9,z={bits:a.lenbits},x=ge(1,a.lens,0,a.nlen,a.lencode,0,a.work,z),a.lenbits=z.bits,x){t.msg="invalid literal/lengths set",a.mode=Be;break}if(a.distbits=6,a.distcode=a.distdyn,z={bits:a.distbits},x=ge(2,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,z),a.distbits=z.bits,x){t.msg="invalid distances set",a.mode=Be;break}if(a.mode=Fe,e===ke)break t;case Fe:a.mode=Le;case Le:if(o>=6&&l>=258){t.next_out=s,t.avail_out=l,t.next_in=r,t.avail_in=o,a.hold=h,a.bits=d,fe(t,f),s=t.next_out,i=t.output,l=t.avail_out,r=t.next_in,n=t.input,o=t.avail_in,h=a.hold,d=a.bits,a.mode===Te&&(a.back=-1);break}for(a.back=0;b=(E=a.lencode[h&(1<>>16&255,g=65535&E,!((m=E>>>24)<=d);){if(0===o)break t;o--,h+=n[r++]<>p)])>>>16&255,g=65535&E,!(p+(m=E>>>24)<=d);){if(0===o)break t;o--,h+=n[r++]<>>=p,d-=p,a.back+=p}if(h>>>=m,d-=m,a.back+=m,a.length=g,0===b){a.mode=16205;break}if(32&b){a.back=-1,a.mode=Te;break}if(64&b){t.msg="invalid literal/length code",a.mode=Be;break}a.extra=15&b,a.mode=16201;case 16201:if(a.extra){for(A=a.extra;d>>=a.extra,d-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=16202;case 16202:for(;b=(E=a.distcode[h&(1<>>16&255,g=65535&E,!((m=E>>>24)<=d);){if(0===o)break t;o--,h+=n[r++]<>p)])>>>16&255,g=65535&E,!(p+(m=E>>>24)<=d);){if(0===o)break t;o--,h+=n[r++]<>>=p,d-=p,a.back+=p}if(h>>>=m,d-=m,a.back+=m,64&b){t.msg="invalid distance code",a.mode=Be;break}a.offset=g,a.extra=15&b,a.mode=16203;case 16203:if(a.extra){for(A=a.extra;d>>=a.extra,d-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg="invalid distance too far back",a.mode=Be;break}a.mode=16204;case 16204:if(0===l)break t;if(u=f-l,a.offset>u){if((u=a.offset-u)>a.whave&&a.sane){t.msg="invalid distance too far back",a.mode=Be;break}u>a.wnext?(u-=a.wnext,c=a.wsize-u):c=a.wnext-u,u>a.length&&(u=a.length),w=a.window}else w=i,c=s-a.offset,u=a.length;u>l&&(u=l),l-=u,a.length-=u;do{i[s++]=w[c++]}while(--u);0===a.length&&(a.mode=Le);break;case 16205:if(0===l)break t;i[s++]=a.length,l--,a.mode=Le;break;case Ne:if(a.wrap){for(;d<32;){if(0===o)break t;o--,h|=n[r++]<=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Qt,this.strm.avail_out=0;var a=Qe.inflateInit2(this.strm,e.windowBits);if(a!==aa)throw new Error(j[a]);if(this.header=new Ve,Qe.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=Wt(e.dictionary):"[object ArrayBuffer]"===$e.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(a=Qe.inflateSetDictionary(this.strm,e.dictionary))!==aa))throw new Error(j[a])}function ha(t,e){var a=new la(e);if(a.push(t),a.err)throw a.msg||j[a.err];return a.result}la.prototype.push=function(t,e){var a,n,i,r=this.strm,s=this.options.chunkSize,o=this.options.dictionary;if(this.ended)return!1;for(n=e===~~e?e:!0===e?ea:ta,"[object ArrayBuffer]"===$e.call(t)?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){for(0===r.avail_out&&(r.output=new Uint8Array(s),r.next_out=0,r.avail_out=s),(a=Qe.inflate(r,n))===ia&&o&&((a=Qe.inflateSetDictionary(r,o))===aa?a=Qe.inflate(r,n):a===sa&&(a=ia));r.avail_in>0&&a===na&&r.state.wrap>0&&0!==t[r.next_in];)Qe.inflateReset(r),a=Qe.inflate(r,n);switch(a){case ra:case sa:case ia:case oa:return this.onEnd(a),this.ended=!0,!1}if(i=r.avail_out,r.next_out&&(0===r.avail_out||a===na))if("string"===this.options.to){var l=Jt(r.output,r.next_out),h=r.next_out-l,d=qt(r.output,l);r.next_out=h,r.avail_out=s-h,h&&r.output.set(r.output.subarray(l,l+h),0),this.onData(d)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(a!==aa||0!==i){if(a===na)return a=Qe.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(0===r.avail_in)break}}return!0},la.prototype.onData=function(t){this.chunks.push(t)},la.prototype.onEnd=function(t){t===aa&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Pt(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var da={Inflate:la,inflate:ha,inflateRaw:function(t,e){return(e=e||{}).raw=!0,ha(t,e)},ungzip:ha,constants:K},_a=de.Deflate,fa=de.deflate,ua=de.deflateRaw,ca=de.gzip,wa=da.Inflate,ma=da.inflate,ba=da.inflateRaw,ga=da.ungzip,pa=K,va={Deflate:_a,deflate:fa,deflateRaw:ua,gzip:ca,Inflate:wa,inflate:ma,inflateRaw:ba,ungzip:ga,constants:pa};t.Deflate=_a,t.Inflate=wa,t.constants=pa,t.default=va,t.deflate=fa,t.deflateRaw=ua,t.gzip=ca,t.inflate=ma,t.inflateRaw=ba,t.ungzip=ga,Object.defineProperty(t,"__esModule",{value:!0})}));
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..46816f3
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,58 @@
+{
+ "miniprogramRoot": "unpackage/dist/build/mp-weixin/",
+ "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "setting": {
+ "urlCheck": true,
+ "es6": true,
+ "enhance": false,
+ "postcss": true,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "newFeature": false,
+ "coverView": true,
+ "nodeModules": false,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "scopeDataCheck": false,
+ "uglifyFileName": false,
+ "checkInvalidKey": true,
+ "checkSiteMap": true,
+ "uploadWithSourceMap": true,
+ "compileHotReLoad": true,
+ "lazyloadPlaceholderEnable": false,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "useApiHostProcess": true,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "enableEngineNative": false,
+ "useIsolateContext": false,
+ "userConfirmedBundleSwitch": false,
+ "packNpmManually": false,
+ "packNpmRelationList": [],
+ "minifyWXSS": true,
+ "disableUseStrict": false,
+ "minifyWXML": true,
+ "showES6CompileOption": false,
+ "useCompilerPlugins": false
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.14.3",
+ "appid": "wx5fb1cc8edb3f8baa",
+ "projectname": "crmeb_merchant_h5",
+ "simulatorType": "wechat",
+ "simulatorPluginLibVersion": {},
+ "srcMiniprogramRoot": "unpackage/dist/build/mp-weixin/",
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ },
+ "condition": {}
+}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..a354b95
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,4 @@
+{
+ "libVersion": "2.24.2",
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html"
+}
\ No newline at end of file
diff --git a/sitemap.json b/sitemap.json
new file mode 100644
index 0000000..52f2d27
--- /dev/null
+++ b/sitemap.json
@@ -0,0 +1,6 @@
+{
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/static/css/base.css b/static/css/base.css
new file mode 100644
index 0000000..a8c8b94
--- /dev/null
+++ b/static/css/base.css
@@ -0,0 +1,212 @@
+@charset "UTF-8";
+* {scrollbar-color: #e5e5e5 #f7f7f9;scrollbar-width: thin;}
+html {margin: 0 auto;max-width: 1200px;}
+body {overflow-x: hidden;}
+.font-color,.font-color-red {color:#fc4141!important}
+.bg-color{background-color:#e93323!important}
+.icon-color{color: #ff3c2b}
+.cart-color {color: #ff3700 !important;border:1px solid #ff3700 !important}
+.padding20{padding: 20rpx}
+.pad20 {padding: 0 20rpx}
+.padding30{padding: 30rpx}
+.pad30{padding: 0 30rpx}
+.pull-left{float: left;}
+.pull-right{float: right;}
+.clearfix:after{content:'';display:block;height:0;clear:both}
+.clearfix{zoom:1}
+.acea-row {display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-lines: multiple;
+ -moz-box-lines:multiple;-o-box-lines:multiple;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}
+.acea-row.row-middle {
+ -webkit-box-align: center;
+ -moz-box-align: center;
+ -o-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center
+}
+.acea-row.row-top {
+ -webkit-box-align: start;
+ -moz-box-align: start;
+ -o-box-align: start;
+ -ms-flex-align: start;
+ -webkit-align-items: flex-start;
+ align-items: flex-start
+}
+.acea-row.row-bottom {
+ -webkit-box-align: end;
+ -moz-box-align: end;
+ -o-box-align: end;
+ -ms-flex-align: end;
+ -webkit-align-items: flex-end;
+ align-items: flex-end
+}
+.acea-row.row-center {
+ -webkit-box-pack: center;
+ -moz-box-pack: center;
+ -o-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center
+}
+.acea-row.row-right {
+ -webkit-box-pack: end;
+ -moz-box-pack: end;
+ -o-box-pack: end;
+ -ms-flex-pack: end;
+ -webkit-justify-content: flex-end;
+ justify-content: flex-end
+}
+.acea-row.row-left {
+ -webkit-box-pack: start;
+ -moz-box-pack: start;
+ -o-box-pack: start;
+ -ms-flex-pack: start;
+ -webkit-justify-content: flex-start;
+ justify-content: flex-start
+}
+.acea-row.row-between {
+ -webkit-box-pack: justify;
+ -moz-box-pack: justify;
+ -o-box-pack: justify;
+ -ms-flex-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between
+}
+.acea-row.row-around {
+ justify-content: space-around;
+ -webkit-justify-content: space-around
+}
+.acea-row.row-column-around {
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ justify-content: space-around;
+ -webkit-justify-content: space-around
+}
+.acea-row.row-column {
+ -webkit-box-orient: vertical;
+ -moz-box-orient: vertical;
+ -o-box-orient: vertical;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column
+}
+.acea-row.row-column-between {
+ -webkit-box-orient: vertical;
+ -moz-box-orient: vertical;
+ -o-box-orient: vertical;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: justify;
+ -moz-box-pack: justify;
+ -o-box-pack: justify;
+ -ms-flex-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between
+}
+.acea-row.row-center-wrapper {
+ -webkit-box-align: center;
+ -moz-box-align: center;
+ -o-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -moz-box-pack: center;
+ -o-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center
+}
+.acea-row.row-between-wrapper {
+ -webkit-box-align: center;
+ -moz-box-align: center;
+ -o-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -moz-box-pack: justify;
+ -o-box-pack: justify;
+ -ms-flex-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between
+}
+.start {
+ width: 122rpx;
+ height: 30rpx;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHoAAADMCAYAAAC8yreMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMDg0NEE2QTVFNUQxMUU4QUI3RkNGOTgwNDYyRUZDOCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozODU5QzVENDMwRjcxMUU5OTQ0QzlEOTQ5RkE1MTlBRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozODU5QzVEMzMwRjcxMUU5OTQ0QzlEOTQ5RkE1MTlBRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkN2ZhZTM5NC0wNmE4LTkzNGYtODA0OS0zNjBjNTcxOTU2YjAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmYWI1M2NhMC04MWE1LTE5NGItYmJlYi1jMzI2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');
+ background-repeat: no-repeat;
+ background-size: 122rpx auto;
+}
+.start.star5{background-position:0 3rpx;}
+.start.star4{background-position:0 -30rpx;}
+.start.star3{background-position:0 -70rpx;}
+.start.star2{background-position:0 -105rpx;}
+.start.star1{background-position:0 -140rpx;}
+.start.star0{background-position:0 -175rpx;}
+*,view{box-sizing:border-box;}
+
+page{font-size: 28rpx;background-color:#f5f5f5;color: #333}
+body,html{height:unset}
+button{padding:0;margin:0;line-height:normal;background-color:#fff}
+button::after {border:0}
+radio .wx-radio-input {border-radius:50%;width:38rpx;height:38rpx}
+/* radio .wx-radio-input.wx-radio-input-checked{border:1px solid #e93323;background-color:#e93323;} */
+radio .uni-radio-input{border-radius:50%;width:38rpx;height:38rpx}
+radio .uni-radio-input.uni-radio-input-checked{border: 1px solid #e93323;background-color: #e93323;}
+checkbox .wx-checkbox-input{width:38rpx;height:38rpx}
+checkbox .wx-checkbox-input.wx-checkbox-input-checked::before{color: #fff!important;}
+checkbox .uni-checkbox-input{width: 38rpx;height: 38rpx}
+checkbox .uni-checkbox-input.uni-checkbox-input-checked,
+checkbox .wx-checkbox-input.wx-checkbox-input-checked{border:1px solid #e93323!important;background-color:#e93323!important;color:#fff!important;}
+checkbox .uni-checkbox-input.uni-checkbox-input-checked::before{font-size: 35rpx}
+.line1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
+.line2{word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;white-space:pre-wrap;}
+.mask{position:fixed;top: 0;left:0;right:0;bottom:0;background-color:#000;opacity:.5;z-index:30}
+@keyframes load {
+ from {
+ transform: rotate(0)
+ }
+ to {
+ transform: rotate(360deg)
+ }
+}
+@-webkit-keyframes load {
+ from {
+ transform: rotate(0)
+ }
+ to {
+ transform: rotate(360deg)
+ }
+}
+.loadingpic{animation:load 3s linear 1s infinite;--webkit-animation:load 3s linear 1s infinite}
+.loading-list{animation:load linear 1s infinite;-webkit-animation:load linear 1s infinite;font-size:40rpx;margin-right:22rpx}
+.loading{width:100%;height:100rpx;line-height:100rpx;align-items:center;justify-content:center;position:relative;text-align:center}
+.loading .line {
+ position: absolute;
+ width: 450rpx;
+ left: 150rpx;
+ top: 50rpx;
+ height: 1px;
+ border-top: 1px solid #eee
+}
+.loading .text {
+ position: relative;
+ display: inline-block;
+ padding: 0 20rpx;
+ background: #fff;
+ z-index: 2;
+ color: #777
+}
+.loadingicon .loading {
+ animation: load linear 1s infinite;
+ font-size: 45rpx;
+ color: #000
+}
+.loadingicon {
+ width: 100%;
+ height: 80rpx;
+ overflow: hidden
+}
\ No newline at end of file
diff --git a/static/css/style.scss b/static/css/style.scss
new file mode 100644
index 0000000..349ba53
--- /dev/null
+++ b/static/css/style.scss
@@ -0,0 +1,881 @@
+.font-bg-red,.font_bg-red{
+ display: inline-block;
+ align-items: center;
+ background: #E93424;
+ color: #fff;
+ font-size: 20rpx;
+ text-align: center;
+ border-radius: 5rpx;
+ padding: 0 4rpx;
+ line-height: 28rpx;
+ margin-right: 8rpx;
+}
+.type2{
+ background-color: #FD6523;
+}
+.bg {
+ font-size: 24rpx;
+ line-height: 31rpx;
+}
+.ml8 {
+ margin-left: 8rpx;
+}
+.product-con .conter img {
+ width: 750rpx!important;
+ height: unset!important
+}
+.product-con .wrapper {
+ background-color: #fff;
+ margin-bottom: 20rpx;
+ padding-bottom: 20rpx;
+}
+.product-con .nav {
+ background-image: url('data:image/png;base64,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');
+ background-color: var(--view-theme);
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+ width: 100%;
+ height: 100rpx;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+}
+.product-con .nav .money {
+ font-size: 28rpx;
+ color: #fff;
+}
+.product-con .nav .money .num {
+ font-size: 48rpx;
+}
+.product-con .nav .money .y-money {
+ font-size: 26rpx;
+ margin-left: 10rpx;
+ text-decoration: line-through;
+}
+.product-con .wrapper .share {
+ margin: 0 30rpx;
+ padding-top: 25rpx
+}
+.product-con .wrapper .share .money {
+ font-size: 28rpx;
+ font-weight: 700
+}
+.product-con .wrapper .share .money .num {
+ font-size: 48rpx
+}
+.product-con .wrapper .share .money image {
+ width: 65rpx;
+ height: 28rpx;
+ margin-left: 7rpx;
+ position: relative;
+ top: 5rpx;
+}
+.product-con .wrapper .share .money .vip-money{
+ color: #282828;
+ margin-left: 13rpx
+}
+.atmosphere .vip-money{
+ color: #fff;
+ margin-left: 13rpx
+}
+.product-con .wrapper .share .money .vip-image,.atmosphere .vip-image{
+ width: 70rpx;
+ height: 30rpx;
+ margin-left: 6rpx;
+ position: relative;
+ top: 4rpx;
+}
+.product-con .wrapper .share .fenxiang_btn{
+ text-align: center;
+ color: #666666;
+ font-size: 18rpx;
+}
+.product-con .wrapper .share .iconfont {
+ color: #515151;
+ font-size: 40rpx;
+ margin-bottom: 10rpx
+}
+.product-con .wrapper .introduce {
+ font-size: 32rpx;
+ font-weight: 700;
+}
+.product-con .wrapper .introduce {
+ align-items: center;
+ position: relative;
+ padding-right: 50rpx;
+ margin-bottom: 30rpx;
+}
+.product-con .wrapper .introduce .fenxiang_btn {
+ text-align: center;
+ font-size: 14rpx;
+ color: #666;
+ font-weight: normal;
+ position: absolute;
+ top: -4rpx;
+ right: 0;
+}
+.product-con .wrapper .introduce .infor {
+ width: 570rpx;
+}
+.product-con .wrapper .introduce .iconfont {
+ font-size: 37rpx;
+ color: #515151;
+}
+.product-con .wrapper .label {
+ margin: 0 30rpx;
+ font-size: 24rpx;
+ color: #82848f;
+ margin-top: 22rpx
+}
+.product-con .wrapper .label .rank_list {
+ width: 100%;
+ background: #F1F1F1;
+ border-radius: 10rpx;
+ height: 56rpx;
+ line-height: 56rpx;
+ padding: 0 10rpx;
+ justify-content: space-between;
+ font-size: 22rpx;
+ color: #282828;
+}
+.product-con .wrapper .rank_list .rank_title {
+ width: 108rpx;
+ height: 36rpx;
+ background-image: url('data:image/png;base64,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');
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+ margin-right: 10rpx;
+}
+.product-con .wrapper .rank_list .iconfont {
+ width: 24rpx;
+ height: 24rpx;
+ border-radius: 24rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 12rpx;
+ color: #fff;
+ transform: rotateZ(90deg);
+ background: #666666;
+}
+.product-con .wrapper .coupon {
+ padding: 0 30rpx;
+ border-top: 1px solid #f5f5f5;
+ margin-top: 25rpx;
+ height: 80rpx;
+ font-size: 26rpx;
+ color: #82848f
+}
+.product-con .wrapper .coupon .hide {
+ width: 650rpx;
+ height: 80rpx;
+ line-height: 80rpx
+}
+.product-con .wrapper .coupon .activity {
+ height: 40rpx;
+ padding: 0 20rpx;
+ border: 1px solid #f2857b;
+ color: #e93323;
+ font-size: 24rpx;
+ line-height: 40rpx;
+ position: relative;
+ margin: 19rpx 0 19rpx 15rpx
+}
+.product-con .wrapper .coupon .activity:before {
+ content: ' ';
+ position: absolute;
+ width: 7rpx;
+ height: 10rpx;
+ border-radius: 0 7rpx 7rpx 0;
+ background-color: #fff;
+ bottom: 50%;
+ left: -3rpx;
+ margin-bottom: -6rpx;
+ border-left-color: #fff
+}
+.product-con .wrapper .coupon .activity:after {
+ content: ' ';
+ position: absolute;
+ width: 7rpx;
+ height: 10rpx;
+ border-radius: 7rpx 0 0 7rpx;
+ background-color: #fff;
+ right: -3rpx;
+ bottom: 50%;
+ margin-bottom: -6rpx;
+ border-right-color: #fff
+}
+.product-con .wrapper .coupon .iconfont {
+ color: #7a7a7a;
+ font-size: 28rpx
+}
+.product-con .attribute {
+ background-color: #fff;
+ padding: 0 30rpx;
+ font-size: 26rpx;
+ color: #82848f;
+ height: 80rpx;
+ position: relative;
+ border-bottom: 2rpx solid #f5f5f5;
+}
+.product-con .attribute:last-child{
+ border-bottom: none;
+}
+.product-con .attribute .atterTxt {
+ font-size: 28rpx;
+ color: #282828;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow:ellipsis;
+ display: inline-block;
+ width: 400rpx;
+}
+.product-con .attribute .iconfont {
+ font-size: 28rpx;
+ color: #7a7a7a;
+ position: absolute;
+ right: 30rpx;
+}
+.product-con .userEvaluation {
+ margin-top: 20rpx;
+ background-color: #fff;
+}
+.product-con .userEvaluation .title,.product-con .combo .title{
+ height: 86rpx;
+ border-bottom: 1rpx solid #eee;
+ font-size: 28rpx;
+ color: #282828;
+ margin-left: 30rpx;
+ padding-right: 30rpx;
+}
+.product-con .userPlant .title{
+ height: 86rpx;
+ font-size: 28rpx;
+ color: #282828;
+ margin-left: 30rpx;
+ padding-right: 30rpx;
+}
+.product-con .userEvaluation .title .praise,
+.product-con .userPlant .title .praise,
+.product-con .combo .title .praise{
+ font-size: 28rpx;
+ color: grey
+}
+.product-con .userEvaluation .title .praise .iconfont,
+.product-con .userPlant .title .praise .iconfont,
+.product-con .combo .title .praise .iconfont{
+ color: #7a7a7a;
+ font-size: 28rpx;
+ vertical-align: 1rpx;
+ margin-left: 8rpx
+}
+.product-con .userPlant {
+ background-color: #fff;
+ border-top: 1rpx solid #EEEEEE;
+}
+.product-con .combo{
+ margin-top: 20rpx;
+ background: #fff;
+}
+.product-con .userPlant .imgList {
+ padding: 0 30rpx;
+}
+
+.product-con .combo .img-box {
+ margin: 30rpx 0 30rpx 0;
+ display: flex;
+}
+.product-con .combo .img-box .img-item,.product-con .combo .combo_item{
+ display: flex;
+ align-items: center;
+}
+.product-con .combo .combo_item{
+ padding-left: 30rpx;
+ position: relative;
+}
+.product-con .combo .combo_item::after{
+ content: "";
+ width: 1rpx;
+ height: 106rpx;
+ background: #E8E8E8;
+ position: absolute;
+ top: 5rpx;
+ right: 0;
+}
+.product-con .combo .combo_item:last-child::after{
+ display: none;
+}
+.product-con .combo .icon-jiahao2{
+ color: #666666;
+ margin: 0 18rpx;
+ font-size: 30rpx;
+}
+.product-con .combo .list_total{
+ padding: 0 30rpx;
+}
+.product-con .combo .list_total .list_num{
+ color: #282828;
+ font-size: 22rpx;
+}
+.product-con .combo .list_total .list_price{
+ font-size: 26rpx;
+ margin-top: 10rpx;
+ font-weight: bold;
+}
+.product-con .combo .img-box .img-item uni-image,
+.product-con .combo .img-box .img-item image{
+ width: 116rpx;
+ height: 116rpx;
+ border-radius: 6rpx;
+}
+.product-con .userPlant .imgList .pictrue {
+ width: 220rpx;
+ height: 220rpx;
+ margin: 0 15rpx 15rpx 0;
+ position: relative;
+ border-radius: 16rpx;
+ position: relative;
+}
+
+.product-con .userPlant .imgList .pictrue:last-child {
+ margin-right: 0;
+}
+.product-con .userPlant .imgList .pictrue .image {
+ width: 100%;
+ height: 100%;
+ border-radius: 16rpx;
+}
+.product-con .userPlant .imgList .video_img{
+ width: 40rpx;
+ height: 40rpx;
+ position: absolute;
+ top: 10rpx;
+ right: 10rpx;
+ z-index: 10;
+}
+.product-con .product-intro {
+ position: relative;
+ margin-top: 20rpx;
+ width: 100%;
+ overflow: hidden;
+}
+.product-con .product-intro .title {
+ font-size: 30rpx;
+ color: #282828;
+ height: 86rpx;
+ width: 100%;
+ background-color: #fff;
+ text-align: center;
+ line-height: 86rpx
+}
+.product-con .product-intro .conter {
+ width: 100%
+}
+.product-con .product-intro .conter image {
+ width: 100%!important;
+ display: block!important
+}
+.product-con .price-info {
+ background: #fff;
+ padding: 60rpx 30rpx 20rpx;
+}
+.product-con .price-info .price-title {
+ color: #666;
+ font-size: 28rpx;
+ margin-bottom: 20rpx;
+}
+.goodsStyle {
+ margin-top: 1rpx;
+ background-color: #fff;
+ padding: 22rpx 30rpx
+}
+.goodsStyle .pictrue {
+ width: 120rpx;
+ height: 120rpx
+}
+.goodsStyle .pictrue image {
+ width: 100%;
+ height: 100%;
+ border-radius: 6rpx
+}
+.goodsStyle .text {
+ width: 545rpx;
+ font-size: 28rpx;
+ color: #999
+}
+.goodsStyle .text .name {
+ width: 360rpx;
+ color: #282828
+}
+.goodsStyle .text .money {
+ text-align: right
+}
+.goodsStyle .text .money .num {
+ margin-top: 7rpx
+}
+.goodWrapper .item {
+ margin-left: 30rpx;
+ padding: 20rpx 30rpx 20rpx 0;
+ border-bottom: 2rpx solid #f0f0f0;
+}
+.goodWrapper .item .pictrue {
+ width: 130rpx;
+ height: 130rpx
+}
+.goodWrapper .item .pictrue image {
+ width: 100%;
+ height: 100%;
+ border-radius: 6rpx
+}
+.goodWrapper .item .text {
+ width: 547rpx;
+ position: relative
+}
+.goodWrapper .item .text .name {
+ font-size: 28rpx;
+ color: #282828;
+ width: 453rpx
+}
+.goodWrapper .item .text .num {
+ font-size: 26rpx;
+ color: #868686
+}
+.goodWrapper .item .text .attr {
+ font-size: 20rpx;
+ color: #868686;
+ margin-top: 7rpx
+}
+.goodWrapper .item .text .money {
+ font-size: 26rpx;
+ margin-top: 17rpx
+}
+.goodWrapper .item .text .evaluate {
+ position: absolute;
+ width: 114rpx;
+ height: 46rpx;
+ border: 1rpx solid #bbb;
+ border-radius: 4rpx;
+ text-align: center;
+ line-height: 46rpx;
+ right: 0;
+ bottom: -5rpx
+}
+.goodWrapper .item .text .evaluate.userEvaluated {
+ font-size: 26rpx;
+ color: #aaa;
+ background-color: #f7f7f7;
+ border-color: #f7f7f7
+}
+.promoterHeader {
+ width: 100%;
+}
+.promoterHeader .headerCon{width:100%;height:100%;padding:0 88rpx 0 55rpx;box-sizing:border-box;font-size:28rpx;color:#fff;background-image:url('data:image/png;base64,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');background-repeat:no-repeat;background-size:100% 100%;}
+.promoterHeader .headerCon .name{margin-bottom:10rpx;}
+.promoterHeader .headerCon .num{font-size:50rpx;}
+.promoterHeader .headerCon .iconfont{font-size:125rpx;}
+.sign-record .list .item .data{height:80rpx;line-height:80rpx;padding:0 30rpx;font-size:24rpx;color:#666;}
+.sign-record .list .item .listn{background-color:#fff;font-size:24rpx;color:#999;}
+.sign-record .list .item .listn .itemn{height:120rpx;border-bottom:1rpx solid #eee;padding-right:30rpx;margin-left:30rpx;}
+.sign-record .list .item .listn .itemn .name{width:390rpx;font-size:28rpx;color:#282828;margin-bottom:10rpx;}
+.sign-record .list .item .listn .itemn .num{font-size:36rpx;font-family: 'Guildford Pro';color:#16ac57;}
+.coupon-list{padding:0 30rpx;margin-top:25rpx;}
+.coupon-list .item{width:100%;height:170rpx;margin-bottom:16rpx;}
+.coupon-list .item .money{background-repeat:no-repeat;background-size:100% 100%;width:240rpx;height:100%;color:#fff;font-size:36rpx;font-weight:bold;text-align:center;display: flex;flex-direction: column;align-items: center;justify-content: center;}
+.coupon-list .item .money.moneyGray{background-image:url('data:image/png;base64,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');}
+.coupon-list .item .money.vip-coupon{background-image: url('data:image/png;base64,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');}
+.coupon-list .item .money .num{font-size:60rpx;}
+.coupon-list .item .text{position:relative;overflow:hidden;width:450rpx;padding:0 17rpx 0 24rpx;box-sizing:border-box;background-color:#fff;}
+.coupon-list .item .text .condition{font-size:30rpx;color:#282828;height:93rpx;line-height:93rpx;border-bottom:1rpx solid #f0f0f0;}
+.coupon-list .item .text .data{font-size:20rpx;color:#999;height:76rpx;}
+.coupon-list .item .text .data .bnt{width:126rpx;height:44rpx;border-radius:22rpx;font-size:22rpx;text-align:center;line-height:44rpx;color:#fff;}
+.coupon-list .item .text .data .gray{font-size: 120rpx;color:#DFDFDF;position:absolute;right:0;}
+.coupon-list .item .text .data .bnt1{width:100rpx;height:44rpx;border-radius:22rpx;font-size:22rpx;text-align:center;line-height:44rpx;color:#fff;}
+.coupon-list .item .text .data .bnt1.gray{background-color:#ccc;}
+.noCommodity {
+ border-top: 7rpx solid #f5f5f5;
+ text-align: center;
+}
+.noCommodity .pictrue {
+ width: 414rpx;
+ padding-bottom: 50rpx;
+ margin: 0 auto;
+}
+.noCommodity .pictrue image {
+ width: 414rpx;
+ height: 305rpx;
+}
+.noCommodity .pictrue view{
+ color: #999;
+}
+// 登录、注册、忘记密码
+.register {
+ padding-top: 100rpx;
+ background-image: linear-gradient(to bottom,#eb5447 0,#ff8e3b 100%);
+ width: 100%;
+ height: 100vh
+}
+.register .shading .pictrue {
+ width: 172rpx;
+ height: 172rpx;
+ border-radius: 50%;
+ background-color: rgba(255,255,255,.8);
+ margin: 0 auto
+}
+.register .shading .pictrue image {
+ width: 164rpx;
+ height: 164rpx;
+ border-radius: 50%;
+ display: block
+}
+.register .whiteBg {
+ width: 620rpx;
+ border-radius: 16rpx;
+ background-color: #fff;
+ margin: 30rpx auto 0 auto;
+ padding: 45rpx 30rpx
+}
+.register .whiteBg .title {
+ font-size: 36rpx;
+ color: #282828;
+ text-align: center;
+ font-weight: 700
+}
+.register .whiteBg .title .item~.item {
+ margin-left: 85rpx
+}
+.register .whiteBg .title .item {
+ color: #999;
+ border-bottom: 5rpx solid #fff;
+ padding-bottom: 10rpx
+}
+.register .whiteBg .title .item.on {
+ color: #282828;
+ border-bottom-color: #f35749
+}
+.register .whiteBg .list .item {
+ border-bottom: 1rpx solid #ededed;
+ padding: 47rpx 0 13rpx 0;
+ position: relative;
+ width:100%;
+ box-sizing: border-box;
+}
+.register .whiteBg .list .item .name {
+ font-size: 26rpx;
+ color: #2d3342;
+ margin-bottom: 27rpx;
+ text-align: left;
+}
+.register .whiteBg .list .item image {
+ width: 40rpx;
+ height: 40rpx;
+ display: block;
+}
+.whiteBg .code .code-img {
+ width: 100%;
+ height: 100%;
+}
+.register .whiteBg .list .item input {
+ font-size: 30rpx;
+ flex: 1;
+ margin-left: 20rpx
+}
+.register .whiteBg .list .item input::-webkit-input-placeholder {
+ color: #ccc;
+}
+.register .whiteBg .list .item .placeholder {
+ color: #ccc
+}
+.register .whiteBg .list .item .codeIput {
+ width: 240rpx;
+ margin-left: 20rpx
+}
+.register .whiteBg .list .item .code {
+ width: 150rpx;
+ height: 50rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #f35446;
+ border-radius: 30rpx;
+ color: #fff;
+ font-size: 26rpx
+}
+.register .whiteBg .list .item .code.on {
+ background-color: #bbb
+}
+.register .whiteBg .list .forgetPwd {
+ text-align: right;
+ font-size: 28rpx;
+ color: #666;
+}
+.register .whiteBg .list .forgetPwd .iconfont {
+ font-size: 30rpx;
+ margin-right: 10rpx;
+ vertical-align: middle
+}
+.register .whiteBg .logon {
+ font-size: 34rpx;
+ color: #fff;
+ font-weight: 700;
+ height: 86rpx;
+ border-radius: 43rpx;
+ background: linear-gradient(to right,#f35447 0,#ff8e3c 100%);
+ text-align: center;
+ line-height: 86rpx;
+ margin-top: 47rpx
+}
+.register .whiteBg .tip {
+ height: 110rpx;
+ text-align: center;
+ line-height: 105rpx;
+ font-size: 24rpx;
+ color: #ccc
+}
+// 首页修改轮播内部样式;
+.index-bg .uni-swiper-dot {
+ width: 20rpx!important;
+ height: 5rpx!important;
+ border-radius: 3rpx
+}
+.boutique .uni-swiper-dot {
+ width: 7rpx!important;
+ height: 7rpx!important;
+ border-radius: 50%
+}
+.boutique .uni-swiper-dot-active {
+ width: 20rpx!important;
+ border-radius: 5rpx!important
+}
+.sign-record .list .item .data {
+ height: 80rpx;
+ line-height: 80rpx;
+ padding: 0 30rpx;
+ font-size: 24rpx;
+ color: #666
+}
+.sign-record .list .item .listn {
+ background-color: #fff;
+ font-size: 24rpx;
+ color: #999
+}
+.sign-record .list .item .listn .itemn {
+ height: 120rpx;
+ border-bottom: 1rpx solid #eee;
+ padding-right: 30rpx;
+ margin-left: 30rpx
+}
+.sign-record .list .item .listn .itemn .name {
+ width: 390rpx;
+ font-size: 28rpx;
+ color: #282828;
+ margin-bottom: 10rpx
+}
+.sign-record .list .item .listn .itemn .num {
+ font-size: 36rpx;
+ color: #16ac57
+}
+.statistical-page .mc-{
+ padding-bottom: 0
+}
+.statistical-page .mpvue-calendar {
+ min-width: 100%
+}
+.statistical-page .mpvue-calendar table {
+ margin: 0
+}
+.statistical-page .mpvue-calendar td {
+ border-right: 1px solid #fff;
+ padding: 0;
+ width: 14%!important
+}
+.statistical-page .calendar-tools {
+ box-shadow: unset;
+ -webkit-box-shadow: unset;
+ -o-box-shadow: unset;
+ -moz-box-shadow: unset
+}
+.statistical-page .mc-head-box div {
+ font-size: 14px
+}
+.statistical-page .mpvue-calendar td:not(.disabled) span.mc-date-red {
+ color: unset
+}
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-begin span.calendar-date,.statistical-page .mpvue-calendar .mc-range-mode .mc-range-end span.calendar-date {
+ border-radius: 0;
+ background-color: #2291f8!important
+}
+.statistical-page .mpvue-calendar td.selected span.mc-date-red {
+ color: #fff
+}
+.statistical-page .mc-range-mode .selected .mc-range-bg {
+ background-color: #a0dcf9
+}
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-row-first .calendar-date,.statistical-page .mpvue-calendar .mc-range-mode .mc-range-row-last .calendar-date {
+ background-color: #a0dcf9
+}
+.statistical-page .mpvue-calendar .mc-range-mode .selected.mc-range-second-to-last span {
+ background-color: #a0dcf9
+}
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-month-first.selected .calendar-date,.statistical-page .mpvue-calendar .mc-range-mode .mc-range-month-last.selected .calendar-date {
+ background-color: #a0dcf9
+}
+.statistical-page .mc-today-element .calendar-date {
+ border-radius: 0;
+ background-color: unset
+}
+.new-users .uni-swiper-dot {
+ width: 8px;
+ height: 4px;
+ background: rgba(0,0,0,.15);
+ border-radius: 2px
+}
+.new-users .uni-swiper-dot-active {
+ width: 16px;
+ height: 4px;
+ background: rgba(233,51,35,1)!important;
+ border-radius: 2px
+}
+.pictrue_log {
+ width: 80rpx;
+ height: 40rpx;
+ border-radius: 20rpx 0 20rpx 0;
+ line-height: 40rpx;
+ font-size: 24rpx
+}
+.pictrue_log_class {
+ background: -webkit-gradient(linear,left top,right top,from(rgba(246,122,56,1)),to(rgba(241,27,9,1)));
+ background: linear-gradient(90deg,rgba(246,122,56,1) 0,rgba(241,27,9,1) 100%);
+ opacity: 1;
+ position: absolute;
+ top: 0;
+ left: 0;
+ color: #fff;
+ text-align: center;
+ z-index: 3
+}
+.pictrue_log_medium {
+ width: 80rpx;
+ height: 44rpx;
+ border-radius: 20rpx 0 20rpx 0;
+ line-height: 44rpx;
+ text-align: center;
+ font-size: 26rpx
+}
+.pictrue_log_big {
+ width: 100rpx;
+ height: 46rpx;
+ line-height: 46rpx;
+ border-radius: 20rpx 0 20rpx 0;
+ font-size: 28rpx
+}
+.product-con .nav .time .styleAll {
+ padding: 0 6rpx;
+ font-size: 22rpx;
+ // background-color: #fff;
+ border-radius: 2rpx
+}
+.spike-box .styleAll {
+ background-color: #ffdfdd;
+ color: #e93323;
+ padding: 0 5rpx
+}
+.product-con .nav .time .timeTxt {
+ color: #fff
+}
+.bg-color-hui {
+ background: #bbb!important
+}
+.page_content .uni-swiper-wrapper{
+ overflow: initial;
+}
+.page_content .uni-swiper-dots-horizontal{
+ bottom: -20rpx;
+}
+.page_content .swiper .uni-swiper-dot {
+ width: 30rpx;
+ height: 8rpx;
+ border-radius: 4rpx;
+ background: #E5E5E5;
+ margin: 0 7rpx;
+}
+.page_content .swiper .uni-swiper-dot-active {
+ background: #E93323;
+}
+.pictrue_log_xl {
+ background: linear-gradient(90deg,rgba(246,122,56,1) 0,rgba(241,27,9,1) 100%)
+}
+.pictrue_log_xl_gray {
+ background: linear-gradient(90deg,rgba(102,102,102,1) 0,rgba(153,153,153,1) 100%)
+}
+.pictrue_log_xl_blue {
+ background: linear-gradient(90deg,rgba(26,163,246,1) 0,rgba(24,192,244,1) 100%)
+}
+.flex-aj-center {
+ display: flex;
+ align-items: center;
+ justify-content: center
+}
+.page-index.bgf .noCommodity{
+ border-top: 0;
+}
+.product-con .red{
+ color: #82848f;
+}
+.pl-20{
+ padding-left: 20rpx;
+}
+.dialog_nav {
+ position: absolute;
+ left: 30rpx;
+ width: 240rpx;
+ background: #FFFFFF;
+ box-shadow: 0px 0px 16rpx rgba(0, 0, 0, 0.08);
+ z-index: 310;
+ border-radius: 14rpx;
+ &::before {
+ content: '';
+ width: 0;
+ height: 0;
+ position: absolute;
+ left: 0;
+ right: 0;
+ margin: auto;
+ top: -9px;
+ border-bottom: 26rpx solid #FFFFFF;
+ border-left: 26rpx solid transparent;
+ /*transparent 表示透明*/
+ border-right: 26rpx solid transparent;
+ }
+}
+.dialog_nav_item {
+ width: 100%;
+ height: 84rpx;
+ line-height: 84rpx;
+ padding: 0 20rpx 0;
+ box-sizing: border-box;
+ font-size: 28rpx;
+ color: #333;
+ position: relative;
+ .iconfont {
+ font-size: 32rpx;
+ }
+}
+.dialog_after {
+ ::after {
+ content: '';
+ position: absolute;
+ width: 172rpx;
+ height: 2rpx;
+ background: #EEEEEE;
+ bottom: 0;
+ right: 0;
+ }
+}
+.mask_transparent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: transparent;
+ z-index: 300;
+}
\ No newline at end of file
diff --git a/static/easy-loadimage/loadfail.png b/static/easy-loadimage/loadfail.png
new file mode 100644
index 0000000..f8e221b
Binary files /dev/null and b/static/easy-loadimage/loadfail.png differ
diff --git a/static/easy-loadimage/loading.gif b/static/easy-loadimage/loading.gif
new file mode 100644
index 0000000..5e1f8fa
Binary files /dev/null and b/static/easy-loadimage/loading.gif differ
diff --git a/static/iconfont/iconfont.css b/static/iconfont/iconfont.css
new file mode 100644
index 0000000..bdcda3c
--- /dev/null
+++ b/static/iconfont/iconfont.css
@@ -0,0 +1,2602 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 993865 */
+ src: url('https://at.alicdn.com/t/c/font_993865_zmqjk4lvax.woff2?t=1681715156711') format('woff2'),
+ url('https://at.alicdn.com/t/c/font_993865_zmqjk4lvax.woff?t=1681715156711') format('woff'),
+ url('https://at.alicdn.com/t/c/font_993865_zmqjk4lvax.ttf?t=1681715156711') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-jifenshangcheng:before {
+ content: "\e848";
+}
+
+.icon-fabu2:before {
+ content: "\e84d";
+}
+
+.icon-bianji6:before {
+ content: "\e854";
+}
+
+.icon-zhibo-yugao:before {
+ content: "\e846";
+}
+
+.icon-zhibo-huifang:before {
+ content: "\e84b";
+}
+
+.icon-zhibo-zhibozhong:before {
+ content: "\e84c";
+}
+
+.icon-a-guanzhu:before {
+ content: "\e849";
+}
+
+.icon-huati:before {
+ content: "\e84a";
+}
+
+.icon-shuaxin:before {
+ content: "\e847";
+}
+
+.icon-pinglun3:before {
+ content: "\e83f";
+}
+
+.icon-neirongfenlei:before {
+ content: "\e841";
+}
+
+.icon-canyuhuati1:before {
+ content: "\e842";
+}
+
+.icon-tianjiabaobei:before {
+ content: "\e843";
+}
+
+.icon-zhankai:before {
+ content: "\e844";
+}
+
+.icon-shouqi:before {
+ content: "\e845";
+}
+
+.icon-ziti:before {
+ content: "\e83c";
+}
+
+.icon-peisong:before {
+ content: "\e83d";
+}
+
+.icon-pindan:before {
+ content: "\e83e";
+}
+
+.icon-daifukuan1:before {
+ content: "\e836";
+}
+
+.icon-daifahuo1:before {
+ content: "\e837";
+}
+
+.icon-daipingjia1:before {
+ content: "\e839";
+}
+
+.icon-daishouhuo1:before {
+ content: "\e83a";
+}
+
+.icon-a-shouhoutuikuan1:before {
+ content: "\e83b";
+}
+
+.icon-baozhengjin:before {
+ content: "\e834";
+}
+
+.icon-tonglianzhifu1:before {
+ content: "\e835";
+}
+
+.icon-dianpu1:before {
+ content: "\e833";
+}
+
+.icon-paizhao:before {
+ content: "\e832";
+}
+
+.icon-24gf-play:before {
+ content: "\ea82";
+}
+
+.icon-yiquxiao:before {
+ content: "\e831";
+}
+
+.icon-wutouxiang:before {
+ content: "\e830";
+}
+
+.icon-fenxiang3:before {
+ content: "\e82d";
+}
+
+.icon-pinglun2:before {
+ content: "\e82e";
+}
+
+.icon-shipin1:before {
+ content: "\e827";
+}
+
+.icon-tuwen1:before {
+ content: "\e828";
+}
+
+.icon-shangpinye_fenxiang:before {
+ content: "\e8e4";
+}
+
+.icon-gou2:before {
+ content: "\e826";
+}
+
+.icon-daihexiao:before {
+ content: "\e825";
+}
+
+.icon-pengyouquan1:before {
+ content: "\e824";
+}
+
+.icon-shangpin1:before {
+ content: "\e823";
+}
+
+.icon-tishi2:before {
+ content: "\e821";
+}
+
+.icon-baoguo:before {
+ content: "\e822";
+}
+
+.icon-shipin:before {
+ content: "\e820";
+}
+
+.icon-fengmian:before {
+ content: "\e81f";
+}
+
+.icon-hexiaoma:before {
+ content: "\e81c";
+}
+
+.icon-tuwen:before {
+ content: "\e81d";
+}
+
+.icon-tianjiashipin:before {
+ content: "\e81e";
+}
+
+.icon-chehui:before {
+ content: "\e81a";
+}
+
+.icon-fuzhi:before {
+ content: "\e81b";
+}
+
+.icon-yue2:before {
+ content: "\e8b0";
+}
+
+.icon-gouwu_o:before {
+ content: "\eb60";
+}
+
+.icon-chengchangzhi:before {
+ content: "\e815";
+}
+
+.icon-fabu1:before {
+ content: "\e814";
+}
+
+.icon-qiandao:before {
+ content: "\e816";
+}
+
+.icon-pingjia3:before {
+ content: "\e817";
+}
+
+.icon-yaoqing1:before {
+ content: "\e819";
+}
+
+.icon-liebiao1:before {
+ content: "\e7f9";
+}
+
+.icon-liebiao2:before {
+ content: "\e7fa";
+}
+
+.icon-xiaofeijilu-rongcuo:before {
+ content: "\e853";
+}
+
+.icon-goumaishangpin:before {
+ content: "\e84e";
+}
+
+.icon-meiriqiandao:before {
+ content: "\e84f";
+}
+
+.icon-yaoqinghaoyou2:before {
+ content: "\e850";
+}
+
+.icon-xiaofeijilu1:before {
+ content: "\e851";
+}
+
+.icon-fufeihuiyuan1:before {
+ content: "\e852";
+}
+
+.icon-goumai:before {
+ content: "\e7f8";
+}
+
+.icon-dengdaizhifu:before {
+ content: "\e840";
+}
+
+.icon-xinghao:before {
+ content: "\e838";
+}
+
+.icon-shouji2:before {
+ content: "\e829";
+}
+
+.icon-dingwei4:before {
+ content: "\e82a";
+}
+
+.icon-sousuo8:before {
+ content: "\e82b";
+}
+
+.icon-erweima3:before {
+ content: "\e82c";
+}
+
+.icon-shoudanyouhui:before {
+ content: "\e818";
+}
+
+.icon-gouwuche-mendian:before {
+ content: "\e812";
+}
+
+.icon-kefu-mendian:before {
+ content: "\e813";
+}
+
+.icon-zhongwen:before {
+ content: "\e810";
+}
+
+.icon-yingwen:before {
+ content: "\e811";
+}
+
+.icon-shipindianzan-weidian1:before {
+ content: "\e80e";
+}
+
+.icon-shipindianzan-yidian:before {
+ content: "\e80f";
+}
+
+.icon-mendian1:before {
+ content: "\e807";
+}
+
+.icon-gouwuche8:before {
+ content: "\e808";
+}
+
+.icon-tianjiagouwuche:before {
+ content: "\e809";
+}
+
+.icon-shipindianzan-weidian:before {
+ content: "\e80a";
+}
+
+.icon-pingjia2:before {
+ content: "\e80b";
+}
+
+.icon-liwu:before {
+ content: "\e80c";
+}
+
+.icon-shipindianzan:before {
+ content: "\e80d";
+}
+
+.icon-dingwei2:before {
+ content: "\e7fb";
+}
+
+.icon-dianhua:before {
+ content: "\e7fc";
+}
+
+.icon-yingyeshijian1:before {
+ content: "\e7fd";
+}
+
+.icon-bianji4:before {
+ content: "\e7fe";
+}
+
+.icon-xuanzhong6:before {
+ content: "\e7ff";
+}
+
+.icon-shaixuan1:before {
+ content: "\e800";
+}
+
+.icon-yingyeshijian2:before {
+ content: "\e801";
+}
+
+.icon-dingwei3:before {
+ content: "\e802";
+}
+
+.icon-mendian:before {
+ content: "\e806";
+}
+
+.icon-fangda1:before {
+ content: "\e7f7";
+}
+
+.icon-meiyuan:before {
+ content: "\e7f5";
+}
+
+.icon-yilingqu2:before {
+ content: "\e7f6";
+}
+
+.icon-jifen:before {
+ content: "\e7f3";
+}
+
+.icon-youhuiquan2:before {
+ content: "\e7f4";
+}
+
+.icon-zuji-xuanzhong:before {
+ content: "\e7f2";
+}
+
+.icon-zuji:before {
+ content: "\e7f1";
+}
+
+.icon-fanhui3:before {
+ content: "\e7f0";
+}
+
+.icon-fenxiaodingdan:before {
+ content: "\e7e9";
+}
+
+.icon-tuiguangrenpaihang1:before {
+ content: "\e7ea";
+}
+
+.icon-huodongguize:before {
+ content: "\e7eb";
+}
+
+.icon-xingzhuangjiehe:before {
+ content: "\e7ec";
+}
+
+.icon-wodetuandui:before {
+ content: "\e7ed";
+}
+
+.icon-yaoqinghaoyou1:before {
+ content: "\e7ee";
+}
+
+.icon-yongjinpaihang1:before {
+ content: "\e7ef";
+}
+
+.icon-daohangdaodian:before {
+ content: "\e7e5";
+}
+
+.icon-yingyeshijian:before {
+ content: "\e7e6";
+}
+
+.icon-dingwei1:before {
+ content: "\e7e7";
+}
+
+.icon-zhidianzixun:before {
+ content: "\e7e8";
+}
+
+.icon-pc-jifen:before {
+ content: "\e7e3";
+}
+
+.icon-pc-youhuiquan:before {
+ content: "\e7e4";
+}
+
+.icon-qunliao:before {
+ content: "\e7e2";
+}
+
+.icon-dingdan-xuanzhong:before {
+ content: "\e7db";
+}
+
+.icon-jilu-xuanzhong:before {
+ content: "\e7dc";
+}
+
+.icon-kehu-xuanzhong:before {
+ content: "\e7dd";
+}
+
+.icon-jilu:before {
+ content: "\e7de";
+}
+
+.icon-dingdan1:before {
+ content: "\e7df";
+}
+
+.icon-kehu:before {
+ content: "\e7e1";
+}
+
+.icon-xingbie-nan:before {
+ content: "\e7d9";
+}
+
+.icon-xingbie-nv:before {
+ content: "\e7da";
+}
+
+.icon-v:before {
+ content: "\e7d7";
+}
+
+.icon-huangguan4:before {
+ content: "\e7d8";
+}
+
+.icon-yilingqu:before {
+ content: "\e7d6";
+}
+
+.icon-jinru3:before {
+ content: "\e7d5";
+}
+
+.icon-dingdanguanli:before {
+ content: "\e7d1";
+}
+
+.icon-kefujilu:before {
+ content: "\e7d2";
+}
+
+.icon-dingdanhexiao:before {
+ content: "\e7d3";
+}
+
+.icon-shangjiaguanli:before {
+ content: "\e7d4";
+}
+
+.icon-yaoqinghaoyou:before {
+ content: "\e7d0";
+}
+
+.icon-yongjinpaihang:before {
+ content: "\e7cb";
+}
+
+.icon-tuiguangrenpaihang:before {
+ content: "\e7cf";
+}
+
+.icon-mimatubiao:before {
+ content: "\e7ca";
+}
+
+.icon-xianshi:before {
+ content: "\e7cc";
+}
+
+.icon-zhekoujia:before {
+ content: "\e7cd";
+}
+
+.icon-zhu:before {
+ content: "\e7ce";
+}
+
+.icon-weizan:before {
+ content: "\e7c7";
+}
+
+.icon-zan:before {
+ content: "\e7c8";
+}
+
+.icon-pinglun1:before {
+ content: "\e7c9";
+}
+
+.icon-gou1:before {
+ content: "\e7c6";
+}
+
+.icon-banquan:before {
+ content: "\e7c2";
+}
+
+.icon-gengxinshijian:before {
+ content: "\e7c3";
+}
+
+.icon-xiazailiang:before {
+ content: "\e7c4";
+}
+
+.icon-wenjiandaxiao:before {
+ content: "\e7c5";
+}
+
+.icon-dizhi1:before {
+ content: "\e7bd";
+}
+
+.icon-guojiagaoxinqiye:before {
+ content: "\e7be";
+}
+
+.icon-yishoucang1:before {
+ content: "\e7bf";
+}
+
+.icon-wendang:before {
+ content: "\e7c0";
+}
+
+.icon-shoucangbenzhan1:before {
+ content: "\e7c1";
+}
+
+.icon-fenlei3:before {
+ content: "\e7bc";
+}
+
+.icon-shenheweitongguo:before {
+ content: "\e7b9";
+}
+
+.icon-shenhetongguo:before {
+ content: "\e7ba";
+}
+
+.icon-daishenhe:before {
+ content: "\e7bb";
+}
+
+.icon-shoufaxinpin:before {
+ content: "\e7b8";
+}
+
+.icon-cuxiaodanpin:before {
+ content: "\e7b7";
+}
+
+.icon-jingpintuijian1:before {
+ content: "\e7b5";
+}
+
+.icon-paihangbang:before {
+ content: "\e7b6";
+}
+
+.icon-yidianzan:before {
+ content: "\e7b4";
+}
+
+.icon-dianzan1:before {
+ content: "\e7b3";
+}
+
+.icon-haoyoudaizhifu:before {
+ content: "\e7b2";
+}
+
+.icon-baobeilianjie:before {
+ content: "\e7b0";
+}
+
+.icon-canyuhuati:before {
+ content: "\e7b1";
+}
+
+.icon-dianzan:before {
+ content: "\e7ac";
+}
+
+.icon-pinglun:before {
+ content: "\e7ad";
+}
+
+.icon-fenxiang2:before {
+ content: "\e7ae";
+}
+
+.icon-fabu:before {
+ content: "\e7af";
+}
+
+.icon-gengduo5:before {
+ content: "\e7ab";
+}
+
+.icon-fanhui2:before {
+ content: "\e7a9";
+}
+
+.icon-kanjialiebiao:before {
+ content: "\e7aa";
+}
+
+.icon-xunishangpin:before {
+ content: "\e7a8";
+}
+
+.icon-dingdanliebiao:before {
+ content: "\e7a6";
+}
+
+.icon-shujutongji1:before {
+ content: "\e7a7";
+}
+
+.icon-sousuo7:before {
+ content: "\e7a5";
+}
+
+.icon-zhibozhong1:before {
+ content: "\e7a4";
+}
+
+.icon-youhuiquanshisebeijing:before {
+ content: "\e7a2";
+}
+
+.icon-youhuiquantoumingbeijing:before {
+ content: "\e7a3";
+}
+
+.icon-yushouanniu:before {
+ content: "\e7a1";
+}
+
+.icon-gengduo4:before {
+ content: "\e7a0";
+}
+
+.icon-sousuo6:before {
+ content: "\e79b";
+}
+
+.icon-gerenzhongxin1:before {
+ content: "\e79c";
+}
+
+.icon-shoucang3:before {
+ content: "\e79d";
+}
+
+.icon-shouye8:before {
+ content: "\e79e";
+}
+
+.icon-gouwuche7:before {
+ content: "\e79f";
+}
+
+.icon-fuzhikouling1:before {
+ content: "\e79a";
+}
+
+.icon-zhuanti:before {
+ content: "\e799";
+}
+
+.icon-daifukuan-3:before {
+ content: "\e794";
+}
+
+.icon-shouhou-tuikuan-3:before {
+ content: "\e795";
+}
+
+.icon-daipingjia-3:before {
+ content: "\e796";
+}
+
+.icon-daifahuo-3:before {
+ content: "\e797";
+}
+
+.icon-quanbudingdan-3:before {
+ content: "\e798";
+}
+
+.icon-daifahuo-2:before {
+ content: "\e78e";
+}
+
+.icon-daishouhuo-2:before {
+ content: "\e78f";
+}
+
+.icon-daipingjia-2:before {
+ content: "\e791";
+}
+
+.icon-shouhou-tuikuan-2:before {
+ content: "\e792";
+}
+
+.icon-daifukuan-2:before {
+ content: "\e793";
+}
+
+.icon-duoshanghupc-shuomingdanchuang:before {
+ content: "\e78b";
+}
+
+.icon-duoshanghupc-daohuotongzhi:before {
+ content: "\e78c";
+}
+
+.icon-duoshanghupc-baozhang:before {
+ content: "\e78d";
+}
+
+.icon-dianpu:before {
+ content: "\e78a";
+}
+
+.icon-dengjitubiao:before {
+ content: "\e789";
+}
+
+.icon-daifahuo-xingerenzhongxin:before {
+ content: "\e782";
+}
+
+.icon-erweima-xingerenzhongxin:before {
+ content: "\e783";
+}
+
+.icon-quanbudingdan-xingerenzhongxin:before {
+ content: "\e784";
+}
+
+.icon-xiaoxi-xingerenzhongxin:before {
+ content: "\e785";
+}
+
+.icon-daipingjia-xingerenzhongxin:before {
+ content: "\e786";
+}
+
+.icon-a-shouhoutuikuan-xingerenzhongxin:before {
+ content: "\e787";
+}
+
+.icon-daifukuan-xingerenzhongxin:before {
+ content: "\e788";
+}
+
+.icon-fapiao2:before {
+ content: "\e781";
+}
+
+.icon-shouhou-tuikuan-lan:before {
+ content: "\e77c";
+}
+
+.icon-daipingjia-lan:before {
+ content: "\e780";
+}
+
+.icon-daishouhuo-lan:before {
+ content: "\e77d";
+}
+
+.icon-daifukuan-lan:before {
+ content: "\e77e";
+}
+
+.icon-daifahuo-lan:before {
+ content: "\e77f";
+}
+
+.icon-daifahuo-ju:before {
+ content: "\e777";
+}
+
+.icon-daifukuan-ju:before {
+ content: "\e778";
+}
+
+.icon-daishouhuo-ju:before {
+ content: "\e779";
+}
+
+.icon-shouhou-tuikuan-ju:before {
+ content: "\e77a";
+}
+
+.icon-daipingjia-ju:before {
+ content: "\e77b";
+}
+
+.icon-daishouhuo-fen:before {
+ content: "\e772";
+}
+
+.icon-daipingjia-fen:before {
+ content: "\e773";
+}
+
+.icon-daifukuan-fen:before {
+ content: "\e774";
+}
+
+.icon-a-shouhoutuikuan-fen:before {
+ content: "\e775";
+}
+
+.icon-daifahuo-fen:before {
+ content: "\e776";
+}
+
+.icon-daifahuo-lv:before {
+ content: "\e768";
+}
+
+.icon-shouhou-tuikuan-lv:before {
+ content: "\e76a";
+}
+
+.icon-daifukuan-lv:before {
+ content: "\e76d";
+}
+
+.icon-daishouhuo-lv:before {
+ content: "\e770";
+}
+
+.icon-daipingjia-lv:before {
+ content: "\e771";
+}
+
+.icon-daishouhuo:before {
+ content: "\e75d";
+}
+
+.icon-daipingjia:before {
+ content: "\e75e";
+}
+
+.icon-daifahuo:before {
+ content: "\e760";
+}
+
+.icon-daifukuan:before {
+ content: "\e766";
+}
+
+.icon-a-shouhoutuikuan:before {
+ content: "\e767";
+}
+
+.icon-gouwuche-yangshi1:before {
+ content: "\e75b";
+}
+
+.icon-gouwuche-yangshi2:before {
+ content: "\e75c";
+}
+
+.icon-rilitubiao:before {
+ content: "\e75a";
+}
+
+.icon-tishi1:before {
+ content: "\e759";
+}
+
+.icon-daituihuo1:before {
+ content: "\e752";
+}
+
+.icon-shenqingzhong:before {
+ content: "\e756";
+}
+
+.icon-fanyong:before {
+ content: "\e74d";
+}
+
+.icon-zizhizhengjian:before {
+ content: "\e743";
+}
+
+.icon-fenxiaodengji:before {
+ content: "\e742";
+}
+
+.icon-yijujue:before {
+ content: "\e741";
+}
+
+.icon-tuikuanzhong1:before {
+ content: "\e803";
+}
+
+.icon-tuikuanshibai:before {
+ content: "\e804";
+}
+
+.icon-tuikuanchenggong:before {
+ content: "\e805";
+}
+
+.icon-tuikuanzhong11:before {
+ content: "\e744";
+}
+
+.icon-yiwancheng:before {
+ content: "\e745";
+}
+
+.icon-yituikuan1:before {
+ content: "\e747";
+}
+
+.icon-tuikuan1:before {
+ content: "\e73a";
+}
+
+.icon-tuihuo:before {
+ content: "\e73c";
+}
+
+.icon-shenhe:before {
+ content: "\e73d";
+}
+
+.icon-shangchuantupian1:before {
+ content: "\e755";
+}
+
+.icon-shouye7:before {
+ content: "\e863";
+}
+
+.icon-shengqian:before {
+ content: "\e738";
+}
+
+.icon-xiaolian1:before {
+ content: "\e737";
+}
+
+.icon-fangda:before {
+ content: "\e736";
+}
+
+.icon-dianjichoujiang:before {
+ content: "\e730";
+}
+
+.icon-7jinianban:before {
+ content: "\e76f";
+}
+
+.icon-lingquyouhuiquananniu:before {
+ content: "\e72e";
+}
+
+.icon-qiandaochenggonganniu:before {
+ content: "\e72f";
+}
+
+.icon-s-xianshimiaosha:before {
+ content: "\e727";
+}
+
+.icon-s-pintuan1:before {
+ content: "\e726";
+}
+
+.icon-s-kanjia1:before {
+ content: "\e72d";
+}
+
+.icon-s-pingguo:before {
+ content: "\e722";
+}
+
+.icon-s-weixindenglu1:before {
+ content: "\e729";
+}
+
+.icon-s-yanzhengmadenglu1:before {
+ content: "\e72a";
+}
+
+.icon-s-mimadenglu1:before {
+ content: "\e72b";
+}
+
+.icon-s-yanzhengma:before {
+ content: "\e728";
+}
+
+.icon-pengyouquan:before {
+ content: "\e76e";
+}
+
+.icon-jifenzhongxin:before {
+ content: "\e71f";
+}
+
+.icon-s-chongzhijilu:before {
+ content: "\e71c";
+}
+
+.icon-s-xiaofeijilu:before {
+ content: "\e71e";
+}
+
+.icon-s-zhangdanjilu:before {
+ content: "\e720";
+}
+
+.icon-s-kefu:before {
+ content: "\e721";
+}
+
+.icon-s-bianji:before {
+ content: "\e71d";
+}
+
+.icon-s-pintuan:before {
+ content: "\e719";
+}
+
+.icon-s-kanjia:before {
+ content: "\e71a";
+}
+
+.icon-s-miaosha:before {
+ content: "\e71b";
+}
+
+.icon-fanhui1:before {
+ content: "\e718";
+}
+
+.icon-kefu3:before {
+ content: "\e716";
+}
+
+.icon-shouye6:before {
+ content: "\e717";
+}
+
+.icon-chakanditu:before {
+ content: "\e715";
+}
+
+.icon-haowuquan1:before {
+ content: "\e713";
+}
+
+.icon-haowuquan:before {
+ content: "\e712";
+}
+
+.icon-gengduozhankai1:before {
+ content: "\e70e";
+}
+
+.icon-biaoqing2:before {
+ content: "\e70f";
+}
+
+.icon-huashu1:before {
+ content: "\e710";
+}
+
+.icon-tupian2:before {
+ content: "\e711";
+}
+
+.icon-huifang:before {
+ content: "\e76c";
+}
+
+.icon-zhibozhong:before {
+ content: "\e76b";
+}
+
+.icon-huangguan3:before {
+ content: "\e769";
+}
+
+.icon-huiyuan2:before {
+ content: "\e70c";
+}
+
+.icon-fapiao1:before {
+ content: "\e70b";
+}
+
+.icon-cha3:before {
+ content: "\e709";
+}
+
+.icon-shezhi1:before {
+ content: "\e70a";
+}
+
+.icon-tianjia1:before {
+ content: "\e705";
+}
+
+.icon-bianji3:before {
+ content: "\e706";
+}
+
+.icon-jiahao2:before {
+ content: "\e707";
+}
+
+.icon-shanchu3:before {
+ content: "\e708";
+}
+
+.icon-fuzhikouling:before {
+ content: "\e704";
+}
+
+.icon-kefujiedai:before {
+ content: "\e703";
+}
+
+.icon-miaosha1:before {
+ content: "\e702";
+}
+
+.icon-bianji2:before {
+ content: "\e700";
+}
+
+.icon-qingkonghuancun:before {
+ content: "\e701";
+}
+
+.icon-shijian1:before {
+ content: "\e66b";
+}
+
+.icon-wenhao1:before {
+ content: "\e6ee";
+}
+
+.icon-zhanghaomima:before {
+ content: "\e763";
+}
+
+.icon-erweima2:before {
+ content: "\e765";
+}
+
+.icon-guanji:before {
+ content: "\e6ed";
+}
+
+.icon-tupian1:before {
+ content: "\e762";
+}
+
+.icon-biaoqing1:before {
+ content: "\e764";
+}
+
+.icon-guanbi5:before {
+ content: "\e761";
+}
+
+.icon-shengyinjingyinxianxing:before {
+ content: "\e94f";
+}
+
+.icon-shengyinyinliang:before {
+ content: "\e66a";
+}
+
+.icon-pingjia1:before {
+ content: "\e6ec";
+}
+
+.icon-xialazhankai:before {
+ content: "\e6dd";
+}
+
+.icon-cha2:before {
+ content: "\e6e6";
+}
+
+.icon-fanhuishouye:before {
+ content: "\e6df";
+}
+
+.icon-gengduo3:before {
+ content: "\e6e0";
+}
+
+.icon-fenxiang1:before {
+ content: "\e6e2";
+}
+
+.icon-sousuo5:before {
+ content: "\e6e3";
+}
+
+.icon-huiyuan1:before {
+ content: "\e6e5";
+}
+
+.icon-gou:before {
+ content: "\e6e7";
+}
+
+.icon-gouwuche6:before {
+ content: "\e6e8";
+}
+
+.icon-you1:before {
+ content: "\e6e9";
+}
+
+.icon-zuo1:before {
+ content: "\e6ea";
+}
+
+.icon-vip12:before {
+ content: "\e6eb";
+}
+
+.icon-youhuiquan1:before {
+ content: "\e6db";
+}
+
+.icon-kefu21:before {
+ content: "\e6da";
+}
+
+.icon-yue1:before {
+ content: "\e6dc";
+}
+
+.icon-huiyuanzhongxin:before {
+ content: "\e6d5";
+}
+
+.icon-kanjiajilu:before {
+ content: "\e6d6";
+}
+
+.icon-dizhixinxi:before {
+ content: "\e6d7";
+}
+
+.icon-wodetuiguang:before {
+ content: "\e6d8";
+}
+
+.icon-wodeshoucang:before {
+ content: "\e6d9";
+}
+
+.icon-huidaodingbu1:before {
+ content: "\e6d4";
+}
+
+.icon-saoyisao:before {
+ content: "\e6d3";
+}
+
+.icon-jiageshaixuanshang:before {
+ content: "\e6d0";
+}
+
+.icon-jiageshaixuanxia:before {
+ content: "\e6d1";
+}
+
+.icon-shouji1:before {
+ content: "\e6cf";
+}
+
+.icon-gengduo2:before {
+ content: "\e6cd";
+}
+
+.icon-cha1:before {
+ content: "\e6cb";
+}
+
+.icon-fasong:before {
+ content: "\e6be";
+}
+
+.icon-gengduozhankai:before {
+ content: "\e6c7";
+}
+
+.icon-biaoqing:before {
+ content: "\e6c8";
+}
+
+.icon-huashu:before {
+ content: "\e6c9";
+}
+
+.icon-tupian:before {
+ content: "\e6ca";
+}
+
+.icon-mima:before {
+ content: "\e6ba";
+}
+
+.icon-zhanghao:before {
+ content: "\e6bc";
+}
+
+.icon-fanhui:before {
+ content: "\e6b9";
+}
+
+.icon-jinru2:before {
+ content: "\e6bd";
+}
+
+.icon-shangpinxinxi:before {
+ content: "\e6bf";
+}
+
+.icon-tuichu:before {
+ content: "\e6c0";
+}
+
+.icon-jiaoyidingdan:before {
+ content: "\e6c1";
+}
+
+.icon-sousuo4:before {
+ content: "\e6c4";
+}
+
+.icon-xuanzhong5:before {
+ content: "\e6c6";
+}
+
+.icon-VIP2:before {
+ content: "\e6b8";
+}
+
+.icon-pinzhong:before {
+ content: "\e6a2";
+}
+
+.icon-hanghuo:before {
+ content: "\e6a3";
+}
+
+.icon-zhifa:before {
+ content: "\e6b6";
+}
+
+.icon-dijia:before {
+ content: "\e6b7";
+}
+
+.icon-gerenzhongxin-xuanzhong:before {
+ content: "\e6ae";
+}
+
+.icon-xuanzhong4:before {
+ content: "\e6af";
+}
+
+.icon-zanwumiaosha:before {
+ content: "\e6b0";
+}
+
+.icon-shangchuantupian:before {
+ content: "\e6b3";
+}
+
+.icon-fuwu:before {
+ content: "\e6b4";
+}
+
+.icon-tuikuantishi:before {
+ content: "\e6b5";
+}
+
+.icon-erweima-youxia:before {
+ content: "\e6ad";
+}
+
+.icon-erweimabianjiao:before {
+ content: "\e6ac";
+}
+
+.icon-weixindenglu1:before {
+ content: "\e6aa";
+}
+
+.icon-zhanghaodenglu1:before {
+ content: "\e6ab";
+}
+
+.icon-shangjiashijian:before {
+ content: "\e6a9";
+}
+
+.icon-jiageshaixuan:before {
+ content: "\e6a7";
+}
+
+.icon-gengduofenlei:before {
+ content: "\e6a8";
+}
+
+.icon-weixuan:before {
+ content: "\e6a6";
+}
+
+.icon-xuanzhong11:before {
+ content: "\e6a5";
+}
+
+.icon-pingjia:before {
+ content: "\e6a4";
+}
+
+.icon-guanbi4:before {
+ content: "\e6a0";
+}
+
+.icon-pinzhongqiquan:before {
+ content: "\e69d";
+}
+
+.icon-dijiachangxuan:before {
+ content: "\e69e";
+}
+
+.icon-zhengpinhanghuo:before {
+ content: "\e69f";
+}
+
+.icon-dizhi-tianjia:before {
+ content: "\e696";
+}
+
+.icon-shanchu2:before {
+ content: "\e69c";
+}
+
+.icon-yue:before {
+ content: "\e699";
+}
+
+.icon-weixinzhifu1:before {
+ content: "\e69a";
+}
+
+.icon-shangpinshuliang-jian:before {
+ content: "\e698";
+}
+
+.icon-shangpinshuliang-jia:before {
+ content: "\e697";
+}
+
+.icon-xuanzhong3:before {
+ content: "\e693";
+}
+
+.icon-dizhixiala:before {
+ content: "\e694";
+}
+
+.icon-jinru1:before {
+ content: "\e695";
+}
+
+.icon-shenqingtuikuan:before {
+ content: "\e692";
+}
+
+.icon-peihuo:before {
+ content: "\e68d";
+}
+
+.icon-xiadan:before {
+ content: "\e68e";
+}
+
+.icon-wancheng:before {
+ content: "\e68f";
+}
+
+.icon-fukuan:before {
+ content: "\e690";
+}
+
+.icon-fahuo:before {
+ content: "\e691";
+}
+
+.icon-saoma:before {
+ content: "\e68c";
+}
+
+.icon-tishi:before {
+ content: "\e68b";
+}
+
+.icon-xiala2:before {
+ content: "\e682";
+}
+
+.icon-VIP1:before {
+ content: "\e68a";
+}
+
+.icon-yishoucang:before {
+ content: "\e683";
+}
+
+.icon-shoucang2:before {
+ content: "\e686";
+}
+
+.icon-kefu2:before {
+ content: "\e689";
+}
+
+.icon-fapiao:before {
+ content: "\e680";
+}
+
+.icon-fapiaoguanli:before {
+ content: "\e681";
+}
+
+.icon-jinru:before {
+ content: "\e67e";
+}
+
+.icon-sousuo3:before {
+ content: "\e67b";
+}
+
+.icon-dingbu-gouwuche:before {
+ content: "\e67a";
+}
+
+.icon-huidaodingbu:before {
+ content: "\e678";
+}
+
+.icon-cedaohang-gouwuche:before {
+ content: "\e676";
+}
+
+.icon-weixin4:before {
+ content: "\e675";
+}
+
+.icon-lianxikefu:before {
+ content: "\e672";
+}
+
+.icon-zuo-miaosha:before {
+ content: "\e670";
+}
+
+.icon-you-miaosha:before {
+ content: "\e671";
+}
+
+.icon-zuo:before {
+ content: "\e66d";
+}
+
+.icon-you:before {
+ content: "\e66f";
+}
+
+.icon-shoucangbenzhan:before {
+ content: "\e66c";
+}
+
+.icon-lianxishangjia:before {
+ content: "\e668";
+}
+
+.icon-dingwei:before {
+ content: "\e667";
+}
+
+.icon-fenlei2:before {
+ content: "\e663";
+}
+
+.icon-wode:before {
+ content: "\e664";
+}
+
+.icon-shouye5:before {
+ content: "\e665";
+}
+
+.icon-gouwuche5:before {
+ content: "\e666";
+}
+
+.icon-jianhao1:before {
+ content: "\e661";
+}
+
+.icon-jiahao1:before {
+ content: "\e662";
+}
+
+.icon-yanzhengma1:before {
+ content: "\e65f";
+}
+
+.icon-shouji:before {
+ content: "\e660";
+}
+
+.icon-cha:before {
+ content: "\e658";
+}
+
+.icon-shoujihao:before {
+ content: "\e659";
+}
+
+.icon-qiye:before {
+ content: "\e65b";
+}
+
+.icon-yonghu3:before {
+ content: "\e65c";
+}
+
+.icon-yanzhengma:before {
+ content: "\e65d";
+}
+
+.icon-shangpin:before {
+ content: "\e653";
+}
+
+.icon-qiandao2:before {
+ content: "\e65a";
+}
+
+.icon-yaoqing:before {
+ content: "\ea39";
+}
+
+.icon-tuihuozhong:before {
+ content: "\e64f";
+}
+
+.icon-shenhezhong1:before {
+ content: "\e650";
+}
+
+.icon-daituihuo:before {
+ content: "\e652";
+}
+
+.icon-yihexiao:before {
+ content: "\e75f";
+}
+
+.icon-yijujue1:before {
+ content: "\e6a1";
+}
+
+.icon-gengduo1:before {
+ content: "\e674";
+}
+
+.icon-tuikuan:before {
+ content: "\e657";
+}
+
+.icon-xiaoxi:before {
+ content: "\e64b";
+}
+
+.icon-erweima1:before {
+ content: "\e647";
+}
+
+.icon-kefu1:before {
+ content: "\e648";
+}
+
+.icon-guanzhu:before {
+ content: "\e645";
+}
+
+.icon-xiangji:before {
+ content: "\e6bb";
+}
+
+.icon-zhuyi-copy:before {
+ content: "\e688";
+}
+
+.icon-pingfen:before {
+ content: "\e649";
+}
+
+.icon-yingyongAPP_o:before {
+ content: "\eb88";
+}
+
+.icon-yizhan_o:before {
+ content: "\ebc6";
+}
+
+.icon-shaixuan:before {
+ content: "\e651";
+}
+
+.icon-shangjiadingdan:before {
+ content: "\e64a";
+}
+
+.icon-shouye4:before {
+ content: "\e64d";
+}
+
+.icon-jinbi2:before {
+ content: "\e63f";
+}
+
+.icon-jinbi:before {
+ content: "\e63c";
+}
+
+.icon-zuobiao:before {
+ content: "\e6de";
+}
+
+.icon-jianhao:before {
+ content: "\e753";
+}
+
+.icon-jiahao:before {
+ content: "\e754";
+}
+
+.icon-zhibojieshux:before {
+ content: "\e63d";
+}
+
+.icon-zhibo:before {
+ content: "\e63e";
+}
+
+.icon-VIP:before {
+ content: "\e751";
+}
+
+.icon-tuiguang:before {
+ content: "\e63b";
+}
+
+.icon-geren1:before {
+ content: "\e750";
+}
+
+.icon-gouwuche4:before {
+ content: "\e74f";
+}
+
+.icon-fenlei1:before {
+ content: "\e74e";
+}
+
+.icon-shouye3:before {
+ content: "\e74c";
+}
+
+.icon-geren:before {
+ content: "\e74b";
+}
+
+.icon-gouwuche3:before {
+ content: "\e74a";
+}
+
+.icon-fenlei:before {
+ content: "\e749";
+}
+
+.icon-shouye2:before {
+ content: "\e748";
+}
+
+.icon-mzshopping:before {
+ content: "\e746";
+}
+
+.icon-gongneng:before {
+ content: "\e63a";
+}
+
+.icon-gerenzhongxin-copy:before {
+ content: "\ebc0";
+}
+
+.icon-shouye1-copy:before {
+ content: "\ebc1";
+}
+
+.icon-gerenzhongxin:before {
+ content: "\e636";
+}
+
+.icon-shouye1:before {
+ content: "\e637";
+}
+
+.icon-gouwuche2:before {
+ content: "\e638";
+}
+
+.icon-fenleiyemian:before {
+ content: "\e639";
+}
+
+.icon-gouwuche2-copy:before {
+ content: "\ebc2";
+}
+
+.icon-fenleiyemian-copy:before {
+ content: "\ebc3";
+}
+
+.icon-tonghua:before {
+ content: "\e740";
+}
+
+.icon-youjian:before {
+ content: "\e677";
+}
+
+.icon-dadianhua01:before {
+ content: "\e623";
+}
+
+.icon-paihang:before {
+ content: "\e73e";
+}
+
+.icon-weizhi:before {
+ content: "\e62d";
+}
+
+.icon-paihang1:before {
+ content: "\e633";
+}
+
+.icon-shuoming1:before {
+ content: "\e673";
+}
+
+.icon-dianhau:before {
+ content: "\e634";
+}
+
+.icon-shijian:before {
+ content: "\e635";
+}
+
+.icon-huabanfuben:before {
+ content: "\e654";
+}
+
+.icon-jian:before {
+ content: "\e621";
+}
+
+.icon-jia:before {
+ content: "\e7e0";
+}
+
+.icon-xiugai:before {
+ content: "\e61f";
+}
+
+.icon-anniu_jiantouzhankai_o:before {
+ content: "\eb89";
+}
+
+.icon-jiantou_xiayiye_o:before {
+ content: "\eb8f";
+}
+
+.icon-jiantou_shangxiaqiehuan_o:before {
+ content: "\eb90";
+}
+
+.icon-shangxiazhankai_o:before {
+ content: "\eb9a";
+}
+
+.icon-dianhua_o:before {
+ content: "\ebaf";
+}
+
+.icon-yunshangchuan_o:before {
+ content: "\ebb3";
+}
+
+.icon-bingtu_o:before {
+ content: "\ebb4";
+}
+
+.icon-baoguo_huanbaohe_o:before {
+ content: "\ebb6";
+}
+
+.icon-baoguo_quxiaoshouhuo_o:before {
+ content: "\ebb7";
+}
+
+.icon-baoguo_shouhuo_o:before {
+ content: "\ebb8";
+}
+
+.icon-baoguo_lingjian_o:before {
+ content: "\ebb9";
+}
+
+.icon-baoguo_shouna_o:before {
+ content: "\ebbe";
+}
+
+.icon-xianxiazhifu:before {
+ content: "\e6e1";
+}
+
+.icon-icon_im_keyboard:before {
+ content: "\eb97";
+}
+
+.icon-tupian-:before {
+ content: "\e73f";
+}
+
+.icon-icon_im_face:before {
+ content: "\eb96";
+}
+
+.icon-yuezhifu:before {
+ content: "\e65e";
+}
+
+.icon-yuezhifu1:before {
+ content: "\e61a";
+}
+
+.icon-weixinzhifu:before {
+ content: "\e632";
+}
+
+.icon-zhifubao:before {
+ content: "\e61d";
+}
+
+.icon-haibao:before {
+ content: "\e73b";
+}
+
+.icon-weixin3:before {
+ content: "\e618";
+}
+
+.icon-crmeb1:before {
+ content: "\e739";
+}
+
+.icon-crmeb:before {
+ content: "\e735";
+}
+
+.icon-xuanzhong2:before {
+ content: "\e731";
+}
+
+.icon-shujutongji:before {
+ content: "\e732";
+}
+
+.icon-xiangxishuju:before {
+ content: "\e733";
+}
+
+.icon-gengduo:before {
+ content: "\e734";
+}
+
+.icon-up:before {
+ content: "\e617";
+}
+
+.icon-yonghu2:before {
+ content: "\e60a";
+}
+
+.icon-zhinengkefu-:before {
+ content: "\e616";
+}
+
+.icon-xiangshang1:before {
+ content: "\e622";
+}
+
+.icon-xiangxia2:before {
+ content: "\ebbd";
+}
+
+.icon-code_:before {
+ content: "\e723";
+}
+
+.icon-code_1:before {
+ content: "\e724";
+}
+
+.icon-phone_:before {
+ content: "\e725";
+}
+
+.icon-xiala:before {
+ content: "\e67f";
+}
+
+.icon-shezhi:before {
+ content: "\e619";
+}
+
+.icon-bianji1:before {
+ content: "\e614";
+}
+
+.icon-shoucang1:before {
+ content: "\e714";
+}
+
+.icon-jiazai:before {
+ content: "\e62c";
+}
+
+.icon-2:before {
+ content: "\e684";
+}
+
+.icon-tuandui:before {
+ content: "\e685";
+}
+
+.icon-jinbi1:before {
+ content: "\e655";
+}
+
+.icon-guanbi3:before {
+ content: "\e6c5";
+}
+
+.icon-wenti:before {
+ content: "\e758";
+}
+
+.icon-ziyuan-xianxing:before {
+ content: "\e8a4";
+}
+
+.icon-yonghu1:before {
+ content: "\e644";
+}
+
+.icon-dingdan:before {
+ content: "\e61e";
+}
+
+.icon-suozi:before {
+ content: "\e631";
+}
+
+.icon-quanxianguanlisuozi:before {
+ content: "\e6d2";
+}
+
+.icon-lingxing:before {
+ content: "\e6ff";
+}
+
+.icon-miaosha:before {
+ content: "\e6c3";
+}
+
+.icon-hebingxingzhuang:before {
+ content: "\e656";
+}
+
+.icon-kanjia1:before {
+ content: "\e613";
+}
+
+.icon-qiandai:before {
+ content: "\e6b1";
+}
+
+.icon-tongji:before {
+ content: "\e687";
+}
+
+.icon-erweima:before {
+ content: "\e607";
+}
+
+.icon-icon34:before {
+ content: "\e62b";
+}
+
+.icon-yinhangqia:before {
+ content: "\e72c";
+}
+
+.icon-yituikuan:before {
+ content: "\e6fd";
+}
+
+.icon-tuikuanzhong:before {
+ content: "\e6fe";
+}
+
+.icon-sousuo2:before {
+ content: "\e757";
+}
+
+.icon-caidan:before {
+ content: "\e62a";
+}
+
+.icon-icon25201:before {
+ content: "\e70d";
+}
+
+.icon-shitixing:before {
+ content: "\e6fb";
+}
+
+.icon-kongxinxing:before {
+ content: "\e6fc";
+}
+
+.icon-pintuanchenggong:before {
+ content: "\e6f9";
+}
+
+.icon-pintuanshibai:before {
+ content: "\e6fa";
+}
+
+.icon-laba:before {
+ content: "\e612";
+}
+
+.icon-xiaolian:before {
+ content: "\e60f";
+}
+
+.icon-kanjia:before {
+ content: "\e69b";
+}
+
+.icon-shuoming:before {
+ content: "\e630";
+}
+
+.icon-mingxi:before {
+ content: "\e6f7";
+}
+
+.icon-tishengfenzhi:before {
+ content: "\e6f8";
+}
+
+.icon-guanbi2:before {
+ content: "\e61c";
+}
+
+.icon-yuandianxiao:before {
+ content: "\e82f";
+}
+
+.icon-webicon318:before {
+ content: "\e6c2";
+}
+
+.icon-tianjiadizhi:before {
+ content: "\e640";
+}
+
+.icon-shanchu:before {
+ content: "\e628";
+}
+
+.icon-weixin2:before {
+ content: "\e604";
+}
+
+.icon-icon-test:before {
+ content: "\e6f6";
+}
+
+.icon-guanbi1:before {
+ content: "\e6f5";
+}
+
+.icon-shoucang:before {
+ content: "\e606";
+}
+
+.icon-kefu:before {
+ content: "\e6b2";
+}
+
+.icon-biankuang:before {
+ content: "\e6f4";
+}
+
+.icon-zhuangshixian:before {
+ content: "\e6f1";
+}
+
+.icon-jishuzhichi:before {
+ content: "\e6f3";
+}
+
+.icon-xuanzhong1:before {
+ content: "\e6ef";
+}
+
+.icon-weixuanzhong:before {
+ content: "\e6f0";
+}
+
+.icon-xiangshang:before {
+ content: "\ebbb";
+}
+
+.icon-xiangxia:before {
+ content: "\e8ca";
+}
+
+.icon-cuxiaoguanli:before {
+ content: "\e60e";
+}
+
+.icon-shanchu1:before {
+ content: "\e611";
+}
+
+.icon-caigou-xianxing:before {
+ content: "\e887";
+}
+
+.icon-caigou:before {
+ content: "\e888";
+}
+
+.icon-yingyongchengxu-xianxing:before {
+ content: "\e8a1";
+}
+
+.icon-yingyongchengxu:before {
+ content: "\e8a2";
+}
+
+.icon-shouye:before {
+ content: "\e8b9";
+}
+
+.icon-shouye-xianxing:before {
+ content: "\e8ba";
+}
+
+.icon-yonghu-xianxing:before {
+ content: "\e8c8";
+}
+
+.icon-yonghu:before {
+ content: "\e8c9";
+}
+
+.icon-sousuo:before {
+ content: "\e67d";
+}
+
+.icon-sousuo1:before {
+ content: "\e64c";
+}
+
+.icon-kefu_o:before {
+ content: "\eb63";
+}
+
+.icon-liwu_o:before {
+ content: "\eb65";
+}
+
+.icon-huobiliu_o:before {
+ content: "\eb9f";
+}
+
+.icon-jinbi_o:before {
+ content: "\eba1";
+}
+
+.icon-gerentouxiang_o:before {
+ content: "\ebac";
+}
+
+.icon-qunzu_o:before {
+ content: "\ebad";
+}
+
+.icon-shoucang_o:before {
+ content: "\ebae";
+}
+
+.icon-didiandingwei_o:before {
+ content: "\ebba";
+}
+
+.icon-xiangyou:before {
+ content: "\e679";
+}
+
+.icon-jingpintuijian:before {
+ content: "\e60d";
+}
+
+.icon-xinpin:before {
+ content: "\e610";
+}
+
+.icon-remen:before {
+ content: "\e67c";
+}
+
+.icon-xiangzuo:before {
+ content: "\ebbc";
+}
+
+.icon-ditu:before {
+ content: "\e906";
+}
+
+.icon-guanbi:before {
+ content: "\e62f";
+}
+
+.icon-liulan:before {
+ content: "\e629";
+}
+
+.icon-shenhezhong:before {
+ content: "\e6ce";
+}
+
+.icon-chongzhi:before {
+ content: "\e602";
+}
+
+.icon-iconfontguanbi:before {
+ content: "\e643";
+}
+
+.icon-zhekou:before {
+ content: "\e790";
+}
+
+.icon-duihao2:before {
+ content: "\e601";
+}
+
+.icon-duihao:before {
+ content: "\e64e";
+}
+
+.icon-jingyanzhi:before {
+ content: "\e62e";
+}
+
+.icon-wuliu:before {
+ content: "\e6f2";
+}
+
+.icon-pintuan-copy:before {
+ content: "\ebbf";
+}
+
+.icon-arrow:before {
+ content: "\e627";
+}
+
+.icon-pintuan:before {
+ content: "\e60c";
+}
+
+.icon-youhuiquan:before {
+ content: "\e6e4";
+}
+
+.icon-gouwuche1:before {
+ content: "\e642";
+}
+
+.icon-pailie:before {
+ content: "\e61b";
+}
+
+.icon-tupianpailie:before {
+ content: "\e620";
+}
+
+.icon-xiazai5:before {
+ content: "\e605";
+}
+
+.icon-weixin1:before {
+ content: "\e66e";
+}
+
+.icon-gouwuche:before {
+ content: "\e669";
+}
+
+.icon-jiantou:before {
+ content: "\e641";
+}
+
+.icon-huiyuan:before {
+ content: "\e60b";
+}
+
+.icon-xuanzhong:before {
+ content: "\e615";
+}
+
+.icon-complete:before {
+ content: "\e646";
+}
+
+.icon-xiala1:before {
+ content: "\e609";
+}
+
+.icon-dizhi:before {
+ content: "\e608";
+}
+
+.icon-weixin:before {
+ content: "\e600";
+}
+
+.icon-fenxiang:before {
+ content: "\e603";
+}
+
+.icon-bianji:before {
+ content: "\e6cc";
+}
+
+.icon-huangguan:before {
+ content: "\e624";
+}
+
+.icon-huangguan1:before {
+ content: "\e625";
+}
+
+.icon-huangguan2:before {
+ content: "\e626";
+}
diff --git a/static/images/1-001.png b/static/images/1-001.png
new file mode 100644
index 0000000..3c9ac39
Binary files /dev/null and b/static/images/1-001.png differ
diff --git a/static/images/1-002.png b/static/images/1-002.png
new file mode 100644
index 0000000..f05682b
Binary files /dev/null and b/static/images/1-002.png differ
diff --git a/static/images/2-001.png b/static/images/2-001.png
new file mode 100644
index 0000000..4a4ce02
Binary files /dev/null and b/static/images/2-001.png differ
diff --git a/static/images/2-002.png b/static/images/2-002.png
new file mode 100644
index 0000000..5069750
Binary files /dev/null and b/static/images/2-002.png differ
diff --git a/static/images/3-001.png b/static/images/3-001.png
new file mode 100644
index 0000000..8637fed
Binary files /dev/null and b/static/images/3-001.png differ
diff --git a/static/images/3-002.png b/static/images/3-002.png
new file mode 100644
index 0000000..5aa6e9c
Binary files /dev/null and b/static/images/3-002.png differ
diff --git a/static/images/4-001.png b/static/images/4-001.png
new file mode 100644
index 0000000..5fb279c
Binary files /dev/null and b/static/images/4-001.png differ
diff --git a/static/images/4-002.png b/static/images/4-002.png
new file mode 100644
index 0000000..e79368c
Binary files /dev/null and b/static/images/4-002.png differ
diff --git a/static/images/5-001.png b/static/images/5-001.png
new file mode 100644
index 0000000..12dbfe7
Binary files /dev/null and b/static/images/5-001.png differ
diff --git a/static/images/5-002.png b/static/images/5-002.png
new file mode 100644
index 0000000..ffd4e51
Binary files /dev/null and b/static/images/5-002.png differ
diff --git a/static/images/add.png b/static/images/add.png
new file mode 100644
index 0000000..890320c
Binary files /dev/null and b/static/images/add.png differ
diff --git a/static/images/address.png b/static/images/address.png
new file mode 100644
index 0000000..e7a9be2
Binary files /dev/null and b/static/images/address.png differ
diff --git a/static/images/arrow-close.png b/static/images/arrow-close.png
new file mode 100644
index 0000000..f44437d
Binary files /dev/null and b/static/images/arrow-close.png differ
diff --git a/static/images/arrow-good.png b/static/images/arrow-good.png
new file mode 100644
index 0000000..3e4dbb4
Binary files /dev/null and b/static/images/arrow-good.png differ
diff --git a/static/images/arrow-right.png b/static/images/arrow-right.png
new file mode 100644
index 0000000..3b96fc4
Binary files /dev/null and b/static/images/arrow-right.png differ
diff --git a/static/images/code_1.png b/static/images/code_1.png
new file mode 100644
index 0000000..9d98bd9
Binary files /dev/null and b/static/images/code_1.png differ
diff --git a/static/images/code_2.png b/static/images/code_2.png
new file mode 100644
index 0000000..9bb8369
Binary files /dev/null and b/static/images/code_2.png differ
diff --git a/static/images/combo_title.png b/static/images/combo_title.png
new file mode 100644
index 0000000..3e895c8
Binary files /dev/null and b/static/images/combo_title.png differ
diff --git a/static/images/coupon.png b/static/images/coupon.png
new file mode 100644
index 0000000..bde918f
Binary files /dev/null and b/static/images/coupon.png differ
diff --git a/static/images/couponlogo.png b/static/images/couponlogo.png
new file mode 100644
index 0000000..2176f5d
Binary files /dev/null and b/static/images/couponlogo.png differ
diff --git a/static/images/crown.png b/static/images/crown.png
new file mode 100644
index 0000000..6808231
Binary files /dev/null and b/static/images/crown.png differ
diff --git a/static/images/def_avatar.png b/static/images/def_avatar.png
new file mode 100644
index 0000000..116d488
Binary files /dev/null and b/static/images/def_avatar.png differ
diff --git a/static/images/del.png b/static/images/del.png
new file mode 100644
index 0000000..14ba4f8
Binary files /dev/null and b/static/images/del.png differ
diff --git a/static/images/edit.png b/static/images/edit.png
new file mode 100644
index 0000000..5d27d0c
Binary files /dev/null and b/static/images/edit.png differ
diff --git a/static/images/empty-box.png b/static/images/empty-box.png
new file mode 100644
index 0000000..b7f61ad
Binary files /dev/null and b/static/images/empty-box.png differ
diff --git a/static/images/f.png b/static/images/f.png
new file mode 100644
index 0000000..bc4802a
Binary files /dev/null and b/static/images/f.png differ
diff --git a/static/images/headwear.png b/static/images/headwear.png
new file mode 100644
index 0000000..6808231
Binary files /dev/null and b/static/images/headwear.png differ
diff --git a/static/images/horn.png b/static/images/horn.png
new file mode 100644
index 0000000..80de145
Binary files /dev/null and b/static/images/horn.png differ
diff --git a/static/images/images.lnk b/static/images/images.lnk
new file mode 100644
index 0000000..28e776a
Binary files /dev/null and b/static/images/images.lnk differ
diff --git a/static/images/min.png b/static/images/min.png
new file mode 100644
index 0000000..bcca93b
Binary files /dev/null and b/static/images/min.png differ
diff --git a/static/images/navbtn_close.gif b/static/images/navbtn_close.gif
new file mode 100644
index 0000000..ffe3d93
Binary files /dev/null and b/static/images/navbtn_close.gif differ
diff --git a/static/images/navbtn_open.gif b/static/images/navbtn_open.gif
new file mode 100644
index 0000000..61b379f
Binary files /dev/null and b/static/images/navbtn_open.gif differ
diff --git a/static/images/no_thing.png b/static/images/no_thing.png
new file mode 100644
index 0000000..4b4d458
Binary files /dev/null and b/static/images/no_thing.png differ
diff --git a/static/images/phone_1.png b/static/images/phone_1.png
new file mode 100644
index 0000000..9c63ead
Binary files /dev/null and b/static/images/phone_1.png differ
diff --git a/static/images/poster-close.png b/static/images/poster-close.png
new file mode 100644
index 0000000..189b6bc
Binary files /dev/null and b/static/images/poster-close.png differ
diff --git a/static/images/posterbackgd.png b/static/images/posterbackgd.png
new file mode 100644
index 0000000..b692920
Binary files /dev/null and b/static/images/posterbackgd.png differ
diff --git a/static/images/posterbackgd1.png b/static/images/posterbackgd1.png
new file mode 100644
index 0000000..c553fd1
Binary files /dev/null and b/static/images/posterbackgd1.png differ
diff --git a/static/images/presell_orderBg.png b/static/images/presell_orderBg.png
new file mode 100644
index 0000000..8c284b8
Binary files /dev/null and b/static/images/presell_orderBg.png differ
diff --git a/static/images/pricetitle.jpg b/static/images/pricetitle.jpg
new file mode 100644
index 0000000..ab055cd
Binary files /dev/null and b/static/images/pricetitle.jpg differ
diff --git a/static/images/recommend_cate.png b/static/images/recommend_cate.png
new file mode 100644
index 0000000..2b4be03
Binary files /dev/null and b/static/images/recommend_cate.png differ
diff --git a/static/images/refresh.png b/static/images/refresh.png
new file mode 100644
index 0000000..c0f2191
Binary files /dev/null and b/static/images/refresh.png differ
diff --git a/static/images/score.png b/static/images/score.png
new file mode 100644
index 0000000..85e59e7
Binary files /dev/null and b/static/images/score.png differ
diff --git a/static/images/share-info-wechat.png b/static/images/share-info-wechat.png
new file mode 100644
index 0000000..c6824d8
Binary files /dev/null and b/static/images/share-info-wechat.png differ
diff --git a/static/images/share-info.png b/static/images/share-info.png
new file mode 100644
index 0000000..87d0ab3
Binary files /dev/null and b/static/images/share-info.png differ
diff --git a/static/images/shuoming.png b/static/images/shuoming.png
new file mode 100644
index 0000000..8d3791f
Binary files /dev/null and b/static/images/shuoming.png differ
diff --git a/static/images/sort2.png b/static/images/sort2.png
new file mode 100644
index 0000000..fa647ef
Binary files /dev/null and b/static/images/sort2.png differ
diff --git a/static/images/spot.png b/static/images/spot.png
new file mode 100644
index 0000000..dc26b0c
Binary files /dev/null and b/static/images/spot.png differ
diff --git a/static/images/stop.png b/static/images/stop.png
new file mode 100644
index 0000000..6cd5b02
Binary files /dev/null and b/static/images/stop.png differ
diff --git a/static/images/svip.png b/static/images/svip.png
new file mode 100644
index 0000000..6f0c28d
Binary files /dev/null and b/static/images/svip.png differ
diff --git a/static/images/svip_user.png b/static/images/svip_user.png
new file mode 100644
index 0000000..017d147
Binary files /dev/null and b/static/images/svip_user.png differ
diff --git a/static/images/topic_cate.png b/static/images/topic_cate.png
new file mode 100644
index 0000000..1b59169
Binary files /dev/null and b/static/images/topic_cate.png differ
diff --git a/static/images/writeOff.jpg b/static/images/writeOff.jpg
new file mode 100644
index 0000000..6045cf6
Binary files /dev/null and b/static/images/writeOff.jpg differ
diff --git a/static/images/yh.png b/static/images/yh.png
new file mode 100644
index 0000000..7d89332
Binary files /dev/null and b/static/images/yh.png differ
diff --git a/store/getters.js b/store/getters.js
new file mode 100644
index 0000000..b4b247c
--- /dev/null
+++ b/store/getters.js
@@ -0,0 +1,28 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+export default {
+ token: state => state.app.token,
+ isLogin: state => !!state.app.token,
+ backgroundColor: state => state.app.backgroundColor,
+ globalData: state => state.app.globalData,
+ userInfo: state => state.app.userInfo || {},
+ uid:state => state.app.uid,
+ homeActive: state => state.app.homeActive,
+ home: state => state.app.home,
+ copyPwd: state => state.app.copyPwd,
+ viewColor: state => state.app.viewColor,
+ keyColor: state => state.app.keyColor,
+};
+// export default {
+// token: state => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrYWlmYS5jcm1lYi5uZXQiLCJhdWQiOiJrYWlmYS5jcm1lYi5uZXQiLCJpYXQiOjE1NzcwODM1MzQsIm5iZiI6MTU3NzA4MzUzNCwiZXhwIjoxNTc3MDk0MzM0LCJqdGkiOnsiaWQiOjExMCwidHlwZSI6InVzZXIifX0.U-i1pbdRjyXI1gr79Uq2XBPZ89T8f5Ai9jwrR8woTwE',
+// isLogin: state => true,
+// backgroundColor: state => state.app.backgroundColor,
+// userInfo: state => state.app.userInfo || {}
+// };
diff --git a/store/index.js b/store/index.js
new file mode 100644
index 0000000..2c77b20
--- /dev/null
+++ b/store/index.js
@@ -0,0 +1,22 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import Vue from "vue";
+import Vuex from "vuex";
+import modules from "./modules";
+import getters from "./getters";
+
+Vue.use(Vuex);
+const debug = process.env.NODE_ENV !== "production";
+
+export default new Vuex.Store({
+ modules,
+ getters,
+ strict: debug
+});
diff --git a/store/modules/app.js b/store/modules/app.js
new file mode 100644
index 0000000..91c302f
--- /dev/null
+++ b/store/modules/app.js
@@ -0,0 +1,112 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import {
+ getUserInfo
+} from "../../api/user.js";
+import {
+ LOGIN_STATUS,
+ UID
+} from '../../config/cache';
+import Cache from '../../utils/cache';
+import {
+ USER_INFO
+} from '../../config/cache';
+
+const state = {
+ token: Cache.get(LOGIN_STATUS) || null,
+ backgroundColor: "#fff",
+ userInfo: null,
+ uid: Cache.get(UID) || null,
+ globalData: uni.getStorageSync('GLOBAL_DATA') || {},
+ homeActive: false,
+ copyPwd: null,
+ pageFooter:uni.getStorageSync('pageFoot') || {},
+ keyColor: Cache.get('KEY_COLOR') || '_default',
+ viewColor: Cache.get('VIEW_COLOR') || '--view-theme: #E93323;--view-assist:#FF7612;--view-priceColor:#E93323;--view-bgColor:rgba(255, 118, 18,.1);--view-minorColor:rgba(233, 51, 35,.1);--view-bntColor11:#FDA923;--view-bntColor12:#FD6523;--view-bntColor21:#F11B09;--view-bntColor22:#F67A38;',
+};
+
+const mutations = {
+ LOGIN(state, opt) {
+ state.token = opt.token;
+ Cache.set(LOGIN_STATUS, opt.token, opt.time);
+ uni.removeStorageSync('auth_token');
+ },
+ SETUID(state,val){
+ state.uid = val;
+ Cache.set(UID, val);
+ },
+ UPDATE_LOGIN(state, token) {
+ state.token = token;
+ },
+ LOGOUT(state) {
+ state.token = null;
+ state.uid = null
+ Cache.clear(LOGIN_STATUS);
+ Cache.clear(UID);
+ },
+ BACKGROUND_COLOR(state, color) {
+ state.color = color;
+ document.body.style.backgroundColor = color;
+ },
+ UPDATE_USERINFO(state, userInfo) {
+ userInfo.isNew && Cache.set('is_new_user', '1')
+ state.userInfo = userInfo;
+ },
+ OPEN_HOME(state) {
+ state.homeActive = true;
+ },
+ CLOSE_HOME(state) {
+ state.homeActive = false;
+ },
+ PARSE_PWD(state, pwd) {
+ state.copyPwd = pwd;
+ },
+ VIEW_COLOR(state, color) {
+ Cache.set('VIEW_COLOR', color)
+ state.viewColor = color;
+ },
+ KEY_COLOR(state, key) {
+ Cache.set('KEY_COLOR', key)
+ state.keyColor = key;
+ },
+ GLOBAL_DATA(state, key) {
+ uni.setStorageSync('GLOBAL_DATA', key);
+ state.globalData = key;
+ },
+ FOOT_UPLOAD(state,data){
+ state.pageFooter = data
+ }
+};
+
+const actions = {
+ USERINFO({
+ state,
+ commit
+ }, force) {
+ if (state.userInfo !== null && !force)
+ return Promise.resolve(state.userInfo);
+ else
+ return new Promise(reslove => {
+ getUserInfo().then(res => {
+ commit("UPDATE_USERINFO", res.data);
+ Cache.set(USER_INFO, res.data);
+ reslove(res.data);
+ });
+ }).catch(() => {
+
+ });
+ }
+};
+
+export default {
+ state,
+ mutations,
+ actions
+};
diff --git a/store/modules/index.js b/store/modules/index.js
new file mode 100644
index 0000000..ce881aa
--- /dev/null
+++ b/store/modules/index.js
@@ -0,0 +1,13 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import app from "./app";
+export default {
+ app
+};
diff --git a/template.h5.html b/template.h5.html
new file mode 100644
index 0000000..50798a8
--- /dev/null
+++ b/template.h5.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+ <%= htmlWebpackPlugin.options.title %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..6328906
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+$uni-nothing-text: #999; //空白页文字
+
+$theme-color:#E93323;
+$theme-color-opacity:rgba(233,51,35,.6);
+$bg-star: #f62c2c;
+$bg-end:#f96e29;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:24upx;
+$uni-font-size-base:28upx;
+$uni-font-size-lg:32upx;
+
+/* 图片尺寸 */
+$uni-img-size-sm:40upx;
+$uni-img-size-base:52upx;
+$uni-img-size-lg:80upx;
+
+/* Border Radius */
+$uni-border-radius-sm: 4upx;
+$uni-border-radius-base: 6upx;
+$uni-border-radius-lg: 12upx;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 10px;
+$uni-spacing-row-base: 20upx;
+$uni-spacing-row-lg: 30upx;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 8upx;
+$uni-spacing-col-base: 16upx;
+$uni-spacing-col-lg: 24upx;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:40upx;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:36upx;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:30upx;
\ No newline at end of file
diff --git a/uni_modules/bt-cropper/changelog.md b/uni_modules/bt-cropper/changelog.md
new file mode 100644
index 0000000..1374799
--- /dev/null
+++ b/uni_modules/bt-cropper/changelog.md
@@ -0,0 +1,19 @@
+## 2.0.3(2022-08-21)
+修复 在vue3 程序中报错的问题
+新增 新增了图片初始化完成和加载失败的事件
+## 2.0.2(2022-08-18)
+新增 增加了原像素裁剪功能,即使用用户在裁剪框取景的大小作为输出像素,换句话说,输出的图片分辨率与输入图片分辨率一样
+新增 增加了change事件,会在图像和裁剪框位置变化后触发
+新增 增加了compress参数 压缩图片,压缩图片是为了提升流畅度,所以只会针对用户拖动的那张图片进行压缩,最终输出的图像品质并不会受到影响
+修复 用户在没有传入图像时报错的问题
+修复 ios在某些机型上拖动出现残留的问题
+## 2.0.1(2022-07-20)
+修复:ios打包成app的时候有几率裁剪不成功的问题
+## 2.0.0(2022-07-13)
+更新了2.0版本,增加了图片放大功能
+## bt-cropper 图片裁切
+========
+### 2022年7月13日 发布2.0版本
+* 1.完全重构了代码,并且优化了性能
+* 2.支持app
+* 3.修复demo在H5的情况下高度错误的问题
diff --git a/uni_modules/bt-cropper/components/bt-cropper/bt-cropper.vue b/uni_modules/bt-cropper/components/bt-cropper/bt-cropper.vue
new file mode 100644
index 0000000..06a2214
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/bt-cropper.vue
@@ -0,0 +1,881 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/bt-cropper/components/bt-cropper/iconfont.css b/uni_modules/bt-cropper/components/bt-cropper/iconfont.css
new file mode 100644
index 0000000..dd39483
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/iconfont.css
@@ -0,0 +1,22 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 3311610 */
+ src: url('//at.alicdn.com/t/font_3311610_7wh8injedpd.woff2?t=1649382821379') format('woff2'),
+ url('//at.alicdn.com/t/font_3311610_7wh8injedpd.woff?t=1649382821379') format('woff'),
+ url('//at.alicdn.com/t/font_3311610_7wh8injedpd.ttf?t=1649382821379') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-reset:before {
+ content: "\e611";
+}
+
+.icon-move:before {
+ content: "\e67b";
+}
diff --git a/uni_modules/bt-cropper/components/bt-cropper/utils/calcCropper.js b/uni_modules/bt-cropper/components/bt-cropper/utils/calcCropper.js
new file mode 100644
index 0000000..79fffa6
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/utils/calcCropper.js
@@ -0,0 +1,41 @@
+import ratio from "./ratio"
+import calcRightAndBottom from "./calcRightAndBottom"
+const defaultImagePosition = {
+ left: 0,
+ top: 0,
+ width: 9,
+ height: 16
+}
+const defaultTarget = {
+ width: 2,
+ height: 1
+}
+/**
+ * 计算初始的裁剪框位置
+ * @param {*} imagePosition
+ * @param {*} target
+ */
+export default function(imagePosition = defaultImagePosition, target = defaultTarget) {
+ const cropperPosition = {
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0,
+ width:0,
+ height:0
+ }
+ const targetRatio = ratio(target.width, target.height)
+ const imageRatio = ratio(imagePosition.width, imagePosition.height)
+ if(targetRatio>imageRatio){
+ cropperPosition.width = imagePosition.width
+ cropperPosition.height = cropperPosition.width/targetRatio
+ cropperPosition.left = imagePosition.left
+ cropperPosition.top = (imagePosition.height-cropperPosition.height)/2+imagePosition.top
+ }else{
+ cropperPosition.height = imagePosition.height
+ cropperPosition.width = cropperPosition.height * targetRatio
+ cropperPosition.left = (imagePosition.width - cropperPosition.width)/2 + imagePosition.left
+ cropperPosition.top = imagePosition.top
+ }
+ return calcRightAndBottom(cropperPosition)
+}
diff --git a/uni_modules/bt-cropper/components/bt-cropper/utils/calcImagePosition.js b/uni_modules/bt-cropper/components/bt-cropper/utils/calcImagePosition.js
new file mode 100644
index 0000000..122b626
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/utils/calcImagePosition.js
@@ -0,0 +1,23 @@
+import calcRightAndBottom from "./calcRightAndBottom"
+const defaultPosition = {
+ left: 0,
+ top: 0,
+ width: 0,
+ height: 0
+}
+const defaultTransfrom = {
+ imgTranslateX: 0,
+ imgTranslateY: 0,
+ imgScale: 1
+}
+// 先默认变换原点在中间
+export default function(imagePosition = defaultPosition, transfrom = defaultTransfrom) {
+ const width = imagePosition.width * transfrom.imgScale
+ const height = imagePosition.height * transfrom.imgScale
+ return calcRightAndBottom({
+ left: (imagePosition.left + transfrom.imgTranslateX) - (width - imagePosition.width) / 2,
+ top: (imagePosition.top + transfrom.imgTranslateY) - (height - imagePosition.height) / 2,
+ width,
+ height
+ })
+}
diff --git a/uni_modules/bt-cropper/components/bt-cropper/utils/calcImageSize.js b/uni_modules/bt-cropper/components/bt-cropper/utils/calcImageSize.js
new file mode 100644
index 0000000..dd9bd22
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/utils/calcImageSize.js
@@ -0,0 +1,27 @@
+import ratio from "./ratio.js"
+export default function(imageInfo, container = {
+ width: 9,
+ height: 16
+}) {
+ const containerRatio = ratio(container.width, container.height)
+ const imageRatio = ratio(imageInfo.width, imageInfo.height)
+ if (containerRatio > imageRatio) {
+ const width = container.height * imageRatio
+ const height = container.height
+ return {
+ width,
+ height,
+ left: (container.width - width) / 2,
+ top: 0,
+ }
+ } else {
+ const width = container.width
+ const height = container.width / imageRatio
+ return {
+ width,
+ height,
+ left: 0,
+ top: (container.height - height) / 2
+ }
+ }
+}
diff --git a/uni_modules/bt-cropper/components/bt-cropper/utils/calcPointDistance.js b/uni_modules/bt-cropper/components/bt-cropper/utils/calcPointDistance.js
new file mode 100644
index 0000000..42b164a
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/utils/calcPointDistance.js
@@ -0,0 +1,12 @@
+/**
+ * 计算两点之间距离
+ * @param {*} point1
+ * @param {*} point2
+ */
+export default function(point1 = [0, 0], point2 = [0, 0]) {
+ const X1 = point1[0],
+ X2 = point2[0],
+ Y1 = point1[1],
+ Y2 = point2[1];
+ return Math.sqrt(Math.pow(X1 - X2, 2) + Math.pow(Y1 - Y2, 2))
+}
diff --git a/uni_modules/bt-cropper/components/bt-cropper/utils/calcRightAndBottom.js b/uni_modules/bt-cropper/components/bt-cropper/utils/calcRightAndBottom.js
new file mode 100644
index 0000000..3cb5e03
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/utils/calcRightAndBottom.js
@@ -0,0 +1,7 @@
+export default function(position) {
+ return {
+ ...position,
+ right: position.left + position.width,
+ bottom: position.top + position.height
+ }
+}
diff --git a/uni_modules/bt-cropper/components/bt-cropper/utils/ratio.js b/uni_modules/bt-cropper/components/bt-cropper/utils/ratio.js
new file mode 100644
index 0000000..94552fc
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/utils/ratio.js
@@ -0,0 +1,3 @@
+export default function(width=2,height=1){
+ return width/height
+}
\ No newline at end of file
diff --git a/uni_modules/bt-cropper/components/bt-cropper/utils/tools.js b/uni_modules/bt-cropper/components/bt-cropper/utils/tools.js
new file mode 100644
index 0000000..9bb166c
--- /dev/null
+++ b/uni_modules/bt-cropper/components/bt-cropper/utils/tools.js
@@ -0,0 +1,31 @@
+export function getTouchPoints(touchs) {
+ return Array.from(touchs).map(ev => {
+ return [ev.clientX, ev.clientY]
+ })
+}
+// 函数防抖
+export function debounce(fn, wait = 200) {
+ var timer = null;
+ return function (){
+ if (timer !== null) {
+ clearTimeout(timer);
+ }
+ timer = setTimeout(fn.bind(this), wait);
+ }
+}
+
+/**
+ * @description 睡眠
+ * @param {number} time 等待时间毫秒数
+ */
+export function sleep(time = 200) {
+ return new Promise(resolve => {
+ setTimeout(resolve, time)
+ })
+}
+
+export function log(message,type='log'){
+ if(process.env.NODE_ENV === 'development'){
+ console[type](message)
+ }
+}
diff --git a/uni_modules/bt-cropper/package.json b/uni_modules/bt-cropper/package.json
new file mode 100644
index 0000000..7fb5480
--- /dev/null
+++ b/uni_modules/bt-cropper/package.json
@@ -0,0 +1,84 @@
+{
+ "id": "bt-cropper",
+ "displayName": "bt-cropper图片裁剪插件",
+ "version": "2.0.3",
+ "description": "一款好用的图片裁剪插件",
+ "keywords": [
+ "图片",
+ "图片裁剪",
+ "图片裁剪",
+ "头像裁剪",
+ "cropper"
+ ],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.2.1"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": "1097122362"
+ },
+ "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": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "n",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u"
+ },
+ "快应用": {
+ "华为": "n",
+ "联盟": "n"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/bt-cropper/readme.md b/uni_modules/bt-cropper/readme.md
new file mode 100644
index 0000000..61975c4
--- /dev/null
+++ b/uni_modules/bt-cropper/readme.md
@@ -0,0 +1,114 @@
+
+
+## bt-cropper 图片裁切
+> **组件名:bt-cropper**
+---
+### 2022年7月13日
+### 2.0版本发布啦!! 完全重构了代码,代码可读性更强 用户体验更好了
+---
+图片裁切组件,在页面中裁切图片,输出裁切后的图片
+### [在线体验](https://static-a3b890b4-7cb2-4b29-aa78-e652572bdef6.bspapp.com/#/)
+
+> **注意事项**
+> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
+> - 组件需要依赖 `sass` 插件 ,请自行手动安装
+> - `bt-cropper` 并不能完全阻止页面滚动,可在使用 `bt-cropper` 的页面手动去做一些处理,禁止页面滚动,请在`pages.json`中使用他的页面添加`"disableScroll": true`
+> - 容器使用百分比布局,所以包裹层需要手动指定高度,推荐设定为`100vh`
+> - 目前只适配了H5和微信小程序,其他平台暂未适配,如有需要可以留言或者自行修改代码
+> - 如使用过程中有任何问题,或者您有一些好的建议,欢迎联系作者微信:1097122362
+
+### 插件亮点
+ * 以组件形式使用,可以方便地与你的业务集成,你甚至可以将它放在一个弹窗或者对话框里面给用户使用
+ * 支持按比例缩放和双指缩放
+ * 丰富的动画,支持调整后自动缩放,试过你就知道有多好用了
+ * 支持一键导入插件
+
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+### 基本用法
+
+**示例**
+
+```html
+
+
+
+
+
+
+
+
+
+```
+
+
+```javascript
+export default {
+ methods:{
+ crop(){
+ // 通过组件定义的ref调用cropper方法,返回一个promise对象
+ this.$refs.cropper.crop().then(([err,res])=>{
+ if(!err){
+ console.log(res)
+ }else{
+ console.err(err)
+ }
+ })
+ }
+ }
+}
+
+```
+
+### 限定裁切比例
+
+bt-cropper,指定ratio即可设置裁切框的宽高比,如果你想让用户自由缩放,将ratio设置为0即可
+
+**示例**
+
+```html
+
+
+
+
+```
+
+## API
+
+### cropper Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:|:-:|
+|ratio|number|0|裁切图像的宽高比,0表示自由比例|
+|dWidth|number|0|生成的图片的宽度,单位:px,如果传入0的话就是按原像素的比例裁剪,也就是说,输出图片的清晰度和输入图片的清晰度一样|
+|imageSrc|String|''|原图的路径,支持本地路径和网络路径,如果是网络路径,小程序要注意配置下载域名,H5要注意跨域问题|
+|fileType|String|'jpg'|目标文件的类型,只支持 'jpg' 或 'png'。默认为 'jpg'|
+|quality|Number|1|图片的质量,取值范围为 (0, 1],不在范围内时当作1.0处理|
+|showGrid|Boolean|false|是否显示中心网格线,默认不显示|
+|initPosition|object|null|图片自定义的初始的位置,内容格式见change事件|
+|compress|Boolean|false|是否开启图像压缩,开启后,用户拖动的图片会被压缩,可以一定程度上提升用户操作的流畅度,但是最终输出的图片质量不会受到影响|
+|autoZoom|Boolean|true|是否开启操作结束后自动放大到窗口大小|
+
+
+### cropper Methods
+
+|方法名称|说明|参数|
+|:-:|:-:|:-:|
+|crop|裁剪图片|crop() ,开始绘制并开始裁剪图片,返回Promise对象|
+|resetCropper|重置裁剪框的位置和大小到初始的位置和大小|-|
+|resetImage|重置裁剪框和图片的位置和大小到初始的位置和大小|-|
+
+### cropper Events
+
+|方法名称|说明|返回值|
+|:-:|:-:|:-:|
+|change|当裁剪框和图片的相对位置发生变化的时候触发,返回裁剪框与图片的相对位置|ev={left:number,top:number,width:number,height:number}|
+|load|当图片加载成功并初始化完成时触发| - |
+|loadFail|当图片加载失败时触发| - |
+|cropStart|当裁开始时触发| - |
+|cropEnd|当裁结束时触发|ev=[err, res]|
+## 帮助
+在使用中如遇到无法解决的问题,请提 [Issues](https://gitee.com/xiaojiang1996/better-uni-cropper/issues) 或者加我 微信:1097122362。
diff --git a/uni_modules/uni-popup/changelog.md b/uni_modules/uni-popup/changelog.md
new file mode 100644
index 0000000..99454ba
--- /dev/null
+++ b/uni_modules/uni-popup/changelog.md
@@ -0,0 +1,37 @@
+## 1.6.2(2021-08-24)
+- 新增 支持国际化
+## 1.6.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.6.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.5.0(2021-06-23)
+- 新增 mask-click 遮罩层点击事件
+## 1.4.5(2021-06-22)
+- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.4(2021-06-18)
+- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.3(2021-06-08)
+- 修复 错误的 watch 字段
+- 修复 safeArea 属性不生效的问题
+- 修复 点击内容,再点击遮罩无法关闭的Bug
+## 1.4.2(2021-05-12)
+- 新增 组件示例地址
+## 1.4.1(2021-04-29)
+- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题
+## 1.4.0 (2021-04-29)
+- 新增 type 属性的 left\right 值,支持左右弹出
+- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗
+- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色
+- 新增 safeArea 属性,是否适配底部安全区
+- 修复 App\h5\微信小程序底部安全区占位不对的Bug
+- 修复 App 端弹出等待的Bug
+- 优化 提升低配设备性能,优化动画卡顿问题
+- 优化 更简单的组件自定义方式
+## 1.2.9(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 1.2.8(2021-02-05)
+- 调整为uni_modules目录规范
+## 1.2.7(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持 PC 端
+- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端
diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
new file mode 100644
index 0000000..6ef26a2
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ this.$once('hook:beforeDestroy', () => {
+ document.removeEventListener('keyup', listener)
+ })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
new file mode 100644
index 0000000..291634c
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
new file mode 100644
index 0000000..f4c85e2
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
new file mode 100644
index 0000000..705902d
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
@@ -0,0 +1,185 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/uni_modules/uni-popup/components/uni-popup/i18n/en.json
new file mode 100644
index 0000000..7f1bd06
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/en.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "cancel",
+ "uni-popup.ok": "ok",
+ "uni-popup.placeholder": "pleace enter",
+ "uni-popup.title": "Hint",
+ "uni-popup.shareTitle": "Share to"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/uni_modules/uni-popup/components/uni-popup/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
new file mode 100644
index 0000000..5e3003c
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "确定",
+ "uni-popup.placeholder": "请输入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
new file mode 100644
index 0000000..13e39eb
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "確定",
+ "uni-popup.placeholder": "請輸入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/keypress.js b/uni_modules/uni-popup/components/uni-popup/keypress.js
new file mode 100644
index 0000000..62dda46
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ // this.$once('hook:beforeDestroy', () => {
+ // document.removeEventListener('keyup', listener)
+ // })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-popup/components/uni-popup/popup.js b/uni_modules/uni-popup/components/uni-popup/popup.js
new file mode 100644
index 0000000..c4e5781
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/popup.js
@@ -0,0 +1,26 @@
+
+export default {
+ data() {
+ return {
+
+ }
+ },
+ created(){
+ this.popup = this.getParent()
+ },
+ methods:{
+ /**
+ * 获取父元素实例
+ */
+ getParent(name = 'uniPopup') {
+ let parent = this.$parent;
+ let parentName = parent.$options.name;
+ while (parentName !== name) {
+ parent = parent.$parent;
+ if (!parent) return false
+ parentName = parent.$options.name;
+ }
+ return parent;
+ },
+ }
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
new file mode 100644
index 0000000..59698b7
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
@@ -0,0 +1,403 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/package.json b/uni_modules/uni-popup/package.json
new file mode 100644
index 0000000..1385af7
--- /dev/null
+++ b/uni_modules/uni-popup/package.json
@@ -0,0 +1,89 @@
+{
+ "id": "uni-popup",
+ "displayName": "uni-popup 弹出层",
+ "version": "1.6.2",
+ "description": " Popup 组件,提供常用的弹层",
+ "keywords": [
+ "uni-ui",
+ "弹出层",
+ "弹窗",
+ "popup",
+ "弹框"
+ ],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-transition"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "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"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "u"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-popup/readme.md b/uni_modules/uni-popup/readme.md
new file mode 100644
index 0000000..d8a0899
--- /dev/null
+++ b/uni_modules/uni-popup/readme.md
@@ -0,0 +1,296 @@
+
+
+## Popup 弹出层
+> **组件名:uni-popup**
+> 代码块: `uPopup`
+> 关联组件:`uni-popup-dialog`,`uni-popup-message`,`uni-popup-share`,`uni-transition`
+
+
+弹出层组件,在应用中弹出一个消息提示窗口、提示框等
+
+
+> **注意事项**
+> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
+> - 组件需要依赖 `sass` 插件 ,请自行手动安装
+> - `uni-popup-message` 、 `uni-popup-dialog` 等扩展ui组件,需要和 `uni-popup` 配套使用,暂不支持单独使用
+> - `nvue` 中使用 `uni-popup` 时,尽量将组件置于其他元素后面,避免出现层级问题
+> - `uni-popup` 并不能完全阻止页面滚动,可在打开 `uni-popup` 的时候手动去做一些处理,禁止页面滚动
+> - 如果想在页面渲染完毕后就打开 `uni-popup` ,请在 `onReady` 或 `mounted` 生命周期内调用,确保组件渲染完毕
+> - 在微信小程序开发者工具中,启用真机调试,popup 会延时出现,是因为 setTimeout 在真机调试中的延时问题导致的,预览和发布小程序不会出现此问题
+> - 使用 `npm` 方式引入组件,如果确认引用正确,但是提示未注册组件或显示不正常,请尝试重新编译项目
+> - `uni-popup` 中尽量不要使用 `scroll-view` 嵌套过多的内容,可能会影响组件的性能,导致组件无法打开或者打开卡顿
+> - `uni-popup` 不会覆盖原生 tabbar 和原生导航栏
+> - 组件支持 nvue ,需要在 `manifest.json > app-plus` 节点下配置 `"nvueStyleCompiler" : "uni-app"`
+> - 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
+
+
+### 基本用法
+
+**示例**
+
+```html
+
+底部弹出 Popup
+```
+
+```javascript
+export default {
+ methods:{
+ open(){
+ // 通过组件定义的ref调用uni-popup方法 ,如果传入参数 ,type 属性将失效 ,仅支持 ['top','left','bottom','right','center']
+ this.$refs.popup.open('top')
+ }
+ }
+}
+
+```
+
+### 设置主窗口背景色
+
+在大多数场景下,并不需要设置 `background-color` 属性,因为`uni-popup`的主窗口默认是透明的,在向里面插入内容的时候 ,样式完全交由用户定制,如果设置了背景色 ,例如 `uni-popup-dialog` 中的圆角就很难去实现,不设置背景色,更适合用户去自由发挥。
+
+而也有特例,需要我们主动去设置背景色,例如 `type = 'bottom'` 的时候 ,在异型屏中遇到了底部安全区问题(如 iphone 11),因为 `uni-popup`的主要内容避开了安全区(设置`safe-area:true`),导致底部的颜色我们无法自定义,这时候使用 `background-color` 就可以解决这个问题。
+
+**示例**
+
+```html
+
+底部弹出 Popup
+```
+
+### 禁用打开动画
+在某些场景 ,可能不希望弹层有动画效果 ,只需要将 `animation` 属性设置为 `false` 即可以关闭动画。
+
+**示例**
+
+```html
+
+中间弹出 Popup
+```
+
+### 禁用点击遮罩关闭
+默认情况下,点击遮罩会自动关闭`uni-popup`,如不想点击关闭,只需将`mask-click`设置为`false`,这时候要关闭`uni-popup`,只能手动调用 `close` 方法。
+
+**示例**
+
+```html
+
+
+ Popup
+
+
+```
+
+```javascript
+export default {
+ data() {
+ return {}
+ },
+ onReady() {},
+ methods: {
+ open() {
+ this.$refs.popup.open('top')
+ },
+ close() {
+ this.$refs.popup.close()
+ }
+ }
+}
+
+```
+
+## API
+
+### Popup Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:|:-:|
+|animation|Boolean|true|是否开启动画|
+|type|String|'center'|弹出方式|
+|mask-click|Boolean|true|蒙版点击是否关闭弹窗|
+|background-color|String|'none'|主窗口背景色|
+|safe-area|Boolean|true|是否适配底部安全区|
+
+#### Type Options
+
+|属性名|说明|
+|:-:| :-:|
+|top|顶部弹出 |
+|center|居中弹出|
+|bottom|底部弹出|
+|left|左侧弹出|
+|right|右侧弹出|
+|message|预置样式 :消息提示|
+|dialog|预置样式 :对话框|
+|share|预置样式 :底部弹出分享示例 |
+
+
+### Popup Methods
+
+|方法称名 |说明|参数|
+|:-:|:-:|:-:|
+|open|打开弹出层|open(String:type) ,如果参数可代替 type 属性|
+|close|关闭弹出层 |-|
+
+
+### Popup Events
+
+|事件称名|说明|返回值|
+|:-:|:-:|:-:|
+|change|组件状态发生变化触发|e={show: true|false,type:当前模式}|
+|maskClick|点击遮罩层触发|-|
+
+
+## 扩展组件说明
+`uni-popup` 其实并没有任何样式,只提供基础的动画效果,给用户一个弹出层解决方案,仅仅是这样并不能满足开发需求,所以我们提供了三种基础扩展样式
+
+### uni-popup-message 提示信息
+
+将 `uni-popup` 的`type`属性改为 `message`,并引入对应组件即可使用消息提示 ,*该组件不支持单独使用*
+
+**示例**
+
+```html
+
+
+
+```
+
+### PopupMessage Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:|:-:|
+|type|String|success|消息提示主题|
+|message|String|-|消息提示文字|
+|duration|Number|3000|消息显示时间,超过显示时间组件自动关闭,设置为0 将不会关闭,需手动调用 close 方法关闭|
+
+#### Type Options
+
+|属性名|说明|
+|:-:| :-:|
+|success|成功 |
+|warn|警告|
+|error|失败|
+|info|消息|
+
+### PopupMessage Slots
+
+|名称|说明|
+|:-:|:-:|
+|default|消息内容,会覆盖 message 属性|
+
+### uni-popup-dialog 对话框
+
+将 `uni-popup` 的`type`属性改为 `dialog`,并引入对应组件即可使用对话框 ,*该组件不支持单独使用*
+
+**示例**
+
+```html
+
+
+
+
+```
+
+```javascript
+export default {
+ methods: {
+ open() {
+ this.$refs.popup.open()
+ },
+ /**
+ * 点击取消按钮触发
+ * @param {Object} done
+ */
+ close() {
+ // TODO 做一些其他的事情,before-close 为true的情况下,手动执行 close 才会关闭对话框
+ // ...
+ this.$refs.popup.close()
+ },
+ /**
+ * 点击确认按钮触发
+ * @param {Object} done
+ * @param {Object} value
+ */
+ confirm(value) {
+ // 输入框的值
+ console.log(value)
+ // TODO 做一些其他的事情,手动执行 close 才会关闭对话框
+ // ...
+ this.$refs.popup.close()
+ }
+ }
+}
+```
+
+### PopupDialog Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:|:-:|
+|type|String|success|对话框标题主题,可选值: success/warn/info/error|
+|mode|String|base| 对话框模式,可选值:base(提示对话框)/input(可输入对话框)|
+|title|String|-|对话框标题|
+|content|String|-|对话框内容,base模式下生效|
+|value| String\Number|-|输入框默认值,input模式下生效|
+|placeholder|String|-|输入框提示文字,input模式下生效|
+|before-close|Boolean|false | 是否拦截按钮事件,如为true,则不会关闭对话框,关闭需要手动执行 uni-popup 的 close 方法|
+
+#### PopupDialog Events
+
+|事件称名 |说明|返回值|
+|:-:|:-:|:-:|
+|close|点击dialog取消按钮触发|-|
+|confirm|点击dialog确定按钮触发|e={value:input模式下输入框的值}|
+
+### PopupDialog Slots
+
+|名称|说明|
+|:-:|:-:|
+|default|自定义内容,回覆盖原有的内容显示|
+
+### uni-popup-share 分享示例
+
+分享示例,不作为最终可使用的组件,只做为样式组件,供用户自行修改,`后续的开发计划是实现实际的分享逻辑,参数可配置`。
+
+将 `uni-popup` 的 `type` 属性改为 `share`,并引入对应组件即可使用 ,*该组件不支持单独使用*
+
+**示例**
+
+```html
+
+
+
+```
+
+### PopupShare Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:| :-: |
+|title|String|-|分享弹窗标题|
+|before-close|Boolean|false | 是否拦截按钮事件,如为true,则不会关闭对话框,关闭需要手动执行 uni-popup 的 close 方法|
+
+### PopupShare Events
+
+|事件称名|说明|返回值|
+|:-:|:-:|:-:|
+|select|选择触发|e = {item,index}:所选参数|
+
+**Tips**
+- share 分享组件,只是作为一个扩展示例,如果需要修改数据源,请到组件内修改
+
+## 帮助
+在使用中如遇到无法解决的问题,请提 [Issues](https://github.com/dcloudio/uni-ui/issues) 给我们。
+
+
+
+## 组件示例
+
+点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/popup/popup](https://hellouniapp.dcloud.net.cn/pages/extUI/popup/popup)
\ No newline at end of file
diff --git a/uni_modules/uni-transition/changelog.md b/uni_modules/uni-transition/changelog.md
new file mode 100644
index 0000000..dca8178
--- /dev/null
+++ b/uni_modules/uni-transition/changelog.md
@@ -0,0 +1,13 @@
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.1(2021-05-12)
+- 新增 示例地址
+- 修复 示例项目缺少组件的Bug
+## 1.1.0(2021-04-22)
+- 新增 通过方法自定义动画
+- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
+- 优化 动画触发逻辑,使动画更流畅
+- 优化 支持单独的动画类型
+- 优化 文档示例
+## 1.0.2(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/uni_modules/uni-transition/components/uni-transition/createAnimation.js
new file mode 100644
index 0000000..5f54365
--- /dev/null
+++ b/uni_modules/uni-transition/components/uni-transition/createAnimation.js
@@ -0,0 +1,128 @@
+// const defaultOption = {
+// duration: 300,
+// timingFunction: 'linear',
+// delay: 0,
+// transformOrigin: '50% 50% 0'
+// }
+// #ifdef APP-NVUE
+const nvueAnimation = uni.requireNativePlugin('animation')
+// #endif
+class MPAnimation {
+ constructor(options, _this) {
+ this.options = options
+ this.animation = uni.createAnimation(options)
+ this.currentStepAnimates = {}
+ this.next = 0
+ this.$ = _this
+
+ }
+
+ _nvuePushAnimates(type, args) {
+ let aniObj = this.currentStepAnimates[this.next]
+ let styles = {}
+ if (!aniObj) {
+ styles = {
+ styles: {},
+ config: {}
+ }
+ } else {
+ styles = aniObj
+ }
+ if (animateTypes1.includes(type)) {
+ if (!styles.styles.transform) {
+ styles.styles.transform = ''
+ }
+ let unit = ''
+ if(type === 'rotate'){
+ unit = 'deg'
+ }
+ styles.styles.transform += `${type}(${args+unit}) `
+ } else {
+ styles.styles[type] = `${args}`
+ }
+ this.currentStepAnimates[this.next] = styles
+ }
+ _animateRun(styles = {}, config = {}) {
+ let ref = this.$.$refs['ani'].ref
+ if (!ref) return
+ return new Promise((resolve, reject) => {
+ nvueAnimation.transition(ref, {
+ styles,
+ ...config
+ }, res => {
+ resolve()
+ })
+ })
+ }
+
+ _nvueNextAnimate(animates, step = 0, fn) {
+ let obj = animates[step]
+ if (obj) {
+ let {
+ styles,
+ config
+ } = obj
+ this._animateRun(styles, config).then(() => {
+ step += 1
+ this._nvueNextAnimate(animates, step, fn)
+ })
+ } else {
+ this.currentStepAnimates = {}
+ typeof fn === 'function' && fn()
+ this.isEnd = true
+ }
+ }
+
+ step(config = {}) {
+ // #ifndef APP-NVUE
+ this.animation.step(config)
+ // #endif
+ // #ifdef APP-NVUE
+ this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
+ this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
+ this.next++
+ // #endif
+ return this
+ }
+
+ run(fn) {
+ // #ifndef APP-NVUE
+ this.$.animationData = this.animation.export()
+ this.$.timer = setTimeout(() => {
+ typeof fn === 'function' && fn()
+ }, this.$.durationTime)
+ // #endif
+ // #ifdef APP-NVUE
+ this.isEnd = false
+ let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
+ if(!ref) return
+ this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
+ this.next = 0
+ // #endif
+ }
+}
+
+
+const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
+ 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
+ 'translateZ'
+]
+const animateTypes2 = ['opacity', 'backgroundColor']
+const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
+animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
+ MPAnimation.prototype[type] = function(...args) {
+ // #ifndef APP-NVUE
+ this.animation[type](...args)
+ // #endif
+ // #ifdef APP-NVUE
+ this._nvuePushAnimates(type, args)
+ // #endif
+ return this
+ }
+})
+
+export function createAnimation(option, _this) {
+ if(!_this) return
+ clearTimeout(_this.timer)
+ return new MPAnimation(option, _this)
+}
diff --git a/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
new file mode 100644
index 0000000..69ff9d9
--- /dev/null
+++ b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-transition/package.json b/uni_modules/uni-transition/package.json
new file mode 100644
index 0000000..0a709c9
--- /dev/null
+++ b/uni_modules/uni-transition/package.json
@@ -0,0 +1,83 @@
+{
+ "id": "uni-transition",
+ "displayName": "uni-transition 过渡动画",
+ "version": "1.2.0",
+ "description": "元素的简单过渡动画",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "动画",
+ "过渡",
+ "过渡动画"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "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"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-transition/readme.md b/uni_modules/uni-transition/readme.md
new file mode 100644
index 0000000..f398623
--- /dev/null
+++ b/uni_modules/uni-transition/readme.md
@@ -0,0 +1,397 @@
+
+
+## Transition 过渡动画
+> **组件名:uni-transition**
+> 代码块: `uTransition`
+
+
+元素过渡动画
+
+> **注意事项**
+> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
+> - 组件需要依赖 `sass` 插件 ,请自行手动安装
+> - rotate 旋转动画不需要填写 deg 单位,在小程序上填写单位动画不会执行
+> - NVUE 下修改宽高动画,不能定位到中心点
+> - 百度小程序下修改宽高 ,可能会影响其他动画,需注意
+> - nvue 不支持 costom-class , 请使用 styles
+> - 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
+
+### 基本用法
+
+在 ``template`` 中使用组件
+
+```html
+
+
+
+
+
+
+
+
+```
+
+### 样式覆盖
+
+**注意:`nvue` 不支持 `custom-class` 属性 ,需要使用 `styles` 属性进行兼容**
+
+使用 `custom-class` 属性绑定样式,可以自定义 `uni-transition` 的样式
+
+```html
+
+
+
+
+
+
+
+
+```
+
+
+如果使用 `styles` 注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
+
+```html
+
+
+
+
+
+
+```
+
+### 自定义动画
+当内置动画类型不能满足需求的时候 ,可以使用 `step()` 和 `run()` 自定义动画,入参以及具体用法参考下方属性说明
+
+`init()` 方法可以覆盖默认配置
+
+
+```html
+
+
+
+
+
+
+
+
+```
+
+
+## API
+
+### Transition Props
+
+|属性名 |类型 |默认值 |说明 |
+|:-: |:-: |:-: |:-:|
+|show |Boolean|false |控制组件显示或隐藏 |
+|mode-class |Array/String |- |内置过渡动画类型 |
+|custom-class |String |- |自定义类名 |
+|duration |Number |300 |过渡动画持续时间 |
+|styles |Object |- |组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red` |
+
+#### mode-class 内置过渡动画类型说明
+**格式为** :`'fade'` 或者 `['fade','slide-top']`
+
+|属性名 |说明 |
+|:-: |:-: |
+|fade |渐隐渐出过渡 |
+|slide-top |由上至下过渡 |
+|slide-right |由右至左过渡 |
+|slide-bottom |由下至上过渡 |
+|slide-left |由左至右过渡 |
+|zoom-in |由小到大过渡 |
+|zoom-out |由大到小过渡 |
+
+**注意**
+
+组合使用时,同一种类型相反的过渡动画如(slide-top、slide-bottom)同时使用时,只有最后一个生效
+
+### Transition Events
+
+|事件名 |说明 |返回值 |
+|:-: |:-: |:-: |
+|click |点击组件触发 |- |
+|change |过渡动画结束时触发 | e = {detail:true} |
+
+### Transition Methons
+
+|方法名|说明|参数|
+|:-:|:-:|:-:|
+|init()|手动初始化配置|Function(OBJECT:config)|
+|step()|动画队列|Function(OBJECT:type,OBJECT:config)|
+|run()|执行动画|Function(FUNCTION:callback) |
+
+### init(OBJECT:config)
+**通过 ref 调用方法**
+
+手动设置动画配置,需要在页面渲染完毕后调用
+
+```javascript
+this.$refs.ani.init({
+ duration: 1000,
+ timingFunction:'ease',
+ delay:500,
+ transformOrigin:'left center'
+})
+```
+
+### step(OBJECT:type,OBJECT:config) 动画队列
+**通过 ref 调用方法**
+
+调用 `step()` 来表示一组动画完成,`step` 第一个参数可以传入任意多个动画方法,一组动画中的所有动画会同时开始,一组动画完成后才会进行下一组动画。`step` 第二个参数可以传入一个跟 `uni.createAnimation()` 一样的配置参数用于指定当前组动画的配置。
+
+Tips
+- 第一个参数支持的动画参考下面的 `支持的动画`
+- 第二个参数参考下面的 `动画配置`,可省略,如果省略继承`init`的配置
+
+
+```javascript
+this.$refs.ani.step({
+ translateX: '100px'
+},{
+ duration: 1000,
+ timingFunction:'ease',
+ delay:500,
+ transformOrigin:'left center'
+})
+```
+
+### run(FUNCTION:callback) 执行动画
+**通过 ref 调用方法**
+
+在执行 `step()` 后,需要调用 `run()` 来运行动画 ,否则动画会一直等待
+
+`run()` 方法可以传入一个 `callback` 函数 ,会在所有动画执行完毕后回调
+
+```javascript
+this.$refs.ani.step({
+ translateX: '100px'
+})
+this.$refs.ani.run(()=>{
+ console.log('动画执行完毕')
+})
+
+```
+
+### 动画配置
+动画配置 , `init()` 与 `step()` 第二个参数配置相同 ,如果配置`step() `第二个参数,将会覆盖 `init()` 的配置
+
+|属性名|值|必填|默认值|说明|平台差异|
+|:-:|:-:|:-:|:-:|:-:|:-:|
+|duration|Number|否|400|动画持续时间,单位ms|-|
+|timingFunction|String|否|"linear"|定义动画的效果|-|
+|delay|Number|否|0|动画延迟时间,单位 ms|-|
+|needLayout|Boolean|否|false |动画执行是否影响布局|仅 nvue 支持|
+|transformOrigin|String |否|"center center"|设置 [transform-origin](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin)|-|
+
+
+### timingFunction 属性说明
+
+|值|说明|平台差异|
+|:-:|:-:|:-:|
+|linear|动画从头到尾的速度是相同的|-|
+|ease|动画以低速开始,然后加快,在结束前变慢|-|
+|ease-in| 动画以低速开始|-|
+|ease-in-out| 动画以低速开始和结束|-|
+|ease-out|动画以低速结束|-|
+|step-start|动画第一帧就跳至结束状态直到结束|nvue不支持|
+|step-end|动画一直保持开始状态,最后一帧跳到结束状态|nvue不支持|
+
+```javascript
+// init 配置
+this.$refs.ani.init({
+ duration: 1000,
+ timingFunction:'ease',
+ delay:500,
+ transformOrigin:'left center'
+})
+// step 配置
+this.$refs.ani.step({
+ translateX: '100px'
+},{
+ duration: 1000,
+ timingFunction:'ease',
+ delay:500,
+ transformOrigin:'left center'
+})
+```
+
+### 支持的动画
+动画方法
+
+如果同一个动画方法有多个值,多个值使用数组分隔
+
+```javascript
+this.$refs.ani.step({
+ width:'100px',
+ scale: [1.2,0.8],
+})
+```
+
+**样式:**
+
+|属性名|值|说明|平台差异|
+|:-:|:-:|:-:|:-:|
+|opacity|value|透明度,参数范围 0~1|-|
+|backgroundColor|color|颜色值|-|
+|width|length|长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值|-|
+|height|length|长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值|-|
+|top|length|长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值|nvue 不支持|
+|left|length|长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值|nvue 不支持|
+|bottom|length|长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值|nvue 不支持|
+|right|length|长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值|nvue 不支持|
+
+```javascript
+this.$refs.ani.step({
+ opacity: 1,
+ backgroundColor: '#ff5a5f',
+ widht:'100px',
+ height:'50rpx',
+})
+```
+
+**旋转:**
+
+旋转属性的值不需要填写单位
+
+|属性名|值|说明|平台差异 |
+|:-:|:-:|:-:|:-:|
+|rotate|deg|deg的范围-180~180,从原点顺时针旋转一个deg角度 |-|
+|rotateX|deg|deg的范围-180~180,在X轴旋转一个deg角度 |-|
+|rotateY|deg|deg的范围-180~180,在Y轴旋转一个deg角度 |-|
+|rotateZ|deg|deg的范围-180~180,在Z轴旋转一个deg角度 |nvue不支持|
+|rotate3d|x,y,z,deg| 同 [transform-function rotate3d](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d()) |nvue不支持|
+
+```javascript
+this.$refs.ani.step({
+ rotateX: 45,
+ rotateY: 45
+})
+```
+
+**缩放:**
+
+|属性名|值|说明|平台差异|
+|:-:|:-:|:-: |:-:|
+|scale|sx,[sy]|一个参数时,表示在X轴、Y轴同时缩放sx倍数;两个参数时表示在X轴缩放sx倍数,在Y轴缩放sy倍数|-|
+|scaleX|sx|在X轴缩放sx倍数|-|
+|scaleY|sy|在Y轴缩放sy倍数|-|
+|scaleZ|sz|在Z轴缩放sy倍数|nvue不支持|
+|scale3d|sx,sy,sz|在X轴缩放sx倍数,在Y轴缩放sy倍数,在Z轴缩放sz倍数|nvue不支持|
+
+```javascript
+this.$refs.ani.step({
+ scale: [1.2,0.8]
+})
+```
+
+**偏移:**
+
+|属性名|值|说明|平台差异|
+|:-:|:-:|:-:|:-:|
+|translate|tx,[ty]|一个参数时,表示在X轴偏移tx,单位px;两个参数时,表示在X轴偏移tx,在Y轴偏移ty,单位px。|-|
+|translateX|tx| 在X轴偏移tx,单位px|-|
+|translateY|ty| 在Y轴偏移tx,单位px|-|
+|translateZ|tz| 在Z轴偏移tx,单位px|nvue不支持|
+|translate3d|tx,ty,tz| 在X轴偏移tx,在Y轴偏移ty,在Z轴偏移tz,单位px|nvue不支持|
+
+```javascript
+this.$refs.ani.step({
+ translateX: '100px'
+})
+```
+
+
+
+## 组件示例
+
+点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/transition/transition](https://hellouniapp.dcloud.net.cn/pages/extUI/transition/transition)
\ No newline at end of file
diff --git a/utils/SubscribeMessage.js b/utils/SubscribeMessage.js
new file mode 100644
index 0000000..0ee3e05
--- /dev/null
+++ b/utils/SubscribeMessage.js
@@ -0,0 +1,112 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import {
+ SUBSCRIBE_MESSAGE
+} from '../config/cache.js';
+
+export function auth() {
+ let tmplIds = {};
+ let messageTmplIds = uni.getStorageSync(SUBSCRIBE_MESSAGE);
+ console.log(messageTmplIds,'messageTmplIds')
+ tmplIds = messageTmplIds ? messageTmplIds : {};
+ return tmplIds;
+}
+/**
+ * 支付成功后订阅消息id
+ * 订阅 订单支付成功 订单发货提醒(快递) 订单发货提醒(送货)
+ */
+export function openPaySubscribe() {
+ let tmplIds = auth();
+ return subscribe([
+ tmplIds.DELIVER_GOODS_CODE,
+ tmplIds.ORDER_DELIVER_SUCCESS,
+ tmplIds.ORDER_PAY_SUCCESS,
+ ]);
+}
+/**
+ * 到货通知id
+ * 订阅 到货通知
+ */
+export function arrivalSubscribe() {
+ let tmplIds = auth();
+ return subscribe([
+ tmplIds.PRODUCT_INCREASE
+ ]);
+}
+/**
+ * 订单相关订阅消息
+ * 送货 发货
+ */
+export function openOrderSubscribe() {
+ let tmplIds = auth();
+ return subscribe([
+ tmplIds.ORDER_DELIVER_SUCCESS,
+ tmplIds.DELIVER_GOODS_CODE,
+ ]);
+}
+
+/**
+ * 提现消息订阅
+ * 成功 和 失败 消息
+ */
+export function openExtrctSubscribe() {
+ let tmplIds = auth();
+ return subscribe([
+ tmplIds.EXTRACT_NOTICE
+ ]);
+}
+
+/**
+ * 订单退款
+ */
+export function openOrderRefundSubscribe() {
+ let tmplIds = auth();
+ return subscribe([tmplIds.REFUND_CONFORM_CODE]);
+}
+
+/**
+ * 充值成功
+ */
+export function openRechargeSubscribe() {
+ let tmplIds = auth();
+ return subscribe([tmplIds.USER_BALANCE_CHANGE]);
+}
+
+/**
+ * 提现
+ */
+export function openEextractSubscribe() {
+ let tmplIds = auth();
+ return subscribe([tmplIds.EXTRACT_NOTICE]);
+}
+
+/**
+ * 调起订阅界面
+ * array tmplIds 模板id
+ */
+export function subscribe(tmplIds) {
+ let wecaht = wx;
+ return new Promise((reslove, reject) => {
+ uni.requestSubscribeMessage({
+ tmplIds: tmplIds,
+ success(res) {
+ console.log(res,'requestSubscribeMessage')
+ return reslove(res);
+ },
+ fail(res) {
+ console.log(res,'fail')
+ return reslove(res);
+ },
+ complete(res){
+ console.log(res,'complete')
+ }
+ })
+ });
+}
diff --git a/utils/base64.js b/utils/base64.js
new file mode 100644
index 0000000..947a758
--- /dev/null
+++ b/utils/base64.js
@@ -0,0 +1,105 @@
+export default function Base64() {
+ // 私钥
+ let _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ // 加密
+ this.encode = function (input) {
+ var output = "";
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ var i = 0;
+ input = _utf8_encode(input);
+ while (i < input.length) {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+ output = output +
+ _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
+ _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
+ }
+ return output;
+ }
+ // 解密
+ this.decode = (input)=> {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+ if (input==undefined||input==null){
+
+ }else {
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+ while (i < input.length) {
+ enc1 = _keyStr.indexOf(input.charAt(i++));
+ enc2 = _keyStr.indexOf(input.charAt(i++));
+ enc3 = _keyStr.indexOf(input.charAt(i++));
+ enc4 = _keyStr.indexOf(input.charAt(i++));
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+ output = output + String.fromCharCode(chr1);
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+ }
+ output = _utf8_decode(output);
+ return output;
+ }
+
+ }
+ // private method for UTF-8 encoding
+ let _utf8_encode = (string)=> {
+ string = string.replace(/\r\n/g,"\n");
+ var utftext = "";
+ for (var n = 0; n < string.length; n++) {
+ var c = string.charCodeAt(n);
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ } else if((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ } else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ }
+ return utftext;
+ }
+ // private method for UTF-8 decoding
+ let _utf8_decode = (utftext)=> {
+ var string = "";
+ var i = 0;
+ var c = c1 = c2 = 0;
+ var c1 = 0;
+ var c2 = 0;
+ var c3 = 0;
+ while ( i < utftext.length ) {
+ c = utftext.charCodeAt(i);
+ if (c < 128) {
+ string += String.fromCharCode(c);
+ i++;
+ } else if((c > 191) && (c < 224)) {
+ c2 = utftext.charCodeAt(i+1);
+ string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+ i += 2;
+ } else {
+ c2 = utftext.charCodeAt(i+1);
+ c3 = utftext.charCodeAt(i+2);
+ string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 3;
+ }
+ }
+ return string;
+ }
+}
diff --git a/utils/cache.js b/utils/cache.js
new file mode 100644
index 0000000..2ba6237
--- /dev/null
+++ b/utils/cache.js
@@ -0,0 +1,153 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import { EXPIRE } from '../config/app';
+
+class Cache {
+ constructor(handler) {
+ this.cacheSetHandler = uni.setStorageSync;
+ this.cacheGetHandler = uni.getStorageSync;
+ this.cacheClearHandler = uni.removeStorageSync;
+ this.cacheExpire = '_expire_2019_12_17_18_44';
+ }
+ /**
+ * 获取当前时间戳
+ */
+ time()
+ {
+ return Math.round(new Date() / 1000);
+ }
+
+ /**
+ * 设置过期时间缓存
+ * @param {Object} key
+ * @param {Object} expire
+ */
+ setExpireCahe(key,expire)
+ {
+ expire = expire !== undefined ? expire : EXPIRE;
+ if (expire) {
+ this.cacheSetHandler(key + this.cacheExpire,this.time() + expire)
+ }
+ }
+
+ /**
+ * 缓存是否过期,过期自动删除
+ * @param {Object} key
+ * @param {Object} $bool true = 删除,false = 不删除
+ */
+ getExpireCahe(key,$bool)
+ {
+ try{
+ let time = this.cacheGetHandler(key + this.cacheExpire);
+ if (time) {
+ let newTime = parseInt(time);
+ if (time && time < this.time() && !Number.isNaN(newTime)) {
+ if ($bool === undefined || $bool === true) {
+ this.cacheClearHandler(key);
+ this.cacheClearHandler(key + this.cacheExpire);
+ }
+ return false;
+ } else
+ return true;
+ } else {
+ return !!this.cacheGetHandler(key);
+ }
+ }catch(e){
+ return false;
+ }
+ }
+
+ /**
+ * 设置缓存
+ * @param {Object} key
+ * @param {Object} data
+ */
+ set(key,data,expire){
+ if(typeof data === 'object')
+ data = JSON.stringify(data);
+ try{
+ this.setExpireCahe(key,expire);
+ return this.cacheSetHandler(key,data);
+ }catch(e){
+ return false;
+ }
+ }
+
+ /**
+ * 检测缓存是否存在
+ * @param {Object} key
+ */
+ has(key)
+ {
+ return this.getExpireCahe(key);
+ }
+
+ /**
+ * 获取缓存
+ * @param {Object} key
+ * @param {Object} $default
+ * @param {Object} expire
+ */
+ get(key,$default,expire){
+ try{
+ let isBe = this.getExpireCahe(key);
+ let data = this.cacheGetHandler(key);
+ if (data && isBe) {
+ if (typeof $default === 'boolean')
+ return JSON.parse(data);
+ else
+ return data;
+ } else {
+ if (typeof $default === 'function') {
+ let value = $default();
+ this.set(key,value,expire);
+ return value;
+ } else {
+ this.set(key,$default,expire);
+ return $default;
+ }
+ }
+ }catch(e){
+ return null;
+ }
+ }
+
+ /**
+ * 删除缓存
+ * @param {Object} key
+ */
+ clear(key)
+ {
+ try{
+ let cahceValue = this.cacheGetHandler(key + this.cacheExpire);
+ if(cahceValue)
+ this.cacheClearHandler(key + this.cacheExpire);
+ return this.cacheClearHandler(key);
+ }catch(e){
+ return false;
+ }
+ }
+
+ /**
+ * 清除过期缓存
+ */
+ clearOverdue()
+ {
+ // let cacheList = uni.getStorageInfoSync(),that = this;
+ // if (typeof cacheList.keys === 'object'){
+ // cacheList.keys.forEach(item=>{
+ // that.getExpireCahe(item);
+ // })
+ // }
+ }
+}
+
+
+export default new Cache;
\ No newline at end of file
diff --git a/utils/dialog.js b/utils/dialog.js
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/utils/dialog.js
@@ -0,0 +1 @@
+
diff --git a/utils/emoji.js b/utils/emoji.js
new file mode 100644
index 0000000..d057711
--- /dev/null
+++ b/utils/emoji.js
@@ -0,0 +1,107 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+export default [
+ 'em-tlj-1',
+ 'em-tlj-3',
+ 'em-tlj-4',
+ 'em-tlj-5',
+ 'em-tlj-6',
+ 'em-tlj-7',
+ 'em-tlj-8',
+ 'em-tlj-9',
+ 'em-tlj-10',
+ 'em-tlj-11',
+ 'em-tlj-12',
+ 'em-tlj-13',
+ 'em-tlj-14',
+ 'em-tlj-15',
+ 'em-tlj-16',
+ 'em-tlj-17',
+ 'em-tlj-18',
+ 'em-tlj-19',
+ 'em-tlj-20',
+ 'em-tlj-21',
+ 'em-tlj-22',
+ 'em-tlj-23',
+ 'em-tlj-24',
+ 'em-tlj-25',
+ 'em-tlj-26',
+ 'em-tlj-27',
+ 'em-tlj-28',
+ 'em-tlj-29',
+ 'em-tlj-30',
+ 'em-tlj-31',
+ 'em-tlj-32',
+ 'em-tlj-33',
+ 'em-tlj-34',
+ 'em-tlj-35',
+ 'em-tlj-36',
+ 'em-tlj-37',
+ 'em-tlj-38',
+ 'em-tlj-39',
+ 'em-tlj-40',
+ 'em-tlj-41',
+ 'em-tlj-42',
+ 'em-tlj-43',
+ 'em-tlj-44',
+ 'em-tlj-45',
+ 'em-tlj-46',
+ 'em-tlj-47',
+ 'em-tlj-48',
+ 'em-tlj-49',
+ 'em-tlj-50',
+ 'em-tlj-51',
+ 'em-tlj-52',
+ 'em-tlj-53',
+ 'em-tlj-54',
+ 'em-tlj-55',
+ 'em-tlj-56',
+ 'em-tlj-57',
+ 'em-tlj-58',
+ 'em-tlj-59',
+ 'em-tlj-60',
+ 'em-tlj-61',
+ 'em-tlj-62',
+ 'em-tlj-63',
+ 'em-tlj-64',
+ 'em-tlj-65',
+ 'em-tlj-66',
+ 'em-tlj-67',
+ 'em-tlj-68',
+ 'em-tlj-69',
+ 'em-tlj-70',
+ 'em-tlj-71',
+ 'em-tlj-72',
+ 'em-tlj-73',
+ 'em-tlj-74',
+ 'em-tlj-75',
+ 'em-tlj-76',
+ 'em-tlj-77',
+ 'em-tlj-78',
+ 'em-tlj-79',
+ 'em-tlj-80',
+ 'em-tlj-81',
+ 'em-tlj-82',
+ 'em-tlj-83',
+ 'em-tlj-84',
+ 'em-tlj-85',
+ 'em-tlj-86',
+ 'em-tlj-87',
+ 'em-tlj-88',
+ 'em-tlj-89',
+ 'em-tlj-90',
+ 'em-tlj-91',
+ 'em-tlj-92',
+ 'em-tlj-93',
+ 'em-tlj-94',
+ 'em-tlj-95',
+ 'em-tlj-96',
+];
+
diff --git a/utils/index.js b/utils/index.js
new file mode 100644
index 0000000..84ea39d
--- /dev/null
+++ b/utils/index.js
@@ -0,0 +1,142 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import {
+ spread
+} from "@/api/user";
+import Cache from "@/utils/cache";
+import Store from '@/store/index';
+
+export function configMap(args, init) {
+ if(Array.isArray(args)) {
+ return args.reduce((i, v)=>{
+ i[v] = () => Store.getters.globalData[v];
+ return i;
+ }, init || {})
+ }else{
+ return Object.keys(args).reduce((i, v)=>{
+ i[v] = () => {
+ const val = Store.getters.globalData[v];
+ return (val === undefined || val === null || val === '') ? args[v] : val;
+ };
+ return i;
+ }, init || {})
+ }
+}
+
+export function redirect(url){
+ uni.switchTab({
+ url,
+ fail(){
+ uni.redirectTo({
+ url
+ })
+ }
+ })
+}
+
+/**
+ * 转换商户跳转链接, 自动追加商户 id
+ * @param {string} path
+ * @param {int} mer_id
+ * @param {string} name 商户id 参数名, 默认 mer_id
+ */
+export function merPath(path, mer_id, name){
+ if(!mer_id) return path;
+ path += ((path.indexOf('?') > -1 ? '&' : '?') + (name || 'mer_id') + '=' + mer_id);
+ return path;
+}
+
+/**
+ * 绑定用户授权
+ * @param {Object} puid
+ */
+export function silenceBindingSpread() {
+
+ //#ifdef H5
+ let puid = Cache.get('spread');
+ //#endif
+
+ //#ifdef MP || APP-PLUS
+ let puid = getApp().globalData.spid;
+ if (!puid) {
+ puid = getApp().globalData.code;
+ }
+ //#endif
+
+ puid = parseInt(puid);
+ if (Number.isNaN(puid)) {
+ puid = 0;
+ }
+ if (puid) {
+
+ //#ifdef H5
+ Cache.clear('spread');
+ //#endif
+
+ //#ifdef MP || APP-PLUS
+ getApp().globalData.spid = 0;
+ getApp().globalData.code = 0;
+ //#endif
+
+
+ }
+}
+
+export function isWeixin() {
+ return navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1;
+}
+
+export function parseQuery() {
+ const res = {};
+
+ const query = (location.href.split("?")[1] || "")
+ .trim()
+ .replace(/^(\?|#|&)/, "");
+
+ if (!query) {
+ return res;
+ }
+
+ query.split("&").forEach(param => {
+ const parts = param.replace(/\+/g, " ").split("=");
+ const key = decodeURIComponent(parts.shift());
+ const val = parts.length > 0 ? decodeURIComponent(parts.join("=")) : null;
+
+ if (res[key] === undefined) {
+ res[key] = val;
+ } else if (Array.isArray(res[key])) {
+ res[key].push(val);
+ } else {
+ res[key] = [res[key], val];
+ }
+ });
+
+ return res;
+}
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+let token = ''
+try {
+ token = uni.getStorageSync('LOGIN_STATUS_TOKEN')
+} catch (error) {
+
+}
+// const VUE_APP_WS_URL = process.env.VUE_APP_WS_URL || `ws://${location.hostname}?type=user&token=${token}`;
+// const VUE_APP_WS_URL = `wss://mer.crmeb.net?type=user&token=${token}`
+export default parseQuery;
+
+
diff --git a/utils/permission.js b/utils/permission.js
new file mode 100644
index 0000000..e898dae
--- /dev/null
+++ b/utils/permission.js
@@ -0,0 +1,253 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+/// null = 未请求,1 = 已允许,0 = 拒绝|受限, 2 = 系统未开启
+var isIOS
+
+function album() {
+ var result = 0;
+ var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
+ var authStatus = PHPhotoLibrary.authorizationStatus();
+ if (authStatus === 0) {
+ result = null;
+ } else if (authStatus == 3) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(PHPhotoLibrary);
+ return result;
+}
+
+function camera() {
+ var result = 0;
+ var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
+ var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
+ if (authStatus === 0) {
+ result = null;
+ } else if (authStatus == 3) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(AVCaptureDevice);
+ return result;
+}
+
+function location() {
+ var result = 0;
+ var cllocationManger = plus.ios.import("CLLocationManager");
+ var enable = cllocationManger.locationServicesEnabled();
+ var status = cllocationManger.authorizationStatus();
+ if (!enable) {
+ result = 2;
+ } else if (status === 0) {
+ result = null;
+ } else if (status === 3 || status === 4) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(cllocationManger);
+ return result;
+}
+
+function push() {
+ var result = 0;
+ var UIApplication = plus.ios.import("UIApplication");
+ var app = UIApplication.sharedApplication();
+ var enabledTypes = 0;
+ if (app.currentUserNotificationSettings) {
+ var settings = app.currentUserNotificationSettings();
+ enabledTypes = settings.plusGetAttribute("types");
+ if (enabledTypes == 0) {
+ result = 0;
+ console.log("推送权限没有开启");
+ } else {
+ result = 1;
+ console.log("已经开启推送功能!")
+ }
+ plus.ios.deleteObject(settings);
+ } else {
+ enabledTypes = app.enabledRemoteNotificationTypes();
+ if (enabledTypes == 0) {
+ result = 3;
+ console.log("推送权限没有开启!");
+ } else {
+ result = 4;
+ console.log("已经开启推送功能!")
+ }
+ }
+ plus.ios.deleteObject(app);
+ plus.ios.deleteObject(UIApplication);
+ return result;
+}
+
+function contact() {
+ var result = 0;
+ var CNContactStore = plus.ios.import("CNContactStore");
+ var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
+ if (cnAuthStatus === 0) {
+ result = null;
+ } else if (cnAuthStatus == 3) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(CNContactStore);
+ return result;
+}
+
+function record() {
+ var result = null;
+ var avaudiosession = plus.ios.import("AVAudioSession");
+ var avaudio = avaudiosession.sharedInstance();
+ var status = avaudio.recordPermission();
+ console.log("permissionStatus:" + status);
+ if (status === 1970168948) {
+ result = null;
+ } else if (status === 1735552628) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(avaudiosession);
+ return result;
+}
+
+function calendar() {
+ var result = null;
+ var EKEventStore = plus.ios.import("EKEventStore");
+ var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
+ if (ekAuthStatus == 3) {
+ result = 1;
+ console.log("日历权限已经开启");
+ } else {
+ console.log("日历权限没有开启");
+ }
+ plus.ios.deleteObject(EKEventStore);
+ return result;
+}
+
+function memo() {
+ var result = null;
+ var EKEventStore = plus.ios.import("EKEventStore");
+ var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
+ if (ekAuthStatus == 3) {
+ result = 1;
+ console.log("备忘录权限已经开启");
+ } else {
+ console.log("备忘录权限没有开启");
+ }
+ plus.ios.deleteObject(EKEventStore);
+ return result;
+}
+
+
+function requestIOS(permissionID) {
+ return new Promise((resolve, reject) => {
+ switch (permissionID) {
+ case "push":
+ resolve(push());
+ break;
+ case "location":
+ resolve(location());
+ break;
+ case "record":
+ resolve(record());
+ break;
+ case "camera":
+ resolve(camera());
+ break;
+ case "album":
+ resolve(album());
+ break;
+ case "contact":
+ resolve(contact());
+ break;
+ case "calendar":
+ resolve(calendar());
+ break;
+ case "memo":
+ resolve(memo());
+ break;
+ default:
+ resolve(0);
+ break;
+ }
+ });
+}
+
+function requestAndroid(permissionID) {
+ return new Promise((resolve, reject) => {
+ plus.android.requestPermissions(
+ [permissionID],
+ function(resultObj) {
+ var result = 0;
+ for (var i = 0; i < resultObj.granted.length; i++) {
+ var grantedPermission = resultObj.granted[i];
+ console.log('已获取的权限:' + grantedPermission);
+ result = 1
+ }
+ for (var i = 0; i < resultObj.deniedPresent.length; i++) {
+ var deniedPresentPermission = resultObj.deniedPresent[i];
+ console.log('拒绝本次申请的权限:' + deniedPresentPermission);
+ result = 0
+ }
+ for (var i = 0; i < resultObj.deniedAlways.length; i++) {
+ var deniedAlwaysPermission = resultObj.deniedAlways[i];
+ console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
+ result = -1
+ }
+ resolve(result);
+ },
+ function(error) {
+ console.log('result error: ' + error.message)
+ resolve({
+ code: error.code,
+ message: error.message
+ });
+ }
+ );
+ });
+}
+
+function gotoAppPermissionSetting() {
+ if (permission.isIOS) {
+ var UIApplication = plus.ios.import("UIApplication");
+ var application2 = UIApplication.sharedApplication();
+ var NSURL2 = plus.ios.import("NSURL");
+ var setting2 = NSURL2.URLWithString("app-settings:");
+ application2.openURL(setting2);
+ plus.ios.deleteObject(setting2);
+ plus.ios.deleteObject(NSURL2);
+ plus.ios.deleteObject(application2);
+ } else {
+ var Intent = plus.android.importClass("android.content.Intent");
+ var Settings = plus.android.importClass("android.provider.Settings");
+ var Uri = plus.android.importClass("android.net.Uri");
+ var mainActivity = plus.android.runtimeMainActivity();
+ var intent = new Intent();
+ intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
+ intent.setData(uri);
+ mainActivity.startActivity(intent);
+ }
+}
+
+const permission = {
+ get isIOS(){
+ return typeof isIOS === 'boolean' ? isIOS : (isIOS = uni.getSystemInfoSync().platform === 'ios')
+ },
+ requestIOS: requestIOS,
+ requestAndroid: requestAndroid,
+ gotoAppSetting: gotoAppPermissionSetting
+}
+
+module.exports = permission
diff --git a/utils/request.js b/utils/request.js
new file mode 100644
index 0000000..ace9f34
--- /dev/null
+++ b/utils/request.js
@@ -0,0 +1,120 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import {
+ HTTP_REQUEST_URL,
+ HEADER,
+ TOKENNAME
+} from '@/config/app';
+import { checkLogin } from '../libs/login';
+import store from '../store';
+import pako from '../plugin/pako/pako.es5.min.js'
+function toLogin(){
+ store.commit("LOGOUT");
+ uni.showToast({
+ title: '请登录',
+ icon: 'none',
+ duration: 1000
+ });
+}
+function decompress(str) {
+ return pako.inflateRaw(base64ToUint8Array(str), {
+ to: 'string'
+ });
+}
+function base64ToUint8Array(base64String) {
+ let padding = '='.repeat((4 - base64String.length % 4) % 4);
+ let base64 = (base64String + padding)
+ .replace(/\-/g, '+')
+ .replace(/_/g, '/');
+ let rawData = atob(base64);
+ let outputArray = new Uint8Array(rawData.length);
+ for (var i = 0; i < rawData.length; ++i) {
+ outputArray[i] = rawData.charCodeAt(i);
+ }
+ return outputArray;
+}
+function atob(input) {
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+ let str = input.replace(/=+$/, '');
+ let output = '';
+ if (str.length % 4 === 1) {
+ throw new Error('InvalidLengthError');
+ }
+ for (let i = 0, len = str.length; i < len; i += 4) {
+ const a = chars.indexOf(str.charAt(i));
+ const b = chars.indexOf(str.charAt(i + 1));
+ const c = chars.indexOf(str.charAt(i + 2));
+ const d = chars.indexOf(str.charAt(i + 3));
+ const sum = (a << 18) | (b << 12) | (c << 6) | d;
+ output += String.fromCharCode((sum >> 16) & 0xFF, (sum >> 8) & 0xFF, sum & 0xFF);
+ }
+
+ return output;
+}
+/**
+ * 发送请求
+ */
+function baseRequest(url, method, data, {
+ noAuth = false,
+ noVerify = false
+}) {
+ let Url = HTTP_REQUEST_URL,
+ header = HEADER;
+ if (!noAuth) {
+ //登录过期自动登录
+ if (!store.state.app.token && !checkLogin()) {
+ toLogin();
+ return Promise.reject({
+ msg: '未登录'
+ });
+ }
+ }
+ if (store.state.app.token) header[TOKENNAME] = 'Bearer ' + store.state.app.token;
+ return new Promise((reslove, reject) => {
+ uni.request({
+ url: Url + '/api/' + url,
+ method: method || 'GET',
+ header: header,
+ data: data || {},
+ success: (res) => {
+ if (res.data && res.data.encode) {
+ try
+ {
+ res.data.data = JSON.parse(decompress(res.data.data));
+ }catch(e){
+ res.data.data = decompress(decodeURI(res.data.data));
+ }
+ }
+ if (noVerify)
+ reslove(res.data, res);
+ else if (res.data.status == 200)
+ reslove(res.data, res);
+ else if ([410000, 410001, 410002, 40000].indexOf(res.data.status) !== -1) {
+ toLogin();
+ reject(res.data);
+ } else if (res.data.status == 501) {
+ uni.reLaunch({
+ url: '/pages/error/index'
+ })
+ reject(res.data);
+ } else
+ reject(res.data.message || '系统错误');
+ },
+ fail: (message) => {
+ reject('请求失败');
+ }
+ })
+ });
+}
+const request = {};
+['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'].forEach((method) => {
+ request[method] = (api, data, opt) => baseRequest(api, method, data, opt || {})
+});
+export default request;
diff --git a/utils/util.js b/utils/util.js
new file mode 100644
index 0000000..025df75
--- /dev/null
+++ b/utils/util.js
@@ -0,0 +1,1007 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+import {
+ TOKENNAME,
+ HTTP_REQUEST_URL
+} from '../config/app.js';
+import store from '../store';
+import {
+ pathToBase64
+} from '@/plugin/image-tools/index.js';
+// #ifdef APP-PLUS
+import permision from "./permission.js"
+// #endif
+export default {
+ /**
+ * 字符串截取
+ * @obj 传入的数据
+ * @state 0 某个参数之前 1某个参数之后
+ *
+ *
+ * **/
+ stringIntercept: function(obj, state, type) {
+ var index = obj.lastIndexOf(type);
+ if (state == 0) {
+ obj = obj.substring(0, index);
+ } else {
+ obj = obj.substring(index + 1, obj.length);
+ }
+ return obj;
+ },
+ /**
+ * opt object | string
+ * to_url object | string
+ * 例:
+ * this.Tips('/pages/test/test'); 跳转不提示
+ * this.Tips({title:'提示'},'/pages/test/test'); 提示并跳转
+ * this.Tips({title:'提示'},{tab:1,url:'/pages/index/index'}); 提示并跳转值table上
+ * tab=1 一定时间后跳转至 table上
+ * tab=2 一定时间后跳转至非 table上
+ * tab=3 一定时间后返回上页面
+ * tab=4 关闭所有页面跳转至非table上
+ * tab=5 关闭当前页面跳转至table上
+ */
+ Tips: function(opt, to_url) {
+ if (typeof opt == 'string') {
+ to_url = opt;
+ opt = {};
+ }
+ let title = opt.title || '',
+ icon = opt.icon || 'none',
+ endtime = opt.endtime || 2000,
+ success = opt.success;
+ if (title) uni.showToast({
+ title: title,
+ icon: icon,
+ duration: endtime,
+ success
+ })
+ if (to_url != undefined) {
+ if (typeof to_url == 'object') {
+ let tab = to_url.tab || 1,
+ url = to_url.url || '';
+ switch (tab) {
+ case 1:
+ //一定时间后跳转至 table
+ setTimeout(function() {
+ uni.switchTab({
+ url: url
+ })
+ }, endtime);
+ break;
+ case 2:
+ //跳转至非table页面
+ setTimeout(function() {
+ uni.navigateTo({
+ url: url,
+ })
+ }, endtime);
+ break;
+ case 3:
+ //返回上页面
+ setTimeout(function() {
+ // #ifndef H5
+ uni.navigateBack({
+ delta: parseInt(url),
+ })
+ // #endif
+ // #ifdef H5
+ history.back();
+ // #endif
+ }, endtime);
+ break;
+ case 4:
+ //关闭当前所有页面跳转至非table页面
+ setTimeout(function() {
+ uni.reLaunch({
+ url: url,
+ })
+ }, endtime);
+ break;
+ case 5:
+ //关闭当前页面跳转至非table页面
+ setTimeout(function() {
+ uni.redirectTo({
+ url: url,
+ })
+ }, endtime);
+ break;
+ }
+
+ } else if (typeof to_url == 'function') {
+ setTimeout(function() {
+ to_url && to_url();
+ }, endtime);
+ } else {
+ //没有提示时跳转不延迟
+ setTimeout(function() {
+ uni.navigateTo({
+ url: to_url,
+ })
+ }, title ? endtime : 0);
+ }
+ }
+ },
+ /**
+ * 移除数组中的某个数组并组成新的数组返回
+ * @param array array 需要移除的数组
+ * @param int index 需要移除的数组的键值
+ * @param string | int 值
+ * @return array
+ *
+ */
+ ArrayRemove: function(array, index, value) {
+ const valueArray = [];
+ if (array instanceof Array) {
+ for (let i = 0; i < array.length; i++) {
+ if (typeof index == 'number' && array[index] != i) {
+ valueArray.push(array[i]);
+ } else if (typeof index == 'string' && array[i][index] != value) {
+ valueArray.push(array[i]);
+ }
+ }
+ }
+ return valueArray;
+ },
+ /**
+ * 生成海报获取文字
+ * @param string text 为传入的文本
+ * @param int num 为单行显示的字节长度
+ * @return array
+ */
+ textByteLength: function(text, num) {
+ let strLength = 0;
+ let rows = 1;
+ let str = 0;
+ let arr = [];
+ for (let j = 0; j < text.length; j++) {
+ if (text.charCodeAt(j) > 255) {
+ strLength += 2;
+ if (strLength > rows * num) {
+ strLength++;
+ arr.push(text.slice(str, j));
+ str = j;
+ rows++;
+ }
+ } else {
+ strLength++;
+ if (strLength > rows * num) {
+ arr.push(text.slice(str, j));
+ str = j;
+ rows++;
+ }
+ }
+ }
+ arr.push(text.slice(str, text.length));
+ return [strLength, arr, rows] // [处理文字的总字节长度,每行显示内容的数组,行数]
+ },
+/**
+ * 获取分享海报
+ * @param array arr2 海报素材
+ * @param string store_name 素材文字
+ * @param string price 价格
+ * @param function successFn 回调函数
+ *
+ *
+ */
+ PosterCanvas: function(arr2, store_name, price, successFn, errFun) {
+ let that = this;
+ const ctx = uni.createCanvasContext('myCanvas');
+ ctx.clearRect(0, 0, 0, 0);
+ /**
+ * 只能获取合法域名下的图片信息,本地调试无法获取
+ *
+ */
+ uni.getImageInfo({
+ src: arr2[0],
+ success: function(res) {
+ console.log(res, 'getImageInfo')
+ const WIDTH = res.width;
+ const HEIGHT = res.height;
+ ctx.drawImage(arr2[0], 0, 0, WIDTH, HEIGHT);
+ ctx.drawImage(arr2[1], 0, 0, WIDTH, WIDTH);
+ ctx.save();
+ let r = 90;
+ let d = r * 2;
+ let cx = 40;
+ let cy = 990;
+ ctx.arc(cx + r, cy + r, r, 0, 2 * Math.PI);
+ // ctx.clip();
+ ctx.drawImage(arr2[2], cx, cy, d, d);
+ ctx.restore();
+ const CONTENT_ROW_LENGTH = 40;
+ let [contentLeng, contentArray, contentRows] = that.textByteLength(store_name, CONTENT_ROW_LENGTH);
+ if (contentRows > 2) {
+ contentRows = 2;
+ let textArray = contentArray.slice(0, 2);
+ textArray[textArray.length - 1] += '……';
+ contentArray = textArray;
+ }
+ ctx.setTextAlign('center');
+ ctx.setFontSize(32);
+ let contentHh = 32 * 1.3;
+ for (let m = 0; m < contentArray.length; m++) {
+ ctx.fillText(contentArray[m], WIDTH / 2, 820 + contentHh * m);
+ }
+ ctx.setTextAlign('center')
+ ctx.setFontSize(48);
+ ctx.setFillStyle('red');
+ ctx.fillText('¥' + price, WIDTH / 2, 880 + contentHh);
+ ctx.draw(true, function() {
+ uni.canvasToTempFilePath({
+ canvasId: 'myCanvas',
+ fileType: 'png',
+ destWidth: WIDTH,
+ destHeight: HEIGHT,
+ success: function(res) {
+ uni.hideLoading();
+ successFn && successFn(res.tempFilePath);
+ },
+ fail: function(err) {
+ uni.hideLoading();
+ errFun && errFun(err);
+ }
+ })
+ });
+ },
+ fail: function(err) {
+ uni.hideLoading();
+ that.Tips({
+ title: '无法获取图片信息'
+ });
+ errFun && errFun(err);
+ }
+ })
+ },
+ /**
+ * 获取分享海报
+ * @param array arr2 海报素材
+ * @param string store_name 素材文字
+ * @param string price 价格
+ * @param function successFn 回调函数
+ *
+ *
+ */
+ goodsPosterCanvas: function(arr2, store_name, price, site_name, ot_price, successFn, errFun) {
+ let that = this;
+ const ctx = uni.createCanvasContext('myCanvas');
+ ctx.clearRect(0, 0, 0, 0);
+ /**
+ * 只能获取合法域名下的图片信息,本地调试无法获取
+ *
+ */
+ uni.getImageInfo({
+ src: arr2[0],
+ success: function(res) {
+ console.log(res, 'getImageInfo')
+ const WIDTH = res.width;
+ const HEIGHT = res.height;
+ ctx.drawImage(arr2[0], 0, 0, WIDTH, HEIGHT+50);
+ ctx.save();
+ let r = 90;
+ let d = r * 2;
+ let cx = 555;
+ let cy = 910;
+ let ux = 50;
+ let uy = 50;
+ ctx.arc(cx + r, cy + r, r, 0, 2 * Math.PI);
+ that.handleBorderRect(ctx, 30, 30, 50, 50, 25);
+ ctx.clip();
+ ctx.drawImage(arr2[3], 30, 30, 50, 50);
+ ctx.restore();
+ ctx.drawImage(arr2[2], cx, cy-30, d-30, d-30);
+ ctx.save();
+ ctx.restore();
+ ctx.setTextAlign('left');
+ ctx.setFontSize(24);
+ ctx.setFillStyle('#282828');
+ ctx.fillText(site_name, r, 62);
+ const CONTENT_ROW_LENGTH = 26;
+ let [contentLeng, contentArray, contentRows] = that.textByteLength(store_name, CONTENT_ROW_LENGTH);
+ if (contentRows > 2) {
+ contentRows = 2;
+ let textArray = contentArray.slice(0, 2);
+ textArray[textArray.length - 1] = textArray[textArray.length - 1].slice(0,textArray[textArray.length - 1].length-1)
+ textArray[textArray.length - 1] += '…';
+ contentArray = textArray;
+ }
+ ctx.setFontSize(32);
+ let contentHh = 32 * 1.3;
+ for (let m = 0; m < contentArray.length; m++) {
+ ctx.fillText(contentArray[m], 30, cy + contentHh * m);
+ }
+ ctx.setFontSize(40);
+ ctx.setFillStyle('red');
+ ctx.fillText('¥' + price, 30, 990 + contentHh);
+ ctx.setFontSize(26);
+ ctx.setFillStyle('#999999');
+ ctx.beginPath();
+ const textWidth = ctx.measureText(ot_price+'¥').width + 16; //检查字体的宽度
+ //绘制数字中间的矩形
+ ctx.setFillStyle('#999999');
+ ctx.rect(35, 1062,textWidth-10, 1);
+ ctx.fill();
+ ctx.closePath();
+ ctx.fillText('¥' + ot_price, 35, 1030 + contentHh);
+ // ctx.clip();
+ // ctx.restore();
+ that.handleBorderRect(ctx, 30, 108, WIDTH-60, WIDTH-20, 12);
+ ctx.clip();
+ ctx.drawImage(arr2[1], 30, 108, WIDTH-60, WIDTH-20);
+ ctx.draw(true, function() {
+ uni.canvasToTempFilePath({
+ canvasId: 'myCanvas',
+ fileType: 'png',
+ destWidth: WIDTH,
+ destHeight: HEIGHT,
+ success: function(res) {
+ uni.hideLoading();
+ successFn && successFn(res.tempFilePath);
+ },
+ fail: function(err) {
+ uni.hideLoading();
+ errFun && errFun(err);
+ }
+ })
+ });
+ },
+ fail: function(err) {
+ uni.hideLoading();
+ that.Tips({
+ title: '无法获取图片信息'
+ });
+ errFun && errFun(err);
+ }
+ })
+ },
+ /**
+ * 获取视频分享海报
+ * @param array arr2 海报素材
+ * @param string store_name 素材文字
+ * @param string price 价格
+ * @param function successFn 回调函数
+ *
+ *
+ */
+ videoPosterCanvas: function(arr2, content, nickname, successFn, errFun) {
+ let that = this;
+ const ctx = uni.createCanvasContext('myCanvas');
+ ctx.clearRect(0, 0, 0, 0);
+ /**
+ * 只能获取合法域名下的图片信息,本地调试无法获取
+ *
+ */
+ uni.getImageInfo({
+ src: arr2[0],
+ success: function(res) {
+ const WIDTH = res.width;
+ const HEIGHT = res.height;
+ let r = 90;
+ let d = r * 2;
+ let cx = 40;
+ let cy = 760;
+ let ux = 50;
+ let uy = 700;
+ ctx.drawImage(arr2[0], 0, 0, WIDTH, HEIGHT);
+ ctx.drawImage(arr2[1], 32, 32, WIDTH-64, WIDTH-64);
+ ctx.strokeStyle = "#ffffff";
+ ctx.save();
+ ctx.arc(cx + r, cy + r, r, 0, 2 * Math.PI);
+ ctx.drawImage(arr2[2], 530, 760, d, d);
+ that.handleBorderRect(ctx, ux, uy, r, r, 45);
+ ctx.clip();
+ ctx.stockStyle ="#ffffff";
+ ctx.drawImage(arr2[3], ux, uy, r, r);
+ ctx.restore();
+ ctx.setTextAlign('left')
+ ctx.setFontSize(28);
+ ctx.setFillStyle('#282828');
+ ctx.fillText(nickname, r+60, 760);
+ ctx.setTextAlign('left')
+ ctx.setFontSize(28);
+ ctx.setFillStyle('#282828');
+ const CONTENT_ROW_LENGTH = 25;
+ let [contentLeng, contentArray, contentRows] = that.textByteLength(content, CONTENT_ROW_LENGTH);
+ if (contentRows > 2) {
+ contentRows = 2;
+ let textArray = contentArray.slice(0, 2);
+ textArray[textArray.length - 1] += '……';
+ contentArray = textArray;
+ }
+ ctx.setTextAlign('left');
+ ctx.font = 'bold 32px Arial';
+ let contentHh = 32 * 1.3;
+ for (let m = 0; m < contentArray.length; m++) {
+ ctx.fillText(contentArray[m], 55, 850 + contentHh * m);
+ }
+ ctx.draw(true, function() {
+ uni.canvasToTempFilePath({
+ canvasId: 'myCanvas',
+ fileType: 'png',
+ destWidth: WIDTH,
+ destHeight: HEIGHT,
+ success: function(res) {
+ uni.hideLoading();
+ successFn && successFn(res.tempFilePath);
+ },
+ fail: function(err) {
+ uni.hideLoading();
+ errFun && errFun(err);
+ }
+ })
+ });
+ },
+ fail: function(err) {
+ uni.hideLoading();
+ that.Tips({
+ title: '无法获取图片信息'
+ });
+ errFun && errFun(err);
+ }
+ })
+ },
+ /**
+ * 图片圆角设置
+ * @param string x x轴位置
+ * @param string y y轴位置
+ * @param string w 图片宽
+ * @param string y 图片高
+ * @param string r 圆角值
+ */
+ handleBorderRect(ctx, x, y, w, h, r) {
+ ctx.beginPath();
+ // 左上角
+ ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI);
+ ctx.moveTo(x + r, y);
+ ctx.lineTo(x + w - r, y);
+ ctx.lineTo(x + w, y + r);
+ // 右上角
+ ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 2 * Math.PI);
+ ctx.lineTo(x + w, y + h - r);
+ ctx.lineTo(x + w - r, y + h);
+ // 右下角
+ ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI);
+ ctx.lineTo(x + r, y + h);
+ ctx.lineTo(x, y + h - r);
+ // 左下角
+ ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI);
+ ctx.lineTo(x, y + r);
+ ctx.lineTo(x + r, y);
+
+ ctx.fill();
+ ctx.closePath();
+ },
+ /**
+ * 用户信息分享海报
+ * @param array arr2 海报素材 1背景 0二维码
+ * @param string nickname 昵称
+ * @param string sitename 价格
+ * @param function successFn 回调函数
+ *
+ *
+ */
+ userPosterCanvas: function(arr2, nickname, sitename, index, w, h, successFn) {
+ let that = this;
+ const ctx = uni.createCanvasContext('myCanvas' + index);
+ ctx.clearRect(0, 0, 0, 0);
+ /**
+ * 只能获取合法域名下的图片信息,本地调试无法获取
+ *
+ */
+ uni.getImageInfo({
+ src: arr2[1],
+ success: function(res) {
+ const WIDTH = res.width;
+ const HEIGHT = res.height;
+ // ctx.fillStyle = '#fff';
+ ctx.fillRect(0, 0, w, h);
+ ctx.drawImage(arr2[0], 0, 0, WIDTH, HEIGHT);
+ ctx.drawImage(arr2[1], 0, 0, w, h);
+ ctx.setTextAlign('left')
+ ctx.setFontSize(12);
+ ctx.setFillStyle('#333');
+ let codex = 0.1906
+ let codey = 0.7746
+ let codeSize = 0.21666
+ let namex = 0.4283
+ let namey = 0.8215
+ let markx = 0.4283
+ let marky = 0.8685
+ ctx.drawImage(arr2[0], w * codex, h * codey, w * codeSize, w * codeSize);
+ if (w < 270) {
+ ctx.setFontSize(8);
+ } else {
+ ctx.setFontSize(10);
+ }
+ ctx.fillText(nickname, w * namex, h * namey);
+ if (w < 270) {
+ ctx.setFontSize(8);
+ } else {
+ ctx.setFontSize(10);
+ }
+ ctx.fillText(sitename, w * markx, h * marky);
+ ctx.save();
+ ctx.draw(false,setTimeout(()=>{
+ uni.canvasToTempFilePath({
+ canvasId: 'myCanvas' + index,
+ fileType: 'png',
+ destWidth: WIDTH,
+ destHeight: HEIGHT,
+ success: function(res) {
+ successFn && successFn(res.tempFilePath);
+ },
+ fail: function(err) {
+ console.log(err)
+ uni.hideLoading();
+
+ }
+ })
+ },1000))
+ },
+ fail: function(err) {
+
+ uni.hideLoading();
+ that.Tips({
+ title: '无法获取图片信息'
+ });
+ }
+ })
+ },
+
+ /*
+ * 单图上传
+ * @param object opt
+ * @param callable successCallback 成功执行方法 data
+ * @param callable errorCallback 失败执行方法
+ */
+ uploadImageOne: function(opt, successCallback, errorCallback) {
+ let that = this;
+ if (typeof opt === 'string') {
+ let url = opt;
+ opt = {};
+ opt.url = url;
+ }
+ let count = opt.count || 1,
+ sizeType = opt.sizeType || ['compressed'],
+ sourceType = opt.sourceType || ['album', 'camera'],
+ is_load = opt.is_load || true,
+ uploadUrl = opt.url || '',
+ inputName = opt.name || 'field';
+ uni.chooseImage({
+ count: count, //最多可以选择的图片总数
+ sizeType: sizeType, // 可以指定是原图还是压缩图,默认二者都有
+ sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有
+ success: async (res)=> {
+ let image = [];
+ let filesLen = res.tempFiles.length;
+ let exceeded_list = [];
+ let uploadMaxSize = 10;
+ let imageList = [];
+ let urlPath = HTTP_REQUEST_URL + '/api/' + uploadUrl + '/' + inputName
+ if (count === 1) {
+ successCallback && successCallback(await that.uploadFile(urlPath, res.tempFilePaths[
+ 0], opt, '图片上传中'))
+ } else {
+ for (let i = 0; i < res.tempFiles.length; i++) {
+ if (Math.ceil(res.tempFiles[i].size / 1024) < uploadMaxSize * 1024) {
+ image.push(res.tempFiles[i].path);
+ } else {
+ exceeded_list.push(i + 1);
+ filesLen = filesLen - 1;
+ // #ifdef APP-PLUS
+ plus.nativeUI.alert(
+ `第${[...new Set(exceeded_list)].join(',')}张图片超出限制${uploadMaxSize}MB,已过滤`
+ );
+ // #endif
+ // #ifndef APP-PLUS
+ uni.showModal({
+ content: `第${[...new Set(exceeded_list)].join(',')}张图片超出限制${uploadMaxSize}MB,已过滤`
+ });
+ // #endif
+ continue;
+ }
+ }
+ for (const key in image) {
+ let data = await that.uploadFile(urlPath, image[key], opt, '图片上传中')
+ imageList.push(data.data.path)
+ }
+ successCallback && successCallback(imageList)
+ }
+ }
+ })
+ },
+ uploadFile(urlPath, localPath, opt, message) {
+ let that = this;
+ return new Promise(async (resolve) => {
+ //启动上传等待中...
+ if (message) uni.showLoading({
+ title: message,
+ });
+ uni.uploadFile({
+ url: urlPath,
+ filePath: localPath,
+ name: opt.name || 'field',
+ header: {
+ // #ifdef MP
+ "Content-Type": "multipart/form-data",
+ // #endif
+ [TOKENNAME]: 'Bearer ' + store.state.app.token
+ },
+ success: function(res) {
+ uni.hideLoading();
+ if (res.statusCode == 403) {
+ that.Tips({
+ title: res.data
+ });
+ } else {
+ let data = res.data ? JSON.parse(res.data) : {};
+ if (data.status == 200) {
+ resolve(data);
+ } else {
+ that.Tips({
+ title: data.message
+ });
+ }
+ }
+ },
+ fail: function(res) {
+ uni.hideLoading();
+ that.Tips({
+ title: res
+ });
+ }
+ })
+ })
+ },
+/**
+ * 小程序头像获取上传
+ * @param uploadUrl 上传接口地址
+ * @param filePath 上传文件路径
+ * @param successCallback success回调
+ * @param errorCallback err回调
+ */
+ uploadImgs(uploadUrl, filePath, successCallback, errorCallback) {
+ let that = this;
+ let inputName = 'pics';
+ uni.uploadFile({
+ url: HTTP_REQUEST_URL + '/api/' + uploadUrl + '/' + inputName,
+ filePath: filePath,
+ fileType: 'image',
+ name: 'pics',
+ formData: {
+ 'filename': 'pics'
+ },
+ header: {
+ // #ifdef MP
+ "Content-Type": "multipart/form-data",
+ // #endif
+ [TOKENNAME]: 'Bearer ' + store.state.app.token
+ },
+ success: (res) => {
+ uni.hideLoading();
+ if (res.statusCode == 403) {
+ that.Tips({
+ title: res.data
+ });
+ } else {
+ let data = res.data ? JSON
+ .parse(res.data) : {};
+ if (data.status == 200) {
+ successCallback &&
+ successCallback(data)
+ } else {
+ errorCallback &&
+ errorCallback(data);
+ that.Tips({
+ title: data.message
+ });
+ }
+ }
+ },
+ fail: (err) => {
+ console.log(err)
+ uni.hideLoading();
+ that.Tips({
+ title: i18n.t(`上传图片失败`)
+ });
+ }
+ })
+ },
+ serialize: function(obj) {
+ var str = [];
+ for (var p in obj)
+ if (obj.hasOwnProperty(p)) {
+ str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
+ }
+ return str.join("&");
+ },
+ getNowUrl: function() {
+ const pages = getCurrentPages(),
+ page = pages[pages.length - 1],
+ query = this.serialize(page.options || {});
+ return page.route + (query ? '?' + query : '');
+ },
+ /**
+ * 处理服务器扫码带进来的参数
+ * @param string param 扫码携带参数
+ * @param string k 整体分割符 默认为:&
+ * @param string p 单个分隔符 默认为:=
+ * @return object
+ *
+ */
+ // #ifdef MP
+ getUrlParams: function(param, k, p) {
+ if (typeof param != 'string') return {};
+ k = k ? k : '&'; //整体参数分隔符
+ p = p ? p : '='; //单个参数分隔符
+ var value = {};
+ if (param.indexOf(k) !== -1) {
+ param = param.split(k);
+ for (var val in param) {
+ if (param[val].indexOf(p) !== -1) {
+ var item = param[val].split(p);
+ value[item[0]] = item[1];
+ }
+ }
+ } else if (param.indexOf(p) !== -1) {
+ var item = param.split(p);
+ value[item[0]] = item[1];
+ } else {
+ return param;
+ }
+ return value;
+ },
+ // #endif
+ /*
+ * 合并数组
+ */
+ SplitArray(list, sp) {
+ if (typeof list != 'object') return [];
+ if (sp === undefined) sp = [];
+ for (var i = 0; i < list.length; i++) {
+ sp.push(list[i]);
+ }
+ return sp;
+ },
+ trim(str) {
+ return String.prototype.trim.call(str);
+ },
+ $h: {
+ //除法函数,用来得到精确的除法结果
+ //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
+ //调用:$h.Div(arg1,arg2)
+ //返回值:arg1除以arg2的精确结果
+ Div: function(arg1, arg2) {
+ arg1 = parseFloat(arg1);
+ arg2 = parseFloat(arg2);
+ var t1 = 0,
+ t2 = 0,
+ r1, r2;
+ try {
+ t1 = arg1.toString().split(".")[1].length;
+ } catch (e) {}
+ try {
+ t2 = arg2.toString().split(".")[1].length;
+ } catch (e) {}
+ r1 = Number(arg1.toString().replace(".", ""));
+ r2 = Number(arg2.toString().replace(".", ""));
+ return this.Mul(r1 / r2, Math.pow(10, t2 - t1));
+ },
+ //加法函数,用来得到精确的加法结果
+ //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
+ //调用:$h.Add(arg1,arg2)
+ //返回值:arg1加上arg2的精确结果
+ Add: function(arg1, arg2) {
+ arg2 = parseFloat(arg2);
+ var r1, r2, m;
+ try {
+ r1 = arg1.toString().split(".")[1].length
+ } catch (e) {
+ r1 = 0
+ }
+ try {
+ r2 = arg2.toString().split(".")[1].length
+ } catch (e) {
+ r2 = 0
+ }
+ m = Math.pow(100, Math.max(r1, r2));
+ return (this.Mul(arg1, m) + this.Mul(arg2, m)) / m;
+ },
+ //减法函数,用来得到精确的减法结果
+ //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。
+ //调用:$h.Sub(arg1,arg2)
+ //返回值:arg1减去arg2的精确结果
+ Sub: function(arg1, arg2) {
+ arg1 = parseFloat(arg1);
+ arg2 = parseFloat(arg2);
+ var r1, r2, m, n;
+ try {
+ r1 = arg1.toString().split(".")[1].length
+ } catch (e) {
+ r1 = 0
+ }
+ try {
+ r2 = arg2.toString().split(".")[1].length
+ } catch (e) {
+ r2 = 0
+ }
+ m = Math.pow(10, Math.max(r1, r2));
+ //动态控制精度长度
+ n = (r1 >= r2) ? r1 : r2;
+ return ((this.Mul(arg1, m) - this.Mul(arg2, m)) / m).toFixed(n);
+ },
+ //乘法函数,用来得到精确的乘法结果
+ //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
+ //调用:$h.Mul(arg1,arg2)
+ //返回值:arg1乘以arg2的精确结果
+ Mul: function(arg1, arg2) {
+ arg1 = parseFloat(arg1);
+ arg2 = parseFloat(arg2);
+ var m = 0,
+ s1 = arg1.toString(),
+ s2 = arg2.toString();
+ try {
+ m += s1.split(".")[1].length
+ } catch (e) {}
+ try {
+ m += s2.split(".")[1].length
+ } catch (e) {}
+ return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
+ },
+ },
+ // 获取地理位置;
+ $L: {
+ async getLocation() {
+ // #ifdef APP-PLUS
+ let status = await this.checkPermission();
+ if (status !== 1) {
+ return;
+ }
+ // #endif
+ // #ifdef MP-WEIXIN || MP-TOUTIAO || MP-QQ
+ let status = await this.getSetting();
+ if (status === 2) {
+ this.openSetting();
+ return;
+ }
+ // #endif
+ this.doGetLocation();
+ },
+ doGetLocation() {
+ uni.getLocation({
+ success: (res) => {
+ uni.removeStorageSync('CACHE_LONGITUDE');
+ uni.removeStorageSync('CACHE_LATITUDE');
+ uni.setStorageSync('CACHE_LONGITUDE', res.longitude);
+ uni.setStorageSync('CACHE_LATITUDE', res.latitude);
+ },
+ fail: (err) => {
+ // #ifdef MP-BAIDU
+ if (err.errCode === 202 || err.errCode === 10003) { // 202模拟器 10003真机 user deny
+ this.openSetting();
+ }
+ // #endif
+ // #ifndef MP-BAIDU
+ if (err.errMsg.indexOf("auth deny") >= 0) {
+ uni.showToast({
+ title: "访问位置被拒绝"
+ })
+ } else {
+ uni.showToast({
+ title: err.errMsg
+ })
+ }
+ // #endif
+ }
+ })
+ },
+ getSetting: function() {
+ return new Promise((resolve, reject) => {
+ uni.getSetting({
+ success: (res) => {
+ if (res.authSetting['scope.userLocation'] === undefined) {
+ resolve(0);
+ return;
+ }
+ if (res.authSetting['scope.userLocation']) {
+ resolve(1);
+ } else {
+ resolve(2);
+ }
+ }
+ });
+ });
+ },
+ openSetting: function() {
+ uni.openSetting({
+ success: (res) => {
+ if (res.authSetting && res.authSetting['scope.userLocation']) {
+ this.doGetLocation();
+ }
+ },
+ fail: (err) => {}
+ })
+ },
+ async checkPermission() {
+ let status = permision.isIOS ? await permision.requestIOS('location') :
+ await permision.requestAndroid('android.permission.ACCESS_FINE_LOCATION');
+ if (status === null || status === 1) {
+ status = 1;
+ } else if (status === 2) {
+ uni.showModal({
+ content: "系统定位已关闭",
+ confirmText: "确定",
+ showCancel: false,
+ success: function(res) {}
+ })
+ } else if (status.code) {
+ uni.showModal({
+ content: status.message
+ })
+ } else {
+ uni.showModal({
+ content: "需要定位权限",
+ confirmText: "设置",
+ success: function(res) {
+ if (res.confirm) {
+ permision.gotoAppSetting();
+ }
+ }
+ })
+ }
+ return status;
+ },
+ },
+ /**
+ * 跳转路径封装函数
+ * @param url 跳转路径
+ */
+ JumpPath: function(url) {
+ let arr = url.split('@APPID=');
+ if (arr.length > 1) {
+ //#ifdef MP
+ let pathArr = arr[1].split('?')
+ if(pathArr.length > 1){}
+ uni.navigateToMiniProgram({
+ appId: pathArr.length > 1 ? pathArr[0] : arr[arr.length-1], // 此为生活缴费appid
+ path: arr[0], // 此为生活缴费首页路径
+ envVersion: "release",
+ success: res => {
+ console.log("打开成功", res);
+ },
+ fail: err => {}
+ })
+ //#endif
+ //#ifndef MP
+ this.Tips({
+ title: 'h5与app端不支持跳转外部小程序'
+ });
+ //#endif
+ } else {
+ if (url.indexOf("http") != -1) {
+ uni.navigateTo({
+ url: `/pages/annex/web_view/index?url=${url}`
+ });
+ } else {
+ if (['/pages/goods_cate/goods_cate','/pages/plant_grass/index','/pages/order_addcart/order_addcart','/pages/user/index'
+ ]
+ .indexOf(url) == -1) {
+ uni.navigateTo({
+ url
+ })
+ } else {
+ uni.switchTab({
+ url
+ })
+ }
+ }
+ }
+ },
+}
diff --git a/utils/validate.js b/utils/validate.js
new file mode 100644
index 0000000..c035374
--- /dev/null
+++ b/utils/validate.js
@@ -0,0 +1,45 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+/**
+ * 验证小数点后两位及多个小数
+ * money 金额
+ */
+export function isMoney(money) {
+ var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
+ if (reg.test(money)) {
+ return true
+ } else {
+ return false
+ }
+}
+/**
+ * 验证手机号码
+ */
+export function checkPhone(phone) {
+ var reg = /^1(3|4|5|6|7|8|9)\d{9}$/
+ if (reg.test(phone)) {
+ return true
+ } else {
+ return false
+ }
+}
+
+
+/**
+ * 验证邮箱
+ */
+export function isEmailAvailable(emailInput) {
+ var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
+ if (!myreg.test(emailInput)) {
+ return false;
+ } else {
+ return true;
+ }
+}
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..08c9e46
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,20 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team
+// +----------------------------------------------------------------------
+module.exports = {
+ productionSourceMap: false, // 生产打包时不输出map文件,增加打包速度
+ configureWebpack: config => {
+ if (process.env.NODE_ENV === 'production') {
+ config.optimization.minimizer[0].options.terserOptions.compress.warnings = false
+ config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
+ config.optimization.minimizer[0].options.terserOptions.compress.drop_debugger = true
+ config.optimization.minimizer[0].options.terserOptions.compress.pure_funcs = ['console.log']
+ }
+ }
+}