diff --git a/java-mall-app-shop-admin/.hbuilderx/launch.json b/java-mall-app-shop-admin/.hbuilderx/launch.json index 131b491..007bebb 100644 --- a/java-mall-app-shop-admin/.hbuilderx/launch.json +++ b/java-mall-app-shop-admin/.hbuilderx/launch.json @@ -4,20 +4,24 @@ "version" : "0.0", "configurations" : [ { - "app-plus" : { - "launchtype" : "remote" - }, - "default" : { - "launchtype" : "local" - }, - "h5" : { - "launchtype" : "local" - }, - "mp-weixin" : { - "launchtype" : "local" - }, - "provider" : "aliyun", - "type" : "uniCloud" + "app-plus" : + { + "launchtype" : "remote" + }, + "default" : + { + "launchtype" : "local" + }, + "h5" : + { + "launchtype" : "local" + }, + "mp-weixin" : + { + "launchtype" : "local" + }, + "provider" : "aliyun", + "type" : "uniCloud" }, { "playground" : "custom", diff --git a/java-mall-app-shop-admin/App.vue b/java-mall-app-shop-admin/App.vue index d5ba577..a8fff47 100644 --- a/java-mall-app-shop-admin/App.vue +++ b/java-mall-app-shop-admin/App.vue @@ -32,7 +32,7 @@ export default { }, onShow: function () { this.globalData.isAppActive = true; - + webSocketManager.closeAllGlobalConnections(); setTimeout(() => { if (this.userInfo && Object.keys(this.userInfo).length > 0) { this.connectSocket(this.userInfo); diff --git a/java-mall-app-shop-admin/api/order.js b/java-mall-app-shop-admin/api/order.js index 5ea888a..02e426b 100644 --- a/java-mall-app-shop-admin/api/order.js +++ b/java-mall-app-shop-admin/api/order.js @@ -115,6 +115,36 @@ export function GetSalesReturnOrderPass(params) { }); } +export function GetInitiativeOrderRefund(params) { + return http({ + url: "/shop/shop-order-return/mch/order/doRefund", + method: "post", + data: params, + baseURL: config.adminApi, + }); +} + +/** + * 拣货完成 + * @author Seven + * @data 2025-3-28 + * @param { + * order_id : "DD-20241206-13" + * store_id : 3 + * } + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-order-info/picking/completed + */ + +export function GetOrderPicking(params) { + return http({ + url: "/shop/shop-order-info/picking/completed", + method: "post", + params, + baseURL: config.adminApi, + }); +} + /** * 获取订单列表 模拟数据 **/ diff --git a/java-mall-app-shop-admin/api/warehouse/commodity.js b/java-mall-app-shop-admin/api/warehouse/commodity.js index 7616cf0..e7a834c 100644 --- a/java-mall-app-shop-admin/api/warehouse/commodity.js +++ b/java-mall-app-shop-admin/api/warehouse/commodity.js @@ -12,15 +12,15 @@ import config from "../../config/config"; * @see https://mall.gpxscs.cn/api/admin/shop/shop-product-base/saveProduct */ -export function UpdateCommodityInfo(params) { +export function UpdateCommodityInfo(data) { return http({ url: "/shop/shop-product-base/saveProduct", method: "post", baseURL: config.adminApi, headers: { - "content-type": "application/x-www-form-urlencoded;charset=UTF-8", + "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", }, - params, + data, }); } @@ -42,10 +42,7 @@ export function UpdateCommodityPriceAndQuantity(params) { url: "/shop/shop-product-item/editQuantity", method: "post", baseURL: config.adminApi, - headers: { - "content-type": "application/x-www-form-urlencoded;charset=UTF-8", - }, - params, + data: params, }); } diff --git a/java-mall-app-shop-admin/components/tui-select/tui-select.vue b/java-mall-app-shop-admin/components/tui-select/tui-select.vue new file mode 100644 index 0000000..f948ab9 --- /dev/null +++ b/java-mall-app-shop-admin/components/tui-select/tui-select.vue @@ -0,0 +1,537 @@ + + + + + \ No newline at end of file diff --git a/java-mall-app-shop-admin/manifest.json b/java-mall-app-shop-admin/manifest.json index 04364a9..fdd1549 100644 --- a/java-mall-app-shop-admin/manifest.json +++ b/java-mall-app-shop-admin/manifest.json @@ -23,7 +23,8 @@ "Camera" : {}, "Record" : {}, "VideoPlayer" : {}, - "UIWebview" : {} + "UIWebview" : {}, + "Push" : {} }, /* 应用发布信息 */ "distribute" : { @@ -62,7 +63,15 @@ }, /* SDK配置 */ "sdkConfigs" : { - "maps" : {} + "maps" : {}, + "push" : { + "unipush" : { + "version" : "2", + "offline" : false, + "appid": "rQxaGAKl7t83KlTubAaKC3", + "appkey": "QSElTn6ttq5nmrIZtFhCT" + } + } }, "icons" : { "android" : { diff --git a/java-mall-app-shop-admin/package-lock.json b/java-mall-app-shop-admin/package-lock.json index 9149d91..90dbde2 100644 --- a/java-mall-app-shop-admin/package-lock.json +++ b/java-mall-app-shop-admin/package-lock.json @@ -7,7 +7,8 @@ "dependencies": { "axios": "^0.27.2", "axios-adapter-uniapp": "^0.1.4", - "lodash": "^4.17.21" + "lodash": "^4.17.21", + "qs": "^6.14.0" }, "devDependencies": { "sass": "^1.80.6", @@ -345,6 +346,33 @@ "node": ">=8" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/chokidar": { "version": "4.0.1", "resolved": "https://mirrors.tencent.com/npm/chokidar/-/chokidar-4.0.1.tgz", @@ -392,6 +420,46 @@ "node": ">=0.10" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://mirrors.tencent.com/npm/fill-range/-/fill-range-7.1.1.tgz", @@ -437,6 +505,82 @@ "node": ">= 6" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/immutable": { "version": "4.3.7", "resolved": "https://mirrors.tencent.com/npm/immutable/-/immutable-4.3.7.tgz", @@ -482,6 +626,14 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://mirrors.tencent.com/npm/micromatch/-/micromatch-4.0.8.tgz", @@ -528,6 +680,17 @@ "dev": true, "optional": true }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://mirrors.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz", @@ -541,6 +704,20 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/readdirp": { "version": "4.0.2", "resolved": "https://mirrors.tencent.com/npm/readdirp/-/readdirp-4.0.2.tgz", @@ -614,6 +791,74 @@ } } }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://mirrors.tencent.com/npm/source-map-js/-/source-map-js-1.2.1.tgz", @@ -787,6 +1032,24 @@ "fill-range": "^7.1.1" } }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, "chokidar": { "version": "4.0.1", "resolved": "https://mirrors.tencent.com/npm/chokidar/-/chokidar-4.0.1.tgz", @@ -816,6 +1079,34 @@ "dev": true, "optional": true }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, "fill-range": { "version": "7.1.1", "resolved": "https://mirrors.tencent.com/npm/fill-range/-/fill-range-7.1.1.tgz", @@ -841,6 +1132,55 @@ "mime-types": "^2.1.12" } }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, "immutable": { "version": "4.3.7", "resolved": "https://mirrors.tencent.com/npm/immutable/-/immutable-4.3.7.tgz", @@ -876,6 +1216,11 @@ "resolved": "http://npm.ifengqun.com:4873/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, "micromatch": { "version": "4.0.8", "resolved": "https://mirrors.tencent.com/npm/micromatch/-/micromatch-4.0.8.tgz", @@ -913,6 +1258,11 @@ "dev": true, "optional": true }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://mirrors.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz", @@ -920,6 +1270,14 @@ "dev": true, "optional": true }, + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "requires": { + "side-channel": "^1.1.0" + } + }, "readdirp": { "version": "4.0.2", "resolved": "https://mirrors.tencent.com/npm/readdirp/-/readdirp-4.0.2.tgz", @@ -947,6 +1305,50 @@ "neo-async": "^2.6.2" } }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, "source-map-js": { "version": "1.2.1", "resolved": "https://mirrors.tencent.com/npm/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/java-mall-app-shop-admin/package.json b/java-mall-app-shop-admin/package.json index 754f56c..3bd1174 100644 --- a/java-mall-app-shop-admin/package.json +++ b/java-mall-app-shop-admin/package.json @@ -6,6 +6,7 @@ "dependencies": { "axios": "^0.27.2", "axios-adapter-uniapp": "^0.1.4", - "lodash": "^4.17.21" + "lodash": "^4.17.21", + "qs": "^6.14.0" } } diff --git a/java-mall-app-shop-admin/pages/audit/checkAudit.vue b/java-mall-app-shop-admin/pages/audit/checkAudit.vue index 35397b9..1d16e11 100644 --- a/java-mall-app-shop-admin/pages/audit/checkAudit.vue +++ b/java-mall-app-shop-admin/pages/audit/checkAudit.vue @@ -257,7 +257,13 @@ 申请时间:{{ auditInfo.created_at }} - + - + - 本店停业中,不会自动恢复营业。 + + 本店停业中,不会自动恢复营业。 + + + 本店目前正常营业中。 + diff --git a/java-mall-app-shop-admin/pages/order/order.vue b/java-mall-app-shop-admin/pages/order/order.vue index 68139b2..660fa98 100644 --- a/java-mall-app-shop-admin/pages/order/order.vue +++ b/java-mall-app-shop-admin/pages/order/order.vue @@ -122,7 +122,7 @@ # - {{ item.orderNum }} - + {{ sfFormatStatus(item.order_state_id) }} @@ -163,9 +163,16 @@ 拣货中 - 已用时 03:54 + + {{ getRemainingTime(item.arrival_time) }} + - 拣货完成 + + 拣货完成 + @@ -174,17 +181,17 @@ {{ item.order_pickup_num_str }} - 备注: - + 备注: + {{ item.buyer_info.order_message }} - + - + {{ item.order_items.length || 0 }} - - 件商品 + + 件商品 {{ group.item_name || 0 }} 条码 - + {{ group.item_barcode || 0 }} - + 规格 - + {{ group.specification || 0 }} - + - X - - {{ group.order_item_quantity || 0 }} - + + X + + {{ group.order_item_quantity || 0 }} + + ¥{{ group.order_item_amount || 0 }} @@ -238,14 +247,14 @@ style="color: #333333; font-weight: 700" > 商家活动支付 - + - + ¥{{ item.order_discount_amount }} @@ -257,14 +266,14 @@ style="color: #333333; font-weight: 700" > 平台服务费 - + - + ¥{{ item.platform_fee }} @@ -274,40 +283,47 @@ style="color: #333333; font-weight: 700" > 配送费用 - + - + ¥{{ item.order_shipping_fee }} - + - + + + 取消订单 + + + + 部分退款 + + {{ item.showRefundOrderInfo ? "收起订单" : "展开订单" }} - {{ item.orderNum }} + {{ item.order_pickup_num }} @@ -950,13 +966,219 @@ :hairline="true" :plain="true" shape="circle" - @click="handerRetrunOrder()" + @click="getInitiativeOrderRefund()" > 确认 + + + 取消订单 + + 取消订单后,金额将原路退回给用户,确定取消? + + + + + + + + + + + 取消 + + + 确定 + + + + + + + 部分退款 + + + + + + + + + + + + + + + + + {{ item.item_name || 0 }} + + + + X{{ item.order_item_quantity || 0 }} + + + ¥{{ + item.order_item_quantity * item.item_unit_price || 0 + }} + + + + + + + + + + + + 取消 + + + 确认 + + + + + + + 取消订单 + + 确定将取货号“ {{ currOrderItem.order_pickup_num }} ”提前拣货完成? + + + + 取消 + + + 确定 + + + + + @@ -969,6 +1191,8 @@ import { GetSalesReturnOrderDetails, GetSalesReturnOrderNoPass, GetSalesReturnOrderPass, + GetInitiativeOrderRefund, + GetOrderPicking, } from "../../api/order"; import { mapState } from "vuex"; import { GetAuditInfo } from "../../api/audit"; @@ -979,6 +1203,7 @@ import tabbar from "@/components/tabbar/tabbar.vue"; import tuiGallery from "@/components/tui-gallery/tui-gallery.vue"; import tuiRadio from "@/components/tui-radio/tui-radio.vue"; import tuiRadioGroup from "@/components/tui-radio-group/tui-radio-group.vue"; +import tuiSelect from "@/components/tui-select/tui-select.vue"; export default { components: { tuiTabs, @@ -989,6 +1214,7 @@ export default { tuiGallery, tuiRadio, tuiRadioGroup, + tuiSelect, }, data() { return { @@ -1199,6 +1425,28 @@ export default { ], retrunOrderMsg: "", currReturnId: "", + currOrderItem: { + order_items: [], + }, + isCancelOrder: false, + showCancelOrderPopup: false, + showPartOrderRefundPopup: false, + form: { + reason: "", + }, + rules: { + reason: [ + { + required: true, + message: "请输入取消订单原因", + // 可以单个或者同时写两个触发验证方式 + trigger: ["change", "blur"], + }, + ], + }, + commodityCheckBoxList: [], + refreshInterval: null, // 全局定时器 + showOrderPickingPopup: false, }; }, computed: { @@ -1234,6 +1482,19 @@ export default { this.keyword = ""; this.getOrderList(); }, + mounted() { + // 每1秒刷新一次数据(触发界面更新) + this.refreshInterval = setInterval(() => { + this.$forceUpdate(); // 强制更新视图 + }, 1000); + }, + + beforeDestroy() { + // 组件销毁时清除定时器 + if (this.refreshInterval) { + clearInterval(this.refreshInterval); + } + }, // onReachBottom() { // clearTimeout(this.time); // this.loadingDownOnlinData = true; @@ -1265,7 +1526,6 @@ export default { this.showOrderLoading = true; } - this.params = { storeId: this.dashboardInfo.store_info.store_id, keyword: this.keyword, @@ -1296,7 +1556,10 @@ export default { } if (this.orderInfo.order_count) { - this.tabs[0].num = this.orderInfo.order_count.same_city_order_count; // 同城订单总数 + this.tabs[0].num = + this.orderInfo.order_count.same_city_order.progress_count + + this.orderInfo.order_count.same_city_order.overtime_count + + this.orderInfo.order_count.same_city_order.refund_count; // 同城订单总数 // this.tabs[2].num = this.orderInfo.order_count.logistics_order_count; // 物流订单总数 // this.tabs[3].num = this.orderInfo.order_count.all_order_count; //所有订单总数 @@ -1328,6 +1591,21 @@ export default { this.loadingDownOnlinData = false; // uni.stopPullDownRefresh(); }, + getRemainingTime(arrivalTime) { + if (!arrivalTime) return "时间未设定"; + + const now = Date.now(); + const remainingMs = arrivalTime - now; + + if (remainingMs <= 0) return "已超时"; + + // 计算分钟和秒 + const minutes = Math.floor(remainingMs / (1000 * 60)); + const seconds = Math.floor((remainingMs % (1000 * 60)) / 1000); + + // 格式化为 MM:SS(补零) + return `${minutes}:${seconds.toString().padStart(2, "0")}`; + }, handelSalesReturnSearch(item) { if (item.value == this.salesReturnBtnSearchAcitve) return; this.pageNum = 1; @@ -1607,7 +1885,93 @@ export default { this.getSalesReturnOrderList(); } } - this.showReturnOrderPopup = false; + }, + handerShowCancelOrder(item) { + this.currOrderItem = JSON.parse(JSON.stringify(item)); + this.showCancelOrderPopup = true; + this.isCancelOrder = true; + }, + handerShowPartOrderRefund(item) { + let _item = JSON.parse(JSON.stringify(item)); + + _item.order_items.forEach((group) => { + group.order_item_quantity_2 = group.order_item_quantity; + }); + + this.currOrderItem = _item; + + this.showPartOrderRefundPopup = true; + this.isCancelOrder = false; + }, + getInitiativeOrderRefund() { + var params = { + order_id: this.currOrderItem.order_id, + reason: this.form.reason, + }; + + if (!this.isCancelOrder) { + if (this.commodityCheckBoxList.length <= 0) { + this.$refs.uToast.show({ + message: "请先选择你要退的商品", + type: "error", + duration: 1000, + zIndex: 12000, + position: "top", + }); + return; + } + const matchedItems = this.currOrderItem.order_items.filter((item) => + this.commodityCheckBoxList.includes(item.item_id) + ); + + params.order_return_vo = { + order_id: this.currOrderItem.order_id, + return_items: matchedItems.map((item) => { + return { + order_item_id: item.item_id, + return_item_num: item.order_item_quantity, + return_refund_amount: + item.order_item_quantity * item.item_unit_price, + }; + }), + }; + } + + this.$refs.uForm.validate().then(async (valid) => { + let res = await GetInitiativeOrderRefund(params); + if (res && res.status == 200) { + this.showCancelOrderPopup = false; + this.showPartOrderRefundPopup = false; + if (!this.isCancelOrder) { + uni.$u.toast("部分订单退款成功"); + } else { + uni.$u.toast("取消订单成功"); + } + this.form.reason = ""; + this.pageNum = 1; + this.commodityCheckBoxList = []; + this.getOrderList(); + } + this.showCancelOrderPopup = false; + this.showPartOrderRefundPopup = false; + }); + }, + handerShowOrderPickingPopup(item) { + this.currOrderItem = item; + this.showOrderPickingPopup = true; + }, + async getOrderPicking(item) { + let params = { + order_id: this.currOrderItem.order_id, + store_id: this.currOrderItem.store_info.store_id, + }; + + let res = await GetOrderPicking(params); + if (res && res.status == 200) { + this.showOrderPickingPopup = false; + uni.$u.toast("操作成功"); + } + this.showOrderPickingPopup = false; }, }, }; @@ -2072,6 +2436,123 @@ export default { } } + .part-order-refund-popup { + ::v-deep.u-popup__content { + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; + } + + ::v-deep.u-fade-enter-to { + z-index: 10079 !important; + } + + .part-order-refund-popup-content { + .part-order-refund-popup-title { + padding: 40rpx; + text-align: center; + font-weight: bold; + } + + .affirm-popup-form { + padding: 20rpx 60rpx; + } + + .radio-list { + .commodity-info-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 28rpx; + + .commodity-info-box { + display: flex; + align-items: center; + justify-content: space-between; + + .commodity-info-img { + margin-right: 20rpx; + width: 120rpx; + height: 120rpx; + } + } + } + } + } + + .popup-btn-list { + display: flex; + margin: 50rpx; + + .btn-item { + width: 46%; + height: 64rpx; + border-color: #909193; + + &::after { + border: none; + } + } + + .btn-item-2 { + background: $base-color; + color: #fff; + border: none; + } + } + } + + .affirm-popup { + ::v-deep.u-popup__content { + border-radius: 16rpx; + } + + ::v-deep.u-fade-enter-to { + z-index: 10076 !important; + } + + .affirm-popup-content { + width: 600rpx; + + .affirm-popup-title { + padding: 60rpx 0 20rpx; + text-align: center; + font-size: 28rpx; + font-weight: bold; + } + + .affirm-popup-tips { + padding: 0 32rpx; + font-size: 28rpx; + text-align: center; + } + + .u-form { + padding: 0 60rpx; + } + + .popup-btn-list { + display: flex; + margin: 50rpx; + + .btn-item { + width: 46%; + height: 64rpx; + border-color: #909193; + + &::after { + border: none; + } + } + + .btn-item-2 { + background: $base-color; + color: #fff; + border: none; + } + } + } + } + .tui-animation { display: inline-block; transform: rotate(0deg); diff --git a/java-mall-app-shop-admin/pages/warehouse/manage/productList.vue b/java-mall-app-shop-admin/pages/warehouse/manage/productList.vue index b0f28ff..063e18a 100644 --- a/java-mall-app-shop-admin/pages/warehouse/manage/productList.vue +++ b/java-mall-app-shop-admin/pages/warehouse/manage/productList.vue @@ -236,6 +236,9 @@ v-if="currSpecificationList.length > 0" > 价格/库存修改 + + 注意:修改这里的价格,外面列表价格只会显示最低价 + { - if (specGroup.item && Array.isArray(specGroup.item)) { - specGroup.item.forEach((item) => { - specItemMap.push(item.id); - }); + if (productSpec.length > 0) { + productSpec = JSON.parse(productSpec); + if (!Array.isArray(productSpec)) { + productSpec = [productSpec]; // 确保是数组格式 } - }); + const specItemMap = []; - this.currSpecificationList = this.selectCommodisItems - .map((item) => { - try { - // 解析规格数据(兼容字符串和对象) - const itemSpec = - typeof item.item_spec === "string" - ? JSON.parse(item.item_spec) - : item.item_spec; + productSpec.forEach((specGroup) => { + if (specGroup.item && Array.isArray(specGroup.item)) { + specGroup.item.forEach((item) => { + specItemMap.push(item.id); + }); + } + }); + this.currSpecificationList = this.selectCommodisItems + .map((item) => { + try { + // 解析规格数据(兼容字符串和对象) + const itemSpec = + typeof item.item_spec === "string" + ? JSON.parse(item.item_spec) + : item.item_spec; - if (Array.isArray(itemSpec) && itemSpec.length > 0) { - const firstSpec = itemSpec[0]; + if (Array.isArray(itemSpec) && itemSpec.length > 0) { + const firstSpec = itemSpec[0]; - // 匹配规格逻辑 - if (firstSpec.item && firstSpec.item.id) { - const matchedSpec = specItemMap.find( - (id) => id == firstSpec.item.id - ); + // 匹配规格逻辑 + if (firstSpec.item && firstSpec.item.id) { + const matchedSpec = specItemMap.find( + (id) => id == firstSpec.item.id + ); - if (matchedSpec) { - return { - ...item, - spec_item_id: matchedSpec, - item_is_default: Boolean(item.item_is_default), - // 保留原始数据(调试用) - }; + if (matchedSpec) { + return { + ...item, + spec_item_id: matchedSpec, + item_is_default: Boolean(item.item_is_default), + // 保留原始数据(调试用) + }; + } } } + } catch (e) { + console.error(`处理商品 ${item.item_id} 时出错:`, e); } - } catch (e) { - console.error(`处理商品 ${item.item_id} 时出错:`, e); - } - }) - .filter((item) => item != undefined); - console.log(this.currSpecificationList); + }) + .filter((item) => item != undefined); + } else { + this.currSpecificationList = [ + { + ...item, + item_quantity: item.itemQuantity, + item_quantity_2: "", + item_unit_price: item.product_unit_price, + item_quantity_2: "", + }, + ]; + } this.showBottomPopup = true; + console.log(this.currSpecificationList); } }, async getProductCategoryTree() { @@ -722,8 +734,15 @@ export default { url: "../../news/search/search", }); }, - async updateCommodityPriceAndQuantity(item) { - let params = {}; + async updateCommodityPriceAndQuantity() { + let params = this.currSpecificationList.map((item) => { + return { + item_id: item.item_id, + product_id: item.product_id, + item_quantity: item.item_quantity_2 || item.item_quantity, + item_unit_price: item.item_quantity_2 || item.item_unit_price, + }; + }); let res = await UpdateCommodityPriceAndQuantity(params); if (res && res.status) { @@ -731,6 +750,8 @@ export default { message: "修改成功", type: "succeed", duration: 1000, + zIndex: 12000, + position: "top", }); // 静默更新数组 @@ -1218,6 +1239,13 @@ page { border-top-right-radius: 16rpx; } + .productList-price-popup-tips { + padding: 20rpx; + text-align: center; + background: #fff; + color: red; + } + .select-commodity-price-list { background: #f8f8f8; } diff --git a/java-mall-app-shop-admin/static/mp3/您有新的小发同城订单.MP3 b/java-mall-app-shop-admin/static/mp3/您有新的小发同城订单.MP3 new file mode 100644 index 0000000..8738b7d Binary files /dev/null and b/java-mall-app-shop-admin/static/mp3/您有新的小发同城订单.MP3 differ diff --git a/java-mall-app-shop-admin/static/mp3/您有新的消息,请尽快回复.MP3 b/java-mall-app-shop-admin/static/mp3/您有新的消息,请尽快回复.MP3 new file mode 100644 index 0000000..3f04d08 Binary files /dev/null and b/java-mall-app-shop-admin/static/mp3/您有新的消息,请尽快回复.MP3 differ diff --git a/java-mall-app-shop-admin/static/mp3/您有新的预约订单.MP3 b/java-mall-app-shop-admin/static/mp3/您有新的预约订单.MP3 new file mode 100644 index 0000000..1ea6fe2 Binary files /dev/null and b/java-mall-app-shop-admin/static/mp3/您有新的预约订单.MP3 differ diff --git a/java-mall-app-shop-admin/static/mp3/您有订单快超时了.MP3 b/java-mall-app-shop-admin/static/mp3/您有订单快超时了.MP3 new file mode 100644 index 0000000..eba7d80 Binary files /dev/null and b/java-mall-app-shop-admin/static/mp3/您有订单快超时了.MP3 differ diff --git a/java-mall-app-shop-admin/static/mp3/您有退货订单,请注意查看.MP3 b/java-mall-app-shop-admin/static/mp3/您有退货订单,请注意查看.MP3 new file mode 100644 index 0000000..3f15280 Binary files /dev/null and b/java-mall-app-shop-admin/static/mp3/您有退货订单,请注意查看.MP3 differ diff --git a/java-mall-app-shop-admin/static/mp3/您有部分退款订单,请注意查看.MP3 b/java-mall-app-shop-admin/static/mp3/您有部分退款订单,请注意查看.MP3 new file mode 100644 index 0000000..fa0f4d5 Binary files /dev/null and b/java-mall-app-shop-admin/static/mp3/您有部分退款订单,请注意查看.MP3 differ diff --git a/java-mall-app-shop-admin/static/mp3/您的预约订单快到时间了.MP3 b/java-mall-app-shop-admin/static/mp3/您的预约订单快到时间了.MP3 new file mode 100644 index 0000000..d099cbc Binary files /dev/null and b/java-mall-app-shop-admin/static/mp3/您的预约订单快到时间了.MP3 differ diff --git a/java-mall-app-shop-admin/utils/http.js b/java-mall-app-shop-admin/utils/http.js index 55d669e..e2cf3dd 100644 --- a/java-mall-app-shop-admin/utils/http.js +++ b/java-mall-app-shop-admin/utils/http.js @@ -2,6 +2,7 @@ import axios from "axios"; import config from "../config/config"; import axiosAdapterUniapp from "axios-adapter-uniapp"; import $store from "../store/index"; +import qs from "qs"; const service = axios.create({ baseURL: config.baseApi, // url = base url + request url @@ -19,6 +20,13 @@ service.interceptors.request.use( if (uni.getStorageSync("ukey")) { config.headers["Authorization"] = "Bearer " + uni.getStorageSync("ukey"); } + if ( + config.data && + config.headers["Content-Type"] === + "application/x-www-form-urlencoded;charset=UTF-8" + ) { + config.data = qs.stringify(config.data); + } return config; }, @@ -34,7 +42,7 @@ service.interceptors.response.use( (response) => { const res = response.data; - if (res.status == 250) { + if (res && res.status == 250) { uni.$u.toast(`提示:${res.msg}`); // uni.showToast({ @@ -44,7 +52,9 @@ service.interceptors.response.use( // }); } - if (res.code == 30) { + console.log(res); + + if (res && res.code == 30) { uni.$u.toast(`token已经过期需要重新登录`); // uni.showToast({