li.shaoyi 3 years ago
parent
commit
72e332fded
28 changed files with 416 additions and 219 deletions
  1. 230 31
      package-lock.json
  2. 1 1
      package.json
  3. 2 2
      public/config/appconfig.j2
  4. 2 2
      public/config/appconfig.json
  5. 35 1
      src/business/goods/index.ts
  6. 0 0
      src/packages/mobile/assets/iconfont/iconfont.js
  7. 1 2
      src/packages/mobile/components/base/qrcode/index.less
  8. 3 22
      src/packages/mobile/components/base/qrcode/index.vue
  9. 15 4
      src/packages/mobile/router/index.ts
  10. 7 2
      src/packages/mobile/views/contract/details/index.vue
  11. 8 8
      src/packages/mobile/views/home/components/main/index.vue
  12. 0 5
      src/packages/mobile/views/home/components/market/index.less
  13. 0 93
      src/packages/mobile/views/home/components/market/index.vue
  14. 2 2
      src/packages/mobile/views/home/components/purchase/index.vue
  15. 40 5
      src/packages/mobile/views/home/components/supply-demand/index.vue
  16. 1 1
      src/packages/mobile/views/home/index.less
  17. 2 3
      src/packages/mobile/views/home/index.vue
  18. 9 12
      src/packages/mobile/views/mine/generalize/components/promotion/index.vue
  19. 17 20
      src/packages/mobile/views/mine/generalize/components/tradedata/index.vue
  20. 11 1
      src/packages/mobile/views/mine/generalize/index.less
  21. 0 0
      src/packages/mobile/views/purchase/detail/components/address/index.less
  22. 0 0
      src/packages/mobile/views/purchase/detail/components/address/index.vue
  23. 0 0
      src/packages/mobile/views/purchase/detail/index.backup.vue
  24. 0 0
      src/packages/mobile/views/purchase/detail/index.less
  25. 0 0
      src/packages/mobile/views/purchase/detail/index.vue
  26. 6 0
      src/packages/mobile/views/supply-demand/detail/index.vue
  27. 8 1
      src/services/api/goods/index.ts
  28. 16 1
      src/types/model/goods.d.ts

+ 230 - 31
package-lock.json

@@ -19,13 +19,13 @@
         "long": "^5.2.0",
         "moment": "^2.29.3",
         "protobufjs": "^6.11.2",
-        "qrcodejs2": "^0.0.2",
         "sortablejs": "^1.15.0",
         "uuid": "^8.3.2",
         "vant": "^3.4.8",
         "vue": "^3.2.13",
         "vue-class-component": "^8.0.0-0",
         "vue-i18n": "^9.2.2",
+        "vue-qr": "^4.0.9",
         "vue-router": "^4.0.3",
         "vuedraggable": "^4.1.0"
       },
@@ -4044,8 +4044,7 @@
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
     },
     "node_modules/base64-js": {
       "version": "1.5.1",
@@ -5263,6 +5262,20 @@
         }
       }
     },
+    "node_modules/decompress-response": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+      "dependencies": {
+        "mimic-response": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/deep-is": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -6885,8 +6898,7 @@
     "node_modules/fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
     "node_modules/fsevents": {
       "version": "2.3.2",
@@ -7428,7 +7440,6 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
       "dependencies": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -7437,8 +7448,7 @@
     "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "node_modules/ipaddr.js": {
       "version": "2.0.1",
@@ -7704,6 +7714,11 @@
         "@sideway/pinpoint": "^2.0.0"
       }
     },
+    "node_modules/js-binary-schema-parser": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
+      "integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg=="
+    },
     "node_modules/js-message": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz",
@@ -8438,6 +8453,17 @@
         "node": ">=6"
       }
     },
+    "node_modules/mimic-response": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/mini-css-extract-plugin": {
       "version": "2.6.0",
       "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz",
@@ -8887,7 +8913,6 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
       "dependencies": {
         "wrappy": "1"
       }
@@ -9123,6 +9148,11 @@
         "node": ">=6"
       }
     },
+    "node_modules/parenthesis": {
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz",
+      "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="
+    },
     "node_modules/parse-json": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -10009,11 +10039,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/qrcodejs2": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/qrcodejs2/-/qrcodejs2-0.0.2.tgz",
-      "integrity": "sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA=="
-    },
     "node_modules/qs": {
       "version": "6.9.7",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
@@ -10636,6 +10661,49 @@
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
       "dev": true
     },
+    "node_modules/simple-concat": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/simple-get": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+      "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "decompress-response": "^6.0.0",
+        "once": "^1.3.1",
+        "simple-concat": "^1.0.0"
+      }
+    },
     "node_modules/sirv": {
       "version": "1.0.19",
       "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz",
@@ -10896,6 +10964,14 @@
         }
       ]
     },
+    "node_modules/string-split-by": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz",
+      "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
+      "dependencies": {
+        "parenthesis": "^3.1.5"
+      }
+    },
     "node_modules/string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -11869,6 +11945,54 @@
         "node": ">=8"
       }
     },
+    "node_modules/vue-qr": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/vue-qr/-/vue-qr-4.0.9.tgz",
+      "integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
+      "dependencies": {
+        "glob": "^8.0.1",
+        "js-binary-schema-parser": "^2.0.2",
+        "simple-get": "^4.0.1",
+        "string-split-by": "^1.0.0"
+      }
+    },
+    "node_modules/vue-qr/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/vue-qr/node_modules/glob": {
+      "version": "8.0.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
+      "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/vue-qr/node_modules/minimatch": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
+      "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/vue-router": {
       "version": "4.0.14",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.14.tgz",
@@ -12556,8 +12680,7 @@
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
     "node_modules/ws": {
       "version": "7.5.7",
@@ -15695,8 +15818,7 @@
     "balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
     },
     "base64-js": {
       "version": "1.5.1",
@@ -16576,6 +16698,14 @@
         "ms": "2.1.2"
       }
     },
+    "decompress-response": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+      "requires": {
+        "mimic-response": "^3.1.0"
+      }
+    },
     "deep-is": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -17786,8 +17916,7 @@
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
     "fsevents": {
       "version": "2.3.2",
@@ -18177,7 +18306,6 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
       "requires": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -18186,8 +18314,7 @@
     "inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "ipaddr.js": {
       "version": "2.0.1",
@@ -18383,6 +18510,11 @@
         "@sideway/pinpoint": "^2.0.0"
       }
     },
+    "js-binary-schema-parser": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
+      "integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg=="
+    },
     "js-message": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz",
@@ -18952,6 +19084,11 @@
       "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
       "dev": true
     },
+    "mimic-response": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
+    },
     "mini-css-extract-plugin": {
       "version": "2.6.0",
       "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz",
@@ -19294,7 +19431,6 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
       "requires": {
         "wrappy": "1"
       }
@@ -19466,6 +19602,11 @@
         "callsites": "^3.0.0"
       }
     },
+    "parenthesis": {
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz",
+      "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="
+    },
     "parse-json": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -20075,11 +20216,6 @@
       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
       "dev": true
     },
-    "qrcodejs2": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/qrcodejs2/-/qrcodejs2-0.0.2.tgz",
-      "integrity": "sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA=="
-    },
     "qs": {
       "version": "6.9.7",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
@@ -20567,6 +20703,21 @@
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
       "dev": true
     },
+    "simple-concat": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
+    },
+    "simple-get": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+      "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+      "requires": {
+        "decompress-response": "^6.0.0",
+        "once": "^1.3.1",
+        "simple-concat": "^1.0.0"
+      }
+    },
     "sirv": {
       "version": "1.0.19",
       "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz",
@@ -20780,6 +20931,14 @@
         }
       }
     },
+    "string-split-by": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz",
+      "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
+      "requires": {
+        "parenthesis": "^3.1.5"
+      }
+    },
     "string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -21490,6 +21649,47 @@
         }
       }
     },
+    "vue-qr": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/vue-qr/-/vue-qr-4.0.9.tgz",
+      "integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
+      "requires": {
+        "glob": "^8.0.1",
+        "js-binary-schema-parser": "^2.0.2",
+        "simple-get": "^4.0.1",
+        "string-split-by": "^1.0.0"
+      },
+      "dependencies": {
+        "brace-expansion": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+          "requires": {
+            "balanced-match": "^1.0.0"
+          }
+        },
+        "glob": {
+          "version": "8.0.3",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
+          "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^5.0.1",
+            "once": "^1.3.0"
+          }
+        },
+        "minimatch": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
+          "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
+          "requires": {
+            "brace-expansion": "^2.0.1"
+          }
+        }
+      }
+    },
     "vue-router": {
       "version": "4.0.14",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.14.tgz",
@@ -22003,8 +22203,7 @@
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
     "ws": {
       "version": "7.5.7",

+ 1 - 1
package.json

@@ -21,13 +21,13 @@
     "long": "^5.2.0",
     "moment": "^2.29.3",
     "protobufjs": "^6.11.2",
-    "qrcodejs2": "^0.0.2",
     "sortablejs": "^1.15.0",
     "uuid": "^8.3.2",
     "vant": "^3.4.8",
     "vue": "^3.2.13",
     "vue-class-component": "^8.0.0-0",
     "vue-i18n": "^9.2.2",
+    "vue-qr": "^4.0.9",
     "vue-router": "^4.0.3",
     "vuedraggable": "^4.1.0"
   },

+ 2 - 2
public/config/appconfig.j2

@@ -1,5 +1,5 @@
 {
-  "version": "1.0.9",
-  "versionCode": "100009",
+  "version": "1.0.10",
+  "versionCode": "100010",
   "apiUrl": "{apiUrl}"
 }

+ 2 - 2
public/config/appconfig.json

@@ -1,5 +1,5 @@
 {
-  "version": "1.0.9",
-  "versionCode": "100009",
+  "version": "1.0.10",
+  "versionCode": "100010",
   "apiUrl": "http://218.17.158.45:16021/cfg?key=test_thj"
 }

+ 35 - 1
src/business/goods/index.ts

@@ -1,7 +1,7 @@
 import { shallowRef, reactive } from 'vue'
 import { useDataTable } from '@/hooks/datatable'
 import { EchartsDataset } from '@/hooks/echarts/line/interface'
-import { queryTHJWrstandard, queryWrMarketTradeConfig, queryTHJWrstandardDetail, addUserFavoriteGoods, removeUserFavoriteGoods, queryTHJProduct, queryMarketRun, queryTHJTradeData, querySpotGoodsPrice } from '@/services/api/goods'
+import { queryTHJWrstandard, queryTHJListing, queryWrMarketTradeConfig, queryTHJWrstandardDetail, addUserFavoriteGoods, removeUserFavoriteGoods, queryTHJProduct, queryMarketRun, queryTHJTradeData, querySpotGoodsPrice } from '@/services/api/goods'
 import { useLoginStore } from '@/stores'
 
 // 采购列表
@@ -280,3 +280,37 @@ export function useQueryWrMarketTradeConfig() {
         wrMarketTradeConfig,
     }
 }
+
+// 供求列表
+export function useListingList() {
+    const { dataList, total, pageIndex, pageSize, pageCount } = useDataTable<Model.THJListingRsp>()
+    const loading = shallowRef(false)
+
+    const getListingList = async () => {
+        loading.value = true
+        await queryTHJListing({
+            data: {
+                page: pageIndex.value,
+                pagesize: pageSize.value,
+            },
+            success: (res) => {
+                total.value = res.total
+                dataList.value = res.data
+            },
+            complete: () => {
+                loading.value = false
+            }
+        })
+        return dataList.value
+    }
+
+    return {
+        loading,
+        dataList,
+        total,
+        pageIndex,
+        pageSize,
+        pageCount,
+        getListingList,
+    }
+}

File diff suppressed because it is too large
+ 0 - 0
src/packages/mobile/assets/iconfont/iconfont.js


+ 1 - 2
src/packages/mobile/components/base/qrcode/index.less

@@ -1,8 +1,7 @@
 .app-qrcode {
-    &__container {
+    .van-dialog__content {
         display        : flex;
         justify-content: center;
         align-items    : center;
-        padding        : .32rem;
     }
 }

+ 3 - 22
src/packages/mobile/components/base/qrcode/index.vue

@@ -1,15 +1,13 @@
 <template>
     <van-dialog class="app-qrcode" v-model:show="showDialog" confirm-button-text="取消">
-        <div class="app-qrcode__container" ref="qrcodeRef">
-            <img src="@mobile/assets/logo.png" />
-        </div>
+        <vue-qr :logoSrc="require('@mobile/assets/logo.svg')" :text="content" />
     </van-dialog>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, computed, watch, nextTick } from 'vue'
+import { computed } from 'vue'
 import { Dialog } from 'vant'
-import QRCode from 'qrcodejs2'
+import VueQr from 'vue-qr/src/packages/vue-qr.vue'
 
 const props = defineProps({
     show: {
@@ -21,28 +19,11 @@ const props = defineProps({
 
 const VanDialog = Dialog.Component
 const emit = defineEmits(['update:show'])
-const qrcodeRef = shallowRef<HTMLDivElement>()
 
 const showDialog = computed({
     get: () => props.show,
     set: (val) => emit('update:show', val)
 })
-
-watch(showDialog, (status) => {
-    if (status) {
-        nextTick(() => {
-            const el = qrcodeRef.value
-            if (el) {
-                el.innerHTML = ''
-                new QRCode(el, {
-                    width: 180,
-                    height: 180,
-                    text: props.content
-                })
-            }
-        })
-    }
-})
 </script>
 
 <style lang="less">

+ 15 - 4
src/packages/mobile/router/index.ts

@@ -118,13 +118,24 @@ const routes: Array<RouteRecordRaw> = [
     ]
   },
   {
-    path: '/goods',
+    path: '/purchase',
     component: Page,
     children: [
       {
-        path: 'details',
-        name: 'goods-details',
-        component: () => import('../views/goods/details/index.vue'),
+        path: 'detail',
+        name: 'PurchaseDetail',
+        component: () => import('../views/purchase/detail/index.vue'),
+      }
+    ]
+  },
+  {
+    path: '/supply-demand',
+    component: Page,
+    children: [
+      {
+        path: 'detail',
+        name: 'SupplyDemandDetail',
+        component: () => import('../views/supply-demand/detail/index.vue'),
       }
     ]
   },

+ 7 - 2
src/packages/mobile/views/contract/details/index.vue

@@ -5,11 +5,16 @@
         </template>
         <Form ref="formRef" class="goods-details__form" @submit="onSubmit">
             <CellGroup>
-                <Field name="TransferID" label="交割日期" :rules="formRules.TransferID" is-link>
+                <Field name="TransferID" label="交割月份" :rules="formRules.TransferID" is-link>
                     <template #input>
                         <app-select :options="deliveryDate" @confirm="onDateChange" />
                     </template>
                 </Field>
+                <Field label="交割日期" v-if="selectedDate?.enddate">
+                    <template #input>
+                        <span>{{ formatDate(selectedDate.enddate, 'YYYY-MM-DD') }}</span>
+                    </template>
+                </Field>
                 <Field label="原定金价" v-if="selectedDate?.tradeprice">
                     <template #input>
                         <span>{{ selectedDate.tradeprice }}</span>
@@ -100,7 +105,7 @@ const formRules: { [key in keyof Proto.SpotPresaleTransferDestingReq]?: FieldRul
 const deliveryDate = computed(() => {
     const list = details.value.deliverydate ?? []
     return list.map((e) => ({
-        label: `${formatDate(e.enddate, 'YYYY-MM-DD')} ${(e.depositrate * 100).toFixed(0)}%`,
+        label: `${formatDate(e.enddate, 'YYYY-MM')} ${(e.depositrate * 100).toFixed(0)}%`,
         value: e.transferid,
     }))
 })

+ 8 - 8
src/packages/mobile/views/home/components/main/index.vue

@@ -3,14 +3,14 @@
     <template #header>
       <app-navbar title="铁合金掌上行" :show-back-button="false" />
     </template>
-    <div class="home-main__banner home-main__banner--header">
-      <Swipe :autoplay="3000" indicator-color="white" lazy-render>
-        <SwipeItem v-for="(item, index) in topBanners" :key="index">
-          <img :src="getImageUrl(item.imagepath)" />
-        </SwipeItem>
-      </Swipe>
-    </div>
     <PullRefresh class="home-main__container" v-model="refreshing" @refresh="onRefresh">
+      <div class="home-main__banner home-main__banner--header">
+        <Swipe :autoplay="3000" indicator-color="white" lazy-render>
+          <SwipeItem v-for="(item, index) in topBanners" :key="index">
+            <img :src="getImageUrl(item.imagepath)" />
+          </SwipeItem>
+        </Swipe>
+      </div>
       <div class="home-main__iconbar">
         <ul>
           <li @click="routerTo('product')">
@@ -35,7 +35,7 @@
           </li>
         </ul>
       </div>
-      <div class="home-main__market" v-if="false">
+      <div class="home-main__market">
         <div class="left">
           <h2>合金指数</h2>
           <span>{{ formatDate(marketRun.tradedate, "YYYY-MM-DD") }}</span>

+ 0 - 5
src/packages/mobile/views/home/components/market/index.less

@@ -1,5 +0,0 @@
-.home-market {
-    &__container {
-        padding: var(--content-inset);
-    }
-}

+ 0 - 93
src/packages/mobile/views/home/components/market/index.vue

@@ -1,93 +0,0 @@
-<template>
-  <app-view class="home-market">
-    <template #header>
-      <app-navbar title="市场" :show-back-button="false"></app-navbar>
-    </template>
-    <div class="home-market__container">
-      <Grid :column-num="3" style="margin-bottom: .2rem;">
-        <GridItem icon="photo-o" text="商品" :to="{ name: 'market' }" v-for="index in 6" :key="index" />
-      </Grid>
-      <app-table :data="quoteDayList" v-model:columns="columns" @row-click="rowClick">
-        <template #expandRow>
-          扩展
-        </template>
-        <template #last="{ row }">
-          <span :class="handlePriceColor(row.last, row.presettle)">{{ handleNoneValue(row.last) }}</span>
-        </template>
-        <template #highest="{ row }">
-          <span :class="handlePriceColor(row.highest, row.presettle)">{{ handleNoneValue(row.highest) }}</span>
-        </template>
-        <template #lowest="{ row }">
-          <span :class="handlePriceColor(row.lowest, row.presettle)">{{ handleNoneValue(row.lowest) }}</span>
-        </template>
-        <template #bidvolume="{ row }">
-          <span :class="handlePriceColor(row.bid, row.presettle)">{{ handleNoneValue(row.bidvolume) }}</span>
-        </template>
-        <template #askvolume="{ row }">
-          <span :class="handlePriceColor(row.ask, row.presettle)">{{ handleNoneValue(row.askvolume) }}</span>
-        </template>
-      </app-table>
-      <Button @click="showAction = true" plain block>更换主题</Button>
-    </div>
-    <ActionSheet v-model:show="showAction" :actions="actions" teleport="body" cancel-text="取消" @select="themeChange" />
-  </app-view>
-</template>
-
-<script lang="ts" setup>
-import { ref, reactive, onActivated, onDeactivated } from 'vue'
-import { Grid, GridItem, Button, ActionSheet, ActionSheetAction } from 'vant'
-import { useFuturesStore, useThemeStore } from '@/stores'
-import { handlePriceColor, handleNoneValue } from '@/filters'
-import AppTable from '@mobile/components/base/table/index.vue'
-import { TableColumn } from '@mobile/components/base/table/interface'
-import subscribe from '@/services/subscribe'
-
-const { setTheme } = useThemeStore();
-const { quoteDayList } = useFuturesStore();
-const quoteSubscribe = subscribe.addQuoteSubscribe(['cu2206', 'cu2207', 'cu2208', 'cu2209', 'cu2301', 'cu2303', 'cu2304']);
-const showAction = ref(false);
-
-const columns = reactive<TableColumn[]>([
-  { prop: 'goodscode', label: '合约' },
-  { prop: 'last', label: '最新' },
-  { prop: 'highest', label: '最高' },
-  { prop: 'lowest', label: '最低' },
-  { prop: 'bidvolume', label: '买量' },
-  { prop: 'askvolume', label: '卖量' }
-])
-
-const actions: ActionSheetAction[] = [
-  { name: '默认' },
-  { name: '浅色' },
-  { name: '深色' }
-]
-
-const themeChange = (action: ActionSheetAction) => {
-  switch (action.name) {
-    case '默认': {
-      setTheme('Default');
-      break;
-    }
-    case '浅色': {
-      setTheme('Light');
-      break;
-    }
-    case '深色': {
-      setTheme('Dark')
-      break;
-    }
-  }
-  showAction.value = false;
-}
-
-const rowClick = (index: number) => {
-  console.log('row', index);
-}
-
-onActivated(() => quoteSubscribe.start());
-onDeactivated(() => quoteSubscribe.stop());
-</script>
-
-<style lang="less">
-@import './index.less';
-</style>

+ 2 - 2
src/packages/mobile/views/home/components/purchase/index.vue

@@ -3,14 +3,14 @@
     <template #header>
       <app-navbar class="home-purchase__header" title="采购" :show-back-button="false">
         <template #footer>
-          <Search shape="round" placeholder="商品搜索" disabled />
+          <Search shape="round" placeholder="商品搜索" />
         </template>
       </app-navbar>
     </template>
     <app-pull-refresh class="home-purchase__container" v-model:error="error" v-model:pageIndex="pageIndex"
       :page-count="pageCount" @refresh="onRefresh">
       <template v-for="(item, index) in dataList" :key="index">
-        <Cell @click="$router.push({ name: 'goods-details', query: { wrstandardid: item.wrstandardid } })">
+        <Cell @click="$router.push({ name: 'PurchaseDetail', query: { wrstandardid: item.wrstandardid } })">
           <template #title>
             <img :src="getFirstImage(item.thumurls)" />
             <span>{{ item.wrstandardname }}</span>

+ 40 - 5
src/packages/mobile/views/home/components/supply-demand/index.vue

@@ -1,20 +1,55 @@
 <template>
   <app-view class="home-supply-demand">
     <template #header>
-      <app-navbar class="home-purchase__header" title="供求" :show-back-button="false">
+      <app-navbar class="home-supply-demand__header" title="供求" :show-back-button="false">
         <template #footer>
           <Search shape="round" placeholder="商品搜索" disabled />
         </template>
       </app-navbar>
     </template>
-    <div class="home-purchase__container">
-
-    </div>
+    <app-pull-refresh class="home-supply-demand__container" v-model:error="error" v-model:pageIndex="pageIndex"
+      :page-count="pageCount" @refresh="onRefresh">
+      <template v-for="(item, index) in dataList" :key="index">
+        <Cell @click="$router.push({ name: 'PurchaseDetail', query: { wrstandardid: item.wrstandardid } })">
+          <template #title>
+            <img :src="getFirstImage(item.thumurls)" />
+            <span>{{ item.wrstandardname }}</span>
+          </template>
+        </Cell>
+      </template>
+    </app-pull-refresh>
   </app-view>
 </template>
 
 <script lang="ts" setup>
-import { Cell, CellGroup, Search } from 'vant'
+import { shallowRef } from 'vue'
+import { Cell, Search } from 'vant'
+import { getImageUrl } from '@/filters'
+import { useListingList } from '@/business/goods'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+
+const { pageIndex, pageCount, getListingList } = useListingList()
+const dataList = shallowRef<Model.THJWrstandardRsp[]>([])
+const error = shallowRef(false)
+
+// 获取商品首图
+const getFirstImage = (url: string) => {
+  const images = url.split(',').map((path) => getImageUrl(path))
+  return images[0] ?? ''
+}
+
+const onRefresh = (finish: () => void) => {
+  getListingList().then((res) => {
+    if (pageIndex.value === 1) {
+      dataList.value = []
+    }
+    dataList.value.push(...res)
+  }).catch(() => {
+    error.value = true
+  }).finally(() => {
+    finish()
+  })
+}
 </script>
 
 <style lang="less">

+ 1 - 1
src/packages/mobile/views/home/index.less

@@ -16,7 +16,7 @@
             }
 
             &--home.is-active {
-                color: var(--tabbar-icon);
+                color: #c30d23;
             }
 
             .app-iconfont {

+ 2 - 3
src/packages/mobile/views/home/index.vue

@@ -17,7 +17,6 @@ import AppTabbar from '@mobile/components/base/tabbar/index.vue'
 import Home from './components/main/index.vue'
 import Purchase from './components/purchase/index.vue'
 import SupplyDemand from './components/supply-demand/index.vue'
-import Market from './components/market/index.vue'
 import Mine from './components/mine/index.vue'
 import axios from 'axios'
 
@@ -25,7 +24,6 @@ const components = {
   home: Home,
   purchase: Purchase,
   supplyDemand: SupplyDemand,
-  market: Market,
   mine: Mine
 }
 
@@ -35,7 +33,8 @@ const tabList: Tabbar[] = [
   {
     name: 'home',
     label: '首页',
-    icon: 'icon-thj-logo',
+    icon: 'icon-thj-logo-un',
+    activeIcon: 'icon-thj-logo'
   },
   {
     name: 'purchase',

+ 9 - 12
src/packages/mobile/views/mine/generalize/components/promotion/index.vue

@@ -1,16 +1,13 @@
 <template>
-    <app-view class="promotion" flex>
-        <app-pull-refresh class="promotion__container" v-model:error="error" v-model:pageIndex="pageIndex"
-            :page-count="pageCount" @refresh="onRefresh">
-            <app-list :columns="columns" :data-list="dataList" v-if="dataList.length" @click="onClick">
-                <!-- 日期 -->
-                <template #profitmonth="{ value }">
-                    {{ formatDate(value, 'YYYY-MM') }}
-                </template>
-            </app-list>
-            <Empty v-if="!dataList.length"></Empty>
-        </app-pull-refresh>
-    </app-view>
+    <app-pull-refresh v-model:error="error" v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="onRefresh">
+        <app-list :columns="columns" :data-list="dataList" v-if="dataList.length" @click="onClick">
+            <!-- 日期 -->
+            <template #profitmonth="{ value }">
+                {{ formatDate(value, 'YYYY-MM') }}
+            </template>
+        </app-list>
+        <Empty v-if="!dataList.length"></Empty>
+    </app-pull-refresh>
 </template>
 
 <script lang="ts" setup>

+ 17 - 20
src/packages/mobile/views/mine/generalize/components/tradedata/index.vue

@@ -1,24 +1,21 @@
 <template>
-    <app-view class="tradedata" flex>
-        <app-pull-refresh class="tradedata__container" v-model:error="error" v-model:pageIndex="pageIndex"
-            :page-count="pageCount" @refresh="onRefresh">
-            <app-list :columns="columns" :data-list="dataList" v-if="dataList.length">
-                <!-- 日期 -->
-                <template #reckondate="{ value }">
-                    {{ formatDate(value, 'YYYY-MM-DD') }}
-                </template>
-                <!-- 市场 -->
-                <template #marketid="{ value }">
-                    {{ value == Market.THJ ? '采购' : '供求' }}
-                </template>
-                <!-- 吨数 -->
-                <template #tradeqty="{ row }">
-                    {{ row.marketid === Market.THJ ? row.buytradeqty : row.selltradeqty }}
-                </template>
-            </app-list>
-            <Empty v-if="!dataList.length"></Empty>
-        </app-pull-refresh>
-    </app-view>
+    <app-pull-refresh v-model:error="error" v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="onRefresh">
+        <app-list :columns="columns" :data-list="dataList" v-if="dataList.length">
+            <!-- 日期 -->
+            <template #reckondate="{ value }">
+                {{ formatDate(value, 'YYYY-MM-DD') }}
+            </template>
+            <!-- 市场 -->
+            <template #marketid="{ value }">
+                {{ value == Market.THJ ? '采购' : '供求' }}
+            </template>
+            <!-- 吨数 -->
+            <template #tradeqty="{ row }">
+                {{ row.marketid === Market.THJ ? row.buytradeqty : row.selltradeqty }}
+            </template>
+        </app-list>
+        <Empty v-if="!dataList.length"></Empty>
+    </app-pull-refresh>
 </template>
 
 <script lang="ts" setup>

+ 11 - 1
src/packages/mobile/views/mine/generalize/index.less

@@ -48,7 +48,17 @@
     }
 
     &__tabs {
-        background-color: #fff;
+        flex          : 1;
+        display       : flex;
+        flex-direction: column;
+
+        .van-tabs__content {
+            flex: 1;
+        }
+
+        .van-tab__panel {
+            height: 100%;
+        }
     }
 
     &__container {

+ 0 - 0
src/packages/mobile/views/goods/details/components/address/index.less → src/packages/mobile/views/purchase/detail/components/address/index.less


+ 0 - 0
src/packages/mobile/views/goods/details/components/address/index.vue → src/packages/mobile/views/purchase/detail/components/address/index.vue


+ 0 - 0
src/packages/mobile/views/goods/details/index.backup.vue → src/packages/mobile/views/purchase/detail/index.backup.vue


+ 0 - 0
src/packages/mobile/views/goods/details/index.less → src/packages/mobile/views/purchase/detail/index.less


+ 0 - 0
src/packages/mobile/views/goods/details/index.vue → src/packages/mobile/views/purchase/detail/index.vue


+ 6 - 0
src/packages/mobile/views/supply-demand/detail/index.vue

@@ -0,0 +1,6 @@
+<template>
+    <div></div>
+</template>
+
+<script lang="ts" setup>
+</script>

+ 8 - 1
src/services/api/goods/index.ts

@@ -23,6 +23,13 @@ export function queryTHJWrstandardDetail(params: HttpParams<{ req: Model.THJWrst
 }
 
 /**
+ * 查询供求列表
+ */
+export function queryTHJListing(params: HttpParams<{ req: Model.THJListingReq, rsp: Model.THJListingRsp[] }>) {
+    return httpRequest('/Ferroalloy/QueryTHJListing', 'get', params);
+}
+
+/**
  * 移除用户商品收藏信息
  */
 export function removeUserFavoriteGoods(params: HttpParams<{ req: Model.UserFavoriteGoodsReq, rsp: Model.UserFavoriteGoodsRsp }>) {
@@ -67,6 +74,6 @@ export function queryMarketRun(params: HttpParams<{ req: Model.MarketRunReq, rsp
 /**
  * 查询市场交易参数配置
  */
- export function queryWrMarketTradeConfig(params: HttpParams<{ req: Model.WrMarketTradeConfigReq, rsp: Model.WrMarketTradeConfigRsp[] }>) {
+export function queryWrMarketTradeConfig(params: HttpParams<{ req: Model.WrMarketTradeConfigReq, rsp: Model.WrMarketTradeConfigRsp[] }>) {
     return httpRequest('/WrTrade2/QueryWrMarketTradeConfig', 'get', params);
 }

+ 16 - 1
src/types/model/goods.d.ts

@@ -288,7 +288,7 @@ declare namespace Model {
     /** 查询市场交易参数配置 请求 */
     interface WrMarketTradeConfigReq {
         /// 市场id
-        marketid?: number 
+        marketid?: number
     }
 
     /** 查询市场交易参数配置 响应 */
@@ -375,4 +375,19 @@ declare namespace Model {
         updatetime: string
 
     }
+
+    /** 查询供求列表 请求 */
+    interface THJListingReq {
+        page?: number; // 页码
+        pagesize?: number; // 每页条数
+        wrstandardname?: string; // 现货商品名称(模糊查询)
+    }
+
+    /** 查询供求列表 响应 */
+    interface THJListingRsp {
+        thumurls: string; // 缩略图片(1:1)(逗号分隔)
+        wrstandardcode: string; // 现货商品代码
+        wrstandardid: number; // 现货商品ID(自增 SEQ_GOODS 确保不重复)
+        wrstandardname: string; // 现货商品名称(模糊查询)
+    }
 }

Some files were not shown because too many files changed in this diff