Commit 7fe7e00174b1a724ad362b7a24bb965fff5439c9

Authored by BigBoss
Exists in master

Merge branch 'master' of http://121.40.31.31:8888/jp/gulu-vue

... ... @@ -0,0 +1,5 @@
  1 +/node_modules/
  2 +/config/
  3 +/dist/
  4 +/*.js
  5 +/*.json
0 6 \ No newline at end of file
... ...
... ... @@ -0,0 +1,30 @@
  1 +module.exports = {
  2 + "env": {
  3 + "browser": true,
  4 + "es6": true
  5 + },
  6 + "extends": [
  7 + 'standard',
  8 + "eslint:recommended",
  9 + "plugin:vue/essential",
  10 + "plugin:@typescript-eslint/eslint-recommended",
  11 + ],
  12 + "globals": {
  13 + "Atomics": "readonly",
  14 + "SharedArrayBuffer": "readonly",
  15 + "uni": true,
  16 + "module": true
  17 + },
  18 + "parserOptions": {
  19 + "ecmaVersion": 11,
  20 + "parser": "@typescript-eslint/parser",
  21 + "sourceType": "module"
  22 + },
  23 + "plugins": [
  24 + "vue",
  25 + "@typescript-eslint"
  26 + ],
  27 + "rules": {
  28 + quotes: ['error', 'single'],
  29 + }
  30 +};
... ...
package-lock.json
... ... @@ -1493,6 +1493,12 @@
1493 1493 "integrity": "sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=",
1494 1494 "dev": true
1495 1495 },
  1496 + "@types/eslint-visitor-keys": {
  1497 + "version": "1.0.0",
  1498 + "resolved": "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz",
  1499 + "integrity": "sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0=",
  1500 + "dev": true
  1501 + },
1496 1502 "@types/events": {
1497 1503 "version": "3.0.0",
1498 1504 "resolved": "https://registry.npm.taobao.org/@types/events/download/@types/events-3.0.0.tgz?cache=0&sync_timestamp=1580843133282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fevents%2Fdownload%2F%40types%2Fevents-3.0.0.tgz",
... ... @@ -1518,6 +1524,12 @@
1518 1524 "@types/node": "*"
1519 1525 }
1520 1526 },
  1527 + "@types/json-schema": {
  1528 + "version": "7.0.4",
  1529 + "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.4.tgz?cache=0&sync_timestamp=1588200662880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.4.tgz",
  1530 + "integrity": "sha1-OP1z3f2bVaux4bLtV4y1W9e30zk=",
  1531 + "dev": true
  1532 + },
1521 1533 "@types/minimatch": {
1522 1534 "version": "3.0.3",
1523 1535 "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz",
... ... @@ -1547,6 +1559,104 @@
1547 1559 "integrity": "sha1-knmXNCu59KUYWobmV5oKGK/DOwo=",
1548 1560 "dev": true
1549 1561 },
  1562 + "@typescript-eslint/eslint-plugin": {
  1563 + "version": "3.0.0",
  1564 + "resolved": "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-3.0.0.tgz?cache=0&sync_timestamp=1590102419751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.0.0.tgz",
  1565 + "integrity": "sha1-Avjsa1zoFL2oDfwiRj8Qi+0faZs=",
  1566 + "dev": true,
  1567 + "requires": {
  1568 + "@typescript-eslint/experimental-utils": "3.0.0",
  1569 + "functional-red-black-tree": "^1.0.1",
  1570 + "regexpp": "^3.0.0",
  1571 + "semver": "^7.3.2",
  1572 + "tsutils": "^3.17.1"
  1573 + },
  1574 + "dependencies": {
  1575 + "semver": {
  1576 + "version": "7.3.2",
  1577 + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz",
  1578 + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=",
  1579 + "dev": true
  1580 + },
  1581 + "tsutils": {
  1582 + "version": "3.17.1",
  1583 + "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz",
  1584 + "integrity": "sha1-7XGZF/EcoN7lhicrKsSeAVot11k=",
  1585 + "dev": true,
  1586 + "requires": {
  1587 + "tslib": "^1.8.1"
  1588 + }
  1589 + }
  1590 + }
  1591 + },
  1592 + "@typescript-eslint/experimental-utils": {
  1593 + "version": "3.0.0",
  1594 + "resolved": "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-3.0.0.tgz?cache=0&sync_timestamp=1590102416205&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.0.0.tgz",
  1595 + "integrity": "sha1-Hd9T7rYayOqpp3BycieQrE9kHAM=",
  1596 + "dev": true,
  1597 + "requires": {
  1598 + "@types/json-schema": "^7.0.3",
  1599 + "@typescript-eslint/typescript-estree": "3.0.0",
  1600 + "eslint-scope": "^5.0.0",
  1601 + "eslint-utils": "^2.0.0"
  1602 + },
  1603 + "dependencies": {
  1604 + "eslint-scope": {
  1605 + "version": "5.0.0",
  1606 + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.0.0.tgz",
  1607 + "integrity": "sha1-6HyIh8c+jR7ITxylkWRcNYv8j7k=",
  1608 + "dev": true,
  1609 + "requires": {
  1610 + "esrecurse": "^4.1.0",
  1611 + "estraverse": "^4.1.1"
  1612 + }
  1613 + }
  1614 + }
  1615 + },
  1616 + "@typescript-eslint/parser": {
  1617 + "version": "3.0.0",
  1618 + "resolved": "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-3.0.0.tgz?cache=0&sync_timestamp=1590102418147&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.0.0.tgz",
  1619 + "integrity": "sha1-/p/fGKEVXALAQiDBRQajIMtsaUQ=",
  1620 + "dev": true,
  1621 + "requires": {
  1622 + "@types/eslint-visitor-keys": "^1.0.0",
  1623 + "@typescript-eslint/experimental-utils": "3.0.0",
  1624 + "@typescript-eslint/typescript-estree": "3.0.0",
  1625 + "eslint-visitor-keys": "^1.1.0"
  1626 + }
  1627 + },
  1628 + "@typescript-eslint/typescript-estree": {
  1629 + "version": "3.0.0",
  1630 + "resolved": "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-3.0.0.tgz",
  1631 + "integrity": "sha1-+kDht2zP+IATC+BU2cOY6WAEv0I=",
  1632 + "dev": true,
  1633 + "requires": {
  1634 + "debug": "^4.1.1",
  1635 + "eslint-visitor-keys": "^1.1.0",
  1636 + "glob": "^7.1.6",
  1637 + "is-glob": "^4.0.1",
  1638 + "lodash": "^4.17.15",
  1639 + "semver": "^7.3.2",
  1640 + "tsutils": "^3.17.1"
  1641 + },
  1642 + "dependencies": {
  1643 + "semver": {
  1644 + "version": "7.3.2",
  1645 + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz",
  1646 + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=",
  1647 + "dev": true
  1648 + },
  1649 + "tsutils": {
  1650 + "version": "3.17.1",
  1651 + "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz",
  1652 + "integrity": "sha1-7XGZF/EcoN7lhicrKsSeAVot11k=",
  1653 + "dev": true,
  1654 + "requires": {
  1655 + "tslib": "^1.8.1"
  1656 + }
  1657 + }
  1658 + }
  1659 + },
1550 1660 "@vue/babel-helper-vue-jsx-merge-props": {
1551 1661 "version": "1.0.0",
1552 1662 "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz",
... ... @@ -2047,6 +2157,12 @@
2047 2157 "indexes-of": "^1.0.1",
2048 2158 "uniq": "^1.0.1"
2049 2159 }
  2160 + },
  2161 + "prettier": {
  2162 + "version": "1.19.1",
  2163 + "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz",
  2164 + "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
  2165 + "optional": true
2050 2166 }
2051 2167 }
2052 2168 },
... ... @@ -2258,6 +2374,12 @@
2258 2374 "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=",
2259 2375 "dev": true
2260 2376 },
  2377 + "acorn-jsx": {
  2378 + "version": "5.2.0",
  2379 + "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.2.0.tgz",
  2380 + "integrity": "sha1-TGYGkXPW/daO2FI5/CViJhgrLr4=",
  2381 + "dev": true
  2382 + },
2261 2383 "acorn-walk": {
2262 2384 "version": "7.1.1",
2263 2385 "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.1.1.tgz",
... ... @@ -2348,6 +2470,23 @@
2348 2470 "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=",
2349 2471 "dev": true
2350 2472 },
  2473 + "ansi-escapes": {
  2474 + "version": "4.3.1",
  2475 + "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&sync_timestamp=1583072845985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz",
  2476 + "integrity": "sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=",
  2477 + "dev": true,
  2478 + "requires": {
  2479 + "type-fest": "^0.11.0"
  2480 + },
  2481 + "dependencies": {
  2482 + "type-fest": {
  2483 + "version": "0.11.0",
  2484 + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz",
  2485 + "integrity": "sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=",
  2486 + "dev": true
  2487 + }
  2488 + }
  2489 + },
2351 2490 "ansi-html": {
2352 2491 "version": "0.0.7",
2353 2492 "resolved": "http://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz",
... ... @@ -2449,6 +2588,17 @@
2449 2588 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
2450 2589 "dev": true
2451 2590 },
  2591 + "array-includes": {
  2592 + "version": "3.1.1",
  2593 + "resolved": "https://registry.npm.taobao.org/array-includes/download/array-includes-3.1.1.tgz",
  2594 + "integrity": "sha1-zdZ+aFK9+cEhVGB4ZzIlXtJFk0g=",
  2595 + "dev": true,
  2596 + "requires": {
  2597 + "define-properties": "^1.1.3",
  2598 + "es-abstract": "^1.17.0",
  2599 + "is-string": "^1.0.5"
  2600 + }
  2601 + },
2452 2602 "array-union": {
2453 2603 "version": "1.0.2",
2454 2604 "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz",
... ... @@ -2469,6 +2619,16 @@
2469 2619 "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz",
2470 2620 "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
2471 2621 },
  2622 + "array.prototype.flat": {
  2623 + "version": "1.2.3",
  2624 + "resolved": "https://registry.npm.taobao.org/array.prototype.flat/download/array.prototype.flat-1.2.3.tgz?cache=0&sync_timestamp=1576170698154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray.prototype.flat%2Fdownload%2Farray.prototype.flat-1.2.3.tgz",
  2625 + "integrity": "sha1-DegrQmsDGNv9uUAInjiwQ9N/bHs=",
  2626 + "dev": true,
  2627 + "requires": {
  2628 + "define-properties": "^1.1.3",
  2629 + "es-abstract": "^1.17.0-next.1"
  2630 + }
  2631 + },
2472 2632 "arraybuffer.slice": {
2473 2633 "version": "0.0.7",
2474 2634 "resolved": "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz",
... ... @@ -2526,6 +2686,12 @@
2526 2686 "resolved": "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz",
2527 2687 "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
2528 2688 },
  2689 + "astral-regex": {
  2690 + "version": "1.0.0",
  2691 + "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz",
  2692 + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=",
  2693 + "dev": true
  2694 + },
2529 2695 "async": {
2530 2696 "version": "2.6.3",
2531 2697 "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz",
... ... @@ -3360,6 +3526,12 @@
3360 3526 }
3361 3527 }
3362 3528 },
  3529 + "chardet": {
  3530 + "version": "0.7.0",
  3531 + "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1588894059283&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz",
  3532 + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
  3533 + "dev": true
  3534 + },
3363 3535 "charenc": {
3364 3536 "version": "0.0.2",
3365 3537 "resolved": "http://registry.npm.taobao.org/charenc/download/charenc-0.0.2.tgz",
... ... @@ -3540,6 +3712,12 @@
3540 3712 "integrity": "sha1-BjIjmktapMlYYQFCw0u3plH8jfU=",
3541 3713 "dev": true
3542 3714 },
  3715 + "cli-width": {
  3716 + "version": "2.2.1",
  3717 + "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-width%2Fdownload%2Fcli-width-2.2.1.tgz",
  3718 + "integrity": "sha1-sEM9C06chH7xiGik7xb9X8gnHEg=",
  3719 + "dev": true
  3720 + },
3543 3721 "clipboardy": {
3544 3722 "version": "2.3.0",
3545 3723 "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz",
... ... @@ -3807,6 +3985,12 @@
3807 3985 "resolved": "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz",
3808 3986 "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
3809 3987 },
  3988 + "contains-path": {
  3989 + "version": "0.1.0",
  3990 + "resolved": "https://registry.npm.taobao.org/contains-path/download/contains-path-0.1.0.tgz",
  3991 + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
  3992 + "dev": true
  3993 + },
3810 3994 "content-disposition": {
3811 3995 "version": "0.5.3",
3812 3996 "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz",
... ... @@ -4668,6 +4852,16 @@
4668 4852 "buffer-indexof": "^1.0.0"
4669 4853 }
4670 4854 },
  4855 + "doctrine": {
  4856 + "version": "1.5.0",
  4857 + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz",
  4858 + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
  4859 + "dev": true,
  4860 + "requires": {
  4861 + "esutils": "^2.0.2",
  4862 + "isarray": "^1.0.0"
  4863 + }
  4864 + },
4671 4865 "dom-converter": {
4672 4866 "version": "0.2.0",
4673 4867 "resolved": "http://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
... ... @@ -5025,6 +5219,618 @@
5025 5219 "source-map": "~0.6.1"
5026 5220 }
5027 5221 },
  5222 + "eslint": {
  5223 + "version": "7.0.0",
  5224 + "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-7.0.0.tgz?cache=0&sync_timestamp=1589251748946&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.0.0.tgz",
  5225 + "integrity": "sha1-w139BKQ3IRC9eMaajXmGQnORmgg=",
  5226 + "dev": true,
  5227 + "requires": {
  5228 + "@babel/code-frame": "^7.0.0",
  5229 + "ajv": "^6.10.0",
  5230 + "chalk": "^4.0.0",
  5231 + "cross-spawn": "^7.0.2",
  5232 + "debug": "^4.0.1",
  5233 + "doctrine": "^3.0.0",
  5234 + "eslint-scope": "^5.0.0",
  5235 + "eslint-utils": "^2.0.0",
  5236 + "eslint-visitor-keys": "^1.1.0",
  5237 + "espree": "^7.0.0",
  5238 + "esquery": "^1.2.0",
  5239 + "esutils": "^2.0.2",
  5240 + "file-entry-cache": "^5.0.1",
  5241 + "functional-red-black-tree": "^1.0.1",
  5242 + "glob-parent": "^5.0.0",
  5243 + "globals": "^12.1.0",
  5244 + "ignore": "^4.0.6",
  5245 + "import-fresh": "^3.0.0",
  5246 + "imurmurhash": "^0.1.4",
  5247 + "inquirer": "^7.0.0",
  5248 + "is-glob": "^4.0.0",
  5249 + "js-yaml": "^3.13.1",
  5250 + "json-stable-stringify-without-jsonify": "^1.0.1",
  5251 + "levn": "^0.4.1",
  5252 + "lodash": "^4.17.14",
  5253 + "minimatch": "^3.0.4",
  5254 + "natural-compare": "^1.4.0",
  5255 + "optionator": "^0.9.1",
  5256 + "progress": "^2.0.0",
  5257 + "regexpp": "^3.1.0",
  5258 + "semver": "^7.2.1",
  5259 + "strip-ansi": "^6.0.0",
  5260 + "strip-json-comments": "^3.1.0",
  5261 + "table": "^5.2.3",
  5262 + "text-table": "^0.2.0",
  5263 + "v8-compile-cache": "^2.0.3"
  5264 + },
  5265 + "dependencies": {
  5266 + "acorn": {
  5267 + "version": "7.2.0",
  5268 + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.2.0.tgz?cache=0&sync_timestamp=1589008014473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.2.0.tgz",
  5269 + "integrity": "sha1-F+p+QNfIZA/1SmlMiJwm8xcE7/4=",
  5270 + "dev": true
  5271 + },
  5272 + "ansi-styles": {
  5273 + "version": "4.2.1",
  5274 + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.2.1.tgz",
  5275 + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=",
  5276 + "dev": true,
  5277 + "requires": {
  5278 + "@types/color-name": "^1.1.1",
  5279 + "color-convert": "^2.0.1"
  5280 + }
  5281 + },
  5282 + "chalk": {
  5283 + "version": "4.0.0",
  5284 + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.0.0.tgz?cache=0&sync_timestamp=1585815759944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.0.0.tgz",
  5285 + "integrity": "sha1-bpgIHtLRf6q2FetSrGbsH+YgnnI=",
  5286 + "dev": true,
  5287 + "requires": {
  5288 + "ansi-styles": "^4.1.0",
  5289 + "supports-color": "^7.1.0"
  5290 + }
  5291 + },
  5292 + "color-convert": {
  5293 + "version": "2.0.1",
  5294 + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
  5295 + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
  5296 + "dev": true,
  5297 + "requires": {
  5298 + "color-name": "~1.1.4"
  5299 + }
  5300 + },
  5301 + "color-name": {
  5302 + "version": "1.1.4",
  5303 + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
  5304 + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
  5305 + "dev": true
  5306 + },
  5307 + "cross-spawn": {
  5308 + "version": "7.0.2",
  5309 + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.2.tgz",
  5310 + "integrity": "sha1-0Nfc+nTokRXHYZ9PchqU4f23FtY=",
  5311 + "dev": true,
  5312 + "requires": {
  5313 + "path-key": "^3.1.0",
  5314 + "shebang-command": "^2.0.0",
  5315 + "which": "^2.0.1"
  5316 + }
  5317 + },
  5318 + "doctrine": {
  5319 + "version": "3.0.0",
  5320 + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz",
  5321 + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
  5322 + "dev": true,
  5323 + "requires": {
  5324 + "esutils": "^2.0.2"
  5325 + }
  5326 + },
  5327 + "eslint-scope": {
  5328 + "version": "5.0.0",
  5329 + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.0.0.tgz",
  5330 + "integrity": "sha1-6HyIh8c+jR7ITxylkWRcNYv8j7k=",
  5331 + "dev": true,
  5332 + "requires": {
  5333 + "esrecurse": "^4.1.0",
  5334 + "estraverse": "^4.1.1"
  5335 + }
  5336 + },
  5337 + "espree": {
  5338 + "version": "7.0.0",
  5339 + "resolved": "https://registry.npm.taobao.org/espree/download/espree-7.0.0.tgz?cache=0&sync_timestamp=1588886720119&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-7.0.0.tgz",
  5340 + "integrity": "sha1-inpg8hjmnxIKhC3CTFqIqndIp04=",
  5341 + "dev": true,
  5342 + "requires": {
  5343 + "acorn": "^7.1.1",
  5344 + "acorn-jsx": "^5.2.0",
  5345 + "eslint-visitor-keys": "^1.1.0"
  5346 + }
  5347 + },
  5348 + "glob-parent": {
  5349 + "version": "5.1.1",
  5350 + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz?cache=0&sync_timestamp=1584835847541&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.1.tgz",
  5351 + "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=",
  5352 + "dev": true,
  5353 + "requires": {
  5354 + "is-glob": "^4.0.1"
  5355 + }
  5356 + },
  5357 + "globals": {
  5358 + "version": "12.4.0",
  5359 + "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1586675819799&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz",
  5360 + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=",
  5361 + "dev": true,
  5362 + "requires": {
  5363 + "type-fest": "^0.8.1"
  5364 + }
  5365 + },
  5366 + "has-flag": {
  5367 + "version": "4.0.0",
  5368 + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
  5369 + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
  5370 + "dev": true
  5371 + },
  5372 + "ignore": {
  5373 + "version": "4.0.6",
  5374 + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz",
  5375 + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
  5376 + "dev": true
  5377 + },
  5378 + "import-fresh": {
  5379 + "version": "3.2.1",
  5380 + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz",
  5381 + "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=",
  5382 + "dev": true,
  5383 + "requires": {
  5384 + "parent-module": "^1.0.0",
  5385 + "resolve-from": "^4.0.0"
  5386 + }
  5387 + },
  5388 + "levn": {
  5389 + "version": "0.4.1",
  5390 + "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz",
  5391 + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=",
  5392 + "dev": true,
  5393 + "requires": {
  5394 + "prelude-ls": "^1.2.1",
  5395 + "type-check": "~0.4.0"
  5396 + }
  5397 + },
  5398 + "optionator": {
  5399 + "version": "0.9.1",
  5400 + "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz",
  5401 + "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=",
  5402 + "dev": true,
  5403 + "requires": {
  5404 + "deep-is": "^0.1.3",
  5405 + "fast-levenshtein": "^2.0.6",
  5406 + "levn": "^0.4.1",
  5407 + "prelude-ls": "^1.2.1",
  5408 + "type-check": "^0.4.0",
  5409 + "word-wrap": "^1.2.3"
  5410 + }
  5411 + },
  5412 + "path-key": {
  5413 + "version": "3.1.1",
  5414 + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz",
  5415 + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
  5416 + "dev": true
  5417 + },
  5418 + "prelude-ls": {
  5419 + "version": "1.2.1",
  5420 + "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz",
  5421 + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=",
  5422 + "dev": true
  5423 + },
  5424 + "resolve-from": {
  5425 + "version": "4.0.0",
  5426 + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz",
  5427 + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
  5428 + "dev": true
  5429 + },
  5430 + "semver": {
  5431 + "version": "7.3.2",
  5432 + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz",
  5433 + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=",
  5434 + "dev": true
  5435 + },
  5436 + "shebang-command": {
  5437 + "version": "2.0.0",
  5438 + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-2.0.0.tgz",
  5439 + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
  5440 + "dev": true,
  5441 + "requires": {
  5442 + "shebang-regex": "^3.0.0"
  5443 + }
  5444 + },
  5445 + "shebang-regex": {
  5446 + "version": "3.0.0",
  5447 + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz",
  5448 + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
  5449 + "dev": true
  5450 + },
  5451 + "strip-json-comments": {
  5452 + "version": "3.1.0",
  5453 + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.0.tgz?cache=0&sync_timestamp=1586160317146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.0.tgz",
  5454 + "integrity": "sha1-djjTFCISns9EV0QACfugP5+awYA=",
  5455 + "dev": true
  5456 + },
  5457 + "supports-color": {
  5458 + "version": "7.1.0",
  5459 + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz",
  5460 + "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=",
  5461 + "dev": true,
  5462 + "requires": {
  5463 + "has-flag": "^4.0.0"
  5464 + }
  5465 + },
  5466 + "type-check": {
  5467 + "version": "0.4.0",
  5468 + "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz",
  5469 + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=",
  5470 + "dev": true,
  5471 + "requires": {
  5472 + "prelude-ls": "^1.2.1"
  5473 + }
  5474 + },
  5475 + "type-fest": {
  5476 + "version": "0.8.1",
  5477 + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz",
  5478 + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=",
  5479 + "dev": true
  5480 + },
  5481 + "which": {
  5482 + "version": "2.0.2",
  5483 + "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
  5484 + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
  5485 + "dev": true,
  5486 + "requires": {
  5487 + "isexe": "^2.0.0"
  5488 + }
  5489 + }
  5490 + }
  5491 + },
  5492 + "eslint-config-prettier": {
  5493 + "version": "6.11.0",
  5494 + "resolved": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.11.0.tgz",
  5495 + "integrity": "sha1-9tIjjBKQ0ByFmotcH301KgsNqLE=",
  5496 + "dev": true,
  5497 + "requires": {
  5498 + "get-stdin": "^6.0.0"
  5499 + },
  5500 + "dependencies": {
  5501 + "get-stdin": {
  5502 + "version": "6.0.0",
  5503 + "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz",
  5504 + "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=",
  5505 + "dev": true
  5506 + }
  5507 + }
  5508 + },
  5509 + "eslint-config-standard": {
  5510 + "version": "14.1.1",
  5511 + "resolved": "https://registry.npm.taobao.org/eslint-config-standard/download/eslint-config-standard-14.1.1.tgz",
  5512 + "integrity": "sha1-gwqOROeu995nRkl5rQa0BgJsVuo=",
  5513 + "dev": true
  5514 + },
  5515 + "eslint-import-resolver-node": {
  5516 + "version": "0.3.3",
  5517 + "resolved": "https://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.3.tgz?cache=0&sync_timestamp=1578726660361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-import-resolver-node%2Fdownload%2Feslint-import-resolver-node-0.3.3.tgz",
  5518 + "integrity": "sha1-26pStrKBa1C8ZxGvdUIt6AjphAQ=",
  5519 + "dev": true,
  5520 + "requires": {
  5521 + "debug": "^2.6.9",
  5522 + "resolve": "^1.13.1"
  5523 + },
  5524 + "dependencies": {
  5525 + "debug": {
  5526 + "version": "2.6.9",
  5527 + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
  5528 + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
  5529 + "dev": true,
  5530 + "requires": {
  5531 + "ms": "2.0.0"
  5532 + }
  5533 + },
  5534 + "ms": {
  5535 + "version": "2.0.0",
  5536 + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1575472461218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
  5537 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
  5538 + "dev": true
  5539 + }
  5540 + }
  5541 + },
  5542 + "eslint-module-utils": {
  5543 + "version": "2.6.0",
  5544 + "resolved": "https://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.6.0.tgz",
  5545 + "integrity": "sha1-V569CU9Wr3eX0ZyYZsnJSGYpv6Y=",
  5546 + "dev": true,
  5547 + "requires": {
  5548 + "debug": "^2.6.9",
  5549 + "pkg-dir": "^2.0.0"
  5550 + },
  5551 + "dependencies": {
  5552 + "debug": {
  5553 + "version": "2.6.9",
  5554 + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
  5555 + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
  5556 + "dev": true,
  5557 + "requires": {
  5558 + "ms": "2.0.0"
  5559 + }
  5560 + },
  5561 + "find-up": {
  5562 + "version": "2.1.0",
  5563 + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz",
  5564 + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
  5565 + "dev": true,
  5566 + "requires": {
  5567 + "locate-path": "^2.0.0"
  5568 + }
  5569 + },
  5570 + "locate-path": {
  5571 + "version": "2.0.0",
  5572 + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz",
  5573 + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
  5574 + "dev": true,
  5575 + "requires": {
  5576 + "p-locate": "^2.0.0",
  5577 + "path-exists": "^3.0.0"
  5578 + }
  5579 + },
  5580 + "ms": {
  5581 + "version": "2.0.0",
  5582 + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1575472461218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
  5583 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
  5584 + "dev": true
  5585 + },
  5586 + "p-limit": {
  5587 + "version": "1.3.0",
  5588 + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz",
  5589 + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
  5590 + "dev": true,
  5591 + "requires": {
  5592 + "p-try": "^1.0.0"
  5593 + }
  5594 + },
  5595 + "p-locate": {
  5596 + "version": "2.0.0",
  5597 + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz",
  5598 + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
  5599 + "dev": true,
  5600 + "requires": {
  5601 + "p-limit": "^1.1.0"
  5602 + }
  5603 + },
  5604 + "p-try": {
  5605 + "version": "1.0.0",
  5606 + "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz",
  5607 + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
  5608 + "dev": true
  5609 + },
  5610 + "pkg-dir": {
  5611 + "version": "2.0.0",
  5612 + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz",
  5613 + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
  5614 + "dev": true,
  5615 + "requires": {
  5616 + "find-up": "^2.1.0"
  5617 + }
  5618 + }
  5619 + }
  5620 + },
  5621 + "eslint-plugin-es": {
  5622 + "version": "3.0.1",
  5623 + "resolved": "https://registry.npm.taobao.org/eslint-plugin-es/download/eslint-plugin-es-3.0.1.tgz",
  5624 + "integrity": "sha1-dafN/czdwFiZNK7rOEF18iHFeJM=",
  5625 + "dev": true,
  5626 + "requires": {
  5627 + "eslint-utils": "^2.0.0",
  5628 + "regexpp": "^3.0.0"
  5629 + }
  5630 + },
  5631 + "eslint-plugin-import": {
  5632 + "version": "2.20.2",
  5633 + "resolved": "https://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.20.2.tgz?cache=0&sync_timestamp=1585455691029&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-import%2Fdownload%2Feslint-plugin-import-2.20.2.tgz",
  5634 + "integrity": "sha1-kfw4B84Ivkg3FBJyyLmQc5BuWI0=",
  5635 + "dev": true,
  5636 + "requires": {
  5637 + "array-includes": "^3.0.3",
  5638 + "array.prototype.flat": "^1.2.1",
  5639 + "contains-path": "^0.1.0",
  5640 + "debug": "^2.6.9",
  5641 + "doctrine": "1.5.0",
  5642 + "eslint-import-resolver-node": "^0.3.2",
  5643 + "eslint-module-utils": "^2.4.1",
  5644 + "has": "^1.0.3",
  5645 + "minimatch": "^3.0.4",
  5646 + "object.values": "^1.1.0",
  5647 + "read-pkg-up": "^2.0.0",
  5648 + "resolve": "^1.12.0"
  5649 + },
  5650 + "dependencies": {
  5651 + "debug": {
  5652 + "version": "2.6.9",
  5653 + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
  5654 + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
  5655 + "dev": true,
  5656 + "requires": {
  5657 + "ms": "2.0.0"
  5658 + }
  5659 + },
  5660 + "find-up": {
  5661 + "version": "2.1.0",
  5662 + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz",
  5663 + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
  5664 + "dev": true,
  5665 + "requires": {
  5666 + "locate-path": "^2.0.0"
  5667 + }
  5668 + },
  5669 + "load-json-file": {
  5670 + "version": "2.0.0",
  5671 + "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz",
  5672 + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
  5673 + "dev": true,
  5674 + "requires": {
  5675 + "graceful-fs": "^4.1.2",
  5676 + "parse-json": "^2.2.0",
  5677 + "pify": "^2.0.0",
  5678 + "strip-bom": "^3.0.0"
  5679 + }
  5680 + },
  5681 + "locate-path": {
  5682 + "version": "2.0.0",
  5683 + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz",
  5684 + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
  5685 + "dev": true,
  5686 + "requires": {
  5687 + "p-locate": "^2.0.0",
  5688 + "path-exists": "^3.0.0"
  5689 + }
  5690 + },
  5691 + "ms": {
  5692 + "version": "2.0.0",
  5693 + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1575472461218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
  5694 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
  5695 + "dev": true
  5696 + },
  5697 + "p-limit": {
  5698 + "version": "1.3.0",
  5699 + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz",
  5700 + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
  5701 + "dev": true,
  5702 + "requires": {
  5703 + "p-try": "^1.0.0"
  5704 + }
  5705 + },
  5706 + "p-locate": {
  5707 + "version": "2.0.0",
  5708 + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz",
  5709 + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
  5710 + "dev": true,
  5711 + "requires": {
  5712 + "p-limit": "^1.1.0"
  5713 + }
  5714 + },
  5715 + "p-try": {
  5716 + "version": "1.0.0",
  5717 + "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz",
  5718 + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
  5719 + "dev": true
  5720 + },
  5721 + "parse-json": {
  5722 + "version": "2.2.0",
  5723 + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz",
  5724 + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
  5725 + "dev": true,
  5726 + "requires": {
  5727 + "error-ex": "^1.2.0"
  5728 + }
  5729 + },
  5730 + "path-type": {
  5731 + "version": "2.0.0",
  5732 + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz",
  5733 + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
  5734 + "dev": true,
  5735 + "requires": {
  5736 + "pify": "^2.0.0"
  5737 + }
  5738 + },
  5739 + "pify": {
  5740 + "version": "2.3.0",
  5741 + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-2.3.0.tgz",
  5742 + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
  5743 + "dev": true
  5744 + },
  5745 + "read-pkg": {
  5746 + "version": "2.0.0",
  5747 + "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz",
  5748 + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
  5749 + "dev": true,
  5750 + "requires": {
  5751 + "load-json-file": "^2.0.0",
  5752 + "normalize-package-data": "^2.3.2",
  5753 + "path-type": "^2.0.0"
  5754 + }
  5755 + },
  5756 + "read-pkg-up": {
  5757 + "version": "2.0.0",
  5758 + "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz?cache=0&sync_timestamp=1575620685999&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-2.0.0.tgz",
  5759 + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
  5760 + "dev": true,
  5761 + "requires": {
  5762 + "find-up": "^2.0.0",
  5763 + "read-pkg": "^2.0.0"
  5764 + }
  5765 + },
  5766 + "strip-bom": {
  5767 + "version": "3.0.0",
  5768 + "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz",
  5769 + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
  5770 + "dev": true
  5771 + }
  5772 + }
  5773 + },
  5774 + "eslint-plugin-node": {
  5775 + "version": "11.1.0",
  5776 + "resolved": "https://registry.npm.taobao.org/eslint-plugin-node/download/eslint-plugin-node-11.1.0.tgz",
  5777 + "integrity": "sha1-yVVEQW7kraJnQKMEdO78VALcZx0=",
  5778 + "dev": true,
  5779 + "requires": {
  5780 + "eslint-plugin-es": "^3.0.0",
  5781 + "eslint-utils": "^2.0.0",
  5782 + "ignore": "^5.1.1",
  5783 + "minimatch": "^3.0.4",
  5784 + "resolve": "^1.10.1",
  5785 + "semver": "^6.1.0"
  5786 + },
  5787 + "dependencies": {
  5788 + "ignore": {
  5789 + "version": "5.1.4",
  5790 + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.4.tgz",
  5791 + "integrity": "sha1-hLez2+ZFUrbvDsqZ9nQ9vsbZet8=",
  5792 + "dev": true
  5793 + },
  5794 + "semver": {
  5795 + "version": "6.3.0",
  5796 + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
  5797 + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
  5798 + "dev": true
  5799 + }
  5800 + }
  5801 + },
  5802 + "eslint-plugin-prettier": {
  5803 + "version": "3.1.3",
  5804 + "resolved": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.3.tgz?cache=0&sync_timestamp=1586740919303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-prettier%2Fdownload%2Feslint-plugin-prettier-3.1.3.tgz",
  5805 + "integrity": "sha1-rhFqD8DlmP2uSHQ6RDCQPeW05so=",
  5806 + "dev": true,
  5807 + "requires": {
  5808 + "prettier-linter-helpers": "^1.0.0"
  5809 + }
  5810 + },
  5811 + "eslint-plugin-promise": {
  5812 + "version": "4.2.1",
  5813 + "resolved": "https://registry.npm.taobao.org/eslint-plugin-promise/download/eslint-plugin-promise-4.2.1.tgz",
  5814 + "integrity": "sha1-hF/YsiYK2PglZMEiL85ErXHZQYo=",
  5815 + "dev": true
  5816 + },
  5817 + "eslint-plugin-standard": {
  5818 + "version": "4.0.1",
  5819 + "resolved": "https://registry.npm.taobao.org/eslint-plugin-standard/download/eslint-plugin-standard-4.0.1.tgz",
  5820 + "integrity": "sha1-/wUZ9/+v8RT3bRvXw5lu7w9uILQ=",
  5821 + "dev": true
  5822 + },
  5823 + "eslint-plugin-vue": {
  5824 + "version": "6.2.2",
  5825 + "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-6.2.2.tgz",
  5826 + "integrity": "sha1-J/7NmjokeJsPER7N1UCp5WGY4P4=",
  5827 + "dev": true,
  5828 + "requires": {
  5829 + "natural-compare": "^1.4.0",
  5830 + "semver": "^5.6.0",
  5831 + "vue-eslint-parser": "^7.0.0"
  5832 + }
  5833 + },
5028 5834 "eslint-scope": {
5029 5835 "version": "4.0.3",
5030 5836 "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz",
... ... @@ -5034,16 +5840,61 @@
5034 5840 "estraverse": "^4.1.1"
5035 5841 }
5036 5842 },
  5843 + "eslint-utils": {
  5844 + "version": "2.0.0",
  5845 + "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.0.0.tgz?cache=0&sync_timestamp=1577351142754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.0.0.tgz",
  5846 + "integrity": "sha1-e+HMcPJ6cqds0UqmmLyr7WiQ4c0=",
  5847 + "dev": true,
  5848 + "requires": {
  5849 + "eslint-visitor-keys": "^1.1.0"
  5850 + }
  5851 + },
5037 5852 "eslint-visitor-keys": {
5038 5853 "version": "1.1.0",
5039 5854 "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.1.0.tgz",
5040 5855 "integrity": "sha1-4qgs6oT/JGrW+1f5veW0ZiFFnsI="
5041 5856 },
  5857 + "espree": {
  5858 + "version": "6.2.1",
  5859 + "resolved": "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1588886720119&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz",
  5860 + "integrity": "sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o=",
  5861 + "dev": true,
  5862 + "requires": {
  5863 + "acorn": "^7.1.1",
  5864 + "acorn-jsx": "^5.2.0",
  5865 + "eslint-visitor-keys": "^1.1.0"
  5866 + },
  5867 + "dependencies": {
  5868 + "acorn": {
  5869 + "version": "7.2.0",
  5870 + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.2.0.tgz?cache=0&sync_timestamp=1589008014473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.2.0.tgz",
  5871 + "integrity": "sha1-F+p+QNfIZA/1SmlMiJwm8xcE7/4=",
  5872 + "dev": true
  5873 + }
  5874 + }
  5875 + },
5042 5876 "esprima": {
5043 5877 "version": "4.0.1",
5044 5878 "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
5045 5879 "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE="
5046 5880 },
  5881 + "esquery": {
  5882 + "version": "1.3.1",
  5883 + "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz",
  5884 + "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=",
  5885 + "dev": true,
  5886 + "requires": {
  5887 + "estraverse": "^5.1.0"
  5888 + },
  5889 + "dependencies": {
  5890 + "estraverse": {
  5891 + "version": "5.1.0",
  5892 + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.1.0.tgz?cache=0&sync_timestamp=1586968717941&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.1.0.tgz",
  5893 + "integrity": "sha1-N0MJ05/ZNa5QDnuS6Ka0xyDllkI=",
  5894 + "dev": true
  5895 + }
  5896 + }
  5897 + },
5047 5898 "esrecurse": {
5048 5899 "version": "4.2.1",
5049 5900 "resolved": "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz",
... ... @@ -5248,6 +6099,17 @@
5248 6099 }
5249 6100 }
5250 6101 },
  6102 + "external-editor": {
  6103 + "version": "3.1.0",
  6104 + "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz",
  6105 + "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=",
  6106 + "dev": true,
  6107 + "requires": {
  6108 + "chardet": "^0.7.0",
  6109 + "iconv-lite": "^0.4.24",
  6110 + "tmp": "^0.0.33"
  6111 + }
  6112 + },
5251 6113 "extglob": {
5252 6114 "version": "2.0.4",
5253 6115 "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
... ... @@ -5317,6 +6179,12 @@
5317 6179 "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.1.tgz",
5318 6180 "integrity": "sha1-VFFFB3xQFJHjOxXsQIwpQ3bpSuQ="
5319 6181 },
  6182 + "fast-diff": {
  6183 + "version": "1.2.0",
  6184 + "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz",
  6185 + "integrity": "sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM=",
  6186 + "dev": true
  6187 + },
5320 6188 "fast-glob": {
5321 6189 "version": "2.2.7",
5322 6190 "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1582318370324&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz",
... ... @@ -5355,6 +6223,24 @@
5355 6223 "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz",
5356 6224 "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4="
5357 6225 },
  6226 + "figures": {
  6227 + "version": "3.2.0",
  6228 + "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz",
  6229 + "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=",
  6230 + "dev": true,
  6231 + "requires": {
  6232 + "escape-string-regexp": "^1.0.5"
  6233 + }
  6234 + },
  6235 + "file-entry-cache": {
  6236 + "version": "5.0.1",
  6237 + "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz",
  6238 + "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=",
  6239 + "dev": true,
  6240 + "requires": {
  6241 + "flat-cache": "^2.0.1"
  6242 + }
  6243 + },
5358 6244 "file-loader": {
5359 6245 "version": "4.3.0",
5360 6246 "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz",
... ... @@ -5460,6 +6346,34 @@
5460 6346 "locate-path": "^3.0.0"
5461 6347 }
5462 6348 },
  6349 + "flat-cache": {
  6350 + "version": "2.0.1",
  6351 + "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz",
  6352 + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=",
  6353 + "dev": true,
  6354 + "requires": {
  6355 + "flatted": "^2.0.0",
  6356 + "rimraf": "2.6.3",
  6357 + "write": "1.0.3"
  6358 + },
  6359 + "dependencies": {
  6360 + "rimraf": {
  6361 + "version": "2.6.3",
  6362 + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1581229948248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz",
  6363 + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
  6364 + "dev": true,
  6365 + "requires": {
  6366 + "glob": "^7.1.3"
  6367 + }
  6368 + }
  6369 + }
  6370 + },
  6371 + "flatted": {
  6372 + "version": "2.0.2",
  6373 + "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz",
  6374 + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=",
  6375 + "dev": true
  6376 + },
5463 6377 "flush-write-stream": {
5464 6378 "version": "1.1.1",
5465 6379 "resolved": "http://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz",
... ... @@ -6208,6 +7122,12 @@
6208 7122 "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
6209 7123 "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
6210 7124 },
  7125 + "functional-red-black-tree": {
  7126 + "version": "1.0.1",
  7127 + "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz",
  7128 + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
  7129 + "dev": true
  7130 + },
6211 7131 "gauge": {
6212 7132 "version": "2.7.4",
6213 7133 "resolved": "https://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz",
... ... @@ -6956,6 +7876,130 @@
6956 7876 "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=",
6957 7877 "dev": true
6958 7878 },
  7879 + "inquirer": {
  7880 + "version": "7.1.0",
  7881 + "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.1.0.tgz",
  7882 + "integrity": "sha1-EpigGFmIPhfHJkuChwrhA0+S3Sk=",
  7883 + "dev": true,
  7884 + "requires": {
  7885 + "ansi-escapes": "^4.2.1",
  7886 + "chalk": "^3.0.0",
  7887 + "cli-cursor": "^3.1.0",
  7888 + "cli-width": "^2.0.0",
  7889 + "external-editor": "^3.0.3",
  7890 + "figures": "^3.0.0",
  7891 + "lodash": "^4.17.15",
  7892 + "mute-stream": "0.0.8",
  7893 + "run-async": "^2.4.0",
  7894 + "rxjs": "^6.5.3",
  7895 + "string-width": "^4.1.0",
  7896 + "strip-ansi": "^6.0.0",
  7897 + "through": "^2.3.6"
  7898 + },
  7899 + "dependencies": {
  7900 + "ansi-styles": {
  7901 + "version": "4.2.1",
  7902 + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.2.1.tgz",
  7903 + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=",
  7904 + "dev": true,
  7905 + "requires": {
  7906 + "@types/color-name": "^1.1.1",
  7907 + "color-convert": "^2.0.1"
  7908 + }
  7909 + },
  7910 + "chalk": {
  7911 + "version": "3.0.0",
  7912 + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1585815759944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz",
  7913 + "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=",
  7914 + "dev": true,
  7915 + "requires": {
  7916 + "ansi-styles": "^4.1.0",
  7917 + "supports-color": "^7.1.0"
  7918 + }
  7919 + },
  7920 + "cli-cursor": {
  7921 + "version": "3.1.0",
  7922 + "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz",
  7923 + "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=",
  7924 + "dev": true,
  7925 + "requires": {
  7926 + "restore-cursor": "^3.1.0"
  7927 + }
  7928 + },
  7929 + "color-convert": {
  7930 + "version": "2.0.1",
  7931 + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
  7932 + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
  7933 + "dev": true,
  7934 + "requires": {
  7935 + "color-name": "~1.1.4"
  7936 + }
  7937 + },
  7938 + "color-name": {
  7939 + "version": "1.1.4",
  7940 + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
  7941 + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
  7942 + "dev": true
  7943 + },
  7944 + "has-flag": {
  7945 + "version": "4.0.0",
  7946 + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
  7947 + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
  7948 + "dev": true
  7949 + },
  7950 + "is-fullwidth-code-point": {
  7951 + "version": "3.0.0",
  7952 + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz",
  7953 + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
  7954 + "dev": true
  7955 + },
  7956 + "mimic-fn": {
  7957 + "version": "2.1.0",
  7958 + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
  7959 + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
  7960 + "dev": true
  7961 + },
  7962 + "onetime": {
  7963 + "version": "5.1.0",
  7964 + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz",
  7965 + "integrity": "sha1-//DzyRYX/mK7UBiWNumayKbfe+U=",
  7966 + "dev": true,
  7967 + "requires": {
  7968 + "mimic-fn": "^2.1.0"
  7969 + }
  7970 + },
  7971 + "restore-cursor": {
  7972 + "version": "3.1.0",
  7973 + "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz",
  7974 + "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=",
  7975 + "dev": true,
  7976 + "requires": {
  7977 + "onetime": "^5.1.0",
  7978 + "signal-exit": "^3.0.2"
  7979 + }
  7980 + },
  7981 + "string-width": {
  7982 + "version": "4.2.0",
  7983 + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.0.tgz",
  7984 + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=",
  7985 + "dev": true,
  7986 + "requires": {
  7987 + "emoji-regex": "^8.0.0",
  7988 + "is-fullwidth-code-point": "^3.0.0",
  7989 + "strip-ansi": "^6.0.0"
  7990 + }
  7991 + },
  7992 + "supports-color": {
  7993 + "version": "7.1.0",
  7994 + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz",
  7995 + "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=",
  7996 + "dev": true,
  7997 + "requires": {
  7998 + "has-flag": "^4.0.0"
  7999 + }
  8000 + }
  8001 + }
  8002 + },
6959 8003 "internal-ip": {
6960 8004 "version": "4.3.0",
6961 8005 "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz?cache=0&sync_timestamp=1584010513586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz",
... ... @@ -7263,6 +8307,12 @@
7263 8307 "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
7264 8308 "dev": true
7265 8309 },
  8310 + "is-string": {
  8311 + "version": "1.0.5",
  8312 + "resolved": "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz?cache=0&sync_timestamp=1576731545458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-string%2Fdownload%2Fis-string-1.0.5.tgz",
  8313 + "integrity": "sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y=",
  8314 + "dev": true
  8315 + },
7266 8316 "is-svg": {
7267 8317 "version": "3.0.0",
7268 8318 "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz",
... ... @@ -7416,6 +8466,12 @@
7416 8466 "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz",
7417 8467 "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
7418 8468 },
  8469 + "json-stable-stringify-without-jsonify": {
  8470 + "version": "1.0.1",
  8471 + "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz",
  8472 + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
  8473 + "dev": true
  8474 + },
7419 8475 "json-stringify-safe": {
7420 8476 "version": "5.0.1",
7421 8477 "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
... ... @@ -8292,6 +9348,12 @@
8292 9348 "integrity": "sha1-ieeKnSB9ePJ5mx6Vdkolv3GigyI=",
8293 9349 "dev": true
8294 9350 },
  9351 + "mute-stream": {
  9352 + "version": "0.0.8",
  9353 + "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz",
  9354 + "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=",
  9355 + "dev": true
  9356 + },
8295 9357 "mz": {
8296 9358 "version": "2.7.0",
8297 9359 "resolved": "http://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz",
... ... @@ -8325,6 +9387,12 @@
8325 9387 "to-regex": "^3.0.1"
8326 9388 }
8327 9389 },
  9390 + "natural-compare": {
  9391 + "version": "1.4.0",
  9392 + "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz",
  9393 + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
  9394 + "dev": true
  9395 + },
8328 9396 "negotiator": {
8329 9397 "version": "0.6.2",
8330 9398 "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
... ... @@ -8943,6 +10011,23 @@
8943 10011 "no-case": "^2.2.0"
8944 10012 }
8945 10013 },
  10014 + "parent-module": {
  10015 + "version": "1.0.1",
  10016 + "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz",
  10017 + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=",
  10018 + "dev": true,
  10019 + "requires": {
  10020 + "callsites": "^3.0.0"
  10021 + },
  10022 + "dependencies": {
  10023 + "callsites": {
  10024 + "version": "3.1.0",
  10025 + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz",
  10026 + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
  10027 + "dev": true
  10028 + }
  10029 + }
  10030 + },
8946 10031 "parse-asn1": {
8947 10032 "version": "5.1.5",
8948 10033 "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.5.tgz",
... ... @@ -9764,10 +10849,19 @@
9764 10849 "dev": true
9765 10850 },
9766 10851 "prettier": {
9767   - "version": "1.19.1",
9768   - "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz",
9769   - "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
9770   - "optional": true
  10852 + "version": "2.0.5",
  10853 + "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-2.0.5.tgz",
  10854 + "integrity": "sha1-1tVigkVSQ/L5LMFxZpLAiqMVItQ=",
  10855 + "dev": true
  10856 + },
  10857 + "prettier-linter-helpers": {
  10858 + "version": "1.0.0",
  10859 + "resolved": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz",
  10860 + "integrity": "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=",
  10861 + "dev": true,
  10862 + "requires": {
  10863 + "fast-diff": "^1.1.2"
  10864 + }
9771 10865 },
9772 10866 "pretty-error": {
9773 10867 "version": "2.1.1",
... ... @@ -9794,6 +10888,12 @@
9794 10888 "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
9795 10889 "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
9796 10890 },
  10891 + "progress": {
  10892 + "version": "2.0.3",
  10893 + "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz",
  10894 + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=",
  10895 + "dev": true
  10896 + },
9797 10897 "promise-inflight": {
9798 10898 "version": "1.0.1",
9799 10899 "resolved": "http://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz",
... ... @@ -10161,6 +11261,12 @@
10161 11261 "es-abstract": "^1.17.0-next.1"
10162 11262 }
10163 11263 },
  11264 + "regexpp": {
  11265 + "version": "3.1.0",
  11266 + "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz",
  11267 + "integrity": "sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=",
  11268 + "dev": true
  11269 + },
10164 11270 "regexpu-core": {
10165 11271 "version": "4.7.0",
10166 11272 "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz",
... ... @@ -10476,6 +11582,12 @@
10476 11582 "inherits": "^2.0.1"
10477 11583 }
10478 11584 },
  11585 + "run-async": {
  11586 + "version": "2.4.1",
  11587 + "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-async%2Fdownload%2Frun-async-2.4.1.tgz",
  11588 + "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=",
  11589 + "dev": true
  11590 + },
10479 11591 "run-queue": {
10480 11592 "version": "1.0.3",
10481 11593 "resolved": "http://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz",
... ... @@ -10484,6 +11596,15 @@
10484 11596 "aproba": "^1.1.1"
10485 11597 }
10486 11598 },
  11599 + "rxjs": {
  11600 + "version": "6.5.5",
  11601 + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.5.tgz",
  11602 + "integrity": "sha1-xciE4wlMjP7jG/J+uH5UzPyH+ew=",
  11603 + "dev": true,
  11604 + "requires": {
  11605 + "tslib": "^1.9.0"
  11606 + }
  11607 + },
10487 11608 "safe-area-insets": {
10488 11609 "version": "1.4.1",
10489 11610 "resolved": "https://registry.npm.taobao.org/safe-area-insets/download/safe-area-insets-1.4.1.tgz",
... ... @@ -11015,6 +12136,17 @@
11015 12136 "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
11016 12137 "dev": true
11017 12138 },
  12139 + "slice-ansi": {
  12140 + "version": "2.1.0",
  12141 + "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz",
  12142 + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=",
  12143 + "dev": true,
  12144 + "requires": {
  12145 + "ansi-styles": "^3.2.0",
  12146 + "astral-regex": "^1.0.0",
  12147 + "is-fullwidth-code-point": "^2.0.0"
  12148 + }
  12149 + },
11018 12150 "snapdragon": {
11019 12151 "version": "0.8.2",
11020 12152 "resolved": "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz",
... ... @@ -11732,6 +12864,46 @@
11732 12864 "util.promisify": "~1.0.0"
11733 12865 }
11734 12866 },
  12867 + "table": {
  12868 + "version": "5.4.6",
  12869 + "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz",
  12870 + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=",
  12871 + "dev": true,
  12872 + "requires": {
  12873 + "ajv": "^6.10.2",
  12874 + "lodash": "^4.17.14",
  12875 + "slice-ansi": "^2.1.0",
  12876 + "string-width": "^3.0.0"
  12877 + },
  12878 + "dependencies": {
  12879 + "emoji-regex": {
  12880 + "version": "7.0.3",
  12881 + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz",
  12882 + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
  12883 + "dev": true
  12884 + },
  12885 + "string-width": {
  12886 + "version": "3.1.0",
  12887 + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz",
  12888 + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
  12889 + "dev": true,
  12890 + "requires": {
  12891 + "emoji-regex": "^7.0.1",
  12892 + "is-fullwidth-code-point": "^2.0.0",
  12893 + "strip-ansi": "^5.1.0"
  12894 + }
  12895 + },
  12896 + "strip-ansi": {
  12897 + "version": "5.2.0",
  12898 + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz",
  12899 + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
  12900 + "dev": true,
  12901 + "requires": {
  12902 + "ansi-regex": "^4.1.0"
  12903 + }
  12904 + }
  12905 + }
  12906 + },
11735 12907 "tapable": {
11736 12908 "version": "1.1.3",
11737 12909 "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz",
... ... @@ -11774,6 +12946,12 @@
11774 12946 "worker-farm": "^1.7.0"
11775 12947 }
11776 12948 },
  12949 + "text-table": {
  12950 + "version": "0.2.0",
  12951 + "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz",
  12952 + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
  12953 + "dev": true
  12954 + },
11777 12955 "thenify": {
11778 12956 "version": "3.3.0",
11779 12957 "resolved": "http://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz",
... ... @@ -11801,6 +12979,12 @@
11801 12979 "neo-async": "^2.6.0"
11802 12980 }
11803 12981 },
  12982 + "through": {
  12983 + "version": "2.3.8",
  12984 + "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
  12985 + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
  12986 + "dev": true
  12987 + },
11804 12988 "through2": {
11805 12989 "version": "2.0.5",
11806 12990 "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
... ... @@ -11830,6 +13014,15 @@
11830 13014 "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
11831 13015 "dev": true
11832 13016 },
  13017 + "tmp": {
  13018 + "version": "0.0.33",
  13019 + "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1588178820677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz",
  13020 + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
  13021 + "dev": true,
  13022 + "requires": {
  13023 + "os-tmpdir": "~1.0.2"
  13024 + }
  13025 + },
11833 13026 "to-array": {
11834 13027 "version": "0.1.4",
11835 13028 "resolved": "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz",
... ... @@ -12358,6 +13551,12 @@
12358 13551 "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1585684408543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
12359 13552 "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4="
12360 13553 },
  13554 + "v8-compile-cache": {
  13555 + "version": "2.1.0",
  13556 + "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz",
  13557 + "integrity": "sha1-4U3jezGm0ZT1aQ1n78Tn9vxqsw4=",
  13558 + "dev": true
  13559 + },
12361 13560 "validate-npm-package-license": {
12362 13561 "version": "3.0.4",
12363 13562 "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz",
... ... @@ -12404,6 +13603,32 @@
12404 13603 "resolved": "https://registry.npm.taobao.org/vue-class-component/download/vue-class-component-6.3.2.tgz",
12405 13604 "integrity": "sha1-5gN+hNHfKvO95PRV5Qyhue7AK+Y="
12406 13605 },
  13606 + "vue-eslint-parser": {
  13607 + "version": "7.1.0",
  13608 + "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.1.0.tgz?cache=0&sync_timestamp=1589539313907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.1.0.tgz",
  13609 + "integrity": "sha1-nNvMgj5lawh1B6GRFzK4Z6wQHoM=",
  13610 + "dev": true,
  13611 + "requires": {
  13612 + "debug": "^4.1.1",
  13613 + "eslint-scope": "^5.0.0",
  13614 + "eslint-visitor-keys": "^1.1.0",
  13615 + "espree": "^6.2.1",
  13616 + "esquery": "^1.0.1",
  13617 + "lodash": "^4.17.15"
  13618 + },
  13619 + "dependencies": {
  13620 + "eslint-scope": {
  13621 + "version": "5.0.0",
  13622 + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.0.0.tgz",
  13623 + "integrity": "sha1-6HyIh8c+jR7ITxylkWRcNYv8j7k=",
  13624 + "dev": true,
  13625 + "requires": {
  13626 + "esrecurse": "^4.1.0",
  13627 + "estraverse": "^4.1.1"
  13628 + }
  13629 + }
  13630 + }
  13631 + },
12407 13632 "vue-hot-reload-api": {
12408 13633 "version": "2.3.4",
12409 13634 "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz",
... ... @@ -12912,6 +14137,15 @@
12912 14137 "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz",
12913 14138 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
12914 14139 },
  14140 + "write": {
  14141 + "version": "1.0.3",
  14142 + "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz",
  14143 + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=",
  14144 + "dev": true,
  14145 + "requires": {
  14146 + "mkdirp": "^0.5.1"
  14147 + }
  14148 + },
12915 14149 "ws": {
12916 14150 "version": "6.2.1",
12917 14151 "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&sync_timestamp=1587811730960&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz",
... ...
... ... @@ -60,13 +60,25 @@
60 60 "@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.0-26920200424005",
61 61 "@dcloudio/webpack-uni-mp-loader": "^2.0.0-26920200424005",
62 62 "@dcloudio/webpack-uni-pages-loader": "^2.0.0-26920200424005",
  63 + "@typescript-eslint/eslint-plugin": "^3.0.0",
  64 + "@typescript-eslint/parser": "^3.0.0",
63 65 "@vue/cli-plugin-babel": "~4.3.0",
64 66 "@vue/cli-plugin-typescript": "*",
65 67 "@vue/cli-service": "~4.3.0",
66 68 "babel-plugin-import": "^1.11.0",
67 69 "cross-env": "^7.0.2",
  70 + "eslint": "^7.0.0",
  71 + "eslint-config-prettier": "^6.11.0",
  72 + "eslint-config-standard": "^14.1.1",
  73 + "eslint-plugin-import": "^2.20.2",
  74 + "eslint-plugin-node": "^11.1.0",
  75 + "eslint-plugin-prettier": "^3.1.3",
  76 + "eslint-plugin-promise": "^4.2.1",
  77 + "eslint-plugin-standard": "^4.0.1",
  78 + "eslint-plugin-vue": "^6.2.2",
68 79 "node-sass": "^4.14.0",
69 80 "postcss-comment": "^2.0.0",
  81 + "prettier": "^2.0.5",
70 82 "sass-loader": "^8.0.2",
71 83 "typescript": "^3.0.0",
72 84 "vue-template-compiler": "^2.6.11"
... ...
src/components/CommodityCard/CommodityCard.vue
1 1 <template>
2   - <view class="card" @tap="toGoods(goods.id?goods.id:goods.pid,goods.goodType?goods.goodType:goods.p_root_index)">
3   - <image mode="widthFix" :src="goods.imgurl?goods.imgurl:goods.pic" ></image>
4   - <view class="name">{{goods.name?goods.name:goods.p_name}}</view>
5   - <view class="info">
6   - <view class="priceBox">
7   - <view class="price">{{goods.price?goods.price:goods.real_price}}</view>
8   - <view class="originCost">
9   - {{goods.rsSon.Max_Price?goods.rsSon.Max_Price:goods.old_price}}
10   - </view>
11   - </view>
12   - <view class="trade_num">{{goods.trade_num}}人购买</view>
13   - </view>
14   - </view>
  2 + <view
  3 + class="card"
  4 + @tap="toGoods(goods.id?goods.id:goods.pid,goods.goodType?goods.goodType:goods.p_root_index)"
  5 + >
  6 + <image
  7 + mode="widthFix"
  8 + :src="goods.imgurl?goods.imgurl:goods.pic"
  9 + ></image>
  10 + <view class="name">{{goods.name?goods.name:goods.p_name}}</view>
  11 + <view class="info">
  12 + <view class="priceBox">
  13 + <view class="price">{{goods.price?goods.price:goods.real_price}}</view>
  14 + <view class="originCost">
  15 + {{goods.rsSon.Max_Price?goods.rsSon.Max_Price:goods.old_price}}
  16 + </view>
  17 + </view>
  18 + <view class="trade_num">{{goods.trade_num}}人购买</view>
  19 + </view>
  20 + </view>
15 21 </template>
16 22  
17 23 <script>
18   - export default {
19   - props: {
20   - /**
21   - * 商品数据
22   - */
23   - goods: {
24   - id: Number,
25   - imgurl: String,
26   - name: String,
27   - rsSon:Object,
28   - originCost:String,
29   - price: String,
30   - trade_num:String,
31   - goodType:String,
32   - }
33   -
34   - },
35   - created() {
36   - // console.log(this.goods)
37   - },
38   - data() {
39   - return {
40   -
41   - };
42   - },
43   - methods:{
44   - toGoods(id,type){
45   - uni.navigateTo({
46   - url: `../frameDetail/frameDetail?oderId=`+id,
47   - success: res => {},
48   - fail: () => {},
49   - complete: () => {}
50   - });
51   - console.log('toGoods =====> id:'+id +"======>type:"+type)
52   - switch(type){
53   - case 1:
54   - uni.navigateTo({
55   - url: `../frameDetail/frameDetail?oderId=`+id+`&goodType=`+type,
56   - success: res => {},
57   - fail: () => {},
58   - complete: () => {}
59   - });
60   - break;
61   - case 2:
62   - uni.navigateTo({
63   - url: `../frameDetail/frameDetail?oderId=`+id+`&goodType=`+type,
64   - success: res => {},
65   - fail: () => {},
66   - complete: () => {}
67   - });
68   - break;
69   - case 3:
70   - uni.navigateTo({
71   - url: `../frameDetail/frameDetail?oderId=`+id+`&goodType=`+type,
72   - success: res => {},
73   - fail: () => {},
74   - complete: () => {}
75   - });
76   - break;
77   - case 4:
78   - uni.navigateTo({
79   - url: `../frameDetail/frameDetail?oderId=`+id+`&goodType=`+type,
80   - success: res => {},
81   - fail: () => {},
82   - complete: () => {}
83   - });
84   - break;
85   - default :
86   - break
87   - }
88   - }
89   - }
90   - }
  24 +export default {
  25 + props: {
  26 + /**
  27 + * 商品数据
  28 + */
  29 + goods: {
  30 + id: Number,
  31 + imgurl: String,
  32 + name: String,
  33 + rsSon: Object,
  34 + originCost: String,
  35 + price: String,
  36 + trade_num: String,
  37 + goodType: String
  38 + }
  39 +
  40 + },
  41 + created () {
  42 + // console.log(this.goods)
  43 + },
  44 + data () {
  45 + return {
  46 +
  47 + }
  48 + },
  49 + methods: {
  50 + toGoods (id, type) {
  51 + console.log('---', '../frameDetail/frameDetail?oderId=' + id)
  52 + uni.navigateTo({
  53 + url: '../frameDetail/frameDetail?oderId=' + id,
  54 + success: res => {},
  55 + fail: () => {},
  56 + complete: () => {}
  57 + })
  58 + console.log('toGoods =====> id:' + id + '======>type:' + type)
  59 + switch (type) {
  60 + case 1:
  61 + uni.navigateTo({
  62 + url: '../frameDetail/frameDetail?oderId=' + id + '&goodType=' + type,
  63 + success: res => {},
  64 + fail: () => {},
  65 + complete: () => {}
  66 + })
  67 + break
  68 + case 2:
  69 + uni.navigateTo({
  70 + url: '../frameDetail/frameDetail?oderId=' + id + '&goodType=' + type,
  71 + success: res => {},
  72 + fail: () => {},
  73 + complete: () => {}
  74 + })
  75 + break
  76 + case 3:
  77 + uni.navigateTo({
  78 + url: '../frameDetail/frameDetail?oderId=' + id + '&goodType=' + type,
  79 + success: res => {},
  80 + fail: () => {},
  81 + complete: () => {}
  82 + })
  83 + break
  84 + case 4:
  85 + uni.navigateTo({
  86 + url: '../frameDetail/frameDetail?oderId=' + id + '&goodType=' + type,
  87 + success: res => {},
  88 + fail: () => {},
  89 + complete: () => {}
  90 + })
  91 + break
  92 + default :
  93 + break
  94 + }
  95 + }
  96 + }
  97 +}
91 98 </script>
92 99  
93 100 <style lang="scss">
94   - image{
95   - width: 100%;
96   - height: 120rpx;
97   - }
98   - .name{
99   - width: 92%;
100   - height: 54rpx;
101   - padding: 5px 4%;
102   - display: -webkit-box;
103   - -webkit-box-orient: vertical;
104   - -webkit-line-clamp: 2;
105   - text-align: justify;
106   - overflow: hidden;
107   - font-size: 24rpx;
108   - color: #333333;
109   - }
110   - .info{
111   - display: flex;
112   - justify-content: space-between;
113   - align-items: center;
114   - width: 92%;
115   - padding: 5px 4% 5px 4%;
116   - .priceBox{
117   - display: flex;
118   - justify-content: space-between;
119   - align-items: center;
120   - .price{
121   - color: #EB5D3B;
122   - font-size: 28rpx;
123   - font-weight: 600;
124   - margin-right: 10rpx;
125   - }
126   - .originCost{
127   - text-decoration:line-through;
128   - color: #999999;
129   - font-size: 20rpx;
130   - }
131   -
132   - }
133   - .trade_num{
134   - color: #999999;
135   - font-size: 20rpx;
136   - }
137   - }
138   -</style>
139 101 \ No newline at end of file
  102 +image {
  103 + width: 100%;
  104 + height: 120rpx;
  105 +}
  106 +.name {
  107 + width: 92%;
  108 + height: 54rpx;
  109 + padding: 5px 4%;
  110 + display: -webkit-box;
  111 + -webkit-box-orient: vertical;
  112 + -webkit-line-clamp: 2;
  113 + text-align: justify;
  114 + overflow: hidden;
  115 + font-size: 24rpx;
  116 + color: #333333;
  117 +}
  118 +.info {
  119 + display: flex;
  120 + justify-content: space-between;
  121 + align-items: center;
  122 + width: 92%;
  123 + padding: 5px 4% 5px 4%;
  124 + .priceBox {
  125 + display: flex;
  126 + justify-content: space-between;
  127 + align-items: center;
  128 + .price {
  129 + color: #eb5d3b;
  130 + font-size: 28rpx;
  131 + font-weight: 600;
  132 + margin-right: 10rpx;
  133 + }
  134 + .originCost {
  135 + text-decoration: line-through;
  136 + color: #999999;
  137 + font-size: 20rpx;
  138 + }
  139 + }
  140 + .trade_num {
  141 + color: #999999;
  142 + font-size: 20rpx;
  143 + }
  144 +}
  145 +</style>
... ...
src/components/SimpleAddress/SimpleAddress.vue
1 1 <template>
2   - <view class="simple-address" v-if="showPopup" @touchmove.stop.prevent="clear">
3   - <!-- 遮罩层 -->
4   - <view
5   - class="simple-address-mask"
6   - @touchmove.stop.prevent="clear"
7   - v-if="maskClick"
8   - :class="[ani + '-mask', animation ? 'mask-ani' : '']"
9   - :style="{
10   - 'background-color': maskBgColor
11   - }"
12   - @tap="hideMask(true)"
13   - ></view>
  2 + <view
  3 + class="simple-address"
  4 + v-if="showPopup"
  5 + @touchmove.stop.prevent="clear"
  6 + >
  7 + <!-- 遮罩层 -->
  8 + <view
  9 + class="simple-address-mask"
  10 + @touchmove.stop.prevent="clear"
  11 + v-if="maskClick"
  12 + :class="[ani + '-mask', animation ? 'mask-ani' : '']"
  13 + :style="{
  14 + 'background-color': maskBgColor
  15 + }"
  16 + @tap="hideMask(true)"
  17 + ></view>
14 18  
15   - <view class="simple-address-content simple-address--fixed" :class="[type, ani + '-content', animation ? 'content-ani' : '']">
16   - <view class="simple-address__header">
17   - <view class="simple-address__header-btn-box" @click="pickerCancel">
18   - <text class="simple-address__header-text" :style="{ color: cancelColor, fontSize: btnFontSize }">取消</text>
19   - </view>
20   - <view class="simple-address__header-btn-box" @click="pickerConfirm">
21   - <text class="simple-address__header-text" :style="{ color: confirmColor || themeColor, fontSize: btnFontSize }">确定</text>
22   - </view>
23   - </view>
24   - <view class="simple-address__box">
25   - <picker-view indicator-style="height: 70rpx;" class="simple-address-view" :value="pickerValue" @change="pickerChange">
26   - <picker-view-column>
27   - <!-- #ifndef APP-NVUE -->
28   - <view class="picker-item" :style="{ fontSize: fontSize }" v-for="(item, index) in provinceDataList" :key="index">{{ item.label }}</view>
29   - <!-- #endif -->
30   - <!-- #ifdef APP-NVUE -->
31   - <text class="picker-item" :style="{ fontSize: fontSize }" v-for="(item, index) in provinceDataList" :key="index">{{ item.label }}</text>
32   - <!-- #endif -->
33   - </picker-view-column>
34   - <picker-view-column>
35   - <!-- #ifndef APP-NVUE -->
36   - <view class="picker-item" :style="{ fontSize: fontSize }" v-for="(item, index) in cityDataList" :key="index">{{ item.label }}</view>
37   - <!-- #endif -->
38   - <!-- #ifdef APP-NVUE -->
39   - <text class="picker-item" :style="{ fontSize: fontSize }" v-for="(item, index) in cityDataList" :key="index">{{ item.label }}</text>
40   - <!-- #endif -->
41   - </picker-view-column>
42   - <picker-view-column>
43   - <!-- #ifndef APP-NVUE -->
44   - <view class="picker-item" :style="{ fontSize: fontSize }" v-for="(item, index) in areaDataList" :key="index">{{ item.label }}</view>
45   - <!-- #endif -->
46   - <!-- #ifdef APP-NVUE -->
47   - <text class="picker-item" :style="{ fontSize: fontSize }" v-for="(item, index) in areaDataList" :key="index">{{ item.label }}</text>
48   - <!-- #endif -->
49   - </picker-view-column>
50   - </picker-view>
51   - </view>
52   - </view>
53   - </view>
  19 + <view
  20 + class="simple-address-content simple-address--fixed"
  21 + :class="[type, ani + '-content', animation ? 'content-ani' : '']"
  22 + >
  23 + <view class="simple-address__header">
  24 + <view
  25 + class="simple-address__header-btn-box"
  26 + @click="pickerCancel"
  27 + >
  28 + <text
  29 + class="simple-address__header-text"
  30 + :style="{ color: cancelColor, fontSize: btnFontSize }"
  31 + >取消</text>
  32 + </view>
  33 + <view
  34 + class="simple-address__header-btn-box"
  35 + @click="pickerConfirm"
  36 + >
  37 + <text
  38 + class="simple-address__header-text"
  39 + :style="{ color: confirmColor || themeColor, fontSize: btnFontSize }"
  40 + >确定</text>
  41 + </view>
  42 + </view>
  43 + <view class="simple-address__box">
  44 + <picker-view
  45 + indicator-style="height: 70rpx;"
  46 + class="simple-address-view"
  47 + :value="pickerValue"
  48 + @change="pickerChange"
  49 + >
  50 + <picker-view-column>
  51 + <!-- #ifndef APP-NVUE -->
  52 + <view
  53 + class="picker-item"
  54 + :style="{ fontSize: fontSize }"
  55 + v-for="(item, index) in provinceDataList"
  56 + :key="index"
  57 + >{{ item.label }}</view>
  58 + <!-- #endif -->
  59 + <!-- #ifdef APP-NVUE -->
  60 + <text
  61 + class="picker-item"
  62 + :style="{ fontSize: fontSize }"
  63 + v-for="(item, index) in provinceDataList"
  64 + :key="index"
  65 + >{{ item.label }}</text>
  66 + <!-- #endif -->
  67 + </picker-view-column>
  68 + <picker-view-column>
  69 + <!-- #ifndef APP-NVUE -->
  70 + <view
  71 + class="picker-item"
  72 + :style="{ fontSize: fontSize }"
  73 + v-for="(item, index) in cityDataList"
  74 + :key="index"
  75 + >{{ item.label }}</view>
  76 + <!-- #endif -->
  77 + <!-- #ifdef APP-NVUE -->
  78 + <text
  79 + class="picker-item"
  80 + :style="{ fontSize: fontSize }"
  81 + v-for="(item, index) in cityDataList"
  82 + :key="index"
  83 + >{{ item.label }}</text>
  84 + <!-- #endif -->
  85 + </picker-view-column>
  86 + <picker-view-column>
  87 + <!-- #ifndef APP-NVUE -->
  88 + <view
  89 + class="picker-item"
  90 + :style="{ fontSize: fontSize }"
  91 + v-for="(item, index) in areaDataList"
  92 + :key="index"
  93 + >{{ item.label }}</view>
  94 + <!-- #endif -->
  95 + <!-- #ifdef APP-NVUE -->
  96 + <text
  97 + class="picker-item"
  98 + :style="{ fontSize: fontSize }"
  99 + v-for="(item, index) in areaDataList"
  100 + :key="index"
  101 + >{{ item.label }}</text>
  102 + <!-- #endif -->
  103 + </picker-view-column>
  104 + </picker-view>
  105 + </view>
  106 + </view>
  107 + </view>
54 108 </template>
55 109  
56 110 <script>
... ... @@ -74,347 +128,346 @@
74 128 * @example <simple-address ref="simpleAddress" :pickerValueDefault="cityPickerValueDefault" @onConfirm="onConfirm" themeColor='#007AFF'></simple-address>
75 129 */
76 130  
77   -import provinceData from './cityData/province.js';
78   -import cityData from './cityData/city.js';
79   -import areaData from './cityData/area.js';
  131 +import provinceData from './cityData/province.js'
  132 +import cityData from './cityData/city.js'
  133 +import areaData from './cityData/area.js'
80 134 export default {
81   - name: 'simpleAddress',
82   - props: {
83   - mode: {
84   - // 地址类型
85   - // default 则代表老版本根据index索引获取数据
86   - //
87   - type: String,
88   - default: 'default'
89   - },
90   - // 开启动画
91   - animation: {
92   - type: Boolean,
93   - default: true
94   - },
95   - /* 弹出层类型,可选值;
96   - bottom:底部弹出层
97   - */
98   - type: {
99   - type: String,
100   - default: 'bottom'
101   - },
102   - // maskClick
103   - maskClick: {
104   - type: Boolean,
105   - default: true
106   - },
107   - show: {
108   - type: Boolean,
109   - default: true
110   - },
111   - maskBgColor: {
112   - type: String,
113   - default: 'rgba(0, 0, 0, 0.4)' //背景颜色 rgba(0, 0, 0, 0.4) 为空则调用 uni.scss
114   - },
115   - themeColor: {
116   - type: String,
117   - default: '' // 确认按钮颜色(向下兼容)
118   - },
119   - cancelColor: {
120   - type: String,
121   - default: '' // 取消按钮颜色
122   - },
123   - confirmColor: {
124   - type: String,
125   - default: '' // 确认按钮颜色
126   - },
127   - fontSize: {
128   - type: String,
129   - default: '28rpx' // picker-item字体大小
130   - },
131   - btnFontSize: {
132   - type: String,
133   - default: '' // 按钮的字体大小
134   - },
135   - /* 默认值 */
136   - pickerValueDefault: {
137   - type: Array,
138   - default() {
139   - return [0, 0, 0];
140   - }
141   - }
142   - },
143   - data() {
144   - return {
145   - ani: '',
146   - showPopup: false,
147   - pickerValue: [0, 0, 0],
148   - provinceDataList: [],
149   - cityDataList: [],
150   - areaDataList: []
151   - };
152   - },
153   - watch: {
154   - show(newValue) {
155   - if (newValue) {
156   - this.open();
157   - } else {
158   - this.close();
159   - }
160   - },
161   - pickerValueDefault() {
162   - this.init();
163   - }
164   - },
165   - created() {
166   - this.init();
167   - },
168   - methods: {
169   - init() {
170   - this.handPickValueDefault(); // 对 pickerValueDefault 做兼容处理
171   - this.provinceDataList = provinceData;
172   - this.cityDataList = cityData[this.pickerValueDefault[0]];
173   - this.areaDataList = areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]];
174   - this.pickerValue = this.pickerValueDefault;
175   - },
176   - handPickValueDefault() {
177   - if (this.pickerValueDefault !== [0, 0, 0]) {
178   - if (this.pickerValueDefault[0] > provinceData.length - 1) {
179   - this.pickerValueDefault[0] = provinceData.length - 1;
180   - }
181   - if (this.pickerValueDefault[1] > cityData[this.pickerValueDefault[0]].length - 1) {
182   - this.pickerValueDefault[1] = cityData[this.pickerValueDefault[0]].length - 1;
183   - }
184   - if (this.pickerValueDefault[2] > areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]].length - 1) {
185   - this.pickerValueDefault[2] = areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]].length - 1;
186   - }
187   - }
188   - },
189   - pickerChange(e) {
190   - let changePickerValue = e.detail.value;
191   - if (this.pickerValue[0] !== changePickerValue[0]) {
192   - // 第一级发生滚动
193   - this.cityDataList = cityData[changePickerValue[0]];
194   - this.areaDataList = areaData[changePickerValue[0]][0];
195   - changePickerValue[1] = 0;
196   - changePickerValue[2] = 0;
197   - } else if (this.pickerValue[1] !== changePickerValue[1]) {
198   - // 第二级滚动
199   - this.areaDataList = areaData[changePickerValue[0]][changePickerValue[1]];
200   - changePickerValue[2] = 0;
201   - }
202   - this.pickerValue = changePickerValue;
203   - this._$emit('onChange');
204   - },
205   - _$emit(emitName) {
206   - let pickObj = {
207   - label: this._getLabel(),
208   - value: this.pickerValue,
209   - cityCode: this._getCityCode(),
210   - areaCode: this._getAreaCode(),
211   - provinceCode: this._getProvinceCode(),
212   - labelArr: this._getLabel().split('-')
213   - };
214   - this.$emit(emitName, pickObj);
215   - },
216   - _getLabel() {
217   - let pcikerLabel =
218   - this.provinceDataList[this.pickerValue[0]].label + '-' + this.cityDataList[this.pickerValue[1]].label + '-' + this.areaDataList[this.pickerValue[2]].label;
219   - return pcikerLabel;
220   - },
221   - _getCityCode() {
222   - return this.cityDataList[this.pickerValue[1]].value;
223   - },
224   - _getProvinceCode() {
225   - return this.provinceDataList[this.pickerValue[0]].value;
226   - },
227   - _getAreaCode() {
228   - return this.areaDataList[this.pickerValue[2]].value;
229   - },
230   - queryIndex(params = [], type = 'value') {
231   - // params = [ 11 ,1101,110101 ];
232   - // 1.获取省份的index
233   - let provinceIndex = provinceData.findIndex(res => res[type] == params[0]);
234   - let cityIndex = cityData[provinceIndex].findIndex(res => res[type] == params[1]);
235   - let areaIndex = areaData[provinceIndex][cityIndex].findIndex(res => res[type] == params[2]);
236   - return {
237   - index: [provinceIndex, cityIndex, areaIndex],
238   - data: {
239   - province: provinceData[provinceIndex],
240   - city: cityData[provinceIndex][cityIndex],
241   - area: areaData[provinceIndex][cityIndex][areaIndex]
242   - }
243   - };
244   - },
245   - clear() {},
246   - hideMask() {
247   - this._$emit('onCancel');
248   - this.close();
249   - },
250   - pickerCancel() {
251   - this._$emit('onCancel');
252   - this.close();
253   - },
254   - pickerConfirm() {
255   - this._$emit('onConfirm');
256   - this.close();
257   - },
258   - open() {
259   - this.showPopup = true;
260   - this.$nextTick(() => {
261   - setTimeout(() => {
262   - this.ani = 'simple-' + this.type;
263   - }, 100);
264   - });
265   - },
266   - close(type) {
267   - if (!this.maskClick && type) return;
268   - this.ani = '';
269   - this.$nextTick(() => {
270   - setTimeout(() => {
271   - this.showPopup = false;
272   - }, 300);
273   - });
274   - }
275   - }
276   -};
  135 + name: 'simpleAddress',
  136 + props: {
  137 + mode: {
  138 + // 地址类型
  139 + // default 则代表老版本根据index索引获取数据
  140 + //
  141 + type: String,
  142 + default: 'default'
  143 + },
  144 + // 开启动画
  145 + animation: {
  146 + type: Boolean,
  147 + default: true
  148 + },
  149 + /* 弹出层类型,可选值;
  150 + *bottom:底部弹出层
  151 + */
  152 + type: {
  153 + type: String,
  154 + default: 'bottom'
  155 + },
  156 + // maskClick
  157 + maskClick: {
  158 + type: Boolean,
  159 + default: true
  160 + },
  161 + show: {
  162 + type: Boolean,
  163 + default: true
  164 + },
  165 + maskBgColor: {
  166 + type: String,
  167 + default: 'rgba(0, 0, 0, 0.4)' // 背景颜色 rgba(0, 0, 0, 0.4) 为空则调用 uni.scss
  168 + },
  169 + themeColor: {
  170 + type: String,
  171 + default: '' // 确认按钮颜色(向下兼容)
  172 + },
  173 + cancelColor: {
  174 + type: String,
  175 + default: '' // 取消按钮颜色
  176 + },
  177 + confirmColor: {
  178 + type: String,
  179 + default: '' // 确认按钮颜色
  180 + },
  181 + fontSize: {
  182 + type: String,
  183 + default: '28rpx' // picker-item字体大小
  184 + },
  185 + btnFontSize: {
  186 + type: String,
  187 + default: '' // 按钮的字体大小
  188 + },
  189 + /* 默认值 */
  190 + pickerValueDefault: {
  191 + type: Array,
  192 + default () {
  193 + return [0, 0, 0]
  194 + }
  195 + }
  196 + },
  197 + data () {
  198 + return {
  199 + ani: '',
  200 + showPopup: false,
  201 + pickerValue: [0, 0, 0],
  202 + provinceDataList: [],
  203 + cityDataList: [],
  204 + areaDataList: []
  205 + }
  206 + },
  207 + watch: {
  208 + show (newValue) {
  209 + if (newValue) {
  210 + this.open()
  211 + } else {
  212 + this.close()
  213 + }
  214 + },
  215 + pickerValueDefault () {
  216 + this.init()
  217 + }
  218 + },
  219 + created () {
  220 + this.init()
  221 + },
  222 + methods: {
  223 + init () {
  224 + this.handPickValueDefault() // 对 pickerValueDefault 做兼容处理
  225 + this.provinceDataList = provinceData
  226 + this.cityDataList = cityData[this.pickerValueDefault[0]]
  227 + this.areaDataList = areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]]
  228 + this.pickerValue = this.pickerValueDefault
  229 + },
  230 + handPickValueDefault () {
  231 + if (this.pickerValueDefault !== [0, 0, 0]) {
  232 + if (this.pickerValueDefault[0] > provinceData.length - 1) {
  233 + this.pickerValueDefault[0] = provinceData.length - 1
  234 + }
  235 + if (this.pickerValueDefault[1] > cityData[this.pickerValueDefault[0]].length - 1) {
  236 + this.pickerValueDefault[1] = cityData[this.pickerValueDefault[0]].length - 1
  237 + }
  238 + if (this.pickerValueDefault[2] > areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]].length - 1) {
  239 + this.pickerValueDefault[2] = areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]].length - 1
  240 + }
  241 + }
  242 + },
  243 + pickerChange (e) {
  244 + const changePickerValue = e.detail.value
  245 + if (this.pickerValue[0] !== changePickerValue[0]) {
  246 + // 第一级发生滚动
  247 + this.cityDataList = cityData[changePickerValue[0]]
  248 + this.areaDataList = areaData[changePickerValue[0]][0]
  249 + changePickerValue[1] = 0
  250 + changePickerValue[2] = 0
  251 + } else if (this.pickerValue[1] !== changePickerValue[1]) {
  252 + // 第二级滚动
  253 + this.areaDataList = areaData[changePickerValue[0]][changePickerValue[1]]
  254 + changePickerValue[2] = 0
  255 + }
  256 + this.pickerValue = changePickerValue
  257 + this._$emit('onChange')
  258 + },
  259 + _$emit (emitName) {
  260 + const pickObj = {
  261 + label: this._getLabel(),
  262 + value: this.pickerValue,
  263 + cityCode: this._getCityCode(),
  264 + areaCode: this._getAreaCode(),
  265 + provinceCode: this._getProvinceCode(),
  266 + labelArr: this._getLabel().split('-')
  267 + }
  268 + this.$emit(emitName, pickObj)
  269 + },
  270 + _getLabel () {
  271 + const pcikerLabel = this.provinceDataList[this.pickerValue[0]].label + '-' + this.cityDataList[this.pickerValue[1]].label + '-' + this.areaDataList[this.pickerValue[2]].label
  272 + return pcikerLabel
  273 + },
  274 + _getCityCode () {
  275 + return this.cityDataList[this.pickerValue[1]].value
  276 + },
  277 + _getProvinceCode () {
  278 + return this.provinceDataList[this.pickerValue[0]].value
  279 + },
  280 + _getAreaCode () {
  281 + return this.areaDataList[this.pickerValue[2]].value
  282 + },
  283 + queryIndex (params = [], type = 'value') {
  284 + // params = [ 11 ,1101,110101 ];
  285 + // 1.获取省份的index
  286 + const provinceIndex = provinceData.findIndex(res => res[type] === params[0])
  287 + const cityIndex = cityData[provinceIndex].findIndex(res => res[type] === params[1])
  288 + const areaIndex = areaData[provinceIndex][cityIndex].findIndex(res => res[type] === params[2])
  289 + return {
  290 + index: [provinceIndex, cityIndex, areaIndex],
  291 + data: {
  292 + province: provinceData[provinceIndex],
  293 + city: cityData[provinceIndex][cityIndex],
  294 + area: areaData[provinceIndex][cityIndex][areaIndex]
  295 + }
  296 + }
  297 + },
  298 + clear () {},
  299 + hideMask () {
  300 + this._$emit('onCancel')
  301 + this.close()
  302 + },
  303 + pickerCancel () {
  304 + this._$emit('onCancel')
  305 + this.close()
  306 + },
  307 + pickerConfirm () {
  308 + this._$emit('onConfirm')
  309 + this.close()
  310 + },
  311 + open () {
  312 + this.showPopup = true
  313 + this.$nextTick(() => {
  314 + setTimeout(() => {
  315 + this.ani = 'simple-' + this.type
  316 + }, 100)
  317 + })
  318 + },
  319 + close (type) {
  320 + if (!this.maskClick && type) return
  321 + this.ani = ''
  322 + this.$nextTick(() => {
  323 + setTimeout(() => {
  324 + this.showPopup = false
  325 + }, 300)
  326 + })
  327 + }
  328 + }
  329 +}
277 330 </script>
278 331  
279 332 <style lang="scss" scoped>
280 333 .simple-address {
281   - /* #ifndef APP-NVUE */
282   - display: flex;
283   - /* #endif */
284   - flex-direction: column;
  334 + /* #ifndef APP-NVUE */
  335 + display: flex;
  336 + /* #endif */
  337 + flex-direction: column;
285 338 }
286 339  
287 340 .simple-address-mask {
288   - position: fixed;
289   - bottom: 0;
290   - top: 0;
291   - left: 0;
292   - right: 0;
  341 + position: fixed;
  342 + bottom: 0;
  343 + top: 0;
  344 + left: 0;
  345 + right: 0;
293 346  
294   - transition-property: opacity;
295   - transition-duration: 0.3s;
296   - opacity: 0;
297   - /* #ifndef APP-NVUE */
298   - z-index: 99;
299   - /* #endif */
  347 + transition-property: opacity;
  348 + transition-duration: 0.3s;
  349 + opacity: 0;
  350 + /* #ifndef APP-NVUE */
  351 + z-index: 99;
  352 + /* #endif */
300 353 }
301 354  
302 355 .mask-ani {
303   - transition-property: opacity;
304   - transition-duration: 0.2s;
  356 + transition-property: opacity;
  357 + transition-duration: 0.2s;
305 358 }
306 359  
307 360 .simple-bottom-mask {
308   - opacity: 1;
  361 + opacity: 1;
309 362 }
310 363  
311 364 .simple-center-mask {
312   - opacity: 1;
  365 + opacity: 1;
313 366 }
314 367  
315 368 .simple-address--fixed {
316   - position: fixed;
317   - bottom: 0;
318   - left: 0;
319   - right: 0;
320   - transition-property: transform;
321   - transition-duration: 0.3s;
322   - transform: translateY(460rpx);
323   - /* #ifndef APP-NVUE */
324   - z-index: 99;
325   - /* #endif */
  369 + position: fixed;
  370 + bottom: 0;
  371 + left: 0;
  372 + right: 0;
  373 + transition-property: transform;
  374 + transition-duration: 0.3s;
  375 + transform: translateY(460rpx);
  376 + /* #ifndef APP-NVUE */
  377 + z-index: 99;
  378 + /* #endif */
326 379 }
327 380  
328 381 .simple-address-content {
329   - background-color: #ffffff;
  382 + background-color: #ffffff;
330 383 }
331 384  
332 385 .simple-content-bottom {
333   - bottom: 0;
334   - left: 0;
335   - right: 0;
336   - transform: translateY(500rpx);
  386 + bottom: 0;
  387 + left: 0;
  388 + right: 0;
  389 + transform: translateY(500rpx);
337 390 }
338 391  
339 392 .content-ani {
340   - transition-property: transform, opacity;
341   - transition-duration: 0.2s;
  393 + transition-property: transform, opacity;
  394 + transition-duration: 0.2s;
342 395 }
343 396  
344 397 .simple-bottom-content {
345   - transform: translateY(0);
  398 + transform: translateY(0);
346 399 }
347 400  
348 401 .simple-center-content {
349   - transform: scale(1);
350   - opacity: 1;
  402 + transform: scale(1);
  403 + opacity: 1;
351 404 }
352 405  
353 406 .simple-address__header {
354   - position: relative;
355   - /* #ifndef APP-NVUE */
356   - display: flex;
357   - /* #endif */
358   - flex-direction: row;
359   - flex-wrap: nowrap;
360   - justify-content: space-between;
361   - border-bottom-color: #f2f2f2;
362   - border-bottom-style: solid;
363   - border-bottom-width: 1rpx;
  407 + position: relative;
  408 + /* #ifndef APP-NVUE */
  409 + display: flex;
  410 + /* #endif */
  411 + flex-direction: row;
  412 + flex-wrap: nowrap;
  413 + justify-content: space-between;
  414 + border-bottom-color: #f2f2f2;
  415 + border-bottom-style: solid;
  416 + border-bottom-width: 1rpx;
364 417 }
365 418  
366 419 .simple-address--fixed-top {
367   - /* #ifndef APP-NVUE */
368   - display: flex;
369   - /* #endif */
370   - flex-direction: row;
371   - justify-content: space-between;
372   - border-top-color: $uni-border-color;
373   - border-top-style: solid;
374   - border-top-width: 1rpx;
  420 + /* #ifndef APP-NVUE */
  421 + display: flex;
  422 + /* #endif */
  423 + flex-direction: row;
  424 + justify-content: space-between;
  425 + border-top-color: $uni-border-color;
  426 + border-top-style: solid;
  427 + border-top-width: 1rpx;
375 428 }
376 429  
377 430 .simple-address__header-btn-box {
378   - /* #ifndef APP-NVUE */
379   - display: flex;
380   - /* #endif */
381   - flex-direction: row;
382   - align-items: center;
383   - justify-content: center;
384   - height: 70rpx;
  431 + /* #ifndef APP-NVUE */
  432 + display: flex;
  433 + /* #endif */
  434 + flex-direction: row;
  435 + align-items: center;
  436 + justify-content: center;
  437 + height: 70rpx;
385 438 }
386 439  
387 440 .simple-address__header-text {
388   - text-align: center;
389   - font-size: $uni-font-size-base;
390   - color: #1aad19;
391   - line-height: 70rpx;
392   - padding-left: 40rpx;
393   - padding-right: 40rpx;
  441 + text-align: center;
  442 + font-size: $uni-font-size-base;
  443 + color: #1aad19;
  444 + line-height: 70rpx;
  445 + padding-left: 40rpx;
  446 + padding-right: 40rpx;
394 447 }
395 448  
396 449 .simple-address__box {
397   - position: relative;
  450 + position: relative;
398 451 }
399 452  
400 453 .simple-address-view {
401   - position: relative;
402   - bottom: 0;
403   - left: 0;
404   - /* #ifndef APP-NVUE */
405   - width: 100%;
406   - /* #endif */
407   - /* #ifdef APP-NVUE */
408   - width: 750rpx;
409   - /* #endif */
410   - height: 408rpx;
411   - background-color: rgba(255, 255, 255, 1);
  454 + position: relative;
  455 + bottom: 0;
  456 + left: 0;
  457 + /* #ifndef APP-NVUE */
  458 + width: 100%;
  459 + /* #endif */
  460 + /* #ifdef APP-NVUE */
  461 + width: 750rpx;
  462 + /* #endif */
  463 + height: 408rpx;
  464 + background-color: rgba(255, 255, 255, 1);
412 465 }
413 466  
414 467 .picker-item {
415   - text-align: center;
416   - line-height: 70rpx;
417   - text-overflow: ellipsis;
418   - font-size: 28rpx;
  468 + text-align: center;
  469 + line-height: 70rpx;
  470 + text-overflow: ellipsis;
  471 + font-size: 28rpx;
419 472 }
420 473 </style>
... ...
... ... @@ -66,12 +66,18 @@
66 66 }
67 67 },
68 68 {
69   - "path" : "pages/addAddress/addAddress",
  69 + "path" : "pages/address/addAddress",
70 70 "style" : {
71 71 "navigationBarTitleText" : "新增地址"
72 72 }
73 73 },
74 74 {
  75 + "path" : "pages/address/addressList",
  76 + "style" : {
  77 + "navigationBarTitleText" : "地址管理"
  78 + }
  79 + },
  80 + {
75 81 "path" : "pages/confirmOrder/confirmOrder",
76 82 "style" : {
77 83 "navigationBarTitleText" : "确认订单"
... ... @@ -148,13 +154,24 @@
148 154 ]
149 155 },
150 156 "condition" : {
151   - //模式配置,仅开发期间生效
152   - "current" : 0, //当前激活的模式(list 的索引项)
  157 + "current" : 0,
153 158 "list" : [
154 159 {
155   - "name" : "", //模式名称
156   - "path" : "", //启动页面,必选
157   - "query" : "" //启动参数,在页面的onLoad函数里面得到
  160 + "name" : "首页",
  161 + "path" : "pages/index/index",
  162 + "query" : ""
  163 + }, {
  164 + "name" : "镜片、美瞳参数选购",
  165 + "path" : "pages/purchaseLenses/purchaseLenses",
  166 + "query" : ""
  167 + }, {
  168 + "name" : "新增地址",
  169 + "path" : "pages/address/addAddress",
  170 + "query" : ""
  171 + }, {
  172 + "name" : "地址管理",
  173 + "path" : "pages/address/addressList",
  174 + "query" : ""
158 175 }
159 176 ]
160 177 }
... ...
src/pages/addAddress/addAddress.vue
... ... @@ -1,111 +0,0 @@
1   -<template>
2   - <view class="wrap">
3   - <view class="content">
4   - <view class="item,name" >
5   - <text class="itemText">姓名</text>
6   - <input placeholder="收货人姓名(真实姓名)" placeholder-style="color:#B8B8B8"/>
7   - </view>
8   - <view class="item,phone">
9   - <text class="itemText">电话</text>
10   - <input placeholder="手机号" type="digit" placeholder-style="color:#B8B8B8"/>
11   - </view>
12   - <view class="item,area" >
13   - <text class="itemText">地区</text>
14   - <view class="btn" v-if="pickerText===''" @tap="openAddres">选择省/市/区</view>
15   - <view class="btn" v-else @tap="openAddres">{{pickerText}}</view>
16   - <simple-address ref="SimpleAddress" :pickerValueDefault="cityPickerValueDefault" @onConfirm="onConfirm" themeColor="#007AFF"></simple-address>
17   - </view>
18   - <view class="item,address" >
19   - <text class="itemText">详细地址</text>
20   - <input placeholder="街道、小区门牌等详细地址"/>
21   - </view>
22   - <view class="item,check" >
23   - <text class="itemText">设为默认地址</text>
24   - <switch checked="isDefalutAddress" color="#FF6B4A" style="transform:scale(0.6)" @change="changeDefalutAddress" />
25   - </view>
26   - <input />
27   - </view>
28   - <view class="button">保存并使用</view>
29   - </view>
30   -</template>
31   -
32   -<script>
33   - import SimpleAddress from '@/components/SimpleAddress/SimpleAddress.vue';
34   - export default {
35   - data() {
36   - return {
37   - cityPickerValueDefault: [0, 0, 1],
38   - pickerText: '',
39   - isDefalutAddress:true
40   -
41   - };
42   - },
43   - components: {
44   - SimpleAddress
45   - },
46   - methods: {
47   - openAddres() {
48   - this.cityPickerValueDefault = [0,0,1]
49   - this.$refs.SimpleAddress.open();
50   - },
51   - onConfirm(e) {
52   - this.pickerText = e.label;
53   - },
54   - changeDefalutAddress(e){
55   - this.isDefalutAddress = e.target.value
56   - }
57   - }
58   - }
59   -</script>
60   -
61   -<style lang="scss">
62   - .wrap{
63   - height: 100vh;
64   - background-color:#F2F2F2 ;
65   - font-family: PingFangSC-Regular;
66   - letter-spacing: -0.23px;
67   - padding-top: 19rpx;
68   - }
69   - .content{
70   - background-color: #FFFFFF;
71   - border-radius: 8px;
72   - border-radius: 8px;
73   - padding: 40rpx 56rpx;
74   - margin-left: 40rpx;
75   - width: 670rpx;
76   - box-sizing: border-box;
77   - .item{
78   - display: flex;
79   - justify-content: flex-start;
80   - font-size: 14px;
81   - align-items: center;
82   - height: 112rpx;
83   - border-bottom: 1rpx solid #E9E9E9;
84   - .itemText{
85   - width: 162rpx;
86   - font-family: PingFangSC-Regular;
87   - letter-spacing: -0.26px;
88   - }
89   - .btn{
90   - color: #333333 !important;
91   - }
92   - }
93   - .check{
94   - justify-content: space-between;
95   - }
96   - }
97   - .button{
98   - position: fixed;
99   - bottom: 0;
100   - left: 0;
101   - height: 112rpx;
102   - width: 100%;
103   - background: #FF6B4A;
104   - display: flex;
105   - justify-content: center;
106   - align-items: center;
107   - font-size: 16px;
108   - color: #FFFFFF;
109   - letter-spacing: -0.3px;
110   - }
111   -</style>
src/pages/address/addAddress.vue
... ... @@ -0,0 +1,255 @@
  1 +<template>
  2 + <form
  3 + class="wrap"
  4 + @submit="formSubmit"
  5 + @reset="formReset"
  6 + >
  7 + <view class="content">
  8 + <view class="item,name">
  9 + <text class="itemText">姓名</text>
  10 + <input
  11 + placeholder="收货人姓名(真实姓名)"
  12 + placeholder-style="color:#B8B8B8"
  13 + name="name"
  14 + :value="name"
  15 + />
  16 + </view>
  17 + <view class="item,phone">
  18 + <text class="itemText">电话</text>
  19 + <input
  20 + placeholder="手机号"
  21 + type="digit"
  22 + placeholder-style="color:#B8B8B8"
  23 + name="mobile"
  24 + v-model="mobile"
  25 + />
  26 + </view>
  27 + <view class="item,phone">
  28 + <text class="itemText">性别</text>
  29 + <picker
  30 + @change="bindPickerChange"
  31 + :value="index"
  32 + :range="sexArray"
  33 + name="sex"
  34 + >
  35 + <view class="uni-input">{{sexArray[sexIndex]}}</view>
  36 + </picker>
  37 + </view>
  38 + <view class="item,area">
  39 + <text class="itemText">地区</text>
  40 + <view
  41 + class="btn"
  42 + v-if="pickerText===''"
  43 + @tap="openAddres"
  44 + >选择省/市/区</view>
  45 + <view
  46 + class="btn"
  47 + v-else
  48 + @tap="openAddres"
  49 + >{{pickerText}}</view>
  50 + <simple-address
  51 + ref="SimpleAddress"
  52 + :pickerValueDefault="cityPickerValueDefault"
  53 + @onConfirm="onConfirm"
  54 + themeColor="#007AFF"
  55 + name="address"
  56 + ></simple-address>
  57 + </view>
  58 + <view class="item,address">
  59 + <text class="itemText">详细地址</text>
  60 + <input
  61 + placeholder="街道、小区门牌等详细地址"
  62 + name="addDetail"
  63 + :value="addDetial"
  64 + />
  65 + </view>
  66 + <view class="item,check">
  67 + <text class="itemText">设为默认地址</text>
  68 + <switch
  69 + :checked="isDefalutAddress"
  70 + color="#FF6B4A"
  71 + style="transform:scale(0.6)"
  72 + @change="changeDefalutAddress"
  73 + name="isDefault"
  74 + />
  75 + </view>
  76 + <input />
  77 + </view>
  78 + <button
  79 + form-type="submit"
  80 + class="button"
  81 + >保存并使用</button>
  82 + </form>
  83 +</template>
  84 +
  85 +<script>
  86 +import SimpleAddress from '@/components/SimpleAddress/SimpleAddress.vue'
  87 +import store from '@/store'
  88 +
  89 +export default {
  90 + data () {
  91 + return {
  92 + cityPickerValueDefault: [0, 0, 1],
  93 + pickerText: '',
  94 + isDefalutAddress: true,
  95 + sexArray: ['男', '女'],
  96 + sexIndex: 0,
  97 + flag: 0,
  98 + addId: undefined,
  99 + name: '',
  100 + mobile: '',
  101 + addDetial: '',
  102 + isDefault: 0
  103 + }
  104 + },
  105 + onLoad (option) {
  106 + const { addId } = option
  107 + if (addId) {
  108 + this.addId = addId
  109 + store.dispatch('address/details', {
  110 + add_id: addId
  111 + }).then(() => {
  112 + uni.setNavigationBarTitle({
  113 + title: '编辑地址'
  114 + })
  115 + const { name, mobile, sex, add_detail: addDetial, default: isDefault } = this.$store.state.address.details
  116 + console.log('---', this.$store.state.address.details)
  117 + const index = this.$refs.SimpleAddress.queryIndex(this.$store.state.address.details.address.split('-'), 'label')
  118 + this.cityPickerValueDefault = index.index
  119 + this.name = name
  120 + this.mobile = Number(mobile)
  121 + this.sexIndex = sex
  122 + this.addDetial = addDetial
  123 + this.isDefalutAddress = !!Number(isDefault)
  124 + })
  125 + }
  126 + },
  127 + components: {
  128 + SimpleAddress
  129 + },
  130 + methods: {
  131 + openAddres () {
  132 + this.cityPickerValueDefault = [0, 0, 1]
  133 + this.$refs.SimpleAddress.open()
  134 + },
  135 + onConfirm (e) {
  136 + this.pickerText = e.label
  137 + console.log('lll', e, this.pickerText)
  138 + },
  139 + changeDefalutAddress (e) {
  140 + this.isDefalutAddress = e.target.value
  141 + },
  142 + bindPickerChange (e) {
  143 + console.log('picker发送选择改变,携带值为', e.target.value)
  144 + this.sexIndex = e.target.value
  145 + },
  146 + formValidation (formdata) {
  147 + const { name, mobile, addDetail } = formdata
  148 + this.flag = false
  149 + if (name === '') {
  150 + uni.showModal({
  151 + content: '请输入姓名',
  152 + showCancel: false
  153 + })
  154 + return 0
  155 + }
  156 + if (!(/^1[3456789]\d{9}$/.test(mobile))) {
  157 + uni.showModal({
  158 + content: '请输入正确的手机号',
  159 + showCancel: false
  160 + })
  161 + return 0
  162 + }
  163 + if (this.pickerText === '') {
  164 + uni.showModal({
  165 + content: '请选择收货地区',
  166 + showCancel: false
  167 + })
  168 + return 0
  169 + }
  170 + if (addDetail === '') {
  171 + uni.showModal({
  172 + content: '请输入收货详细地址',
  173 + showCancel: false
  174 + })
  175 + return 0
  176 + }
  177 + this.flag = true
  178 + },
  179 + formSubmit (e) {
  180 + const formdata = e.detail.value
  181 + this.formValidation(formdata)
  182 +
  183 + const { name, mobile, addDetail, isDefault } = formdata
  184 + if (this.flag === true) {
  185 + const params = {
  186 + sex: this.sexIndex,
  187 + name,
  188 + address: this.pickerText,
  189 + mobile,
  190 + default: isDefault ? 1 : 0,
  191 + add_detail: addDetail,
  192 + longitude: 0,
  193 + latitude: 0
  194 + }
  195 + if (this.addId) {
  196 + params.add_id = this.addId
  197 + }
  198 + store.dispatch('address/edit', params)
  199 + }
  200 + }
  201 + }
  202 +}
  203 +</script>
  204 +
  205 +<style lang="scss">
  206 +.wrap {
  207 + height: 100vh;
  208 + background-color: #f2f2f2;
  209 + font-family: PingFangSC-Regular;
  210 + letter-spacing: -0.23px;
  211 + padding-top: 19rpx;
  212 +}
  213 +.content {
  214 + background-color: #ffffff;
  215 + border-radius: 8px;
  216 + border-radius: 8px;
  217 + padding: 40rpx 56rpx;
  218 + margin-left: 40rpx;
  219 + width: 670rpx;
  220 + box-sizing: border-box;
  221 + .item {
  222 + display: flex;
  223 + justify-content: flex-start;
  224 + font-size: 14px;
  225 + align-items: center;
  226 + height: 112rpx;
  227 + border-bottom: 1rpx solid #e9e9e9;
  228 + .itemText {
  229 + width: 162rpx;
  230 + font-family: PingFangSC-Regular;
  231 + letter-spacing: -0.26px;
  232 + }
  233 + .btn {
  234 + color: #333333 !important;
  235 + }
  236 + }
  237 + .check {
  238 + justify-content: space-between;
  239 + }
  240 +}
  241 +.button {
  242 + position: fixed;
  243 + bottom: 0;
  244 + left: 0;
  245 + height: 112rpx;
  246 + width: 100%;
  247 + background: #ff6b4a;
  248 + display: flex;
  249 + justify-content: center;
  250 + align-items: center;
  251 + font-size: 16px;
  252 + color: #ffffff;
  253 + letter-spacing: -0.3px;
  254 +}
  255 +</style>
... ...
src/pages/address/addressList.vue
... ... @@ -0,0 +1,168 @@
  1 +<template>
  2 + <view class="content">
  3 + <view
  4 + v-if="addressList.length !== 0"
  5 + class="list"
  6 + >
  7 + <view
  8 + v-for="(item, index) in addressList"
  9 + :key="index"
  10 + @tap="toEditAddress(item.add_id)"
  11 + class="order-user"
  12 + >
  13 + <view class="order-user-head">
  14 + <view class="name">
  15 + <view
  16 + v-if="item.default === '1'"
  17 + class="default"
  18 + ><text>默认</text></view>{{item.name}}
  19 + </view>
  20 + <text class="mobile">{{item.mobile}}</text>
  21 + </view>
  22 + <view class="order-user-body">
  23 + <image src="../../static/myorder-paying-location.png"></image>
  24 + <text class="address">{{item.address.replace(/[-]/g,' ')}}\n{{item.add_detail}}</text>
  25 + </view>
  26 + <image
  27 + v-if="item.default === '1'"
  28 + class="arrow"
  29 + src="../../static/right.png"
  30 + ></image>
  31 + <image
  32 + v-else
  33 + class="arrow pen"
  34 + src="../../static/icon-pen.png"
  35 + ></image>
  36 + </view>
  37 + </view>
  38 + <view
  39 + v-else
  40 + class="empty"
  41 + >
  42 + 暂无收货地址
  43 + </view>
  44 + <button class="add">新建收货地址</button>
  45 + </view>
  46 +</template>
  47 +
  48 +<script>
  49 +import store from '@/store'
  50 +export default {
  51 + data () {
  52 + return {}
  53 + },
  54 + computed: {
  55 + addressList () {
  56 + return this.$store.state.address.list
  57 + }
  58 + },
  59 + onLoad () {
  60 + store.dispatch('address/list')
  61 + },
  62 + methods: {
  63 + toEditAddress (addId) {
  64 + console.log('addId', addId)
  65 + uni.navigateTo({
  66 + url: `addAddress?addId=${addId}`,
  67 + fail: (error) => {
  68 + console.error('跳转出现错误', error)
  69 + }
  70 + })
  71 + }
  72 + }
  73 +}
  74 +</script>
  75 +
  76 +<style lang="scss">
  77 +.content {
  78 + min-height: 100vh;
  79 + background-color: #f2f2f2;
  80 + padding-top: 20rpx;
  81 + padding-bottom: 112rpx;
  82 + .order-user {
  83 + width: 670rpx;
  84 + height: 228rpx;
  85 + background: #ffffff;
  86 + border-radius: 14rpx;
  87 + margin: 0 auto;
  88 + margin-bottom: 20rpx;
  89 + position: relative;
  90 + .order-user-head {
  91 + display: flex;
  92 + height: 108rpx;
  93 + width: 100%;
  94 + align-items: center;
  95 + margin-left: 126rpx;
  96 + .name {
  97 + display: flex;
  98 + justify-content: space-between;
  99 + font-size: 14px;
  100 + color: #333333;
  101 + letter-spacing: -0.26px;
  102 + margin-right: 20rpx;
  103 + .default {
  104 + height: 40rpx;
  105 + width: 80rpx;
  106 + background-color: #4a90e2;
  107 + border-radius: 13px;
  108 + border-radius: 13px;
  109 + text-align: center;
  110 + margin-right: 20rpx;
  111 + text {
  112 + font-size: 12px;
  113 + color: #ffffff;
  114 + letter-spacing: -0.23px;
  115 + }
  116 + }
  117 + }
  118 + .mobile {
  119 + font-size: 14px;
  120 + color: #999999;
  121 + letter-spacing: -0.26px;
  122 + }
  123 + }
  124 + .order-user-body {
  125 + display: flex;
  126 + width: 100%;
  127 + image {
  128 + width: 24px;
  129 + height: 26px;
  130 + margin: 12rpx 32rpx 0 40rpx;
  131 + }
  132 + .address {
  133 + font-weight: bold;
  134 + font-size: 14px;
  135 + color: #333333;
  136 + letter-spacing: -0.26px;
  137 + }
  138 + }
  139 + .arrow {
  140 + width: 6px;
  141 + height: 12px;
  142 + position: absolute;
  143 + right: 40rpx;
  144 + bottom: 104rpx;
  145 + }
  146 + }
  147 + .empty {
  148 + color: #666;
  149 + font-size: 16px;
  150 + text-align: center;
  151 + padding-top: 30vh;
  152 + }
  153 + .add {
  154 + position: fixed;
  155 + bottom: 0;
  156 + left: 0;
  157 + height: 112rpx;
  158 + width: 100%;
  159 + background-color: #ff6b4a;
  160 + display: flex;
  161 + justify-content: center;
  162 + align-items: center;
  163 + font-size: 16px;
  164 + color: #ffffff;
  165 + letter-spacing: -0.3px;
  166 + }
  167 +}
  168 +</style>
... ...
src/pages/detailsChoiceArgs/compoents/MyCollapse.vue
... ... @@ -8,9 +8,7 @@
8 8 <view class="headRight" v-else @click="myCollapseChange(isOpen)" ></view>
9 9 </view>
10 10 <view class="body">
11   -
12 11 <block v-if="isOpen">
13   -
14 12 <view style="background-color: #FFFFFF;" class="funBox">
15 13 <block v-if="title==='镜片种类'">
16 14 <view class="noRange">
... ... @@ -30,12 +28,14 @@
30 28 <view class="range" v-for="(item) in funList" :key="item.key">{{item.range}}</view>
31 29 <view class="noRange">
32 30 <block v-for="(item) in funList" :key="item.key">
33   - <view v-bind:class="item.isChioce?'boxChoiced':'boxChoice'"
34   - @click="choice(item.key-1,item.isChioce)">{{item.name}}</view>
  31 + <view
  32 + v-bind:class="item.isChioce?'boxChoiced':'boxChoice'"
  33 + @click="choice(item.key ? item.key - 1 : item.mid, item.isChioce || item.checked)"
  34 + >{{item.name}}</view>
35 35 </block>
36 36 </view>
37 37  
38   - <view class="range" v-for="(item) in funList2" :key="item.key">{{item.range}}</view>
  38 + <view v-if="funList2.length !== 0" class="range" v-for="(item) in funList2" :key="item.key">{{item.range}}</view>
39 39 <view class="noRange" style="max-width: 624rpx">
40 40 <block v-for="(item,index) in funList2" :key="item.key">
41 41 <view v-bind:class="item.isChioce?'boxChoiced':'boxChoice'"
... ... @@ -92,8 +92,8 @@
92 92 "background-image: linear-gradient(180deg, #AEA096 1%, #5E3521 100%);",
93 93 "background-image: linear-gradient(180deg, #6F6864 1%, #352B26 100%);"
94 94 ],
95   - funList: this.funListProp,
96   - funList2: this.funList2Prop,
  95 + funList: this.funListProp.attr || this.funListProp,
  96 + funList2: this.funList2Prop || [],
97 97 funContent: this.funContentProp
98 98 };
99 99 },
... ... @@ -102,23 +102,21 @@
102 102 myCollapseChange(isopen){
103 103 this.isOpen = !isopen
104 104 },
105   - choice(index,isChoice){
106   - if(this.funList[index].type==="fun"){
  105 + choice(index,isChoice) {
  106 + if(this.funList[index].type==="fun") {
107 107 this.funList[index].isChioce = !isChoice
108   - if(!isChoice){
  108 + if(!isChoice) {
109 109 this.funContent[index] = this.funList[index].name
110   - }
111   - else{
  110 + } else {
112 111 this.funContent[index] = ''
113 112 }
114   - }
115   - else if(this.funList[index].type==="kind"){
  113 + } else if(this.funList[index].type==="kind") {
116 114 for(let i=0;i<this.funList.length;i++){
117 115 this.funList[i].isChioce = false
118 116 }
119 117 this.funList[index].isChioce = !isChoice
120 118 this.funContent[0]=this.funList[index].name
121   - }else {
  119 + } else {
122 120 for(let i=0;i<this.funList.length;i++){
123 121 this.funList[i].isChioce = false
124 122 }
... ... @@ -136,8 +134,7 @@
136 134 }
137 135 this.funList2[index].isChioce = !isChoice
138 136 this.funContent[1] = this.funList2[index].name
139   - }
140   - else{
  137 + } else {
141 138 for(let i=0;i<this.funList.length;i++){
142 139 this.funList[i].isChioce = false
143 140 }
... ...
src/pages/detailsChoiceArgs/detailsChoiceArgs.vue
... ... @@ -17,116 +17,126 @@
17 17 </view>
18 18 <view class="goods-data">
19 19 <view class="opCollapse">
20   - <view class="head">
  20 + <!-- <view class="head">
21 21 <view v-if="!opIsOpen">填写验光数据</view>
22 22 <view v-else></view>
23 23 <view class="headRighted" v-if="opIsOpen" @click="myCollapseChange(opIsOpen)"></view>
24 24 <view class="headRight" v-else @click="myCollapseChange(opIsOpen)" ></view>
25   - </view>
  25 + </view> -->
26 26 <view class="body">
27 27 <template v-if="opIsOpen">
28   -
29 28 <view class="goods-form">
30   - <text class="p1">填写验光数据</text>
31   - <text class="p2">没有验光数据?请到线下眼镜店验光哦~</text>
32   - <view class="picker" >
33   - <view class="picker-choice">
34   - <view class="choice-left">
35   - <text class="p11">{{pickerInfoList[0].nameC}}</text>
36   - <text class="p12">{{pickerInfoList[0].nameE}}</text>
37   - </view>
38   - <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
39   - <text class="p14">{{pickerInfoList[0].nameArray1[pickerInfoList[0].nameIndex1]}}</text>
40   - <picker @change="bindPickerChange01" :value="pickerInfoList[0].nameIndex1" :range="pickerInfoList[0].nameArray1">
41   - <image src="../../static/detail-tabicon.png" ></image>
42   - </picker>
43   - <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
44   - <text class="p14">{{pickerInfoList[0].nameArray2[pickerInfoList[0].nameIndex2]}}</text>
45   - <picker @change="bindPickerChange02" :value="pickerInfoList[0].nameIndex2" :range="pickerInfoList[0].nameArray2">
46   - <image src="../../static/detail-tabicon.png" ></image>
47   - </picker>
48   - </view>
49   - </view>
50   - <view class="picker" >
51   - <view class="picker-choice">
52   - <view class="choice-left">
53   - <text class="p11">{{pickerInfoList[1].nameC}}</text>
54   - <text class="p12">{{pickerInfoList[1].nameE}}</text>
55   - </view>
56   - <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
57   - <text class="p14">{{pickerInfoList[1].nameArray1[pickerInfoList[1].nameIndex1]}}</text>
58   - <picker @change="bindPickerChange11" :value="pickerInfoList[1].nameIndex1" :range="pickerInfoList[1].nameArray1">
59   - <image src="../../static/detail-tabicon.png" ></image>
60   - </picker>
61   - <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
62   - <text class="p14">{{pickerInfoList[1].nameArray2[pickerInfoList[1].nameIndex2]}}</text>
63   - <picker @change="bindPickerChange12" :value="pickerInfoList[1].nameIndex2" :range="pickerInfoList[1].nameArray2">
64   - <image src="../../static/detail-tabicon.png" ></image>
65   - </picker>
66   - </view>
67   - </view>
68   - <view class="picker" >
69   - <view class="picker-choice">
70   - <view class="choice-left">
71   - <text class="p11">{{pickerInfoList[2].nameC}}</text>
72   - <text class="p12">{{pickerInfoList[2].nameE}}</text>
73   - </view>
74   - <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
75   - <text class="p14">{{pickerInfoList[2].nameArray1[pickerInfoList[2].nameIndex1]}}</text>
76   - <picker @change="bindPickerChange21" :value="pickerInfoList[2].nameIndex1" :range="pickerInfoList[2].nameArray1">
77   - <image src="../../static/detail-tabicon.png" ></image>
78   - </picker>
79   - <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
80   - <text class="p14">{{pickerInfoList[2].nameArray2[pickerInfoList[2].nameIndex2]}}</text>
81   - <picker @change="bindPickerChange22" :value="pickerInfoList[2].nameIndex2" :range="pickerInfoList[2].nameArray2">
82   - <image src="../../static/detail-tabicon.png" ></image>
83   - </picker>
84   - </view>
85   - </view>
86   - <view class="picker" >
87   - <view class="picker-choice">
88   - <view class="choice-left">
89   - <text class="p11">{{pickerInfoList[3].nameC}}</text>
90   - <text class="p12">{{pickerInfoList[3].nameE}}</text>
91   - </view>
92   - <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
93   - <text class="p14">{{pickerInfoList[3].nameArray1[pickerInfoList[3].nameIndex1]}}</text>
94   - <picker @change="bindPickerChange31" :value="pickerInfoList[3].nameIndex1" :range="pickerInfoList[3].nameArray1">
95   - <image src="../../static/detail-tabicon.png" ></image>
96   - </picker>
97   - <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
98   - <text class="p14">{{pickerInfoList[3].nameArray2[pickerInfoList[3].nameIndex2]}}</text>
99   - <picker @change="bindPickerChange32" :value="pickerInfoList[3].nameIndex2" :range="pickerInfoList[3].nameArray2">
100   - <image src="../../static/detail-tabicon.png" ></image>
101   - </picker>
102   - </view>
103   - </view>
104   - <view class="picker" >
105   - <view class="picker-choice">
106   - <view class="choice-left">
107   - <text class="p11">{{pickerInfoList[4].nameC}}</text>
108   - </view>
109   - <text class="p13-date">年&nbsp;&nbsp;&nbsp;(Y)</text>
110   - <text class="p14" style="width: 34px;">{{pickerInfoList[4].nameArray1[pickerInfoList[4].nameIndex1]}}</text>
111   - <picker @change="bindPickerChange41" :value="pickerInfoList[4].nameIndex1" :range="pickerInfoList[4].nameArray1">
112   - <image src="../../static/detail-tabicon.png" ></image>
113   - </picker>
114   - <text class="p13-date">月&nbsp;&nbsp;&nbsp;(M)</text>
115   - <text class="p14" style="width: 30px;">{{pickerInfoList[4].nameArray2[pickerInfoList[4].nameIndex2]}}</text>
116   - <picker @change="bindPickerChange42" :value="pickerInfoList[4].nameIndex2" :range="pickerInfoList[4].nameArray2">
117   - <image src="../../static/detail-tabicon.png" ></image>
118   - </picker>
119   - <text class="p13-date">日&nbsp;&nbsp;&nbsp;(D)</text>
120   - <text class="p14" style="width: 30px;">{{pickerInfoList[4].nameArray3[pickerInfoList[4].nameIndex3]}}</text>
121   - <picker @change="bindPickerChange43" :value="pickerInfoList[4].nameIndex3" :range="pickerInfoList[4].nameArray3">
122   - <image src="../../static/detail-tabicon.png" ></image>
123   - </picker>
124   - </view>
125   - </view>
126   - <view class="confirm">
127   - <image :src="tablist.confirm ? tabicon[0] : tabicon[1]" @click="changeConfirm"></image>
128   - <text>确认以上输入信息来源于我的验光数据!</text>
129   - </view>
  29 + <view class="data-title">
  30 + <image src="../../static/icon-data.png" ></image>
  31 + <text class="p1">填写验光数据</text>
  32 + </view>
  33 + <text class="p2">没有验光数据?请到线下眼镜店验光哦~</text>
  34 + <view class="picker" >
  35 + <view class="picker-choice">
  36 + <view class="choice-left">
  37 + <text class="p11">验光单取名:</text>
  38 + </view>
  39 + <input class="choice-name uni-input" placeholder="下系" />
  40 + </view>
  41 + </view>
  42 + <view class="picker" >
  43 + <view class="picker-choice">
  44 + <view class="choice-left">
  45 + <text class="p11">{{pickerInfoList[0].nameC}}</text>
  46 + <text class="p12">{{pickerInfoList[0].nameE}}</text>
  47 + </view>
  48 + <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
  49 + <text class="p14">{{pickerInfoList[0].nameArray1[pickerInfoList[0].nameIndex1]}}</text>
  50 + <picker @change="bindPickerChange01" :value="pickerInfoList[0].nameIndex1" :range="pickerInfoList[0].nameArray1">
  51 + <image src="../../static/detail-tabicon.png" ></image>
  52 + </picker>
  53 + <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
  54 + <text class="p14">{{pickerInfoList[0].nameArray2[pickerInfoList[0].nameIndex2]}}</text>
  55 + <picker @change="bindPickerChange02" :value="pickerInfoList[0].nameIndex2" :range="pickerInfoList[0].nameArray2">
  56 + <image src="../../static/detail-tabicon.png" ></image>
  57 + </picker>
  58 + </view>
  59 + </view>
  60 + <view class="picker" >
  61 + <view class="picker-choice">
  62 + <view class="choice-left">
  63 + <text class="p11">{{pickerInfoList[1].nameC}}</text>
  64 + <text class="p12">{{pickerInfoList[1].nameE}}</text>
  65 + </view>
  66 + <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
  67 + <text class="p14">{{pickerInfoList[1].nameArray1[pickerInfoList[1].nameIndex1]}}</text>
  68 + <picker @change="bindPickerChange11" :value="pickerInfoList[1].nameIndex1" :range="pickerInfoList[1].nameArray1">
  69 + <image src="../../static/detail-tabicon.png" ></image>
  70 + </picker>
  71 + <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
  72 + <text class="p14">{{pickerInfoList[1].nameArray2[pickerInfoList[1].nameIndex2]}}</text>
  73 + <picker @change="bindPickerChange12" :value="pickerInfoList[1].nameIndex2" :range="pickerInfoList[1].nameArray2">
  74 + <image src="../../static/detail-tabicon.png" ></image>
  75 + </picker>
  76 + </view>
  77 + </view>
  78 + <view class="picker" >
  79 + <view class="picker-choice">
  80 + <view class="choice-left">
  81 + <text class="p11">{{pickerInfoList[2].nameC}}</text>
  82 + <text class="p12">{{pickerInfoList[2].nameE}}</text>
  83 + </view>
  84 + <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
  85 + <text class="p14">{{pickerInfoList[2].nameArray1[pickerInfoList[2].nameIndex1]}}</text>
  86 + <picker @change="bindPickerChange21" :value="pickerInfoList[2].nameIndex1" :range="pickerInfoList[2].nameArray1">
  87 + <image src="../../static/detail-tabicon.png" ></image>
  88 + </picker>
  89 + <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
  90 + <text class="p14">{{pickerInfoList[2].nameArray2[pickerInfoList[2].nameIndex2]}}</text>
  91 + <picker @change="bindPickerChange22" :value="pickerInfoList[2].nameIndex2" :range="pickerInfoList[2].nameArray2">
  92 + <image src="../../static/detail-tabicon.png" ></image>
  93 + </picker>
  94 + </view>
  95 + </view>
  96 + <view class="picker" >
  97 + <view class="picker-choice">
  98 + <view class="choice-left">
  99 + <text class="p11">{{pickerInfoList[3].nameC}}</text>
  100 + <text class="p12">{{pickerInfoList[3].nameE}}</text>
  101 + </view>
  102 + <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
  103 + <text class="p14">{{pickerInfoList[3].nameArray1[pickerInfoList[3].nameIndex1]}}</text>
  104 + <picker @change="bindPickerChange31" :value="pickerInfoList[3].nameIndex1" :range="pickerInfoList[3].nameArray1">
  105 + <image src="../../static/detail-tabicon.png" ></image>
  106 + </picker>
  107 + <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
  108 + <text class="p14">{{pickerInfoList[3].nameArray2[pickerInfoList[3].nameIndex2]}}</text>
  109 + <picker @change="bindPickerChange32" :value="pickerInfoList[3].nameIndex2" :range="pickerInfoList[3].nameArray2">
  110 + <image src="../../static/detail-tabicon.png" ></image>
  111 + </picker>
  112 + </view>
  113 + </view>
  114 + <view class="picker" >
  115 + <view class="picker-choice">
  116 + <view class="choice-left">
  117 + <text class="p11">{{pickerInfoList[4].nameC}}</text>
  118 + </view>
  119 + <text class="p13-date">年&nbsp;&nbsp;&nbsp;(Y)</text>
  120 + <text class="p14" style="width: 34px;">{{pickerInfoList[4].nameArray1[pickerInfoList[4].nameIndex1]}}</text>
  121 + <picker @change="bindPickerChange41" :value="pickerInfoList[4].nameIndex1" :range="pickerInfoList[4].nameArray1">
  122 + <image src="../../static/detail-tabicon.png" ></image>
  123 + </picker>
  124 + <text class="p13-date">月&nbsp;&nbsp;&nbsp;(M)</text>
  125 + <text class="p14" style="width: 30px;">{{pickerInfoList[4].nameArray2[pickerInfoList[4].nameIndex2]}}</text>
  126 + <picker @change="bindPickerChange42" :value="pickerInfoList[4].nameIndex2" :range="pickerInfoList[4].nameArray2">
  127 + <image src="../../static/detail-tabicon.png" ></image>
  128 + </picker>
  129 + <text class="p13-date">日&nbsp;&nbsp;&nbsp;(D)</text>
  130 + <text class="p14" style="width: 30px;">{{pickerInfoList[4].nameArray3[pickerInfoList[4].nameIndex3]}}</text>
  131 + <picker @change="bindPickerChange43" :value="pickerInfoList[4].nameIndex3" :range="pickerInfoList[4].nameArray3">
  132 + <image src="../../static/detail-tabicon.png" ></image>
  133 + </picker>
  134 + </view>
  135 + </view>
  136 + <view class="confirm">
  137 + <image :src="tablist.confirm ? tabicon[0] : tabicon[1]" @click="changeConfirm"></image>
  138 + <text>确认以上输入信息来源于我的验光数据!</text>
  139 + </view>
130 140 </view>
131 141  
132 142 </template>
... ... @@ -156,6 +166,16 @@
156 166 <MyCollapse :isOpenProps="kindIsOpen" :funListProp="kindList1" :funList2Prop="kindList2" :funContentProp="kindContent" title="镜片种类"></MyCollapse>
157 167 <MyCollapse :isOpenProps="maIsOpen" :funListProp="maList1" :funList2Prop="maList2" :funContentProp="maContent" title="材质选择"></MyCollapse>
158 168 <MyCollapse :isOpenProps="reIsOpen" :funListProp="reList1" :funList2Prop="reList2" :funContentProp="reContent" title="折射率"></MyCollapse>
  169 + <view
  170 + v-for="item in attrList"
  171 + :key="item.mid"
  172 + >
  173 + <MyCollapse
  174 + :funListProp="item"
  175 + :funContentProp="reContent"
  176 + :title="item.meta_name"
  177 + />
  178 + </view>
159 179 </view>
160 180 <view class="submit">立即结算</view>
161 181 </view>
... ... @@ -163,10 +183,12 @@
163 183  
164 184 <script>
165 185 import MyCollapse from './compoents/MyCollapse.vue'
  186 + import store from '@/store'
  187 +
166 188 export default {
167 189 components: {
168 190 MyCollapse
169   - },
  191 + },
170 192 data() {
171 193 return {
172 194 count:1,
... ... @@ -183,7 +205,6 @@
183 205 {"name":"抗疲劳","isChioce": false,"key":6,"type": "fun"},
184 206 ],
185 207 funContent:[],
186   -
187 208 // 镜片种类参数
188 209 kindIsOpen:true,
189 210 kindList1: [
... ... @@ -197,9 +218,9 @@
197 218 {"name":"JB234759","isChioce":false,key:6,"type": "kind"},
198 219 {"name":"JB234759","isChioce":false,key:7,"type": "kind"},
199 220 ],
200   - kindContent:[],
  221 + kindContent: [],
201 222 // 材质选择
202   - maIsOpen:true,
  223 + maIsOpen: true,
203 224 maList1: [
204 225 {"name":"树脂镜片","isChioce":false,key:1,"range":"0-300度","isRange":true},
205 226 {"name":"特殊镜片","isChioce":false,key:2},
... ... @@ -208,9 +229,9 @@
208 229 {"name":"玻璃镜片","isChioce":false,key:3,"range":"300-1000度","isRange":true},
209 230 {"name":"玻璃镜片","isChioce":false,key:4},
210 231 ],
211   - maContent:[],
  232 + maContent: [],
212 233 // 折射率参数
213   - reIsOpen:true,
  234 + reIsOpen: true,
214 235 reList1: [
215 236 {"name":"1.56(推荐)","isChioce":false,key:1,"range":"0-300度","isRange":true},
216 237 {"name":"1.60","isChioce":false,key:2},
... ... @@ -225,27 +246,37 @@
225 246 // 验光参数
226 247 opIsOpen:true,
227 248 tablist: {
228   - // read: true,
229   - // seeLong: false,
230   - confirm: false
  249 + // read: true,
  250 + // seeLong: false,
  251 + confirm: false
231 252 },
232 253 tabicon:['/static/detail-button.png','/static/detail-button-unselected.png'],
233   - // 度数相关数据
  254 + // 度数相关数据
234 255 pickerInfoList:[
235   - {nameC:"度数",nameE:"(SPH)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:0},
236   - {nameC:"散光",nameE:"(CYL)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:1},
237   - {nameC:"散光轴位",nameE:"(AXI)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:2},
238   - {nameC:"双眼瞳距",nameE:"(PD)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:3},
239   - {nameC:"验光日期",nameE:'',nameArray1:[2017,2018,2019,2020,2021],nameIndex1:0,nameArray2:[1,2,3,4,5,6,7],nameIndex2:0,nameArray3:[1,2,3,4,5,6],nameIndex3:0}
  256 + {nameC:"度数",nameE:"(SPH)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:0},
  257 + {nameC:"散光",nameE:"(CYL)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:1},
  258 + {nameC:"散光轴位",nameE:"(AXI)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:2},
  259 + {nameC:"双眼瞳距",nameE:"(PD)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:3},
  260 + {nameC:"验光日期",nameE:'',nameArray1:[2017,2018,2019,2020,2021],nameIndex1:0,nameArray2:[1,2,3,4,5,6,7],nameIndex2:0,nameArray3:[1,2,3,4,5,6],nameIndex3:0}
240 261 ],
241 262  
242 263 }
243 264 },
  265 + onLoad() {
  266 + store.dispatch('read/fetch', {
  267 + pid: 9,
  268 + })
  269 + },
  270 + computed: {
  271 + attrList() {
  272 + return this.$store.state.read.goodInfo.attrList;
  273 + }
  274 + },
244 275 methods: {
245 276 counter(isadd){
246 277 if(isadd){
247 278 this.count++
248   - }else{
  279 + } else {
249 280 this.count <= 1? this.disabled = true:this.count--
250 281 }
251 282 },
... ... @@ -254,45 +285,45 @@
254 285 this.opIsOpen = !isopen
255 286 },
256 287 changeConfirm() {
257   - this.tablist.confirm = !this.tablist.confirm
  288 + this.tablist.confirm = !this.tablist.confirm
258 289 },
259 290  
260 291 bindPickerChange01: function(e) {
261   - this.pickerInfoList[0].nameIndex1 = e.target.value
  292 + this.pickerInfoList[0].nameIndex1 = e.target.value
262 293 },
263 294 bindPickerChange02: function(e) {
264   - this.pickerInfoList[0].nameIndex2 = e.target.value
  295 + this.pickerInfoList[0].nameIndex2 = e.target.value
265 296 },
266 297  
267 298 bindPickerChange11: function(e) {
268   - this.pickerInfoList[1].nameIndex1 = e.target.value
  299 + this.pickerInfoList[1].nameIndex1 = e.target.value
269 300 },
270 301 bindPickerChange12: function(e) {
271   - this.pickerInfoList[1].nameIndex2 = e.target.value
  302 + this.pickerInfoList[1].nameIndex2 = e.target.value
272 303 },
273 304  
274 305 bindPickerChange21: function(e) {
275   - this.pickerInfoList[2].nameIndex1 = e.target.value
  306 + this.pickerInfoList[2].nameIndex1 = e.target.value
276 307 },
277 308 bindPickerChange22: function(e) {
278   - this.pickerInfoList[2].nameIndex2 = e.target.value
  309 + this.pickerInfoList[2].nameIndex2 = e.target.value
279 310 },
280 311  
281 312 bindPickerChange31: function(e) {
282   - this.pickerInfoList[3].nameIndex1 = e.target.value
  313 + this.pickerInfoList[3].nameIndex1 = e.target.value
283 314 },
284 315 bindPickerChange32: function(e) {
285   - this.pickerInfoList[3].nameIndex2 = e.target.value
  316 + this.pickerInfoList[3].nameIndex2 = e.target.value
286 317 },
287 318  
288 319 bindPickerChange41: function(e) {
289   - this.pickerInfoList[4].nameIndex1 = e.target.value
  320 + this.pickerInfoList[4].nameIndex1 = e.target.value
290 321 },
291 322 bindPickerChange42: function(e) {
292   - this.pickerInfoList[4].nameIndex2 = e.target.value
  323 + this.pickerInfoList[4].nameIndex2 = e.target.value
293 324 },
294 325 bindPickerChange43: function(e) {
295   - this.pickerInfoList[4].nameIndex3 = e.target.value
  326 + this.pickerInfoList[4].nameIndex3 = e.target.value
296 327 },
297 328 }
298 329 }
... ... @@ -306,7 +337,9 @@
306 337 flex-direction: column;
307 338 align-items: center;
308 339 }
309   -
  340 + .choice-name {
  341 + border-bottom: 1px solid #CFCFCF;
  342 + }
310 343 .goods-info{
311 344 width: 100%;
312 345 height: 272rpx;
... ... @@ -459,98 +492,97 @@
459 492 align-items: center;
460 493 justify-content: center;
461 494 background-color: #fff;
462   - width: 100%;
463   -
  495 + width: 100%;
464 496 .p1 {
465   - font-size: 16px;
466   - color: #333333;
467   - letter-spacing: -0.3px;
468   - text-align: justify;
469   - line-height: 24px;
470   - margin: 4px 0;
  497 + font-size: 16px;
  498 + color: #333333;
  499 + letter-spacing: -0.3px;
  500 + text-align: justify;
  501 + line-height: 24px;
  502 + margin: 4px 0;
471 503  
472   - }
473   - .p2 {
474   - font-size: 12px;
475   - color: #999999;
476   - letter-spacing: -0.23px;
477   - margin-bottom: 18rpx;
478   - }
479   - image{
480   - width: 28rpx;
481   - height: 26rpx;
482   - }
483   - .confirm {
484   - display: flex;
485   - align-items: center;
486   - font-size: 12px;
487   - color: #666666;
488   - letter-spacing: -0.23px;
489   - width: 684rpx;
490   - image{
491   - margin-right:25rpx;
492   - }
493   - }
494   - .picker{
495   - display: flex;
496   - flex-direction: column;
497   - justify-content: center;
498   - align-items: center;
499   - width: 100%;
500   - image{
501   - width: 10px;
502   - height: 10px;
503   - margin-right: 5px;
504   - }
505   - .picker-choice{
  504 + }
  505 + .p2 {
  506 + font-size: 12px;
  507 + color: #999999;
  508 + letter-spacing: -0.23px;
  509 + margin-bottom: 18rpx;
  510 + }
  511 + image{
  512 + width: 28rpx;
  513 + height: 26rpx;
  514 + }
  515 + .confirm {
  516 + display: flex;
  517 + align-items: center;
  518 + font-size: 12px;
  519 + color: #666666;
  520 + letter-spacing: -0.23px;
  521 + width: 684rpx;
  522 + image{
  523 + margin-right:25rpx;
  524 + }
  525 + }
  526 + .picker{
506 527 display: flex;
507   - width: 684rpx;
  528 + flex-direction: column;
  529 + justify-content: center;
508 530 align-items: center;
509   - margin-bottom: 40rpx;
510   - .choice-left{
511   - width: 210rpx;
512   - .p11 {
513   - font-size: 14px;
514   - color: #333333;
515   - letter-spacing: -0.26px;
516   - text-align: justify;
517   - line-height: 24px;
518   - // margin-right: 10px;
  531 + width: 100%;
  532 + image{
  533 + width: 10px;
  534 + height: 10px;
  535 + margin-right: 5px;
  536 + }
  537 + .picker-choice{
  538 + display: flex;
  539 + width: 684rpx;
  540 + align-items: center;
  541 + margin-bottom: 40rpx;
  542 + .choice-left{
  543 + width: 210rpx;
  544 + .p11 {
  545 + font-size: 14px;
  546 + color: #333333;
  547 + letter-spacing: -0.26px;
  548 + text-align: justify;
  549 + line-height: 24px;
  550 + // margin-right: 10px;
  551 + }
  552 + .p12 {
  553 + font-size: 10px;
  554 + color: #3F3F3F;
  555 + letter-spacing: -0.19px;
  556 + text-align: justify;
  557 + line-height: 24px;
  558 + }
  559 +
  560 +
519 561 }
520   - .p12 {
  562 + .p13 {
521 563 font-size: 10px;
522   - color: #3F3F3F;
  564 + color: #999999;
523 565 letter-spacing: -0.19px;
524   - text-align: justify;
525   - line-height: 24px;
  566 + margin-right: 10px;
526 567 }
527   -
528   -
529   - }
530   - .p13 {
531   - font-size: 10px;
532   - color: #999999;
533   - letter-spacing: -0.19px;
534   - margin-right: 10px;
535   - }
536   - .p13-date {
537   - font-size: 10px;
538   - color: #999999;
539   - letter-spacing: -0.19px;
540   - margin-right: 5px;
541   - }
542   - .p14 {
543   - font-size: 14px;
544   - color: #666666;
545   - letter-spacing: -0.26px;
546   - text-align: center;
547   - width: 124rpx;
548   - border-bottom: 1px solid #CFCFCF;
  568 + .p13-date {
  569 + font-size: 10px;
  570 + color: #999999;
  571 + letter-spacing: -0.19px;
  572 + margin-right: 5px;
  573 + }
  574 + .p14 {
  575 + font-size: 14px;
  576 + color: #666666;
  577 + letter-spacing: -0.26px;
  578 + text-align: center;
  579 + width: 124rpx;
  580 + border-bottom: 1px solid #CFCFCF;
  581 + }
  582 +
549 583 }
550   -
551 584 }
552 585 }
553   - }
554 586  
555 587 .submit{
556 588 width: 100%;
... ...
src/pages/frameDetail/frameDetail.vue
... ... @@ -0,0 +1,617 @@
  1 +<template>
  2 + <view class="container">
  3 + <view class="D1">
  4 + <!-- 轮播图 -->
  5 + <swiper class="swiperImage" :indicator-dots="true" :autoplay="true" :interval="4000" :duration="500" >
  6 + <swiper-item v-for="(item) in infos" :key="item.goods_id">
  7 + <image :src="item.img" mode="scaleToFill"></image>
  8 + </swiper-item>
  9 + </swiper>
  10 + <view class="D1_price">¥{{price}}</view>
  11 + <view class="D1_name"><span class="D1_name1">{{name}}</span><span class="D1_number">{{number}}购买过</span></view>
  12 + <view class="D1_spans"><span>支持7天无理由退货</span><span>顺丰发货</span><span>30天质量保证</span></view>
  13 + </view>
  14 + <view class="D2" v-if="updateGoodType == 2 || updateGoodType == 4">
  15 + <view><span class="D2_span1">框架材质:</span><span class="D2_span2">{{introduction.material}}</span></view>
  16 + <view><span class="D2_span1">风格:</span><span class="D2_span2">{{introduction.func}}</span></view>
  17 + <view><span class="D2_span1">适用性别:</span><span class="D2_span2">{{introduction.rate}}</span></view>
  18 + </view>
  19 + <view class="D2" v-if="updateGoodType == 1">
  20 + <view><span class="D2_span1">镜片材质:</span><span class="D2_span2">{{introduction.material}}</span></view>
  21 + <view><span class="D2_span1">功能:</span><span class="D2_span2">{{introduction.func}}</span></view>
  22 + <view><span class="D2_span1">使用场景:</span><span class="D2_span2">{{introduction.rate}}</span></view>
  23 + </view>
  24 + <view class="D2" v-if="updateGoodType == 3">
  25 + <view><span class="D2_span1">材质:</span><span class="D2_span2">{{introduction.material}}</span></view>
  26 + <view><span class="D2_span1">直径/基弧:</span><span class="D2_span2">{{introduction.func}}</span></view>
  27 + <view><span class="D2_span1">适用性别:</span><span class="D2_span2">{{introduction.rate}}</span></view>
  28 + </view>
  29 +
  30 + <view class="D3">
  31 + <view class="screenBar">
  32 + <view v-for="item in screenItems" :key="item.current" @click="tabChange(item.current)" >
  33 + <view class="screenItem" v-bind:class="{ active: current === item.current }">{{ item.text }}</view>
  34 + </view>
  35 + </view>
  36 + <view class="screen-item " v-if="current ===0">
  37 + <view class="D3_list">
  38 + <view v-for="(item) in parameter" :key="item.key">
  39 + <image class="D3_image" v-bind:src = "item.img"></image>
  40 + <span>{{item.standard}}</span>
  41 + <span>{{item.slength}}</span>
  42 + </view>
  43 + </view>
  44 + </view >
  45 + <view class="screen-item " v-if="current ===1">
  46 + <view class="D3_list">
  47 + <view>主体</view>
  48 + <view>商品产地:韩国</view>
  49 + <view>包装清单:彩色隐形 * 1</view>
  50 + </view>
  51 + </view >
  52 + <view class="screen-item " v-if="current ===2">
  53 + <view class="customerService">
  54 + <view class="serviceItem" >
  55 + <view class="title">
  56 + <view style="width: 6rpx;height: 6rpx;border-radius: 3rpx;background-color: #FF6B4A;margin-right: 12rpx;"></view>
  57 + <text class="titleText">卖家服务</text>
  58 + </view>
  59 + <view class="itemContent">平台卖家服务,为您在平台获得最优的购买体验</view>
  60 + </view>
  61 + <view class="serviceItem" >
  62 + <view class="title">
  63 + <view style="width: 6rpx;height: 6rpx;border-radius: 3rpx;background-color: #FF6B4A;margin-right: 12rpx;"></view>
  64 + <text class="titleText">平台承诺</text>
  65 + </view>
  66 + <view class="itemContent">平台卖家服务,为您在平台获得最优的购买体验阿斯蒂芬的发射点发射点发生的房贷首付的发护法国会国家和国际会更加和</view>
  67 + </view>
  68 + <view class="serviceItem">
  69 + <view class="title">
  70 + <view style="width: 6rpx;height: 6rpx;border-radius: 3rpx;background-color: #FF6B4A;margin-right: 12rpx;"></view>
  71 + <text class="titleText">正品保证</text>
  72 + </view>
  73 + <view class="itemContent">向您保证所售商品均为正品行货</view>
  74 + </view>
  75 + <view class="serviceItem2">
  76 + <view class="title">
  77 + <text class="titleText">权利申明</text>
  78 + </view>
  79 + <view class="itemContent">任何个人或单位如果同时符合以下两个条件:1. 权利人发现网络用户利用网络服务侵害其合法权益;2. 百度的搜索引擎系统以自动检索方式而链接到第三方网站的内容侵犯了上述权利人的合法权益。请上述个人或单位务必以书面的通讯方式向百度提交权利通知。</view>
  80 + </view>
  81 + <view class="serviceItem2">
  82 + <view class="title">
  83 + <text class="titleText">价格保证</text>
  84 + </view>
  85 + <view class="itemContent">
  86 + <view class="itemContent-child">
  87 + <text class="contentTitle">平台价:</text>
  88 + <text>任何个人或单位如果同时符合以下两个条件:1. 权利人发现网络用户利用网络服务侵害其合法权益;2. 百度的搜索引擎系统以自动检索方式而链接到第三方网站的内容侵犯了上述权利人的合法权益。请上述个人或单位务必以书面的通讯方式向百度提交权利通知</text>
  89 + </view>
  90 + <view class="itemContent-child">
  91 + <text class="contentTitle">划线价:</text>
  92 + <text>任何个人或单位如果同时符合以下两个条件:1. 权利人发现网络用户利用网络服务侵害其合法权益;2. 百度的搜索引擎系统以自动检索方式而链接到第三方网站的内容侵犯了上述权利人的合法权益。请上述个人或单位务必以书面的通讯方式向百度提交权利通知</text>
  93 + </view>
  94 + <view class="itemContent-child">
  95 + <text class="contentTitle">平折扣:</text>
  96 + <text>任何个人或单位如果同时符合以下两个条件:1. 权利人发现网络用户利用网络服务侵害其合法权益;2. 百度的搜索引擎系统以自动检索方式而链接到第三方网站的内容侵犯了上述权利人的合法权益。请上述个人或单位务必以书面的通讯方式向百度提交权利通知</text>
  97 + </view>
  98 + <view class="itemContent-child">
  99 + <text class="contentTitle">异常问题:</text>
  100 + <text>任何个人或单位如果同时符合以下两个条件:1. 权利人发现网络用户利用网络服务侵害其合法权益;2. 百度的搜索引擎系统以自动检索方式而链接到第三方网站的内容侵犯了上述权利人的合法权益。请上述个人或单位务必以书面的通讯方式向百度提交权利通知</text>
  101 + </view>
  102 +
  103 + </view>
  104 + </view>
  105 + </view>
  106 + </view >
  107 + </view>
  108 + <view class="D4" v-if="current !==2">
  109 + <view class="D4_esvalue">
  110 + <view>{{esvalue}}</view>
  111 + <view class="D4_2">
  112 + <view class="star" v-for="o in starCount" :key="o">
  113 + <image src="../../static/img/detail/d_star.png" mode="aspectFill" style="height: 26rpx; width: 28rpx;"></image>
  114 + </view>
  115 + </view>
  116 + </view>
  117 + <view class="D4_list">
  118 + <view v-for="(assess) in assess" :key="assess.key">{{assess.Iassess}}</view>
  119 + </view>
  120 + </view>
  121 + <view class="D5" v-if="current !==2">
  122 + <view class="D5_fixed1">
  123 + <image src="/static/img/detail/hr.png"></image>
  124 + <view>商品详细</view>
  125 + <image src="/static/img/detail/hr.png"></image>
  126 + </view>
  127 + <view class="D5_all">
  128 + <image v-bind:src="imgAll"></image>
  129 + </view>
  130 + <view class="D5_photoes">
  131 + <view class="D5_photoes1">
  132 + <view v-for="(photoes) in photoes" :key="photoes.value">
  133 + <image v-bind:src = "photoes.img"></image>
  134 + <view>{{photoes.value}}</view>
  135 + </view>
  136 + </view>
  137 + <view class="D5_logo1">帕森防蓝光镜片</view>
  138 + <view class="D5_logo2">健康护眼,我们是认真的!</view>
  139 + <view class="D5_logo3"><image src='/static/img/detail/logo.png'></image></view>
  140 + </view>
  141 + </view>
  142 + <view class="D6" v-if="current !==2">
  143 + <view class="D6_v1">CHARM DETAIL</view>
  144 + <view class="D6_v2">细节展示</view>
  145 + <view ><image v-bind:src="imgDetail"></image></view>
  146 + <view>........................................................................</view>
  147 + <view class="D6_v5"><span class="D6_v5_s1">优质选材 </span><span class="D6_v5_s2"> / 金属材质 光泽饱满</span></view>
  148 + </view>
  149 +
  150 + <!-- 底部菜单 -->
  151 + <view class="botton">
  152 + <view class="botton_1"><image v-bind:src="imgShop.img"></image><view class="botton_image">购物车</view></view>
  153 + <view class="botton_2">
  154 + <view class="botton_input">加入购物车</view>
  155 + <view class="botton_now" @click="goPerchase">立即购买</view>
  156 + </view>
  157 + </view>
  158 + </view>
  159 +</template>
  160 +
  161 +<script>
  162 +import store from '@/store';
  163 +export default {
  164 + data(){
  165 + return {
  166 + name:'商品名称',
  167 + goodType:2,
  168 + price: 120,
  169 + number: 391,
  170 + screenItems: [
  171 + {current:0,text:'商品保障'},
  172 + {current:1,text:'规格参数'},
  173 + {current:2,text:'售后保障'},
  174 + ],
  175 + current: 0,
  176 + starCount:5,
  177 + infos: [
  178 + { goods_id: 0, img: '/static/img/goods/p11.png', name: '商品名称', price: '¥168', slogan:'1235人付款' },
  179 + { goods_id: 1, img: '/static/img/goods/p12.png', name: '商品名称', price: '¥168', slogan:'1235人付款' },
  180 + { goods_id: 2, img: '/static/img/goods/p12.png', name: '商品名称', price: '¥168', slogan:'1235人付款' },
  181 + { goods_id: 3, img: '/static/img/goods/p11.png', name: '商品名称', price: '¥168', slogan:'1235人付款' },
  182 + ],
  183 + parameter:[
  184 + {key: 0,img:'/static/img/detail/d2.png', standard:'框架宽', slength:'139mm'},
  185 + {key: 1,img:'/static/img/detail/d3.png', standard:'镜片宽', slength:'51mm'},
  186 + {key: 2,img:'/static/img/detail/d4.png', standard:'镜片高', slength:'45mm'},
  187 + {key: 3,img:'/static/img/detail/d5.png', standard:'鼻架宽', slength:'19mm'},
  188 + {key: 4,img:'/static/img/detail/d6.png', standard:'框架耳长', slength:'138mm'},
  189 + {key: 5,img:'/static/img/detail/d7.png', standard:'框架重', slength:'19mm'}
  190 + ],
  191 + assess:[
  192 + {key: 0, Iassess: '价格实惠'},
  193 + {key: 1, Iassess: '美观大方'},
  194 + {key: 2, Iassess: '易搭配'}
  195 + ],
  196 + esvalue:'宝贝好评率 100%',
  197 + introduction:{
  198 + material:'钛合金',
  199 + func:'抗疲劳/防辐射',
  200 + rate: 1.6
  201 + },
  202 + imgAll:'/static/img/detail/d8.png' ,
  203 + photoes:[
  204 + {value:'日常办公', img:'/static/img/detail/d9.png'},
  205 + {value:'上网', img:'/static/img/detail/d10.png'},
  206 + {value:'追剧', img:'/static/img/detail/d11.png'},
  207 + {value:'玩游戏', img:'/static/img/detail/d12.png'},
  208 + ],
  209 + imgDetail:'/static/img/detail/d13.png',
  210 + imgShop:{
  211 + img:'/static/tab-cart.png',
  212 + IsShown: false
  213 + }
  214 + }
  215 + },
  216 + onLoad:function(option){
  217 + this.goodType = option.goodType
  218 + // console.log(this.updateGoodType)
  219 + store.dispatch('read/fetch');
  220 + },
  221 + computed:{
  222 + updateGoodType(){
  223 + return this.goodType
  224 + },
  225 + goodInfo() {
  226 + console.log(this.$store.state.read.goodInfo)
  227 + return this.$store.state.read.goodInfo;
  228 + },
  229 + },
  230 + methods:{
  231 + goPerchase(){
  232 + switch(this.updateGoodType){
  233 + case '1':
  234 + uni.navigateTo({
  235 + url: '../detailsChoiceArgs/detailsChoiceArgs',
  236 + success: res => {},
  237 + fail: () => {},
  238 + complete: () => {}
  239 + });
  240 + break;
  241 + case '2':
  242 + uni.navigateTo({
  243 + url: `../detailStandard/detailStandard_k`,
  244 + success: res => {},
  245 + fail: () => {},
  246 + complete: () => {}
  247 + });
  248 + break;
  249 + case '3':
  250 + uni.navigateTo({
  251 + url: `../purchaseLenses/purchaseLenses`,
  252 + success: res => {},
  253 + fail: () => {},
  254 + complete: () => {}
  255 + });
  256 + break;
  257 + case '4':
  258 + uni.navigateTo({
  259 + url: `../detailStandard/detailStandard_sun`,
  260 + success: res => {},
  261 + fail: () => {},
  262 + complete: () => {}
  263 + });
  264 + break;
  265 + default :
  266 + break
  267 + }
  268 + },
  269 + tabChange(e) {
  270 + if (this.current !== e) {
  271 + this.current = e;
  272 + }
  273 + }
  274 + }
  275 +}
  276 +</script>
  277 +<style lang='scss'>
  278 + .container{
  279 + background-color:#f8f8f8 ;
  280 + }
  281 + .D1,.D2,.D3,.D4,.D6{
  282 + background: #ffffff;
  283 + margin-bottom: 10px;
  284 + padding:8px 20px 8px 20px;
  285 + box-sizing: border-box;
  286 + .swiperImage {
  287 + width: 684rpx;
  288 + height: 512rpx;
  289 + image {
  290 + width: 100%;
  291 + height: 100%;
  292 + border-radius: 16rpx;
  293 + }
  294 + }
  295 + }
  296 + .D5{
  297 + background: #ffffff;
  298 + padding:8px 20px 8px 20px;
  299 + box-sizing: border-box;
  300 + }
  301 + .swiperImage{
  302 + width: 100%;
  303 + height: 560rpx;
  304 + .swiper-item{
  305 + width: 100%;
  306 + image{
  307 + width: 100%;
  308 + }
  309 + }
  310 + }
  311 + .D1{
  312 + .D1_price{
  313 + color: #EB5D3B;
  314 + font-size: 18px;
  315 + margin-top: 5px;
  316 + font-family: 'PingFangSC-Semibold';
  317 + }
  318 + .D1_name{
  319 + font-size: 16px;
  320 + font-family: 'PingFangSC-Semibold';
  321 + margin-top: 5px;
  322 + display: flex;
  323 + justify-content: space-between;
  324 + .D1_name1{
  325 + font-weight: bold;
  326 + font-size: 16px;
  327 + color: #333333;
  328 + }
  329 + .D1_number{
  330 + color: #999999 ;
  331 + font-size: 14px;
  332 + font-family: 'PingFangSC-Regular';
  333 + }
  334 + }
  335 + .D1_spans{
  336 + font-size: 10px;
  337 + color:#999999;
  338 + margin-top: 5px;
  339 + span{
  340 + height: 14px;
  341 + margin-right: 10px;
  342 + }
  343 + }
  344 +
  345 + }
  346 + .D2{
  347 + font-size: 14px;
  348 + font-family: 'PingFangSC-Regular';
  349 + view{
  350 + height: 24px;
  351 + }
  352 + .D2_span1{
  353 + color: #999999;
  354 + }
  355 + .D2_span2{
  356 + color: #333333;
  357 + }
  358 + }
  359 + .D3{
  360 + .screenBar{
  361 + width: 670rpx;
  362 + margin-top: 20rpx;
  363 + margin-bottom: 24rpx;
  364 + display: flex;
  365 + flex-direction: row;
  366 + justify-content: space-between;
  367 + align-items: center;
  368 + font-size: 14px;
  369 + color: #333333;
  370 + transition:all 0.2s;
  371 + }
  372 + .screen-item{
  373 + font-size: 32rpx;
  374 + color: #333333;
  375 + display: flex;
  376 + transition:all 0.2s;
  377 + .D3_list{
  378 + margin-bottom: 4px;
  379 + }
  380 + .D3_list view{
  381 + display: flex;
  382 + align-content: center;
  383 + font-size: 14px;
  384 + color: #333333;
  385 + }
  386 + .D3_list image{
  387 + width: 50px;
  388 + height: 25px;
  389 + margin-right: 6px;
  390 + }
  391 + .D3_list span{
  392 + margin-left: 6px;
  393 + margin-right: 5px;
  394 + font-family: 'PingFangSC-Regular';
  395 + }
  396 + }
  397 + .active{
  398 + border-bottom: 4rpx solid #FF6B4A;
  399 + }
  400 + .customerService{
  401 + margin-bottom: 90rpx;
  402 + .serviceItem{
  403 + margin-bottom: 32rpx;
  404 + .title{
  405 + display: flex;flex-direction: row;
  406 + align-items: center;
  407 + .titleText{
  408 + font-size: 14px;
  409 + color: #333333;
  410 + margin-bottom: 12rpx;
  411 + }
  412 + }
  413 + .itemContent{
  414 + font-size: 14px;
  415 + color: #999999;
  416 + margin-left: 18rpx;
  417 + }
  418 + }
  419 + .serviceItem2{
  420 + margin-left: 18rpx;
  421 + margin-bottom: 32rpx;
  422 + .titleText{
  423 + font-size: 14px;
  424 + color: #FF6B4A;
  425 + }
  426 + .itemContent{
  427 + font-size: 14px;
  428 + color: #999999;
  429 + .itemContent-child{
  430 + margin-bottom: 40rpx;
  431 + .contentTitle{
  432 + border-bottom: 1px solid #FF6B4A;
  433 + }
  434 + }
  435 + }
  436 + }
  437 + }
  438 + }
  439 + .D4{
  440 + .D4_esvalue{
  441 + font-size: 14px;
  442 + color: #333333;
  443 + display: flex;
  444 + justify-content: space-between;
  445 + margin-bottom: 10px;
  446 + .D4_2{
  447 + width: 90px;
  448 + display: flex;
  449 + align-items: center;
  450 + justify-content: space-between;
  451 + }
  452 + }
  453 + .D4_esvalue view{
  454 + font-size: 14px;
  455 + color: #333333;
  456 + font-weight: bold;
  457 + }
  458 + .D4_list view{
  459 + display: inline-block;
  460 + font-size: 12px;
  461 + text-align: center;
  462 + margin-right: 12px;
  463 + width: 90px;
  464 + height: 24px;
  465 + line-height: 24px;
  466 + background: #F2F2F2;
  467 + color: #666666 ;
  468 + }
  469 + }
  470 + .D5{
  471 + .D5_fixed1{
  472 + display: flex;
  473 + justify-content: space-between;
  474 + align-content: center;
  475 + margin-bottom: 12px;
  476 + view{
  477 + font-size: 14px;
  478 + color: #333333;
  479 + font-weight: bold;
  480 + font-family: 'PingFangSC-Medium';
  481 + line-height: 24px;
  482 + }
  483 + image{
  484 + width: 240rpx;
  485 + height: 3px;
  486 + margin-top: 10px;
  487 + }
  488 + }
  489 + .D5_all {
  490 + width: 100%;
  491 + height: 380px;
  492 + margin-bottom: 30px;
  493 + font-family: 'PingFangSC-Regular';
  494 + border: #999999 solid 1.5px;
  495 + image{
  496 + width: 100%;
  497 + height: 380px;
  498 + }}
  499 + .D5_photoes1{
  500 + display: grid;
  501 + grid-template-columns: 48% 48%;
  502 + grid-row-gap: 10px;
  503 + grid-column-gap: 4%;
  504 + image{
  505 + width: 100%;
  506 + height: 70px;
  507 + }
  508 + view{
  509 + width: 100%;
  510 + font-size: 14px;
  511 + text-align: center;
  512 + background: #949494;
  513 + font-family: 'PingFangSC-Regular';
  514 + color: #ffffff;
  515 + view{
  516 + height: 24px;
  517 + line-height: 24px;
  518 + }
  519 + }
  520 + }
  521 + .D5_logo1,.D5_logo2{
  522 + text-align: center;
  523 + }
  524 + .D5_logo1{
  525 + margin-top: 40px;
  526 + font-size: 24px;
  527 + font-weight: bold;
  528 + font-family: 'PingFangSC-Semibold';
  529 + }
  530 + .D5_logo2{
  531 + font-size: 12px;
  532 + }
  533 + .D5_logo3{
  534 + width: 100%;
  535 + text-align: center;
  536 + image{
  537 + width: 50px;
  538 + height: 24px;
  539 + }
  540 + }
  541 + }
  542 + .D6{
  543 + width: 100%;
  544 + height: 430px;
  545 + background: #F9F6ED;
  546 + margin-bottom: 74px;
  547 + view{
  548 + text-align: center;
  549 + }
  550 + .D6_v1{
  551 + font-weight: bold;
  552 + }
  553 + .D6_v2{
  554 + font-size: 14px;
  555 + margin-bottom: 30px;
  556 + }
  557 + .D6_v5{
  558 + .D6_v5_s1{
  559 + font-weight: bold;
  560 + }
  561 + .D6_v5_s2{
  562 + font-size: 14px;
  563 + }
  564 + }
  565 + }
  566 + .botton{
  567 + position: fixed;
  568 + bottom: 0;
  569 + height: 74px;
  570 + width: 100%;
  571 + background: #FFFFFF;
  572 + padding: 20px 20px 8px 20px;
  573 + font-family: 'PingFangSC-Regular';
  574 + box-sizing: border-box;
  575 + display: flex;
  576 + justify-content: space-between;
  577 + align-content: center;
  578 + .botton_1{
  579 + width: 20%;
  580 + height: 100%;
  581 + text-align: center;
  582 + color: #989898;
  583 + }
  584 + image{
  585 + width: 60%;
  586 + height: 30px;
  587 + }
  588 + .botton_image{
  589 + font-size: 12px;
  590 + text-align: center;
  591 + }
  592 + .botton_2{
  593 + width: 74%;
  594 + height: 86%;
  595 + display: grid;
  596 + grid-template-columns: 50% 50%;
  597 + }
  598 + .botton_input{
  599 + display: inline-flex;
  600 + align-items: center;
  601 + justify-content: space-around;
  602 + background: #FFF0EC;
  603 + font-size: 16px;
  604 + color: #FF6B4A;
  605 + border-radius: 20px 0 0 20px;
  606 + }
  607 + .botton_now{
  608 + display: inline-flex;
  609 + align-items: center;
  610 + justify-content: space-around;
  611 + background: #FF6B4A;
  612 + font-size: 16px;
  613 + color: #FFFFFF;
  614 + border-radius:0 20px 20px 0;
  615 + }
  616 + }
  617 +</style>
0 618 \ No newline at end of file
... ...
src/pages/index/index.vue
... ... @@ -149,7 +149,6 @@ export default {
149 149 }
150 150 },
151 151 onLoad() {
152   - console.log('onload')
153 152 store.dispatch('index/category');
154 153 // this.getList();
155 154 store.dispatch('index/list');
... ... @@ -181,7 +180,6 @@ export default {
181 180 searchKey(e) {
182 181 const { value: keyword } = e.detail;
183 182 this.keyWords = keyword;
184   - console.log('e', e, keyword);
185 183 store.dispatch('index/search', {
186 184 params: {},
187 185 keyword,
... ... @@ -189,16 +187,15 @@ export default {
189 187 },
190 188 //接收菜单结果
191 189 search(e) {
192   - console.log("修改菜单-----", e, this.categoryList);
193 190 const { on, value, index } = e;
194 191 let params = {}
195 192 if(on[0] === 1) {
  193 + // 若点击全部
196 194 this.searchText = '';
197 195 store.dispatch('index/list');
198 196 } else {
199 197 for(let i = 1; i<=on.length; i++){ // on[0]是全部
200 198 if(on[i] === 1) { // 若该选项被选中
201   - console.log('---', `${this.categoryList[i].value}`);
202 199 params[`${this.categoryList[i].value}`] = value[i][0];
203 200 }
204 201 }
... ...
src/pages/myOrderPaying/myOrderPaying.vue
1   -<!-- 订单待付款 待收货 -->
  1 +<!-- 订单待付款 待收货 -->
2 2 <template>
3   - <view class="content">
4   - <!-- 待付款 -->
5   - <view class="order-time" v-if="status == '0'">
6   - <text>请在</text>
7   - <uni-countdown color="#EC5D3B" splitor-color="#EC5D3B" :show-day="false"
8   - :hour="0" :second="getTime" @timeup=timeup ></uni-countdown>
9   - <text>内完成付款</text>
10   - </view>
11   - <!-- 待收货 -->
12   - <view class="headerBanner" v-if="status == '1'">
13   - <view class="bannerLeft">
14   - <view class="T1">卖家已发货</view>
15   - <view class="T2">还剩 确认收货</view>
16   - </view>
17   - <image src="../../static/car.png" mode="aspectFill"></image>
18   - </view>
19   - <view class="order">
20   - <view class="order-user">
21   - <view class="order-user-head">
22   - <text class="p1">{{orderAddressInfo.userName}}</text>
23   - <text class="p2">{{orderAddressInfo.telNumber}}</text>
24   - </view>
25   - <view class="order-user-body">
26   - <image src="../../static/myorder-paying-location.png"></image>
27   - <text class="p3">{{orderAddressInfo.provinceName}} {{orderAddressInfo.cityName}} {{orderAddressInfo.countyName}}\n{{orderAddressInfo.detailInfo}}</text>
28   - </view>
29   - </view>
30   - <view class="order-info">
31   - <view class="order-info-head" v-for="(orderInfoListItem,index) in orderInfoList" :key="index" >
32   - <image :src="orderInfoListItem.imgUrl" mode="aspectFill"></image>
33   - <view class="order-info-head-r">
34   - <text class="p1">{{orderInfoListItem.p_name}}</text>
35   - <view class="p2" style="margin: 0;">
36   - 规格:玫瑰金 / 钛合金 / 防日光防紫外线 / 超薄超轻
37   - <!-- <view class="arrow"></view> -->
38   - </view>
39   - <view class="infoText-bottom">
40   - <view class="markPrice">{{orderInfoListItem.nowPrice}}</view>
41   - <view class="buy-num">X {{orderInfoListItem.num}}</view>
42   - </view>
43   - </view>
44   - </view>
45   -<!-- <view class="order-info-goodsnum">
46   - <text>X1</text>
47   - </view> -->
48   - <text class="order-info-freight">
49   - <text class="p1">运费</text>
50   - <text class="p2">{{orderInfo.trans_price}}</text>
51   - </text>
52   - <text class="order-info-discount">
53   - <text class="p1">优惠</text>
54   - <text class="p2">-¥{{totalDiscount}}</text>
55   - </text>
56   - <text class="order-info-price">
57   - <text class="p1">实付</text>
58   - <text class="p2">¥{{orderInfo.order_info.total_fee}}</text>
59   - </text>
60   - <text class="order-info-num">
61   - <text>订单号:{{orderInfo.prepay_id}}</text>
62   - </text>
63   - <text class="order-info-time">
64   - <text>下单时间:{{orderInfo.pay_time}}</text>
65   - </text>
66   - <view class="order-info-hr"></view>
67   - <view class="order-info-contact">
68   - <image src="../../static/myorder-paying-contact.png"></image>
69   - <text>联系客服</text>
70   - </view>
71   - </view>
72   - </view>
73   - <view class="order-confim" v-if="status == '0'">
74   - <button class="b1" @click="cancleOrder">取消订单</button>
75   - <button class="b2" @click="paylog">立即支付</button>
76   - </view>
77   -
78   - <view class="order-confim" v-if="status == '1'">
79   - <!-- <button class="b1">取消订单</button> -->
80   - <button class="b2" @click="confirmOrder">确认收货</button>
81   - </view>
82   - </view>
  3 + <view class="content">
  4 + <!-- 待付款 -->
  5 + <view
  6 + class="order-time"
  7 + v-if="status == '0'"
  8 + >
  9 + <text>请在</text>
  10 + <uni-countdown
  11 + color="#EC5D3B"
  12 + splitor-color="#EC5D3B"
  13 + :show-day="false"
  14 + :hour="0"
  15 + :second="getTime"
  16 + @timeup=timeup
  17 + ></uni-countdown>
  18 + <text>内完成付款</text>
  19 + </view>
  20 + <!-- 待收货 -->
  21 + <view
  22 + class="headerBanner"
  23 + v-if="status == '1'"
  24 + >
  25 + <view class="bannerLeft">
  26 + <view class="T1">卖家已发货</view>
  27 + <view class="T2">还剩 确认收货</view>
  28 + </view>
  29 + <image
  30 + src="../../static/car.png"
  31 + mode="aspectFill"
  32 + ></image>
  33 + </view>
  34 + <view class="order">
  35 + <view class="order-user">
  36 + <view class="order-user-head">
  37 + <text class="p1">{{orderAddressInfo.userName}}</text>
  38 + <text class="p2">{{orderAddressInfo.telNumber}}</text>
  39 + </view>
  40 + <view class="order-user-body">
  41 + <image src="../../static/myorder-paying-location.png"></image>
  42 + <text class="p3">{{orderAddressInfo.provinceName}} {{orderAddressInfo.cityName}} {{orderAddressInfo.countyName}}\n{{orderAddressInfo.detailInfo}}</text>
  43 + </view>
  44 + </view>
  45 + <view class="order-info">
  46 + <view
  47 + class="order-info-head"
  48 + v-for="(orderInfoListItem,index) in orderInfoList"
  49 + :key="index"
  50 + >
  51 + <image
  52 + :src="orderInfoListItem.imgUrl"
  53 + mode="aspectFill"
  54 + ></image>
  55 + <view class="order-info-head-r">
  56 + <text class="p1">{{orderInfoListItem.p_name}}</text>
  57 + <view
  58 + class="p2"
  59 + style="margin: 0;"
  60 + >
  61 + 规格:玫瑰金 / 钛合金 / 防日光防紫外线 / 超薄超轻
  62 + <!-- <view class="arrow"></view> -->
  63 + </view>
  64 + <view class="infoText-bottom">
  65 + <view class="markPrice">{{orderInfoListItem.nowPrice}}</view>
  66 + <view class="buy-num">X {{orderInfoListItem.num}}</view>
  67 + </view>
  68 + </view>
  69 + </view>
  70 + <!-- <view class="order-info-goodsnum">
  71 + <text>X1</text>
  72 + </view> -->
  73 + <text class="order-info-freight">
  74 + <text class="p1">运费</text>
  75 + <text class="p2">{{orderInfo.trans_price}}</text>
  76 + </text>
  77 + <text class="order-info-discount">
  78 + <text class="p1">优惠</text>
  79 + <text class="p2">-¥{{totalDiscount}}</text>
  80 + </text>
  81 + <text class="order-info-price">
  82 + <text class="p1">实付</text>
  83 + <text class="p2">¥{{orderInfo.order_info.total_fee}}</text>
  84 + </text>
  85 + <text class="order-info-num">
  86 + <text>订单号:{{orderInfo.prepay_id}}</text>
  87 + </text>
  88 + <text class="order-info-time">
  89 + <text>下单时间:{{orderInfo.pay_time}}</text>
  90 + </text>
  91 + <view class="order-info-hr"></view>
  92 + <view class="order-info-contact">
  93 + <image src="../../static/myorder-paying-contact.png"></image>
  94 + <text>联系客服</text>
  95 + </view>
  96 + </view>
  97 + </view>
  98 + <view
  99 + class="order-confim"
  100 + v-if="status == '0'"
  101 + >
  102 + <button
  103 + class="b1"
  104 + @click="cancleOrder"
  105 + >取消订单</button>
  106 + <button
  107 + class="b2"
  108 + @click="paylog"
  109 + >立即支付</button>
  110 + </view>
  111 +
  112 + <view
  113 + class="order-confim"
  114 + v-if="status == '1'"
  115 + >
  116 + <!-- <button class="b1">取消订单</button> -->
  117 + <button
  118 + class="b2"
  119 + @click="confirmOrder"
  120 + >确认收货</button>
  121 + </view>
  122 + </view>
83 123 </template>
84 124  
85   -<script>
86   - import store from '@/store';
87   - import UniCountdown from '../../components/UniCountdown/UniCountdown.vue'
88   - export default {
89   - components: {
90   - UniCountdown
91   - },
92   - data() {
93   - return {
94   - // orderInfo:{},
95   - payId:'',
96   - status:'',
97   - uid:'',
98   - openid:'',
99   - lefttime:0,
100   -
101   - }
102   - },
103   - onLoad: function(option) {
104   - console.log(option);
105   - this.payId = option.payId;
106   - this.status = option.status
107   - const openid = uni.getStorageSync('openid');
108   - const uid = this.$store.state.user.uid
109   - this.uid = uid
110   - this.openid = openid
111   - store.dispatch('orderRead/getOrderInfo',{
112   - pay_id:this.payId,
113   - uid:'1',
114   - openid:openid
115   - })
116   -
117   -
118   -
119   - // this.orderInfo = this.$store.state.orderRead.orderInfo
120   - },
121   - computed: {
122   - //获取订单详细信息
123   - orderInfo() {
124   - console.log(this.$store.state.orderRead.orderInfo)
125   - return this.$store.state.orderRead.orderInfo || {}
126   - },
127   - orderInfoList(){
128   - const orderInfoList =this.orderInfo.order_info[0].list
129   - return orderInfoList
130   - },
131   - //获取订单地址信息
132   - orderAddressInfo(){
133   - return this.orderInfo.order_info[0].address
134   - },
135   - //订单付款时间
136   - getTime(){
137   - return this.orderInfo.order_info[0].lefttime
138   - },
139   - // 计算总优惠额
140   - totalDiscount(){
141   - const discountInfoList = this.orderInfo.discount_info
142   - let totalDiscount = 0;
143   - if(discountInfoList){
144   - discountInfoList.map((discountItem,index)=>{
145   - totalDiscount += Number(discountItem.value)
146   - })
147   - }
148   - // console.log(totalDiscount)
149   - return totalDiscount
150   - },
151   - },
152   - methods: {
153   - //取消订单
154   - timeup(){
155   - this.cancleOrder()
156   - },
157   - cancleOrder(){
158   - const uid = this.uid
159   - const openid = this.openid
160   - uni.showModal({
161   - title: '提示',
162   - content: '现在取消,订单不可恢复哦,确认取消吗?',
163   - success: function (res) {
164   - if (res.confirm) {
165   - store.dispatch('cancelOrder/cancel',{
166   - keyname:'1',
167   - uid:uid,
168   - openid:openid
169   - })
170   - } else if (res.cancel) {
171   - console.log('用户点击取消');
172   - }
173   - }
174   - })
175   - },
176   - paylog(){
177   -
178   - },
179   - confirmOrder(){
180   - store.dispatch('statusConfirm/confirm',{
181   - uid:this.uid,
182   - openid:this.openid,
183   - oldway:'1',
184   - way:'2',
185   - pay_id:this.payId,
186   - judgeContent:'',
187   - orderInfo:this.orderInfo.order_info,
188   - }).then(
189   - setTimeout(()=>{
190   - uni.navigateBack()
191   - },1500)
192   - )
193   - }
194   - }
195   - }
  125 +<script>
  126 +import store from '@/store'
  127 +import UniCountdown from '../../components/UniCountdown/UniCountdown.vue'
  128 +export default {
  129 + components: {
  130 + UniCountdown
  131 + },
  132 + data () {
  133 + return {
  134 + // orderInfo:{},
  135 + payId: '',
  136 + status: '',
  137 + uid: '',
  138 + openid: '',
  139 + lefttime: 0
  140 +
  141 + }
  142 + },
  143 + onLoad: function (option) {
  144 + console.log(option)
  145 + this.payId = option.payId
  146 + this.status = option.status
  147 + const openid = uni.getStorageSync('openid')
  148 + const uid = this.$store.state.user.uid
  149 + this.uid = uid
  150 + this.openid = openid
  151 + store.dispatch('orderRead/getOrderInfo', {
  152 + pay_id: this.payId,
  153 + uid: '1',
  154 + openid: openid
  155 + })
  156 +
  157 + // this.orderInfo = this.$store.state.orderRead.orderInfo
  158 + },
  159 + computed: {
  160 + // 获取订单详细信息
  161 + orderInfo () {
  162 + console.log(this.$store.state.orderRead.orderInfo)
  163 + return this.$store.state.orderRead.orderInfo || {}
  164 + },
  165 + orderInfoList () {
  166 + const orderInfoList = this.orderInfo.order_info[0].list
  167 + return orderInfoList
  168 + },
  169 + // 获取订单地址信息
  170 + orderAddressInfo () {
  171 + return this.orderInfo.order_info[0].address
  172 + },
  173 + // 订单付款时间
  174 + getTime () {
  175 + return this.orderInfo.order_info[0].lefttime
  176 + },
  177 + // 计算总优惠额
  178 + totalDiscount () {
  179 + const discountInfoList = this.orderInfo.discount_info
  180 + let totalDiscount = 0
  181 + if (discountInfoList) {
  182 + discountInfoList.map((discountItem, index) => {
  183 + totalDiscount += Number(discountItem.value)
  184 + })
  185 + }
  186 + // console.log(totalDiscount)
  187 + return totalDiscount
  188 + }
  189 + },
  190 + methods: {
  191 + // 取消订单
  192 + timeup () {
  193 + this.cancleOrder()
  194 + },
  195 + cancleOrder () {
  196 + const uid = this.uid
  197 + const openid = this.openid
  198 + uni.showModal({
  199 + title: '提示',
  200 + content: '现在取消,订单不可恢复哦,确认取消吗?',
  201 + success: function (res) {
  202 + if (res.confirm) {
  203 + store.dispatch('cancelOrder/cancel', {
  204 + keyname: '1',
  205 + uid: uid,
  206 + openid: openid
  207 + })
  208 + } else if (res.cancel) {
  209 + console.log('用户点击取消')
  210 + }
  211 + }
  212 + })
  213 + },
  214 + paylog () {
  215 +
  216 + },
  217 + confirmOrder () {
  218 + store.dispatch('statusConfirm/confirm', {
  219 + uid: this.uid,
  220 + openid: this.openid,
  221 + oldway: '1',
  222 + way: '2',
  223 + pay_id: this.payId,
  224 + judgeContent: '',
  225 + orderInfo: this.orderInfo.order_info
  226 + }).then(
  227 + setTimeout(() => {
  228 + uni.navigateBack()
  229 + }, 1500)
  230 + )
  231 + }
  232 + }
  233 +}
196 234 </script>
197 235  
198 236 <style lang="scss" scoped>
199   - .content{
200   - min-height: 100vh;
201   - display: flex;
202   - flex-direction: column;
203   - justify-content: flex-start;
204   - align-items: center;
205   - background-color: #f2f2f2;
206   - }
207   -
208   -
209   - .order {
210   - margin-bottom: 112rpx;
211   - background: #F2F2F2;
212   - margin-top: 140rpx;
213   - width: 670rpx;
214   - }
  237 +.content {
  238 + min-height: 100vh;
  239 + display: flex;
  240 + flex-direction: column;
  241 + justify-content: flex-start;
  242 + align-items: center;
  243 + background-color: #f2f2f2;
  244 +}
  245 +
  246 +.order {
  247 + margin-bottom: 112rpx;
  248 + background: #f2f2f2;
  249 + margin-top: 140rpx;
  250 + width: 670rpx;
  251 +}
  252 +
  253 +.order-time {
  254 + width: 100%;
  255 + height: 140rpx;
  256 + background-color: #fff;
  257 + display: flex;
  258 + justify-content: center;
  259 + align-items: center;
  260 + position: fixed;
  261 + top: 0;
  262 + left: 0;
  263 + text {
  264 + // font-family: PingFangSC-Regular;
  265 + // margin-top: 48rpx;
  266 + font-size: 14px;
  267 + color: #333333;
  268 + letter-spacing: -0.26px;
  269 + }
  270 + .p2 {
  271 + // font-family: DINAlternate-Bold;
  272 + margin: 42rpx 20rpx 0 20rpx;
  273 + font-size: 18px;
  274 + color: #ec5d3b;
  275 + letter-spacing: -0.34px;
  276 + }
  277 +}
  278 +.headerBanner {
  279 + width: 100%;
  280 + height: 140rpx;
  281 + background: #4a90e2;
  282 + padding: 26rpx 60rpx 24rpx 60rpx;
  283 + box-sizing: border-box;
  284 + color: #ffffff;
  285 + display: flex;
  286 + justify-content: space-between;
  287 + align-items: center;
  288 + position: fixed;
  289 + top: 0;
  290 + left: 0;
  291 + .bannerLeft {
  292 + font-size: 36rpx;
  293 + display: flex;
  294 + flex-direction: column;
  295 + justify-content: center;
  296 + align-items: center;
  297 + .T2 {
  298 + font-size: 24rpx;
  299 + }
  300 + }
  301 + image {
  302 + height: 56rpx;
  303 + width: 72rpx;
  304 + }
  305 +}
  306 +
  307 +.order-user {
  308 + height: 228rpx;
  309 + background: #ffffff;
  310 + border-radius: 14rpx;
  311 + margin: 0 auto;
  312 + margin-top: 20rpx;
  313 + margin-bottom: 20rpx;
  314 + .order-user-head {
  315 + display: flex;
  316 + height: 108rpx;
  317 + align-items: center;
  318 + margin-left: 126rpx;
  319 + .p1 {
  320 + // font-family: PingFangSC-Regular;
  321 + font-size: 14px;
  322 + color: #333333;
  323 + letter-spacing: -0.26px;
  324 + margin-right: 20rpx;
  325 + }
  326 + .p2 {
  327 + // font-family: PingFangSC-Regular;
  328 + font-size: 14px;
  329 + color: #999999;
  330 + letter-spacing: -0.26px;
  331 + }
  332 + }
  333 + .order-user-body {
  334 + display: flex;
  335 + width: 100%;
  336 + image {
  337 + width: 24px;
  338 + height: 26px;
  339 + margin: 12rpx 32rpx 0 40rpx;
  340 + }
  341 + .p3 {
  342 + // font-family: PingFangSC-Semibold;
  343 + font-size: 14px;
  344 + color: #333333;
  345 + letter-spacing: -0.26px;
  346 + }
  347 + }
  348 +}
215 349  
216   - .order-time {
217   - width: 100%;
218   - height: 140rpx;
219   - background-color: #fff;
220   - display: flex;
221   - justify-content: center;
222   - align-items: center;
223   - position: fixed;
224   - top: 0 ;
225   - left: 0;
226   - text {
227   - // font-family: PingFangSC-Regular;
228   - // margin-top: 48rpx;
229   - font-size: 14px;
230   - color: #333333;
231   - letter-spacing: -0.26px;
232   - }
233   - .p2 {
234   - // font-family: DINAlternate-Bold;
235   - margin: 42rpx 20rpx 0 20rpx;
236   - font-size: 18px;
237   - color: #EC5D3B;
238   - letter-spacing: -0.34px;
239   - }
240   - }
241   - .headerBanner{
242   - width: 100%;
243   - height: 140rpx;
244   - background: #4A90E2;
245   - padding: 26rpx 60rpx 24rpx 60rpx;
246   - box-sizing: border-box;
247   - color: #FFFFFF;
248   - display: flex;
249   - justify-content: space-between;
250   - align-items: center;
251   - position: fixed;
252   - top: 0 ;
253   - left: 0;
254   - .bannerLeft{
255   - font-size: 36rpx;
256   - display: flex;
257   - flex-direction: column;
258   - justify-content: center;
259   - align-items: center;
260   - .T2{
261   - font-size: 24rpx;
262   - }
263   - }
264   - image{
265   - height: 56rpx;
266   - width: 72rpx;
267   - }
268   - }
269   -
270   - .order-user {
271   - height: 228rpx;
272   - background: #FFFFFF;
273   - border-radius: 14rpx;
274   - margin: 0 auto;
275   - margin-top: 20rpx;
276   - margin-bottom: 20rpx;
277   - .order-user-head {
278   - display: flex;
279   - height: 108rpx;
280   - align-items: center;
281   - margin-left: 126rpx;
282   - .p1 {
283   - // font-family: PingFangSC-Regular;
284   - font-size: 14px;
285   - color: #333333;
286   - letter-spacing: -0.26px;
287   - margin-right: 20rpx;
288   - }
289   - .p2 {
290   - // font-family: PingFangSC-Regular;
291   - font-size: 14px;
292   - color: #999999;
293   - letter-spacing: -0.26px;
294   - }
295   - }
296   - .order-user-body {
297   - display: flex;
298   - width: 100%;
299   - image{
300   - width: 24px;
301   - height: 26px;
302   - margin: 12rpx 32rpx 0 40rpx;
303   - }
304   - .p3 {
305   - // font-family: PingFangSC-Semibold;
306   - font-size: 14px;
307   - color: #333333;
308   - letter-spacing: -0.26px;
309   - }
310   - }
311   - }
312   -
313   - .order-info {
314   - background-color: #fff;
315   - box-shadow: 0 0 20rpx 0 rgba(177,128,128,0.06);
316   - border-radius: 16rpx;
317   - margin: 0 auto;
318   - view{
319   - margin-left: 40rpx;
320   - }
321   - text{
322   - font-size: 14px;
323   - }
324   - .order-info-head {
325   - display: flex;
326   - padding-top: 40rpx;
327   - image{
328   - height: 188rpx;
329   - width: 188rpx;
330   - }
331   - .order-info-head-r{
332   - margin: 0;
333   - width: 368rpx;
334   - margin-left: 24rpx;
335   - // margin-top: 40rpx;
336   - text{
337   - display: block;
338   - }
339   - // .arrow{
340   - // width: 0;
341   - // height: 0;
342   - // border-left: 5px transparent;
343   - // border-right: 5px transparent;
344   - // border-top: 5px #979797;
345   - // border-bottom: 0 transparent;
346   - // border-style: solid;
347   - // position: relative;
348   - // // transform: scaleY(-1);
349   - // }
350   - // .arrow::after{
351   - // content: '';
352   - // position: absolute;
353   - // top: -6.5px;
354   - // left: -5px;
355   - // border-left: 5px transparent;
356   - // border-right: 5px transparent;
357   - // border-top: 5px #FFFFFF;
358   - // border-bottom: 0 transparent;
359   - // border-style: solid;
360   - // }
361   - .p1 {
362   - min-height: 40px;
363   - // font-family: PingFangSC-Regular;
364   - font-size: 14px;
365   - color: #333333;
366   - letter-spacing: -0.26px;
367   - line-height: 18px;
368   - // line-height: 20px;
369   - }
370   - .p2 {
371   - height: 34px;
372   - padding: 1px 0 3px 0;
373   - // font-family: PingFangSC-Regular;
374   - font-size: 12px;
375   - color: #999999;
376   - letter-spacing: -0.23px;
377   - }
378   - .infoText-bottom{
379   - display: flex;
380   - flex-direction: row;
381   - justify-content: flex-start;
382   - align-items: center;
383   - width: 100%;
384   - margin-left: 0;
385   - .markPrice{
386   - font-size: 14px;
387   - color: #FF6B4A;
388   - margin-right: 20rpx;
389   - margin-left: 0rpx;
390   - }
391   - .buy-num{
392   - font-size: 12px;
393   - color: #999999;
394   - }
395   - }
396   - }
  350 +.order-info {
  351 + background-color: #fff;
  352 + box-shadow: 0 0 20rpx 0 rgba(177, 128, 128, 0.06);
  353 + border-radius: 16rpx;
  354 + margin: 0 auto;
  355 + view {
  356 + margin-left: 40rpx;
  357 + }
  358 + text {
  359 + font-size: 14px;
  360 + }
  361 + .order-info-head {
  362 + display: flex;
  363 + padding-top: 40rpx;
  364 + image {
  365 + height: 188rpx;
  366 + width: 188rpx;
  367 + }
  368 + .order-info-head-r {
  369 + margin: 0;
  370 + width: 368rpx;
  371 + margin-left: 24rpx;
  372 + // margin-top: 40rpx;
  373 + text {
  374 + display: block;
  375 + }
  376 + // .arrow{
  377 + // width: 0;
  378 + // height: 0;
  379 + // border-left: 5px transparent;
  380 + // border-right: 5px transparent;
  381 + // border-top: 5px #979797;
  382 + // border-bottom: 0 transparent;
  383 + // border-style: solid;
  384 + // position: relative;
  385 + // // transform: scaleY(-1);
  386 + // }
  387 + // .arrow::after{
  388 + // content: '';
  389 + // position: absolute;
  390 + // top: -6.5px;
  391 + // left: -5px;
  392 + // border-left: 5px transparent;
  393 + // border-right: 5px transparent;
  394 + // border-top: 5px #FFFFFF;
  395 + // border-bottom: 0 transparent;
  396 + // border-style: solid;
  397 + // }
  398 + .p1 {
  399 + min-height: 40px;
  400 + // font-family: PingFangSC-Regular;
  401 + font-size: 14px;
  402 + color: #333333;
  403 + letter-spacing: -0.26px;
  404 + line-height: 18px;
  405 + // line-height: 20px;
  406 + }
  407 + .p2 {
  408 + height: 34px;
  409 + padding: 1px 0 3px 0;
  410 + // font-family: PingFangSC-Regular;
  411 + font-size: 12px;
  412 + color: #999999;
  413 + letter-spacing: -0.23px;
  414 + }
  415 + .infoText-bottom {
  416 + display: flex;
  417 + flex-direction: row;
  418 + justify-content: flex-start;
  419 + align-items: center;
  420 + width: 100%;
  421 + margin-left: 0;
  422 + .markPrice {
  423 + font-size: 14px;
  424 + color: #ff6b4a;
  425 + margin-right: 20rpx;
  426 + margin-left: 0rpx;
  427 + }
  428 + .buy-num {
  429 + font-size: 12px;
  430 + color: #999999;
  431 + }
  432 + }
  433 + }
  434 + }
  435 + // .order-info-goodsnum {
  436 + // display: flex;
  437 + // align-items: center;
  438 + // justify-content: flex-end;
  439 + // text {
  440 + // margin-right: 44rpx;
  441 + // // ont-family: PingFangSC-Regular;
  442 + // font-size: 12px;
  443 + // color: #999999;
  444 + // letter-spacing: -0.23px;
  445 + // }
  446 + // }
  447 + .order-info-freight {
  448 + display: block;
  449 + margin-left: 40rpx;
  450 + margin-top: 22rpx;
  451 + .p1 {
  452 + // font-family: PingFangSC-Regular;
  453 + font-size: 14px;
  454 + color: #333333;
  455 + letter-spacing: -0.26px;
  456 + line-height: 18px;
  457 + margin-right: 24px;
  458 + }
  459 + .p2 {
  460 + // font-family: PingFangSC-Regular;
  461 + font-size: 14px;
  462 + color: #ff6b4a;
  463 + letter-spacing: -0.26px;
  464 + }
  465 + }
  466 + .order-info-discount {
  467 + display: block;
  468 + margin-left: 40rpx;
  469 + margin-top: 24rpx;
  470 + .p1 {
  471 + // font-family: PingFangSC-Regular;
  472 + font-size: 14px;
  473 + color: #333333;
  474 + letter-spacing: -0.26px;
  475 + line-height: 18px;
  476 + margin-right: 24px;
  477 + }
  478 + .p2 {
  479 + // font-family: PingFangSC-Regular;
  480 + font-size: 14px;
  481 + color: #ff6b4a;
  482 + letter-spacing: -0.26px;
  483 + }
  484 + }
  485 + .order-info-price {
  486 + display: block;
  487 + margin-left: 40rpx;
  488 + margin-top: 24rpx;
  489 + .p1 {
  490 + // font-family: PingFangSC-Semibold;
  491 + font-size: 14px;
  492 + color: #333333;
  493 + letter-spacing: -0.26px;
  494 + line-height: 18px;
  495 + margin-right: 24px;
  496 + }
  497 + .p2 {
  498 + // font-family: PingFangSC-Semibold;
  499 + font-size: 14px;
  500 + color: #ff6b4a;
  501 + letter-spacing: -0.26px;
  502 + }
  503 + }
  504 + .order-info-num {
  505 + display: block;
  506 + margin-left: 40rpx;
  507 + margin-top: 44rpx;
  508 + text {
  509 + // font-family: PingFangSC-Regular;
  510 + font-size: 12px;
  511 + color: #999999;
  512 + letter-spacing: -0.23px;
  513 + }
  514 + }
  515 + .order-info-time {
  516 + display: block;
  517 + margin: 8rpx 0 48rpx 40rpx;
  518 + text {
  519 + // font-family: PingFangSC-Regular;
  520 + font-size: 12px;
  521 + color: #999999;
  522 + letter-spacing: -0.23px;
  523 + }
  524 + }
  525 + .order-info-hr {
  526 + width: 520rpx;
  527 + height: 1px;
  528 + background-color: #e9e9e9;
  529 + margin-bottom: 20rpx;
  530 + }
  531 + .order-info-contact {
  532 + display: flex;
  533 + padding-bottom: 28rpx;
  534 + image {
  535 + width: 19px;
  536 + height: 16px;
  537 + }
  538 + text {
  539 + // font-family: PingFangSC-Regular;
  540 + margin-left: 20rpx;
  541 + font-size: 14px;
  542 + color: #333333;
  543 + letter-spacing: -0.26px;
  544 + line-height: 18px;
  545 + }
  546 + }
  547 +}
397 548  
398   - }
399   - // .order-info-goodsnum {
400   - // display: flex;
401   - // align-items: center;
402   - // justify-content: flex-end;
403   - // text {
404   - // margin-right: 44rpx;
405   - // // ont-family: PingFangSC-Regular;
406   - // font-size: 12px;
407   - // color: #999999;
408   - // letter-spacing: -0.23px;
409   - // }
410   - // }
411   - .order-info-freight {
412   - display: block;
413   - margin-left: 40rpx;
414   - margin-top: 22rpx;
415   - .p1{
416   - // font-family: PingFangSC-Regular;
417   - font-size: 14px;
418   - color: #333333;
419   - letter-spacing: -0.26px;
420   - line-height: 18px;
421   - margin-right: 24px;
422   - }
423   - .p2 {
424   - // font-family: PingFangSC-Regular;
425   - font-size: 14px;
426   - color: #FF6B4A;
427   - letter-spacing: -0.26px;
428   - }
429   - }
430   - .order-info-discount {
431   - display: block;
432   - margin-left: 40rpx;
433   - margin-top: 24rpx;
434   - .p1 {
435   - // font-family: PingFangSC-Regular;
436   - font-size: 14px;
437   - color: #333333;
438   - letter-spacing: -0.26px;
439   - line-height: 18px;
440   - margin-right: 24px;
441   - }
442   - .p2 {
443   - // font-family: PingFangSC-Regular;
444   - font-size: 14px;
445   - color: #FF6B4A;
446   - letter-spacing: -0.26px;
447   - }
448   - }
449   - .order-info-price {
450   - display: block;
451   - margin-left: 40rpx;
452   - margin-top: 24rpx;
453   - .p1 {
454   - // font-family: PingFangSC-Semibold;
455   - font-size: 14px;
456   - color: #333333;
457   - letter-spacing: -0.26px;
458   - line-height: 18px;
459   - margin-right: 24px;
460   - }
461   - .p2 {
462   - // font-family: PingFangSC-Semibold;
463   - font-size: 14px;
464   - color: #FF6B4A;
465   - letter-spacing: -0.26px;
466   - }
467   - }
468   - .order-info-num{
469   - display: block;
470   - margin-left: 40rpx;
471   - margin-top: 44rpx;
472   - text{
473   - // font-family: PingFangSC-Regular;
474   - font-size: 12px;
475   - color: #999999;
476   - letter-spacing: -0.23px;
477   - }
478   - }
479   - .order-info-time {
480   - display: block;
481   - margin: 8rpx 0 48rpx 40rpx;
482   - text{
483   - // font-family: PingFangSC-Regular;
484   - font-size: 12px;
485   - color: #999999;
486   - letter-spacing: -0.23px;
487   - }
488   - }
489   - .order-info-hr{
490   - width: 520rpx;
491   - height: 1px;
492   - background-color: #E9E9E9;
493   - margin-bottom: 20rpx;
494   - }
495   - .order-info-contact {
496   - display: flex;
497   - padding-bottom: 28rpx;
498   - image{
499   - width: 19px;
500   - height: 16px;
501   - }
502   - text {
503   - // font-family: PingFangSC-Regular;
504   - margin-left: 20rpx;
505   - font-size: 14px;
506   - color: #333333;
507   - letter-spacing: -0.26px;
508   - line-height: 18px;
509   - }
510   - }
511   - }
512   -
513   - .order-confim {
514   - display: flex;
515   - align-items: center;
516   - justify-content: flex-end;
517   - // z-index: 999;
518   - width: 100%;
519   - height: 112rpx;
520   - position: fixed;
521   - bottom: 0;
522   - background: #FFFFFF;
523   - button {
524   - width: 204rpx;
525   - height: 80rpx;
526   - border: 1px solid #FF6B4A;
527   - border-radius: 40rpx;
528   - font-size: 32rpx;
529   - letter-spacing: -0.3px;
530   - margin-right: 0;
531   - }
532   - .b1 {
533   - // font-family: PingFangSC-Regular;
534   - color: #FF6B4A;
535   - background-color: #FFFFFF;
536   - }
537   - .b2 {
538   - // font-family: PingFangSC-Regular;
539   - background-color: #FF6B4A;
540   - color: #FFFFFF;
541   - margin: 0 26rpx 0 20rpx;
542   - }
543   - }
544   -
  549 +.order-confim {
  550 + display: flex;
  551 + align-items: center;
  552 + justify-content: flex-end;
  553 + // z-index: 999;
  554 + width: 100%;
  555 + height: 112rpx;
  556 + position: fixed;
  557 + bottom: 0;
  558 + background: #ffffff;
  559 + button {
  560 + width: 204rpx;
  561 + height: 80rpx;
  562 + border: 1px solid #ff6b4a;
  563 + border-radius: 40rpx;
  564 + font-size: 32rpx;
  565 + letter-spacing: -0.3px;
  566 + margin-right: 0;
  567 + }
  568 + .b1 {
  569 + // font-family: PingFangSC-Regular;
  570 + color: #ff6b4a;
  571 + background-color: #ffffff;
  572 + }
  573 + .b2 {
  574 + // font-family: PingFangSC-Regular;
  575 + background-color: #ff6b4a;
  576 + color: #ffffff;
  577 + margin: 0 26rpx 0 20rpx;
  578 + }
  579 +}
545 580 </style>
... ...
src/pages/purchaseLenses/purchaseLenses.vue
... ... @@ -18,61 +18,200 @@
18 18 </view>
19 19 </view>
20 20 </view>
  21 + <view class="goods-data">
  22 + <view class="opCollapse">
  23 + <view class="body">
  24 + <template v-if="opIsOpen">
  25 + <view class="goods-form">
  26 + <view class="data-title">
  27 + <image src="../../static/icon-data.png" ></image>
  28 + <text class="p1">填写验光数据</text>
  29 + </view>
  30 + <text class="p2">没有验光数据?请到线下眼镜店验光哦~</text>
  31 + <view class="picker" >
  32 + <view class="picker-choice">
  33 + <view class="choice-left">
  34 + <text class="p11">验光单取名:</text>
  35 + </view>
  36 + <input class="choice-name uni-input" placeholder="下系" />
  37 + </view>
  38 + </view>
  39 + <view class="picker" >
  40 + <view class="picker-choice">
  41 + <view class="choice-left">
  42 + <text class="p11">{{pickerInfoList[0].nameC}}</text>
  43 + <text class="p12">{{pickerInfoList[0].nameE}}</text>
  44 + </view>
  45 + <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
  46 + <text class="p14">{{pickerInfoList[0].nameArray1[pickerInfoList[0].nameIndex1]}}</text>
  47 + <picker @change="bindPickerChange01" :value="pickerInfoList[0].nameIndex1" :range="pickerInfoList[0].nameArray1">
  48 + <image src="../../static/detail-tabicon.png" ></image>
  49 + </picker>
  50 + <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
  51 + <text class="p14">{{pickerInfoList[0].nameArray2[pickerInfoList[0].nameIndex2]}}</text>
  52 + <picker @change="bindPickerChange02" :value="pickerInfoList[0].nameIndex2" :range="pickerInfoList[0].nameArray2">
  53 + <image src="../../static/detail-tabicon.png" ></image>
  54 + </picker>
  55 + </view>
  56 + </view>
  57 + <view class="picker" >
  58 + <view class="picker-choice">
  59 + <view class="choice-left">
  60 + <text class="p11">{{pickerInfoList[1].nameC}}</text>
  61 + <text class="p12">{{pickerInfoList[1].nameE}}</text>
  62 + </view>
  63 + <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
  64 + <text class="p14">{{pickerInfoList[1].nameArray1[pickerInfoList[1].nameIndex1]}}</text>
  65 + <picker @change="bindPickerChange11" :value="pickerInfoList[1].nameIndex1" :range="pickerInfoList[1].nameArray1">
  66 + <image src="../../static/detail-tabicon.png" ></image>
  67 + </picker>
  68 + <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
  69 + <text class="p14">{{pickerInfoList[1].nameArray2[pickerInfoList[1].nameIndex2]}}</text>
  70 + <picker @change="bindPickerChange12" :value="pickerInfoList[1].nameIndex2" :range="pickerInfoList[1].nameArray2">
  71 + <image src="../../static/detail-tabicon.png" ></image>
  72 + </picker>
  73 + </view>
  74 + </view>
  75 + <view class="picker" >
  76 + <view class="picker-choice">
  77 + <view class="choice-left">
  78 + <text class="p11">{{pickerInfoList[2].nameC}}</text>
  79 + <text class="p12">{{pickerInfoList[2].nameE}}</text>
  80 + </view>
  81 + <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
  82 + <text class="p14">{{pickerInfoList[2].nameArray1[pickerInfoList[2].nameIndex1]}}</text>
  83 + <picker @change="bindPickerChange21" :value="pickerInfoList[2].nameIndex1" :range="pickerInfoList[2].nameArray1">
  84 + <image src="../../static/detail-tabicon.png" ></image>
  85 + </picker>
  86 + <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
  87 + <text class="p14">{{pickerInfoList[2].nameArray2[pickerInfoList[2].nameIndex2]}}</text>
  88 + <picker @change="bindPickerChange22" :value="pickerInfoList[2].nameIndex2" :range="pickerInfoList[2].nameArray2">
  89 + <image src="../../static/detail-tabicon.png" ></image>
  90 + </picker>
  91 + </view>
  92 + </view>
  93 + <view class="picker" >
  94 + <view class="picker-choice">
  95 + <view class="choice-left">
  96 + <text class="p11">{{pickerInfoList[3].nameC}}</text>
  97 + <text class="p12">{{pickerInfoList[3].nameE}}</text>
  98 + </view>
  99 + <text class="p13">左&nbsp;&nbsp;&nbsp;(OD)</text>
  100 + <text class="p14">{{pickerInfoList[3].nameArray1[pickerInfoList[3].nameIndex1]}}</text>
  101 + <picker @change="bindPickerChange31" :value="pickerInfoList[3].nameIndex1" :range="pickerInfoList[3].nameArray1">
  102 + <image src="../../static/detail-tabicon.png" ></image>
  103 + </picker>
  104 + <text class="p13">右&nbsp;&nbsp;&nbsp;(OS)</text>
  105 + <text class="p14">{{pickerInfoList[3].nameArray2[pickerInfoList[3].nameIndex2]}}</text>
  106 + <picker @change="bindPickerChange32" :value="pickerInfoList[3].nameIndex2" :range="pickerInfoList[3].nameArray2">
  107 + <image src="../../static/detail-tabicon.png" ></image>
  108 + </picker>
  109 + </view>
  110 + </view>
  111 + <view class="picker" >
  112 + <view class="picker-choice">
  113 + <view class="choice-left">
  114 + <text class="p11">{{pickerInfoList[4].nameC}}</text>
  115 + </view>
  116 + <text class="p13-date">年&nbsp;&nbsp;&nbsp;(Y)</text>
  117 + <text class="p14" style="width: 34px;">{{pickerInfoList[4].nameArray1[pickerInfoList[4].nameIndex1]}}</text>
  118 + <picker @change="bindPickerChange41" :value="pickerInfoList[4].nameIndex1" :range="pickerInfoList[4].nameArray1">
  119 + <image src="../../static/detail-tabicon.png" ></image>
  120 + </picker>
  121 + <text class="p13-date">月&nbsp;&nbsp;&nbsp;(M)</text>
  122 + <text class="p14" style="width: 30px;">{{pickerInfoList[4].nameArray2[pickerInfoList[4].nameIndex2]}}</text>
  123 + <picker @change="bindPickerChange42" :value="pickerInfoList[4].nameIndex2" :range="pickerInfoList[4].nameArray2">
  124 + <image src="../../static/detail-tabicon.png" ></image>
  125 + </picker>
  126 + <text class="p13-date">日&nbsp;&nbsp;&nbsp;(D)</text>
  127 + <text class="p14" style="width: 30px;">{{pickerInfoList[4].nameArray3[pickerInfoList[4].nameIndex3]}}</text>
  128 + <picker @change="bindPickerChange43" :value="pickerInfoList[4].nameIndex3" :range="pickerInfoList[4].nameArray3">
  129 + <image src="../../static/detail-tabicon.png" ></image>
  130 + </picker>
  131 + </view>
  132 + </view>
  133 + <view class="confirm">
  134 + <image :src="tablist.confirm ? tabicon[0] : tabicon[1]" @click="changeConfirm"></image>
  135 + <text>确认以上输入信息来源于我的验光数据!</text>
  136 + </view>
  137 + </view>
  138 +
  139 + </template>
  140 + <template v-else>
  141 + <view v-for="item in pickerInfoList" :key="item.key" class="bodyBox">
  142 + <template v-if="item.nameC==='验光日期'">
  143 + <text class="names">{{item.nameC}}</text>
  144 + <text style="margin-right: 5px;">{{item.nameArray1[item.nameIndex1]}}年</text>
  145 + <text style="margin-right: 5px;">{{item.nameArray2[item.nameIndex2]}}月</text>
  146 + <text>{{item.nameArray3[item.nameIndex2]}}日</text>
  147 + </template>
  148 + <template v-else>
  149 + <template v-if="item.nameC==='度数'">
  150 + <text style="display: inline;">*</text>
  151 + </template>
  152 +
  153 + <text class="names">{{item.nameC}}</text>
  154 + <text style="margin-right: 10px;">左&nbsp;{{item.nameArray1[item.nameIndex1]}}</text>
  155 + <text>右&nbsp;{{item.nameArray2[item.nameIndex2]}}</text>
  156 + </template>
  157 + </view>
  158 + </template>
  159 + </view>
  160 + </view>
  161 + </view>
21 162 <view class="choose">
22 163 <view class="chooseItem_1 chooseItem">
23 164 <UniCollapse @change="change(1)" >
24   - <UniCollapseItem open=true title="款式挑选" showAnimation=false>
25   - <view class="chooseRes" v-show="!showChooseRes1">* {{chooseRes1}}</view>
26   - <view class="chooseItem_1_content">
27   - <view class="itemsWrap">
28   - <view class="item1"
29   - v-for="(item,index) in chooseItem1"
30   - :key="index"
31   - :style="item.style"
32   - :class="{ active1: current1 === index }"
33   - @click="onClickItem1(index)"
34   - ></view>
35   - </view>
36   - </view>
37   - </UniCollapseItem>
  165 + <UniCollapseItem open=true title="款式挑选" showAnimation=false>
  166 + <view class="chooseRes" v-show="show[1]">* {{chooseRes1}}</view>
  167 + <view class="chooseItem_1_content">
  168 + <view class="itemsWrap">
  169 + <view class="item1"
  170 + v-for="(item,index) in chooseItem1"
  171 + :key="index"
  172 + :style="item.style"
  173 + :class="{ active1: current1 === index }"
  174 + @click="onClickItem1(index)"
  175 + ></view>
  176 + </view>
  177 + </view>
  178 + </UniCollapseItem>
38 179 </UniCollapse>
39   - <view class="chooseRes" v-show="showChooseRes1">* {{chooseRes1}}</view>
  180 + <view class="chooseRes" v-show="show[1]">* {{chooseRes1}}</view>
40 181 </view>
41 182 <view class="chooseItem_2 chooseItem ">
42 183 <UniCollapse @change="change(2)" >
43   - <UniCollapseItem open=true title="直径" showAnimation=false>
44   - <!-- <view class="chooseRes" v-show="!showChooseRes2">* {{chooseRes2}}</view> -->
45   - <view class="chooseItem_1_content">
46   - <view class="itemsWrap">
47   - <view class="item2"
48   - v-for="(item,index) in chooseItem2"
49   - :key="index"
50   - :class="{ active2: current2 === index }"
51   - @click="onClickItem2(index)"
52   - >{{item.num}}</view>
53   - </view>
54   - </view>
55   - </UniCollapseItem>
  184 + <UniCollapseItem open=true title="直径" showAnimation=false>
  185 + <view class="chooseItem_1_content">
  186 + <view class="itemsWrap">
  187 + <view class="item2"
  188 + v-for="(item,index) in chooseItem2"
  189 + :key="index"
  190 + :class="{ active2: current2 === index }"
  191 + @click="onClickItem2(index)"
  192 + >{{item.num}}</view>
  193 + </view>
  194 + </view>
  195 + </UniCollapseItem>
56 196 </UniCollapse>
57   - <view class="chooseRes" v-show="showChooseRes2">* {{chooseRes2}}</view>
  197 + <view class="chooseRes" v-show="show[2]">* {{chooseRes2}}</view>
58 198 </view>
59 199 <view class="chooseItem_3 chooseItem">
60 200 <UniCollapse @change="change(3)" >
61   - <UniCollapseItem open=true title="度数" showAnimation=false>
62   - <!-- <view class="chooseRes" v-show="!showChooseRes3">* {{chooseRes3}}</view> -->
63   - <view class="chooseItem_1_content">
64   - <view class="itemsWrap">
65   - <view class="item2"
66   - v-for="(item,index) in chooseItem3"
67   - :key="index"
68   - :class="{ active2: current3 === index }"
69   - @click="onClickItem3(index)"
70   - >{{item}}</view>
71   - </view>
72   - </view>
73   - </UniCollapseItem>
  201 + <UniCollapseItem open=true title="度数" showAnimation=false>
  202 + <view class="chooseItem_1_content">
  203 + <view class="itemsWrap">
  204 + <view class="item2"
  205 + v-for="(item,index) in chooseItem3"
  206 + :key="index"
  207 + :class="{ active2: current3 === index }"
  208 + @click="onClickItem3(index)"
  209 + >{{item}}</view>
  210 + </view>
  211 + </view>
  212 + </UniCollapseItem>
74 213 </UniCollapse>
75   - <view class="chooseRes" v-show="showChooseRes3">* {{chooseRes3}}</view>
  214 + <view class="chooseRes" v-show="show[3]">* {{chooseRes3}}</view>
76 215 </view>
77 216 </view>
78 217 <view class="button" @click="toComfirmOrder">
... ... @@ -84,105 +223,110 @@
84 223 <script>
85 224 import UniCollapse from '@/components/UniCollapse/UniCollapse.vue'
86 225 import UniCollapseItem from '@/components/UniCollapseItem/UniCollapseItem.vue'
  226 + import store from '@/store'
  227 +
87 228 export default {
88   - components: {UniCollapse,UniCollapseItem},
  229 + components: {
  230 + UniCollapse,
  231 + UniCollapseItem,
  232 + },
89 233 data() {
90 234 return {
91   - count:1,
92   - maxCount:20,
93   - addDisabled:false,
94   - desDisabled:false,
95   - current1:0,
96   - current2:0,
97   - current3:0,
98   - showChooseRes1:false,
99   - showChooseRes2:false,
100   - showChooseRes3:false,
101   - chooseRes1:'Miss 黑二代【减龄自然】',
102   - chooseRes2:'14.0',
103   - chooseRes3:0,
104   - chooseItem1:[
105   - {style:"opacity: 0.7;background-image: radial-gradient(50% 148%, #ECEAEA 50%, #8D8C8C 100%);",describ:"Miss 黑1代【减龄自然】"},
106   - {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #624B3F 100%);",describ:"Miss 黑二代【防紫外线】"},
107   - {style:"background-image: radial-gradient(50% 148%, #FDF8F6 50%, #94380B 100%);",describ:"Miss 黑3代【防紫外线】"},
108   - {style:"background-image: radial-gradient(50% 148%, #FFFFFF 50%, #324A05 100%);",describ:"Miss 黑4代【防紫外线】"},
109   - {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #624B3F 100%);",describ:"Miss 黑5代【防紫外线】"},
110   - {style:"opacity: 0.7;background-image: radial-gradient(50% 150%, #F0EEE7 50%, #6F0838 100%);",describ:"Miss 黑6代【防紫外线】"},
111   - {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #370B4E 100%);",describ:"Miss 黑7代【防紫外线】"},
112   - {style:"background-image: radial-gradient(50% 148%, #FFFFFF 50%, #324A05 100%);",describ:"Miss 黑4代【防紫外线】"},
113   - {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #624B3F 100%);",describ:"Miss 黑5代【防紫外线】"},
114   - {style:"opacity: 0.7;background-image: radial-gradient(50% 150%, #F0EEE7 50%, #6F0838 100%);",describ:"Miss 黑6代【防紫外线】"},
115   - {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #370B4E 100%);",describ:"Miss 黑7代【防紫外线】"},
116   - {style:"background-image: radial-gradient(50% 148%, #FFFFFF 50%, #324A05 100%);",describ:"Miss 黑4代【防紫外线】"},
117   - {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #624B3F 100%);",describ:"Miss 黑5代【防紫外线】"},
118   - {style:"opacity: 0.7;background-image: radial-gradient(50% 150%, #F0EEE7 50%, #6F0838 100%);",describ:"Miss 黑6代【防紫外线】"},
119   - {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #370B4E 100%);",describ:"Miss 黑7代【防紫外线】"},
  235 + count: 1,
  236 + maxCount: 20,
  237 + opIsOpen: true,
  238 + addDisabled: false,
  239 + desDisabled: false,
  240 + current1: 0,
  241 + current2: 0,
  242 + current3: 0,
  243 + actice: [-1, -1, -1],
  244 + show: [0, 0, 0, 0],
  245 + chooseRes1:{
  246 + sku_name: 'Miss 黑二代【减龄自然】',
  247 + sk_id: '128',
  248 + },
  249 + chooseRes2: '14.0',
  250 + chooseRes3: 0,
  251 + chooseItem1: [
  252 + {style:"opacity: 0.7;background-image: radial-gradient(50% 148%, #ECEAEA 50%, #8D8C8C 100%);",describ:"Miss 黑1代【减龄自然】"},
  253 + {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #624B3F 100%);",describ:"Miss 黑二代【防紫外线】"},
  254 + {style:"background-image: radial-gradient(50% 148%, #FDF8F6 50%, #94380B 100%);",describ:"Miss 黑3代【防紫外线】"},
  255 + {style:"background-image: radial-gradient(50% 148%, #FFFFFF 50%, #324A05 100%);",describ:"Miss 黑4代【防紫外线】"},
  256 + {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #624B3F 100%);",describ:"Miss 黑5代【防紫外线】"},
  257 + {style:"opacity: 0.7;background-image: radial-gradient(50% 150%, #F0EEE7 50%, #6F0838 100%);",describ:"Miss 黑6代【防紫外线】"},
  258 + {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #370B4E 100%);",describ:"Miss 黑7代【防紫外线】"},
  259 + {style:"background-image: radial-gradient(50% 148%, #FFFFFF 50%, #324A05 100%);",describ:"Miss 黑4代【防紫外线】"},
  260 + {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #624B3F 100%);",describ:"Miss 黑5代【防紫外线】"},
  261 + {style:"opacity: 0.7;background-image: radial-gradient(50% 150%, #F0EEE7 50%, #6F0838 100%);",describ:"Miss 黑6代【防紫外线】"},
  262 + {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #370B4E 100%);",describ:"Miss 黑7代【防紫外线】"},
  263 + {style:"background-image: radial-gradient(50% 148%, #FFFFFF 50%, #324A05 100%);",describ:"Miss 黑4代【防紫外线】"},
  264 + {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #624B3F 100%);",describ:"Miss 黑5代【防紫外线】"},
  265 + {style:"opacity: 0.7;background-image: radial-gradient(50% 150%, #F0EEE7 50%, #6F0838 100%);",describ:"Miss 黑6代【防紫外线】"},
  266 + {style:"background-image: radial-gradient(50% 143%, #AEA8A8 45%, #370B4E 100%);",describ:"Miss 黑7代【防紫外线】"},
120 267 ],
121 268 chooseItem2:[
122   - {num:"14.0"},
123   - {num:"14.2"},
124   - {num:"14.4"},
125   - {num:"14.5"},
  269 + {num:"14.0"},
  270 + {num:"14.2"},
  271 + {num:"14.4"},
  272 + {num:"14.5"},
  273 + ],
  274 + chooseItem3:[0,100,125,150,175,200,225,250,275,300,325,350,375,400,425,450,470,500,525,550,575,600,1000],
  275 + // 度数相关数据
  276 + pickerInfoList:[
  277 + {nameC:"度数",nameE:"(SPH)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:0},
  278 + {nameC:"散光",nameE:"(CYL)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:1},
  279 + {nameC:"散光轴位",nameE:"(AXI)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:2},
  280 + {nameC:"双眼瞳距",nameE:"(PD)",nameArray1:[1.5,2.5,3.5,4.5],nameIndex1:0,nameArray2:[1.5,2.5,3.5,4.5],nameIndex2:0,key:3},
  281 + {nameC:"验光日期",nameE:'',nameArray1:[2017,2018,2019,2020,2021],nameIndex1:0,nameArray2:[1,2,3,4,5,6,7],nameIndex2:0,nameArray3:[1,2,3,4,5,6],nameIndex3:0}
126 282 ],
127   - chooseItem3:[0,100,125,150,175,200,225,250,275,300,325,350,375,400,425,450,470,500,525,550,575,600,1000]
128 283 };
129 284 },
  285 + computed: {
  286 + attrList() {
  287 + return this.$store.state.read.goodInfo.attrList;
  288 + },
  289 + skuList() {
  290 + return this.$store.state.read.goodInfo.skuList;
  291 + },
  292 + },
  293 + onLoad() {
  294 + store.dispatch('read/fetch', {
  295 + pid: 9,
  296 + });
  297 + },
130 298 methods:{
131   - change(num){
132   - switch (num){
133   - case 1:
134   - if(this.showChooseRes1===true){
135   - this.showChooseRes1 = false
136   - }else{
137   - this.showChooseRes1 = true
138   - }
139   - break;
140   - case 2:
141   - if(this.showChooseRes2===true){
142   - this.showChooseRes2 = false
143   - }else{
144   - this.showChooseRes2 = true
145   - }
146   - break;
147   - case 3:
148   - if(this.showChooseRes3===true){
149   - this.showChooseRes3 = false
150   - }else{
151   - this.showChooseRes3 = true
152   - }
153   - break;
154   - default:
155   - break;
156   - }
  299 + change(num) {
  300 + this.show[num] = this.show[num] ? false : true;
157 301 },
158 302 onClickItem1(index) {
159   - if (this.current1 !== index) {
  303 + if (this.current1 !== index) {
160 304 this.current1 = index;
161 305 this.chooseRes1 =this.chooseItem1[index].describ
162   - }
  306 + }
163 307 },
164 308 onClickItem2(index) {
165   - if (this.current2 !== index) {
  309 + if (this.current2 !== index) {
166 310 this.current2 = index;
167 311 this.chooseRes2 =this.chooseItem2[index].num
168   - }
  312 + }
169 313 },
170 314 onClickItem3(index) {
171   - if (this.current3 !== index) {
  315 + if (this.current3 !== index) {
172 316 this.current3 = index;
173 317 this.chooseRes3 =this.chooseItem3[index]
174   - }
  318 + }
175 319 },
176 320 counter(isadd){
177   - if(isadd){
178   - this.count >= this.maxCount? this.addDisabled = true:this.count++;
179   - }else{
180   - this.count <= 1? this.desDisabled = true:this.count--;
  321 + if (isadd) {
  322 + this.count >= this.maxCount? this.addDisabled = true:this.count++;
  323 + } else {
  324 + this.count <= 1? this.desDisabled = true:this.count--;
181 325 }
182 326 },
183 327 toComfirmOrder(){
184 328 uni.navigateTo({
185   - url:'../confirmOrder/confirmOrder'
  329 + url:'../confirmOrder/confirmOrder'
186 330 })
187 331 }
188 332 }
... ... @@ -190,7 +334,7 @@
190 334 </script>
191 335  
192 336 <style lang="scss">
193   - .content{
  337 + .content {
194 338 min-height: 100vh;
195 339 background-color: #F2F2F2;
196 340 // padding-top: 20rpx;
... ... @@ -207,10 +351,10 @@
207 351 .imageWrap{
208 352 height: 188rpx;
209 353 width: 188rpx;
210   - margin-right: 28rpx;
  354 + margin-right: 28rpx;
211 355 image{
212   - height: 188rpx;
213   - width: 188rpx;
  356 + height: 188rpx;
  357 + width: 188rpx;
214 358 }
215 359 }
216 360 .infoRight{
... ... @@ -219,45 +363,212 @@
219 363 align-items: flex-start;
220 364 justify-content: space-between;
221 365 .goodName{
222   - font-size: 28rpx;
223   - color: #333333;
  366 + font-size: 28rpx;
  367 + color: #333333;
224 368 }
225 369 .remarks{
226   - font-size: 20rpx;
227   - color: #999999;
  370 + font-size: 20rpx;
  371 + color: #999999;
228 372 }
229 373 .priceBox{
230   - display: flex;
231   - justify-content: space-between;
232   - align-items: center;
233   - width: 100%;
234   - font-size: 14px;
235   - color: #999999;
236   - .price{
237   - color: #FF6B4A;
238   - font-size: 28rpx;
239   - }
240   - .counter{
241   - display: flex;
242   - flex-direction: row;
243   - justify-content: space-between;
244   - align-items: center;
245   - font-size: 28rpx;
246   - color: #333333;
247   - width: 122rpx;
248   - .btn{
249   - display: flex;
250   - justify-content: center;
251   - line-height: 32rpx;
252   - height: 32rpx;
253   - width: 32rpx;
254   - background-color: #F2F2F2;
255   - color: #CFCFCF;
256   - }
257   - }
258   - }
  374 + display: flex;
  375 + justify-content: space-between;
  376 + align-items: center;
  377 + width: 100%;
  378 + font-size: 14px;
  379 + color: #999999;
  380 + .price{
  381 + color: #FF6B4A;
  382 + font-size: 28rpx;
  383 + }
  384 + .counter{
  385 + display: flex;
  386 + flex-direction: row;
  387 + justify-content: space-between;
  388 + align-items: center;
  389 + font-size: 28rpx;
  390 + color: #333333;
  391 + width: 122rpx;
  392 + .btn{
  393 + display: flex;
  394 + justify-content: center;
  395 + line-height: 32rpx;
  396 + height: 32rpx;
  397 + width: 32rpx;
  398 + background-color: #F2F2F2;
  399 + color: #CFCFCF;
  400 + }
  401 + }
  402 + }
  403 + }
  404 + }
  405 + .goods-data{
  406 + width: 100%;
  407 + box-sizing: border-box;
  408 + padding: 37rpx 40rpx 0 40rpx;
  409 + background: #FFFFFF;
  410 + border-radius: 12rpx;
  411 + .opCollapse{
  412 + width: 100%;
  413 + padding-bottom: 28rpx;
  414 + margin-top: 7px;
  415 + border-bottom: 1px solid #E9E9E9;
  416 + .head{
  417 + display: flex;
  418 + justify-content: space-between;
  419 + height: 24px;
  420 + // font-family: PingFangSC-Medium;
  421 + font-size: 16px;
  422 + color: #333333;
  423 + letter-spacing: -0.3px;
  424 + text-align: justify;
  425 + line-height: 24px;
  426 + margin-bottom: 18rpx;
  427 + .headRighted{
  428 + width: 0;
  429 + height: 0;
  430 + border-left: 4px solid transparent;
  431 + border-right: 4px solid transparent;
  432 + border-bottom: 4px solid #CFCFCF;
  433 + transform: scaleY(-1);
  434 + margin-top: 10px;
  435 + }
  436 + .headMid{
  437 + // font-family: PingFangSC-Regular;
  438 + font-size: 10px;
  439 + color: #999999;
  440 + letter-spacing: -0.19px;
  441 + margin-left: -120rpx;
  442 + }
  443 + .headRight{
  444 + width: 0;
  445 + height: 0;
  446 + border-left: 4px solid transparent;
  447 + border-right: 4px solid transparent;
  448 + border-bottom: 4px solid #CFCFCF;
  449 + margin-top: 10px;
  450 + }
  451 + }
  452 + .body{
  453 + // font-family: PingFangSC-Regular;
  454 + font-size: 12px;
  455 + color: #666666;
  456 + letter-spacing: 0;
  457 + .bodyBox{
  458 + margin-top: 15px;
  459 + .names{
  460 + // font-family: PingFangSC-Regular;
  461 + font-size: 12px;
  462 + color: #151515;
  463 + letter-spacing: 0;
  464 + text-align: justify;
  465 + line-height: 17px;
  466 + margin-left: 5px;
  467 + margin-right: 10px;
  468 + }
  469 + text{
  470 + // font-family: PingFangSC-Regular;
  471 + font-size: 12px;
  472 + color: #666666;
  473 + letter-spacing: 0;
  474 + text-align: justify;
  475 + }
  476 + }
  477 + }
  478 + .goods-form {
  479 + display: flex;
  480 + flex-direction: column;
  481 + align-items: center;
  482 + justify-content: center;
  483 + background-color: #fff;
  484 + width: 100%;
  485 + .p1 {
  486 + font-size: 16px;
  487 + color: #333333;
  488 + letter-spacing: -0.3px;
  489 + text-align: justify;
  490 + line-height: 24px;
  491 + margin: 4px 0;
  492 + }
  493 + .p2 {
  494 + font-size: 12px;
  495 + color: #999999;
  496 + letter-spacing: -0.23px;
  497 + margin-bottom: 18rpx;
  498 + }
  499 + image{
  500 + width: 28rpx;
  501 + height: 26rpx;
  502 + }
  503 + .confirm {
  504 + display: flex;
  505 + align-items: center;
  506 + font-size: 12px;
  507 + color: #666666;
  508 + letter-spacing: -0.23px;
  509 + width: 684rpx;
  510 + image{
  511 + margin-right:25rpx;
  512 + }
  513 + }
  514 + .picker{
  515 + display: flex;
  516 + flex-direction: column;
  517 + justify-content: center;
  518 + align-items: center;
  519 + width: 100%;
  520 + image{
  521 + width: 10px;
  522 + height: 10px;
  523 + margin-right: 5px;
  524 + }
  525 + .picker-choice{
  526 + display: flex;
  527 + width: 684rpx;
  528 + align-items: center;
  529 + margin-bottom: 40rpx;
  530 + .choice-left{
  531 + width: 210rpx;
  532 + .p11 {
  533 + font-size: 14px;
  534 + color: #333333;
  535 + letter-spacing: -0.26px;
  536 + text-align: justify;
  537 + line-height: 24px;
  538 + }
  539 + .p12 {
  540 + font-size: 10px;
  541 + color: #3F3F3F;
  542 + letter-spacing: -0.19px;
  543 + text-align: justify;
  544 + line-height: 24px;
  545 + }
  546 + }
  547 + .p13 {
  548 + font-size: 10px;
  549 + color: #999999;
  550 + letter-spacing: -0.19px;
  551 + margin-right: 10px;
  552 + }
  553 + .p13-date {
  554 + font-size: 10px;
  555 + color: #999999;
  556 + letter-spacing: -0.19px;
  557 + margin-right: 5px;
  558 + }
  559 + .p14 {
  560 + font-size: 14px;
  561 + color: #666666;
  562 + letter-spacing: -0.26px;
  563 + text-align: center;
  564 + width: 124rpx;
  565 + border-bottom: 1px solid #CFCFCF;
  566 + }
  567 + }
  568 + }
259 569 }
260 570 }
  571 + }
261 572 .choose{
262 573 width: 100%;
263 574 background: #FFFFFF;
... ...
src/static/icon-data.png

1.01 KB

src/static/icon-pen.png

896 Bytes

src/store/modules/address.js
... ... @@ -0,0 +1,71 @@
  1 +import urlAlias from '../url'
  2 +import request from '../request'
  3 +
  4 +const { editAddress, addressList, getAddress } = urlAlias
  5 +
  6 +const state = { list: [], detail: {} }
  7 +
  8 +const mutations = {
  9 + LIST: (state, list) => {
  10 + state.list = list
  11 + },
  12 + DETAILS: (state, details) => {
  13 + state.details = details
  14 + }
  15 +}
  16 +
  17 +const actions = {
  18 + edit(mutations, param, success) {
  19 + request({
  20 + url: editAddress,
  21 + data: param,
  22 + success,
  23 + fail: () => {
  24 + uni.showModal({
  25 + content: '编辑失败',
  26 + showCancel: false
  27 + })
  28 + },
  29 + complete: (res) => {
  30 + console.log('complete status === > ', res)
  31 + }
  32 + })
  33 + },
  34 + list({ commit }) {
  35 + request({
  36 + url: addressList,
  37 + success: (res) => {
  38 + commit('LIST', res.data.data)
  39 + },
  40 + fail: () => {
  41 + uni.showModal({
  42 + content: '获取地址列表失败',
  43 + showCancel: false
  44 + })
  45 + }
  46 + })
  47 + },
  48 + details({ commit }, param, execute) {
  49 + return new Promise((resolve, reject) => request({
  50 + url: getAddress,
  51 + data: param,
  52 + success: (res) => {
  53 + commit('DETAILS', res.data.data)
  54 + resolve()
  55 + },
  56 + fail: () => {
  57 + uni.showModal({
  58 + content: '获取地址信息失败',
  59 + showCancel: false
  60 + })
  61 + }
  62 + }))
  63 + }
  64 +}
  65 +
  66 +export default {
  67 + namespaced: true,
  68 + state,
  69 + mutations,
  70 + actions
  71 +}
... ...
src/store/modules/cart.js
1   -import urlAlias from '../url';
2   -import request from '../request';
  1 +import urlAlias from '../url'
  2 +import request from '../request'
3 3  
4   -const { cartList , cartModi, cartDel, cartAdd } = urlAlias;
  4 +const { cartList, cartModi, cartDel, cartAdd } = urlAlias
5 5  
6 6 const state = {
7   - cartList: [],
8   -};
9   -
10   -
11   -const data = {
12   - data:{
13   - // list 购物车列表
14   - list:[
15   - {
16   - goods_name: "1.56非球面防蓝光_黑01-8701志平防蓝光-防辐射电脑网课眼镜,TR90弹性漆,近视镜,青春潮流", //商品名称
17   - pid: "6",//产品id
18   - real_price: 99,
19   - checked: true,//是否选中
20   - name: "颜色 玫瑰金 /材质 钛合金 / 功能 防日光 / 配件 免费送 /折射防日光 / 配件 免费送 /折射",//属性名称 ,颜色 玫瑰金 /材质 钛合金 / 功能 防日光 / 配件 免费送 /折射 …
21   - cart_id: "39", //购物车唯一序列号
22   - num: "1", //此购物
23   - pics: "/static/myorder-paying-pic.png", //商品图片
24   - goodsType:2,// 商品种类
25   - },
26   - {
27   - goods_name: "1.56非球面防蓝光_黑01-8701志平防蓝光-防辐射电脑网课眼镜,TR90弹性漆,近视镜,青春潮流", //商品名称
28   - pid: "4",//产品id
29   - real_price: 189,
30   - checked: false,//是否选中
31   - name: "颜色 玫瑰金 /材质 钛合金 / 功能 防日光 / 配件 免费送 /折射防日光 / 配件 免费送 /折射",//属性名称 ,颜色 玫瑰金 /材质 钛合金 / 功能 防日光 / 配件 免费送 /折射 …
32   - cart_id: "38", //购物车唯一序列号
33   - num: "2", //此购物
34   - pics: "/static/myorder-paying-pic.png", //商品图片
35   - goodsType:3,// 商品种类
36   - },
37   - ],
38   - mp_id: "1",
39   - mp_list://使用人,一个产品只有一个使用人
40   - [
41   - {
42   - glassWidth: "54",//镜宽
43   - img_url2: "http://localhost:8087/images/shop_1/1/",//使用人的头像,根据此头像,AI识别出数据。
44   - in_time: "2020-02-22 03:19:38",//使用人加入的时间
45   - leftAxi: "124",//左眼数据
46   - leftCyl: "-2",//左眼数据
47   - leftSph: "-1",//左眼数据
48   - leftVis: "5",//左眼数据
49   - legWidth: "158",//镜腿长
50   - metal: null,//使用人的其它定义(材质过敏之类的)
51   - mp_id: "1",//使用的id
52   - name: "me",//使用人的名字
53   - norseWidth: "18",//鼻宽
54   - pd: "89.6",//瞳距
55   - price: "0",//此人偏好的价格
56   - rightAxi: "123",//右眼数据
57   - rightCyl: "24",//右眼数据
58   - rightSph: "-4",//右眼数据
59   - rightVis: "5.1",//右眼数据
60   - uid: "1",//购买人的uid
61   - }
62   - ],
63   - sk_id: "80",//此产品下的sku的唯一id
64   - skuList:[//sku清单
65   - {
66   - discount: "45",//折扣,数据库中以int型存储,所以要除100
67   - in_price: "6000",//进货价格,数据库中以int型存储,单位是分,所以显示时要除以100
68   - kc: "0",//库存
69   - model_pic: null,//模型试戴图
70   - out_price: 191.8,//销售价格,元
71   - pic: "https://glass.xiuyetang.com//upload_jk/6/6_321EB1.jpg",//可供查看图
72   - pid: "6",//索引产品id
73   - real_price: 99,//真实可成交价格
74   - sk_id: "74",//成交时的sku_id
75   - sku_name: "1.56非球面防蓝光_黑色",//sku名称
76   - sku_shop_value: "",//sku商家定义值
77   - sku_value: "47_51",//sku系统生成值
78   - status: "1",//此产品下的sku状态
79   - }
80   - ]
81   - }, // 一个产品下,会有多个sku,都在这个skuList数组下
82   - msg: "ok",
83   - status: 1,
  7 + cartList: []
84 8 }
85 9  
  10 +// const data = {
  11 +// data: {
  12 +// // list 购物车列表
  13 +// list: [
  14 +// {
  15 +// goods_name: '1.56非球面防蓝光_黑01-8701志平防蓝光-防辐射电脑网课眼镜,TR90弹性漆,近视镜,青春潮流', // 商品名称
  16 +// pid: '6', // 产品id
  17 +// real_price: 99,
  18 +// checked: true, // 是否选中
  19 +// name: '颜色 玫瑰金 /材质 钛合金 / 功能 防日光 / 配件 免费送 /折射防日光 / 配件 免费送 /折射', // 属性名称 ,颜色 玫瑰金 /材质 钛合金 / 功能 防日光 / 配件 免费送 /折射 …
  20 +// cart_id: '39', // 购物车唯一序列号
  21 +// num: '1', // 此购物
  22 +// pics: '/static/myorder-paying-pic.png', // 商品图片
  23 +// goodsType: 2 // 商品种类
  24 +// },
  25 +// {
  26 +// goods_name: '1.56非球面防蓝光_黑01-8701志平防蓝光-防辐射电脑网课眼镜,TR90弹性漆,近视镜,青春潮流', // 商品名称
  27 +// pid: '4', // 产品id
  28 +// real_price: 189,
  29 +// checked: false, // 是否选中
  30 +// name: '颜色 玫瑰金 /材质 钛合金 / 功能 防日光 / 配件 免费送 /折射防日光 / 配件 免费送 /折射', // 属性名称 ,颜色 玫瑰金 /材质 钛合金 / 功能 防日光 / 配件 免费送 /折射 …
  31 +// cart_id: '38', // 购物车唯一序列号
  32 +// num: '2', // 此购物
  33 +// pics: '/static/myorder-paying-pic.png', // 商品图片
  34 +// goodsType: 3 // 商品种类
  35 +// }
  36 +// ],
  37 +// mp_id: '1',
  38 +// mp_list: // 使用人,一个产品只有一个使用人
  39 +// [
  40 +// {
  41 +// glassWidth: '54', // 镜宽
  42 +// img_url2: 'http://localhost:8087/images/shop_1/1/', // 使用人的头像,根据此头像,AI识别出数据。
  43 +// in_time: '2020-02-22 03:19:38', // 使用人加入的时间
  44 +// leftAxi: '124', // 左眼数据
  45 +// leftCyl: '-2', // 左眼数据
  46 +// leftSph: '-1', // 左眼数据
  47 +// leftVis: '5', // 左眼数据
  48 +// legWidth: '158', // 镜腿长
  49 +// metal: null, // 使用人的其它定义(材质过敏之类的)
  50 +// mp_id: '1', // 使用的id
  51 +// name: 'me', // 使用人的名字
  52 +// norseWidth: '18', // 鼻宽
  53 +// pd: '89.6', // 瞳距
  54 +// price: '0', // 此人偏好的价格
  55 +// rightAxi: '123', // 右眼数据
  56 +// rightCyl: '24', // 右眼数据
  57 +// rightSph: '-4', // 右眼数据
  58 +// rightVis: '5.1', // 右眼数据
  59 +// uid: '1' // 购买人的uid
  60 +// }
  61 +// ],
  62 +// sk_id: '80', // 此产品下的sku的唯一id
  63 +// skuList: [// sku清单
  64 +// {
  65 +// discount: '45', // 折扣,数据库中以int型存储,所以要除100
  66 +// in_price: '6000', // 进货价格,数据库中以int型存储,单位是分,所以显示时要除以100
  67 +// kc: '0', // 库存
  68 +// model_pic: null, // 模型试戴图
  69 +// out_price: 191.8, // 销售价格,元
  70 +// pic: 'https://glass.xiuyetang.com//upload_jk/6/6_321EB1.jpg', // 可供查看图
  71 +// pid: '6', // 索引产品id
  72 +// real_price: 99, // 真实可成交价格
  73 +// sk_id: '74', // 成交时的sku_id
  74 +// sku_name: '1.56非球面防蓝光_黑色', // sku名称
  75 +// sku_shop_value: '', // sku商家定义值
  76 +// sku_value: '47_51', // sku系统生成值
  77 +// status: '1' // 此产品下的sku状态
  78 +// }
  79 +// ]
  80 +// }, // 一个产品下,会有多个sku,都在这个skuList数组下
  81 +// msg: 'ok',
  82 +// status: 1
  83 +// }
  84 +
86 85 const mutations = {
87 86 INIT: (state, cartList) => {
88   - state.cartList = cartList;
89   - },
90   - DEL:(state,index)=>{
91   - console.log('mutations====>',state.cartList)
92   - state.cartList.splice(index,1)
93   - console.log('mutations====>index',index)
94   - // state.cartList=delList
  87 + state.cartList = cartList
95 88 },
96   - MODI:(state,args) => {
97   - console.log('the num',state.cartList[args.index].num)
98   - console.log('mutations====>isadd',args)
99   - if(args.isadd)
100   - {
101   - state.cartList[args.index].num=args.num
102   - } else{
103   - state.cartList[args.index].num=args.num
104   - }
105   - console.log('the num',state.cartList[args.index].num)
  89 + DEL: (state, index) => {
  90 + console.log('mutations====>', state.cartList)
  91 + state.cartList.splice(index, 1)
  92 + console.log('mutations====>index', index)
  93 + // state.cartList=delList
106 94 },
107   -
108   -};
  95 + MODI: (state, args) => {
  96 + console.log('the num', state.cartList[args.index].num)
  97 + console.log('mutations====>isadd', args)
  98 + if (args.isadd) {
  99 + state.cartList[args.index].num = args.num
  100 + } else {
  101 + state.cartList[args.index].num = args.num
  102 + }
  103 + console.log('the num', state.cartList[args.index].num)
  104 + }
  105 +
  106 +}
109 107  
110 108 const actions = {
111   -
112   - getCartList({ commit }, param) {
113   - request({
114   - url: cartList,
115   - data:param,
116   - success: (res) => {
117   - console.log('cart===>接口数据',res.data.data)
118   - // const resData = {
119   - // ...res,
120   - // data,
121   - // }
122   - commit('INIT', res.data.data)
123   - },
124   - fail: (res) => {
125   - console.log("fail status === > ", res);
126   - },
127   - complete: (res) => {
128   - console.log("complete status === > ", res);
129   - },
130   - })
131   - },
132   -
133   - modiCart({ commit }, param) {
134   - const args=Object.assign({num:param.num},param.args)
135   - delete param.args
136   - request({
137   - url: cartModi,
138   - data: param,
139   - success: (res) => {
140   - console.log('modi-parm',param)
141   - commit('MODI',args)
142   - },
143   - fail: (res) => {
144   - console.log("fail status === > ", res);
145   - },
146   - complete: (res) => {
147   - console.log("complete status === > ", res);
148   - },
149   - })
150   - },
151   -
152   - delCart({ commit },param ) {
153   - let arg = param.arg;
154   - delete param.arg
155   - request({
156   - url: cartDel,
157   - data: param,
158   - success: (res) => {
159   - console.log('del-parm',param)
160   - console.log('del-myparms==>',arg)
161   - // console.log('deacart====>cartList',this.$store.state.cart.cartList)
162   -
163   - commit('DEL',arg)
164   - },
165   - fail: (res) => {
166   - console.log("fail status === > ", res);
167   - },
168   - complete: (res) => {
169   - console.log("complete status === > ", res);
170   - },
171   - })
172   - },
173   -
174   - addCart({ commit }, param) {
175   - console.log('请求接口开始')
176   - request({
177   - url: cartAdd,
178   - data:param,
179   - success: (res) => {
180   - console.log('add-parm',param)
181   - console.log('addcart===>res.data===>',res.data)
182   - // commit('INIT', res.data.data)
183   - },
184   - fail: (res) => {
185   - console.log("fail status === > ", res);
186   - },
187   - complete: (res) => {
188   - console.log("complete status === > ", res);
189   - },
190   - })
191   - },
192   -
  109 + getCartList({ commit }, param) {
  110 + request({
  111 + url: cartList,
  112 + data: param,
  113 + success: (res) => {
  114 + console.log('cart===>接口数据', res.data.data)
  115 + // const resData = {
  116 + // ...res,
  117 + // data,
  118 + // }
  119 + commit('INIT', res.data.data)
  120 + },
  121 + fail: (res) => {
  122 + console.log('fail status === > ', res)
  123 + },
  124 + complete: (res) => {
  125 + console.log('complete status === > ', res)
  126 + }
  127 + })
  128 + },
  129 +
  130 + modiCart({ commit }, param) {
  131 + const args = Object.assign({ num: param.num }, param.args)
  132 + delete param.args
  133 + request({
  134 + url: cartModi,
  135 + data: param,
  136 + success: (res) => {
  137 + console.log('modi-parm', param)
  138 + commit('MODI', args)
  139 + },
  140 + fail: (res) => {
  141 + console.log('fail status === > ', res)
  142 + },
  143 + complete: (res) => {
  144 + console.log('complete status === > ', res)
  145 + }
  146 + })
  147 + },
  148 +
  149 + delCart({ commit }, param) {
  150 + const arg = param.arg
  151 + delete param.arg
  152 + request({
  153 + url: cartDel,
  154 + data: param,
  155 + success: (res) => {
  156 + console.log('del-parm', param)
  157 + console.log('del-myparms==>', arg)
  158 + // console.log('deacart====>cartList',this.$store.state.cart.cartList)
  159 +
  160 + commit('DEL', arg)
  161 + },
  162 + fail: (res) => {
  163 + console.log('fail status === > ', res)
  164 + },
  165 + complete: (res) => {
  166 + console.log('complete status === > ', res)
  167 + }
  168 + })
  169 + },
  170 +
  171 + addCart({ commit }, param) {
  172 + console.log('请求接口开始')
  173 + request({
  174 + url: cartAdd,
  175 + data: param,
  176 + success: (res) => {
  177 + console.log('add-parm', param)
  178 + console.log('addcart===>res.data===>', res.data)
  179 + // commit('INIT', res.data.data)
  180 + },
  181 + fail: (res) => {
  182 + console.log('fail status === > ', res)
  183 + },
  184 + complete: (res) => {
  185 + console.log('complete status === > ', res)
  186 + }
  187 + })
  188 + }
  189 +
193 190 }
194 191  
195 192 export default {
196 193 namespaced: true,
197 194 state,
198 195 mutations,
199   - actions,
200   -};
201 196 \ No newline at end of file
  197 + actions
  198 +}
... ...
src/store/modules/read.js
... ... @@ -6,12 +6,13 @@
6 6 } = urlAlias;
7 7  
8 8 const state = {
9   - goodInfo: [],
  9 + goodInfo: {},
10 10 };
11 11  
12 12 const mutations = {
13 13 INIT: (state, goodInfo) => {
14 14 state.goodInfo = goodInfo;
  15 +
15 16 },
16 17 };
17 18  
... ... @@ -19,6 +20,7 @@ const actions = {
19 20 fetch({ commit }, param) {
20 21 request({
21 22 url: read,
  23 + data: param,
22 24 success: (res) => {
23 25 commit('INIT', res.data.data)
24 26 },
... ...
src/store/request.js
... ... @@ -18,6 +18,11 @@ export default async function request({
18 18 console.log("complete status === > ", res);
19 19 },
20 20 }) {
  21 + const uid = uni.getStorageSync('uid');
  22 + data = {
  23 + uid,
  24 + ...data,
  25 + };
21 26 uni
22 27 .request({
23 28 url: DOMAIN + url,
... ...
1 1 const urlAlias = {
2   - // 获取商品信息
3   - read: '/app/prod/read',
  2 + // 详情
  3 + read: '/app/prod/read', // 获取商品信息
4 4  
5 5 // 首页
6 6 shopList: '/app/prod/list', // 获取首页商品列表
... ... @@ -11,31 +11,36 @@ const urlAlias = {
11 11 login: '/app/glass/getOpenId', // 登陆
12 12 getUserInfo: '/app/glass/userinfo', // 获取用户信息
13 13  
14   - // 我的订单
15   - myOrderList: '/app/order/list3', // 获取订单列表
16   - orderRead: '/app/order/read', // 获取订单详情
17   - cancelOrder: '/app/order/wait/del',//取消订单
18   - statusConfirm: '/app/order/statusConfirm',//订单操作
19   - payLog:'/app/pay/log',//调起支付
20   -
21   - // 购物车
22   - cartList: '/app/cart/list', // 获取购物车列表
23   - cartModi: '/app/cart/modi', // 修改购物车
24   - cartDel: '/app/cart/del', // 删除购物车
25   - cartAdd: '/app/cart/add',// 添加购物车
26   -
27   - // 我的
28   - recommandList:'/app/prod/recommand', // 获取用户个性化推荐商品
29   -
  14 + // 我的订单
  15 + orderList: '/app/order/list', // 获取订单列表
  16 + myOrderList: '/app/order/list3', // 获取订单列表
  17 + orderRead: '/app/order/read', // 获取订单详情
  18 + cancelOrder: '/app/order/wait/del', // 取消订单
  19 + statusConfirm: '/app/order/statusConfirm', // 订单操作
  20 + payLog: '/app/pay/log', // 调起支付
  21 +
  22 + // 购物车
  23 + cartList: '/app/cart/list', // 获取购物车列表
  24 + cartModi: '/app/cart/modi', // 修改购物车
  25 + cartDel: '/app/cart/del', // 删除购物车
  26 + cartAdd: '/app/cart/add', // 添加购物车
  27 +
  28 + // 我的
  29 + recommandList: '/app/prod/recommand', // 获取用户个性化推荐商品
  30 +
30 31 // 镜框选购页
31   - detailStandardList: '/app/prod/read', //获取商品的详细信息
32   - // 选购页
33   - detailStandardUrl: '/app/prod/read', //获取商品的详细信息
34   -
35   - //用户数据
36   - mylovelist:'/app/user/mylovelist',//关心的人的数据
37   - myloveadd:'/app/user/myloveadd'//添加关心的人
38   -
  32 + detailStandardList: '/app/prod/read', // 获取商品的详细信息
  33 + // 选购页
  34 + detailStandardUrl: '/app/prod/read', // 获取商品的详细信息
  35 +
  36 + // 地址管理
  37 + editAddress: '/app/address/edit_address', // 编辑地址
  38 + addressList: '/app/address/get_address_list', // 获取用户地址列表
  39 + getAddress: '/app/address/get_address_by_id', // 获取用户某一地址信息
  40 +
  41 + // 用户数据
  42 + mylovelist: '/app/user/mylovelist', // 关心的人的数据
  43 + myloveadd: '/app/user/myloveadd' // 添加关心的人
39 44 }
40 45  
41   -export default urlAlias;
  46 +export default urlAlias
... ...