Commit 5e52ed7c5ad424be24981bc9cd312a067f1c582f
1 parent
4eb9c766
个人中心
Showing
29 changed files
with
2413 additions
and
217 deletions
build/utils.js
... | ... | @@ -59,7 +59,11 @@ exports.cssLoaders = function (options) { |
59 | 59 | return { |
60 | 60 | css: generateLoaders(), |
61 | 61 | postcss: generateLoaders(), |
62 | - less: generateLoaders('less'), | |
62 | + less: generateLoaders('less', { | |
63 | + modifyVars: { | |
64 | + 'hack': `true; @import "${path.join(__dirname, '../src/assets/css/resetVantUi.less')}";` | |
65 | + } | |
66 | + }), | |
63 | 67 | sass: generateLoaders('sass', { indentedSyntax: true }), |
64 | 68 | scss: generateLoaders('sass').concat( |
65 | 69 | { | ... | ... |
package-lock.json
... | ... | @@ -4,6 +4,21 @@ |
4 | 4 | "lockfileVersion": 1, |
5 | 5 | "requires": true, |
6 | 6 | "dependencies": { |
7 | + "@babel/runtime": { | |
8 | + "version": "7.22.5", | |
9 | + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.5.tgz", | |
10 | + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", | |
11 | + "requires": { | |
12 | + "regenerator-runtime": "^0.13.11" | |
13 | + }, | |
14 | + "dependencies": { | |
15 | + "regenerator-runtime": { | |
16 | + "version": "0.13.11", | |
17 | + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", | |
18 | + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" | |
19 | + } | |
20 | + } | |
21 | + }, | |
7 | 22 | "@nodelib/fs.scandir": { |
8 | 23 | "version": "2.1.5", |
9 | 24 | "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", |
... | ... | @@ -41,6 +56,21 @@ |
41 | 56 | "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", |
42 | 57 | "dev": true |
43 | 58 | }, |
59 | + "@vant/icons": { | |
60 | + "version": "1.8.0", | |
61 | + "resolved": "https://registry.npmmirror.com/@vant/icons/-/icons-1.8.0.tgz", | |
62 | + "integrity": "sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg==" | |
63 | + }, | |
64 | + "@vant/popperjs": { | |
65 | + "version": "1.3.0", | |
66 | + "resolved": "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.3.0.tgz", | |
67 | + "integrity": "sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==" | |
68 | + }, | |
69 | + "@vue/babel-helper-vue-jsx-merge-props": { | |
70 | + "version": "1.4.0", | |
71 | + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", | |
72 | + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==" | |
73 | + }, | |
44 | 74 | "abbrev": { |
45 | 75 | "version": "1.1.1", |
46 | 76 | "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz", |
... | ... | @@ -1815,8 +1845,9 @@ |
1815 | 1845 | }, |
1816 | 1846 | "clone": { |
1817 | 1847 | "version": "2.1.2", |
1818 | - "resolved": "http://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz", | |
1819 | - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" | |
1848 | + "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz", | |
1849 | + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", | |
1850 | + "dev": true | |
1820 | 1851 | }, |
1821 | 1852 | "clone-deep": { |
1822 | 1853 | "version": "4.0.1", |
... | ... | @@ -2018,6 +2049,15 @@ |
2018 | 2049 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", |
2019 | 2050 | "dev": true |
2020 | 2051 | }, |
2052 | + "copy-anything": { | |
2053 | + "version": "2.0.6", | |
2054 | + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz", | |
2055 | + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", | |
2056 | + "dev": true, | |
2057 | + "requires": { | |
2058 | + "is-what": "^3.14.1" | |
2059 | + } | |
2060 | + }, | |
2021 | 2061 | "copy-concurrently": { |
2022 | 2062 | "version": "1.0.5", |
2023 | 2063 | "resolved": "http://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", |
... | ... | @@ -4821,6 +4861,13 @@ |
4821 | 4861 | "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", |
4822 | 4862 | "dev": true |
4823 | 4863 | }, |
4864 | + "image-size": { | |
4865 | + "version": "0.5.5", | |
4866 | + "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz", | |
4867 | + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", | |
4868 | + "dev": true, | |
4869 | + "optional": true | |
4870 | + }, | |
4824 | 4871 | "import-cwd": { |
4825 | 4872 | "version": "2.1.0", |
4826 | 4873 | "resolved": "https://registry.nlark.com/import-cwd/download/import-cwd-2.1.0.tgz", |
... | ... | @@ -5179,6 +5226,12 @@ |
5179 | 5226 | "resolved": "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz", |
5180 | 5227 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" |
5181 | 5228 | }, |
5229 | + "is-what": { | |
5230 | + "version": "3.14.1", | |
5231 | + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz", | |
5232 | + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", | |
5233 | + "dev": true | |
5234 | + }, | |
5182 | 5235 | "is-windows": { |
5183 | 5236 | "version": "1.0.2", |
5184 | 5237 | "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", |
... | ... | @@ -5340,10 +5393,49 @@ |
5340 | 5393 | "invert-kv": "^1.0.0" |
5341 | 5394 | } |
5342 | 5395 | }, |
5396 | + "less": { | |
5397 | + "version": "4.1.3", | |
5398 | + "resolved": "https://registry.npmmirror.com/less/-/less-4.1.3.tgz", | |
5399 | + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", | |
5400 | + "dev": true, | |
5401 | + "requires": { | |
5402 | + "copy-anything": "^2.0.1", | |
5403 | + "errno": "^0.1.1", | |
5404 | + "graceful-fs": "^4.1.2", | |
5405 | + "image-size": "~0.5.0", | |
5406 | + "make-dir": "^2.1.0", | |
5407 | + "mime": "^1.4.1", | |
5408 | + "needle": "^3.1.0", | |
5409 | + "parse-node-version": "^1.0.1", | |
5410 | + "source-map": "~0.6.0", | |
5411 | + "tslib": "^2.3.0" | |
5412 | + }, | |
5413 | + "dependencies": { | |
5414 | + "make-dir": { | |
5415 | + "version": "2.1.0", | |
5416 | + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", | |
5417 | + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", | |
5418 | + "dev": true, | |
5419 | + "optional": true, | |
5420 | + "requires": { | |
5421 | + "pify": "^4.0.1", | |
5422 | + "semver": "^5.6.0" | |
5423 | + } | |
5424 | + }, | |
5425 | + "pify": { | |
5426 | + "version": "4.0.1", | |
5427 | + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", | |
5428 | + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", | |
5429 | + "dev": true, | |
5430 | + "optional": true | |
5431 | + } | |
5432 | + } | |
5433 | + }, | |
5343 | 5434 | "less-loader": { |
5344 | 5435 | "version": "4.1.0", |
5345 | - "resolved": "https://registry.npmmirror.com/less-loader/download/less-loader-4.1.0.tgz", | |
5346 | - "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", | |
5436 | + "resolved": "https://registry.npmmirror.com/less-loader/-/less-loader-4.1.0.tgz", | |
5437 | + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", | |
5438 | + "dev": true, | |
5347 | 5439 | "requires": { |
5348 | 5440 | "clone": "^2.1.1", |
5349 | 5441 | "loader-utils": "^1.1.0", |
... | ... | @@ -6014,6 +6106,47 @@ |
6014 | 6106 | } |
6015 | 6107 | } |
6016 | 6108 | }, |
6109 | + "needle": { | |
6110 | + "version": "3.2.0", | |
6111 | + "resolved": "https://registry.npmmirror.com/needle/-/needle-3.2.0.tgz", | |
6112 | + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", | |
6113 | + "dev": true, | |
6114 | + "optional": true, | |
6115 | + "requires": { | |
6116 | + "debug": "^3.2.6", | |
6117 | + "iconv-lite": "^0.6.3", | |
6118 | + "sax": "^1.2.4" | |
6119 | + }, | |
6120 | + "dependencies": { | |
6121 | + "debug": { | |
6122 | + "version": "3.2.7", | |
6123 | + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", | |
6124 | + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", | |
6125 | + "dev": true, | |
6126 | + "optional": true, | |
6127 | + "requires": { | |
6128 | + "ms": "^2.1.1" | |
6129 | + } | |
6130 | + }, | |
6131 | + "iconv-lite": { | |
6132 | + "version": "0.6.3", | |
6133 | + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", | |
6134 | + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", | |
6135 | + "dev": true, | |
6136 | + "optional": true, | |
6137 | + "requires": { | |
6138 | + "safer-buffer": ">= 2.1.2 < 3.0.0" | |
6139 | + } | |
6140 | + }, | |
6141 | + "ms": { | |
6142 | + "version": "2.1.3", | |
6143 | + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", | |
6144 | + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", | |
6145 | + "dev": true, | |
6146 | + "optional": true | |
6147 | + } | |
6148 | + } | |
6149 | + }, | |
6017 | 6150 | "negotiator": { |
6018 | 6151 | "version": "0.6.2", |
6019 | 6152 | "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", |
... | ... | @@ -6603,6 +6736,12 @@ |
6603 | 6736 | "json-parse-better-errors": "^1.0.1" |
6604 | 6737 | } |
6605 | 6738 | }, |
6739 | + "parse-node-version": { | |
6740 | + "version": "1.0.1", | |
6741 | + "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz", | |
6742 | + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", | |
6743 | + "dev": true | |
6744 | + }, | |
6606 | 6745 | "parseurl": { |
6607 | 6746 | "version": "1.3.3", |
6608 | 6747 | "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", |
... | ... | @@ -6697,7 +6836,8 @@ |
6697 | 6836 | "pify": { |
6698 | 6837 | "version": "3.0.0", |
6699 | 6838 | "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", |
6700 | - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" | |
6839 | + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", | |
6840 | + "dev": true | |
6701 | 6841 | }, |
6702 | 6842 | "pinkie": { |
6703 | 6843 | "version": "2.0.4", |
... | ... | @@ -9293,6 +9433,12 @@ |
9293 | 9433 | "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=", |
9294 | 9434 | "dev": true |
9295 | 9435 | }, |
9436 | + "tslib": { | |
9437 | + "version": "2.5.3", | |
9438 | + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.3.tgz", | |
9439 | + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", | |
9440 | + "dev": true | |
9441 | + }, | |
9296 | 9442 | "tty-browserify": { |
9297 | 9443 | "version": "0.0.0", |
9298 | 9444 | "resolved": "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", |
... | ... | @@ -9684,6 +9830,25 @@ |
9684 | 9830 | "spdx-expression-parse": "^3.0.0" |
9685 | 9831 | } |
9686 | 9832 | }, |
9833 | + "vant": { | |
9834 | + "version": "2.12.54", | |
9835 | + "resolved": "https://registry.npmmirror.com/vant/-/vant-2.12.54.tgz", | |
9836 | + "integrity": "sha512-t7DCiLxNosDrg0Jm5EY9p0A5cAMo5OadmizbYtPEc0ru+OJKEa3kcfxtKIK5on7ZPqoOkyYJt8e6BQ1VDMPsrg==", | |
9837 | + "requires": { | |
9838 | + "@babel/runtime": "7.x", | |
9839 | + "@vant/icons": "^1.7.1", | |
9840 | + "@vant/popperjs": "^1.1.0", | |
9841 | + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", | |
9842 | + "vue-lazyload": "1.2.3" | |
9843 | + }, | |
9844 | + "dependencies": { | |
9845 | + "vue-lazyload": { | |
9846 | + "version": "1.2.3", | |
9847 | + "resolved": "https://registry.npmmirror.com/vue-lazyload/-/vue-lazyload-1.2.3.tgz", | |
9848 | + "integrity": "sha512-DC0ZwxanbRhx79tlA3zY5OYJkH8FYp3WBAnAJbrcuoS8eye1P73rcgAZhyxFSPUluJUTelMB+i/+VkNU/qVm7g==" | |
9849 | + } | |
9850 | + } | |
9851 | + }, | |
9687 | 9852 | "vary": { |
9688 | 9853 | "version": "1.1.2", |
9689 | 9854 | "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", | ... | ... |
package.json
... | ... | @@ -13,11 +13,11 @@ |
13 | 13 | "axios": "^0.21.1", |
14 | 14 | "css-loader": "^3.6.0", |
15 | 15 | "js-base64": "^3.6.0", |
16 | - "less-loader": "^4.1.0", | |
17 | 16 | "mint-ui": "^2.2.13", |
18 | 17 | "moment": "^2.29.1", |
19 | 18 | "node-sass": "^4.14.1", |
20 | 19 | "sass-loader": "^7.3.1", |
20 | + "vant": "^2.12.54", | |
21 | 21 | "vue": "^2.5.2", |
22 | 22 | "vue-baidu-map": "^0.21.22", |
23 | 23 | "vue-h5-popup": "^1.0.2", |
... | ... | @@ -41,6 +41,8 @@ |
41 | 41 | "file-loader": "^1.1.4", |
42 | 42 | "friendly-errors-webpack-plugin": "^1.6.1", |
43 | 43 | "html-webpack-plugin": "^2.30.1", |
44 | + "less": "^4.1.3", | |
45 | + "less-loader": "^4.1.0", | |
44 | 46 | "node-notifier": "^5.1.2", |
45 | 47 | "optimize-css-assets-webpack-plugin": "^3.2.0", |
46 | 48 | "ora": "^1.2.0", | ... | ... |
src/api/getUserIfo.js
0 → 100644
1 | +import request from '@/utils/request' | |
2 | + | |
3 | +export function getTokenByOpenId(params) { // 获取用户token和手机号 | |
4 | + return request({ | |
5 | + url: 'wxPublicUser/getTokenByOpenId', | |
6 | + method: 'post', | |
7 | + data: params | |
8 | + }) | |
9 | +} | |
10 | + | |
11 | + | |
12 | +export function saveFeedbackAndSuggest(params) { // 提交建议反馈 | |
13 | + return request({ | |
14 | + url: 'suggest/saveFeedbackAndSuggest', | |
15 | + method: 'post', | |
16 | + data: params | |
17 | + }) | |
18 | +} | |
19 | + | |
20 | + | |
21 | +export function getFeedbackType(params) { // 获取建议反馈类型 | |
22 | + return request({ | |
23 | + url: 'suggest/getFeedbackType', | |
24 | + method: 'post', | |
25 | + data: params | |
26 | + }) | |
27 | +} | |
28 | + | |
29 | + | ... | ... |
src/assets/css/reset.css
src/assets/css/resetVantUi.less
0 → 100644
1 | + | |
2 | + | |
3 | + // Color Palette | |
4 | +@black: #000; | |
5 | +@white: #fff; | |
6 | +@gray-1: #f7f8fa; | |
7 | +@gray-2: #f2f3f5; | |
8 | +@gray-3: #ebedf0; | |
9 | +@gray-4: #dcdee0; | |
10 | +@gray-5: #c8c9cc; | |
11 | +@gray-6: #969799; | |
12 | +@gray-7: #646566; | |
13 | +@gray-8: #323233; | |
14 | +@red: #ee0a24; | |
15 | +@blue: #1989fa; | |
16 | + //1989fa | |
17 | +@orange: #ff976a; | |
18 | +@orange-dark: #ed6a0c; | |
19 | +@orange-light: #fffbe8; | |
20 | +@green: #07c160; | |
21 | + | |
22 | +// Gradient Colors | |
23 | +@gradient-red: linear-gradient(to right, #ff6034, #ee0a24); | |
24 | +@gradient-orange: linear-gradient(to right, #ffd01e, #ff8917); | |
25 | +@gradient-blue: linear-gradient(180deg, #2282C5 0%, #4B8EF1 58%, #63BEFD 100%); | |
26 | + | |
27 | +// Component Colors | |
28 | +@text-color: @gray-8; | |
29 | +@active-color: @gray-2; | |
30 | +@active-opacity: 0.7; | |
31 | +@disabled-opacity: 0.5; | |
32 | +@background-color: @gray-1; | |
33 | +@background-color-light: #fafafa; | |
34 | +@text-link-color: #576b95; | |
35 | + | |
36 | +// Padding | |
37 | +@padding-base: 4px; | |
38 | +@padding-xs: @padding-base * 2; | |
39 | +@padding-sm: @padding-base * 3; | |
40 | +@padding-md: @padding-base * 4; | |
41 | +@padding-lg: @padding-base * 6; | |
42 | +@padding-xl: @padding-base * 8; | |
43 | + | |
44 | +// Font | |
45 | +@font-size-xs: 10px; | |
46 | +@font-size-sm: 12px; | |
47 | +@font-size-md: 14px; | |
48 | +@font-size-lg: 16px; | |
49 | +@font-weight-bold: 500; | |
50 | +@line-height-xs: 14px; | |
51 | +@line-height-sm: 18px; | |
52 | +@line-height-md: 20px; | |
53 | +@line-height-lg: 22px; | |
54 | +@base-font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', | |
55 | +Helvetica, Segoe UI, Arial, Roboto, 'PingFang SC', 'miui', 'Hiragino Sans GB', | |
56 | +'Microsoft Yahei', sans-serif; | |
57 | +@price-integer-font-family: Avenir-Heavy, PingFang SC, Helvetica Neue, Arial, | |
58 | +sans-serif; | |
59 | + | |
60 | +// Animation | |
61 | +@animation-duration-base: 0.3s; | |
62 | +@animation-duration-fast: 0.2s; | |
63 | +@animation-timing-function-enter: ease-out; | |
64 | +@animation-timing-function-leave: ease-in; | |
65 | + | |
66 | +// Border | |
67 | +@border-color: @gray-3; | |
68 | +@border-width-base: 1px; | |
69 | +@border-radius-sm: 2px; | |
70 | +@border-radius-md: 4px; | |
71 | +@border-radius-lg: 8px; | |
72 | +@border-radius-max: 999px; | |
73 | + | |
74 | +// ActionSheet | |
75 | +@action-sheet-max-height: 80%; | |
76 | +@action-sheet-header-height: 48px; | |
77 | +@action-sheet-header-font-size: @font-size-lg; | |
78 | +@action-sheet-description-color: @gray-6; | |
79 | +@action-sheet-description-font-size: @font-size-md; | |
80 | +@action-sheet-description-line-height: @line-height-md; | |
81 | +@action-sheet-item-background: @white; | |
82 | +@action-sheet-item-font-size: @font-size-lg; | |
83 | +@action-sheet-item-line-height: @line-height-lg; | |
84 | +@action-sheet-item-text-color: @text-color; | |
85 | +@action-sheet-item-disabled-text-color: @gray-5; | |
86 | +@action-sheet-subname-color: @gray-6; | |
87 | +@action-sheet-subname-font-size: @font-size-sm; | |
88 | +@action-sheet-subname-line-height: @line-height-sm; | |
89 | +@action-sheet-close-icon-size: 22px; | |
90 | +@action-sheet-close-icon-color: @gray-5; | |
91 | +@action-sheet-close-icon-active-color: @gray-6; | |
92 | +@action-sheet-close-icon-padding: 0 @padding-md; | |
93 | +@action-sheet-cancel-text-color: @gray-7; | |
94 | +@action-sheet-cancel-padding-top: @padding-xs; | |
95 | +@action-sheet-cancel-padding-color: @background-color; | |
96 | +@action-sheet-loading-icon-size: 22px; | |
97 | + | |
98 | +// AddressEdit | |
99 | +@address-edit-padding: @padding-sm; | |
100 | +@address-edit-buttons-padding: @padding-xl @padding-base; | |
101 | +@address-edit-button-margin-bottom: @padding-sm; | |
102 | +@address-edit-detail-finish-color: @blue; | |
103 | +@address-edit-detail-finish-font-size: @font-size-sm; | |
104 | + | |
105 | +// AddressList | |
106 | +@address-list-padding: @padding-sm @padding-sm 80px; | |
107 | +@address-list-disabled-text-color: @gray-6; | |
108 | +@address-list-disabled-text-padding: @padding-base * 5 0 @padding-md; | |
109 | +@address-list-disabled-text-font-size: @font-size-md; | |
110 | +@address-list-disabled-text-line-height: @line-height-md; | |
111 | +@address-list-add-button-z-index: 999; | |
112 | +@address-list-item-padding: @padding-sm; | |
113 | +@address-list-item-text-color: @text-color; | |
114 | +@address-list-item-disabled-text-color: @gray-5; | |
115 | +@address-list-item-font-size: 13px; | |
116 | +@address-list-item-line-height: @line-height-sm; | |
117 | +@address-list-item-radio-icon-color: @red; | |
118 | +@address-list-edit-icon-size: 20px; | |
119 | + | |
120 | +// Badge | |
121 | +@badge-size: 16px; | |
122 | +@badge-color: @white; | |
123 | +@badge-padding: 0 3px; | |
124 | +@badge-font-size: @font-size-sm; | |
125 | +@badge-font-weight: @font-weight-bold; | |
126 | +@badge-border-width: @border-width-base; | |
127 | +@badge-background-color: @red; | |
128 | +@badge-dot-color: @red; | |
129 | +@badge-dot-size: 8px; | |
130 | +@badge-font-family: -apple-system-font, Helvetica Neue, Arial, sans-serif; | |
131 | + | |
132 | +// Button | |
133 | +@button-mini-height: 24px; | |
134 | +@button-mini-font-size: @font-size-xs; | |
135 | +@button-small-height: 32px; | |
136 | +@button-small-font-size: @font-size-sm; | |
137 | +@button-normal-font-size: @font-size-md; | |
138 | +@button-large-height: 50px; | |
139 | +@button-default-height: 44px; | |
140 | +@button-default-line-height: 1.2; | |
141 | +@button-default-font-size: @font-size-lg; | |
142 | +@button-default-color: @text-color; | |
143 | +@button-default-background-color: @white; | |
144 | +@button-default-border-color: @border-color; | |
145 | +@button-primary-color: @white; | |
146 | +@button-primary-background-color: @green; | |
147 | +@button-primary-border-color: @green; | |
148 | +@button-info-color: @white; | |
149 | +@button-info-background-color: @gradient-blue; | |
150 | +@button-info-border-color: @gradient-blue; | |
151 | +@button-danger-color: @white; | |
152 | +@button-danger-background-color: @red; | |
153 | +@button-danger-border-color: @red; | |
154 | +@button-warning-color: @white; | |
155 | +@button-warning-background-color: @orange; | |
156 | +@button-warning-border-color: @orange; | |
157 | +@button-border-width: @border-width-base; | |
158 | +@button-border-radius: @border-radius-sm; | |
159 | +@button-round-border-radius: @border-radius-max; | |
160 | +@button-plain-background-color: @white; | |
161 | +@button-disabled-opacity: @disabled-opacity; | |
162 | + | |
163 | +// Calendar | |
164 | +@calendar-background-color: @white; | |
165 | +@calendar-popup-height: 80%; | |
166 | +@calendar-header-box-shadow: 0 2px 10px rgba(125, 126, 128, 0.16); | |
167 | +@calendar-header-title-height: 44px; | |
168 | +@calendar-header-title-font-size: @font-size-lg; | |
169 | +@calendar-header-subtitle-font-size: @font-size-md; | |
170 | +@calendar-weekdays-height: 30px; | |
171 | +@calendar-weekdays-font-size: @font-size-sm; | |
172 | +@calendar-month-title-font-size: @font-size-md; | |
173 | +@calendar-month-mark-color: fade(@gray-2, 80%); | |
174 | +@calendar-month-mark-font-size: 160px; | |
175 | +@calendar-day-height: 64px; | |
176 | +@calendar-day-font-size: @font-size-lg; | |
177 | +@calendar-range-edge-color: @white; | |
178 | +@calendar-range-edge-background-color: @red; | |
179 | +@calendar-range-middle-color: @red; | |
180 | +@calendar-range-middle-background-opacity: 0.1; | |
181 | +@calendar-selected-day-size: 54px; | |
182 | +@calendar-selected-day-color: @white; | |
183 | +@calendar-info-font-size: @font-size-xs; | |
184 | +@calendar-info-line-height: @line-height-xs; | |
185 | +@calendar-selected-day-background-color: @red; | |
186 | +@calendar-day-disabled-color: @gray-5; | |
187 | +@calendar-confirm-button-height: 36px; | |
188 | +@calendar-confirm-button-margin: 7px 0; | |
189 | + | |
190 | +// Card | |
191 | +@card-padding: @padding-xs @padding-md; | |
192 | +@card-font-size: @font-size-sm; | |
193 | +@card-text-color: @text-color; | |
194 | +@card-background-color: @background-color-light; | |
195 | +@card-thumb-size: 88px; | |
196 | +@card-thumb-border-radius: @border-radius-lg; | |
197 | +@card-title-line-height: 16px; | |
198 | +@card-desc-color: @gray-7; | |
199 | +@card-desc-line-height: @line-height-md; | |
200 | +@card-price-color: @gray-8; | |
201 | +@card-origin-price-color: @gray-6; | |
202 | +@card-num-color: @gray-6; | |
203 | +@card-origin-price-font-size: @font-size-xs; | |
204 | +@card-price-font-size: @font-size-sm; | |
205 | +@card-price-integer-font-size: @font-size-lg; | |
206 | +@card-price-font-family: @price-integer-font-family; | |
207 | + | |
208 | +// Cascader | |
209 | +@cascader-header-height: 48px; | |
210 | +@cascader-title-font-size: @font-size-lg; | |
211 | +@cascader-title-line-height: 20px; | |
212 | +@cascader-close-icon-size: 22px; | |
213 | +@cascader-close-icon-color: @gray-5; | |
214 | +@cascader-close-icon-active-color: @gray-6; | |
215 | +@cascader-selected-icon-size: 18px; | |
216 | +@cascader-tabs-height: 48px; | |
217 | +@cascader-active-color: @red; | |
218 | +@cascader-options-height: 384px; | |
219 | +@cascader-tab-color: @text-color; | |
220 | +@cascader-unselected-tab-color: @gray-6; | |
221 | + | |
222 | +// Cell | |
223 | +@cell-font-size: @font-size-md; | |
224 | +@cell-line-height: 24px; | |
225 | +@cell-vertical-padding: 10px; | |
226 | +@cell-horizontal-padding: @padding-md; | |
227 | +@cell-text-color: @text-color; | |
228 | +@cell-background-color: @white; | |
229 | +@cell-border-color: @border-color; | |
230 | +@cell-active-color: @active-color; | |
231 | +@cell-required-color: @red; | |
232 | +@cell-label-color: @gray-6; | |
233 | +@cell-label-font-size: @font-size-sm; | |
234 | +@cell-label-line-height: @line-height-sm; | |
235 | +@cell-label-margin-top: @padding-base; | |
236 | +@cell-value-color: @gray-6; | |
237 | +@cell-icon-size: 16px; | |
238 | +@cell-right-icon-color: @gray-6; | |
239 | +@cell-large-vertical-padding: @padding-sm; | |
240 | +@cell-large-title-font-size: @font-size-lg; | |
241 | +@cell-large-label-font-size: @font-size-md; | |
242 | + | |
243 | +// CellGroup | |
244 | +@cell-group-background-color: @white; | |
245 | +@cell-group-title-color: @gray-6; | |
246 | +@cell-group-title-padding: @padding-md @padding-md @padding-xs; | |
247 | +@cell-group-title-font-size: @font-size-md; | |
248 | +@cell-group-title-line-height: 16px; | |
249 | +@cell-group-inset-padding: 0 @padding-md; | |
250 | +@cell-group-inset-border-radius: @border-radius-lg; | |
251 | +@cell-group-inset-title-padding: @padding-md @padding-md @padding-xs @padding-xl; | |
252 | + | |
253 | +// Checkbox | |
254 | +@checkbox-size: 20px; | |
255 | +@checkbox-border-color: @gray-5; | |
256 | +@checkbox-transition-duration: @animation-duration-fast; | |
257 | +@checkbox-label-margin: @padding-xs; | |
258 | +@checkbox-label-color: @text-color; | |
259 | +@checkbox-checked-icon-color: @blue; | |
260 | +@checkbox-disabled-icon-color: @gray-5; | |
261 | +@checkbox-disabled-label-color: @gray-5; | |
262 | +@checkbox-disabled-background-color: @border-color; | |
263 | + | |
264 | +// Circle | |
265 | +@circle-size: 100px; | |
266 | +@circle-color: @blue; | |
267 | +@circle-layer-color: @white; | |
268 | +@circle-text-color: @text-color; | |
269 | +@circle-text-font-weight: @font-weight-bold; | |
270 | +@circle-text-font-size: @font-size-md; | |
271 | +@circle-text-line-height: @line-height-md; | |
272 | + | |
273 | +// Collapse | |
274 | +@collapse-item-transition-duration: @animation-duration-base; | |
275 | +@collapse-item-content-padding: @padding-sm @padding-md; | |
276 | +@collapse-item-content-font-size: @font-size-md; | |
277 | +@collapse-item-content-line-height: 1.5; | |
278 | +@collapse-item-content-text-color: @gray-6; | |
279 | +@collapse-item-content-background-color: @white; | |
280 | +@collapse-item-title-disabled-color: @gray-5; | |
281 | + | |
282 | +// ContactCard | |
283 | +@contact-card-padding: @padding-md; | |
284 | +@contact-card-add-icon-size: 40px; | |
285 | +@contact-card-add-icon-color: @blue; | |
286 | +@contact-card-value-line-height: @line-height-md; | |
287 | + | |
288 | +// ContactEdit | |
289 | +@contact-edit-padding: @padding-md; | |
290 | +@contact-edit-fields-radius: @border-radius-md; | |
291 | +@contact-edit-buttons-padding: @padding-xl 0; | |
292 | +@contact-edit-button-margin-bottom: @padding-sm; | |
293 | +@contact-edit-button-font-size: 16px; | |
294 | +@contact-edit-field-label-width: 4.1em; | |
295 | + | |
296 | +// ContactList | |
297 | +@contact-list-edit-icon-size: 16px; | |
298 | +@contact-list-add-button-z-index: 999; | |
299 | +@contact-list-item-padding: @padding-md; | |
300 | + | |
301 | +// CountDown | |
302 | +@count-down-text-color: @text-color; | |
303 | +@count-down-font-size: @font-size-md; | |
304 | +@count-down-line-height: @line-height-md; | |
305 | + | |
306 | +// Coupon | |
307 | +@coupon-margin: 0 @padding-sm @padding-sm; | |
308 | +@coupon-content-height: 84px; | |
309 | +@coupon-content-padding: 14px 0; | |
310 | +@coupon-background-color: @white; | |
311 | +@coupon-active-background-color: @active-color; | |
312 | +@coupon-border-radius: @border-radius-lg; | |
313 | +@coupon-box-shadow: 0 0 4px rgba(0, 0, 0, 0.1); | |
314 | +@coupon-head-width: 96px; | |
315 | +@coupon-amount-color: @red; | |
316 | +@coupon-amount-font-size: 30px; | |
317 | +@coupon-currency-font-size: 40%; | |
318 | +@coupon-name-font-size: @font-size-md; | |
319 | +@coupon-disabled-text-color: @gray-6; | |
320 | +@coupon-description-padding: @padding-xs @padding-md; | |
321 | +@coupon-description-border-color: @border-color; | |
322 | + | |
323 | +// CouponCell | |
324 | +@coupon-cell-selected-text-color: @text-color; | |
325 | + | |
326 | +// CouponList | |
327 | +@coupon-list-background-color: @background-color; | |
328 | +@coupon-list-field-padding: 5px 0 5px @padding-md; | |
329 | +@coupon-list-exchange-button-height: 32px; | |
330 | +@coupon-list-close-button-height: 40px; | |
331 | +@coupon-list-empty-image-size: 200px; | |
332 | +@coupon-list-empty-tip-color: @gray-6; | |
333 | +@coupon-list-empty-tip-font-size: @font-size-md; | |
334 | +@coupon-list-empty-tip-line-height: @line-height-md; | |
335 | + | |
336 | +// Dialog | |
337 | +@dialog-width: 320px; | |
338 | +@dialog-small-screen-width: 90%; | |
339 | +@dialog-font-size: @font-size-lg; | |
340 | +@dialog-transition: @animation-duration-base; | |
341 | +@dialog-border-radius: 16px; | |
342 | +@dialog-background-color: @white; | |
343 | +@dialog-header-font-weight: @font-weight-bold; | |
344 | +@dialog-header-line-height: 24px; | |
345 | +@dialog-header-padding-top: 26px; | |
346 | +@dialog-header-isolated-padding: @padding-lg 0; | |
347 | +@dialog-message-padding: @padding-lg; | |
348 | +@dialog-message-font-size: @font-size-md; | |
349 | +@dialog-message-line-height: @line-height-md; | |
350 | +@dialog-message-max-height: 60vh; | |
351 | +@dialog-has-title-message-text-color: @gray-7; | |
352 | +@dialog-has-title-message-padding-top: @padding-xs; | |
353 | +@dialog-button-height: 48px; | |
354 | +@dialog-round-button-height: 36px; | |
355 | +@dialog-confirm-button-text-color: @red; | |
356 | + | |
357 | +// Divider | |
358 | +@divider-margin: @padding-md 0; | |
359 | +@divider-text-color: @gray-6; | |
360 | +@divider-font-size: @font-size-md; | |
361 | +@divider-line-height: 24px; | |
362 | +@divider-border-color: @border-color; | |
363 | +@divider-content-padding: @padding-md; | |
364 | +@divider-content-left-width: 10%; | |
365 | +@divider-content-right-width: 10%; | |
366 | + | |
367 | +// DropdownMenu | |
368 | +@dropdown-menu-height: 48px; | |
369 | +@dropdown-menu-background-color: @white; | |
370 | +@dropdown-menu-box-shadow: 0 2px 12px fade(@gray-7, 12); | |
371 | +@dropdown-menu-title-font-size: 15px; | |
372 | +@dropdown-menu-title-text-color: @text-color; | |
373 | +@dropdown-menu-title-active-text-color: @red; | |
374 | +@dropdown-menu-title-disabled-text-color: @gray-6; | |
375 | +@dropdown-menu-title-padding: 0 @padding-xs; | |
376 | +@dropdown-menu-title-line-height: @line-height-lg; | |
377 | +@dropdown-menu-option-active-color: @red; | |
378 | +@dropdown-menu-content-max-height: 80%; | |
379 | +@dropdown-item-z-index: 10; | |
380 | + | |
381 | +// Empty | |
382 | +@empty-padding: @padding-xl 0; | |
383 | +@empty-image-size: 160px; | |
384 | +@empty-description-margin-top: @padding-md; | |
385 | +@empty-description-padding: 0 60px; | |
386 | +@empty-description-color: @gray-6; | |
387 | +@empty-description-font-size: @font-size-md; | |
388 | +@empty-description-line-height: @line-height-md; | |
389 | +@empty-bottom-margin-top: 24px; | |
390 | + | |
391 | +// Field | |
392 | +@field-label-width: 6.2em; | |
393 | +@field-label-color: @gray-7; | |
394 | +@field-label-margin-right: @padding-sm; | |
395 | +@field-input-text-color: @text-color; | |
396 | +@field-input-error-text-color: @red; | |
397 | +@field-input-disabled-text-color: @gray-5; | |
398 | +@field-placeholder-text-color: @gray-5; | |
399 | +@field-icon-size: 16px; | |
400 | +@field-clear-icon-size: 16px; | |
401 | +@field-clear-icon-color: @gray-5; | |
402 | +@field-right-icon-color: @gray-6; | |
403 | +@field-error-message-color: @red; | |
404 | +@field-error-message-font-size: 12px; | |
405 | +@field-text-area-min-height: 60px; | |
406 | +@field-word-limit-color: @gray-7; | |
407 | +@field-word-limit-font-size: @font-size-sm; | |
408 | +@field-word-limit-line-height: 16px; | |
409 | +@field-disabled-text-color: @gray-5; | |
410 | + | |
411 | +// GridItem | |
412 | +@grid-item-content-padding: @padding-md @padding-xs; | |
413 | +@grid-item-content-background-color: @white; | |
414 | +@grid-item-content-active-color: @active-color; | |
415 | +@grid-item-icon-size: 28px; | |
416 | +@grid-item-text-color: @gray-7; | |
417 | +@grid-item-text-font-size: @font-size-sm; | |
418 | + | |
419 | +// GoodsAction | |
420 | +@goods-action-background-color: @white; | |
421 | +@goods-action-height: 50px; | |
422 | +@goods-action-icon-width: 48px; | |
423 | +@goods-action-icon-height: 100%; | |
424 | +@goods-action-icon-color: @text-color; | |
425 | +@goods-action-icon-size: 18px; | |
426 | +@goods-action-icon-font-size: @font-size-xs; | |
427 | +@goods-action-icon-active-color: @active-color; | |
428 | +@goods-action-icon-text-color: @gray-7; | |
429 | +@goods-action-button-height: 40px; | |
430 | +@goods-action-button-warning-color: @gradient-orange; | |
431 | +@goods-action-button-danger-color: @gradient-red; | |
432 | + | |
433 | +// IndexAnchor | |
434 | +@index-anchor-z-index: 1; | |
435 | +@index-anchor-padding: 0 @padding-md; | |
436 | +@index-anchor-text-color: @text-color; | |
437 | +@index-anchor-font-weight: @font-weight-bold; | |
438 | +@index-anchor-font-size: @font-size-md; | |
439 | +@index-anchor-line-height: 32px; | |
440 | +@index-anchor-background-color: transparent; | |
441 | +@index-anchor-sticky-text-color: @red; | |
442 | +@index-anchor-sticky-background-color: @white; | |
443 | + | |
444 | +// IndexBar | |
445 | +@index-bar-sidebar-z-index: 2; | |
446 | +@index-bar-index-font-size: @font-size-xs; | |
447 | +@index-bar-index-line-height: @line-height-xs; | |
448 | +@index-bar-index-active-color: @red; | |
449 | + | |
450 | +// Info | |
451 | +@info-size: 16px; | |
452 | +@info-color: @white; | |
453 | +@info-padding: 0 3px; | |
454 | +@info-font-size: @font-size-sm; | |
455 | +@info-font-weight: @font-weight-bold; | |
456 | +@info-border-width: @border-width-base; | |
457 | +@info-background-color: @red; | |
458 | +@info-dot-color: @red; | |
459 | +@info-dot-size: 8px; | |
460 | +@info-font-family: -apple-system-font, Helvetica Neue, Arial, sans-serif; | |
461 | + | |
462 | +// Image | |
463 | +@image-placeholder-text-color: @gray-6; | |
464 | +@image-placeholder-font-size: @font-size-md; | |
465 | +@image-placeholder-background-color: @background-color; | |
466 | +@image-loading-icon-size: 32px; | |
467 | +@image-loading-icon-color: @gray-4; | |
468 | +@image-error-icon-size: 32px; | |
469 | +@image-error-icon-color: @gray-4; | |
470 | + | |
471 | +// ImagePreview | |
472 | +@image-preview-index-text-color: @white; | |
473 | +@image-preview-index-font-size: @font-size-md; | |
474 | +@image-preview-index-line-height: @line-height-md; | |
475 | +@image-preview-index-text-shadow: 0 1px 1px @gray-8; | |
476 | +@image-preview-overlay-background-color: rgba(0, 0, 0, 0.9); | |
477 | +@image-preview-close-icon-size: 22px; | |
478 | +@image-preview-close-icon-color: @gray-5; | |
479 | +@image-preview-close-icon-active-color: @gray-6; | |
480 | +@image-preview-close-icon-margin: @padding-md; | |
481 | +@image-preview-close-icon-z-index: 1; | |
482 | + | |
483 | +// List | |
484 | +@list-text-color: @gray-6; | |
485 | +@list-text-font-size: @font-size-md; | |
486 | +@list-text-line-height: 50px; | |
487 | + | |
488 | +// Loading | |
489 | +@loading-text-color: @gray-6; | |
490 | +@loading-text-font-size: @font-size-md; | |
491 | +@loading-spinner-color: @gray-5; | |
492 | +@loading-spinner-size: 30px; | |
493 | +@loading-spinner-animation-duration: 0.8s; | |
494 | + | |
495 | +// NavBar | |
496 | +@nav-bar-height: 46px; | |
497 | +@nav-bar-background-color: @white; | |
498 | +@nav-bar-arrow-size: 16px; | |
499 | +@nav-bar-icon-color: @blue; | |
500 | +@nav-bar-text-color: @blue; | |
501 | +@nav-bar-title-font-size: @font-size-lg; | |
502 | +@nav-bar-title-text-color: @text-color; | |
503 | +@nav-bar-z-index: 1; | |
504 | + | |
505 | +// NoticeBar | |
506 | +@notice-bar-height: 40px; | |
507 | +@notice-bar-padding: 0 @padding-md; | |
508 | +@notice-bar-wrapable-padding: @padding-xs @padding-md; | |
509 | +@notice-bar-text-color: @orange-dark; | |
510 | +@notice-bar-font-size: @font-size-md; | |
511 | +@notice-bar-line-height: 24px; | |
512 | +@notice-bar-background-color: @orange-light; | |
513 | +@notice-bar-icon-size: 16px; | |
514 | +@notice-bar-icon-min-width: 24px; | |
515 | + | |
516 | +// Notify | |
517 | +@notify-text-color: @white; | |
518 | +@notify-padding: @padding-xs @padding-md; | |
519 | +@notify-font-size: @font-size-md; | |
520 | +@notify-line-height: @line-height-md; | |
521 | +@notify-primary-background-color: @blue; | |
522 | +@notify-success-background-color: @green; | |
523 | +@notify-danger-background-color: @red; | |
524 | +@notify-warning-background-color: @orange; | |
525 | + | |
526 | +// NumberKeyboard | |
527 | +@number-keyboard-background-color: @gray-2; | |
528 | +@number-keyboard-key-height: 48px; | |
529 | +@number-keyboard-key-font-size: 28px; | |
530 | +@number-keyboard-key-active-color: @gray-3; | |
531 | +@number-keyboard-delete-font-size: @font-size-lg; | |
532 | +@number-keyboard-title-color: @gray-7; | |
533 | +@number-keyboard-title-height: 34px; | |
534 | +@number-keyboard-title-font-size: @font-size-lg; | |
535 | +@number-keyboard-close-padding: 0 @padding-md; | |
536 | +@number-keyboard-close-color: @text-link-color; | |
537 | +@number-keyboard-close-font-size: @font-size-md; | |
538 | +@number-keyboard-button-text-color: @white; | |
539 | +@number-keyboard-button-background-color: @blue; | |
540 | +@number-keyboard-cursor-color: @text-color; | |
541 | +@number-keyboard-cursor-width: 1px; | |
542 | +@number-keyboard-cursor-height: 40%; | |
543 | +@number-keyboard-cursor-animation-duration: 1s; | |
544 | +@number-keyboard-z-index: 100; | |
545 | + | |
546 | +// Overlay | |
547 | +@overlay-z-index: 1; | |
548 | +@overlay-background-color: rgba(0, 0, 0, 0.7); | |
549 | + | |
550 | +// Pagination | |
551 | +@pagination-height: 40px; | |
552 | +@pagination-font-size: @font-size-md; | |
553 | +@pagination-item-width: 36px; | |
554 | +@pagination-item-default-color: @blue; | |
555 | +@pagination-item-disabled-color: @gray-7; | |
556 | +@pagination-item-disabled-background-color: @background-color; | |
557 | +@pagination-background-color: @white; | |
558 | +@pagination-desc-color: @gray-7; | |
559 | +@pagination-disabled-opacity: @disabled-opacity; | |
560 | + | |
561 | +// Panel | |
562 | +@panel-background-color: @white; | |
563 | +@panel-header-value-color: @red; | |
564 | +@panel-footer-padding: @padding-xs @padding-md; | |
565 | + | |
566 | +// PasswordInput | |
567 | +@password-input-height: 50px; | |
568 | +@password-input-margin: 0 @padding-md; | |
569 | +@password-input-font-size: 20px; | |
570 | +@password-input-border-radius: 6px; | |
571 | +@password-input-background-color: @white; | |
572 | +@password-input-info-color: @gray-6; | |
573 | +@password-input-info-font-size: @font-size-md; | |
574 | +@password-input-error-info-color: @red; | |
575 | +@password-input-dot-size: 10px; | |
576 | +@password-input-dot-color: @black; | |
577 | + | |
578 | +// Picker | |
579 | +@picker-background-color: @white; | |
580 | +@picker-toolbar-height: 44px; | |
581 | +@picker-title-font-size: @font-size-lg; | |
582 | +@picker-title-line-height: @line-height-md; | |
583 | +@picker-action-padding: 0 @padding-md; | |
584 | +@picker-action-font-size: @font-size-md; | |
585 | +@picker-confirm-action-color: @text-link-color; | |
586 | +@picker-cancel-action-color: @gray-6; | |
587 | +@picker-option-font-size: @font-size-lg; | |
588 | +@picker-option-text-color: @black; | |
589 | +@picker-option-disabled-opacity: 0.3; | |
590 | +@picker-loading-icon-color: @blue; | |
591 | +@picker-loading-mask-color: rgba(255, 255, 255, 0.9); | |
592 | + | |
593 | +// Popover | |
594 | +@popover-arrow-size: 6px; | |
595 | +@popover-border-radius: @border-radius-lg; | |
596 | +@popover-action-width: 128px; | |
597 | +@popover-action-height: 44px; | |
598 | +@popover-action-font-size: @font-size-md; | |
599 | +@popover-action-line-height: @line-height-md; | |
600 | +@popover-action-icon-size: 20px; | |
601 | +@popover-light-text-color: @text-color; | |
602 | +@popover-light-background-color: @white; | |
603 | +@popover-light-action-disabled-text-color: @gray-5; | |
604 | +@popover-dark-text-color: @white; | |
605 | +@popover-dark-background-color: #4a4a4a; | |
606 | +@popover-dark-action-disabled-text-color: @gray-6; | |
607 | + | |
608 | +// Popup | |
609 | +@popup-background-color: @white; | |
610 | +@popup-transition: transform @animation-duration-base; | |
611 | +@popup-round-border-radius: 16px; | |
612 | +@popup-close-icon-size: 22px; | |
613 | +@popup-close-icon-color: @gray-5; | |
614 | +@popup-close-icon-active-color: @gray-6; | |
615 | +@popup-close-icon-margin: 16px; | |
616 | +@popup-close-icon-z-index: 1; | |
617 | + | |
618 | +// Progress | |
619 | +@progress-height: 4px; | |
620 | +@progress-color: @blue; | |
621 | +@progress-background-color: @gray-3; | |
622 | +@progress-pivot-padding: 0 5px; | |
623 | +@progress-pivot-text-color: @white; | |
624 | +@progress-pivot-font-size: @font-size-xs; | |
625 | +@progress-pivot-line-height: 1.6; | |
626 | +@progress-pivot-background-color: @blue; | |
627 | + | |
628 | +// PullRefresh | |
629 | +@pull-refresh-head-height: 50px; | |
630 | +@pull-refresh-head-font-size: @font-size-md; | |
631 | +@pull-refresh-head-text-color: @gray-6; | |
632 | + | |
633 | +// Radio | |
634 | +@radio-size: 20px; | |
635 | +@radio-border-color: @gray-5; | |
636 | +@radio-transition-duration: @animation-duration-fast; | |
637 | +@radio-label-margin: @padding-xs; | |
638 | +@radio-label-color: @text-color; | |
639 | +@radio-checked-icon-color: @blue; | |
640 | +@radio-disabled-icon-color: @gray-5; | |
641 | +@radio-disabled-label-color: @gray-5; | |
642 | +@radio-disabled-background-color: @border-color; | |
643 | + | |
644 | +// Rate | |
645 | +@rate-icon-size: 20px; | |
646 | +@rate-icon-gutter: @padding-base; | |
647 | +@rate-icon-void-color: @gray-5; | |
648 | +@rate-icon-full-color: @red; | |
649 | +@rate-icon-disabled-color: @gray-5; | |
650 | + | |
651 | +// ShareSheet | |
652 | +@share-sheet-header-padding: @padding-sm @padding-md @padding-base; | |
653 | +@share-sheet-title-color: @text-color; | |
654 | +@share-sheet-title-font-size: @font-size-md; | |
655 | +@share-sheet-title-line-height: @line-height-md; | |
656 | +@share-sheet-description-color: @gray-6; | |
657 | +@share-sheet-description-font-size: @font-size-sm; | |
658 | +@share-sheet-description-line-height: 16px; | |
659 | +@share-sheet-icon-size: 48px; | |
660 | +@share-sheet-option-name-color: @gray-7; | |
661 | +@share-sheet-option-name-font-size: @font-size-sm; | |
662 | +@share-sheet-option-description-color: @gray-5; | |
663 | +@share-sheet-option-description-font-size: @font-size-sm; | |
664 | +@share-sheet-cancel-button-font-size: @font-size-lg; | |
665 | +@share-sheet-cancel-button-height: 48px; | |
666 | +@share-sheet-cancel-button-background: @white; | |
667 | + | |
668 | +// Search | |
669 | +@search-padding: 10px @padding-sm; | |
670 | +@search-background-color: @white; | |
671 | +@search-content-background-color: @gray-1; | |
672 | +@search-input-height: 34px; | |
673 | +@search-label-padding: 0 5px; | |
674 | +@search-label-color: @text-color; | |
675 | +@search-label-font-size: @font-size-md; | |
676 | +@search-left-icon-color: @gray-6; | |
677 | +@search-action-padding: 0 @padding-xs; | |
678 | +@search-action-text-color: @text-color; | |
679 | +@search-action-font-size: @font-size-md; | |
680 | + | |
681 | +// Sidebar | |
682 | +@sidebar-width: 80px; | |
683 | +@sidebar-font-size: @font-size-md; | |
684 | +@sidebar-line-height: @line-height-md; | |
685 | +@sidebar-text-color: @text-color; | |
686 | +@sidebar-disabled-text-color: @gray-5; | |
687 | +@sidebar-padding: 20px @padding-sm; | |
688 | +@sidebar-active-color: @active-color; | |
689 | +@sidebar-background-color: @background-color; | |
690 | +@sidebar-selected-font-weight: @font-weight-bold; | |
691 | +@sidebar-selected-text-color: @text-color; | |
692 | +@sidebar-selected-border-width: 4px; | |
693 | +@sidebar-selected-border-height: 16px; | |
694 | +@sidebar-selected-border-color: @red; | |
695 | +@sidebar-selected-background-color: @white; | |
696 | + | |
697 | +// Skeleton | |
698 | +@skeleton-row-height: 16px; | |
699 | +@skeleton-row-background-color: @active-color; | |
700 | +@skeleton-row-margin-top: @padding-sm; | |
701 | +@skeleton-title-width: 40%; | |
702 | +@skeleton-avatar-size: 32px; | |
703 | +@skeleton-avatar-background-color: @active-color; | |
704 | +@skeleton-animation-duration: 1.2s; | |
705 | + | |
706 | +// Slider | |
707 | +@slider-active-background-color: @blue; | |
708 | +@slider-inactive-background-color: @gray-3; | |
709 | +@slider-disabled-opacity: @disabled-opacity; | |
710 | +@slider-bar-height: 2px; | |
711 | +@slider-button-width: 24px; | |
712 | +@slider-button-height: 24px; | |
713 | +@slider-button-border-radius: 50%; | |
714 | +@slider-button-background-color: @white; | |
715 | +@slider-button-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); | |
716 | + | |
717 | +// Step | |
718 | +@step-text-color: @gray-6; | |
719 | +@step-active-color: @green; | |
720 | +@step-process-text-color: @text-color; | |
721 | +@step-font-size: @font-size-md; | |
722 | +@step-line-color: @border-color; | |
723 | +@step-finish-line-color: @green; | |
724 | +@step-finish-text-color: @text-color; | |
725 | +@step-icon-size: 12px; | |
726 | +@step-circle-size: 5px; | |
727 | +@step-circle-color: @gray-6; | |
728 | +@step-horizontal-title-font-size: @font-size-sm; | |
729 | + | |
730 | +// Steps | |
731 | +@steps-background-color: @white; | |
732 | + | |
733 | +// Sticky | |
734 | +@sticky-z-index: 99; | |
735 | + | |
736 | +// Stepper | |
737 | +@stepper-active-color: #e8e8e8; | |
738 | +@stepper-background-color: @active-color; | |
739 | +@stepper-button-icon-color: @text-color; | |
740 | +@stepper-button-disabled-color: @background-color; | |
741 | +@stepper-button-disabled-icon-color: @gray-5; | |
742 | +@stepper-button-round-theme-color: @blue; | |
743 | +@stepper-input-width: 32px; | |
744 | +@stepper-input-height: 28px; | |
745 | +@stepper-input-font-size: @font-size-md; | |
746 | +@stepper-input-line-height: normal; | |
747 | +@stepper-input-text-color: @text-color; | |
748 | +@stepper-input-disabled-text-color: @gray-5; | |
749 | +@stepper-input-disabled-background-color: @active-color; | |
750 | +@stepper-border-radius: @border-radius-md; | |
751 | + | |
752 | +// SubmitBar | |
753 | +@submit-bar-height: 50px; | |
754 | +@submit-bar-z-index: 100; | |
755 | +@submit-bar-background-color: @white; | |
756 | +@submit-bar-button-width: 110px; | |
757 | +@submit-bar-price-color: @red; | |
758 | +@submit-bar-price-font-size: @font-size-md; | |
759 | +@submit-bar-currency-font-size: @font-size-md; | |
760 | +@submit-bar-text-color: @text-color; | |
761 | +@submit-bar-text-font-size: @font-size-md; | |
762 | +@submit-bar-tip-padding: @padding-xs @padding-sm; | |
763 | +@submit-bar-tip-font-size: @font-size-sm; | |
764 | +@submit-bar-tip-line-height: 1.5; | |
765 | +@submit-bar-tip-color: #f56723; | |
766 | +@submit-bar-tip-background-color: #fff7cc; | |
767 | +@submit-bar-tip-icon-size: 12px; | |
768 | +@submit-bar-button-height: 40px; | |
769 | +@submit-bar-padding: 0 @padding-md; | |
770 | +@submit-bar-price-integer-font-size: 20px; | |
771 | +@submit-bar-price-font-family: @price-integer-font-family; | |
772 | + | |
773 | +// Swipe | |
774 | +@swipe-indicator-size: 6px; | |
775 | +@swipe-indicator-margin: @padding-sm; | |
776 | +@swipe-indicator-active-opacity: 1; | |
777 | +@swipe-indicator-inactive-opacity: 0.3; | |
778 | +@swipe-indicator-active-background-color: @blue; | |
779 | +@swipe-indicator-inactive-background-color: @border-color; | |
780 | + | |
781 | +// Switch | |
782 | +@switch-size: 30px; | |
783 | +@switch-width: 2em; | |
784 | +@switch-height: 1em; | |
785 | +@switch-node-size: 1em; | |
786 | +@switch-node-background-color: @white; | |
787 | +@switch-node-box-shadow: 0 3px 1px 0 rgba(0, 0, 0, 0.05), | |
788 | +0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 3px 3px 0 rgba(0, 0, 0, 0.05); | |
789 | +@switch-background-color: @white; | |
790 | +@switch-on-background-color: @blue; | |
791 | +@switch-transition-duration: @animation-duration-base; | |
792 | +@switch-disabled-opacity: @disabled-opacity; | |
793 | +@switch-border: @border-width-base solid rgba(0, 0, 0, 0.1); | |
794 | + | |
795 | +// SwitchCell | |
796 | +@switch-cell-padding-top: @cell-vertical-padding - 1px; | |
797 | +@switch-cell-padding-bottom: @cell-vertical-padding - 1px; | |
798 | +@switch-cell-large-padding-top: @cell-large-vertical-padding - 1px; | |
799 | +@switch-cell-large-padding-bottom: @cell-large-vertical-padding - 1px; | |
800 | + | |
801 | +// Tabbar | |
802 | +@tabbar-height: 50px; | |
803 | +@tabbar-z-index: 1; | |
804 | +@tabbar-background-color: @white; | |
805 | + | |
806 | +// TabbarItem | |
807 | +@tabbar-item-font-size: @font-size-sm; | |
808 | +@tabbar-item-text-color: @gray-7; | |
809 | +@tabbar-item-active-color: @blue; | |
810 | +@tabbar-item-active-background-color: @tabbar-background-color; | |
811 | +@tabbar-item-line-height: 1; | |
812 | +@tabbar-item-icon-size: 22px; | |
813 | +@tabbar-item-margin-bottom: 4px; | |
814 | + | |
815 | +// Tab | |
816 | +@tab-text-color: @gray-7; | |
817 | +@tab-active-text-color: @text-color; | |
818 | +@tab-disabled-text-color: @gray-5; | |
819 | +@tab-font-size: @font-size-md; | |
820 | +@tab-line-height: @line-height-md; | |
821 | + | |
822 | +// Tabs | |
823 | +@tabs-default-color: @red; | |
824 | +@tabs-line-height: 44px; | |
825 | +@tabs-card-height: 30px; | |
826 | +@tabs-nav-background-color: @white; | |
827 | +@tabs-bottom-bar-width: 40px; | |
828 | +@tabs-bottom-bar-height: 3px; | |
829 | +@tabs-bottom-bar-color: @tabs-default-color; | |
830 | + | |
831 | +// Tag | |
832 | +@tag-padding: 0 @padding-base; | |
833 | +@tag-text-color: @white; | |
834 | +@tag-font-size: @font-size-sm; | |
835 | +@tag-border-radius: 2px; | |
836 | +@tag-line-height: 16px; | |
837 | +@tag-medium-padding: 2px 6px; | |
838 | +@tag-large-padding: @padding-base @padding-xs; | |
839 | +@tag-large-border-radius: @border-radius-md; | |
840 | +@tag-large-font-size: @font-size-md; | |
841 | +@tag-round-border-radius: @border-radius-max; | |
842 | +@tag-danger-color: @red; | |
843 | +@tag-primary-color: @blue; | |
844 | +@tag-success-color: @green; | |
845 | +@tag-warning-color: @orange; | |
846 | +@tag-default-color: @gray-6; | |
847 | +@tag-plain-background-color: @white; | |
848 | + | |
849 | +// Toast | |
850 | +@toast-max-width: 70%; | |
851 | +@toast-font-size: @font-size-md; | |
852 | +@toast-text-color: @white; | |
853 | +@toast-loading-icon-color: @white; | |
854 | +@toast-line-height: @line-height-md; | |
855 | +@toast-border-radius: @border-radius-lg; | |
856 | +@toast-background-color: fade(@black, 70%); | |
857 | +@toast-icon-size: 36px; | |
858 | +@toast-text-min-width: 96px; | |
859 | +@toast-text-padding: @padding-xs @padding-sm; | |
860 | +@toast-default-padding: @padding-md; | |
861 | +@toast-default-width: 88px; | |
862 | +@toast-default-min-height: 88px; | |
863 | +@toast-position-top-distance: 20%; | |
864 | +@toast-position-bottom-distance: 20%; | |
865 | + | |
866 | +// TreeSelect | |
867 | +@tree-select-font-size: @font-size-md; | |
868 | +@tree-select-nav-background-color: @background-color; | |
869 | +@tree-select-content-background-color: @white; | |
870 | +@tree-select-nav-item-padding: 14px @padding-sm; | |
871 | +@tree-select-item-height: 48px; | |
872 | +@tree-select-item-active-color: @red; | |
873 | +@tree-select-item-disabled-color: @gray-5; | |
874 | +@tree-select-item-selected-size: 16px; | |
875 | + | |
876 | +// Uploader | |
877 | +@uploader-size: 80px; | |
878 | +@uploader-icon-size: 24px; | |
879 | +@uploader-icon-color: @gray-4; | |
880 | +@uploader-text-color: @gray-6; | |
881 | +@uploader-text-font-size: @font-size-sm; | |
882 | +@uploader-upload-background-color: @gray-1; | |
883 | +@uploader-upload-active-color: @active-color; | |
884 | +@uploader-delete-color: @white; | |
885 | +@uploader-delete-icon-size: 14px; | |
886 | +@uploader-delete-background-color: rgba(0, 0, 0, 0.7); | |
887 | +@uploader-file-background-color: @background-color; | |
888 | +@uploader-file-icon-size: 20px; | |
889 | +@uploader-file-icon-color: @gray-7; | |
890 | +@uploader-file-name-padding: 0 @padding-base; | |
891 | +@uploader-file-name-margin-top: @padding-xs; | |
892 | +@uploader-file-name-font-size: @font-size-sm; | |
893 | +@uploader-file-name-text-color: @gray-7; | |
894 | +@uploader-mask-background-color: fade(@gray-8, 88%); | |
895 | +@uploader-mask-icon-size: 22px; | |
896 | +@uploader-mask-message-font-size: @font-size-sm; | |
897 | +@uploader-mask-message-line-height: @line-height-xs; | |
898 | +@uploader-loading-icon-size: 22px; | |
899 | +@uploader-loading-icon-color: @white; | |
900 | +@uploader-disabled-opacity: @disabled-opacity; | |
901 | + | |
902 | +// Sku | |
903 | +@sku-item-background-color: @background-color; | |
904 | +@sku-icon-gray-color: @gray-4; | |
905 | +@sku-upload-mask-color: rgba(50, 50, 51, 0.8); | ... | ... |
src/assets/images/cards/novipcard.png
0 → 100644
21.7 KB
src/assets/images/cards/vipcardbg.png
0 → 100644
16.5 KB
src/assets/images/cards/vipcardbg1.png
0 → 100644
3.98 KB
src/assets/images/myCars/addBtn.png
0 → 100644
577 Bytes
src/assets/images/myCars/addBtnBg.png
0 → 100644
575 Bytes
src/assets/images/myCars/carNumBg.png
0 → 100644
1.01 KB
src/assets/images/myCars/fornt.png
0 → 100644
4.03 KB
src/components/vant-number-plate/vnp-input-box.vue
0 → 100644
1 | +<template> | |
2 | + <div class="vnp-input-box"> | |
3 | + <ul> | |
4 | + <li | |
5 | + v-for="(item, index) in val" | |
6 | + :key="index" | |
7 | + :class="{ active: activeIndex === index }" | |
8 | + @click="handleClickItem(index)" | |
9 | + > | |
10 | + <span>{{ item }}</span> | |
11 | + </li> | |
12 | + </ul> | |
13 | + </div> | |
14 | +</template> | |
15 | + | |
16 | +<script> | |
17 | +export default { | |
18 | + props: { | |
19 | + value: { | |
20 | + type: String, | |
21 | + default: "", | |
22 | + }, | |
23 | + editable: { | |
24 | + type: Boolean, | |
25 | + default: false, | |
26 | + }, | |
27 | + }, | |
28 | + data() { | |
29 | + return { | |
30 | + val: ["", "", "", "", "", "", "", ""], | |
31 | + activeIndex: this.editable ? 0 : undefined, | |
32 | + }; | |
33 | + }, | |
34 | + watch: { | |
35 | + activeIndex() { | |
36 | + this.$emit("activeChange", this.activeIndex); | |
37 | + }, | |
38 | + value: { | |
39 | + immediate: true, | |
40 | + handler() { | |
41 | + if (this.val.join("") === this.value) { | |
42 | + return; | |
43 | + } | |
44 | + const val = this.value.split(""); | |
45 | + if (this.editable) { | |
46 | + this.activeIndex = val.length; | |
47 | + } | |
48 | + while (val.length < 8) { | |
49 | + val.push(""); | |
50 | + } | |
51 | + this.val = val; | |
52 | + }, | |
53 | + }, | |
54 | + val() { | |
55 | + this.$emit("input", this.val.join("")); | |
56 | + }, | |
57 | + }, | |
58 | + methods: { | |
59 | + handleClickItem(index) { | |
60 | + if (!this.editable) { | |
61 | + return; | |
62 | + } | |
63 | + this.activeIndex = index; | |
64 | + }, | |
65 | + setValue(val) { | |
66 | + this.$set(this.val, this.activeIndex, val); | |
67 | + if (this.activeIndex < 7) { | |
68 | + this.activeIndex += 1; | |
69 | + } | |
70 | + }, | |
71 | + del() { | |
72 | + this.$set(this.val, this.activeIndex, ""); | |
73 | + if (this.activeIndex > 0) { | |
74 | + this.activeIndex -= 1; | |
75 | + } | |
76 | + }, | |
77 | + }, | |
78 | +} | |
79 | +</script> | |
80 | + | |
81 | +<style lang="less" scoped> | |
82 | + .vnp-input-box { | |
83 | + padding: 10px 0; | |
84 | + border: 1px solid #d8d8d8; | |
85 | + border-radius: 2px; | |
86 | + color: #8d8d8d; | |
87 | + font-size: 15px; | |
88 | + text-align: center; | |
89 | + | |
90 | + ul { | |
91 | + display: flex; | |
92 | + } | |
93 | + li { | |
94 | + flex: 1; | |
95 | + border-right: 1px solid #eaeaea; | |
96 | + height: 28px; | |
97 | + line-height: 28px; | |
98 | + | |
99 | + &:first-child { | |
100 | + border-color: #a6a6a6; | |
101 | + flex: 1.3; | |
102 | + } | |
103 | + &:last-child { | |
104 | + border: none; | |
105 | + } | |
106 | + &.active { | |
107 | + color: #1989fa; | |
108 | + | |
109 | + > span { | |
110 | + height: 100%; | |
111 | + width: 20px; | |
112 | + display: inline-block; | |
113 | + border-bottom: 1px solid #1989fa; | |
114 | + } | |
115 | + } | |
116 | + } | |
117 | + } | |
118 | +</style> | ... | ... |
src/components/vant-number-plate/vnp-input.vue
0 → 100644
1 | +<template> | |
2 | + <div> | |
3 | + <vnp-input-box | |
4 | + :value="val" | |
5 | + @click.native="show = true" | |
6 | + ></vnp-input-box> | |
7 | + <vnp-keyboard | |
8 | + :show.sync="show" | |
9 | + v-model="val" | |
10 | + ></vnp-keyboard> | |
11 | + </div> | |
12 | +</template> | |
13 | + | |
14 | +<script> | |
15 | +import Box from "./vnp-input-box"; | |
16 | +import Keyboard from "./vnp-keyboard"; | |
17 | + | |
18 | +export default { | |
19 | + props: { | |
20 | + value: { | |
21 | + type: String, | |
22 | + default: "", | |
23 | + }, | |
24 | + }, | |
25 | + components: { | |
26 | + 'vnp-input-box': Box, | |
27 | + 'vnp-keyboard': Keyboard | |
28 | + }, | |
29 | + data() { | |
30 | + return { | |
31 | + show: false, | |
32 | + }; | |
33 | + }, | |
34 | + computed: { | |
35 | + val: { | |
36 | + set(v) { | |
37 | + this.$emit("input", v); | |
38 | + }, | |
39 | + get() { | |
40 | + return this.value; | |
41 | + }, | |
42 | + }, | |
43 | + }, | |
44 | +}; | |
45 | +</script> | ... | ... |
src/components/vant-number-plate/vnp-keyboard.vue
0 → 100644
1 | +<template> | |
2 | + <van-action-sheet v-model="visible" get-container="body"> | |
3 | + <div class="vnp-header"> | |
4 | + <button type="button" class="vnp-btn-finish" @click="finish">完成</button> | |
5 | + </div> | |
6 | + | |
7 | + <div class="vnp-input-box-outer"> | |
8 | + <vnp-input-box ref="inputBox" v-model="val" editable @activeChange="handleActiveChange"></vnp-input-box> | |
9 | + </div> | |
10 | + | |
11 | + <div class="vnp-keys"> | |
12 | + <div class="vnp-keys-row" v-for="(item, index) in list" :key="index"> | |
13 | + <div | |
14 | + class="vnp-btn-key-wrapper" | |
15 | + v-for="(val, index) in item" | |
16 | + :key="index" | |
17 | + :class="{ | |
18 | + 'vnp-del-wrapper': val === 'del', | |
19 | + 'vnp-type-wrapper': val === 'type' | |
20 | + }" | |
21 | + > | |
22 | + <van-button v-if="val === 'type'" class="vnp-btn-key" @click="handleChangeType"> | |
23 | + <span v-if="type === 'cn'">中/<span class="vnp-smaller">英</span></span> | |
24 | + <span v-else><span class="vnp-smaller">中</span>/英</span> | |
25 | + </van-button> | |
26 | + | |
27 | + <van-button v-else-if="val === 'del'" class="vnp-btn-key" @click="handleDel"> | |
28 | + <svg | |
29 | + viewBox="0 0 32 22" | |
30 | + xmlns="http://www.w3.org/2000/svg" | |
31 | + class="vnp-delete-icon" | |
32 | + > | |
33 | + <path | |
34 | + d="M28.016 0A3.991 3.991 0 0132 3.987v14.026c0 2.2-1.787 3.987-3.98 3.987H10.382c-.509 0-.996-.206-1.374-.585L.89 13.09C.33 12.62 0 11.84 0 11.006c0-.86.325-1.62.887-2.08L9.01.585A1.936 1.936 0 0110.383 0zm0 1.947H10.368L2.24 10.28c-.224.226-.312.432-.312.73 0 .287.094.51.312.729l8.128 8.333h17.648a2.041 2.041 0 002.037-2.04V3.987c0-1.127-.915-2.04-2.037-2.04zM23.028 6a.96.96 0 01.678.292.95.95 0 01-.003 1.377l-3.342 3.348 3.326 3.333c.189.188.292.43.292.679 0 .248-.103.49-.292.679a.96.96 0 01-.678.292.959.959 0 01-.677-.292L18.99 12.36l-3.343 3.345a.96.96 0 01-.677.292.96.96 0 01-.678-.292.962.962 0 01-.292-.68c0-.248.104-.49.292-.679l3.342-3.348-3.342-3.348A.963.963 0 0114 6.971c0-.248.104-.49.292-.679A.96.96 0 0114.97 6a.96.96 0 01.677.292l3.358 3.348 3.345-3.348A.96.96 0 0123.028 6z" | |
35 | + fill="currentColor" | |
36 | + ></path> | |
37 | + </svg> | |
38 | + </van-button> | |
39 | + | |
40 | + <van-button v-else class="vnp-btn-key" :class="{'vnp-btn-empty': !val}" @click="handleClickKey(val)"> | |
41 | + {{ val }} | |
42 | + </van-button | |
43 | + > | |
44 | + </div> | |
45 | + </div> | |
46 | + </div> | |
47 | + </van-action-sheet> | |
48 | +</template> | |
49 | + | |
50 | +<script> | |
51 | +import Box from './vnp-input-box' | |
52 | + | |
53 | +export default { | |
54 | + components: { | |
55 | + 'vnp-input-box': Box | |
56 | + }, | |
57 | + props: { | |
58 | + show: { | |
59 | + type: Boolean, | |
60 | + default: false | |
61 | + }, | |
62 | + value: { | |
63 | + type: String, | |
64 | + default: "" | |
65 | + }, | |
66 | + }, | |
67 | + data() { | |
68 | + return { | |
69 | + val: this.value, | |
70 | + type: "cn", | |
71 | + cn: [ | |
72 | + ["京", "津", "沪", "渝", "冀", "豫", "云", "辽", "黑", "湘"], | |
73 | + ["皖", "鲁", "新", "苏", "浙", "赣", "鄂", "桂", "甘", "晋"], | |
74 | + ["蒙", "陕", "吉", "闽", "贵", "粤", "青", "藏", "川", "宁"], | |
75 | + ["type", "琼", "使", "领", "学", "", "", "", "del"] | |
76 | + ], | |
77 | + en: [ | |
78 | + ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], | |
79 | + ["Q", "W", "E", "R", "T", "Y", "U", "O", "P"], | |
80 | + ["A", "S", "D", "F", "G", "H", "J", "K", "L"], | |
81 | + ["type", "Z", "X", "C", "V", "B", "N", "M", "del"] | |
82 | + ], | |
83 | + } | |
84 | + }, | |
85 | + computed: { | |
86 | + visible: { | |
87 | + set(val) { | |
88 | + this.$emit("update:show", val); | |
89 | + }, | |
90 | + get() { | |
91 | + return this.show; | |
92 | + } | |
93 | + }, | |
94 | + list() { | |
95 | + return this.type === "en" ? this.en : this.cn; | |
96 | + } | |
97 | + }, | |
98 | + watch: { | |
99 | + show() { | |
100 | + if (this.show) { | |
101 | + this.val = this.value; | |
102 | + } | |
103 | + } | |
104 | + }, | |
105 | + methods: { | |
106 | + handleChangeType() { | |
107 | + this.type = this.type === "en" ? "cn" : "en"; | |
108 | + }, | |
109 | + handleClickKey(val) { | |
110 | + if (val) { | |
111 | + this.$refs.inputBox.setValue(val); | |
112 | + } | |
113 | + }, | |
114 | + handleActiveChange(activeIndex) { | |
115 | + if (activeIndex === 0) { | |
116 | + this.type = "cn"; | |
117 | + } else { | |
118 | + this.type = "en"; | |
119 | + } | |
120 | + }, | |
121 | + handleDel() { | |
122 | + this.$refs.inputBox.del(); | |
123 | + }, | |
124 | + finish() { | |
125 | + this.$emit("input", this.val); | |
126 | + this.visible = false; | |
127 | + } | |
128 | + } | |
129 | +} | |
130 | +</script> | |
131 | + | |
132 | +<style lang="less" scoped> | |
133 | + .vnp-header { | |
134 | + height: 40px; | |
135 | + padding-top: 6px; | |
136 | + position: relative; | |
137 | + | |
138 | + .vnp-btn-finish { | |
139 | + position: absolute; | |
140 | + right: 0; | |
141 | + height: 100%; | |
142 | + padding: 0 16px; | |
143 | + color: #576b95; | |
144 | + font-size: 14px; | |
145 | + background-color: transparent; | |
146 | + border: none; | |
147 | + cursor: pointer; | |
148 | + } | |
149 | + } | |
150 | + | |
151 | + .vnp-input-box-outer { | |
152 | + width: 82%; | |
153 | + max-width: 600px; | |
154 | + margin: 0 auto; | |
155 | + padding: 10px; | |
156 | + } | |
157 | + | |
158 | + .vnp-keys { | |
159 | + padding: 3px; | |
160 | + background: #f2f3f5; | |
161 | + padding-bottom: 22px; | |
162 | + | |
163 | + .vnp-keys-row { | |
164 | + display: flex; | |
165 | + justify-content: center; | |
166 | + } | |
167 | + .vnp-btn-key-wrapper { | |
168 | + flex: 0 1 calc((100% - 6px * 10) / 10); | |
169 | + padding: 3px; | |
170 | + box-sizing: content-box; | |
171 | + | |
172 | + &.vnp-del-wrapper, | |
173 | + &.vnp-type-wrapper { | |
174 | + flex: 1; | |
175 | + } | |
176 | + &.vnp-type-wrapper { | |
177 | + .vnp-smaller { | |
178 | + color: #999; | |
179 | + font-size: 12px; | |
180 | + } | |
181 | + } | |
182 | + | |
183 | + .vnp-btn-key { | |
184 | + padding: 0; | |
185 | + width: 100%; | |
186 | + border-radius: 4px; | |
187 | + } | |
188 | + .vnp-btn-empty { | |
189 | + background: transparent; | |
190 | + border: none; | |
191 | + } | |
192 | + .vnp-delete-icon { | |
193 | + width: 18px; | |
194 | + vertical-align: middle; | |
195 | + } | |
196 | + } | |
197 | + } | |
198 | +</style>> | ... | ... |
src/main.js
... | ... | @@ -8,17 +8,27 @@ import './assets/css/reset.css' // 引入公共样式 |
8 | 8 | |
9 | 9 | import './assets/iconfont/iconfont.css' |
10 | 10 | |
11 | -import h5Popup from 'vue-h5-popup' // 引入弹窗 | |
12 | -Vue.use(h5Popup) | |
13 | - | |
14 | - | |
15 | -import BaiduMap from 'vue-baidu-map' | |
16 | - | |
17 | -Vue.use(BaiduMap, { | |
18 | - // ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */ | |
19 | - ak: 'cuMSxNl5LOY6sf1M3nDGtG6tGXl5a0Bb' | |
11 | +// 路由守卫 | |
12 | +router.beforeEach((to,from ,next)=>{ | |
13 | + if(to.meta.title) { | |
14 | + document.title=to.meta.title; | |
15 | + }else { | |
16 | + document.title='宣化微信公众号'; | |
17 | + } | |
18 | + next() | |
20 | 19 | }) |
21 | 20 | |
21 | +// import h5Popup from 'vue-h5-popup' // 引入弹窗 | |
22 | +// Vue.use(h5Popup) | |
23 | +// | |
24 | +// | |
25 | +// import BaiduMap from 'vue-baidu-map' | |
26 | +// | |
27 | +// Vue.use(BaiduMap, { | |
28 | +// // ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */ | |
29 | +// ak: 'cuMSxNl5LOY6sf1M3nDGtG6tGXl5a0Bb' | |
30 | +// }) | |
31 | +// | |
22 | 32 | |
23 | 33 | import 'mint-ui/lib/style.css' |
24 | 34 | import { MessageBox } from 'mint-ui' |
... | ... | @@ -32,6 +42,15 @@ import { Field } from 'mint-ui'; |
32 | 42 | |
33 | 43 | Vue.component(Field.name, Field); |
34 | 44 | |
45 | + | |
46 | + | |
47 | + | |
48 | + | |
49 | + | |
50 | + | |
51 | + | |
52 | + | |
53 | + | |
35 | 54 | //全局设置的基本样式 |
36 | 55 | import './assets/css/base.scss' |
37 | 56 | |
... | ... | @@ -45,13 +64,21 @@ Vue.prototype.$moment = moment |
45 | 64 | import utils from './utils/utils' // 工具类 |
46 | 65 | Vue.prototype.$utils = utils |
47 | 66 | // |
48 | -// import Mint from 'mint-ui'; | |
49 | -// import 'mint-ui/lib/style.css' | |
50 | -// Vue.use(Mint); | |
67 | +import Mint from 'mint-ui'; | |
68 | +import 'mint-ui/lib/style.css' | |
69 | +Vue.use(Mint); | |
70 | + | |
71 | + | |
72 | +// 在main.js中 | |
73 | + | |
74 | +import Vant from 'vant'; | |
75 | + | |
76 | +import 'vant/lib/index.css'; | |
77 | +import 'vant/lib/index.less'; | |
78 | + | |
79 | +Vue.use(Vant); | |
51 | 80 | |
52 | 81 | |
53 | -import 'swiper/dist/css/swiper.min.css' // 轮播 | |
54 | -import 'swiper/dist/js/swiper.min' | |
55 | 82 | |
56 | 83 | import vueFilter from './utils/filters' // 公共filter |
57 | 84 | for (let key in vueFilter){ | ... | ... |
src/router/index.js
... | ... | @@ -67,50 +67,99 @@ export default new Router({ |
67 | 67 | |
68 | 68 | |
69 | 69 | |
70 | - // //---------------- 个人页面导航 | |
71 | - // { | |
72 | - // path: '/selfNav', | |
73 | - // name: 'selfNav', | |
74 | - // component: () => import("@/views/mySelf/selfNav.vue") | |
75 | - // }, | |
76 | - // | |
77 | - // // ------------------------建议反馈 | |
78 | - // { | |
79 | - // path: '/suggestionBack', | |
80 | - // name: 'suggestionBack', | |
81 | - // component: () => import("@/views/mySelf/feedback/suggestionBack.vue") | |
82 | - // }, | |
83 | - // | |
84 | - // // ------------------------停车记录 | |
85 | - // { | |
86 | - // path: '/parkNotes', | |
87 | - // name: 'parkNotes', | |
88 | - // component: () => import("@/views/mySelf/parkNotes/parkNotes.vue") | |
89 | - // }, | |
90 | - // | |
91 | - // | |
92 | - // // ------------------------停车记录 | |
93 | - // { | |
94 | - // path: '/binDing', | |
95 | - // name: 'binDing', | |
96 | - // component: () => import("@/views/binding/binDing.vue") | |
97 | - // }, | |
98 | - // | |
99 | - // | |
100 | - // // ------------------------购买会员卡提示 | |
101 | - // { | |
102 | - // path: '/cardPoint', | |
103 | - // name: 'cardPoint', | |
104 | - // component: () => import("@/views/cards/cardPoint.vue") | |
105 | - // }, | |
106 | - // | |
107 | - // | |
108 | - // // ------------------------购买会员卡 | |
109 | - // { | |
110 | - // path: '/buyCard', | |
111 | - // name: 'buyCard', | |
112 | - // component: () => import("@/views/cards/buyCard.vue") | |
113 | - // }, | |
70 | + //---------------- 个人页面导航 | |
71 | + { | |
72 | + path: '/selfNav', | |
73 | + name: 'selfNav', | |
74 | + component: () => import("@/views/mySelf/selfNav.vue"), | |
75 | + meta: {title: "个人中心"} | |
76 | + }, | |
77 | + | |
78 | + // ------------------------建议反馈 | |
79 | + { | |
80 | + path: '/suggestionBack', | |
81 | + name: 'suggestionBack', | |
82 | + component: () => import("@/views/mySelf/feedback/suggestionBack.vue"), | |
83 | + meta: {title: "建议反馈"} | |
84 | + }, | |
85 | + | |
86 | + // ------------------------停车记录 | |
87 | + { | |
88 | + path: '/parkNotes', | |
89 | + name: 'parkNotes', | |
90 | + component: () => import("@/views/mySelf/parkNotes/parkNotes.vue") | |
91 | + }, | |
92 | + | |
93 | + | |
94 | + // ------------------------登录 | |
95 | + { | |
96 | + path: '/binDing', | |
97 | + name: 'binDing', | |
98 | + component: () => import("@/views/binding/binDing.vue"), | |
99 | + meta: {title: "绑定手机号"} | |
100 | + }, | |
101 | + { | |
102 | + path: '/myCars', | |
103 | + name: 'myCars', | |
104 | + component: () => import("@/views//mySelf/myCars/myCars.vue"), | |
105 | + meta: {title: "我的车牌"} | |
106 | + }, | |
107 | + | |
108 | + { | |
109 | + path: '/addCarNum', | |
110 | + name: 'addCarNum', | |
111 | + component: () => import("@/views//mySelf/myCars/addCarNum.vue"), | |
112 | + meta: {title: "添加车牌"} | |
113 | + }, | |
114 | + { | |
115 | + path: '/rzCarNumber', | |
116 | + name: 'rzCarNumber', | |
117 | + component: () => import("@/views//mySelf/myCars/rzCarNumber.vue"), | |
118 | + meta: {title: "认证车牌"} | |
119 | + }, | |
120 | + | |
121 | + | |
122 | + { | |
123 | + path: '/cardList', | |
124 | + name: 'cardList', | |
125 | + component: () => import("@/views//cards/cardList.vue"), | |
126 | + meta: {title: "会员卡列表"} | |
127 | + }, | |
128 | + | |
129 | + | |
130 | + { | |
131 | + path: '/buyCardDetail', | |
132 | + name: 'buyCardDetail', | |
133 | + component: () => import("@/views//cards/buyCardDetail.vue"), | |
134 | + meta: {title: "购买会员卡"} | |
135 | + }, | |
136 | + | |
137 | + { | |
138 | + path: '/buyVipCard', | |
139 | + name: 'buyVipCard', | |
140 | + component: () => import("@/views//cards/buyVipCard.vue"), | |
141 | + meta: {title: "购买会员卡"} | |
142 | + }, | |
143 | + | |
144 | + | |
145 | + | |
146 | + | |
147 | + | |
148 | + // ------------------------购买会员卡提示 | |
149 | + { | |
150 | + path: '/cardPoint', | |
151 | + name: 'cardPoint', | |
152 | + component: () => import("@/views/cards/cardPoint.vue") | |
153 | + }, | |
154 | + | |
155 | + | |
156 | + // ------------------------购买会员卡 | |
157 | + { | |
158 | + path: '/buyCard', | |
159 | + name: 'buyCard', | |
160 | + component: () => import("@/views/cards/buyCard.vue"), | |
161 | + meta: {title: "购买会员卡"} | |
162 | + }, | |
114 | 163 | |
115 | 164 | |
116 | 165 | ... | ... |
src/utils/utils.js
1 | -import md5 from './md5.min.js'; | |
1 | +import md5 from "./md5.min.js"; | |
2 | +var myCommonSalt = function(val) { // 获取盐值 | |
3 | + let len = parseInt(val); | |
4 | + let $chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678"; | |
5 | + let maxPos = $chars.length; | |
6 | + var pwd = ""; | |
7 | + for (var i = 0; i < len; i++) { | |
8 | + pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); | |
9 | + } | |
10 | + console.log(pwd); | |
11 | + return pwd; | |
12 | +}; | |
2 | 13 | export default { |
3 | - myCommonSalt: function (val) { // 获取盐值 | |
4 | - let len = parseInt(val); | |
5 | - let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; | |
6 | - let maxPos = $chars.length; | |
7 | - var pwd = ''; | |
8 | - for (var i = 0; i < len; i++) { | |
9 | - pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); | |
14 | + myCommonSalt, | |
15 | + formatDate: function(secs, type = 0) { //type是可选参数,因为json中时间的格式是year-month-date,不能识别XX年XX月XX日 | |
16 | + var t = new Date(secs); | |
17 | + var year = t.getFullYear(); | |
18 | + var month = t.getMonth() + 1; | |
19 | + if (month < 10) { | |
20 | + month = "0" + month; | |
21 | + } | |
22 | + var date = t.getDate(); | |
23 | + if (date < 10) { | |
24 | + date = "0" + date; | |
25 | + } | |
26 | + var hour = t.getHours(); | |
27 | + if (hour < 10) { | |
28 | + hour = "0" + hour; | |
29 | + } | |
30 | + var minute = t.getMinutes(); | |
31 | + if (minute < 10) { | |
32 | + minute = "0" + minute; | |
33 | + } | |
34 | + var second = t.getSeconds(); | |
35 | + if (second < 10) { | |
36 | + second = "0" + second; | |
37 | + } | |
38 | + if (type == 0) { | |
39 | + return year + "年" + month + "月" + date + "日"; | |
40 | + } else { | |
41 | + return year + "-" + month + "-" + date; | |
10 | 42 | } |
11 | - console.log(pwd); | |
12 | - return pwd; | |
13 | 43 | }, |
14 | - | |
15 | - formatDate: function(secs, type=0){ //type是可选参数,因为json中时间的格式是year-month-date,不能识别XX年XX月XX日 | |
16 | - var t = new Date(secs) | |
17 | - var year = t.getFullYear() | |
18 | - var month = t.getMonth() + 1 | |
19 | - if(month < 10){ month = '0' + month } | |
20 | - var date = t.getDate() | |
21 | - if(date < 10){ date = '0' + date } | |
22 | - var hour = t.getHours() | |
23 | - if(hour < 10){ hour = '0' + hour } | |
24 | - var minute = t.getMinutes() | |
25 | - if(minute < 10){ minute = '0' + minute } | |
26 | - var second = t.getSeconds() | |
27 | - if(second < 10){ second = '0' + second } | |
28 | - if(type==0){ | |
29 | - return year + '年' + month + '月' + date + '日' | |
30 | - }else{ | |
31 | - return year + '-'+month+'-'+date | |
32 | - }}, | |
33 | - | |
34 | - timestampToTime: function (timestamp) { | |
44 | + timestampToTime: function(timestamp) { | |
35 | 45 | var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 |
36 | - var youWant=d.getFullYear() + '-' + this.completedString(d.getMonth() + 1) + '-' + this.completedString(d.getDate()) ; | |
37 | - return youWant | |
46 | + var youWant = d.getFullYear() + "-" + this.completedString(d.getMonth() + 1) + "-" + this.completedString(d.getDate()); | |
47 | + return youWant; | |
38 | 48 | }, |
39 | - completedString:function(s) { | |
40 | - return s < 10 ? '0' + s : s | |
49 | + completedString: function(s) { | |
50 | + return s < 10 ? "0" + s : s; | |
41 | 51 | }, |
42 | - | |
43 | - | |
44 | - | |
45 | - dateFormat: function (msd) { // 时间转换 | |
46 | - var time = msd | |
47 | - | |
52 | + dateFormat: function(msd) { // 时间转换 | |
53 | + var time = msd; | |
48 | 54 | if (null != time && "" != time) { |
49 | - | |
50 | 55 | if (time > 60 && time < 60 * 60) { |
51 | - | |
52 | 56 | time = parseInt(time / 60.0) + "分钟" + parseInt((parseFloat(time / 60.0) - |
53 | - | |
54 | 57 | parseInt(time / 60.0)) * 60) + "秒"; |
55 | - | |
56 | 58 | } |
57 | - | |
58 | 59 | else if (time >= 60 * 60 && time < 60 * 60 * 24) { |
59 | - | |
60 | 60 | time = parseInt(time / 3600.0) + "小时" + parseInt((parseFloat(time / 3600.0) - |
61 | - | |
62 | 61 | parseInt(time / 3600.0)) * 60) + "分钟" + |
63 | - | |
64 | 62 | parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) - |
65 | - | |
66 | 63 | parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + "秒"; |
67 | - | |
68 | 64 | } else if (time >= 60 * 60 * 24) { |
69 | - | |
70 | 65 | time = parseInt(time / 3600.0 / 24) + "天" + parseInt((parseFloat(time / 3600.0 / 24) - |
71 | - | |
72 | 66 | parseInt(time / 3600.0 / 24)) * 24) + "小时" + parseInt((parseFloat(time / 3600.0) - |
73 | - | |
74 | 67 | parseInt(time / 3600.0)) * 60) + "分钟" + |
75 | - | |
76 | 68 | parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) - |
77 | - | |
78 | 69 | parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + "秒"; |
79 | - | |
80 | 70 | } |
81 | - | |
82 | 71 | else { |
83 | - | |
84 | 72 | time = parseInt(time) + "秒"; |
85 | - | |
86 | 73 | } |
87 | - | |
88 | 74 | } |
89 | - | |
90 | 75 | return time; |
91 | 76 | }, |
92 | - | |
93 | - signObject: function (jsonObj){ //签名字段 | |
94 | - let sort = [] | |
95 | - for(let k in jsonObj){ | |
77 | + // myVxAppId: 'wx1489e48e6a547023', | |
78 | + signObject: function(jsonObj) { //签名字段 | |
79 | + jsonObj.sign_type = "md5"; | |
80 | + jsonObj.app_id = "ud8yq5tv0inxupc05xfeau39jywlqoj2"; | |
81 | + jsonObj.deviceInfo = "BC0703A4-AFB0-4B51-9089-9B7487C0CC6E"; | |
82 | + jsonObj.salt = myCommonSalt(32); | |
83 | + jsonObj.token = "99ecd32eed1b4ebea71bc73b0aabbb99"; | |
84 | + let sort = []; | |
85 | + for (let k in jsonObj) { | |
96 | 86 | sort.push({ |
97 | 87 | keyname: k, |
98 | 88 | value: jsonObj[k] |
99 | - }) | |
89 | + }); | |
100 | 90 | } |
101 | - return this.myGetSign(sort) | |
91 | + return this.myGetSign(sort); | |
102 | 92 | }, |
103 | - | |
104 | - clientBrowser: function () { // 判断客户端 | |
93 | + clientBrowser: function() { // 判断客户端 | |
105 | 94 | if (/MicroMessenger/.test(window.navigator.userAgent)) { |
106 | 95 | console.log("微信客户端"); |
107 | - return '微信' | |
96 | + return "微信"; | |
108 | 97 | } else if (/AlipayClient/.test(window.navigator.userAgent)) { |
109 | 98 | console.log("支付宝客户端"); |
110 | - return '支付宝' | |
99 | + return "支付宝"; | |
111 | 100 | } else if (/BankabciPhone/.test(window.navigator.userAgent)) { |
112 | 101 | console.log("农行客户端"); |
113 | - return '立即' | |
114 | - }else if (/BankabcAndroid/.test(window.navigator.userAgent)) { | |
102 | + return "立即"; | |
103 | + } else if (/BankabcAndroid/.test(window.navigator.userAgent)) { | |
115 | 104 | console.log("农行客户端"); |
116 | - return '立即' | |
117 | - }else { | |
105 | + return "立即"; | |
106 | + } else { | |
118 | 107 | console.log("其他浏览器"); |
119 | - return '支付宝' | |
108 | + return "支付宝"; | |
120 | 109 | } |
121 | 110 | }, |
122 | - | |
123 | 111 | // 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 34 农行 |
124 | - clientBrowsePayType: function () { // 判断客户端 | |
112 | + clientBrowsePayType: function() { // 判断客户端 | |
125 | 113 | if (/MicroMessenger/.test(window.navigator.userAgent)) { |
126 | 114 | console.log("微信客户端"); |
127 | - return '4' | |
115 | + return "4"; | |
128 | 116 | } else if (/AlipayClient/.test(window.navigator.userAgent)) { |
129 | 117 | console.log("支付宝客户端"); |
130 | - return '1' | |
118 | + return "1"; | |
131 | 119 | } else if (/BankabciPhone/.test(window.navigator.userAgent)) { |
132 | 120 | console.log("农行客户端"); |
133 | - return '34' | |
134 | - }else if (/BankabcAndroid/.test(window.navigator.userAgent)) { | |
121 | + return "34"; | |
122 | + } else if (/BankabcAndroid/.test(window.navigator.userAgent)) { | |
135 | 123 | console.log("农行客户端"); |
136 | - return '34' | |
137 | - }else { | |
124 | + return "34"; | |
125 | + } else { | |
138 | 126 | console.log("其他浏览器"); |
139 | - return '1' | |
127 | + return "1"; | |
140 | 128 | } |
141 | 129 | }, |
142 | - // 0eca8f5373ca4866aec2f8e9d9367104 老的id | |
143 | - // 14318527b13840c2a4af63fef52c2d6e 老的签名 | |
144 | - | |
145 | - // ud8yq5tv0inxupc05xfeau39jywlqoj2 新的id | |
146 | - // ny1u72b6k374sg379z0kqjgfxe2ycnpw 新的签名 | |
147 | - | |
148 | - myVarAppid:'ud8yq5tv0inxupc05xfeau39jywlqoj2',// 公共请求Appid | |
149 | - | |
150 | - myDeviceInfo: 'BC0703A4-AFB0-4B51-9089-9B7487C0CC6E', // 公共请求设备信息 | |
151 | - | |
152 | - myVxAppId: 'wx1489e48e6a547023', | |
153 | - // 测试环境 微信赤峰 appid wxff4cebaedbf4f886 | |
154 | - // 微信赤峰 appid wx2af2bab90d433c86 | |
155 | - // 黄石 appid wxa1a66cc7d263afe6 | |
156 | - | |
157 | - myOrgId: '10120', // 归属地 赤峰id 10003 黄石 10079 | |
158 | - | |
159 | - myGetSign: function (objb) { // 获取签名 | |
160 | - var compare = function (obj1, obj2) { | |
130 | + myVarAppid: "ud8yq5tv0inxupc05xfeau39jywlqoj2",// 公共请求Appid | |
131 | + myDeviceInfo: "BC0703A4-AFB0-4B51-9089-9B7487C0CC6E", // 公共请求设备信息 | |
132 | + myVxAppId: "wx1489e48e6a547023", | |
133 | + openId: "oWw3o5rY_bFsiT_nFd2CEQWGZfhs", | |
134 | + myOrgId: "10120", // 归属地 赤峰id 10003 黄石 10079 | |
135 | + myGetSign: function(objb) { // 获取签名 | |
136 | + var compare = function(obj1, obj2) { | |
161 | 137 | var val1 = obj1.keyname; |
162 | 138 | var val2 = obj2.keyname; |
163 | 139 | if (val1 < val2) { |
... | ... | @@ -167,19 +143,18 @@ export default { |
167 | 143 | } else { |
168 | 144 | return 0; |
169 | 145 | } |
170 | - } | |
146 | + }; | |
171 | 147 | objb.sort(compare); |
172 | - var strmd5 = 'ny1u72b6k374sg379z0kqjgfxe2ycnpw'; | |
173 | - for(var i=0;i<objb.length;i++){ | |
174 | - if(objb[i].value != null&&objb[i].value != ''){ | |
175 | - strmd5 += objb[i].keyname+objb[i].value; | |
148 | + var strmd5 = "ny1u72b6k374sg379z0kqjgfxe2ycnpw"; | |
149 | + for (var i = 0; i < objb.length; i++) { | |
150 | + if (objb[i].value != null && objb[i].value != "") { | |
151 | + strmd5 += objb[i].keyname + objb[i].value; | |
176 | 152 | } |
177 | 153 | } |
178 | - strmd5 += 'ny1u72b6k374sg379z0kqjgfxe2ycnpw'; | |
154 | + strmd5 += "ny1u72b6k374sg379z0kqjgfxe2ycnpw"; | |
179 | 155 | // console.log('strmd5-------->'+strmd5); |
180 | 156 | strmd5 = md5(strmd5); |
181 | - strmd5=strmd5.toUpperCase(); | |
157 | + strmd5 = strmd5.toUpperCase(); | |
182 | 158 | return strmd5; |
183 | - }, | |
184 | - | |
185 | -} | |
159 | + } | |
160 | +}; | ... | ... |
src/views/binding/binDing.vue
src/views/cards/buyCardDetail.vue
0 → 100644
1 | +<template> | |
2 | + <section class=""> | |
3 | + <div class="vipCardBg"> | |
4 | + <ul class="cardTypeList"> | |
5 | + <li>年卡</li> | |
6 | + <li>月卡</li> | |
7 | + <li>半年卡</li> | |
8 | + </ul> | |
9 | + | |
10 | + <div class="van-ellipsis" style="padding: 20px 0 10px 20px">万达停车场plName</div> | |
11 | + <div class="van-ellipsis" style="padding: 0 0 0 20px">万达停车场plAddress</div> | |
12 | + </div> | |
13 | + | |
14 | + | |
15 | + | |
16 | + <van-cell-group inset style="margin-bottom: 10px;" @click="LinkBuyCard"> | |
17 | + <van-cell > | |
18 | + <template #title> | |
19 | + <span style="font-size: 20px;font-weight: 600;">年卡</span> | |
20 | + </template> | |
21 | + </van-cell> | |
22 | + <van-cell title="万达月卡cardName" center value="立即购买" label="单价:¥1800.00" is-link> | |
23 | + </van-cell> | |
24 | + </van-cell-group> | |
25 | + | |
26 | + <van-cell-group inset style="margin-bottom: 10px;"> | |
27 | + <van-cell > | |
28 | + <template #title> | |
29 | + <span style="font-size: 20px;font-weight: 600;">年卡</span> | |
30 | + </template> | |
31 | + </van-cell> | |
32 | + <van-cell title="万达月卡cardName" center value="立即购买" label="单价:¥1800.00" is-link> | |
33 | + </van-cell> | |
34 | + </van-cell-group> | |
35 | + </section> | |
36 | + | |
37 | +</template> | |
38 | + | |
39 | +<script> | |
40 | +export default { | |
41 | + name: "buyCardDetail", | |
42 | + | |
43 | + methods:{ | |
44 | + LinkBuyCard(){ | |
45 | + this.$router.push({ | |
46 | + name: "buyVipCard" | |
47 | + } | |
48 | + ); | |
49 | + } | |
50 | + } | |
51 | +}; | |
52 | +</script> | |
53 | + | |
54 | +<style scoped lang="less"> | |
55 | + .vipCardBg { | |
56 | + margin-top: 14px; | |
57 | + margin-left: 10px; | |
58 | + margin-right: 10px; | |
59 | + margin-bottom: 10px; | |
60 | + /* width: 100%; */ | |
61 | + height: 150px; | |
62 | + background-image: url('../../assets/images/cards/vipcardbg.png'); | |
63 | + background-repeat: no-repeat; | |
64 | + /* background-position: center center; */ | |
65 | + background-size: 100% 100%; | |
66 | + -moz-background-size: 100% 100%; | |
67 | + font-size: 16px; | |
68 | + color: #fff; | |
69 | + } | |
70 | + | |
71 | + .cardTypeList { | |
72 | + padding: 20px 0 10px 20px; | |
73 | + overflow: hidden; | |
74 | + > li { | |
75 | + float: left; | |
76 | + margin-right: 10px; | |
77 | + padding: 2px 20px; | |
78 | + border-radius: 10px; | |
79 | + background: rgba(255, 255, 255, .3); | |
80 | + } | |
81 | + } | |
82 | +</style> | ... | ... |
src/views/cards/buyVipCard.vue
0 → 100644
1 | +<template> | |
2 | + <section style="width: 100%;height: 100%;background: #fff"> | |
3 | + <van-cell-group style="border-bottom: 10px solid #fafafa"> | |
4 | + <van-cell title="车牌号" is-link> | |
5 | + <template> | |
6 | + <p @click="show = true" style="color: #1989fa">{{carNum}}</p> | |
7 | + <van-action-sheet v-model="show" :actions="actions" @select="onSelect"/> | |
8 | + </template> | |
9 | + </van-cell> | |
10 | + <van-cell title="适用停车场" value="万达停车场"/> | |
11 | + <van-cell title="卡类别" value="小型车月卡"/> | |
12 | + <van-cell title="卡名称" value="万达月卡"/> | |
13 | + <van-cell title="生效时间" is-link> | |
14 | + <template> | |
15 | + <p @click="showDate = true" style="color: #1989fa"> {{valueStart}}</p> | |
16 | + </template> | |
17 | + </van-cell> | |
18 | + <van-cell title="失效时间" value="2023-10-20"/> | |
19 | + | |
20 | + <van-cell title="购买数量"> | |
21 | + <template> | |
22 | + <van-stepper v-model.number="cardNum" theme="round" button-size="22" disable-input/> | |
23 | + </template> | |
24 | + </van-cell> | |
25 | + </van-cell-group> | |
26 | + | |
27 | + | |
28 | + <van-popup v-model="showDate" position="bottom" :style="{ height: '30%' }"> | |
29 | + <van-datetime-picker | |
30 | + v-show="showDate" | |
31 | + v-model="currentDate" | |
32 | + type="date" | |
33 | + title="选择生效日期" | |
34 | + :min-date="minDate" | |
35 | + :max-date="maxDate" | |
36 | + @confirm="confirmDate" | |
37 | + @cancel="cancelDate" | |
38 | + /> | |
39 | + </van-popup> | |
40 | + | |
41 | + | |
42 | + <van-cell-group style="border-bottom: 10px solid #fafafa"> | |
43 | + <van-cell title="单价"> | |
44 | + <template> | |
45 | + <p style="font-size: 16px;font-weight: 600;color: #000;">3420.00元</p> | |
46 | + </template> | |
47 | + </van-cell> | |
48 | + | |
49 | + | |
50 | + <van-cell title="单价"> | |
51 | + <template> | |
52 | + <p style="font-size: 16px;font-weight: 600;color: #f00;">20.00元</p> | |
53 | + </template> | |
54 | + </van-cell> | |
55 | + | |
56 | + | |
57 | + <van-cell title="支付金额"> | |
58 | + <template> | |
59 | + <p style="font-size: 16px;font-weight: 600;color: #000;">3420.00元</p> | |
60 | + </template> | |
61 | + </van-cell> | |
62 | + | |
63 | + </van-cell-group> | |
64 | + | |
65 | + | |
66 | + <div class="leftRightPadding" style="margin-top: 34px"> | |
67 | + <!--<mt-button type="danger" size="large"></mt-button>--> | |
68 | + <van-button type="info" block>购买</van-button> | |
69 | + </div> | |
70 | + | |
71 | + </section> | |
72 | +</template> | |
73 | + | |
74 | +<script> | |
75 | +import { Toast } from "vant"; | |
76 | +export default { | |
77 | + name: "buyVipCard", | |
78 | + data() { | |
79 | + return { | |
80 | + carNum: "京A1231", | |
81 | + show: false, | |
82 | + actions: [{ name: "选项一" }, { name: "选项二" }, { name: "选项三" }], | |
83 | + minDate: new Date(2020, 1, 1), | |
84 | + maxDate: new Date(2025, 10, 11), | |
85 | + currentDate: new Date(2023, 10, 11), | |
86 | + valueStart: "2023-10-01", | |
87 | + showDate: false, | |
88 | + cardNum: 1 | |
89 | + }; | |
90 | + }, | |
91 | + methods: { | |
92 | + onSelect(item) { | |
93 | + // 默认情况下点击选项时不会自动收起 | |
94 | + // 可以通过 close-on-click-action 属性开启自动收起 | |
95 | + this.show = false; | |
96 | + this.carNum = item.name; | |
97 | + Toast(item.name); | |
98 | + }, | |
99 | + confirmDate(val) { | |
100 | + console.log(val); | |
101 | + this.valueStart = val; | |
102 | + this.showDate = false; | |
103 | + }, | |
104 | + cancelDate() { | |
105 | + this.showDate = false; | |
106 | + } | |
107 | + } | |
108 | +}; | |
109 | +</script> | |
110 | + | |
111 | +<style scoped> | |
112 | + .order-line-bold { | |
113 | + background: #fafafa; | |
114 | + height: 12px; | |
115 | + margin-top: 12px; | |
116 | + padding: 0px; | |
117 | + overflow: hidden; | |
118 | + } | |
119 | +</style> | ... | ... |
src/views/cards/cardList.vue
0 → 100644
1 | +<template> | |
2 | + | |
3 | + <section style="padding: 0 10px"> | |
4 | + | |
5 | + <van-row> | |
6 | + <van-col span="18"> | |
7 | + <van-search | |
8 | + v-model="value" | |
9 | + placeholder="请输入搜索关键词" | |
10 | + @search="onSearch" | |
11 | + /> | |
12 | + </van-col> | |
13 | + <van-col span="6" style="margin-top: 5px;"> | |
14 | + <van-button type="info" round block>续费</van-button> | |
15 | + </van-col> | |
16 | + </van-row> | |
17 | + | |
18 | + <ul> | |
19 | + <li class="cardListWrap" @click="toBuyCardPage"> | |
20 | + <div class="van-ellipsis" style="padding: 20px 0 10px 10px">万达停车场plName</div> | |
21 | + <div class="van-ellipsis" style="padding: 10px 0 20px 10px">万达停车场plAddress</div> | |
22 | + </li> | |
23 | + <li class="cardListWrap"> | |
24 | + <div class="van-ellipsis" style="padding: 20px 0 10px 10px">万达停车场plName</div> | |
25 | + <div class="van-ellipsis" style="padding: 10px 0 20px 10px">万达停车场plAddress</div> | |
26 | + </li> | |
27 | + </ul> | |
28 | + | |
29 | + | |
30 | + <section style="text-align: center;padding-top: 20px"> | |
31 | + <van-image :src="require('../../assets/images/cards/novipcard.png')" /> | |
32 | + <p>为找到会员卡</p> | |
33 | + </section> | |
34 | + | |
35 | + | |
36 | + </section> | |
37 | + | |
38 | +</template> | |
39 | + | |
40 | +<script> | |
41 | +import { Toast } from 'vant'; | |
42 | +export default { | |
43 | + name: "cardList", | |
44 | + data() { | |
45 | + return { | |
46 | + value: '', | |
47 | + }; | |
48 | + }, | |
49 | + methods: { | |
50 | + onSearch(val) { | |
51 | + Toast(val); | |
52 | + }, | |
53 | + onCancel() { | |
54 | + Toast('取消'); | |
55 | + }, | |
56 | + toBuyCardPage(){ | |
57 | + this.$router.push({ | |
58 | + name: "buyCardDetail" | |
59 | + } | |
60 | + ); | |
61 | + } | |
62 | + }, | |
63 | +}; | |
64 | +</script> | |
65 | + | |
66 | +<style scoped> | |
67 | + .cardListWrap{ | |
68 | + margin-top: 15px; | |
69 | + margin-left: 0px; | |
70 | + margin-right: 0px; | |
71 | + width: 100%; | |
72 | + height: 106px; | |
73 | + background: url("../../assets/images/cards/vipcardbg1.png") no-repeat; | |
74 | + background-size: 100% 100%; | |
75 | + font-size: 16px; | |
76 | + } | |
77 | + | |
78 | +</style> | ... | ... |
src/views/mySelf/feedback/suggestionBack.vue
... | ... | @@ -5,44 +5,80 @@ |
5 | 5 | <li |
6 | 6 | @click="chooseHandle(index)" |
7 | 7 | v-for="(i, index) in suggestionList" |
8 | - :key="i.id" | |
8 | + :key="i.code" | |
9 | 9 | :class="{choosedActive: currentIndex==index}" |
10 | 10 | > |
11 | - {{i.text}} | |
11 | + {{i.name}} | |
12 | 12 | </li> |
13 | 13 | </ul> |
14 | 14 | |
15 | - <div class="clear"></div> | |
16 | 15 | |
17 | - <mt-field label="" placeholder="请详细描述反馈问题,或提出改进建议。(300字以内)" type="textarea" rows="4" v-model="introduction" :attr="{ maxlength: 2 }"></mt-field> | |
16 | + | |
17 | + <!--<mt-field label="" placeholder="请详细描述反馈问题,或提出改进建议。(300字以内)" type="textarea" rows="4" v-model="introduction" ></mt-field>--> | |
18 | + | |
19 | + <van-field | |
20 | + v-model="introduction" | |
21 | + rows="2" | |
22 | + autosize | |
23 | + type="textarea" | |
24 | + maxlength="300" | |
25 | + placeholder="请详细描述反馈问题,或提出改进建议。(300字以内)" | |
26 | + show-word-limit | |
27 | + /> | |
18 | 28 | |
19 | 29 | <div style="margin-top: 34px"> |
20 | - <mt-button type="danger" size="large">提交</mt-button> | |
30 | + <van-button type="info" block @click="submitCon">提交</van-button> | |
21 | 31 | </div> |
22 | 32 | </div> |
23 | 33 | </template> |
24 | 34 | |
25 | 35 | <script> |
36 | + | |
37 | +import { saveFeedbackAndSuggest, getFeedbackType } from '@/api/getUserIfo' | |
26 | 38 | export default { |
27 | 39 | name: 'suggestionBack', |
28 | 40 | data() { |
29 | 41 | return { |
30 | - suggestionList: [ | |
31 | - { id: 1, text: 'APP问题' }, | |
32 | - { id: 2, text: '支付问题' }, | |
33 | - { id: 3, text: '停车场问题' }, | |
34 | - { id: 4, text: '服务投诉' }, | |
35 | - { id: 5, text: '改进建议' }, | |
36 | - { id: 6, text: '其他问题' }, | |
37 | - ], | |
42 | + suggestionList: [], | |
38 | 43 | currentIndex: 0, |
39 | 44 | introduction: '', |
40 | 45 | } |
41 | 46 | }, |
47 | + created(){ | |
48 | + this.getFeedbackType() | |
49 | + }, | |
42 | 50 | methods: { |
51 | + getFeedbackType(){ | |
52 | + let jsondata = {} | |
53 | + jsondata.sign = this.$utils.signObject(jsondata) | |
54 | + getFeedbackType(jsondata).then(response => { | |
55 | + console.log(response) | |
56 | + this.suggestionList = response.data | |
57 | + }) | |
58 | + }, | |
43 | 59 | chooseHandle: function (i) { |
44 | 60 | console.log(i) |
45 | 61 | this.currentIndex = i |
62 | + }, | |
63 | + submitCon(){ | |
64 | + if(this.introduction){ | |
65 | + let jsondata = { | |
66 | + feedbackCode:this.suggestionList[this.currentIndex].code, | |
67 | + suggestDesc:this.introduction, | |
68 | + // token:'99ecd32eed1b4ebea71bc73b0aabbb99' | |
69 | + } | |
70 | + jsondata.sign = this.$utils.signObject(jsondata) | |
71 | + saveFeedbackAndSuggest(jsondata).then(response => { | |
72 | + console.log(response) | |
73 | + if(response.code==0){ | |
74 | + this.$toast("提交成功"); | |
75 | + } | |
76 | + // this.phoneNum = response.data.phoneNum | |
77 | + }) | |
78 | + | |
79 | + }else{ | |
80 | + this.$toast("请填写建议反馈内容"); | |
81 | + } | |
46 | 82 | } |
47 | 83 | } |
48 | 84 | } |
... | ... | @@ -55,24 +91,27 @@ export default { |
55 | 91 | } |
56 | 92 | |
57 | 93 | .suggestionList { |
94 | + overflow: hidden; | |
58 | 95 | |
59 | 96 | li { |
60 | 97 | float: left; |
61 | 98 | width: calc((100% - 19px) / 2); |
62 | - height: 33px; | |
63 | - line-height: 33px; | |
99 | + height: 45px; | |
100 | + line-height: 45px; | |
64 | 101 | margin-bottom: 16px; |
65 | - border: 1px solid #B18181; | |
102 | + border: 1px solid #2282C5; | |
66 | 103 | text-align: center; |
67 | - font-size: 13px; | |
104 | + font-size: 16px; | |
105 | + border-radius: 4px; | |
106 | + color: #2282C5; | |
68 | 107 | &:nth-child(odd) { |
69 | 108 | margin-right: 19px; |
70 | 109 | } |
71 | 110 | } |
72 | 111 | .choosedActive { |
73 | - background: #F75959; | |
74 | - border: 1px solid #A51E1E; | |
112 | + background: linear-gradient(180deg, #2282C5 0%, #4B8EF1 58%, #63BEFD 100%); | |
75 | 113 | color: #fff; |
114 | + border: 0; | |
76 | 115 | } |
77 | 116 | |
78 | 117 | } | ... | ... |
src/views/mySelf/myCars/addCarNum.vue
0 → 100644
1 | +<template> | |
2 | + <div style="padding: 20px 15px;"> | |
3 | + <h3>请输入车牌号码</h3> | |
4 | + <div class="demo-two-box"> | |
5 | + <vnp-input v-model="value"></vnp-input> | |
6 | + </div> | |
7 | + | |
8 | + <van-button type="info" round block style="margin-top: 40px;" @click="toMyCarsPage">立即添加</van-button> | |
9 | + </div> | |
10 | +</template> | |
11 | + | |
12 | +<script> | |
13 | +import VnpInput from "@/components/vant-number-plate/vnp-input"; | |
14 | +export default { | |
15 | + name: "addCarNum", | |
16 | + components: { | |
17 | + "vnp-input": VnpInput | |
18 | + }, | |
19 | + data() { | |
20 | + return { | |
21 | + show: false, | |
22 | + value: "冀" | |
23 | + }; | |
24 | + }, | |
25 | + methods: { | |
26 | + toMyCarsPage() { | |
27 | + console.log(this.value) | |
28 | + console.log(this.value.length) | |
29 | + this.$router.push({ | |
30 | + name: "myCars" | |
31 | + } | |
32 | + ); | |
33 | + } | |
34 | + } | |
35 | +}; | |
36 | +</script> | |
37 | + | |
38 | +<style lang="less" scoped> | |
39 | + h3 { | |
40 | + text-align: center; | |
41 | + padding-bottom: 20px; | |
42 | + } | |
43 | +</style> | ... | ... |
src/views/mySelf/myCars/myCars.vue
0 → 100644
1 | +<template> | |
2 | + <section style="padding: 20px 15px;"> | |
3 | + <p style="color: #343434;font-size: 30px;font-weight: 600;padding-bottom: 15px;">我的车辆</p> | |
4 | + <div> | |
5 | + <van-row> | |
6 | + <van-col span="3" style="text-align: center"> | |
7 | + <van-image style="margin-top: 18px;" :src="require('../../../assets/images/myCars/carNumBg.png')"/> | |
8 | + </van-col> | |
9 | + <van-col span="14" style="font-size: 16px;"> | |
10 | + 京A1231231 | |
11 | + </van-col> | |
12 | + <van-col span="5"> | |
13 | + <!--<p style="color: #FF555D">立即认证</p>--> | |
14 | + <p style="color: #1aad19">通过认证</p> | |
15 | + </van-col> | |
16 | + <van-col span="2"> | |
17 | + <p> | |
18 | + <van-icon name="cross" color="#D1D1D6"/> | |
19 | + </p> | |
20 | + </van-col> | |
21 | + </van-row> | |
22 | + | |
23 | + <van-row> | |
24 | + <van-col span="3" style="text-align: center"> | |
25 | + <van-image style="margin-top: 18px;" :src="require('../../../assets/images/myCars/carNumBg.png')"/> | |
26 | + </van-col> | |
27 | + <van-col span="14" style="font-size: 16px;"> | |
28 | + 京A1231231 | |
29 | + </van-col> | |
30 | + <van-col span="5"> | |
31 | + <p style="color: #FF555D" @click="toRzcarNumber">立即认证</p> | |
32 | + </van-col> | |
33 | + <van-col span="2"> | |
34 | + <p> | |
35 | + <van-icon name="cross" color="#D1D1D6"/> | |
36 | + </p> | |
37 | + </van-col> | |
38 | + </van-row> | |
39 | + | |
40 | + <van-row> | |
41 | + <van-col span="3" style="text-align: center"> | |
42 | + <van-image style="margin-top: 18px;" :src="require('../../../assets/images/myCars/carNumBg.png')"/> | |
43 | + </van-col> | |
44 | + <van-col span="14" style="font-size: 16px;"> | |
45 | + 京A1231231 | |
46 | + </van-col> | |
47 | + <van-col span="5"> | |
48 | + <p style="color: #2282C5">审核中</p> | |
49 | + </van-col> | |
50 | + <van-col span="2"> | |
51 | + <p> | |
52 | + <van-icon name="cross" color="#D1D1D6"/> | |
53 | + </p> | |
54 | + </van-col> | |
55 | + </van-row> | |
56 | + | |
57 | + <section class="addBtnBg" @click="toAddCarPage"> | |
58 | + <van-image style="margin-top: 10px" :src="require('../../../assets/images/myCars/addBtn.png')"/> | |
59 | + 添加车辆 | |
60 | + </section> | |
61 | + | |
62 | + | |
63 | + <section style="margin-top: 20px;"> | |
64 | + 宣化停车友情提示: | |
65 | + </section> | |
66 | + | |
67 | + <section> | |
68 | + 1、每个车牌同一时间只能被一个用户绑定,如需被其他账户绑定,需先解绑; | |
69 | + </section> | |
70 | + | |
71 | + <section> | |
72 | + 2、车牌号非本人绑定时,可以拔打客服电话反馈进行解绑; | |
73 | + </section> | |
74 | + | |
75 | + <section> | |
76 | + 3、车牌绑定后可以提交行驶证进行真实性验证,48小时内反馈审核结果;如自行解绑车牌后,再次重新绑定需重新审核认证; | |
77 | + </section> | |
78 | + | |
79 | + <section> | |
80 | + 4、未认证的车牌只支持支付当前停车费和历史欠费记录; | |
81 | + </section> | |
82 | + | |
83 | + <section> | |
84 | + 5、认证的车牌支持查看历史停车记录; | |
85 | + </section> | |
86 | + | |
87 | + <section> | |
88 | + 6、一个账号最多允许绑定三个车牌号,该账号可为三辆车购买会员卡(购买会员卡仅限一车牌绑定使用)。 | |
89 | + </section> | |
90 | + | |
91 | + | |
92 | + </div> | |
93 | + | |
94 | + </section> | |
95 | + | |
96 | +</template> | |
97 | + | |
98 | +<script> | |
99 | +export default { | |
100 | + name: "myCars", | |
101 | + methods: { | |
102 | + toAddCarPage() { | |
103 | + this.$router.push({ | |
104 | + name: "addCarNum" | |
105 | + } | |
106 | + ); | |
107 | + }, | |
108 | + toRzcarNumber(){ | |
109 | + this.$router.push({ | |
110 | + name: "rzCarNumber" | |
111 | + } | |
112 | + ); | |
113 | + } | |
114 | + } | |
115 | +}; | |
116 | +</script> | |
117 | + | |
118 | +<style scoped> | |
119 | + .van-row { | |
120 | + margin-bottom: 20px; | |
121 | + height: 60px; | |
122 | + line-height: 60px; | |
123 | + background: #FFFFFF; | |
124 | + box-shadow: 0px 2px 6px 0px rgba(114, 124, 143, 0.2); | |
125 | + border-radius: 8px; | |
126 | + } | |
127 | + | |
128 | + .addBtnBg { | |
129 | + margin-top: 40px; | |
130 | + height: 45px; | |
131 | + line-height: 45px; | |
132 | + background: url("../../../assets/images/myCars/addBtnBg.png") no-repeat; | |
133 | + background-size: 100% 100%; | |
134 | + color: #2282C5; | |
135 | + font-size: 14px; | |
136 | + font-weight: 600; | |
137 | + text-align: center; | |
138 | + } | |
139 | +</style> | ... | ... |
src/views/mySelf/myCars/rzCarNumber.vue
0 → 100644
1 | +<template> | |
2 | + <div style="background: #fff;width: 100%;height: 100%"> | |
3 | + <h3 style="padding: 10px 10px;border-bottom: 5px solid #f5f5f5"> | |
4 | + 车牌号码: | |
5 | + <b style="color:#2282C5">京A12321</b> | |
6 | + </h3> | |
7 | + | |
8 | + <div style="padding: 10px 10px"> | |
9 | + | |
10 | + <van-uploader style="width: 100%" :after-read="afterRead" v-model="fileList" :max-count="1" preview-size="200"> | |
11 | + | |
12 | + <!--<!–<div class="uploadBg"></div>–>--> | |
13 | + <!--<van-image style="width: 100%;height: 200px;"--> | |
14 | + <!--:src="require('../../../assets/images/myCars/fornt.png')" />--> | |
15 | + </van-uploader> | |
16 | + | |
17 | + <!--<div class="uploadBg">--> | |
18 | + <!----> | |
19 | + <!--</div>--> | |
20 | + | |
21 | + | |
22 | + <h4> | |
23 | + 照片须符合如下条件: | |
24 | + </h4> | |
25 | + <h6> | |
26 | + 1、行驶证正面 | |
27 | + </h6> | |
28 | + <h6> | |
29 | + 2、信息清晰显示真实有效 | |
30 | + </h6> | |
31 | + | |
32 | + <van-button type="info" round block style="margin-top: 40px;" @click="toMyCarsPage">立即验证</van-button> | |
33 | + | |
34 | + | |
35 | + | |
36 | + </div> | |
37 | + | |
38 | + | |
39 | + | |
40 | + | |
41 | + </div> | |
42 | + | |
43 | +</template> | |
44 | + | |
45 | +<script> | |
46 | +export default { | |
47 | + name: "rzCarNumber", | |
48 | + data() { | |
49 | + return { | |
50 | + fileList: [], | |
51 | + }; | |
52 | + }, | |
53 | + methods:{ | |
54 | + afterRead(file) { | |
55 | + // 此时可以自行将文件上传至服务器 | |
56 | + console.log(file); | |
57 | + }, | |
58 | + toMyCarsPage() { | |
59 | + console.log(this.fileList) | |
60 | + console.log(this.fileList.length) | |
61 | + this.$router.push({ | |
62 | + name: "myCars" | |
63 | + } | |
64 | + ); | |
65 | + } | |
66 | + } | |
67 | +}; | |
68 | +</script> | |
69 | + | |
70 | +<style scoped> | |
71 | +.uploadBg{ | |
72 | + width: 100%; | |
73 | + height: 200px; | |
74 | + background:#eee url("../../../assets/images/myCars/fornt.png") no-repeat; | |
75 | + background-size: 100% 100%; | |
76 | + | |
77 | +} | |
78 | +</style> | ... | ... |
src/views/mySelf/selfNav.vue
... | ... | @@ -4,32 +4,112 @@ |
4 | 4 | <div class="person-ifo"> |
5 | 5 | <div class="person-pic"></div> |
6 | 6 | <ul class="person-con"> |
7 | - <li>15911111111</li> | |
8 | - <li>账户余额: <span>¥100.00</span></li> | |
9 | - <li>我的卡券:<span>20张</span></li> | |
7 | + <li></li> | |
8 | + <li style="padding-top: 20px;font-size: 20px;">{{phoneNum}}</li> | |
9 | + <!--<li>账户余额: <span>¥100.00</span></li>--> | |
10 | + <!--<li>我的卡券:<span>20张</span></li>--> | |
10 | 11 | </ul> |
11 | 12 | </div> |
12 | 13 | </div> |
13 | 14 | |
14 | - <mt-cell title="会员卡" is-link :to="{ name: 'Toast' }"></mt-cell> | |
15 | + <!--<mt-cell title="会员卡" is-link :to="{ name: 'cardList' }"></mt-cell>--> | |
15 | 16 | |
16 | - <mt-cell title="车辆管理" is-link :to="{ name: 'Toast' }"></mt-cell> | |
17 | + <!--<mt-cell title="车辆管理" is-link :to="{ name: 'myCars' }"></mt-cell>--> | |
17 | 18 | |
18 | - <mt-cell title="停车记录" is-link :to="{ name: 'parkNotes' }"></mt-cell> | |
19 | + <!--<mt-cell title="车辆管理" is-link :to="{ name: 'parkNotes' }"></mt-cell>--> | |
19 | 20 | |
20 | - <mt-cell title="建议反馈" is-link :to="{ name: 'suggestionBack' }"></mt-cell> | |
21 | + <!--<mt-cell title="建议反馈" is-link :to="{ name: 'suggestionBack' }"></mt-cell>--> | |
21 | 22 | |
22 | - <div class="leftRightPadding" style="margin-top: 34px"> | |
23 | - <mt-button type="danger" size="large">退出账户</mt-button> | |
23 | + <van-cell-group> | |
24 | + <van-cell v-for="i in navList" :key="i.title" :title="i.title" size="large" is-link @click="toNextPage(i.path)"/> | |
25 | + </van-cell-group> | |
26 | + | |
27 | + | |
28 | + <div class="leftRightPadding" style="margin-top: 34px" v-if="openId"> | |
29 | + <!--<mt-button type="danger" size="large"></mt-button>--> | |
30 | + <van-button type="info" block>退出账户</van-button> | |
31 | + </div> | |
32 | + <div class="leftRightPadding" style="margin-top: 34px" v-else> | |
33 | + <van-button type="info" block @click="toBindingPage">登录绑定</van-button> | |
24 | 34 | </div> |
25 | 35 | |
26 | 36 | </div> |
27 | 37 | </template> |
28 | 38 | |
29 | 39 | <script> |
40 | + | |
41 | +import { getTokenByOpenId } from '@/api/getUserIfo' | |
30 | 42 | export default { |
31 | - name: 'selfNav' | |
32 | -} | |
43 | + name: "selfNav", | |
44 | + data() { | |
45 | + return { | |
46 | + navList: [ | |
47 | + { | |
48 | + title: "会员卡", path: "cardList" | |
49 | + }, | |
50 | + { | |
51 | + title: "车辆管理", path: "myCars" | |
52 | + }, | |
53 | + { | |
54 | + title: "停车记录", path: "parkNotes" | |
55 | + }, | |
56 | + { | |
57 | + title: "建议反馈", path: "suggestionBack" | |
58 | + } | |
59 | + ], | |
60 | + openId: "", | |
61 | + phoneNum:'',//手机号 | |
62 | + }; | |
63 | + }, | |
64 | + mounted() { | |
65 | + this.openId = this.$utils.openId; | |
66 | + if(this.openId){ | |
67 | + this.getTokenAndphoneNum() | |
68 | + } | |
69 | + console.log(this.openId); | |
70 | + }, | |
71 | + created() { | |
72 | + // this.carNumber = this.$route.query.carNumber // 获取车牌号 | |
73 | + // this.carColor = this.$route.query.carNumberColor // 获取颜色 0:蓝牌;1:黄牌;2:白牌;3:黑牌;4:绿色 | |
74 | + // this.currentTabActive = this.$route.query.parkFlag ? this.$route.query.parkFlag : 0 // 0在停 1历史 | |
75 | + // console.log(this.carNumber) | |
76 | + // this.parkRecordList(this.carNumber) | |
77 | + }, | |
78 | + methods: { | |
79 | + toNextPage(path) { | |
80 | + if (this.openId) { | |
81 | + this.$router.push({ | |
82 | + name: path | |
83 | + } | |
84 | + ); | |
85 | + } else { | |
86 | + this.$toast("请先登录"); | |
87 | + this.$router.push({ | |
88 | + name: "binDing" | |
89 | + } | |
90 | + ); | |
91 | + } | |
92 | + }, | |
93 | + toBindingPage() { | |
94 | + this.$router.push({ | |
95 | + name: "binDing" | |
96 | + } | |
97 | + ); | |
98 | + }, | |
99 | + getTokenAndphoneNum(){ | |
100 | + let jsondata = { | |
101 | + openid: this.$utils.openId, | |
102 | + } | |
103 | + jsondata.sign = this.$utils.signObject(jsondata) | |
104 | + console.log('停车记录传参 ' + JSON.stringify(jsondata)); | |
105 | + getTokenByOpenId(jsondata).then(response => { | |
106 | + console.log(response) | |
107 | + this.phoneNum = response.data.phoneNum | |
108 | + console.log(response.data.token) | |
109 | + }) | |
110 | + } | |
111 | + } | |
112 | +}; | |
33 | 113 | </script> |
34 | 114 | |
35 | 115 | <style scoped lang="scss"> |
... | ... | @@ -44,21 +124,20 @@ export default { |
44 | 124 | padding-top: 45px; |
45 | 125 | display: flex; |
46 | 126 | color: #ffbfbf; |
47 | - .person-pic{ | |
127 | + .person-pic { | |
48 | 128 | width: 64px; |
49 | 129 | height: 64px; |
50 | 130 | margin-right: 15px; |
51 | 131 | background: url("../../assets/images/mySelf/photoBG.png") no-repeat; |
52 | 132 | } |
53 | 133 | } |
54 | - .person-con{ | |
55 | - span{ | |
134 | + | |
135 | + .person-con { | |
136 | + span { | |
56 | 137 | font-size: 16px; |
57 | 138 | font-weight: bold; |
58 | 139 | } |
59 | 140 | } |
60 | 141 | |
61 | - .mint-cell{ | |
62 | - border-bottom: 1px solid #EFEDED; | |
63 | - } | |
142 | + | |
64 | 143 | </style> | ... | ... |
vue.config.js
0 → 100644
1 | +const path = require('path') | |
2 | +module.exports = { | |
3 | + css:{ | |
4 | + loaderOptions:{ | |
5 | + less:{ | |
6 | + modifyVars:{ | |
7 | + //通过本地less文件覆盖变量 | |
8 | + // true; @import "your-less-file-path.less"; | |
9 | + modifyVars: { | |
10 | + hack: `true; @import "${path.resolve(__dirname, './src/assets/css/resetVantUi.less')}";` | |
11 | + } | |
12 | + } | |
13 | + } | |
14 | + } | |
15 | + } | |
16 | +} | |
17 | + | |
18 | +} | ... | ... |