{"dependencies":[{"ETag":"BB3177FF52097B1709E620A3211017CC","name":"0.json","size":5002622,"type":"json","url":"https://gw.alipayobjects.com/os/herbox/994c930f-6369-4b64-aacb-8dad219a4cd1/0.json"}],"sourceCode":{"app.js":"import Store from './store';\n\nApp(Store({\n onLaunch(options) {\n const { query } = options;\n if (query && query.terminalId) {\n this.globalData.terminalId = query.terminalId;\n }\n },\n onShow(options) {\n const { query } = options;\n if (query && query.terminalId) {\n this.globalData.terminalId = query.terminalId;\n }\n },\n onHide() {\n console.log('app onHide');\n },\n onError(msg) {\n console.log('app OnError: ', msg);\n },\n globalData: {\n terminalId: '234242',\n agreementNo: null,\n userInfo: null,\n externalAgreementNo: null,\n orderTraceId: null,\n orderInfo: null,\n },\n}));\n","app.json":"{\n \"pages\": [\n \"pages/home/index\",\n \"pages/openDoor/index\",\n \"pages/personal/index\",\n \"pages/registeLogin/index\",\n \"pages/near/index\",\n \"pages/myOrder/index\",\n \"pages/orderDetails/index\",\n \"pages/error/index\",\n \"pages/orderEnd/index\",\n \"pages/coupon/index\",\n \"pages/index/index\"\n ],\n \"tabBar\": {\n \"textColor\": \"#999999\",\n \"selectedColor\": \"#1B82D2\",\n \"backgroundColor\": \"#ffffff\",\n \"items\": [\n {\n \"pagePath\": \"pages/home/index\",\n \"name\": \"扫码\",\n \"icon\": \"/images/scan.png\",\n \"activeIcon\": \"/images/scan_action.png\"\n },\n {\n \"pagePath\": \"pages/personal/index\",\n \"name\": \"我的\",\n \"icon\": \"/images/user.png\",\n \"activeIcon\": \"/images/user_action.png\"\n }\n ]\n },\n \"window\": {\n \"titleBarColor\": \"#FFFFFF\",\n \"backgroundColor\": \"#F5F5F5\",\n \"defaultTitle\": \"智能售货柜\"\n },\n \"debug\": true\n}\n","package-lock.json":"{\n \"requires\": true,\n \"lockfileVersion\": 1,\n \"dependencies\": {\n \"babel-runtime\": {\n \"version\": \"6.26.0\",\n \"resolved\": \"https://registry.npm.alibaba-inc.com/babel-runtime/download/babel-runtime-6.26.0.tgz\",\n \"integrity\": \"sha1-llxwWGaOgrVde/4E/yM3vItWR/4=\",\n \"requires\": {\n \"core-js\": \"^2.4.0\",\n \"regenerator-runtime\": \"^0.11.0\"\n }\n },\n \"core-js\": {\n \"version\": \"2.6.11\",\n \"resolved\": \"https://registry.npm.alibaba-inc.com/core-js/download/core-js-2.6.11.tgz\",\n \"integrity\": \"sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=\"\n },\n \"herculex\": {\n \"version\": \"0.2.11-beta.3\",\n \"resolved\": \"https://registry.npm.alibaba-inc.com/herculex/download/herculex-0.2.11-beta.3.tgz\",\n \"integrity\": \"sha1-iiHjIuxBMl3lWDwQHtMB5B8yTn0=\",\n \"requires\": {\n \"babel-runtime\": \"^6.26.0\",\n \"immer\": \"^1.7.2\",\n \"immutability-helper-enhanced\": \"^2.8.1\"\n }\n },\n \"immer\": {\n \"version\": \"1.12.1\",\n \"resolved\": \"https://registry.npm.alibaba-inc.com/immer/download/immer-1.12.1.tgz\",\n \"integrity\": \"sha1-QMblspLABWCDbCmTvaOiQ3nUZvU=\"\n },\n \"immutability-helper-enhanced\": {\n \"version\": \"2.8.1\",\n \"resolved\": \"https://registry.npm.alibaba-inc.com/immutability-helper-enhanced/download/immutability-helper-enhanced-2.8.1.tgz\",\n \"integrity\": \"sha1-S5g9YizRhRgfOrbdrCBeiPPQZUQ=\"\n },\n \"mini-antui\": {\n \"version\": \"0.3.13\",\n \"resolved\": \"https://registry.npm.alibaba-inc.com/mini-antui/download/mini-antui-0.3.13.tgz\",\n \"integrity\": \"sha1-jaymxsIQ0yFXLhbUyPj/W8PsgBU=\"\n },\n \"moment\": {\n \"version\": \"2.24.0\",\n \"resolved\": \"https://registry.npm.alibaba-inc.com/moment/download/moment-2.24.0.tgz\",\n \"integrity\": \"sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s=\"\n },\n \"regenerator-runtime\": {\n \"version\": \"0.11.1\",\n \"resolved\": \"https://registry.npm.alibaba-inc.com/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz\",\n \"integrity\": \"sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=\"\n }\n }\n}\n","package.json":"{\n \"private\": true,\n \"scripts\": {\n \"ainstall\": \"npm install --registry=https://registry.npm.taobao.org\"\n },\n \"dependencies\": {\n \"mini-antui\": \"^0.3.12\",\n \"moment\": \"^2.22.2\",\n \"herculex\": \"0.2.11-beta.3\"\n }\n}\n","store.js":"/* eslint-disable */\nimport { GlobalStore } from 'herculex';\nimport { getStorage, setStorage } from './util/mixins';\nimport { userAuthCode } from './util/auth';\nimport { queryUser, getAgreementUrl, openDoor, paySignCenter } from './services/home.service';\n\nexport default new GlobalStore({\n state: {\n },\n actions: {\n /**\n * 获取用户信息\n */\n async getUser({ commit, state, dispatch, global }, payload) {\n const app = getApp();\n const authCode = await userAuthCode();\n //console.log('获取到的authCode= ',JSON.stringify(authCode));\n const result = await queryUser({authCode: authCode});\n if(result && result.isSuccess === 'true'){\n commit('SET_USERINFO', { userInfo: result.data });\n return result.data;\n }else{\n return null;\n }\n \n },\n\n /**\n * 代扣授权\n */\n async sign({ commit, state, dispatch, global }, payload) {\n const app = getApp();\n const userId = app.globalData.userInfo.userId;\n const terminalId = app.globalData.terminalId;\n const result = await getAgreementUrl({ userId: userId ,terminalId : terminalId});\n if (result && result.isSuccess === 'true') {\n\n const signResult = await paySignCenter({ \n signStr: result.data.agreementUrl \n });\n debugger;\n if (signResult) {\n // await setStorage({ key: 'AgreementNo', data: signResult });\n app.globalData.agreementNo = signResult.agreement_no;\n app.globalData.externalAgreementNo = signResult.external_agreement_no;\n // 去请求开门\n const openResult = await openDoor({ \n userId: app.globalData.userInfo.userId,\n agreementNo: signResult.agreement_no ,\n terminalId : terminalId,\n externalAgreementNo: signResult.external_agreement_no\n }); \n if(openResult && openResult.isSuccess === 'true'){\n app.globalData.orderTraceId = openResult.data.traceId;\n return 'true';\n }else{\n return 'false';\n }\n \n } else {\n return 'false';\n }\n }else{\n return 'false';\n }\n \n },\n\n }\n});\n","components/es/_util/fmtEvent.js":"export default function fmtEvent(props, e) {\n var dataset = {};\n\n for (var key in props) {\n if (/data-/gi.test(key)) {\n dataset[key.replace(/data-/gi, '')] = props[key];\n }\n }\n\n return Object.assign({}, e, {\n currentTarget: {\n dataset: dataset\n },\n target: {\n dataset: dataset,\n targetDataset: dataset\n }\n });\n}","components/es/am-checkbox/index.acss":".am-checkbox{position:relative;height:22px;width:22px;display:inline-block}.am-checkbox-value{position:absolute;z-index:1;border-radius:50%;opacity:0}.am-checkbox-synthetic{position:absolute;z-index:2;pointer-events:none;top:0;left:0;border-radius:50%;height:100%;width:100%}.am-checkbox-synthetic::before{position:absolute;left:0;top:0;height:200%;width:200%;display:block;box-sizing:border-box;border-radius:50%;content:'';transform-origin:0 0;transform:scale(.5);border:1px solid #c9c9c9}.am-checkbox-value.a-checkbox-checked+.am-checkbox-synthetic::before{background-color:#108ee9;border-color:#108ee9;border-width:0}.am-checkbox-value.a-checkbox-checked+.am-checkbox-synthetic::after{position:absolute;display:block;z-index:999;content:'';top:4px;right:8px;width:5px;height:10px;border:2px solid #fff;border-width:0 1px 1px 0;transform:rotate(45deg)}.am-checkbox-value.a-checkbox-disabled+.am-checkbox-synthetic::before{border:1px solid #ccc;background-color:#e1e1e1}.am-checkbox-value.a-checkbox-disabled+.am-checkbox-synthetic::after{border-color:#adadad}","components/es/am-checkbox/index.axml":"<view class=\"am-checkbox\">\n <checkbox\n class=\"am-checkbox-value\"\n value=\"{{value}}\"\n checked=\"{{checked}}\"\n disabled=\"{{disabled}}\"\n onChange=\"onChange\"\n id=\"{{id}}\"\n />\n <view class=\"am-checkbox-synthetic\"></view>\n</view> ","components/es/am-checkbox/index.js":"import fmtEvent from '../_util/fmtEvent';\nComponent({\n props: {\n value: '',\n checked: false,\n disabled: false,\n onChange: function onChange() {},\n id: ''\n },\n methods: {\n onChange: function onChange(e) {\n var event = fmtEvent(this.props, e);\n this.props.onChange(event);\n }\n }\n});","components/es/am-checkbox/index.json":"{\n \"component\": true\n}","components/es/dist/appConfig.json":"{\n \"window\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"智能售货柜\"\n },\n \"pages\": [\n \"pages/home/index\",\n \"pages/openDoor/index\",\n \"pages/personal/index\",\n \"pages/registeLogin/index\",\n \"pages/near/index\",\n \"pages/myOrder/index\",\n \"pages/orderDetails/index\",\n \"pages/error/index\",\n \"pages/orderEnd/index\",\n \"pages/coupon/index\",\n \"pages/index/index\"\n ],\n \"launchParams\": {\n \"pages/home/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"先享后付货柜\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": false,\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/openDoor/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"先享后付货柜\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/personal/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"个人中心\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": false,\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/registeLogin/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"先享后付货柜\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/near/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"先享后付货柜\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/myOrder/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"我的订单\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/orderDetails/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"订单详情\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/error/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"故障报修\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/orderEnd/index\": {\n \"titleBarColor\": 1609983,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"订单完结\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/coupon/index\": {\n \"titleBarColor\": 16777215,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"优惠券\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": false,\n \"allowsBounceVertical\": \"NO\"\n },\n \"pages/index/index\": {\n \"titleBarColor\": 1609983,\n \"backgroundColor\": 16119285,\n \"defaultTitle\": \"智能售货柜\",\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"allowsBounceVertical\": \"NO\"\n }\n },\n \"prerenderPage\": \"index.html\"\n}","components/es/dist/manifest.json":"{\n \"gcm_sender_id\": \"my_gcm_sender_id\",\n \"gcm_user_visible_only\": true\n}","components/es/dist/tabBar.json":"{\n \"textColor\": 10066329,\n \"selectedColor\": 1802962,\n \"backgroundColor\": 16777215,\n \"items\": [\n {\n \"name\": \"扫码\",\n \"icon\": \"/images/scan.png\",\n \"activeIcon\": \"/images/scan_action.png\",\n \"tag\": \"pages/home/index\",\n \"url\": \"index.html#pages/home/index\",\n \"launchParamsTag\": \"pages/home/index\"\n },\n {\n \"name\": \"我的\",\n \"icon\": \"/images/user.png\",\n \"activeIcon\": \"/images/user_action.png\",\n \"tag\": \"pages/personal/index\",\n \"url\": \"index.html#pages/personal/index\",\n \"launchParamsTag\": \"pages/personal/index\"\n }\n ],\n \"disableOnInit\": true\n}","components/es/node_modules/babel-runtime/package-lock.json":"{\n \"name\": \"babel-runtime\",\n \"version\": \"6.23.0\",\n \"lockfileVersion\": 1,\n \"requires\": true,\n \"dependencies\": {\n \"ansi-regex\": {\n \"version\": \"2.1.1\",\n \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz\",\n \"integrity\": \"sha1-w7M6te42DYbg5ijwRorn7yfWVN8=\",\n \"dev\": true\n },\n \"ansi-styles\": {\n \"version\": \"2.2.1\",\n \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz\",\n \"integrity\": \"sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=\",\n \"dev\": true\n },\n \"babel-code-frame\": {\n \"version\": \"6.22.0\",\n \"resolved\": \"https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz\",\n \"integrity\": \"sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=\",\n \"dev\": true,\n \"requires\": {\n \"chalk\": \"1.1.3\",\n \"esutils\": \"2.0.2\",\n \"js-tokens\": \"3.0.2\"\n }\n },\n \"babel-helpers\": {\n \"version\": \"6.24.1\",\n \"resolved\": \"https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz\",\n \"integrity\": \"sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=\",\n \"dev\": true,\n \"requires\": {\n \"babel-runtime\": \"6.25.0\",\n \"babel-template\": \"6.25.0\"\n }\n },\n \"babel-messages\": {\n \"version\": \"6.23.0\",\n \"resolved\": \"https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz\",\n \"integrity\": \"sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=\",\n \"dev\": true,\n \"requires\": {\n \"babel-runtime\": \"6.25.0\"\n }\n },\n \"babel-plugin-transform-runtime\": {\n \"version\": \"6.23.0\",\n \"resolved\": \"https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz\",\n \"integrity\": \"sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=\",\n \"dev\": true,\n \"requires\": {\n \"babel-runtime\": \"6.25.0\"\n }\n },\n \"babel-runtime\": {\n \"version\": \"6.25.0\",\n \"resolved\": \"https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz\",\n \"integrity\": \"sha1-M7mOql1IK7AajRqmtDetKwGuxBw=\",\n \"dev\": true,\n \"requires\": {\n \"core-js\": \"2.5.0\"\n }\n },\n \"babel-template\": {\n \"version\": \"6.25.0\",\n \"resolved\": \"https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz\",\n \"integrity\": \"sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=\",\n \"dev\": true,\n \"requires\": {\n \"babel-runtime\": \"6.25.0\",\n \"babel-traverse\": \"6.25.0\",\n \"babel-types\": \"6.25.0\",\n \"babylon\": \"6.18.0\",\n \"lodash\": \"4.17.4\"\n }\n },\n \"babel-traverse\": {\n \"version\": \"6.25.0\",\n \"resolved\": \"https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz\",\n \"integrity\": \"sha1-IldJfi/NGbie3BPEyROB+VEklvE=\",\n \"dev\": true,\n \"requires\": {\n \"babel-code-frame\": \"6.22.0\",\n \"babel-messages\": \"6.23.0\",\n \"babel-runtime\": \"6.25.0\",\n \"babel-types\": \"6.25.0\",\n \"babylon\": \"6.18.0\",\n \"debug\": \"2.6.8\",\n \"globals\": \"9.18.0\",\n \"invariant\": \"2.2.2\",\n \"lodash\": \"4.17.4\"\n }\n },\n \"babel-types\": {\n \"version\": \"6.25.0\",\n \"resolved\": \"https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz\",\n \"integrity\": \"sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=\",\n \"dev\": true,\n \"requires\": {\n \"babel-runtime\": \"6.25.0\",\n \"esutils\": \"2.0.2\",\n \"lodash\": \"4.17.4\",\n \"to-fast-properties\": \"1.0.3\"\n }\n },\n \"babylon\": {\n \"version\": \"6.18.0\",\n \"resolved\": \"https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz\",\n \"integrity\": \"sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==\",\n \"dev\": true\n },\n \"chalk\": {\n \"version\": \"1.1.3\",\n \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz\",\n \"integrity\": \"sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=\",\n \"dev\": true,\n \"requires\": {\n \"ansi-styles\": \"2.2.1\",\n \"escape-string-regexp\": \"1.0.5\",\n \"has-ansi\": \"2.0.0\",\n \"strip-ansi\": \"3.0.1\",\n \"supports-color\": \"2.0.0\"\n }\n },\n \"core-js\": {\n \"version\": \"2.5.0\",\n \"resolved\": \"https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz\",\n \"integrity\": \"sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=\"\n },\n \"debug\": {\n \"version\": \"2.6.8\",\n \"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.6.8.tgz\",\n \"integrity\": \"sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=\",\n \"dev\": true,\n \"requires\": {\n \"ms\": \"2.0.0\"\n }\n },\n \"escape-string-regexp\": {\n \"version\": \"1.0.5\",\n \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz\",\n \"integrity\": \"sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=\",\n \"dev\": true\n },\n \"esutils\": {\n \"version\": \"2.0.2\",\n \"resolved\": \"https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz\",\n \"integrity\": \"sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=\",\n \"dev\": true\n },\n \"globals\": {\n \"version\": \"9.18.0\",\n \"resolved\": \"https://registry.npmjs.org/globals/-/globals-9.18.0.tgz\",\n \"integrity\": \"sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==\",\n \"dev\": true\n },\n \"has-ansi\": {\n \"version\": \"2.0.0\",\n \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz\",\n \"integrity\": \"sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=\",\n \"dev\": true,\n \"requires\": {\n \"ansi-regex\": \"2.1.1\"\n }\n },\n \"invariant\": {\n \"version\": \"2.2.2\",\n \"resolved\": \"https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz\",\n \"integrity\": \"sha1-nh9WrArNtr8wMwbzOL47IErmA2A=\",\n \"dev\": true,\n \"requires\": {\n \"loose-envify\": \"1.3.1\"\n }\n },\n \"js-tokens\": {\n \"version\": \"3.0.2\",\n \"resolved\": \"https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz\",\n \"integrity\": \"sha1-mGbfOVECEw449/mWvOtlRDIJwls=\",\n \"dev\": true\n },\n \"lodash\": {\n \"version\": \"4.17.4\",\n \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz\",\n \"integrity\": \"sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=\",\n \"dev\": true\n },\n \"loose-envify\": {\n \"version\": \"1.3.1\",\n \"resolved\": \"https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz\",\n \"integrity\": \"sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=\",\n \"dev\": true,\n \"requires\": {\n \"js-tokens\": \"3.0.2\"\n }\n },\n \"ms\": {\n \"version\": \"2.0.0\",\n \"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz\",\n \"integrity\": \"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=\",\n \"dev\": true\n },\n \"regenerator-runtime\": {\n \"version\": \"0.11.0\",\n \"resolved\": \"https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz\",\n \"integrity\": \"sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==\"\n },\n \"strip-ansi\": {\n \"version\": \"3.0.1\",\n \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz\",\n \"integrity\": \"sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=\",\n \"dev\": true,\n \"requires\": {\n \"ansi-regex\": \"2.1.1\"\n }\n },\n \"supports-color\": {\n \"version\": \"2.0.0\",\n \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz\",\n \"integrity\": \"sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=\",\n \"dev\": true\n },\n \"to-fast-properties\": {\n \"version\": \"1.0.3\",\n \"resolved\": \"https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz\",\n \"integrity\": \"sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=\",\n \"dev\": true\n }\n }\n}\n","components/es/node_modules/babel-runtime/package.json":"{\n \"name\": \"babel-runtime\",\n \"version\": \"6.26.0\",\n \"description\": \"babel selfContained runtime\",\n \"license\": \"MIT\",\n \"repository\": \"https://github.com/babel/babel/tree/master/packages/babel-runtime\",\n \"author\": \"Sebastian McKenzie <sebmck@gmail.com>\",\n \"dependencies\": {\n \"core-js\": \"^2.4.0\",\n \"regenerator-runtime\": \"^0.11.0\"\n },\n \"devDependencies\": {\n \"babel-helpers\": \"^6.22.0\",\n \"babel-plugin-transform-runtime\": \"^6.23.0\"\n }\n}\n","components/es/node_modules/core-js/bower.json":"{\n \"name\": \"core.js\",\n \"main\": \"client/core.js\",\n \"version\": \"2.6.11\",\n \"description\": \"Standard Library\",\n \"keywords\": [\n \"ES3\",\n \"ES5\",\n \"ES6\",\n \"ES7\",\n \"ES2015\",\n \"ES2016\",\n \"ES2017\",\n \"ECMAScript 3\",\n \"ECMAScript 5\",\n \"ECMAScript 6\",\n \"ECMAScript 7\",\n \"ECMAScript 2015\",\n \"ECMAScript 2016\",\n \"ECMAScript 2017\",\n \"Harmony\",\n \"Strawman\",\n \"Map\",\n \"Set\",\n \"WeakMap\",\n \"WeakSet\",\n \"Promise\",\n \"Symbol\",\n \"TypedArray\",\n \"setImmediate\",\n \"Dict\",\n \"polyfill\",\n \"shim\"\n ],\n \"authors\": [\n \"Denis Pushkarev <zloirock@zloirock.ru> (http://zloirock.ru/)\"\n ],\n \"license\": \"MIT\",\n \"homepage\": \"https://github.com/zloirock/core-js\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zloirock/core-js.git\"\n },\n \"ignore\": [\n \"build\",\n \"node_modules\",\n \"tests\"\n ]\n}\n","components/es/node_modules/core-js/package.json":"{\n \"name\": \"core-js\",\n \"description\": \"Standard library\",\n \"version\": \"2.6.11\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zloirock/core-js.git\"\n },\n \"main\": \"index.js\",\n \"devDependencies\": {\n \"LiveScript\": \"1.3.x\",\n \"es-observable-tests\": \"0.2.x\",\n \"eslint\": \"4.19.x\",\n \"eslint-plugin-import\": \"2.12.x\",\n \"grunt\": \"^1.0.2\",\n \"grunt-cli\": \"^1.2.0\",\n \"grunt-contrib-clean\": \"^1.1.0\",\n \"grunt-contrib-copy\": \"^1.0.0\",\n \"grunt-contrib-uglify\": \"3.3.x\",\n \"grunt-contrib-watch\": \"^1.0.0\",\n \"grunt-karma\": \"^2.0.0\",\n \"grunt-livescript\": \"0.6.x\",\n \"karma\": \"^2.0.0\",\n \"karma-qunit\": \"^2.1.0\",\n \"karma-chrome-launcher\": \"^2.2.0\",\n \"karma-firefox-launcher\": \"^1.0.1\",\n \"karma-ie-launcher\": \"^1.0.0\",\n \"karma-phantomjs-launcher\": \"1.0.x\",\n \"phantomjs-prebuilt\": \"2.1.x\",\n \"promises-aplus-tests\": \"^2.1.2\",\n \"qunit\": \"2.6.x\",\n \"temp\": \"^0.8.3\",\n \"webpack\": \"^3.11.0\"\n },\n \"scripts\": {\n \"grunt\": \"grunt\",\n \"lint\": \"eslint ./\",\n \"promises-tests\": \"promises-aplus-tests tests/promises-aplus/adapter\",\n \"observables-tests\": \"node tests/observables/adapter && node tests/observables/adapter-library\",\n \"test\": \"npm run grunt clean copy && npm run lint && npm run grunt livescript client karma:default && npm run grunt library karma:library && npm run promises-tests && npm run observables-tests && lsc tests/commonjs\",\n \"postinstall\": \"node -e \\\"try{require('./postinstall')}catch(e){}\\\"\"\n },\n \"license\": \"MIT\",\n \"keywords\": [\n \"ES3\",\n \"ES5\",\n \"ES6\",\n \"ES7\",\n \"ES2015\",\n \"ES2016\",\n \"ES2017\",\n \"ECMAScript 3\",\n \"ECMAScript 5\",\n \"ECMAScript 6\",\n \"ECMAScript 7\",\n \"ECMAScript 2015\",\n \"ECMAScript 2016\",\n \"ECMAScript 2017\",\n \"Harmony\",\n \"Strawman\",\n \"Map\",\n \"Set\",\n \"WeakMap\",\n \"WeakSet\",\n \"Promise\",\n \"Symbol\",\n \"TypedArray\",\n \"setImmediate\",\n \"Dict\",\n \"polyfill\",\n \"shim\"\n ]\n}\n","components/es/node_modules/herculex/package.json":"{\n \"name\": \"herculex\",\n \"version\": \"0.2.11-beta.3\",\n \"description\": \"Simple, predictable, developer friendly state management for alipay mini-program\",\n \"main\": \"dist/index.js\",\n \"scripts\": {\n \"lint\": \"eslint src\",\n \"lintf\": \"eslint src --fix\"\n },\n \"prepublish\": \"npm run build && npm version patch\",\n \"author\": \"candy.zhengxq@gmail.com\",\n \"license\": \"ISC\",\n \"files\": [\n \"dist\"\n ],\n \"pre-commit\": [\n \"lint\"\n ],\n \"devDependencies\": {\n \"babel-eslint\": \"~7.1.1\",\n \"eslint\": \"~3.5.0\",\n \"eslint-config-standard\": \"~6.0.1\",\n \"eslint-plugin-promise\": \"^3.5.0\",\n \"eslint-plugin-standard\": \"^2.1.1\",\n \"pre-commit\": \"^1.2.2\"\n },\n \"dependencies\": {\n \"immutability-helper-enhanced\": \"^2.8.1\",\n \"babel-runtime\": \"^6.26.0\",\n \"immer\": \"^1.7.2\"\n }\n}\n","components/es/node_modules/immer/package.json":"{\n \"name\": \"immer\",\n \"version\": \"1.12.1\",\n \"description\": \"Create your next immutable state by mutating the current one\",\n \"main\": \"dist/immer.js\",\n \"umd:main\": \"dist/immer.umd.js\",\n \"module\": \"dist/immer.module.js\",\n \"jsnext:main\": \"dist/immer.module.js\",\n \"react-native\": \"dist/immer.module.js\",\n \"types\": \"./dist/immer.d.ts\",\n \"scripts\": {\n \"watch\": \"jest --watch\",\n \"test\": \"jest\",\n \"test:perf\": \"NODE_ENV=production yarn-or-npm build && cd __performance_tests__ && babel-node add-data.js && babel-node todo.js && babel-node incremental.js\",\n \"test:flow\": \"yarn-or-npm flow check __tests__/flow\",\n \"test:dts\": \"tsc -p __tests__/tsconfig.json --noEmit\",\n \"coveralls\": \"jest --coverage && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf ./coverage\",\n \"build\": \"rimraf dist/ && yarn-or-npm rollup && yarn-or-npm typed\",\n \"rollup\": \"cross-env NODE_ENV=production rollup -c\",\n \"typed\": \"cpx 'src/immer.{d.ts,js.flow}' dist -v\"\n },\n \"husky\": {\n \"hooks\": {\n \"pre-commit\": \"pretty-quick --staged\"\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/mweststrate/immer.git\"\n },\n \"keywords\": [\n \"immutable\",\n \"mutable\",\n \"copy-on-write\"\n ],\n \"author\": \"Michel Weststrate\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/mweststrate/immer/issues\"\n },\n \"homepage\": \"https://github.com/mweststrate/immer#readme\",\n \"files\": [\n \"dist/\"\n ],\n \"devDependencies\": {\n \"@types/jest\": \"^22.2.3\",\n \"babel-cli\": \"^6.26.0\",\n \"babel-core\": \"^6.26.0\",\n \"babel-jest\": \"^22.0.4\",\n \"babel-plugin-external-helpers\": \"^6.22.0\",\n \"babel-preset-env\": \"^1.6.1\",\n \"babel-preset-es2015\": \"^6.24.1\",\n \"babel-preset-modern-browsers\": \"^10.0.1\",\n \"coveralls\": \"^3.0.0\",\n \"cpx\": \"^1.5.0\",\n \"cross-env\": \"^5.1.3\",\n \"deep-freeze\": \"^0.0.1\",\n \"flow-bin\": \"^0.68.0\",\n \"husky\": \"^1.2.0\",\n \"immutable\": \"^3.8.2\",\n \"jest\": \"^22.0.4\",\n \"lodash\": \"^4.17.4\",\n \"lodash.clonedeep\": \"^4.5.0\",\n \"prettier\": \"^1.9.2\",\n \"pretty-quick\": \"^1.8.0\",\n \"regenerator-runtime\": \"^0.11.1\",\n \"rimraf\": \"^2.6.2\",\n \"rollup\": \"^0.54.0\",\n \"rollup-plugin-babel\": \"^3.0.3\",\n \"rollup-plugin-commonjs\": \"^8.2.6\",\n \"rollup-plugin-filesize\": \"^1.5.0\",\n \"rollup-plugin-node-resolve\": \"^3.0.2\",\n \"rollup-plugin-uglify\": \"^2.0.1\",\n \"seamless-immutable\": \"^7.1.3\",\n \"typescript\": \"3.1.1\",\n \"uglify-es\": \"^3.3.6\",\n \"yarn-or-npm\": \"^2.0.4\"\n },\n \"jest\": {\n \"testURL\": \"http://localhost\",\n \"transform\": {\n \"\\\\.js$\": \"babel-jest\"\n }\n }\n}\n","components/es/node_modules/immutability-helper-enhanced/index.d.js":"","components/es/node_modules/immutability-helper-enhanced/package.json":"{\n \"name\": \"immutability-helper-enhanced\",\n \"version\": \"2.8.1\",\n \"description\": \"mutate a copy of data without changing the original source\",\n \"main\": \"index.js\",\n \"typings\": \"index.d.ts\",\n \"scripts\": {\n \"test-cov\": \"nyc npm test && nyc report --reporter=lcov\",\n \"test-travis\": \"npm run test-dtslint && nyc npm test && nyc report --reporter=lcov\",\n \"test\": \"mocha test.js\",\n \"test-dtslint\": \"npm run --silent node-lte4 || dtslint\",\n \"node-lte4\": \"node -e 'process.exit(+(/v(\\\\d+)/.exec(process.version)[1]) <= 4 ? 0 : 1)'\"\n },\n \"keywords\": [\n \"immutability\"\n ],\n \"author\": \"Moshe Kolodny\",\n \"license\": \"MIT\",\n \"devDependencies\": {\n \"coveralls\": \"^2.11.6\",\n \"dtslint\": \"^0.2.0\",\n \"expect\": \"^1.14.0\",\n \"mocha\": \"^5.2.0\",\n \"nyc\": \"^5.6.0\"\n },\n \"dependencies\": {\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/kolodny/immutability-helper.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/kolodny/immutability-helper/issues\"\n },\n \"homepage\": \"https://github.com/kolodny/immutability-helper#readme\"\n}\n","components/es/node_modules/immutability-helper-enhanced/tsconfig.json":"{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"lib\": [\"es6\"],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictNullChecks\": true,\n \"strictFunctionTypes\": true,\n \"noEmit\": true,\n\n \"baseUrl\": \".\",\n \"paths\": { \"immutability-helper\": [\".\"] }\n }\n}\n\n","components/es/node_modules/immutability-helper-enhanced/tslint.json":"{\n \"extends\": \"dtslint/dtslint.json\",\n \"rules\": {\n \"no-unnecessary-generics\": false,\n \"file-name-casing\": false\n }\n}\n\n","components/es/node_modules/immutability-helper-enhanced/typings-test.js":"var _array, _array2;\n\n// tslint:disable-next-line:no-implicit-dependencies\nimport update from \"immutability-helper\";\nvar o = null; // ----------------------------------------------------------------------------\n// Basic Tests\n// ----------------------------------------------------------------------------\n// $ExpectType TestObject\n\nupdate(o, {}); // $ExpectType TestObject\n\nupdate(o, {\n number: {\n $set: 1\n }\n}); // $ExpectError\n\nupdate(o, {\n number: {\n $set: \"string\"\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n object: {\n $set: {\n field: 1,\n otherField: \"string\"\n }\n }\n}); // $ExpectError\n\nupdate(o, {\n object: {\n $set: {\n notAField: 1\n }\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n object: {\n $apply: function $apply() {\n return {\n field: 1,\n otherField: \"string\"\n };\n }\n }\n}); // $ExpectError\n\nupdate(o, {\n object: {\n $apply: function $apply() {\n return {\n notAField: 1\n };\n }\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n object: function object() {\n return {\n field: 1,\n otherField: \"string\"\n };\n }\n}); // $ExpectError\n\nupdate(o, {\n object: function object() {\n return {\n notAField: 1\n };\n }\n}); // ----------------------------------------------------------------------------\n// Object Tests\n// ----------------------------------------------------------------------------\n// $ExpectType TestObject\n\nupdate(o, {\n object: {\n field: {\n $set: 1\n }\n }\n}); // $ExpectError\n\nupdate(o, {\n object: {\n field: {\n $set: \"string\"\n }\n }\n}); // $ExpectError\n\nupdate(o, {\n object: {\n notAField: {\n $set: \"string\"\n }\n }\n}); // This tests represents the loophole that if any part of your spec matches the object spec,\n// extraneous fields that don't make sense are ignored.\n//\n// I believe this is because mapped types that include optionality are subject to one of the\n// \"object literal typecheck\" heuristic, specifically, if there are zero compatible fields it's\n// an error but if there is at least one then extraneous fields are permitted.\n// $ExpectType TestObject\n\nupdate(o, {\n object: {\n field: {\n $set: 1\n },\n notAField: \"nonsense\"\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n object: {\n $unset: [\"field\"]\n }\n}); // $ExpectError\n\nupdate(o, {\n object: {\n $unset: [\"notAField\"]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n object: {\n $toggle: [\"field\"]\n }\n}); // $ExpectError\n\nupdate(o, {\n object: {\n $toggle: [\"notAField\"]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n object: {\n $merge: {\n field: 1\n }\n }\n}); // $ExpectError\n\nupdate(o, {\n object: {\n $merge: {\n notAField: 1\n }\n }\n}); // ----------------------------------------------------------------------------\n// Array Tests\n// ----------------------------------------------------------------------------\n// $ExpectType TestObject\n\nupdate(o, {\n array: {\n $push: [\"string\"]\n }\n}); // $ExpectError\n\nupdate(o, {\n array: {\n $push: [1]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n array: {\n $unshift: [\"string\"]\n }\n}); // $ExpectError\n\nupdate(o, {\n array: {\n $unshift: [1]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n array: {\n $splice: [[1]]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n array: {\n $splice: [[1, 2]]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n array: {\n $splice: [[1, 2, \"string\"]]\n }\n}); // $ExpectError\n\nupdate(o, {\n array: {\n $splice: \"string\"\n }\n}); // $ExpectError\n\nupdate(o, {\n array: {\n $splice: [[1, 2, null]]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n array: {\n 1: {\n $set: \"string\"\n }\n }\n}); // $ExpectError\n\nupdate(o, {\n array: {\n 1: {\n $set: 1\n }\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n array: (_array = {}, _array[1] = {\n $set: \"string\"\n }, _array)\n}); // $ExpectType TestObject\n\nupdate(o, {\n array: (_array2 = {}, _array2['1'] = {\n $set: \"string\"\n }, _array2)\n}); // TODO: This test should not pass, but it's because ArraySpec has [index: string]. Changing that\n// to [index: number] fails many more tests by being too permissive, so I figure this is the\n// preferable error to accept. I do not know why [index: number] would cause the types to be\n// permissive to the point of uselessness.\n// $ExpectType TestObject\n\nupdate(o, {\n array: {\n uhOh: {\n $set: \"string\"\n }\n }\n}); // This test passes (i.e., doesn't type check), but for the wrong reasons. See the previous test\n// for details.\n// $ExpectError\n\nupdate(o, {\n array: {\n uhOh: {\n $set: 1\n }\n }\n}); // ----------------------------------------------------------------------------\n// Set Tests\n// ----------------------------------------------------------------------------\n// $ExpectType TestObject\n\nupdate(o, {\n set: {\n $add: [\"string\"]\n }\n}); // $ExpectError\n\nupdate(o, {\n set: {\n $add: [1]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n set: {\n $remove: [\"string\"]\n }\n}); // $ExpectError\n\nupdate(o, {\n set: {\n $remove: [1]\n }\n}); // ----------------------------------------------------------------------------\n// Map Tests\n// ----------------------------------------------------------------------------\n// $ExpectType TestObject\n\nupdate(o, {\n map: {\n $add: [[\"string\", 1]]\n }\n}); // $ExpectError\n\nupdate(o, {\n map: {\n $add: [[1, 1]]\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n map: {\n $remove: [\"string\"]\n }\n}); // $ExpectError\n\nupdate(o, {\n map: {\n $remove: [1]\n }\n}); // ----------------------------------------------------------------------------\n// Union Type Tests\n// ----------------------------------------------------------------------------\n// $ExpectType TestObject\n\nupdate(o, {\n union: {\n $set: new Set()\n }\n}); // $ExpectType TestObject\n\nupdate(o, {\n union: {\n $set: new Map()\n }\n}); // Matches the Set variant.\n// $ExpectType TestObject\n\nupdate(o, {\n union: {\n $add: [\"string\"]\n }\n}); // Matches the Map variant.\n// $ExpectType TestObject\n\nupdate(o, {\n union: {\n $add: [[\"string\", 1]]\n }\n}); // $ExpectError\n\nupdate(o, {\n union: {\n $add: [[\"string\", \"string\"]]\n }\n}); // Matches both the Set and Map variants.\n// $ExpectType TestObject\n\nupdate(o, {\n union: {\n $remove: [\"string\"]\n }\n}); // $ExpectError\n\nupdate(o, {\n union: {\n $remove: 1\n }\n}); // ----------------------------------------------------------------------------\n// Intersection Type Tests\n// ----------------------------------------------------------------------------\n\nvar intersected = null; // $ExpectType TestObject\n\nupdate(o, {\n intersection: {\n $set: intersected\n }\n}); // $ExpectError\n\nupdate(o, {\n intersection: {\n $set: []\n }\n}); // $ExpectError\n\nupdate(o, {\n intersection: {\n $set: {\n field: 1\n }\n }\n}); // Matches the object half but not the array half.\n// This fails to type check because object specs are only allowed if there is no more-specific spec\n// that matches. In this case, the array spec matches, so we don't get the object-related features.\n// This is arguably a bug, but this is a pretty strange type so we should be okay not supporting it.\n// $ExpectError\n\nupdate(o, {\n intersection: {\n field: {\n $set: 1\n }\n }\n}); // Matches the array half but not the object half.\n// $ExpectType TestObject\n\nupdate(o, {\n intersection: {\n $unshift: [\"string\"]\n }\n}); // ----------------------------------------------------------------------------\n// Complex Spec Tests\n// ----------------------------------------------------------------------------\n// $ExpectType TestObject\n\nupdate(o, {\n complicated: {\n array: {\n 1: {\n nestedArray: {\n 1: {\n field: {\n $set: \"string\"\n },\n otherField: {\n $merge: {\n anotherReallyNestedField: 1\n }\n }\n }\n },\n map: {\n $add: [[{\n key: \"string\",\n extraneousKeyField: \"string\"\n }, {\n value: 1\n }]]\n }\n }\n }\n }\n}); // ----------------------------------------------------------------------------\n// Custom Commands Tests\n// ----------------------------------------------------------------------------\n\n// $ExpectType TestObject\nupdate(o, {\n object: {\n field: {\n $foo: \"string\"\n }\n }\n}); // $ExpectError\n\nupdate(o, {\n object: {\n field: {\n $foo: 1\n }\n }\n});","components/es/node_modules/mini-antui/es/amount-input/index.axml":"<view class=\"am-amount {{className}}\">\n <view class=\"am-amount-title\">{{title}}</view>\n <view class=\"am-amount-input\">\n <view class=\"am-amount-synthetic\">\n <text class=\"am-amount-symbol\">¥</text>\n <text class=\"am-amount-placeholder\" style=\"{{ visibility: _value.length == 0 ? 'visible': 'hidden'}}\">{{placeholder}}</text>\n </view>\n <input\n type=\"number\"\n maxlength=\"{{maxLength}}\"\n class=\"am-amount-value\"\n value=\"{{_value}}\"\n focus=\"{{focus}}\"\n onInput=\"onInput\"\n onConfirm=\"onConfirm\"\n onFocus=\"onFocus\"\n onBlur=\"onBlur\" />\n <view class=\"am-amount-clear {{ _value.length > 0 && focus ? 'am-amount-clear-show' : '' }}\" onTap=\"onClearTap\">\n <icon type=\"clear\" size=\"22\" />\n </view>\n </view>\n <view class=\"am-amount-footer\">\n <text class=\"am-amount-extra\">{{extra}}</text>\n <view class=\"am-amount-btn\" onTap=\"onButtonClick\">{{btnText}}</view>\n </view>\n</view>","components/es/node_modules/mini-antui/es/amount-input/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/calendar/index.axml":"<view class=\"am-calendar {{className}}\" a:if=\"{{dates.length > 0}}\">\n <view class=\"am-calendar-months\">\n <view class=\"am-calendar-prev-month\" onTap=\"onPrevMonthTap\">\n <view class=\"am-calendar-arrow\"></view>\n </view>\n <view class=\"am-calendar-selected-month\">{{selectedYear}}年{{selectedMonth + 1}}月</view>\n <view class=\"am-calendar-next-month\" onTap=\"onNextMonthTap\">\n <view class=\"am-calendar-arrow next\"></view>\n </view>\n </view>\n <view class=\"am-calendar-days\">\n <block a:for=\"{{['日', '一', '二', '三', '四', '五', '六']}}\">\n <view class=\"am-calendar-day\">{{item}}</view>\n </block>\n </view>\n <view class=\"am-calendar-dates\">\n <block a:for=\"{{dates}}\">\n <view class=\"am-calendar-week\">\n <block a:for=\"{{item}}\">\n <view\n class=\"am-calendar-date-wrap\n {{ item.isSelected ? 'am-calendar-selected': '' }}\n {{ item.isStart ? 'am-calendar-start': '' }}\n {{ item.isMiddle ? 'am-calendar-middle': '' }}\n {{ item.isEnd ? 'am-calendar-end': '' }}\n {{ type === 'range' ? 'is-range' : '' }}\"\n data-year=\"{{item.year}}\"\n data-month=\"{{item.month}}\"\n data-date=\"{{item.date}}\"\n onTap=\"onDateTap\"\n >\n <view\n class=\"am-calendar-block {{ blockType === 2 ? 'has-tag': '' }}\"\n ></view>\n <view\n class=\"am-calendar-date {{ item.isGray ? 'am-calendar-gray': '' }} {{ item.isToday ? 'am-calendar-today': ''}}\"\n >{{item.date}}</view>\n <view class=\"am-calendar-tag\" style=\"{{\n color: item.isSelected || item.isMiddle || item.isStart || item.isEnd ? '#fff' : item.color\n }}\">{{item.tag}}</view>\n </view>\n </block>\n </view>\n </block>\n </view>\n</view>\n","components/es/node_modules/mini-antui/es/calendar/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/card/index.axml":"<view\n class=\"am-card\"\n hover-class=\"am-card-active\"\n onTap=\"onCardClick\"\n>\n <view class=\"am-card-body\">\n <image a:if=\"{{thumb}}\" src=\"{{thumb}}\" class=\"am-card-thumb\" />\n <view class=\"am-card-content\">\n <view a:if=\"{{!thumb || (thumb && footer)}}\" class=\"am-card-title\">{{title}}</view>\n <view class=\"am-card-subtitle\">{{subTitle}}</view>\n <view a:if=\"{{!footer && thumb}}\" class=\"am-card-title\">{{title}}</view>\n </view>\n <view class=\"am-card-arrow\" aria-hidden=\"true\" />\n </view>\n <view a:if=\"{{footer}}\" class=\"am-card-footer\">\n <image a:if=\"{{footerImg}}\" src=\"{{footerImg}}\" />\n {{footer}}\n </view>\n</view>\n","components/es/node_modules/mini-antui/es/card/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/face-detection/index.axml":"<web-view \n a:if=\"{{appName && serviceName}}\"\n src=\"https://render.alipay.com/p/s/tiny-webar-online/www/faceDetect.html?facing={{facing}}&appName={{appName}}&serviceName={{serviceName}}&useLiveFaceCheck={{useLiveFaceCheck}}&resignSuccessBtnText={{btnText}}\"\n id=\"am-face-detection\"\n onMessage=\"onMessage\"\n enableWK=\"{{false}}\"\n/>\n<view a:else style=\"color: red; text-align: center; font-size: 14px; padding: 10px\">appName and serviceName is required</view>","components/es/node_modules/mini-antui/es/face-detection/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/filter/filter-item/index.axml":"<view class=\"am-filter-item-wrap {{className}}\" onTap=\"handleClick\">\n <view class=\"am-filter-item {{confirmStyle !=='' ? 'am-filter-click':''}}\">{{value}}</view>\n</view>\n","components/es/node_modules/mini-antui/es/filter/filter-item/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/filter/index.axml":"<view class=\"am-filter-{{show ? 'show' : 'hide'}} {{className}}\" disable-scroll=\"{{false}}\">\n <view class=\"am-filter-mask\" />\n <view class=\"am-filter-document\">\n <view class=\"am-filter-content\" onChange=\"{{callBackFn}}\">\n <view class=\"am-filter-list\">\n <slot/>\n </view>\n <view class=\"am-filter-btn\" a:if=\"{{max !== 1}}\">\n <button type=\"default\" class=\"am-filter-default\" onTap=\"resetFn\">重置</button>\n <button type=\"primary\" class=\"am-filter-primary\" onTap=\"confirmFn\">确定</button>\n </view>\n </view>\n </view>\n</view>\n","components/es/node_modules/mini-antui/es/filter/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/footer/index.axml":"<view class=\"am-footer {{className}}\">\n <view class=\"am-footer-links\" a:if=\"{{links && links.length > 0}}\">\n <block a:for=\"{{links}}\">\n <navigator class=\"am-footer-link\" url=\"{{item.url}}\">{{item.text}}</navigator>\n </block>\n </view>\n <view class=\"am-footer-copyright\" a:if=\"{{copyright}}\">{{copyright}}</view>\n</view>","components/es/node_modules/mini-antui/es/footer/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/grid/index.axml":"<view class=\"am-grid am-grid-{{columnNum}} {{circular && columnNum === 4 ? 'circular' : ''}} {{hasLine ? '' : 'am-grid-no-line'}}\" >\n\t<block a:for=\"{{list}}\">\n\t\t<view\n\t\t\tstyle=\"width:{{100/(columnNum)}}%;\"\n\t\t\tclass=\"am-grid-item {{list.some(item => item.desc && item.desc) ? 'has-desc' : ''}}\"\n\t\t\tonTap=\"onGridItemClick\"\n\t\t\tdata-index={{index}}\n\t\t\tkey=\"grid-item-{{index}}\"\n\t\t>\n\t\t\t<view class=\"am-grid-border {{index < 2 ? 'am-grid-top' : ''}} {{index >= bottomIndex ? 'am-grid-bottom' : ''}} {{(index + 1) % columnNum === 0 ? 'am-grid-right' : ''}}\" />\n\t\t\t<view class=\"am-grid-item-wrapper\">\n\t\t\t\t<view class=\"am-grid-icon-container\">\n\t\t\t\t\t<image src=\"{{item.icon}}\" class=\"am-grid-icon\" mode=\"aspectFit\" />\n\t\t\t\t</view>\n\t\t\t\t<view class=\"am-grid-text-wrapper\">\n\t\t\t\t\t<text class=\"am-grid-text\">{{item.text}}</text>\n\t\t\t\t\t<text\tclass=\"am-grid-desc\" a:if=\"{{(columnNum === 2 || columnNum === 3) && item.desc && item.desc !== ''}}\">{{item.desc}}</text>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</block>\n</view>","components/es/node_modules/mini-antui/es/grid/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/input-item/index.axml":"<view\n\tclass=\"am-input-item {{last ? 'last': ''}} {{className}}\"\n>\n\t<view class=\"am-input-line\">\n <view a:if=\"{{$slots.$default}}\" class=\"am-input-label {{labelCls}}\">\n <slot />\n </view>\n <input\n enableNative=\"{{enableNative}}\"\n sync-input=\"{{syncInput}}\"\n class=\"am-input-content {{inputCls}}\"\n value=\"{{value}}\"\n name=\"{{name}}\"\n type=\"{{type}}\"\n password=\"{{password}}\"\n placeholder=\"{{placeholder}}\"\n placeholderClass=\"{{placeholderClass}}\"\n placeholderStyle=\"{{placeholderStyle}}\"\n disabled=\"{{disabled}}\"\n maxlength=\"{{maxlength}}\"\n focus=\"{{focus}}\"\n onInput=\"onInput\"\n onConfirm=\"onConfirm\"\n onFocus=\"onFocus\"\n onBlur=\"onBlur\"\n />\n <view class=\"am-input-clear {{clear && value.length > 0 && !disabled && _focus ? 'show' : 'hidden'}}\" onTap=\"onClear\">\n <icon size=\"18\" type=\"clear\" />\n </view>\n <slot name=\"extra\" />\n\t\t<view class=\"am-input-line-bottom\" />\n\t</view>\n</view>\n","components/es/node_modules/mini-antui/es/input-item/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/list/index.axml":"<view class=\"am-list {{className}}\">\n <view class=\"am-list-header\" a:if=\"{{$slots.header}}\">\n <slot name=\"header\" />\n </view>\n <view class=\"am-list-body\">\n <slot />\n </view>\n <view class=\"am-list-footer\" a:if=\"{{$slots.footer}}\">\n <slot name=\"footer\" />\n </view>\n</view>\n","components/es/node_modules/mini-antui/es/list/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/list/list-item/index.axml":"<view\n\tclass=\"am-list-item am-list-{{align}} {{multipleLine ? 'am-list-multiple' : ''}} {{last ? 'last': ''}} {{className}}\"\n\thover-class=\"{{disabled ? '' : 'am-list-item-hover'}}\"\n\tonTap=\"onItemTap\"\n\tdata-index=\"{{index}}\"\n>\n\t<image a:if={{thumb}} class=\"am-list-thumb\" src=\"{{thumb}}\" mode=\"scaleToFill\" />\n\t<view class=\"am-list-line {{wrap ? 'am-list-wrap' : ''}}\">\n\t\t<view class=\"am-list-content\">\n\t\t\t<slot />\n\t\t</view>\n\t\t<view a:if={{$slots.extra}} class=\"am-list-extra\" >\n\t\t\t<slot name=\"extra\" />\n\t\t</view>\n\t\t<view a:if={{arrow}} class=\"am-list-arrow\" />\n\t\t<view class=\"am-list-line-bottom\" />\n\t</view>\n</view>\n","components/es/node_modules/mini-antui/es/list/list-item/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/message/index.axml":"<view class=\"am-message {{className}}\">\n <icon class=\"am-icon\" size=\"64\" type=\"{{type}}\" />\n <view class=\"am-message-main\">\n {{title}}\n </view>\n <view a:if=\"{{subTitle}}\" class=\"am-message-sub\">\n {{subTitle}}\n </view>\n</view>\n<view class=\"am-button-wrap\" a:if=\"{{mainButton || subButton}}\">\n <button\n a:if=\"{{mainButton}}\"\n type=\"primary\"\n disabled=\"{{mainButton.disabled}}\"\n onTap=\"tapMain\"\n >\n {{mainButton.buttonText}}\n </button>\n <button\n a:if=\"{{subButton}}\"\n type=\"default\"\n disabled=\"{{subButton.disabled}}\"\n onTap=\"tapSub\"\n >\n {{subButton.buttonText}}\n </button>\n</view>\n","components/es/node_modules/mini-antui/es/message/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/modal/index.axml":"<view class=\"am-modal-{{show ? 'show' : 'hide'}}\" disable-scroll=\"{{true}}\">\n\t<view class=\"am-modal-mask\" />\n\t<view class=\"am-modal-document {{advice === true ? 'am-modal-document-advice' : '' }}\">\n\t\t<view class=\"am-modal {{className}}\">\n\t\t\t<view a:if=\"{{topImage}}\" class=\"am-modal-image am-modal-image-{{topImageSize}}\">\n\t\t\t\t<image src=\"{{topImage}}\" />\n\t\t\t</view>\n\t\t\t<view class=\"am-modal-header\" a:if=\"{{$slots.header}}\">\n\t\t\t\t<slot name=\"header\" />\n\t\t\t</view>\n\t\t\t<view class=\"am-modal-body\">\n\t\t\t\t<slot />\n\t\t\t</view>\n\t\t\t<view class=\"am-modal-footer\" hover-class=\"am-modal-footer-active\" a:if=\"{{$slots.footer}}\" onTap=\"onModalClick\">\n\t\t\t\t<slot name=\"footer\" />\n\t\t\t</view>\n\t\t\t<view class=\"am-modal-close {{closeType === '1' ? 'am-close-white' : ''}}\" hover-class=\"am-modal-close-active\" a:if=\"{{showClose}}\" onTap=\"onModalClose\" />\n\t\t</view>\n\t</view>\n</view>\n","components/es/node_modules/mini-antui/es/modal/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/notice/index.axml":"<view class=\"am-notice\" a:if=\"{{show}}\">\n <view class=\"am-notice-content\">\n <slot></slot>\n </view>\n <view class=\"am-notice-operation\" onTap=\"onTap\">\n <view a:if=\"{{action !== ''}}\" class=\"am-notice-operation-text\" >{{action}}</view>\n <view a:else class=\"am-notice-{{mode}}\"></view>\n </view>\n</view>","components/es/node_modules/mini-antui/es/notice/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/page-result/index.axml":"<view class=\"am-page-result {{className}} {{local ? 'am-local-page': ''}}\">\n <view class=\"am-page-result-pic page-{{type}}\" />\n <view class=\"am-page-result-title\" a:if=\"{{!local && title}}\">{{title}}</view>\n <view class=\"am-page-result-brief\" a:if=\"{{brief}}\">{{brief}}</view>\n <slot></slot>\n</view>\n","components/es/node_modules/mini-antui/es/page-result/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/picker-item/index.axml":"<view\n\tclass=\"am-picker-item {{last ? 'last': ''}} {{className}}\"\n>\n\t<view class=\"am-picker-line\">\n <view a:if=\"{{$slots.$default}}\" class=\"am-picker-label {{labelCls}}\">\n <slot />\n </view>\n <view class=\"am-picker-wrapper\" onTap=\"onPickerTap\">\n <input type=\"text\" name=\"{{name}}\" value=\"{{value}}\" style=\"display: none\" />\n <text class=\"am-picker-content am-picker-text {{pickerCls}} {{ value.length > 0 ? 'am-picker-content-value': 'am-picker-content-placeholder' }}\">\n {{value.length > 0 ? value : placeholder}}\n </text>\n <view class=\"am-picker-arrow\"></view>\n </view>\n <slot name=\"extra\" />\n\t\t<view class=\"am-picker-line-bottom\" />\n\t</view>\n</view>","components/es/node_modules/mini-antui/es/picker-item/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/popover/index.axml":"<view class=\"am-popover {{className}}\">\n <!-- 点击元素 -->\n <slot/>\n <!-- 弹窗层 -->\n <view class=\"am-popover-container\" a:if=\"{{show}}\">\n <!-- 蒙层 -->\n <view class=\"am-popover-mask\" a:if=\"{{showMask}}\" onTap=\"onMaskClick\"></view>\n <!-- 弹窗内容 -->\n <view class=\"am-popover-content am-popover-placement-{{position}} border-{{!showMask}}\">\n <!-- 箭头 -->\n <view class=\"am-popover-arrow border-{{!showMask}}\"></view>\n <!-- 文案 -->\n <view class=\"am-popover-inner\">\n <slot name=\"items\"></slot>\n </view>\n </view>\n </view>\n</view>","components/es/node_modules/mini-antui/es/popover/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/popover/popover-item/index.axml":"<view class=\"am-popover-item {{className}}\" onTap=\"onItemClick\">\n <slot/>\n</view>\n","components/es/node_modules/mini-antui/es/popover/popover-item/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/popup/index.axml":"<view class=\"am-popup {{className}} {{show ? 'am-popup-show' : ''}} {{ animation ? 'animation': '' }}\" disable-scroll=\"{{disableScroll}}\">\n <view class=\"am-popup-mask\" a:if=\"{{mask}}\" onTap=\"onMaskTap\"></view>\n <view class=\"am-popup-content am-popup-{{position}}\"><slot /></view>\n</view>","components/es/node_modules/mini-antui/es/popup/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/search-bar/index.axml":"<view class=\"am-search {{className}}\">\n <view class=\"am-search-input\">\n <view class=\"am-search-synthetic\">\n <view>\n <view class=\"am-search-synthetic-icon\"></view>\n <text class=\"am-search-synthetic-placeholder\" style=\"{{ visibility: !focus && _value.length === 0 ? 'visible': 'hidden'}}\">{{placeholder}}</text>\n </view>\n </view>\n <input\n enableNative=\"{{false}}\"\n class=\"am-search-value\"\n confirm-type=\"search\"\n value=\"{{_value}}\"\n focus=\"{{focus}}\"\n maxlength=\"{{maxLength}}\"\n disabled=\"{{disabled}}\"\n onInput=\"handleInput\"\n onFocus=\"handleFocus\"\n onConfirm=\"handleConfirm\"\n sync-input=\"{{true}}\"\n onBlur=\"handleBlur\" />\n <view class=\"am-search-clear {{ _value.length > 0 && focus ? 'am-search-clear-show' : '' }}\" onTap=\"handleClear\">\n <icon type=\"clear\" size=\"14\" />\n </view>\n </view>\n <view\n class=\"am-search-cancel am-search-anim {{ focus || showCancelButton ? 'am-search-repos' : '' }}\"\n onTap=\"handleCancel\">取消</view>\n</view>\n","components/es/node_modules/mini-antui/es/search-bar/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/stepper/index.axml":"<view \n class=\"am-stepper-content {{className}}\"\n style=\"opacity:{{disabled ? '0.4' : '1'}}\"\n max=\"{{max}}\"\n min=\"{{min}}\"\n onChange=\"{{callBackFn}}\"\n step=\"{{step}}\"\n disabled=\"{{disabled || readOnly}}\"\n>\n <view class=\"am-stepper-reduce\" style=\"opacity:{{opaReduce}}\" data-type=\"reduce\" onTap=\"changeFn\" />\n <input\n class=\"am-stepper-input\"\n style=\"display:{{showNumber ? 'inline-block' : 'none'}}\"\n value=\"{{value}}\"\n onBlur=\"onBlur\"\n disabled=\"{{disabled || readOnly}}\"\n type=\"number\"\n />\n <view class=\"am-stepper-add\" style=\"opacity:{{opaAdd}}\" data-type=\"add\" onTap=\"changeFn\" />\n</view>","components/es/node_modules/mini-antui/es/stepper/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/steps/index.axml":"<view class=\"am-hor-steps {{className}}\" a:if=\"{{direction == 'horizontal'}}\">\n <view class=\"am-hor-step\" a:for=\"{{items}}\" style=\"{{width: 100 / (items.length - 1) + '%'}}\">\n <view class=\"am-hor-step-line {{index < activeIndex - 1 ? 'is-active' : ''}} {{index >= items.length - 1 ? 'is-last' : ''}}\">\n <view class=\"am-hor-step-icon {{index <= activeIndex - 1 ? 'is-active' : ''}}\"></view>\n </view>\n <view class=\"am-hor-step-text\">\n <view class=\"am-hor-step-title\">\n <text>{{item.title}}</text>\n </view>\n <view class=\"am-hor-step-description\">\n <text>{{item.description}}</text>\n </view>\n </view>\n </view>\n</view>\n<view class=\"am-vertical-steps {{className}}\" a:if=\"{{direction == 'vertical'}}\">\n <view class=\"am-vertical-step\" a:for=\"{{items}}\">\n <view class=\"am-vertical-step-left\">\n <view \n class=\"am-vertical-step-line am-vertical-step-line-top {{index < activeIndex ? 'is-active' : ''}}\"\n a:if=\"{{index < items.length - 1}}\"\n ></view>\n <view \n class=\"am-vertical-step-line am-vertical-step-line-bottom {{index < activeIndex - 1 ? 'is-active' : ''}}\"\n a:if=\"{{index < items.length - 1}}\"\n ></view>\n <view class=\"am-vertical-step-icon is-fail\" a:if=\"{{index == failIndex - 1}}\">\n <icon type=\"cancel\" size=\"24\"/>\n </view>\n <view class=\"am-vertical-step-icon is-active\" a:elif=\"{{index <= activeIndex - 1}}\">\n <icon type=\"success\" size=\"24\"/>\n </view>\n <view class=\"am-vertical-step-icon is-normal\" a:else></view>\n </view>\n <view class=\"am-vertical-step-right\">\n <view class=\"am-vertical-step-title {{index <= activeIndex - 1 ? 'is-active' : ''}} {{index == failIndex - 1 ? 'is-fail' : ''}}\">\n <text>{{item.title}}</text>\n </view>\n <view class=\"am-vertical-step-description\">\n <text>{{item.description}}</text>\n </view>\n </view>\n </view>\n</view>","components/es/node_modules/mini-antui/es/steps/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/swipe-action/index.axml":"<view class=\"am-swipe {{swiping ? 'am-swiping' : ''}} {{className}}\">\n <block a:if=\"{{right.length > 0}}\">\n <view class=\"am-swipe-right am-swipe-right-{{$id}}\">\n <block a:for=\"{{right}}\">\n <view\n class=\"am-swipe-btn am-swipe-btn-{{item.type}}\"\n onTap=\"onItemClick\"\n data-index=\"{{index}}\"\n key=\"swipe-item-{{index}}\"\n >\n {{item.text}}\n </view>\n </block>\n </view>\n </block>\n <view\n class=\"am-swipe-content\"\n onTap=\"onSwipeTap\"\n onTouchStart=\"onSwipeStart\"\n onTouchEnd=\"onSwipeEnd\"\n catchTouchMove=\"onSwipeMove\"\n data-type=\"content\"\n style=\"-webkit-transform: translateX({{leftPos}}px); transform: translateX({{leftPos}}px);\"\n >\n <slot />\n </view>\n</view>","components/es/node_modules/mini-antui/es/swipe-action/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/tabs/index.axml":"<import-sjs name=\"util\" from=\"./util.sjs\"/>\n<view class=\"am-tabs {{className}}\">\n <view class=\"am-tabs-tab-bar-wrap\">\n <view class=\"am-tabs-bar\">\n <view class=\"am-tabs-bar-content-wrap\">\n <view class=\"am-tabs-scroll-left\"></view>\n <view class=\"am-tabs-scroll-right\"></view>\n <scroll-view\n scroll-left=\"{{util.calcScrollLeft(windowWidth, tabWidth, activeTab)}}\"\n scroll-x=\"{{true}}\"\n scroll-with-animation=\"{{animation}}\"\n class=\"am-tabs-bar-content\">\n <block a:for=\"{{tabs}}\">\n <view\n data-index=\"{{index}}\"\n key=\"tabs-item-{{index}}\"\n onTap=\"handleTabClick\"\n style=\"{{\n backgroundColor: tabBarBackgroundColor,\n color: index === activeTab ? tabBarActiveTextColor: tabBarInactiveTextColor,\n width: (tabs.length > 3 ? 0.25 : 1 / tabs.length) * 100 + '%',\n }}\"\n class=\"am-tabs-bar-tab\">\n <view class=\"am-tabs-bar-title {{ index === activeTab ? activeCls : '' }}\" style=\"{{ borderBottomColor: index === activeTab ? tabBarUnderlineColor : '' }}\">\n {{item.title}}\n <view a:if=\"{{item.badgeType}}\" class=\"am-tabs-bar-badge {{item.badgeType}}\">\n {{item.badgeType === 'text' && item.badgeText ? item.badgeText.substr(0, 1) : ''}}\n </view>\n </view>\n </view>\n </block>\n </scroll-view>\n </view>\n <view class=\"am-tabs-plus-wrap {{showPlus ? 'show' : ''}}\">\n <view class=\"am-tabs-plus\" onTap=\"handlePlusClick\"></view>\n </view>\n </view>\n <block a:if=\"{{swipeable}}\">\n <swiper\n circular=\"{{false}}\"\n current=\"{{activeTab}}\"\n interval=\"99999999\"\n autoplay=\"{{autoplay}}\"\n onChange=\"handleSwiperChange\"\n class=\"am-tabs-content-wrap {{util.compareVersion(version) < 0 ? 'fix' : ''}}\">\n <slot></slot>\n </swiper>\n </block>\n <block a:else>\n <view class=\"am-tabs-content-wrap {{util.compareVersion(version) >= 0 ? 'fix' : ''}}\">\n <view class=\"am-tabs-slides\" style=\"{{ transform: 'translate3d(' +(-activeTab * 100) + 'vw, 0, 0)' }}\">\n <slot></slot>\n </view>\n </view>\n </block>\n </view>\n</view>\n","components/es/node_modules/mini-antui/es/tabs/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/tabs/tab-content/index.axml":"<swiper-item style=\"{{style}}\" class=\"am-tabs-pane-wrap\" key=\"tabs-pane-{{key}}\">\n <slot></slot>\n</swiper-item>\n","components/es/node_modules/mini-antui/es/tabs/tab-content/index.json":"{\n \"component\": true\n}\n","components/es/node_modules/mini-antui/es/tabs/util.sjs":"function toIntArray(v) {\n const ret = [];\n const version = v.split('.');\n\n for (let i = 0; i < version.length; i++) {\n ret.push(parseInt(version[i], 10));\n }\n\n return ret;\n}\n\nconst calcScrollLeft = (windowWidth, tabWidth, current) => {\n let scrollInit = current * windowWidth * tabWidth;\n\n if (current <= 2) {\n scrollInit = 0;\n } else {\n scrollInit = (current - 2) * windowWidth * tabWidth;\n }\n\n return scrollInit;\n};\n\nconst compareVersion = (v) => {\n const targetVersion = toIntArray('1.10.0');\n const version = toIntArray(v);\n let ret = 0;\n\n for (let i = 0, n1, n2; i < version.length; i++) {\n n1 = targetVersion[i];\n n2 = version[i];\n\n if (n1 > n2) {\n ret = -1;\n break\n }\n\n if (n1 < n2) {\n ret = 1;\n break;\n }\n }\n\n return ret;\n}\n\nexport default {\n calcScrollLeft,\n compareVersion,\n};\n","components/es/node_modules/mini-antui/es/tips/tips-dialog/index.axml":"<view class=\"am-tips-dialog am-tips-dialog-{{type}} {{className}}\" a:if=\"{{show}}\">\n <view class=\"am-tips-dialog-wrap\">\n <view class=\"am-tips-dialog-close\" onTap=\"onCloseTap\" a:if=\"{{type === 'rectangle'}}\"></view>\n <view class=\"am-tips-dialog-icon\" a:if=\"{{iconUrl}}\">\n <image src=\"{{iconUrl}}\" />\n </view>\n <view class=\"am-tips-dialog-content\">\n <slot name=\"content\" />\n </view>\n <view class=\"am-tips-dialog-action\">\n <slot name=\"operation\" />\n </view>\n </view>\n</view>","components/es/node_modules/mini-antui/es/tips/tips-dialog/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/tips/tips-plain/index.axml":"<view time=\"{{time}}\" onTap=\"onClose\" class=\"am-tips-plain-favorite\" a:if=\"{{show}}\">\n <view class=\"am-tips-plain-favorite-wrap {{className}}\">\n <view class=\"am-tips-plain-favorite-content\">\n <slot />\n </view>\n </view>\n</view>","components/es/node_modules/mini-antui/es/tips/tips-plain/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/vtabs/index.axml":"<view class=\"am-vtabs {{className}}\">\n <view\n class=\"am-vtabs-bar\"\n style=\"{{ backgroundColor: tabBarInactiveBgColor }}\"\n >\n <scroll-view\n class=\"am-vtabs-bar-content\"\n scroll-top=\"{{tabTop}}\"\n scroll-y=\"{{true}}\">\n <block a:for=\"{{tabs}}\">\n <view\n data-index=\"{{index}}\"\n data-anchor=\"{{item.anchor}}\"\n onTap=\"handleTabClick\"\n class=\"am-vtabs-bar-tab\"\n style=\"{{\n color: current == index ? tabBarActiveTextColor : tabBarInactiveTextColor,\n borderLeftColor: current == index ? tabBarlineColor : tabBarInactiveBgColor,\n borderRightColor: current == index ? tabBarActiveBgColor : tabBarInactiveBgColor,\n backgroundColor: current == index ? tabBarActiveBgColor : tabBarInactiveBgColor\n }}\"\n >\n <view class=\"am-vtabs-bar-title\">\n {{item.title}}\n <view class=\"am-vtabs-bar-badge {{item.badgeType}}\">\n {{item.badgeType === 'text' && item.badgeText ? item.badgeText.substr(0, 1) : ''}}\n </view>\n </view>\n </view>\n </block>\n </scroll-view>\n </view>\n <view class=\"am-vtabs-content-wrap\" onTouchMove=\"onWrapTouchMove\">\n <block a:if=\"{{swipeable}}\">\n <scroll-view\n class=\"am-vtabs-slides\"\n scroll-with-animation=\"{{animated}}\"\n scroll-y=\"{{true}\"\n scroll-top=\"{{wrapScrollTop}}\"\n onScroll=\"onScroll\">\n <slot></slot>\n </scroll-view>\n </block>\n <block a:else>\n <view class=\"am-vtabs-slides {{animated ? 'animate' : ''}}\" style=\"{{ transform: 'translate3d(0, ' +(-wrapScrollTop) + 'px, 0)' }}\">\n <slot></slot>\n </view>\n </block>\n </view>\n</view>","components/es/node_modules/mini-antui/es/vtabs/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/es/vtabs/vtab-content/index.axml":"<view id=\"am-vtab-slide-{{anchor}}\">\n <slot></slot>\n</view>","components/es/node_modules/mini-antui/es/vtabs/vtab-content/index.json":"{\n \"component\": true\n}","components/es/node_modules/mini-antui/package.json":"{\n \"name\": \"mini-antui\",\n \"version\": \"0.3.13\",\n \"description\": \"小程序版AntUI\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git@github.com:ant-mini-program/mini-antui.git\"\n },\n \"files\": [\n \"es\"\n ],\n \"keywords\": [\n \"antui\",\n \"mini-program\"\n ],\n \"devDependencies\": {\n \"eslint\": \"^4.19.1\",\n \"eslint-config-ali\": \"^3.1.0\",\n \"eslint-plugin-import\": \"^2.11.0\",\n \"pre-commit-eslint\": \"^0.0.6\",\n \"rc-tools\": \"6.x\"\n },\n \"scripts\": {\n \"build\": \"rc-tools run compile && node scripts/cp.js && node scripts/rm.js\",\n \"pub\": \"git push origin && npm run build && npm publish\"\n }\n}\n","components/es/node_modules/moment/package.json":"{\n \"name\": \"moment\",\n \"version\": \"2.24.0\",\n \"description\": \"Parse, validate, manipulate, and display dates\",\n \"homepage\": \"http://momentjs.com\",\n \"author\": \"Iskren Ivov Chernev <iskren.chernev@gmail.com> (https://github.com/ichernev)\",\n \"contributors\": [\n \"Tim Wood <washwithcare@gmail.com> (http://timwoodcreates.com/)\",\n \"Rocky Meza (http://rockymeza.com)\",\n \"Matt Johnson <mj1856@hotmail.com> (http://codeofmatt.com)\",\n \"Isaac Cambron <isaac@isaaccambron.com> (http://isaaccambron.com)\",\n \"Andre Polykanine <andre@oire.org> (https://github.com/oire)\"\n ],\n \"keywords\": [\n \"moment\",\n \"date\",\n \"time\",\n \"parse\",\n \"format\",\n \"validate\",\n \"i18n\",\n \"l10n\",\n \"ender\"\n ],\n \"main\": \"./moment.js\",\n \"jsnext:main\": \"./src/moment.js\",\n \"typings\": \"./moment.d.ts\",\n \"engines\": {\n \"node\": \"*\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/moment/moment.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/moment/moment/issues\"\n },\n \"license\": \"MIT\",\n \"devDependencies\": {\n \"benchmark\": \"latest\",\n \"coveralls\": \"^3.0.2\",\n \"es6-promise\": \"latest\",\n \"grunt\": \"~0.4\",\n \"grunt-benchmark\": \"latest\",\n \"grunt-cli\": \"latest\",\n \"grunt-contrib-clean\": \"latest\",\n \"grunt-contrib-concat\": \"latest\",\n \"grunt-contrib-copy\": \"latest\",\n \"grunt-contrib-jshint\": \"latest\",\n \"grunt-contrib-uglify\": \"latest\",\n \"grunt-contrib-watch\": \"^1.1.0\",\n \"grunt-env\": \"latest\",\n \"grunt-exec\": \"latest\",\n \"grunt-jscs\": \"latest\",\n \"grunt-karma\": \"latest\",\n \"grunt-nuget\": \"latest\",\n \"grunt-string-replace\": \"latest\",\n \"karma\": \"latest\",\n \"karma-chrome-launcher\": \"latest\",\n \"karma-firefox-launcher\": \"latest\",\n \"karma-qunit\": \"latest\",\n \"karma-sauce-launcher\": \"latest\",\n \"load-grunt-tasks\": \"~3.5.2\",\n \"node-qunit\": \"^1.0.0\",\n \"nyc\": \"~11.9.0\",\n \"qunit\": \"^2.7.1\",\n \"rollup\": \"~0.67.4\",\n \"spacejam\": \"latest\",\n \"typescript\": \"^1.8.10\",\n \"uglify-js\": \"latest\"\n },\n \"ender\": \"./ender.js\",\n \"dojoBuild\": \"package.js\",\n \"jspm\": {\n \"files\": [\n \"moment.js\",\n \"moment.d.ts\",\n \"locale\"\n ],\n \"map\": {\n \"moment\": \"./moment\"\n },\n \"buildConfig\": {\n \"uglify\": true\n }\n },\n \"scripts\": {\n \"typescript-test\": \"tsc --project typing-tests\",\n \"test\": \"grunt test\",\n \"coverage\": \"nyc npm test && nyc report\",\n \"coveralls\": \"nyc npm test && nyc report --reporter=text-lcov | coveralls\"\n },\n \"spm\": {\n \"main\": \"moment.js\",\n \"output\": [\n \"locale/*.js\"\n ]\n }\n}\n","components/es/node_modules/regenerator-runtime/package.json":"{\n \"name\": \"regenerator-runtime\",\n \"author\": \"Ben Newman <bn@cs.stanford.edu>\",\n \"description\": \"Runtime for Regenerator-compiled generator and async functions.\",\n \"version\": \"0.11.1\",\n \"main\": \"runtime-module.js\",\n \"keywords\": [\n \"regenerator\",\n \"runtime\",\n \"generator\",\n \"async\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/facebook/regenerator/tree/master/packages/regenerator-runtime\"\n },\n \"license\": \"MIT\"\n}\n","components/es/style/mixins/hairline.acss":"","components/es/style/themes/default.acss":"","module/door-fail/door-fail.acss":".fail-container {\n width: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.fail-logo {\n width: 281rpx;\n height: 306rpx;\n background: url(\"https://gw.alipayobjects.com/zos/rmsportal/BRcnSEtDnFCMlPIBUZCf.png\") no-repeat center;\n background-size: 100% 100%;\n margin-top: 172rpx;\n}\n.fail-explain {\n display: flex;\n align-items: center;\n flex-direction: column;\n}\n.explain-main-title {\n padding: 50rpx 0 30rpx;\n font-size: 40rpx;\n}\n.explain-sub-title {\n color: #9a9a9a;\n}\n.but-align {\n padding-top: 360rpx;\n color: #4291e2;\n font-size: 40rpx;\n}\n","module/door-fail/door-fail.axml":"<view class=\"fail-container\">\n <view class=\"fail-logo\"></view>\n <view class=\"fail-explain\">\n <view class=\"explain-main-title\">{{mainTitle}}</view>\n <view class=\"explain-sub-title\">{{subTitle}}</view>\n </view>\n <view class=\"but-align\" data-text=\"{{butContent}}\" onTap=\"click\">{{butContent}}</view>\n</view>","module/door-fail/door-fail.js":"import { connect } from 'herculex';\n\nComponent(\n connect({})({\n mixins: [],\n data: {},\n props: {\n mainTitle: '对不起,目前找不到数据',\n subTitle: '请重新扫码开门',\n butContent: '点击重试',\n },\n didMount() { },\n didUpdate() { },\n didUnmount() { },\n methods: {\n click(e) {\n const { text } = e.target.dataset;\n if (text === '点击重试') {\n my.navigateBack({ delta: 1 });\n }\n if (text === '故障报修') {\n my.navigateTo({\n url: '/pages/error/index',\n });\n }\n },\n },\n })\n);\n","module/door-fail/door-fail.json":"{\n \"component\": true\n}","module/door-success/door-success.acss":".success-container {\n width: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.success-logo {\n width: 530rpx;\n height: 828rpx;\n margin-top: 79rpx;\n}\n.success-explain {\n margin-top: -30px;\n font-size: 40rpx;\n font-weight: 700;\n}\n.true {\n color: #9f9f9f;\n}\n","module/door-success/door-success.axml":"<view class=\"success-container\">\n <view class=\"success-logo\" style=\"background: url('{{stateImage}}') no-repeat 289rpx 230rpx / 192rpx 192rpx,\n url('{{doorImage}}') no-repeat center / auto 100%;\"></view>\n <view class=\"success-explain\">{{explain}}</view>\n <view style=\"margin-top:30rpx;color: #908c8c;\" class=\"{{color}}\"><text>{{clockNum}}</text></view>\n</view>","module/door-success/door-success.js":"import { connect } from 'herculex';\n\nComponent(\n connect({})({\n mixins: [],\n data: {},\n props: {},\n didMount() { },\n didUpdate() { },\n didUnmount() { },\n methods: { },\n })\n);\n","module/door-success/door-success.json":"{\n \"component\": true\n}","module/goods-list/goods-list.acss":".list-container {\n background: #FFF;\n width: 100%;\n box-sizing: border-box;\n padding-bottom: 32rpx;\n}\n.goods-list-title {\n font-size: 34rpx;\n color: #333;\n padding: 32rpx;\n}\n.goods-list-content {\n display: flex;\n align-items: center;\n justify-content: space-around;\n}\n.good-photo {\n width: 148rpx;\n height: 148rpx;\n}\n.good-name {\n margin-top: 16rpx;\n font-size: 24rpx;\n color: #333;\n}\n.good-price {\n margin-top: 16rpx;\n color: #F24724;\n font-size: 28rpx;\n}\n","module/goods-list/goods-list.axml":"<view class=\"list-container\">\n <view class=\"goods-list-title\">优选推荐</view>\n <scroll-view scroll-x=\"{{true}}\" class=\"goods-list-content\">\n <block a:for=\"{{goodlist}}\">\n <view class=\"good\">\n <image class=\"good-photo\" src=\"{{item.image}}\" mode=\"scaleToFill\" />\n <view class=\"good-name\">{{item.name}}\n </view>\n <view class=\"good-price\">¥{{item.price}}\n </view>\n </view>\n </block>\n </scroll-view>\n</view>","module/goods-list/goods-list.js":"import { connect } from 'herculex';\n\nComponent(\n connect({})({\n mixins: [],\n data: {\n goodlist: [\n {\n image: 'https://gw.alipayobjects.com/zos/rmsportal/UocmxPTyBaskIqdTbLeH.png',\n name: 'BLANC啤酒',\n price: '10',\n },\n {\n image: 'https://gw.alipayobjects.com/zos/rmsportal/UocmxPTyBaskIqdTbLeH.png',\n name: 'BLANC啤酒',\n price: '10',\n },\n {\n image: 'https://gw.alipayobjects.com/zos/rmsportal/UocmxPTyBaskIqdTbLeH.png',\n name: 'BLANC啤酒',\n price: '10',\n },\n {\n image: 'https://gw.alipayobjects.com/zos/rmsportal/UocmxPTyBaskIqdTbLeH.png',\n name: 'BLANC啤酒',\n price: '10',\n },\n ],\n },\n props: {},\n didMount() { },\n didUpdate() { },\n didUnmount() { },\n methods: {},\n })\n);\n","module/goods-list/goods-list.json":"{\n \"component\": true\n}","module/goods-show/goods-show.acss":".goods-content {\n width: 100%;\n background-color: #fff;\n height: auto;\n overflow: auto;\n}\n.goods {\n width: 90%;\n padding: 30rpx 0;\n border-bottom: 1px solid #eee;\n margin-left: 5%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.goods-name {\n width: 70%;\n}\n.goods-number {\n width: 25%;\n display: flex;\n justify-content: space-between;\n}\n.goods-subtitle {\n font-size: 28rpx;\n color: #999;\n padding-top: 15rpx;\n}\n.goods-all {\n width: 100%;\n height: 80rpx;\n text-align: center;\n line-height: 80rpx;\n border-bottom: 1px solid #eee;\n}\n","module/goods-show/goods-show.axml":"<view class=\"goods-content\">\n <view class=\"goods\" a:for=\"{{goods}}\">\n <view class=\"goods-name\">\n <view style=\"font-size:34rpx;\">{{item.name}}</view>\n <view class=\"goods-subtitle\">规格:100ml/瓶</view>\n </view>\n <view class=\"goods-number\">\n <view style=\"color:#9e9e9e;\">x{{item.num}}</view>\n <view style=\"color:#f00000;\">¥{{item.price}}</view>\n </view>\n </view>\n <view class=\"goods\">\n <view class=\"goods-name\">\n <view>合计</view>\n </view>\n <view class=\"goods-number\">\n <view >x{{goodsCount}}</view>\n <view style=\"color:#f00000;\"><text>¥{{totalAmount}}</text></view>\n </view>\n </view>\n</view>","module/goods-show/goods-show.js":"import { connect } from 'herculex';\n\nComponent(\n connect({})({\n mixins: [],\n data: {},\n props: {},\n didMount() { },\n didUpdate() { },\n didUnmount() { },\n methods: {\n jumpCoupon() {\n my.alert({\n title: '跳转到优惠券页面',\n });\n },\n },\n })\n);\n","module/goods-show/goods-show.json":"{\n \"component\": true\n}","module/login-form/login-form.acss":".form-row-content {\n border-bottom: 1px solid #108EE9;\n margin-bottom: 80rpx;\n display: flex;\n align-items: center;\n padding: 10rpx 0;\n}\n.input-icon {\n width: 40rpx;\n height: 40rpx;\n}\n.input {\n flex: 1;\n}\n.sendcode {\n font-size: 32rpx;\n color: #CCC;\n letter-spacing: 0.52px;\n text-align: right;\n}\n.active {\n color: #108EE9;\n}\n","module/login-form/login-form.axml":"<form class=\"login-form\" onSubmit=\"onLoginHandle\">\n <view class=\"form-row-content\">\n <image class=\"input-icon\" src=\"https://gw.alipayobjects.com/zos/rmsportal/FVbokbhlRBIFceQCyImU.png\" mode=\"aspectFit\" />\n <input name=\"phone\" class=\"input\" data-name=\"phone\" onInput=\"onInput\" placeholder=\"请输入手机号\" />\n </view>\n <view class=\"form-row-content\">\n <image class=\"input-icon\" src=\"https://gw.alipayobjects.com/zos/rmsportal/fDNDbQcuXUPQBsuOxTZm.png\" mode=\"aspectFit\" />\n <input name=\"code\" type=\"number\" class=\"input\" data-name=\"code\" onInput=\"onInput\" placeholder=\"请输入验证码\" />\n <view class=\"sendcode {{canSend?'active':''}}\" onTap=\"sendCode\">{{sendMsg}}</view>\n </view>\n <view class=\"login-btn\">\n <button type=\"primary\" disabled=\"{{!canSubmit}}\" formType=\"submit\">确认登录 \n </button>\n </view>\n</form>","module/login-form/login-form.js":"import { connect } from 'herculex';\nimport { verifyTel, showModal } from '../../util/mixins.js';\n\nComponent(\n connect({})({\n mixins: [],\n data: {\n canSubmit: false,\n canSend: true,\n time: 60,\n sendMsg: '发送验证码',\n formdata: [\n {\n name: 'phone',\n placeholder: '请输入手机号',\n isrequired: true,\n value: '',\n },\n {\n name: 'code',\n placeholder: '请输入验证码',\n isrequired: true,\n value: '',\n },\n ],\n },\n props: {},\n didMount() { },\n didUpdate() { },\n didUnmount() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n },\n methods: {\n /**\n * 数据处理\n */\n onInput({ detail: { value = '' }, target: { dataset = {} } }) {\n const { name } = dataset;\n let { formdata } = this.data;\n let flag = true;\n formdata = formdata.map((item) => {\n if (item.name === name) {\n item = { ...item, value };\n }\n if (item.isrequired && !item.value) {\n flag = false;\n }\n return item;\n });\n this.setData({ formdata, canSubmit: flag });\n },\n async onLoginHandle(e) {\n const { phone, code } = e.detail.value;\n if (verifyTel(phone)) {\n const result = await this.dispatch('verifyCus', { phone, code });\n if (result) {\n my.redirectTo({ url: '/pages/openDoor/index' });\n }\n } else {\n showModal('alert', { content: '手机号格式不正确' });\n }\n },\n async sendCode() {\n const { formdata, canSend } = this.data;\n let { time } = this.data;\n if (!canSend) {\n return;\n }\n const bool = verifyTel(formdata[0].value);\n if (!bool) {\n showModal('alert', { content: '手机号格式不正确' });\n return;\n }\n this.setData({\n sendMsg: `${time}秒后重发`,\n canSend: false,\n });\n this.timer = setInterval(() => {\n const { canSend } = this.data;\n if (!canSend) {\n this.setData({\n sendMsg: `${--time}秒后重发`,\n });\n if (time === 1) {\n clearInterval(this.timer);\n setTimeout(() => {\n this.setData({\n canSend: true,\n sendMsg: '重新发送',\n });\n }, 1000);\n }\n } else {\n this.setData({\n canSend: true,\n sendMsg: '重新发送',\n });\n clearInterval(this.timer);\n }\n }, 1000);\n const result = await this.dispatch('sendMobileCode', { telVal: formdata[0].value });\n if (!result) {\n this.setData({\n canSend: true,\n sendMsg: '重新发送',\n });\n }\n },\n },\n })\n);\n","module/login-form/login-form.json":"{\n \"component\": true\n}","module/order-card/order-card.acss":".order-card {\n margin-top: 20rpx;\n width: 100%;\n background-color: #fff;\n}\n.time-color {\n color: #999;\n font-size: 24rpx;\n}\n.order-con {\n width: 100%;\n}\n.info-pub {\n width: 95%;\n height: 94rpx;\n margin-left: 5%;\n border-bottom: 1px solid #eee;\n display: flex;\n align-items: center;\n}\n.discount-money {\n width: 90%;\n border-bottom: 1px solid #eee;\n padding: 5%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n","module/order-card/order-card.axml":"<view class=\"order-card\">\n <list>\n <list-item thumb=\"https://gw.alipayobjects.com/zos/rmsportal/gQvqJktWNCKnkLrEYYrc.jpeg\" align=\"bottom\">\n 黄龙时代广场B座8楼 智能小柜\n <view class=\"time-color\">2018-09-28 13:16</view>\n </list-item>\n </list>\n <view class=\"order-con\">\n <view class=\"info-pub\">可乐等三件商品</view>\n <view class=\"discount-money\">\n <view>实付:¥30</view>\n <view style=\"color:#3e8de2;\" onTap=\"seeDetails\">查看详情</view>\n </view>\n </view>\n</view>","module/order-card/order-card.js":"import { connect } from 'herculex';\n\nComponent(\n connect({})({\n mixins: [],\n data: {},\n props: {},\n didMount() { },\n didUpdate() { },\n didUnmount() { },\n methods: {\n seeDetails () {\n my.navigateTo({ url: '/pages/orderDetails/index' });\n },\n },\n })\n);\n","module/order-card/order-card.json":"{\n \"component\": true,\n \"usingComponents\":{\n \"list\": \"mini-antui/es/list/index\",\n \"list-item\": \"mini-antui/es/list/list-item/index\"\n }\n}","module/order-info/order-info.acss":".info-content {\n background-color: #fff;\n width: 100%;\n border-top: 1px solid #eee;\n border-bottom: 1px solid #eee;\n}\n.info-pub {\n width: 95%;\n height: 94rpx;\n margin-left: 5%;\n border-bottom: 1px solid #eee;\n display: flex;\n align-items: center;\n}\n.border {\n border-bottom: 0;\n}\n.info-color {\n color: #999;\n}\n","module/order-info/order-info.axml":"<view class=\"info-content\">\n <view class=\"info-pub\">订单信息</view>\n <view class=\"info-pub info-color\">订单号:9029928429482974329</view>\n <view class=\"info-pub info-color\">支付方式:支付宝</view>\n <view class=\"info-pub border info-color\">订单时间:2018-10-12</view>\n</view>","module/order-info/order-info.js":"import { connect } from 'herculex';\n\nComponent(\n connect({})({\n mixins: [],\n data: {},\n props: {},\n didMount() { },\n didUpdate() { },\n didUnmount() { },\n methods: { },\n })\n);\n","module/order-info/order-info.json":"{\n \"component\": true\n}","module/order-show/order-show.acss":".order-content {\n background-color: #fff;\n width: 100%;\n}\n.order-title {\n width: 100%;\n padding: 22rpx 5%;\n border-bottom: 1px solid #eee;\n}\n.order-details {\n width: 95%;\n padding: 30rpx 0;\n border-bottom: 1px solid #eee;\n margin-left: 5%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.order-number {\n width: 35%;\n display: flex;\n justify-content: space-between;\n margin-right: 40rpx;\n}\n.discount-money {\n width: 90%;\n border-bottom: 1px solid #eee;\n padding: 5%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.actual-money {\n width: 90%;\n text-align: right;\n padding: 5%;\n border-bottom: 1px solid #eee;\n}\n","module/order-show/order-show.axml":"<view class=\"order-content\">\n <view class=\"order-title\">订单详情</view>\n <view class=\"order-details\" a:for=\"{{goods}}\">\n <view>{{item.name}}</view>\n <view class=\"order-number\">\n <view style=\"color:#9e9e9e;\">x{{item.num}}</view>\n <view>¥{{item.price}}</view>\n </view>\n </view>\n <view class=\"discount-money\">\n <view>优惠券立减</view>\n <view style=\"color:#f00;\">-¥0.00</view>\n </view>\n <view class=\"actual-money\">实付金额:¥{{totalAmount}}</view>\n</view>","module/order-show/order-show.js":"import { connect } from 'herculex';\n\nComponent(\n connect({})({\n mixins: [],\n data: {},\n props: {},\n didMount() { },\n didUpdate() { },\n didUnmount() { },\n methods: {},\n })\n);\n","module/order-show/order-show.json":"{\n \"component\": true\n}","module/position-show/position-show.acss":".position-content {\n width: 100%;\n /* height: 92rpx; */\n padding: 26rpx 34rpx;\n display: flex;\n align-items: center;\n background-color: #fff;\n}\n.position-img {\n width: 28rpx;\n height: 35rpx;\n vertical-align: middle;\n}\n","module/position-show/position-show.axml":"<view class=\"position-content\">\n <image class=\"position-img\" src=\"https://gw.alipayobjects.com/zos/rmsportal/ZpsRUnlDQkqqAWgAyeug.png\" />\n <text style=\"padding-left:30rpx;\">位置:{{position}}</text>\n</view>","module/position-show/position-show.js":"import { connect } from 'herculex';\n\nComponent(\n connect({})({\n mixins: [],\n data: {},\n props: {},\n didMount() { },\n didUpdate() { },\n didUnmount() { },\n methods: {},\n })\n);\n","module/position-show/position-show.json":"{\n \"component\": true\n}","pages/coupon/index.acss":"/* stylelint-disable selector-type-no-unknown */\n.tab-content {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 500px;\n background-color: #f5f5f5;\n overflow: auto;\n}\n.morning-meal {\n width: 686rpx;\n height: 165rpx;\n margin-top: 3%;\n background: url(\"https://gw.alipayobjects.com/zos/rmsportal/shvnetQGZFROdhQnNZgq.png\") no-repeat center;\n background-size: 100% 100%;\n}\n.night-meal {\n width: 686rpx;\n height: 165rpx;\n margin-top: 3%;\n background: url(\"https://gw.alipayobjects.com/zos/rmsportal/xYqRucYveGkcNScihLBj.png\") no-repeat center;\n background-size: 100% 100%;\n}\n.meal-describe {\n color: #fff;\n padding: 25rpx 32rpx 0;\n}\n.blank {\n width: 404rpx;\n height: 212rpx;\n background: url(\"https://gw.alipayobjects.com/zos/rmsportal/GxWHYWSlPAPeAFSvhVFN.png\") no-repeat center;\n background-size: 100% 100%;\n margin-top: 80px;\n}\nswiper {\n background-color: #f5f5f5;\n}\n.pad {\n padding-top: 20rpx;\n}\n","pages/coupon/index.axml":"<view class=\"container\">\n <tabs\n tabs=\"{{tabs}}\"\n onTabClick=\"handleTabClick\"\n activeTab=\"{{activeTab}}\"\n >\n <!-- 已使用 -->\n <tab-content key=\"{{index}}\">\n <view class=\"tab-content\">\n <!-- 早餐券 -->\n <view class=\"morning-meal\">\n <view class=\"meal-describe\">5元早餐券</view>\n <view class=\"meal-describe pad\">美好的一天从早点开始</view>\n </view>\n <!-- 晚餐券 -->\n <view class=\"night-meal\">\n <view class=\"meal-describe\">5元下午茶点券</view>\n <view class=\"meal-describe pad\">来一杯元气满满</view>\n </view>\n <!-- 空券 -->\n <!-- <view class=\"blank\"></view> -->\n </view>\n </tab-content>\n <!-- 未使用 -->\n <tab-content key=\"{{index}}\">\n <view class=\"tab-content\">\n <!-- 早餐券 -->\n <!-- <view class=\"morning-meal\">\n <view class=\"meal-describe\">5元早餐券</view>\n <view class=\"meal-describe pad\">美好的一天从早点开始</view>\n </view> -->\n <!-- 晚餐券 -->\n <!-- <view class=\"night-meal\">\n <view class=\"meal-describe\">5元下午茶点券</view>\n <view class=\"meal-describe pad\">来一杯元气满满</view>\n </view> -->\n <!-- 空券 -->\n <view class=\"blank\"></view>\n </view>\n </tab-content>\n </tabs>\n</view>","pages/coupon/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n data: {\n tabs: [\n {\n title: '未使用',\n },\n {\n title: '已使用',\n },\n ],\n activeTab: 0,\n },\n connectGlobal: true,\n onReady() { },\n onLoad() { },\n onShow() { },\n handleTabClick({ index }) {\n this.setData({\n activeTab: index,\n });\n },\n handleTabChange({ index }) {\n this.setData({\n activeTab: index,\n });\n },\n })\n);\n","pages/coupon/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": false,\n \"defaultTitle\": \"优惠券\",\n \"allowsBounceVertical\": \"NO\",\n \"usingComponents\": {\n \"tabs\": \"mini-antui/es/tabs/index\",\n \"tab-content\": \"mini-antui/es/tabs/tab-content/index\"\n }\n}\n","pages/coupon/store.js":"import Store from 'herculex';\nimport { login } from '../../services/home.service';\nimport mixins from '../../util/mixins';\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {},\n plugins: ['logger'],\n actions: {\n /**\n * 这是个注释\n */\n async retry({ commit, state, dispatch }, payload) {\n // const loginResult = await login();\n // commit('SET_USER_INFO', { loginResult });\n // return loginResult;\n },\n },\n});\n","pages/error/index.acss":".error-card {\n height: 94rpx;\n padding: 0 32rpx;\n background-color: #fff;\n display: flex;\n justify-content: space-between;\n margin-top: 20rpx;\n align-items: center;\n}\n.error-card-text {\n padding-right: 20rpx;\n}\n.error-card-img {\n width: 16rpx;\n height: 26rpx;\n vertical-align: middle;\n}\n.error-textarea {\n margin-top: 20rpx;\n}\n.error-but {\n padding: 60rpx 32rpx;\n}\n.customer-service {\n color: #518ad3;\n font-size: 40rpx;\n padding-top: 440rpx;\n position: absolute;\n z-index: 1;\n left: 50%;\n width: 220rpx;\n margin-left: -110rpx;\n}\n.error-card-iphone {\n width: 32rpx;\n height: 32rpx;\n vertical-align: middle;\n margin-right: 10rpx;\n}\n.error-list {\n width: 100vw;\n /* height: 100vh; */\n position: absolute;\n z-index: 2;\n bottom: 0;\n}\n.error-choice {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n","pages/error/index.axml":"<view class=\"container\">\n <form onSubmit=\"bindFormSubmit\">\n <view class=\"error-card\">\n <view>故障问题</view>\n <view class=\"error-choice\">\n <picker onChange=\"bindPickerChange\" value=\"{{index}}\" range=\"{{array}}\">\n <view class=\"error-card-text\">{{array[index]}}</view>\n </picker>\n <image class=\"error-card-img\" src=\"https://gw.alipayobjects.com/zos/rmsportal/hSxPAbJmBafsPmsrtiJJ.png\" />\n </view>\n </view>\n <view class=\"error-textarea\">\n <textarea name=\"problem\" placeholder=\"可以手动输入您的问题\" maxlength=\"200\" style=\"height:240rpx;\"/>\n </view>\n <view class=\"error-but\">\n <button form-type=\"submit\" type=\"primary\">提交</botton>\n </view>\n <view class=\"customer-service\"><text onTap=\"service\"><image class=\"error-card-iphone\" src=\"https://gw.alipayobjects.com/zos/rmsportal/vzGSDVMNAwdxSRCMrtbQ.png\" />联系客服</text></view>\n </form>\n <!-- <view class=\"error-list\">\n <view class=\"\">\n <view>取消</view>\n <view>确定</view>\n </view>\n <picker-view onChange=\"bindPickerChange\" value=\"{{index}}\">\n <picker-view-column>\n <view a:for=\"{{array}}\">{{item}}</view>\n </picker-view-column>\n </picker-view>\n </view> -->\n</view>\n","pages/error/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n data: {\n show: true,\n },\n connectGlobal: true,\n onReady() { },\n onLoad() { },\n onShow() { },\n noOpen() {\n this.setData({ show: true });\n },\n service() {\n my.makePhoneCall({ number: '4006563453' });\n },\n bindPickerChange(e) {\n this.setData({\n index: e.detail.value,\n });\n },\n bindFormSubmit(e) {\n console.log(e.detail.value);\n },\n })\n);\n","pages/error/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"defaultTitle\": \"故障报修\",\n \"allowsBounceVertical\": \"NO\"\n}\n","pages/error/store.js":"import Store from 'herculex';\nimport { login } from '../../services/home.service';\nimport mixins from '../../util/mixins';\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {\n array: ['门打不开', '选项二', '选项三', '选项四'],\n index: 0,\n },\n plugins: ['logger'],\n actions: {\n /**\n * 这是个注释\n */\n async getUserInfo({ commit, state, dispatch }, payload) {\n const loginResult = await login();\n commit('SET_USER_INFO', { loginResult });\n return loginResult;\n },\n },\n});\n","pages/home/index.acss":".enjoypayindex {\n box-sizing: border-box;\n background: #F1F9FF;\n}\n.enjoypayindex .banner {\n margin-bottom: 15rpx;\n}\n.enjoypayindex .banner image {\n width: 100%;\n}\n.flex-content {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.enjoypayindex .scan-btn {\n width: 233rpx;\n height: 233rpx;\n background: url('https://gw.alipayobjects.com/zos/rmsportal/ttfYyFFPbKPPbPWZqiQY.png') no-repeat center;\n background-size: 100%;\n margin-top: 90rpx;\n}\n.enjoypayindex .near-btn {\n margin-top: 35rpx;\n font-size: 28rpx;\n color: #108EE9;\n letter-spacing: 0.45rpx;\n display: flex;\n align-items: center;\n}\n.enjoypayindex .location-icon {\n width: 28rpx;\n height: 35rpx;\n background: url('https://gw.alipayobjects.com/zos/rmsportal/oUZBMohpKwIHXIzArYoh.png') no-repeat center;\n background-size: 100%;\n margin-right: 20rpx;\n}\n","pages/home/index.axml":"<view class=\"container enjoypayindex\">\n <view class=\"banner\">\n <image src=\"https://gw.alipayobjects.com/zos/rmsportal/PWiqzqPYXrKPbQkLbOxB.png\" mode=\"widthFix\" />\n </view>\n <goods-list />\n <view class=\"flex-content\">\n <view class=\"scan-btn\" onTap=\"scan\">\n </view>\n </view>\n <view class=\"flex-content\">\n <view class=\"near-btn\" onTap=\"toNear\">\n <view class=\"location-icon\">\n </view>\n <view class=\"btn-text\">附近设备 >\n </view>\n </view>\n </view>\n \n</view>\n","pages/home/index.js":"import store from './store';\n\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() {},\n onLoad(options) {\n const { globalData } = app;\n if (globalData && globalData.terminalId) {\n this.dispatch('resultProcess', globalData.terminalId);\n }\n },\n onShow() {},\n scan() {\n my.scan({\n type: 'qr',\n success: async (res) => {\n if (res.code) { // code=''alipays://platformapi/startapp?appId=2018101561700360&pages/home/index&query=terminalId%3d99901032\n const codeArr = res.code.split('&');\n codeArr.forEach((item) => {\n if (item.indexOf('query') !== -1) {\n const query = decodeURIComponent(item.substring(6)); // query = 'terminalId=99901032'\n app.globalData.terminalId = query.substring(11);\n this.dispatch('resultProcess');\n }\n });\n }\n },\n });\n },\n toNear() {\n my.navigateTo({ url: '/pages/near/index' });\n },\n })\n);\n","pages/home/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": false,\n \"defaultTitle\": \"先享后付货柜\",\n \"titleBarColor\":\"#FFFFFF\",\n \"allowsBounceVertical\": \"NO\",\n \"usingComponents\":{\n \"goods-list\": \"../../module/goods-list/goods-list\"\n }\n}\n","pages/home/store.js":"import Store from 'herculex';\n\nconst app = getApp();\n\nexport default new Store({\n connectGlobal: true,\n state: {\n },\n plugins: ['logger'],\n actions: {\n\n async resultProcess({ commit, state, dispatch, global }, payload) {\n console.log('执行 resultProcess ');\n // await setStorage({ key: 'terminalId', data: payload });\n // commit('$global:terminalId',{ terminalId: payload });\n\n const userInfo = await dispatch('$global:getUser');\n app.globalData.userInfo = userInfo;\n my.navigateTo({ url: '/pages/openDoor/index' });\n },\n },\n});\n","pages/index/index.acss":".home-container {\n background: #F1F9FF;\n}\n.home-logo {\n margin-top: 94rpx;\n width: 595rpx;\n height: 627rpx;\n margin-left: 77.5rpx;\n}\n.home-container .btn-section {\n margin-top: 100rpx;\n padding: 0 30rpx;\n}\n.home-container .btn-section button {\n margin-top: 60rpx;\n}\n","pages/index/index.axml":"<view class=\"container home-container\">\n <image class=\"home-logo\" src=\"https://gw.alipayobjects.com/zos/rmsportal/beqkRQNgiUQIVqtsWtrh.png\" mode=\"aspectFit\" />\n <view class=\"btn-section\">\n <button type=\"primary\" data-name=\"先享后付\" onTap=\"turnPage\">先享后付</button>\n <button type=\"primary\" data-name=\"先付后享\" onTap=\"turnPage\">先付后享</button>\n </view>\n</view>","pages/index/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() {},\n onLoad() {},\n onShow() {},\n async turnPage(e) {\n const { name } = e.target.dataset;\n this.dispatch('turnPage', name);\n },\n })\n);\n","pages/index/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"defaultTitle\": \"智能售货柜\",\n \"titleBarColor\":\"#1890FF\",\n \"allowsBounceVertical\": \"NO\"\n}\n","pages/index/store.js":"import Store from 'herculex';\nimport mixins from '../../util/mixins';\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {},\n plugins: ['logger'],\n actions: {\n /**\n * 这是个注释\n */\n async turnPage({ commit, state, dispatch, global }, payload) {\n if (payload === '先享后付') {\n my.navigateTo({ url: '/pages/home/index' });\n }\n if (payload === '先付后享') {\n my.alert({\n title: '暂不支持',\n });\n }\n },\n },\n});\n","pages/myOrder/index.acss":"","pages/myOrder/index.axml":"<view class=\"container\">\n <order-card />\n</view>","pages/myOrder/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() { },\n onLoad() { },\n onShow() { },\n })\n);\n","pages/myOrder/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"defaultTitle\": \"我的订单\",\n \"allowsBounceVertical\": \"NO\",\n \"usingComponents\":{\n \"order-card\": \"../../module/order-card/order-card\"\n }\n}\n","pages/myOrder/store.js":"import Store from 'herculex';\nimport { login } from '../../services/home.service';\nimport mixins from '../../util/mixins';\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: { },\n plugins: ['logger'],\n actions: {\n },\n});\n","pages/near/index.acss":".enjoypay {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.banner {\n margin-bottom: 15rpx;\n}\n.banner image {\n width: 100%;\n}\n.enjoypay .scan-btn {\n width: 233rpx;\n height: 233rpx;\n background: url('https://gw.alipayobjects.com/zos/rmsportal/ttfYyFFPbKPPbPWZqiQY.png') no-repeat center;\n background-size: 100%;\n margin-top: 98rpx;\n}\n.enjoypay .near-btn {\n margin-top: 35rpx;\n font-size: 28rpx;\n color: #108EE9;\n letter-spacing: 0.45rpx;\n display: flex;\n align-items: center;\n}\n.enjoypay .location-icon {\n width: 28rpx;\n height: 35rpx;\n background: url('https://gw.alipayobjects.com/zos/rmsportal/oUZBMohpKwIHXIzArYoh.png') no-repeat center;\n background-size: 100%;\n margin-right: 20rpx;\n}\n","pages/near/index.axml":"<view class=\"container near\"> \n <map id=\"map\" longitude=\"{{loctionInfo.longitude}}\" latitude=\"{{loctionInfo.latitude}}\" show-location style=\"width: 100%; height: 100%;\">\n </map>\n <cover-view style=\"text-align: center; width: 100%; height: 512rpx;position: absolute; left:0; bottom:0;background-color:#FFFFFF;\"> \t附近无设备 \n</cover-view>\n</view>","pages/near/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() {},\n onLoad() {\n my.getLocation({\n type: '1',\n success: (res) => {\n this.commit('SET_LOCATION_INFO', { loctionInfo: res });\n },\n });\n },\n onShow() {\n },\n turnPage(e) {\n const { name } = e.target.dataset;\n if (name === '先享后付') {\n my.navigateTo({ url: '' });\n }\n if (name === '先付后享') {\n my.navigateTo({ url: '' });\n }\n },\n })\n);\n","pages/near/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"defaultTitle\": \"先享后付货柜\",\n \"titleBarColor\":\"#FFFFFF\",\n \"allowsBounceVertical\": \"NO\",\n \"usingComponents\":{\n \"goods-list\": \"../../module/goods-list/goods-list\"\n }\n}\n","pages/near/store.js":"import Store from 'herculex';\nimport { login } from '../../services/home.service';\nimport mixins from '../../util/mixins';\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {},\n plugins: ['logger'],\n actions: {\n /**\n * 这是个注释\n */\n async getUserInfo({ commit, state, dispatch }, payload) {\n const loginResult = await login();\n commit('SET_USER_INFO', { loginResult });\n return loginResult;\n },\n },\n});\n","pages/openDoor/index.acss":"","pages/openDoor/index.axml":"<view class=\"container\">\n <door-success a:if=\"{{type==='success'}}\" clockNum=\"{{clockNum}}\" explain=\"{{explain}}\" color=\"{{color}}\" stateImage=\"{{stateImage}}\" doorImage=\"{{doorImage}}\"/>\n <door-fail a:if=\"{{type==='fail'}}\" mainTitle=\"{{mainTitle}}\" subTitle=\"{{subTitle}}\" butContent=\"{{butContent}}\" onMyclickButton=\"myclickButton\" stateImage=\"{{stateImage}}\"/>\n</view>","pages/openDoor/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() { },\n async onLoad(options) {\n await this.dispatch('initialise');\n // 代扣 并发起开门请求(如有未使用的有效签约,会解除签约)\n const signResult = await this.dispatch('$global:sign');\n if (signResult === 'true') {\n this.commit({ type: 'success' });\n this.dispatch('doorSuccess', signResult);\n } else if (signResult === 'false') {\n this.commit({ type: 'fail' });\n this.dispatch('doorFail', signResult);\n }\n },\n onShow() {\n },\n onHide() {\n },\n })\n);\n","pages/openDoor/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"defaultTitle\": \"先享后付货柜\",\n \"allowsBounceVertical\": \"NO\",\n \"usingComponents\":{\n \"door-success\": \"../../module/door-success/door-success\",\n \"door-fail\": \"../../module/door-fail/door-fail\"\n }\n}\n","pages/openDoor/store.js":"import Store from 'herculex';\nimport { queryDoorStatus, selectOrderDetail } from '../../services/home.service';\n\nconst app = getApp();\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {\n type: null,\n mainTitle: '',\n subTitle: '',\n butContent: '',\n clockNum: '等待柜门解锁... ...',\n explain: '',\n color: '',\n opening_image: 'https://gw.alipayobjects.com/mdn/education/afts/img/A*PhYxSYDxhjwAAAAAAAAAAABjAQAAAQ/original',\n open_image: 'https://gw.alipayobjects.com/mdn/education/afts/img/A*vvWcR542kwkAAAAAAAAAAABjAQAAAQ/original',\n close_image: 'https://gw.alipayobjects.com/mdn/education/afts/img/A*LTdAR7Yej8kAAAAAAAAAAABjAQAAAQ/original',\n fail_image: 'https://gw.alipayobjects.com/mdn/education/afts/img/A*Ns6GSrcnvr8AAAAAAAAAAABjAQAAAQ/original',\n doorOpen_image: 'https://gw.alipayobjects.com/mdn/education/afts/img/A*s-klRKgsVcYAAAAAAAAAAABjAQAAAQ/original',\n doorClose_image: 'https://gw.alipayobjects.com/mdn/education/afts/img/A*hbvuSaRlWHgAAAAAAAAAAABjAQAAAQ/original',\n },\n plugins: ['logger'],\n actions: {\n // 开门失败\n async doorFail({ commit, state, dispatch }, payload) {\n // 点击重试或者故障报修的方法(判断是点击重试还是故障报修)\n payload = 2;\n if (payload === 2) {\n commit('GET_TICKET_INFO', { butContent: '故障报修', mainTitle: '机器有故障?请点击故障报修或联系客服' });\n } else if (payload === 1) {\n commit('GET_TICKET_INFO', { butContent: '点击重试', mainTitle: '对不起,目前找不到数据', subTitle: '请重新扫码开门' });\n }\n },\n // 单次代扣签约成功、执行开锁开门等流程\n async doorSuccess({ commit, state, dispatch, global }, payload) {\n if (payload && payload === 'true') {\n const { terminalId } = app.globalData;\n const { orderTraceId } = app.globalData;\n\n let doorResult = '';\n\n const pollingOrder = async () => { // 轮询订单结算状态\n const orderResult = await selectOrderDetail({ terminalId, traceId: orderTraceId });\n if (orderResult && orderResult.isSuccess === 'true') {\n if (orderResult.data.status === '1' || orderResult.data.status === '2') { // 1:订单支付成功、2下单成功,等待结算\n app.globalData.orderInfo = orderResult.data;\n // my.navigateTo({\n // url: '/pages/orderEnd/index'\n // });\n my.redirectTo({ url: '/pages/orderEnd/index' });\n return;\n } else if (orderResult.data.status === '3') {\n commit('GET_TICKET_INFO', { explain: '订单支付失败,请在订单列表找到未支付订单完成支付',\n clockNum: '',\n stateImage: state.fail_image,\n doorImage: state.doorClose_image });\n return;\n } else if (orderResult.data.status === '5') {\n commit('GET_TICKET_INFO', { explain: '柜门已关,未拿取商品',\n clockNum: '',\n stateImage: state.close_image,\n doorImage: state.doorClose_image });\n return;\n } else if (orderResult.data.status === '4') {\n commit('GET_TICKET_INFO', { explain: '订单支付失败,请查看订单详情',\n clockNum: '',\n stateImage: state.fail_image,\n doorImage: state.doorClose_image });\n return;\n } else if (orderResult.data.status === '6') {\n commit('GET_TICKET_INFO', { explain: '设备异常,请联系商家',\n clockNum: '',\n stateImage: state.fail_image,\n doorImage: state.doorClose_image });\n return;\n }\n }\n setTimeout(pollingOrder, 1000);\n };\n\n const pollingStatus = async () => {\n doorResult = await queryDoorStatus({ terminalId, traceId: orderTraceId });\n // doorStatus = 1开锁中、2已开锁 、3已开门、4已关门、5支付成功、6支付失败、7订单取消、8未发生购买行为、9订单异常\n\n console.log('queryDoorStatus。。。。', doorResult);\n if (doorResult && doorResult.isSuccess === 'true') {\n if (doorResult.data.status === '4' || doorResult.data.status === '5') {\n console.log('您已关门,正在生成订单信息...');\n commit('GET_TICKET_INFO', { explain: '您已关门',\n clockNum: '正在生成订单信息...',\n stateImage: state.close_image,\n doorImage: state.doorClose_image });\n pollingOrder();\n return;\n }\n if (doorResult.data.status === '1') {\n console.log('柜门正在开锁,请稍等...');\n commit('GET_TICKET_INFO', { explain: '柜门正在解锁中',\n clockNum: '请稍等...',\n stateImage: state.opening_image,\n doorImage: state.doorClose_image });\n } else if (doorResult.data.status === '2') {\n console.log('门锁已开,请开门购物.');\n commit('GET_TICKET_INFO', { explain: '门锁已开,请开门购物.',\n clockNum: '拿走商品后,关门将自动结算.',\n stateImage: state.open_image,\n doorImage: state.doorClose_image });\n } else if (doorResult.data.status === '3') {\n console.log('您已开门,请完成购物后关好门.');\n commit('GET_TICKET_INFO', { explain: '您已开门,请完成购物后关好门.',\n clockNum: '拿走商品后,关门将自动结算.',\n stateImage: state.open_image,\n doorImage: state.doorOpen_image });\n } else if (doorResult.data.status === '6') {\n console.log('订单支付失败,请在订单列表找到未支付订单完成支付。');\n commit('GET_TICKET_INFO', { explain: '订单支付失败,请在订单列表找到未支付订单完成支付.',\n clockNum: '',\n stateImage: state.fail_image,\n doorImage: state.doorClose_image });\n return;\n } else if (doorResult.data.status === '7') {\n console.log('订单支付失败,请查看订单详情.');\n commit('GET_TICKET_INFO', { explain: '订单支付失败,请查看订单详情.',\n clockNum: '',\n stateImage: state.fail_image,\n doorImage: state.doorClose_image });\n return;\n } else if (doorResult.data.status === '8') {\n console.log('柜门已关锁,您未拿取商品.');\n commit('GET_TICKET_INFO', { explain: '柜门已关锁,您未拿取商品.',\n clockNum: '',\n stateImage: state.close_image,\n doorImage: state.doorClose_image });\n return;\n } else if (doorResult.data.status === '9') {\n console.log('设备异常,请联系商家.');\n commit('GET_TICKET_INFO', { explain: '设备异常,请联系商家.',\n clockNum: '',\n stateImage: state.fail_image,\n doorImage: state.doorClose_image });\n return;\n }\n }\n\n setTimeout(pollingStatus, 2000);\n };\n pollingStatus();\n\n // let num = 4;\n // let clock = setInterval(async () => { // 假设5秒倒计时后,用户取出商品关门。模拟真实环境中,用户取物关门的逻辑\n // commit('GET_TICKET_INFO', { clockNum: `等待 ${num} 秒后关门后自动结算。(测试demo1分钟后自动退款)` });\n // if (num > 0) {\n // num--;\n // } else {\n // num = 4;\n // clearInterval(clock); // 5秒结束后,结束定时器的循环调用函数\n // let buyGoodsFlag = true; // 假设用户买了商品。mock逻辑。真实环境需开发者自行校验\n // if (agreementNo && buyGoodsFlag === true) {\n // commit('GET_TICKET_INFO', { explain: '门已关,结算中', clockNum: '请稍等……', color: 'true' });\n // const isPaysuccess = await pay({ agreementNo });\n // if (isPaysuccess) {\n // my.navigateTo({\n // url: '/pages/orderEnd/index'\n // });\n // } else {\n // my.navigateTo({\n // url: '/pages/error/index'\n // });\n // }\n // }\n // }\n // }, 1000);\n } else {\n commit('GET_TICKET_INFO', { type: null, explain: '开门失败', clockNum: '请返回重新扫码开门.', stateImage: state.fail_image });\n }\n },\n\n async initialise({ commit, state, dispatch, global }, payload) {\n commit('GET_TICKET_INFO', { type: null, explain: '柜门正在解锁中', clockNum: '请稍等...', stateImage: state.opening_image });\n },\n },\n});\n","pages/orderDetails/index.acss":"","pages/orderDetails/index.axml":"<view class=\"container\">\n <view style=\" margin-top:20rpx;\">\n <order-show goods=\"{{goodsData}}\" totalAmount=\"{{totalAmount}}\" />\n </view>\n <view style=\"margin-top:20rpx;\">\n <order-info />\n </view>\n</view>","pages/orderDetails/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() { },\n onLoad() {\n this.dispatch('myorder');\n },\n onShow() { },\n })\n);\n","pages/orderDetails/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"defaultTitle\": \"订单详情\",\n \"allowsBounceVertical\": \"NO\",\n \"usingComponents\":{\n \"order-show\": \"../../module/order-show/order-show\",\n \"order-info\": \"../../module/order-info/order-info\"\n }\n}\n","pages/orderDetails/store.js":"import Store from 'herculex';\nimport { orderEnd } from '../../services/home.service';\nimport mixins from '../../util/mixins';\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {},\n plugins: ['logger'],\n actions: {\n /**\n * 这是个注释\n */\n async myorder({ commit, state, dispatch }, payload) {\n const goodsData = await orderEnd();\n // 商品\n const { goods } = goodsData;\n // 总价\n const { totalAmount } = goodsData;\n commit('SET_USER_INFO', { goodsData: goods, totalAmount });\n },\n },\n});\n","pages/orderEnd/index.acss":".money-all {\n width: 100%;\n height: 122rpx;\n line-height: 122rpx;\n padding-left: 37rpx;\n background-color: #fff;\n font-size: 40rpx;\n position: absolute;\n bottom: 0;\n box-sizing: border-box;\n}\n.money-text {\n color: #f00000;\n}\n.k {\n width: 100%;\n height: 122rpx;\n}\n.status-text {\n width: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-top: 30rpx;\n}\n","pages/orderEnd/index.axml":"<view class=\"container\">\n <position-show position=\"{{position}}\" />\n <view style=\"margin-top:30rpx;\"><goods-show goods=\"{{goodsData}}\" goodsCount=\"{{goodsCount}}\" totalAmount=\"{{totalAmount}}\"/></view>\n\n <view a:if=\"{{orderStatus==='1'}}\">\n <view style=\"margin:15rpx 0;\">\n <list>\n <list-item arrow=\"{{true}}\" onClick=\"jumpCoupon\">优惠券</list-item>\n </list>\n </view>\n <view class=\"k\"></view>\n <view class=\"money-all\">实付:<text class=\"money-text\">¥{{totalAmount}}</text></view>\n </view>\n\n\n <view class=\"status-text\" a:if=\"{{orderStatus==='2'}}\"><text>{{explain}}</text></view>\n\n\n</view>\n","pages/orderEnd/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() { },\n onLoad() {\n this.dispatch('myorderEnd');\n },\n onShow() { },\n jumpCoupon() {\n my.navigateTo({ url: '/pages/coupon/index' });\n },\n })\n);\n","pages/orderEnd/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"defaultTitle\": \"订单完结\",\n \"allowsBounceVertical\": \"NO\",\n \"titleBarColor\":\"#1890FF\",\n \"usingComponents\":{\n \"position-show\": \"../../module/position-show/position-show\",\n \"goods-show\": \"../../module/goods-show/goods-show\",\n \"list\": \"mini-antui/es/list/index\",\n \"list-item\": \"mini-antui/es/list/list-item/index\"\n }\n}\n","pages/orderEnd/store.js":"import Store from 'herculex';\nimport { selectOrderDetail } from '../../services/home.service';\nimport mixins from '../../util/mixins';\n\nconst app = getApp();\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {\n position: '杭州蚂蚁Z空间3栋',\n orderStatus: '',\n goodsData: '',\n totalAmount: '0.00',\n goodsCount: '',\n explain: '',\n },\n plugins: ['logger'],\n actions: {\n /**\n * 这是个注释\n */\n async myorderEnd({ commit, state, dispatch }, payload) {\n const { orderInfo } = app.globalData;\n // 商品\n const goods = orderInfo.goodsDetail;\n // 总价\n const { totalAmount } = orderInfo;\n\n const { goodsCount } = orderInfo;\n\n const { terminalId } = app.globalData;\n const { orderTraceId } = app.globalData;\n\n const pollingOrder = async () => { // 轮询订单结算状态\n const orderResult = await selectOrderDetail({ terminalId, traceId: orderTraceId });\n if (orderResult && orderResult.isSuccess === 'true') {\n if (orderResult.data.status === '1') { // 订单支付成功\n commit('SET_ORDER_INFO', { orderStatus: orderResult.data.status, goodsData: goods, totalAmount, goodsCount });\n return;\n } else if (orderResult.data.status === '2') { // 下单成功,等待结算\n setTimeout(pollingOrder, 2000); // 继续轮询订单状态\n } else if (orderResult.data.status === '3') {\n commit('SET_ORDER_INFO', { orderStatus: orderResult.data.status,\n goodsData: goods,\n totalAmount,\n goodsCount,\n explain: '订单支付失败,请在订单列表找到未支付订单完成支付。' });\n\n return;\n } else if (orderResult.data.status === '5') {\n commit('SET_ORDER_INFO', { orderStatus: orderResult.data.status,\n goodsData: goods,\n totalAmount,\n goodsCount,\n explain: '门已关,未拿取商品。' });\n\n return;\n } else if (orderResult.data.status === '4') {\n commit('GET_TICKET_INFO', { clockNum: '订单支付失败,请查看订单详情。' });\n return;\n } else if (orderResult.data.status === '6') {\n commit('SET_ORDER_INFO', { orderStatus: orderResult.data.status,\n goodsData: goods,\n totalAmount,\n goodsCount,\n explain: '系统异常,请联系商家。' });\n\n return;\n }\n }\n setTimeout(pollingOrder, 1000);\n };\n\n if (orderInfo.status === '2') { // status=2 下单成功,等待结算\n commit('SET_ORDER_INFO', { orderStatus: orderInfo.status,\n goodsData: goods,\n totalAmount,\n goodsCount,\n explain: '下单成功,结算中。。。' });\n pollingOrder(); // 订单等待结算,开始轮询订单状态\n } else { // status=1 订单支付成功\n commit('SET_ORDER_INFO', { orderStatus: orderInfo.status, goodsData: goods, totalAmount, goodsCount });\n }\n },\n },\n});\n","pages/personal/index.acss":".personal {\n box-sizing: border-box;\n width: 100%;\n flex: 1;\n background: #F5F5F5;\n}\n.am-list-brief {\n color: #f6c157;\n}\n.my-info {\n margin: 20rpx 0 30rpx;\n}\n.my-info image {\n border-radius: 20px;\n}\n.center-extra {\n color: #3e8de2;\n}\n","pages/personal/index.axml":"<view class=\"container personal\">\n <view class=\"my-info\">\n <list>\n <list-item thumb=\"{{userInfo.avatar}}\" align=\"bottom\">{{userInfo.nickName}} \n <view class=\"am-list-brief\">积分:{{integral}}\n </view>\n </list-item>\n </list>\n </view>\n <view>\n <list>\n <block a:for=\"{{items2}}\">\n <list-item thumb=\"{{item.thumb}}\" arrow=\"{{item.arrow}}\" onClick=\"onItemClick\" index=\"{{index}}\" key=\"{{index}}\" last=\"{{index === (items2.length - 1)}}\"> {{item.title}} \n <view a:if=\"{{item.extra}}\" slot=\"extra\" class=\"center-extra\"> {{item.extra}} \n </view>\n </list-item>\n </block>\n </list>\n </view>\n</view>","pages/personal/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() {},\n onLoad() {\n my.getAuthCode({\n scopes: 'auth_user',\n success: (res) => {\n my.getAuthUserInfo({\n success: (userInfo) => {\n this.commit({ userInfo });\n },\n });\n },\n });\n },\n onShow() {},\n onItemClick(ev) {\n if (ev.index === 0) {\n my.navigateTo({ url: '/pages/myOrder/index' });\n } else if (ev.index === 1) {\n my.navigateTo({ url: '/pages/coupon/index' });\n } else if (ev.index === 2) {\n my.makePhoneCall({ number: '4006563453' });\n }\n },\n })\n);\n","pages/personal/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": false,\n \"defaultTitle\": \"个人中心\",\n \"titleBarColor\":\"#FFFFFF\",\n \"allowsBounceVertical\": \"NO\",\n \"usingComponents\":{\n \"list\": \"mini-antui/es/list/index\",\n \"list-item\": \"mini-antui/es/list/list-item/index\"\n }\n}\n","pages/personal/store.js":"import Store from 'herculex';\nimport { queryUser } from '../../services/home.service';\nimport mixins from '../../util/mixins';\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {\n items2: [\n {\n title: '我的订单',\n arrow: true,\n thumb: 'https://gw.alipayobjects.com/zos/rmsportal/yAWrGRNOGVokXkIKnAqC.png',\n },\n {\n title: '优惠券',\n arrow: 'up',\n thumb: 'https://gw.alipayobjects.com/zos/rmsportal/dJNGpUMwSDFrpGWxnpLF.png',\n },\n {\n title: '联系客服',\n thumb: 'https://gw.alipayobjects.com/zos/rmsportal/iiDsyxhSAjIBeHDDZBWp.png',\n extra: '400 656 3453',\n },\n ],\n userInfo: null,\n integral: 200,\n },\n plugins: ['logger'],\n actions: {\n },\n});\n","pages/registeLogin/index.acss":".login-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n background: #FFF;\n}\n.login-container .header-logo {\n width: 186rpx;\n height: 63rpx;\n margin-top: 185rpx;\n}\n.login-container .btn-section {\n margin-top: 829rpx;\n}\n.login-container .btn-section button {\n margin-top: 60rpx;\n}\n.login-content {\n width: 560rpx;\n margin-top: 150rpx;\n}\n","pages/registeLogin/index.axml":"<view class=\"container login-container\">\n <image class=\"header-logo\" src=\"https://gw.alipayobjects.com/zos/rmsportal/xEdHeqMtdZImdkYBzzqc.png\" mode=\"aspectFit\" />\n <view class=\"login-content\">\n <login-form />\n </view>\n</view>","pages/registeLogin/index.js":"import store from './store';\n// 获取应用实例\nconst app = getApp();\n\nPage(\n store.register({\n connectGlobal: true,\n onReady() {},\n onLoad() {},\n onShow() {},\n })\n);\n","pages/registeLogin/index.json":"{\n \"enableWK\": \"YES\",\n \"pullRefresh\": \"NO\",\n \"defaultTitle\": \"先享后付货柜\",\n \"titleBarColor\":\"#FFFFFF\",\n \"allowsBounceVertical\": \"NO\",\n \"usingComponents\":{\n \"login-form\": \"../../module/login-form/login-form\"\n }\n}\n","pages/registeLogin/store.js":"import Store from 'herculex';\nimport { sendCode, register } from '../../services/home.service';\nimport { showModal, setStorage } from '../../util/mixins';\n\nexport default new Store({\n connectGlobal: true, // 开启监听全局\bstore开关,是否关注全局信息\n state: {},\n plugins: ['logger'],\n actions: {\n /**\n * 发送验证码\n */\n async sendMobileCode({ commit, state, dispatch }, payload) {\n const result = await sendCode(payload);\n if (result.response) {\n showModal('showToast', { content: '发送成功', type: 'success', duration: 1500 });\n return result.response.verCode;\n } else {\n showModal('alert', {\n title: '发送失败',\n content: result.errorMsg || '短信发送失败,请重试!',\n });\n return false;\n }\n },\n /**\n * 注册\n */\n async verifyCus({ commit, state, dispatch }, payload) {\n const result = await register(payload);\n if (result) {\n return result.phoneNo;\n } else {\n showModal('alert', {\n title: '登录失败',\n content: result.errorMsg || '登录失败,请重试!',\n });\n return false;\n }\n },\n },\n});\n","services/home.service.js":"import { request } from '../util/service';\nimport {\n userMockData,\n codeMockData,\n queryUserMockData,\n getAggrementUrlMockData,\n paySignCenterMockData,\n openDoorMockData,\n queryDoorStatusMockData,\n} from './mocks/home.mock';\n\nconst enableMock = true;\n// 查询用户\n// data = {\"isSuccess\":\"true\",\"data\":{\"userName\":\"XXXX\"\",\"userId\":\"2088********8931\",\"phoneNo\":\"\"}}\nasync function queryUser(param = {}) {\n const data = await request('templet_queryUser', param, { on: true, data: queryUserMockData }, 'post', 'auth_user');\n return data;\n}\n\n// 获取签约链接\n// data = {\"isSuccess\":\"true\",\"data\":{\"agreementUrl\":\"alipay_sdk%3Dalipay-sdk-java-dynamicVersionNo%26app_id%3D2017012305373597%26biz_content%3D%257B%2522\"}}\nasync function getAgreementUrl(param = {}) {\n const data = await request('templet_getAgreementUrl', param, { on: true, data: getAggrementUrlMockData }, 'post');\n\n return data;\n}\n\n\n// 开门请求\n// data = {\"isSuccess\":\"true\",\"data\":{\"traceId\":\"1550667624719\"}}\n// traceId代表本次开门请求id号\nasync function openDoor(param = {}) {\n const data = await request('templet_openDoor', param, { on: true, data: openDoorMockData }, 'post');\n return data;\n}\n\n/**\n * 注册\n */\n// data =\nasync function register(param = {}) {\n const data = await request('templet_verify', param, { on: false, data: userMockData }, 'post');\n return data;\n}\n\n// 发送验证码\n// data =\nasync function sendCode(param = {}) {\n const data = await request('templet_sendcode', param, { on: true, data: codeMockData }, 'post');\n return data;\n}\n\n\n// 查询设备状态\n// data = {\"isSuccess\":\"true\",\"data\":{\"status\":\"1\"}}\n// 0未被使用、1开锁中、2已开锁 、3已开门、4已关门、5支付成功、6支付失败、7订单取消、8未发生购买行为、9订单异常\nasync function queryDoorStatus(param = {}) {\n const data = await request('templet_queryDoorStatus', param, { on: true, data: queryDoorStatusMockData }, 'post');\n return data;\n}\n\n// 订单详情\n// data = {\"isSuccess\":\"true\",\"data\":{\"traceId\":\"1550658157581\",\"tradeNo\":\"2019022022001420251028954155\",\"subject\":\"null\",\"terminalId\":\"99901032\",\"body\":\"null\",\"userId\":\"2088612461620257\",\"buyerLogonId\":\"yua***@alipay.com\",\"totalAmount\":\"0.01\",\"goodsCount\":\"1\",\"agreementNo\":\"20195020504134681225\",\"outTradeNo\":\"visionpayD09EEDCB490107C90CED000B\",goodsDetail\":[{\"price\":\"0.01\",\"num\":\"1\",\"name\":\"味全每日C葡萄汁300ML\",\"id\":\"6932571040168\"}],\"status\":\"1\"}}\n// traceId 与开门请求tarcdId相同\nasync function selectOrderDetail(param = {}) {\n const data = await request('templet_selectOrderDetail', param, { on: false, data: '' }, 'post');\n return data;\n}\n\n// 去支付\n// data =\nasync function pay(param = {}) {\n const data = await request('templet_pay', param, { on: false, data: '' }, 'post');\n return data;\n}\n\n/**\n * 代扣签约\n */\n\nasync function paySignCenter({ signStr, success, fail }) {\n try {\n if (enableMock) {\n return paySignCenterMockData;\n }\n let data = null;\n await my.paySignCenter({\n signStr,\n success(res) {\n success && success(res);\n if (res.result) {\n const result = JSON.parse(res.result);\n data = result.alipay_user_agreement_page_sign_response;\n }\n },\n fail(res) {\n fail && fail(res);\n // return res;\n },\n });\n return data;\n } catch (error) {\n fail(error);\n return null;\n }\n}\n\n\nexport default {\n queryUser,\n getAgreementUrl,\n openDoor,\n register,\n sendCode,\n queryDoorStatus,\n selectOrderDetail,\n pay,\n paySignCenter,\n};\n","services/mocks/home.mock.js":"const userMockData = {\n phoneNo: '',\n userid: '333333',\n username: 'cwen',\n};\n\nconst codeMockData = {\n code: 0,\n msg: 'ok',\n response: {\n verCode: '23456',\n },\n};\n\n\nconst queryUserMockData = {\n isSuccess: 'true',\n data: {\n userName: 'XXXX',\n userId: '2088********8931',\n phoneNo: '',\n },\n};\n\nconst getAggrementUrlMockData = {\n isSuccess: 'true',\n data: {\n agreementUrl: 'alipay_sdk%3Dalipay-sdk-java-dynamicVersionNo%26app_id%3D2017012305373597%26biz_content%3D%257B%2522',\n },\n};\n\nconst selectOrderDetail = {\n isSuccess: 'true',\n data: {\n traceId: '1550658157581',\n tradeNo: '2019022022001420251028954155',\n subject: 'null',\n terminalId: '99901032',\n body: 'null',\n userId: '2088612461620257',\n buyerLogonId: 'yua***@alipay.com',\n totalAmount: '0.01',\n goodsCount: '1',\n agreementNo: '20195020504134681225',\n outTradeNo: 'visionpayD09EEDCB490107C90CED000B',\n goodsDetail: [\n {\n price: '0.01',\n num: '1',\n name: '味全每日C葡萄汁300ML',\n id: '6932571040168',\n },\n ],\n status: '1',\n },\n};\n\nconst paySignCenterMockData = {\n agreement_no: '1',\n external_agreement_no: '2',\n\n};\n\nconst openDoorMockData = {\n isSuccess: 'true',\n data: {\n traceId: '1550667624719',\n },\n};\n\nconst queryDoorStatusMockData = {\n isSuccess: 'true',\n data: { status: '2' },\n};\n\nexport default {\n userMockData,\n codeMockData,\n queryUserMockData,\n getAggrementUrlMockData,\n selectOrderDetail,\n paySignCenterMockData,\n openDoorMockData,\n queryDoorStatusMockData,\n};\n","style/common.acss":"","style/general.acss":".clearfix:after {\n content: '';\n height: 0;\n visibility: hidden;\n display: block;\n clear: both;\n}\n","util/auth.js":"/**\n * 静默授权[auth_base] -> 用来判断是否是第一次登录\n * 主动授权['auth_user', 'auth_industry'] -> 用来授权,以及获取用户信息\n*/\n\n/**\n * jsapi无响应检测\n * */\nfunction loopCheckTimeout() {\n let count = 0;\n let timer = null;\n return function(reject) {\n timer = setInterval(() => {\n if (count === 5) {\n clearInterval(timer);\n count = 0;\n reject('timeout');\n }\n count++;\n }, 1000);\n };\n}\n\n/**\n * 主动授权\n * */\nexport function userAuthCode() {\n return new Promise((resolve, reject) => {\n try {\n my.getAuthCode({\n scopes: 'auth_user',\n success: (res) => { resolve(res.authCode); },\n fail: res =>\n reject(res),\n // my.alert({\n // title: '授权失败,请稍后再试',\n // complete: () => reject(res)\n // })\n\n });\n } catch (e) {\n reject(e);\n }\n });\n}\n\n/**\n * 静默授权\n * */\nexport function silenceAuthCode() {\n return new Promise((resolve, reject) => {\n loopCheckTimeout()(reject);\n try {\n my.getAuthCode({\n scopes: 'auth_base',\n success: (res) => {\n resolve(res);\n },\n fail: (res) => {\n my.alert({\n title: '授权失败,请稍后再试',\n complete: () => reject(res),\n });\n },\n });\n } catch (e) {\n reject(e);\n }\n });\n}\n","util/date.sjs":"var formatDate = function formatDate(param){\n const arr = param.split(\"-\");\n if(arr.length === 3){\n const date = `${arr[0]}年${arr[1]}月${arr[2]}日`\n return date;\n }\n return \"\";\n}\n\nexport default {\n formatDate: formatDate\n};","util/env.js":"const DevDomain = 'http://www.alipay.com/';\nconst TestDomain = 'http://www.alipay.com/';\nconst SitDomain = 'http://www.alipay.com/';\nconst DefaultDomain = 'http://www.alipay.com/';\n\nexport default function getDomain () {\n let domain = DevDomain;\n const env = 'dev';\n switch (env) {\n case 'dev':\n domain = DevDomain;\n break;\n case 'sit':\n domain = SitDomain;\n break;\n case 'test':\n domain = TestDomain;\n break;\n case 'prod':\n default:\n domain = DefaultDomain;\n break;\n }\n return domain;\n}\n\n","util/mixins.js":"const fn = function () { };\nexport default {\n /**\n * 时间处理\n * @param data\n * @returns Obeject\n */\n computingTime(atime, ls) {\n let al = Number(atime.substring(0, 2));\n let ar = Number(atime.substring(2, atime.length));\n let ll = Number(ls.substring(0, 2));\n let lr = Number(ls.substring(3, ls.length));\n let bl = 0;\n let br = 0;\n let timeAdd = false;\n if (ar >= lr && al >= ll) {\n br = ar - lr;\n bl = al - ll;\n }\n if (ar < lr && al <= ll) {\n br = ar + 60 - lr;\n bl = al + 23 - ll; // 显示加一天\n timeAdd = true;\n }\n if (ar >= lr && al < ll) {\n br = ar - lr;\n bl = al + 24 - ll; // 显示加一天\n timeAdd = true;\n }\n if (ar < lr && al > ll) {\n br = ar + 60 - lr;\n bl = al - 1 - ll;\n }\n bl = bl < 10 ? `0${bl}` : bl;\n br = br < 10 ? `0${br}` : br;\n ll = ll < 10 ? `0${ll}` : ll;\n lr = lr < 10 ? `0${lr}` : lr;\n al = al < 10 ? `0${al}` : al;\n ar = ar < 10 ? `0${ar}` : ar;\n const newBtime = `${bl}:${br}`;\n const newAtime = `${al}:${ar}`;\n const newls = `${ll}时${lr}分`;\n return { newAtime, newBtime, timeAdd, newls };\n },\n timeDividingLine(time, num) {\n let al = Number(time.substring(0, num));\n let ar = Number(time.substring(num, time.length));\n al = al < 10 ? `0${al}` : al;\n ar = ar < 10 ? `0${ar}` : ar;\n const newTime = `${al}:${ar}`;\n return newTime;\n },\n /**\n * 验证身份证合法\n * @param certId String\n * @returns Boolean\n */\n verifiyIdCard(certId) {\n return /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/gim.test(certId.trim());\n },\n /**\n * 验证手机号码是否合法\n * @param number\n * @returns {boolean}\n */\n verifyTel(number) {\n return /^[1][3,4,5,7,8][0-9]{9}$/.test(number.trim());\n },\n /**\n * 验证邮箱是否合法\n * @param email\n * @returns {boolean}\n */\n verifyEmail(email) {\n return /^([A-Za-z0-9_\\-.])+@[A-Za-z0-9_\\-.]+\\.[A-Za-z]{2,4}$/gim.test(\n email.trim()\n );\n },\n /**\n * 验证新密码格式是否正确\n * @param pwd\n * @returns {boolean}\n */\n verifyPwd(pwd) {\n return /^[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/gim.test(pwd.trim());\n },\n /**\n * 弹框提示\n * @param moldalType\n * @param params\n * @param callback\n */\n showModal(moldalType = 'alert', params = {}, callback = fn) {\n const {\n title = '提示',\n content = '操作成功',\n buttonText = '确定',\n confirmButtonText = '确定',\n cancelButtonText = '取消',\n duration = 3000,\n type = 'success',\n delay = 0,\n } = params;\n switch (moldalType) {\n case 'alert':\n my.alert({ title, content, buttonText, complete: callback });\n break;\n case 'showToast':\n my.showToast({ content, duration, type, complete: callback });\n break;\n case 'hideToast':\n my.hideToast();\n break;\n case 'showLoading':\n my.showLoading({ content, delay });\n break;\n case 'hideLoading':\n my.hideLoading();\n break;\n case 'confirm':\n return new Promise((resolve, reject) => {\n my.confirm({\n title,\n content,\n confirmButtonText,\n cancelButtonText,\n success: (result) => {\n resolve(result);\n },\n fail: (err) => {\n reject(err);\n },\n });\n });\n default:\n break;\n }\n },\n methods: {\n /**\n * 创建动画\n * @param animateConfig Object\n */\n createAnimationHandle(animateConfig = {}) {\n return my.createAnimation(\n Object.assign(\n {\n duration: 400,\n timeFunction: 'ease-in-out',\n },\n animateConfig\n )\n );\n },\n },\n /**\n * 设置缓存\n */\n async setStorage({ key = '', data = {}, success = fn, fail = fn }) {\n try {\n let status = 'success';\n await my.setStorage({\n key,\n data,\n success(res) {\n status = 'success';\n success(res);\n },\n fail(err) {\n status = 'fail';\n fail(err);\n },\n });\n return status;\n } catch (error) {\n fail(error);\n return 'fail';\n }\n },\n /**\n * 读取缓存\n */\n async getStorage({ key = '', success = fn, fail = fn }) {\n try {\n let data = null;\n await my.getStorage({\n key,\n success(res) {\n success(res);\n data = res.data;\n },\n fail(res) {\n fail(res);\n // return res;\n },\n });\n return data;\n } catch (error) {\n fail(error);\n return null;\n }\n },\n /**\n * 芝麻认证\n */\n async startZMVerify({ bizNo = '', success = fn, fail = fn }) {\n try {\n let data = null;\n await my.startZMVerify({\n bizNo,\n success(res) {\n success(res);\n data = res.passed;\n },\n fail(res) {\n fail(res);\n // return res;\n },\n });\n return data;\n } catch (error) {\n fail(error);\n return null;\n }\n },\n\n};\n","util/service.js":"import TinyAppHttp from './TinyAppHttp';\nimport getDomain from './env';\nimport { userAuthCode, silenceAuthCode } from './auth';\n\nconst tinyAppHttp = new TinyAppHttp();\n// 增加format response data的拦截器\ntinyAppHttp.interceptors.response.use(\n (response) => {\n my.hideLoading();\n if (response.status) {\n return response.data;\n } else {\n const errorRes = response;\n errorRes.apiError = true;\n return errorRes;\n }\n },\n (error) => {\n my.hideLoading();\n return Promise.reject(error);\n }\n);\n// 增加format request config的拦截器\ntinyAppHttp.interceptors.request.use(\n config =>\n // my.showLoading({ content: '正在加载' });\n config\n ,\n error => Promise.reject(error)\n);\n\nexport async function request(\n url = '',\n data = {},\n mock = { on: false, data: {} },\n method = 'get',\n scopes = false,\n dataType = 'json'\n) {\n if (mock.on) {\n return new Promise((resolve) => {\n resolve(mock.data);\n });\n }\n let res = null;\n url = getDomain() + url;\n try {\n let authcode = '';\n if (scopes === 'auth_user') {\n const getAuthCode = await userAuthCode();\n authcode = getAuthCode.authCode;\n }\n if (scopes === 'auth_base') {\n const getAuthCode = await silenceAuthCode();\n authcode = getAuthCode.authCode;\n }\n res = await tinyAppHttp[method]({ url, data, authcode, dataType });\n } catch (e) {\n console.log(e);\n console.log('--------请求出错--------', { ...e, url });\n }\n console.log('--------请求结果--------', res);\n return res;\n}\n","util/TinyAppHttp.js":"import { getAuthCode, silenceAuthCode } from './auth';\nimport mixins from './mixins';\n\nconst TIMEOUT = 10000;\n/**\n * 获取用户的Token信息并发送异步求情\n * @param {*} config\n * _request_ 的第一个参数必须是url\n */\nasync function _request_(config) {\n const {\n url,\n method,\n headers,\n timeout,\n authcode,\n dataType,\n } = config;\n let { data } = config;\n if (authcode) {\n data = { ...data, authcode };\n }\n console.log('----------请求地址----------', method, url);\n console.log('----------请求参数----------', data);\n console.log('----------请求头部----------', headers);\n return new Promise((resolve, reject) => {\n try {\n my.httpRequest({\n url,\n method,\n headers,\n data,\n dataType,\n timeout: timeout || TIMEOUT,\n success: (res) => {\n resolve(res);\n },\n fail: (error) => {\n reject(error);\n },\n });\n } catch (e) {\n reject(e);\n }\n });\n}\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n use(fulfilled, rejected, autoAddAuth = false) {\n this.handlers.unshift({\n fulfilled,\n rejected,\n isAutoAuth: autoAddAuth,\n });\n return this.handlers.length - 1;\n }\n\n forEach(fn) {\n const newHandles = [];\n this.handlers.forEach((h) => {\n if (h !== null) {\n fn(h);\n }\n if (!h.isAutoAuth) {\n newHandles.push(h);\n }\n });\n this.handlers = newHandles;\n }\n}\n\nfunction dispatchRequest(config) {\n // 这里是请求的真正发起地方返回promise\n return _request_(config).then(\n response =>\n // TODO format response data\n response\n ,\n reason => Promise.reject(reason)\n );\n}\n\nexport default class TinyAppHttp {\n constructor(instanceConfig) {\n /*\n * instanceConfig 参数\n * exitAppWhenRefuseAuth Boolean 拒绝授权时退出app\n */\n this.defaults = Object.assign(\n {\n exitAppWhenRefuseAuth: true,\n },\n instanceConfig\n );\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager(),\n };\n }\n\n autoAddAuthorization(config, autoAddAuth) {\n this.interceptors.response.use(\n\n async response => response,\n error => Promise.reject(error),\n autoAddAuth\n );\n }\n\n request(...args) {\n let [config] = args;\n const [_, autoAddAuth = true] = args;\n // 参数结构({url: '', data: {}, method: '', headers: {}})\n if (typeof config === 'string') {\n config = {};\n config.url = args[0];\n } else {\n config = config || {};\n }\n // 合并参数\n config = { ...this.defaults, ...config };\n config.method = config.method ? config.method.toLowerCase() : 'get';\n config.headers = config.headers || {};\n config.data = config.data || {};\n // 加上权限验证的拦截器\n autoAddAuth && this.autoAddAuthorization(config, autoAddAuth);\n // 载入拦截器\n const chain = [dispatchRequest, undefined];\n let promise = Promise.resolve(config);\n\n this.interceptors.request.forEach((interceptor) => {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n this.interceptors.response.forEach((interceptor) => {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n}\n\n['get', 'post'].forEach((method) => {\n TinyAppHttp.prototype[method] = function(config) {\n config.method = method;\n return this.request(config);\n };\n});\n"},"dist":[{"ETag":"C4A5900874ABC1E7D4296DF4FF14E8D8","name":"0.json","size":766074,"type":"json","url":"https://gw.alipayobjects.com/os/herbox/d50da8ea-2fa1-439f-9d62-10265dc37e1e/0.json"}]}