Browse Source

更新代码,修复提交申请后跳转到审核状态页面的功能

pull/1/head
徐飞洋 3 months ago
parent
commit
68d1d635a2
  1. 49
      custom-tab-bar/index.js
  2. BIN
      images/你有好蛋.png
  3. 307
      package-lock.json
  4. 3
      package.json
  5. 62
      pages/index/index.js
  6. 54
      pages/profile/index.js
  7. 65
      pages/publish/index.js
  8. 594
      pages/seller/index.js
  9. 25
      pages/seller/index.wxml
  10. 34
      pages/seller/index.wxss
  11. 179
      pages/settlement/index.js
  12. 13
      pages/settlement/index.wxml
  13. 54
      pages/settlement/index.wxss

49
custom-tab-bar/index.js

@ -79,53 +79,8 @@ Component({
} }
} }
// 特殊处理:点击货源页面时检查登录状态和入驻状态 // 无论是否登录,直接跳转到对应页面
if (key === 'seller' && url === 'pages/seller/index') { this.navigateToTabPage(url)
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)
}
} catch (e) { } catch (e) {
console.error('switchTab方法执行错误:', e) console.error('switchTab方法执行错误:', e)
} }

BIN
images/你有好蛋.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

307
package-lock.json

@ -13,9 +13,40 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"express": "^5.1.0", "express": "^5.1.0",
"form-data": "^4.0.4", "form-data": "^4.0.4",
"mysql2": "^3.15.2" "mysql2": "^3.15.3",
"sequelize": "^6.37.7"
} }
}, },
"node_modules/@types/debug": {
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
"integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
"license": "MIT",
"dependencies": {
"@types/ms": "*"
}
},
"node_modules/@types/ms": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
"license": "MIT"
},
"node_modules/@types/node": {
"version": "24.10.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
"license": "MIT",
"dependencies": {
"undici-types": "~7.16.0"
}
},
"node_modules/@types/validator": {
"version": "13.15.10",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz",
"integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==",
"license": "MIT"
},
"node_modules/accepts": { "node_modules/accepts": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
@ -77,35 +108,27 @@
} }
}, },
"node_modules/body-parser": { "node_modules/body-parser": {
"version": "2.2.0", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz",
"integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bytes": "^3.1.2", "bytes": "^3.1.2",
"content-type": "^1.0.5", "content-type": "^1.0.5",
"debug": "^4.4.0", "debug": "^4.4.3",
"http-errors": "^2.0.0", "http-errors": "^2.0.0",
"iconv-lite": "^0.6.3", "iconv-lite": "^0.7.0",
"on-finished": "^2.4.1", "on-finished": "^2.4.1",
"qs": "^6.14.0", "qs": "^6.14.0",
"raw-body": "^3.0.0", "raw-body": "^3.0.1",
"type-is": "^2.0.0" "type-is": "^2.0.1"
}, },
"engines": { "engines": {
"node": ">=18" "node": ">=18"
}
},
"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": { "funding": {
"node": ">=0.10.0" "type": "opencollective",
"url": "https://opencollective.com/express"
} }
}, },
"node_modules/bytes": { "node_modules/bytes": {
@ -254,6 +277,12 @@
"node": ">= 0.8" "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": { "node_modules/dunder-proto": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@ -344,18 +373,19 @@
} }
}, },
"node_modules/express": { "node_modules/express": {
"version": "5.1.0", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
"integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"accepts": "^2.0.0", "accepts": "^2.0.0",
"body-parser": "^2.2.0", "body-parser": "^2.2.1",
"content-disposition": "^1.0.0", "content-disposition": "^1.0.0",
"content-type": "^1.0.5", "content-type": "^1.0.5",
"cookie": "^0.7.1", "cookie": "^0.7.1",
"cookie-signature": "^1.2.1", "cookie-signature": "^1.2.1",
"debug": "^4.4.0", "debug": "^4.4.0",
"depd": "^2.0.0",
"encodeurl": "^2.0.0", "encodeurl": "^2.0.0",
"escape-html": "^1.0.3", "escape-html": "^1.0.3",
"etag": "^1.8.1", "etag": "^1.8.1",
@ -584,28 +614,23 @@
} }
}, },
"node_modules/http-errors": { "node_modules/http-errors": {
"version": "2.0.0", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"depd": "2.0.0", "depd": "~2.0.0",
"inherits": "2.0.4", "inherits": "~2.0.4",
"setprototypeof": "1.2.0", "setprototypeof": "~1.2.0",
"statuses": "2.0.1", "statuses": "~2.0.2",
"toidentifier": "1.0.1" "toidentifier": "~1.0.1"
}, },
"engines": { "engines": {
"node": ">= 0.8" "node": ">= 0.8"
} },
}, "funding": {
"node_modules/http-errors/node_modules/statuses": { "type": "opencollective",
"version": "2.0.1", "url": "https://opencollective.com/express"
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
} }
}, },
"node_modules/iconv-lite": { "node_modules/iconv-lite": {
@ -624,6 +649,15 @@
"url": "https://opencollective.com/express" "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": { "node_modules/inherits": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@ -651,6 +685,12 @@
"integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
"license": "MIT" "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": { "node_modules/long": {
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
@ -732,6 +772,27 @@
"node": ">= 0.6" "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": { "node_modules/ms": {
"version": "2.1.3", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@ -739,9 +800,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/mysql2": { "node_modules/mysql2": {
"version": "3.15.2", "version": "3.15.3",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.2.tgz", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz",
"integrity": "sha512-kFm5+jbwR5mC+lo+3Cy46eHiykWSpUtTLOH3GE+AR7GeLq8PgfJcvpMiyVWk9/O53DjQsqm6a3VOOfq7gYWFRg==", "integrity": "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"aws-ssl-profiles": "^1.1.1", "aws-ssl-profiles": "^1.1.1",
@ -840,6 +901,12 @@
"url": "https://opencollective.com/express" "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": { "node_modules/proxy-addr": {
"version": "2.0.7", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@ -884,20 +951,26 @@
} }
}, },
"node_modules/raw-body": { "node_modules/raw-body": {
"version": "3.0.1", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
"integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bytes": "3.1.2", "bytes": "~3.1.2",
"http-errors": "2.0.0", "http-errors": "~2.0.1",
"iconv-lite": "0.7.0", "iconv-lite": "~0.7.0",
"unpipe": "1.0.0" "unpipe": "~1.0.0"
}, },
"engines": { "engines": {
"node": ">= 0.10" "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": { "node_modules/router": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
@ -940,6 +1013,18 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT" "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": { "node_modules/send": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", "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", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" "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": { "node_modules/serve-static": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz",
@ -1108,6 +1264,12 @@
"node": ">=0.6" "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": { "node_modules/type-is": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", "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": { "node_modules/type-is/node_modules/mime-types": {
"version": "3.0.1", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
"integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"mime-db": "^1.54.0" "mime-db": "^1.54.0"
}, },
"engines": { "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": { "node_modules/unpipe": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@ -1152,6 +1324,24 @@
"node": ">= 0.8" "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": { "node_modules/vary": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@ -1161,6 +1351,15 @@
"node": ">= 0.8" "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": { "node_modules/wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",

3
package.json

@ -16,6 +16,7 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"express": "^5.1.0", "express": "^5.1.0",
"form-data": "^4.0.4", "form-data": "^4.0.4",
"mysql2": "^3.15.2" "mysql2": "^3.15.3",
"sequelize": "^6.37.7"
} }
} }

62
pages/index/index.js

@ -37,8 +37,8 @@ Page({
// 选择卖家身份 // 选择卖家身份
async chooseSeller() { async chooseSeller() {
// 先检查是否登录 this.finishSetUserType('seller');
this.checkLoginAndProceed('seller');
}, },
// 检查登录状态并继续操作 // 检查登录状态并继续操作
@ -69,6 +69,8 @@ Page({
// 处理卖家路由逻辑 // 处理卖家路由逻辑
async handleSellerRoute() { async handleSellerRoute() {
try { try {
wx.switchTab({ url: '/pages/seller/index' });
// 查询用户信息获取partnerstatus字段 // 查询用户信息获取partnerstatus字段
const userInfo = await API.getUserInfo(); const userInfo = await API.getUserInfo();
@ -78,23 +80,15 @@ Page({
console.log('获取到的partnerstatus:', userInfo.data.partnerstatus); 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) { } catch (error) {
console.error('获取用户信息失败:', error); console.error('获取用户信息失败:', error);
// 出错时也进入settlement页面 // 出错时也直接进入seller/index页面
wx.navigateTo({ url: '/pages/settlement/index' }); wx.switchTab({ url: '/pages/seller/index' });
} }
}, },
@ -925,45 +919,15 @@ Page({
// 完成用户类型设置并跳转 // 完成用户类型设置并跳转
finishSetUserType(type) { 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' ? '买家页面' : '卖家页面') console.log('用户类型设置完成,准备跳转到', type === 'buyer' ? '买家页面' : '卖家页面')
// 添加小延迟确保所有异步操作都完成后再跳转 // 无论是否登录,直接跳转到对应页面
setTimeout(() => { setTimeout(() => {
// 跳转到对应页面
if (type === 'buyer') { if (type === 'buyer') {
wx.switchTab({ url: '/pages/buyer/index' }) wx.switchTab({ url: '/pages/buyer/index' })
} else { } else {
// 卖家身份需要处理partnerstatus逻辑,调用专门的方法 // 卖家身份直接跳转到卖家页面,不需要处理partnerstatus逻辑
this.handleSellerRoute() wx.switchTab({ url: '/pages/seller/index' })
} }
}, 500) }, 500)
}, },

54
pages/profile/index.js

@ -37,7 +37,7 @@ Page({
app.globalData.userInfo = localUserInfo app.globalData.userInfo = localUserInfo
this.setData({ this.setData({
userInfo: localUserInfo, userInfo: localUserInfo,
needPhoneAuth: !localUserInfo.phoneNumber || localUserInfo.phoneNumber === '13800138000' needPhoneAuth: !localUserInfo.phoneNumber
}) })
} }
@ -133,15 +133,6 @@ Page({
if (res.success && res.data) { if (res.success && res.data) {
const serverUserInfo = res.data const serverUserInfo = res.data
// 检查手机号是否是临时手机号
if (serverUserInfo.phoneNumber === '13800138000') {
console.warn('服务器返回的仍是临时手机号,用户可能需要重新授权手机号')
// 可以在这里显示提示,让用户重新授权手机号
this.setData({
needPhoneAuth: true
})
}
// 更新本地用户信息 // 更新本地用户信息
const app = getApp() const app = getApp()
const updatedUserInfo = { const updatedUserInfo = {
@ -164,14 +155,6 @@ Page({
if (res.success && res.data) { if (res.success && res.data) {
const serverUserInfo = res.data const serverUserInfo = res.data
// 检查手机号是否是临时手机号
if (serverUserInfo.phoneNumber === '13800138000') {
console.warn('服务器返回的仍是临时手机号,用户可能需要重新授权手机号')
this.setData({
needPhoneAuth: true
})
}
// 更新本地用户信息 // 更新本地用户信息
const app = getApp() const app = getApp()
const updatedUserInfo = { const updatedUserInfo = {
@ -413,15 +396,19 @@ Page({
const hasPhoneConflict = res.phoneNumberConflict || false const hasPhoneConflict = res.phoneNumberConflict || false
const isNewPhone = res.isNewPhone || true const isNewPhone = res.isNewPhone || true
const phoneNumber = res.phoneNumber || null 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 app = getApp()
const userInfo = app.globalData.userInfo || wx.getStorageSync('userInfo') || {} const userInfo = app.globalData.userInfo || wx.getStorageSync('userInfo') || {}
userInfo.phoneNumber = finalPhoneNumber userInfo.phoneNumber = phoneNumber
// 更新本地和全局用户信息 // 更新本地和全局用户信息
app.globalData.userInfo = userInfo app.globalData.userInfo = userInfo
@ -437,26 +424,16 @@ Page({
// 更新页面状态 // 更新页面状态
this.setData({ this.setData({
needPhoneAuth: finalPhoneNumber === '13800138000' needPhoneAuth: false
}) })
// 重新加载用户信息以更新UI // 重新加载用户信息以更新UI
this.loadUserInfo() this.loadUserInfo()
}
// 根据服务器返回的结果显示不同的提示
if (hasPhoneConflict) {
wx.showToast({ wx.showToast({
title: '获取成功,但手机号已被其他账号绑定', title: '手机号绑定成功',
icon: 'none', icon: 'success'
duration: 3000 })
})
} else {
wx.showToast({
title: '手机号绑定成功',
icon: 'success'
})
}
} else { } else {
console.error('获取手机号失败:', res) console.error('获取手机号失败:', res)
wx.showToast({ wx.showToast({
@ -464,7 +441,8 @@ Page({
icon: 'none' icon: 'none'
}) })
} }
}) }
})
.catch(err => { .catch(err => {
wx.hideLoading() wx.hideLoading()
console.error('获取手机号失败:', err) console.error('获取手机号失败:', err)

65
pages/publish/index.js

@ -143,27 +143,7 @@ Page({
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { 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() { onPublishTap() {
console.log('发布按钮点击'); 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()) { if (!this.validateForm()) {
console.log('表单验证失败'); console.log('表单验证失败');
return; return;
@ -333,6 +290,8 @@ Page({
// 【终极修复】使用全局上传管理器处理上传,完全脱离页面生命周期 // 【终极修复】使用全局上传管理器处理上传,完全脱离页面生命周期
// 将所有数据存储到全局对象中,防止被回收 // 将所有数据存储到全局对象中,防止被回收
console.log('【上传前检查】存储数据到全局对象'); console.log('【上传前检查】存储数据到全局对象');
// 从本地存储获取userId,如果不存在则使用默认值
const userId = wx.getStorageSync('userId') || 'anonymous';
global.tempUploadData = { global.tempUploadData = {
formData: formDataCopy, formData: formDataCopy,
images: imagesCopy, images: imagesCopy,
@ -519,22 +478,8 @@ Page({
setTimeout(() => { setTimeout(() => {
wx.hideLoading(); wx.hideLoading();
if (err.needRelogin) { // 直接显示错误提示,不进行登录验证
wx.showModal({ wx.showToast({ title: err.message || '发布失败,请重试', icon: 'none' });
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' });
}
// 清理全局临时数据 // 清理全局临时数据
if (global.tempUploadData) { if (global.tempUploadData) {

594
pages/seller/index.js

@ -122,15 +122,14 @@ Page({
showAuthModal: false, // 控制未授权提示弹窗显示 showAuthModal: false, // 控制未授权提示弹窗显示
showOneKeyLoginModal: false, // 控制一键登录弹窗显示 showOneKeyLoginModal: false, // 控制一键登录弹窗显示
pendingUserType: 'seller', // 记录用户即将选择的身份类型 pendingUserType: 'seller', // 记录用户即将选择的身份类型
avatarUrl: '/images/default-avatar.png' // 默认头像 avatarUrl: '/images/default-avatar.png', // 默认头像
partnerstatus: '' // 用户入驻状态,用于显示入驻/未入驻
}, },
onLoad() { onLoad() {
console.log('卖家页面onLoad开始执行'); console.log('卖家页面onLoad开始执行');
// 移除强制登录检查,允许用户浏览货源页面 // 移除强制登录检查,允许用户浏览货源页面
// 只有在创建新货源时才检查登录状态
this.loadSupplies(); this.loadSupplies();
// 初始化规格搜索相关数据 // 初始化规格搜索相关数据
this.setData({ this.setData({
specSearchKeyword: '', specSearchKeyword: '',
@ -138,7 +137,6 @@ Page({
filteredSpecOptions: this.data.specOptions, filteredSpecOptions: this.data.specOptions,
filteredEditSpecOptions: this.data.specOptions filteredEditSpecOptions: this.data.specOptions
}); });
console.log('卖家页面onLoad执行完毕'); console.log('卖家页面onLoad执行完毕');
}, },
@ -315,6 +313,8 @@ Page({
onShow() { onShow() {
console.log('seller页面onShow开始加载') console.log('seller页面onShow开始加载')
// 获取用户入驻状态
this.getUserStatus();
// 检查页面是否是初次加载(onLoad已调用loadSupplies) // 检查页面是否是初次加载(onLoad已调用loadSupplies)
// 避免在页面初次加载时重复加载数据 // 避免在页面初次加载时重复加载数据
if (!this.data._hasLoadedOnShow) { if (!this.data._hasLoadedOnShow) {
@ -342,6 +342,26 @@ Page({
app.updateCurrentTab('seller'); 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() { loadSupplies() {
console.log('开始加载货源数据 - 分页模式'); console.log('开始加载货源数据 - 分页模式');
@ -1189,26 +1209,12 @@ Page({
showAddSupply(e) { showAddSupply(e) {
console.log('点击创建新货源按钮'); 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) { if (e && e.stopPropagation) {
e.stopPropagation(); e.stopPropagation();
} }
// 已登录,继续原有逻辑 // 直接显示创建货源弹窗,无需登录验证
this.setData({ this.setData({
showImagePreview: false, showImagePreview: false,
showModal: true, showModal: true,
@ -1336,6 +1342,32 @@ Page({
}, },
// 添加新货源 - 先创建商品再上传图片(修复版) // 添加新货源 - 先创建商品再上传图片(修复版)
addSupply() { 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 const { name, price, minOrder, yolk, spec, region, imageUrls } = this.data.newSupply
if (!name || !price || !minOrder || !yolk) { if (!name || !price || !minOrder || !yolk) {
wx.showToast({ title: '请填写完整信息', icon: 'none', duration: 2000 }) wx.showToast({ title: '请填写完整信息', icon: 'none', duration: 2000 })
@ -1343,53 +1375,44 @@ Page({
} }
// 显示加载中提示 // 显示加载中提示
wx.showLoading({ title: '正在创建商品...', mask: true }) wx.showLoading({ title: '正在验证权限...', mask: true })
const openid = wx.getStorageSync('openid') // 检查用户的partnerstatus是否为approved
console.log('当前用户openid:', openid) API.getUserInfo(openid)
// 检查openid是否存在 .then(response => {
if (!openid) { const userInfoRes = response.data;
console.error('openid不存在,无法上传商品到服务器') console.log('获取用户信息成功:', userInfoRes)
wx.hideLoading()
wx.showModal({ // 检查partnerstatus字段
title: '登录状态异常', const partnerStatus = userInfoRes.partnerstatus || 'pending'
content: '您的登录状态已失效,请重新登录后再尝试发布商品', console.log('用户合作状态:', partnerStatus)
showCancel: false,
success: () => { if (partnerStatus !== 'approved') {
wx.showToast({ throw new Error('partnerstatus_not_approved')
title: '创建失败,请先登录', }
icon: 'none',
duration: 3000 // 第一步:先创建商品(不带图片)
}) 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创建商品(不带图片)
API.publishProduct(productData) return API.publishProduct(productData)
})
.then(res => { .then(res => {
console.log('商品创建成功:', res) console.log('商品创建成功:', res)
@ -1439,39 +1462,30 @@ Page({
console.error('商品创建或图片上传失败:', err) console.error('商品创建或图片上传失败:', err)
wx.hideLoading() wx.hideLoading()
// 错误处理 // 处理权限不足的情况
if (err.needRelogin) { if (err.message === 'partnerstatus_not_approved') {
console.warn('检测到需要重新登录')
wx.showModal({ wx.showModal({
title: '登录状态失效', title: '权限不足',
content: '您的登录已过期,请重新授权登录', content: '您的合作伙伴身份尚未通过审核,请等待审核通过后再发布商品',
showCancel: false, showCancel: false,
success: (res) => { confirmText: '确定'
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()
}
}) })
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; 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 = { const productData = {
productName: editSupply.name, productName: editSupply.name,
@ -1750,6 +1795,7 @@ Page({
} }
}); });
} }
});
}, },
// 预览图片 // 预览图片
@ -2144,165 +2190,209 @@ Page({
showImagePreview: false showImagePreview: false
}); });
const id = e.currentTarget.dataset.id // 登录验证
// 优先使用编辑中的商品数据 const userId = wx.getStorageSync('userId');
let supply = null const openid = wx.getStorageSync('openid');
const userInfo = wx.getStorageSync('userInfo');
// 检查是否存在编辑中的数据
if (this.data.editSupply && this.data.editSupply.id === id) { if (!userId || !openid || !userInfo) {
supply = { ...this.data.editSupply }; wx.showModal({
} else { title: '提示',
// 否则从supplies中查找 content: '请先登录再进行商品上架操作',
supply = this.data.supplies.find(s => s.id === id) showCancel: false,
} success: (res) => {
if (res.confirm) {
if (!supply) { this.setData({ showAuthModal: true });
wx.hideLoading(); }
// 恢复页面滚动 }
this.enablePageScroll();
wx.showToast({
title: '操作失败,货源不存在',
icon: 'none',
duration: 2000
}); });
return; 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 }); if (!supply) {
wx.hideLoading();
// 判断当前货源状态,决定设置什么状态 this.enablePageScroll();
// 重新提交的商品应该先进入审核中 wx.showToast({
let newStatus = 'pending_review'; // 默认审核中 title: '货源信息不存在',
if (supply.status === 'reviewed') { icon: 'none',
newStatus = 'published'; // 已审核通过的货源可以直接上架 duration: 2000
} });
return;
}
wx.showLoading({ title: '处理中...', mask: true });
// 判断当前货源状态,决定设置什么状态
// 重新提交的商品应该先进入审核中
let newStatus = 'pending_review'; // 默认审核中
if (supply.status === 'reviewed') {
newStatus = 'published'; // 已审核通过的货源可以直接上架
}
// 同步数据到服务器数据库 // 同步数据到服务器数据库
// 仅当有serverProductId时才同步到服务器 // 仅当有serverProductId时才同步到服务器
if (supply.serverProductId) { if (supply.serverProductId) {
const openid = wx.getStorageSync('openid'); const openid = wx.getStorageSync('openid');
if (openid) { if (openid) {
// 审核失败、隐藏、审核中或下架的货源重新提交时,调用编辑接口同步商品内容和状态 // 审核失败、隐藏、审核中或下架的货源重新提交时,调用编辑接口同步商品内容和状态
if (supply.status === 'rejected' || supply.status === 'hidden' || supply.status === 'pending_review' || supply.status === 'sold_out') { if (supply.status === 'rejected' || supply.status === 'hidden' || supply.status === 'pending_review' || supply.status === 'sold_out') {
console.log('审核失败、隐藏、审核中或下架货源重新提交,同步商品内容和状态到服务器'); console.log('审核失败、隐藏、审核中或下架货源重新提交,同步商品内容和状态到服务器');
// 准备商品数据,转换为服务器需要的格式 // 准备商品数据,转换为服务器需要的格式
const productData = { const productData = {
openid: openid, openid: openid,
productId: supply.serverProductId, productId: supply.serverProductId,
product: { product: {
productName: supply.name, productName: supply.name,
price: supply.price, price: supply.price,
quantity: supply.minOrder, quantity: supply.minOrder,
grossWeight: supply.grossWeight || "", grossWeight: supply.grossWeight || "",
yolk: supply.yolk, yolk: supply.yolk,
specification: supply.spec, specification: supply.spec,
resubmit: true // 关键参数:告诉服务器这是重新提交审核 resubmit: true // 关键参数:告诉服务器这是重新提交审核
}, },
status: newStatus // 明确传递状态参数,确保变为审核中状态 status: newStatus // 明确传递状态参数,确保变为审核中状态
}; };
console.log('准备发送商品编辑请求 - URL:', API.BASE_URL + '/api/product/edit'); console.log('准备发送商品编辑请求 - URL:', API.BASE_URL + '/api/product/edit');
console.log('准备发送的商品数据:', productData); console.log('准备发送的商品数据:', productData);
// 调用编辑商品接口,该接口会自动设置状态为pending_review // 调用编辑商品接口,该接口会自动设置状态为pending_review
wx.request({ wx.request({
url: API.BASE_URL + '/api/product/edit', url: API.BASE_URL + '/api/product/edit',
method: 'POST', method: 'POST',
data: productData, data: productData,
success: (res) => { success: (res) => {
console.log('商品内容和状态同步成功:', res); console.log('商品内容和状态同步成功:', res);
// 重新加载数据以更新UI // 重新加载数据以更新UI
this.loadSupplies(); this.loadSupplies();
}, },
fail: (err) => { fail: (err) => {
console.error('商品内容和状态同步失败:', err); console.error('商品内容和状态同步失败:', err);
// 重新加载数据以更新UI // 重新加载数据以更新UI
this.loadSupplies(); this.loadSupplies();
}, },
complete: () => { complete: () => {
// 确保在请求完成后隐藏loading并显示提示 // 确保在请求完成后隐藏loading并显示提示
try { try {
wx.hideLoading(); wx.hideLoading();
// 恢复页面滚动 // 恢复页面滚动
this.enablePageScroll(); this.enablePageScroll();
wx.showToast({ wx.showToast({
title: newStatus === 'published' ? '上架成功' : '重新提交成功,等待审核', title: newStatus === 'published' ? '上架成功' : '重新提交成功,等待审核',
duration: 2000 duration: 2000
}); });
} catch (e) { } catch (e) {
console.error('显示提示时出错:', e); console.error('显示提示时出错:', e);
// 确保即使在错误情况下也隐藏loading并恢复滚动 // 确保即使在错误情况下也隐藏loading并恢复滚动
try { try {
wx.hideLoading(); wx.hideLoading();
this.enablePageScroll(); this.enablePageScroll();
} catch (innerErr) { } catch (innerErr) {
console.error('隐藏loading时出错:', innerErr); console.error('隐藏loading时出错:', innerErr);
}
}
} }
} });
} return; // 异步操作,稍后再继续执行
}); } else {
return; // 异步操作,稍后再继续执行 // 其他情况只更新状态
} else { wx.request({
// 其他情况只更新状态 url: API.BASE_URL + '/api/product/review',
wx.request({ method: 'POST',
url: API.BASE_URL + '/api/product/review', data: {
method: 'POST', openid: openid,
data: { productId: supply.serverProductId,
openid: openid, status: newStatus
productId: supply.serverProductId, },
status: newStatus success: () => {
}, this.loadSupplies();
success: () => { },
this.loadSupplies(); fail: (err) => {
}, console.error('更新状态失败:', err);
fail: (err) => { this.loadSupplies();
console.error('更新状态失败:', err); },
this.loadSupplies(); complete: () => {
}, try {
complete: () => { wx.hideLoading();
try { // 恢复页面滚动
wx.hideLoading(); this.enablePageScroll();
// 恢复页面滚动 wx.showToast({
this.enablePageScroll(); title: newStatus === 'published' ? '上架成功' : '重新提交成功,等待审核',
wx.showToast({ duration: 2000
title: newStatus === 'published' ? '上架成功' : '重新提交成功,等待审核', });
duration: 2000 } catch (e) {
}); console.error('显示提示时出错:', e);
} catch (e) { // 确保即使在错误情况下也隐藏loading并恢复滚动
console.error('显示提示时出错:', e); try {
// 确保即使在错误情况下也隐藏loading并恢复滚动 wx.hideLoading();
try { this.enablePageScroll();
wx.hideLoading(); } catch (innerErr) {
this.enablePageScroll(); console.error('隐藏loading时出错:', innerErr);
} 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(); wx.hideLoading();
// 恢复页面滚动
this.enablePageScroll(); this.enablePageScroll();
wx.showToast({ wx.showToast({
title: '登录状态异常,请重新登录', title: '获取用户信息失败',
icon: 'none', icon: 'none',
duration: 2000 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'
});
}
} }
}) })

25
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;" style="align-items: flex-start; padding: 20rpx; width: 100%; max-width: 100vw; overflow-x: hidden; position: relative; box-sizing: border-box;"
catchtouchmove="{{touchMoveBlocked ? 'preventTouchMove' : ''}}"> catchtouchmove="{{touchMoveBlocked ? 'preventTouchMove' : ''}}">
<view style="display: flex; justify-content: space-between; align-items: center; width: 90%; margin-bottom: 20rpx;"> <view style="display: flex; justify-content: space-between; align-items: center; width: 90%; margin-bottom: 20rpx;">
<view class="title">我的鸡蛋货源</view> <view class="title">我的货源</view>
<button <view style="display: flex; align-items: center; gap: 10rpx;">
bindtap="contactCustomerService" <button
class="customer-service-btn" bindtap="contactCustomerService"
> class="customer-service-btn"
联系客服 >
</button> 联系客服
</button>
<view style="color: {{partnerstatus === 'approved' ? '#52c41a' : '#f5222d'}}; font-size: 24rpx;">
{{partnerstatus === 'approved' ? '已入驻' : '未入驻'}}
</view>
<button
bindtap="applyForSettlement"
class="apply-settlement-btn"
>
{{partnerstatus === 'approved' ? '已入驻' : '入驻'}}
</button>
</view>
</view> </view>
<!-- 搜索框 --> <!-- 搜索框 -->

34
pages/seller/index.wxss

@ -69,6 +69,40 @@
0 1rpx 0 rgba(255, 255, 255, 0.3) inset; 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 { .auth-modal-overlay {
position: fixed; position: fixed;

179
pages/settlement/index.js

@ -1,4 +1,5 @@
// pages/settlement/settlement.js // pages/settlement/settlement.js
const API = require('../../utils/api.js');
Page({ Page({
data: { data: {
// 是否显示引导页 // 是否显示引导页
@ -56,6 +57,8 @@ Page({
currentStep: 3, currentStep: 3,
partnerstatus: options.status partnerstatus: options.status
}); });
// 同步服务器状态,确保显示最新状态
this.syncSettlementStatus();
return; // 直接返回,不执行后续逻辑 return; // 直接返回,不执行后续逻辑
} }
} }
@ -90,6 +93,9 @@ Page({
} }
}, 500); }, 500);
} }
// 同步服务器状态,确保显示最新的partnerstatus
this.syncSettlementStatus();
}, },
onUnload() { onUnload() {
@ -99,6 +105,7 @@ Page({
} }
}, },
// 加载入驻进度 // 加载入驻进度
loadSettlementProgress() { loadSettlementProgress() {
const settlementData = wx.getStorageSync('settlement_data'); const settlementData = wx.getStorageSync('settlement_data');
@ -172,23 +179,8 @@ Page({
console.log('开始入驻流程'); console.log('开始入驻流程');
try { 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(); await this.syncSettlementStatus();
// 根据入驻状态处理 // 根据入驻状态处理
@ -504,13 +496,20 @@ Page({
// 检查用户是否已登录 // 检查用户是否已登录
const openid = wx.getStorageSync('openid'); const openid = wx.getStorageSync('openid');
const userId = wx.getStorageSync('userId'); const userId = wx.getStorageSync('userId');
console.log('检查用户登录状态,openid:', openid);
if (!openid) { // 如果未登录,显示登录弹窗
console.log('用户未登录,调用首页授权登录'); if (!openid || !userId) {
this.goToAuthLogin(); console.log('用户未登录,显示授权弹窗');
return; // 保存当前表单数据
this.saveSettlementProgress();
// 显示登录弹窗
this.setData({
showAuthModal: true
});
return; // 取消提交申请
} }
console.log('使用已登录用户信息提交申请:', openid, userId);
// 先上传所有文件 // 先上传所有文件
wx.showLoading({ wx.showLoading({
@ -662,18 +661,10 @@ Page({
return; return;
} }
// 手机号为空时使用默认值,不再强制要求
if (!contactPhone) { if (!contactPhone) {
wx.showToast({ contactPhone = 'default_phone';
title: '请先完成手机号授权', console.log('使用默认手机号:', contactPhone);
icon: 'none'
});
// 显示授权弹窗
this.setData({
showAuthModal: true,
loginModalTitle: '请完成手机号授权',
loginModalContent: '入驻申请需要您的手机号信息,请完成授权'
});
return;
} }
// 验证省市区字段是否填写完整(用于构建region字段) // 验证省市区字段是否填写完整(用于构建region字段)
@ -747,20 +738,25 @@ Page({
wx.setStorageSync('applicationId', appId); wx.setStorageSync('applicationId', appId);
} }
this.setData({
partnerstatus: 'underreview', // 使用数据库字段名 (原auditStatus)
applicationId: appId
});
wx.showToast({ wx.showToast({
title: '提交成功,等待审核', title: '提交成功,等待审核',
icon: 'none', icon: 'none',
duration: 2000 duration: 2000
}); });
// 跳转到审核状态页面 // 跳转到审核状态页面 - 立即执行
this.setData({ 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() { async withdrawApplication() {
// 检查用户是否已登录
const openid = wx.getStorageSync('openid');
if (!openid) {
console.log('用户未登录,显示授权弹窗');
// 显示登录弹窗
this.setData({
showAuthModal: true
});
return; // 取消撤回申请
}
wx.showModal({ wx.showModal({
title: '确认撤回', title: '确认撤回',
content: '确定要撤回备案申请吗?撤回后可以重新提交。', content: '确定要撤回备案申请吗?撤回后可以重新提交。',
success: async (res) => { success: async (res) => {
if (res.confirm) { if (res.confirm) {
try { try {
// 获取用户的openid console.log('使用已登录用户openid撤回申请:', openid);
const openid = wx.getStorageSync('openid');
console.log('准备撤回申请,openid:', openid);
if (!openid) {
wx.showToast({
title: '请先登录',
icon: 'none'
});
return;
}
// 调用API撤回申请,不再需要applicationId,只需要用户openid // 调用API撤回申请,不再需要applicationId,只需要用户openid
const API = require('../../utils/api.js'); const API = require('../../utils/api.js');
@ -1022,15 +1019,49 @@ Page({
// 审核中我知道了 // 审核中我知道了
knowAudit() { knowAudit() {
// 直接返回首页,不显示提示 // 获取用户openid
wx.reLaunch({ const openid = wx.getStorageSync('openid');
url: '/pages/index/index' 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() { async resubmitApplication() {
try { try {
// 检查用户是否已登录
const openid = wx.getStorageSync('openid');
if (!openid) {
console.log('用户未登录,显示授权弹窗');
// 显示登录弹窗
this.setData({
showAuthModal: true
});
return; // 取消重新提交申请
}
const API = require('../../utils/api.js'); const API = require('../../utils/api.js');
const applicationId = wx.getStorageSync('applicationId'); const applicationId = wx.getStorageSync('applicationId');
@ -1055,7 +1086,9 @@ Page({
// 更新本地状态 // 更新本地状态
wx.setStorageSync('settlementStatus', 'underreview'); wx.setStorageSync('settlementStatus', 'underreview');
// 确保页面显示审核状态页面
this.setData({ this.setData({
currentStep: 3, // 确保显示审核状态页面
partnerstatus: 'underreview' // 使用数据库字段名 (原auditStatus) partnerstatus: 'underreview' // 使用数据库字段名 (原auditStatus)
}); });
@ -1089,9 +1122,11 @@ Page({
icon: 'success' icon: 'success'
}); });
// 延迟返回上一页 // 延迟跳转到seller页面
setTimeout(() => { setTimeout(() => {
wx.navigateBack(); wx.reLaunch({
url: '/pages/seller/index'
});
}, 1500); }, 1500);
}, },
@ -1127,35 +1162,39 @@ Page({
// 从服务器同步入驻状态 // 从服务器同步入驻状态
async syncSettlementStatus() { async syncSettlementStatus() {
try { try {
const userId = wx.getStorageSync('userId'); // 获取用户openid
const openid = wx.getStorageSync('openid');
if (!userId) { if (!openid) {
console.log('用户未登录,跳过状态同步'); console.log('未登录,无法同步入驻状态');
return; return;
} }
console.log('使用openid同步状态:', openid);
const API = require('../../utils/api.js'); const result = await API.getUserInfo(openid);
const result = await API.getSettlementStatus(userId);
if (result && result.success && result.data) { if (result && result.success && result.data) {
const serverData = result.data; const userData = result.data;
// 更新本地状态 // 更新本地状态
wx.setStorageSync('hasSubmittedSettlement', true); wx.setStorageSync('hasSubmittedSettlement', true);
// 只有在有实际状态值时才设置,避免空值时默认为审核中 // 只有在有实际状态值时才设置,避免空值时默认为审核中
wx.setStorageSync('settlementStatus', serverData.partnerstatus || ''); wx.setStorageSync('settlementStatus', userData.partnerstatus || '');
if (serverData.id) {
wx.setStorageSync('applicationId', serverData.id);
}
// 更新页面状态 // 更新页面状态
this.setData({ this.setData({
partnerstatus: serverData.partnerstatus || '', // 使用数据库字段名 (原auditStatus),不设置默认值 partnerstatus: userData.partnerstatus || '', // 使用数据库字段名,不设置默认值
applicationId: serverData.id
}); });
console.log('已同步服务器入驻状态:', serverData.partnerstatus); console.log('已同步服务器入驻状态:', userData.partnerstatus);
// 根据partnerstatus更新页面步骤
if (userData.partnerstatus === 'approved') {
this.setData({
showGuidePage: false,
currentStep: 3
});
}
} }
} catch (error) { } catch (error) {
console.error('同步入驻状态失败:', error); console.error('同步入驻状态失败:', error);

13
pages/settlement/index.wxml

@ -1,17 +1,4 @@
<view class="container"> <view class="container">
<!-- 供应商展示区域 -->
<view class="supplier-showcase">
<image class="supplier-image" src="/images/你有好蛋.png" mode="aspectFit"></image>
<view class="supplier-text">
<view class="supplier-title">已入住供应商</view>
<view class="supplier-list">
<text class="supplier-item">四川又鸟蛋</text>
<text class="supplier-item">蛋小满贸易</text>
<text class="supplier-item">...</text>
</view>
<view class="supplier-invite">我们等待您的加入!</view>
</view>
</view>
<!-- 内容区域 --> <!-- 内容区域 -->
<view class="content"> <view class="content">
<!-- 引导页 --> <!-- 引导页 -->

54
pages/settlement/index.wxss

@ -1694,58 +1694,4 @@ picker {
color: #999; color: #999;
margin-top: 24rpx; margin-top: 24rpx;
line-height: 1.4; 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;
} }
Loading…
Cancel
Save