From 68d1d635a2d83538cb62e00989083a848ec488b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E9=A3=9E=E6=B4=8B?= <15778543+xufeiyang6017@user.noreply.gitee.com> Date: Tue, 2 Dec 2025 14:25:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8F=90=E4=BA=A4=E7=94=B3=E8=AF=B7=E5=90=8E?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E5=88=B0=E5=AE=A1=E6=A0=B8=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- custom-tab-bar/index.js | 49 +-- images/你有好蛋.png | Bin 0 -> 68423 bytes package-lock.json | 307 +++++++++++++++---- package.json | 3 +- pages/index/index.js | 62 +--- pages/profile/index.js | 54 +--- pages/publish/index.js | 65 +--- pages/seller/index.js | 594 ++++++++++++++++++++++-------------- pages/seller/index.wxml | 25 +- pages/seller/index.wxss | 34 +++ pages/settlement/index.js | 179 ++++++----- pages/settlement/index.wxml | 13 - pages/settlement/index.wxss | 54 ---- 13 files changed, 813 insertions(+), 626 deletions(-) create mode 100644 images/你有好蛋.png diff --git a/custom-tab-bar/index.js b/custom-tab-bar/index.js index a0fdcf1..a456b57 100644 --- a/custom-tab-bar/index.js +++ b/custom-tab-bar/index.js @@ -79,53 +79,8 @@ Component({ } } - // 特殊处理:点击货源页面时检查登录状态和入驻状态 - if (key === 'seller' && url === 'pages/seller/index') { - console.log('点击货源页面,开始检查登录状态和入驻状态...'); - - // 首先检查登录状态 - const userId = wx.getStorageSync('userId'); - const userInfo = wx.getStorageSync('userInfo'); - - if (!userId || !userInfo) { - console.log('用户未登录,跳转到登录或入驻页面'); - wx.navigateTo({ - url: '/pages/settlement/index', - success: (res) => { - console.log('跳转到入驻页面成功:', res); - }, - fail: (err) => { - console.error('跳转到入驻页面失败:', err); - this.navigateToTabPage(url); - } - }); - } else { - // 用户已登录,检查合作商状态 - const settlementStatus = wx.getStorageSync('settlement_status'); - console.log('检查合作商状态:', settlementStatus); - - if (!settlementStatus || settlementStatus === '') { - console.log('合作商状态不存在,用户未入驻'); - wx.navigateTo({ - url: '/pages/settlement/index' - }); - } else if (settlementStatus === 'underreview') { - console.log('合作商状态为审核中,跳转到货源页面显示审核中内容'); - this.navigateToTabPage(url); - } else if (settlementStatus === 'approved' || settlementStatus === 'incooperation') { - console.log('合作商状态为审核通过,正常跳转到货源页面'); - this.navigateToTabPage(url); - } else { - console.log('其他状态,跳转到入驻页面'); - wx.navigateTo({ - url: '/pages/settlement/index' - }); - } - } - } else { - // 其他tab页面正常跳转 - this.navigateToTabPage(url) - } + // 无论是否登录,直接跳转到对应页面 + this.navigateToTabPage(url) } catch (e) { console.error('switchTab方法执行错误:', e) } diff --git a/images/你有好蛋.png b/images/你有好蛋.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd1071cb89a539e971dd43021e0034b737818b2 GIT binary patch literal 68423 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" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/bytes": { @@ -254,6 +277,12 @@ "node": ">= 0.8" } }, + "node_modules/dottie": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==", + "license": "MIT" + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -344,18 +373,19 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", @@ -584,28 +614,23 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/iconv-lite": { @@ -624,6 +649,15 @@ "url": "https://opencollective.com/express" } }, + "node_modules/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ], + "license": "MIT" + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -651,6 +685,12 @@ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", "license": "MIT" }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, "node_modules/long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", @@ -732,6 +772,27 @@ "node": ">= 0.6" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.48", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz", + "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -739,9 +800,9 @@ "license": "MIT" }, "node_modules/mysql2": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.2.tgz", - "integrity": "sha512-kFm5+jbwR5mC+lo+3Cy46eHiykWSpUtTLOH3GE+AR7GeLq8PgfJcvpMiyVWk9/O53DjQsqm6a3VOOfq7gYWFRg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz", + "integrity": "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==", "license": "MIT", "dependencies": { "aws-ssl-profiles": "^1.1.1", @@ -840,6 +901,12 @@ "url": "https://opencollective.com/express" } }, + "node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "license": "MIT" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -884,20 +951,26 @@ } }, "node_modules/raw-body": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", - "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.7.0", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.10" } }, + "node_modules/retry-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.1.1.tgz", + "integrity": "sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSagmtXHaJYJw==", + "license": "MIT" + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -940,6 +1013,18 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", @@ -988,6 +1073,77 @@ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, + "node_modules/sequelize": { + "version": "6.37.7", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.7.tgz", + "integrity": "sha512-mCnh83zuz7kQxxJirtFD7q6Huy6liPanI67BSlbzSYgVNl5eXVdE2CN1FuAeZwG1SNpGsNRCV+bJAVVnykZAFA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.8", + "@types/validator": "^13.7.17", + "debug": "^4.3.4", + "dottie": "^2.0.6", + "inflection": "^1.13.4", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-timezone": "^0.5.43", + "pg-connection-string": "^2.6.1", + "retry-as-promised": "^7.0.4", + "semver": "^7.5.4", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.9.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/serve-static": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", @@ -1108,6 +1264,12 @@ "node": ">=0.6" } }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==", + "license": "MIT" + }, "node_modules/type-is": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", @@ -1132,17 +1294,27 @@ } }, "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -1152,6 +1324,24 @@ "node": ">= 0.8" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.15.23", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.23.tgz", + "integrity": "sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1161,6 +1351,15 @@ "node": ">= 0.8" } }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 06b9da7..b287628 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "cors": "^2.8.5", "express": "^5.1.0", "form-data": "^4.0.4", - "mysql2": "^3.15.2" + "mysql2": "^3.15.3", + "sequelize": "^6.37.7" } } diff --git a/pages/index/index.js b/pages/index/index.js index fea4263..6c10b09 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -37,8 +37,8 @@ Page({ // 选择卖家身份 async chooseSeller() { - // 先检查是否登录 - this.checkLoginAndProceed('seller'); + this.finishSetUserType('seller'); + }, // 检查登录状态并继续操作 @@ -69,6 +69,8 @@ Page({ // 处理卖家路由逻辑 async handleSellerRoute() { try { + wx.switchTab({ url: '/pages/seller/index' }); + // 查询用户信息获取partnerstatus字段 const userInfo = await API.getUserInfo(); @@ -78,23 +80,15 @@ Page({ console.log('获取到的partnerstatus:', userInfo.data.partnerstatus); - // 根据partnerstatus值控制路由跳转 - if (userInfo.data.partnerstatus === 'approved') { - // 如果为approved,则进入seller/index页面 - wx.switchTab({ url: '/pages/seller/index' }); - } else { - // 否则进入pages/settlement/index页面 - wx.navigateTo({ url: '/pages/settlement/index' }); - } - } else { - // 如果没有获取到partnerstatus,默认进入settlement页面 - console.log('未获取到partnerstatus字段'); - wx.navigateTo({ url: '/pages/settlement/index' }); } + + // 无论partnerstatus是什么,都直接进入seller/index页面 + wx.switchTab({ url: '/pages/seller/index' }); + } catch (error) { console.error('获取用户信息失败:', error); - // 出错时也进入settlement页面 - wx.navigateTo({ url: '/pages/settlement/index' }); + // 出错时也直接进入seller/index页面 + wx.switchTab({ url: '/pages/seller/index' }); } }, @@ -925,45 +919,15 @@ Page({ // 完成用户类型设置并跳转 finishSetUserType(type) { - const userId = wx.getStorageSync('userId') - - // 更新用户类型 - let users = wx.getStorageSync('users') - // 检查users是否为对象,如果不是则重新初始化为空对象 - if (typeof users !== 'object' || users === null) { - users = {} - } - // 确保userId对应的用户对象存在 - if (!users[userId]) { - users[userId] = {} - } - users[userId].type = type - wx.setStorageSync('users', users) - - // 打标签 - let tags = wx.getStorageSync('tags') - // 检查tags是否为对象,如果不是则重新初始化为空对象 - if (typeof tags !== 'object' || tags === null) { - tags = {} - } - // 确保userId对应的标签数组存在 - tags[userId] = tags[userId] || [] - // 移除已有的身份标签 - tags[userId] = tags[userId].filter(tag => !tag.startsWith('身份:')) - // 添加新的身份标签 - tags[userId].push(`身份:${type}`) - wx.setStorageSync('tags', tags) - console.log('用户类型设置完成,准备跳转到', type === 'buyer' ? '买家页面' : '卖家页面') - // 添加小延迟确保所有异步操作都完成后再跳转 + // 无论是否登录,直接跳转到对应页面 setTimeout(() => { - // 跳转到对应页面 if (type === 'buyer') { wx.switchTab({ url: '/pages/buyer/index' }) } else { - // 卖家身份需要处理partnerstatus逻辑,调用专门的方法 - this.handleSellerRoute() + // 卖家身份直接跳转到卖家页面,不需要处理partnerstatus逻辑 + wx.switchTab({ url: '/pages/seller/index' }) } }, 500) }, diff --git a/pages/profile/index.js b/pages/profile/index.js index fa0ee99..1b4fda7 100644 --- a/pages/profile/index.js +++ b/pages/profile/index.js @@ -37,7 +37,7 @@ Page({ app.globalData.userInfo = localUserInfo this.setData({ userInfo: localUserInfo, - needPhoneAuth: !localUserInfo.phoneNumber || localUserInfo.phoneNumber === '13800138000' + needPhoneAuth: !localUserInfo.phoneNumber }) } @@ -133,15 +133,6 @@ Page({ if (res.success && res.data) { const serverUserInfo = res.data - // 检查手机号是否是临时手机号 - if (serverUserInfo.phoneNumber === '13800138000') { - console.warn('服务器返回的仍是临时手机号,用户可能需要重新授权手机号') - // 可以在这里显示提示,让用户重新授权手机号 - this.setData({ - needPhoneAuth: true - }) - } - // 更新本地用户信息 const app = getApp() const updatedUserInfo = { @@ -164,14 +155,6 @@ Page({ if (res.success && res.data) { const serverUserInfo = res.data - // 检查手机号是否是临时手机号 - if (serverUserInfo.phoneNumber === '13800138000') { - console.warn('服务器返回的仍是临时手机号,用户可能需要重新授权手机号') - this.setData({ - needPhoneAuth: true - }) - } - // 更新本地用户信息 const app = getApp() const updatedUserInfo = { @@ -413,15 +396,19 @@ Page({ const hasPhoneConflict = res.phoneNumberConflict || false const isNewPhone = res.isNewPhone || true const phoneNumber = res.phoneNumber || null - - // 如果有手机号冲突且没有返回手机号,使用临时手机号 - const finalPhoneNumber = hasPhoneConflict && !phoneNumber ? '13800138000' : phoneNumber - if (finalPhoneNumber) { + // 如果有手机号冲突,直接提示用户 + if (hasPhoneConflict) { + wx.showToast({ + title: '手机号已被其他账号绑定,请更换账号后重试', + icon: 'none', + duration: 3000 + }) + } else if (phoneNumber) { // 保存手机号到用户信息 const app = getApp() const userInfo = app.globalData.userInfo || wx.getStorageSync('userInfo') || {} - userInfo.phoneNumber = finalPhoneNumber + userInfo.phoneNumber = phoneNumber // 更新本地和全局用户信息 app.globalData.userInfo = userInfo @@ -437,26 +424,16 @@ Page({ // 更新页面状态 this.setData({ - needPhoneAuth: finalPhoneNumber === '13800138000' + needPhoneAuth: false }) // 重新加载用户信息以更新UI this.loadUserInfo() - } - // 根据服务器返回的结果显示不同的提示 - if (hasPhoneConflict) { wx.showToast({ - title: '获取成功,但手机号已被其他账号绑定', - icon: 'none', - duration: 3000 - }) - } else { - wx.showToast({ - title: '手机号绑定成功', - icon: 'success' - }) - } + title: '手机号绑定成功', + icon: 'success' + }) } else { console.error('获取手机号失败:', res) wx.showToast({ @@ -464,7 +441,8 @@ Page({ icon: 'none' }) } - }) + } + }) .catch(err => { wx.hideLoading() console.error('获取手机号失败:', err) diff --git a/pages/publish/index.js b/pages/publish/index.js index a731fec..d3aec9d 100644 --- a/pages/publish/index.js +++ b/pages/publish/index.js @@ -143,27 +143,7 @@ Page({ * 生命周期函数--监听页面加载 */ onLoad(options) { - // 检查用户是否已登录 - this.checkLoginStatus(); - }, - - /** - * 检查用户登录状态 - */ - checkLoginStatus() { - const openid = wx.getStorageSync('openid'); - if (!openid) { - wx.showModal({ - title: '提示', - content: '请先登录后再发布商品', - showCancel: false, - success: (res) => { - if (res.confirm) { - wx.navigateTo({ url: '/pages/index/index' }); - } - } - }); - } + // 移除登录检查,允许直接发布商品 }, /** @@ -257,29 +237,6 @@ Page({ onPublishTap() { console.log('发布按钮点击'); - // 检查用户登录状态 - const openid = wx.getStorageSync('openid'); - const userInfo = wx.getStorageSync('userInfo'); - const userId = wx.getStorageSync('userId'); - - console.log('检查用户授权状态 - openid:', !!openid, 'userInfo:', !!userInfo, 'userId:', !!userId); - - if (!openid || !userId || !userInfo) { - console.log('用户未登录或未授权,引导重新登录'); - wx.showModal({ - title: '登录过期', - content: '请先授权登录后再发布商品', - showCancel: false, - confirmText: '去登录', - success: (res) => { - if (res.confirm) { - wx.navigateTo({ url: '/pages/index/index' }); - } - } - }); - return; - } - if (!this.validateForm()) { console.log('表单验证失败'); return; @@ -333,6 +290,8 @@ Page({ // 【终极修复】使用全局上传管理器处理上传,完全脱离页面生命周期 // 将所有数据存储到全局对象中,防止被回收 console.log('【上传前检查】存储数据到全局对象'); + // 从本地存储获取userId,如果不存在则使用默认值 + const userId = wx.getStorageSync('userId') || 'anonymous'; global.tempUploadData = { formData: formDataCopy, images: imagesCopy, @@ -519,22 +478,8 @@ Page({ setTimeout(() => { wx.hideLoading(); - if (err.needRelogin) { - wx.showModal({ - title: '登录状态失效', - content: '请重新授权登录', - showCancel: false, - success: (res) => { - if (res.confirm) { - wx.removeStorageSync('openid'); - wx.removeStorageSync('userId'); - wx.navigateTo({ url: '/pages/login/index' }); - } - } - }); - } else { - wx.showToast({ title: err.message || '发布失败,请重试', icon: 'none' }); - } + // 直接显示错误提示,不进行登录验证 + wx.showToast({ title: err.message || '发布失败,请重试', icon: 'none' }); // 清理全局临时数据 if (global.tempUploadData) { diff --git a/pages/seller/index.js b/pages/seller/index.js index f692dd8..785d0dc 100644 --- a/pages/seller/index.js +++ b/pages/seller/index.js @@ -122,15 +122,14 @@ Page({ showAuthModal: false, // 控制未授权提示弹窗显示 showOneKeyLoginModal: false, // 控制一键登录弹窗显示 pendingUserType: 'seller', // 记录用户即将选择的身份类型 - avatarUrl: '/images/default-avatar.png' // 默认头像 + avatarUrl: '/images/default-avatar.png', // 默认头像 + partnerstatus: '' // 用户入驻状态,用于显示入驻/未入驻 }, onLoad() { console.log('卖家页面onLoad开始执行'); // 移除强制登录检查,允许用户浏览货源页面 - // 只有在创建新货源时才检查登录状态 this.loadSupplies(); - // 初始化规格搜索相关数据 this.setData({ specSearchKeyword: '', @@ -138,7 +137,6 @@ Page({ filteredSpecOptions: this.data.specOptions, filteredEditSpecOptions: this.data.specOptions }); - console.log('卖家页面onLoad执行完毕'); }, @@ -315,6 +313,8 @@ Page({ onShow() { console.log('seller页面onShow开始加载') + // 获取用户入驻状态 + this.getUserStatus(); // 检查页面是否是初次加载(onLoad已调用loadSupplies) // 避免在页面初次加载时重复加载数据 if (!this.data._hasLoadedOnShow) { @@ -342,6 +342,26 @@ Page({ app.updateCurrentTab('seller'); }, + // 获取用户入驻状态 + getUserStatus() { + const openid = wx.getStorageSync('openid'); + if (openid) { + API.getUserInfo(openid) + .then(response => { + console.log('获取到的用户信息响应:', response); + // 修复:访问data字段获取用户信息 + const userInfo = response.data || {}; + console.log('处理后的用户信息:', userInfo); + this.setData({ + partnerstatus: userInfo.partnerstatus || '' + }); + }) + .catch(err => { + console.error('获取用户信息失败:', err); + }); + } + }, + // 加载货源列表并分类 - 修改为分页加载 loadSupplies() { console.log('开始加载货源数据 - 分页模式'); @@ -1189,26 +1209,12 @@ Page({ showAddSupply(e) { console.log('点击创建新货源按钮'); - // 检查登录状态 - const openid = wx.getStorageSync('openid'); - const userId = wx.getStorageSync('userId'); - - if (!openid || !userId) { - console.log('用户未登录,触发授权登录流程'); - // 显示授权弹窗 - this.setData({ - showAuthModal: true, - pendingUserType: 'seller' - }); - return; - } - // 阻止事件冒泡,防止触发父元素的点击事件 if (e && e.stopPropagation) { e.stopPropagation(); } - // 已登录,继续原有逻辑 + // 直接显示创建货源弹窗,无需登录验证 this.setData({ showImagePreview: false, showModal: true, @@ -1336,6 +1342,32 @@ Page({ }, // 添加新货源 - 先创建商品再上传图片(修复版) addSupply() { + // 检查登录状态 + const userId = wx.getStorageSync('userId'); + const openid = wx.getStorageSync('openid'); + const userInfo = wx.getStorageSync('userInfo'); + + if (!userId || !openid || !userInfo) { + console.log('用户未登录,显示登录提示'); + // 用户未登录,显示未授权提示弹窗 + wx.showModal({ + title: '登录提示', + content: '请先登录再发布商品', + showCancel: true, + confirmText: '去登录', + success: (res) => { + if (res.confirm) { + // 用户点击确定,跳转到登录页面或显示登录弹窗 + this.setData({ + showAuthModal: true, + pendingUserType: 'seller' + }); + } + } + }); + return; + } + const { name, price, minOrder, yolk, spec, region, imageUrls } = this.data.newSupply if (!name || !price || !minOrder || !yolk) { wx.showToast({ title: '请填写完整信息', icon: 'none', duration: 2000 }) @@ -1343,53 +1375,44 @@ Page({ } // 显示加载中提示 - wx.showLoading({ title: '正在创建商品...', mask: true }) - - const openid = wx.getStorageSync('openid') - console.log('当前用户openid:', openid) - // 检查openid是否存在 - if (!openid) { - console.error('openid不存在,无法上传商品到服务器') - wx.hideLoading() - wx.showModal({ - title: '登录状态异常', - content: '您的登录状态已失效,请重新登录后再尝试发布商品', - showCancel: false, - success: () => { - wx.showToast({ - title: '创建失败,请先登录', - icon: 'none', - duration: 3000 - }) + wx.showLoading({ title: '正在验证权限...', mask: true }) + + // 检查用户的partnerstatus是否为approved + API.getUserInfo(openid) + .then(response => { + const userInfoRes = response.data; + console.log('获取用户信息成功:', userInfoRes) + + // 检查partnerstatus字段 + const partnerStatus = userInfoRes.partnerstatus || 'pending' + console.log('用户合作状态:', partnerStatus) + + if (partnerStatus !== 'approved') { + throw new Error('partnerstatus_not_approved') + } + + // 第一步:先创建商品(不带图片) + const productData = { + productName: name, + price: price, // 保留原始字符串,不进行数字转换 + quantity: Number(minOrder), + grossWeight: this.data.newSupply.grossWeight && this.data.newSupply.grossWeight !== '' ? this.data.newSupply.grossWeight : "", + + yolk: yolk, + specification: spec || '', + region: region || '', // 【新增】添加地区字段 + rejectReason: '', + imageUrls: [] // 明确设置为空数组 } - }) - - this.setData({ - showModal: false, - newSupply: { name: '', price: '', minOrder: '', yolk: '', spec: '', region: '', grossWeight: '', imageUrls: [] } - }) - this.enablePageScroll() - return - } - - // 第一步:先创建商品(不带图片) - const productData = { - productName: name, - price: price, // 保留原始字符串,不进行数字转换 - quantity: Number(minOrder), - grossWeight: this.data.newSupply.grossWeight && this.data.newSupply.grossWeight !== '' ? this.data.newSupply.grossWeight : "", - - yolk: yolk, - specification: spec || '', - region: region || '', // 【新增】添加地区字段 - rejectReason: '', - imageUrls: [] // 明确设置为空数组 - } - console.log('第一步:准备创建商品,数据:', productData) + console.log('第一步:准备创建商品,数据:', productData) + + // 更新加载提示 + wx.showLoading({ title: '正在创建商品...', mask: true }) - // 调用API创建商品(不带图片) - API.publishProduct(productData) + // 调用API创建商品(不带图片) + return API.publishProduct(productData) + }) .then(res => { console.log('商品创建成功:', res) @@ -1439,39 +1462,30 @@ Page({ console.error('商品创建或图片上传失败:', err) wx.hideLoading() - // 错误处理 - if (err.needRelogin) { - console.warn('检测到需要重新登录') + // 处理权限不足的情况 + if (err.message === 'partnerstatus_not_approved') { wx.showModal({ - title: '登录状态失效', - content: '您的登录已过期,请重新授权登录', + title: '权限不足', + content: '您的合作伙伴身份尚未通过审核,请等待审核通过后再发布商品', showCancel: false, - success: (res) => { - if (res.confirm) { - wx.removeStorageSync('openid') - wx.removeStorageSync('userId') - wx.navigateTo({ url: '/pages/login/index' }) - } - } - }) - } else { - let errorMsg = '上传服务器失败' - if (err.message && err.message.includes('用户不存在')) { - errorMsg = '用户未登录,请先登录' - } else if (err.message && err.message.includes('卖家才能发布商品')) { - errorMsg = '请先在个人资料中修改用户类型为卖家' - } else if (err.message && err.message.includes('商品不存在')) { - errorMsg = '商品创建失败,无法上传图片' - } - wx.showModal({ - title: '发布失败', - content: errorMsg + '\n\n错误详情: ' + (err.message || JSON.stringify(err)), - showCancel: false, - success: () => { - this.loadSupplies() - } + confirmText: '确定' }) + return + } + + // 其他错误处理:所有错误都显示通用提示,不再跳转登录 + let errorMsg = '上传服务器失败' + if (err.message && err.message.includes('商品不存在')) { + errorMsg = '商品创建失败,无法上传图片' } + wx.showModal({ + title: '发布失败', + content: errorMsg + '\n\n错误详情: ' + (err.message || JSON.stringify(err)), + showCancel: false, + success: () => { + this.loadSupplies() + } + }) }) }, @@ -1651,6 +1665,37 @@ Page({ return; } + // 检查用户合作状态 + API.getUserInfo(openid) + .then(response => { + const userInfo = response.data; + if (userInfo.partnerstatus !== 'approved') { + wx.hideLoading(); + wx.showToast({ + title: '权限不足,无法保存商品', + icon: 'none', + duration: 3000 + }); + this.setData({ showEditModal: false }); + this.enablePageScroll(); + return Promise.reject('partnerstatus not approved'); + } + return Promise.resolve(); + }) + .catch(err => { + if (err !== 'partnerstatus not approved') { + wx.hideLoading(); + wx.showToast({ + title: '获取用户信息失败', + icon: 'none', + duration: 3000 + }); + this.setData({ showEditModal: false }); + this.enablePageScroll(); + } + return Promise.reject(err); + }) + .then(() => { // 【关键修复】准备商品数据 - 确保包含地区字段 const productData = { productName: editSupply.name, @@ -1750,6 +1795,7 @@ Page({ } }); } + }); }, // 预览图片 @@ -2144,165 +2190,209 @@ Page({ showImagePreview: false }); - const id = e.currentTarget.dataset.id - // 优先使用编辑中的商品数据 - let supply = null - - // 检查是否存在编辑中的数据 - if (this.data.editSupply && this.data.editSupply.id === id) { - supply = { ...this.data.editSupply }; - } else { - // 否则从supplies中查找 - supply = this.data.supplies.find(s => s.id === id) - } - - if (!supply) { - wx.hideLoading(); - // 恢复页面滚动 - this.enablePageScroll(); - wx.showToast({ - title: '操作失败,货源不存在', - icon: 'none', - duration: 2000 + // 登录验证 + const userId = wx.getStorageSync('userId'); + const openid = wx.getStorageSync('openid'); + const userInfo = wx.getStorageSync('userInfo'); + + if (!userId || !openid || !userInfo) { + wx.showModal({ + title: '提示', + content: '请先登录再进行商品上架操作', + showCancel: false, + success: (res) => { + if (res.confirm) { + this.setData({ showAuthModal: true }); + } + } }); return; } + + // 检查用户合作状态 + API.getUserInfo(openid) + .then(response => { + const userInfo = response.data; + if (userInfo.partnerstatus !== 'approved') { + wx.hideLoading(); + this.enablePageScroll(); + wx.showModal({ + title: '权限不足', + content: '您的合作状态尚未通过审核,暂时无法进行商品上架操作', + showCancel: false + }); + return; + } + + const id = e.currentTarget.dataset.id + // 优先使用编辑中的商品数据 + let supply = null + + // 检查是否存在编辑中的数据 + if (this.data.editSupply && this.data.editSupply.id === id) { + supply = { ...this.data.editSupply }; + } else { + // 否则从supplies中查找 + supply = this.data.supplies.find(s => s.id === id) + } - wx.showLoading({ title: '处理中...', mask: true }); - - // 判断当前货源状态,决定设置什么状态 - // 重新提交的商品应该先进入审核中 - let newStatus = 'pending_review'; // 默认审核中 - if (supply.status === 'reviewed') { - newStatus = 'published'; // 已审核通过的货源可以直接上架 - } + if (!supply) { + wx.hideLoading(); + this.enablePageScroll(); + wx.showToast({ + title: '货源信息不存在', + icon: 'none', + duration: 2000 + }); + return; + } + + wx.showLoading({ title: '处理中...', mask: true }); + + // 判断当前货源状态,决定设置什么状态 + // 重新提交的商品应该先进入审核中 + let newStatus = 'pending_review'; // 默认审核中 + if (supply.status === 'reviewed') { + newStatus = 'published'; // 已审核通过的货源可以直接上架 + } - // 同步数据到服务器数据库 - // 仅当有serverProductId时才同步到服务器 - if (supply.serverProductId) { - const openid = wx.getStorageSync('openid'); - if (openid) { - // 审核失败、隐藏、审核中或下架的货源重新提交时,调用编辑接口同步商品内容和状态 - if (supply.status === 'rejected' || supply.status === 'hidden' || supply.status === 'pending_review' || supply.status === 'sold_out') { - console.log('审核失败、隐藏、审核中或下架货源重新提交,同步商品内容和状态到服务器'); - // 准备商品数据,转换为服务器需要的格式 - const productData = { - openid: openid, - productId: supply.serverProductId, - product: { - productName: supply.name, - price: supply.price, - quantity: supply.minOrder, - grossWeight: supply.grossWeight || "", - yolk: supply.yolk, - specification: supply.spec, - resubmit: true // 关键参数:告诉服务器这是重新提交审核 - }, - status: newStatus // 明确传递状态参数,确保变为审核中状态 - }; + // 同步数据到服务器数据库 + // 仅当有serverProductId时才同步到服务器 + if (supply.serverProductId) { + const openid = wx.getStorageSync('openid'); + if (openid) { + // 审核失败、隐藏、审核中或下架的货源重新提交时,调用编辑接口同步商品内容和状态 + if (supply.status === 'rejected' || supply.status === 'hidden' || supply.status === 'pending_review' || supply.status === 'sold_out') { + console.log('审核失败、隐藏、审核中或下架货源重新提交,同步商品内容和状态到服务器'); + // 准备商品数据,转换为服务器需要的格式 + const productData = { + openid: openid, + productId: supply.serverProductId, + product: { + productName: supply.name, + price: supply.price, + quantity: supply.minOrder, + grossWeight: supply.grossWeight || "", + yolk: supply.yolk, + specification: supply.spec, + resubmit: true // 关键参数:告诉服务器这是重新提交审核 + }, + status: newStatus // 明确传递状态参数,确保变为审核中状态 + }; - console.log('准备发送商品编辑请求 - URL:', API.BASE_URL + '/api/product/edit'); - console.log('准备发送的商品数据:', productData); - // 调用编辑商品接口,该接口会自动设置状态为pending_review - wx.request({ - url: API.BASE_URL + '/api/product/edit', - method: 'POST', - data: productData, - success: (res) => { - console.log('商品内容和状态同步成功:', res); - // 重新加载数据以更新UI - this.loadSupplies(); - }, - fail: (err) => { - console.error('商品内容和状态同步失败:', err); - // 重新加载数据以更新UI - this.loadSupplies(); - }, - complete: () => { - // 确保在请求完成后隐藏loading并显示提示 - try { - wx.hideLoading(); - // 恢复页面滚动 - this.enablePageScroll(); - wx.showToast({ - title: newStatus === 'published' ? '上架成功' : '重新提交成功,等待审核', - duration: 2000 - }); - } catch (e) { - console.error('显示提示时出错:', e); - // 确保即使在错误情况下也隐藏loading并恢复滚动 - try { - wx.hideLoading(); - this.enablePageScroll(); - } catch (innerErr) { - console.error('隐藏loading时出错:', innerErr); + console.log('准备发送商品编辑请求 - URL:', API.BASE_URL + '/api/product/edit'); + console.log('准备发送的商品数据:', productData); + // 调用编辑商品接口,该接口会自动设置状态为pending_review + wx.request({ + url: API.BASE_URL + '/api/product/edit', + method: 'POST', + data: productData, + success: (res) => { + console.log('商品内容和状态同步成功:', res); + // 重新加载数据以更新UI + this.loadSupplies(); + }, + fail: (err) => { + console.error('商品内容和状态同步失败:', err); + // 重新加载数据以更新UI + this.loadSupplies(); + }, + complete: () => { + // 确保在请求完成后隐藏loading并显示提示 + try { + wx.hideLoading(); + // 恢复页面滚动 + this.enablePageScroll(); + wx.showToast({ + title: newStatus === 'published' ? '上架成功' : '重新提交成功,等待审核', + duration: 2000 + }); + } catch (e) { + console.error('显示提示时出错:', e); + // 确保即使在错误情况下也隐藏loading并恢复滚动 + try { + wx.hideLoading(); + this.enablePageScroll(); + } catch (innerErr) { + console.error('隐藏loading时出错:', innerErr); + } + } } - } - } - }); - return; // 异步操作,稍后再继续执行 - } else { - // 其他情况只更新状态 - wx.request({ - url: API.BASE_URL + '/api/product/review', - method: 'POST', - data: { - openid: openid, - productId: supply.serverProductId, - status: newStatus - }, - success: () => { - this.loadSupplies(); - }, - fail: (err) => { - console.error('更新状态失败:', err); - this.loadSupplies(); - }, - complete: () => { - try { - wx.hideLoading(); - // 恢复页面滚动 - this.enablePageScroll(); - wx.showToast({ - title: newStatus === 'published' ? '上架成功' : '重新提交成功,等待审核', - duration: 2000 - }); - } catch (e) { - console.error('显示提示时出错:', e); - // 确保即使在错误情况下也隐藏loading并恢复滚动 - try { - wx.hideLoading(); - this.enablePageScroll(); - } catch (innerErr) { - console.error('隐藏loading时出错:', innerErr); + }); + return; // 异步操作,稍后再继续执行 + } else { + // 其他情况只更新状态 + wx.request({ + url: API.BASE_URL + '/api/product/review', + method: 'POST', + data: { + openid: openid, + productId: supply.serverProductId, + status: newStatus + }, + success: () => { + this.loadSupplies(); + }, + fail: (err) => { + console.error('更新状态失败:', err); + this.loadSupplies(); + }, + complete: () => { + try { + wx.hideLoading(); + // 恢复页面滚动 + this.enablePageScroll(); + wx.showToast({ + title: newStatus === 'published' ? '上架成功' : '重新提交成功,等待审核', + duration: 2000 + }); + } catch (e) { + console.error('显示提示时出错:', e); + // 确保即使在错误情况下也隐藏loading并恢复滚动 + try { + wx.hideLoading(); + this.enablePageScroll(); + } catch (innerErr) { + console.error('隐藏loading时出错:', innerErr); + } + } } - } + }); + return; // 异步操作,稍后再继续执行 } + } else { + // 没有openid时的处理 + wx.hideLoading(); + // 恢复页面滚动 + this.enablePageScroll(); + wx.showToast({ + title: '登录状态异常,请重新登录', + icon: 'none', + duration: 2000 + }); + } + } else { + // 如果没有serverProductId,提示用户 + wx.hideLoading(); + // 恢复页面滚动 + this.enablePageScroll(); + wx.showToast({ + title: '无法上架,商品未上传到服务器', + icon: 'none', + duration: 2000 }); - return; // 异步操作,稍后再继续执行 } - } else { - // 没有openid时的处理 + }) + .catch(err => { + console.error('获取用户信息失败:', err); wx.hideLoading(); - // 恢复页面滚动 this.enablePageScroll(); wx.showToast({ - title: '登录状态异常,请重新登录', + title: '获取用户信息失败', icon: 'none', duration: 2000 }); - } - } else { - // 如果没有serverProductId,提示用户 - wx.hideLoading(); - // 恢复页面滚动 - this.enablePageScroll(); - wx.showToast({ - title: '无法上架,商品未上传到服务器', - icon: 'none', - duration: 2000 }); - } }, // 下架货源 - 移除本地存储操作 @@ -3329,5 +3419,43 @@ Page({ } } }); + }, + + // 入驻申请 + applyForSettlement() { + const openid = wx.getStorageSync('openid'); + if (openid) { + API.getUserInfo(openid) + .then(response => { + console.log('获取到的用户信息:', response); + const userInfo = response.data; + const partnerstatus = userInfo.partnerstatus || ''; + if (partnerstatus === 'approved') { + // 如果已经审核通过,显示提示 + wx.showToast({ + title: '您已成功入驻', + icon: 'success', + duration: 2000 + }); + } else { + // 否则进入入驻页面 + wx.navigateTo({ + url: '/pages/settlement/index' + }); + } + }) + .catch(err => { + console.error('获取用户信息失败:', err); + // 获取失败时,默认进入入驻页面 + wx.navigateTo({ + url: '/pages/settlement/index' + }); + }); + } else { + // 未登录时,直接进入入驻页面 + wx.navigateTo({ + url: '/pages/settlement/index' + }); + } } }) diff --git a/pages/seller/index.wxml b/pages/seller/index.wxml index 8d86685..2c5cb80 100644 --- a/pages/seller/index.wxml +++ b/pages/seller/index.wxml @@ -2,13 +2,24 @@ style="align-items: flex-start; padding: 20rpx; width: 100%; max-width: 100vw; overflow-x: hidden; position: relative; box-sizing: border-box;" catchtouchmove="{{touchMoveBlocked ? 'preventTouchMove' : ''}}"> - 我的鸡蛋货源 - + 我的货源 + + + + {{partnerstatus === 'approved' ? '已入驻' : '未入驻'}} + + + diff --git a/pages/seller/index.wxss b/pages/seller/index.wxss index 88d76bd..7c08cb3 100644 --- a/pages/seller/index.wxss +++ b/pages/seller/index.wxss @@ -69,6 +69,40 @@ 0 1rpx 0 rgba(255, 255, 255, 0.3) inset; } +/* 服务区域容器 */ +.service-container { + display: flex; + align-items: center; + gap: 20rpx; +} + +/* 未入驻状态样式 */ +.no-settlement-status { + font-size: 24rpx; + color: #ff4d4f; + padding: 0 10rpx; +} + +/* 入驻按钮样式 */ +.apply-settlement-btn { + background: #1677ff; + color: white; + font-size: 28rpx; + padding: 10rpx 20rpx; + border-radius: 8rpx; + border: none; + box-shadow: none; + transition: all 0.2s ease; + min-width: 100rpx; + text-align: center; +} + +.apply-settlement-btn:active { + background: #4096ff; + transform: none; + box-shadow: none; +} + /* 登录授权弹窗样式 - 专门用于登录相关弹窗 */ .auth-modal-overlay { position: fixed; diff --git a/pages/settlement/index.js b/pages/settlement/index.js index 137250b..ddf62d8 100644 --- a/pages/settlement/index.js +++ b/pages/settlement/index.js @@ -1,4 +1,5 @@ // pages/settlement/settlement.js +const API = require('../../utils/api.js'); Page({ data: { // 是否显示引导页 @@ -56,6 +57,8 @@ Page({ currentStep: 3, partnerstatus: options.status }); + // 同步服务器状态,确保显示最新状态 + this.syncSettlementStatus(); return; // 直接返回,不执行后续逻辑 } } @@ -90,6 +93,9 @@ Page({ } }, 500); } + + // 同步服务器状态,确保显示最新的partnerstatus + this.syncSettlementStatus(); }, onUnload() { @@ -99,6 +105,7 @@ Page({ } }, + // 加载入驻进度 loadSettlementProgress() { const settlementData = wx.getStorageSync('settlement_data'); @@ -172,23 +179,8 @@ Page({ console.log('开始入驻流程'); try { - // 检查登录状态 - const userId = wx.getStorageSync('userId'); - const userInfo = wx.getStorageSync('userInfo'); - - if (!userId || !userInfo) { - console.log('用户未登录,显示登录弹窗'); - this.setData({ - showAuthModal: true, - loginModalTitle: '请先登录', - loginModalContent: '为了您的账户安全,请先完成手机号登录', - showLoginButton: true - }); - return; - } - // 检查数据库中是否存在入驻信息 - console.log('用户已登录,检查入驻信息'); + console.log('检查入驻信息'); await this.syncSettlementStatus(); // 根据入驻状态处理 @@ -504,13 +496,20 @@ Page({ // 检查用户是否已登录 const openid = wx.getStorageSync('openid'); const userId = wx.getStorageSync('userId'); - console.log('检查用户登录状态,openid:', openid); - if (!openid) { - console.log('用户未登录,调用首页授权登录'); - this.goToAuthLogin(); - return; + // 如果未登录,显示登录弹窗 + if (!openid || !userId) { + console.log('用户未登录,显示授权弹窗'); + // 保存当前表单数据 + this.saveSettlementProgress(); + // 显示登录弹窗 + this.setData({ + showAuthModal: true + }); + return; // 取消提交申请 } + + console.log('使用已登录用户信息提交申请:', openid, userId); // 先上传所有文件 wx.showLoading({ @@ -662,18 +661,10 @@ Page({ return; } + // 手机号为空时使用默认值,不再强制要求 if (!contactPhone) { - wx.showToast({ - title: '请先完成手机号授权', - icon: 'none' - }); - // 显示授权弹窗 - this.setData({ - showAuthModal: true, - loginModalTitle: '请完成手机号授权', - loginModalContent: '入驻申请需要您的手机号信息,请完成授权' - }); - return; + contactPhone = 'default_phone'; + console.log('使用默认手机号:', contactPhone); } // 验证省市区字段是否填写完整(用于构建region字段) @@ -747,20 +738,25 @@ Page({ wx.setStorageSync('applicationId', appId); } - this.setData({ - partnerstatus: 'underreview', // 使用数据库字段名 (原auditStatus) - applicationId: appId - }); - wx.showToast({ title: '提交成功,等待审核', icon: 'none', duration: 2000 }); - // 跳转到审核状态页面 + // 跳转到审核状态页面 - 立即执行 this.setData({ - currentStep: 3 // 设置为第4步(审核状态页面) + currentStep: 3, // 设置为第4步(审核状态页面) + partnerstatus: 'underreview', // 使用数据库字段名 (原auditStatus) + applicationId: appId + }); + + // 调用API获取用户完整数据 - 异步执行,不影响跳转 + const API = require('../../utils/api.js'); + API.getUserInfo().then(userRes => { + console.log('用户完整数据:', userRes.data); + }).catch(err => { + console.error('获取用户数据失败:', err); }); // 清除进度数据,因为已经提交了 @@ -962,23 +958,24 @@ Page({ // 撤回备案 async withdrawApplication() { + // 检查用户是否已登录 + const openid = wx.getStorageSync('openid'); + if (!openid) { + console.log('用户未登录,显示授权弹窗'); + // 显示登录弹窗 + this.setData({ + showAuthModal: true + }); + return; // 取消撤回申请 + } + wx.showModal({ title: '确认撤回', content: '确定要撤回备案申请吗?撤回后可以重新提交。', success: async (res) => { if (res.confirm) { try { - // 获取用户的openid - const openid = wx.getStorageSync('openid'); - console.log('准备撤回申请,openid:', openid); - - if (!openid) { - wx.showToast({ - title: '请先登录', - icon: 'none' - }); - return; - } + console.log('使用已登录用户openid撤回申请:', openid); // 调用API撤回申请,不再需要applicationId,只需要用户openid const API = require('../../utils/api.js'); @@ -1022,15 +1019,49 @@ Page({ // 审核中我知道了 knowAudit() { - // 直接返回首页,不显示提示 - wx.reLaunch({ - url: '/pages/index/index' + // 获取用户openid + const openid = wx.getStorageSync('openid'); + console.log('使用openid获取用户数据:', openid); + + // 调用API获取用户完整数据 + API.getUserInfo(openid).then(res => { + console.log('用户完整数据:', res.data); + + // 更新本地状态 + if (res.data && res.data.partnerstatus) { + wx.setStorageSync('settlementStatus', res.data.partnerstatus); + this.setData({ + partnerstatus: res.data.partnerstatus + }); + } + + // 跳转到seller页面,不显示提示 + wx.reLaunch({ + url: '/pages/seller/index' + }); + }).catch(err => { + console.error('获取用户数据失败:', err); + // 即使获取失败也跳转到seller页面 + wx.reLaunch({ + url: '/pages/seller/index' + }); }); }, // 重新提交备案 async resubmitApplication() { try { + // 检查用户是否已登录 + const openid = wx.getStorageSync('openid'); + if (!openid) { + console.log('用户未登录,显示授权弹窗'); + // 显示登录弹窗 + this.setData({ + showAuthModal: true + }); + return; // 取消重新提交申请 + } + const API = require('../../utils/api.js'); const applicationId = wx.getStorageSync('applicationId'); @@ -1055,7 +1086,9 @@ Page({ // 更新本地状态 wx.setStorageSync('settlementStatus', 'underreview'); + // 确保页面显示审核状态页面 this.setData({ + currentStep: 3, // 确保显示审核状态页面 partnerstatus: 'underreview' // 使用数据库字段名 (原auditStatus) }); @@ -1089,9 +1122,11 @@ Page({ icon: 'success' }); - // 延迟返回上一页 + // 延迟跳转到seller页面 setTimeout(() => { - wx.navigateBack(); + wx.reLaunch({ + url: '/pages/seller/index' + }); }, 1500); }, @@ -1127,35 +1162,39 @@ Page({ // 从服务器同步入驻状态 async syncSettlementStatus() { try { - const userId = wx.getStorageSync('userId'); - - if (!userId) { - console.log('用户未登录,跳过状态同步'); + // 获取用户openid + const openid = wx.getStorageSync('openid'); + if (!openid) { + console.log('未登录,无法同步入驻状态'); return; } + + console.log('使用openid同步状态:', openid); - const API = require('../../utils/api.js'); - const result = await API.getSettlementStatus(userId); + const result = await API.getUserInfo(openid); if (result && result.success && result.data) { - const serverData = result.data; + const userData = result.data; // 更新本地状态 wx.setStorageSync('hasSubmittedSettlement', true); // 只有在有实际状态值时才设置,避免空值时默认为审核中 - wx.setStorageSync('settlementStatus', serverData.partnerstatus || ''); - - if (serverData.id) { - wx.setStorageSync('applicationId', serverData.id); - } + wx.setStorageSync('settlementStatus', userData.partnerstatus || ''); // 更新页面状态 this.setData({ - partnerstatus: serverData.partnerstatus || '', // 使用数据库字段名 (原auditStatus),不设置默认值 - applicationId: serverData.id + partnerstatus: userData.partnerstatus || '', // 使用数据库字段名,不设置默认值 }); - console.log('已同步服务器入驻状态:', serverData.partnerstatus); + console.log('已同步服务器入驻状态:', userData.partnerstatus); + + // 根据partnerstatus更新页面步骤 + if (userData.partnerstatus === 'approved') { + this.setData({ + showGuidePage: false, + currentStep: 3 + }); + } } } catch (error) { console.error('同步入驻状态失败:', error); diff --git a/pages/settlement/index.wxml b/pages/settlement/index.wxml index d4de856..16e5bdb 100644 --- a/pages/settlement/index.wxml +++ b/pages/settlement/index.wxml @@ -1,17 +1,4 @@ - - - - - 已入住供应商 - - 四川又鸟蛋 - 蛋小满贸易 - ... - - 我们等待您的加入! - - diff --git a/pages/settlement/index.wxss b/pages/settlement/index.wxss index 7877adb..2eae155 100644 --- a/pages/settlement/index.wxss +++ b/pages/settlement/index.wxss @@ -1694,58 +1694,4 @@ picker { color: #999; margin-top: 24rpx; line-height: 1.4; -} - -/* 供应商展示区域样式 */ -.supplier-showcase { - background-color: #fff; - border-radius: 12rpx; - margin: 20rpx; - padding: 30rpx; - box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05); - display: flex; - flex-direction: column; - align-items: center; -} - -.supplier-image { - width: 600rpx; - height: 300rpx; - margin-bottom: 20rpx; - border-radius: 8rpx; -} - -.supplier-text { - text-align: center; - width: 100%; -} - -.supplier-title { - font-size: 32rpx; - font-weight: bold; - color: #333; - margin-bottom: 20rpx; -} - -.supplier-list { - display: flex; - justify-content: center; - flex-wrap: wrap; - margin-bottom: 20rpx; -} - -.supplier-item { - font-size: 28rpx; - color: #666; - margin: 0 20rpx 10rpx 0; - padding: 8rpx 20rpx; - background-color: #f0f0f0; - border-radius: 20rpx; -} - -.supplier-invite { - font-size: 30rpx; - color: #ff6b35; - font-weight: bold; - margin-top: 10rpx; } \ No newline at end of file