From 7096db84e610aa71e2491d0aa96f1d0fb749232a Mon Sep 17 00:00:00 2001
From: SwTt29 <2055018491@qq.com>
Date: Mon, 1 Dec 2025 17:18:59 +0800
Subject: [PATCH] Initial commit
---
.gitignore | 1 +
app.js | 108 +
app.json | 76 +
app.wxss | 44 +
components/navigation-bar/navigation-bar.js | 102 +
components/navigation-bar/navigation-bar.json | 5 +
components/navigation-bar/navigation-bar.wxml | 64 +
components/navigation-bar/navigation-bar.wxss | 96 +
custom-tab-bar/index.js | 348 +
custom-tab-bar/index.json | 4 +
custom-tab-bar/index.wxml | 47 +
custom-tab-bar/index.wxss | 176 +
images/logo.svg | 13 +
images/生成鸡蛋贸易平台图片.png | Bin 0 -> 1255603 bytes
.../accepts/miniprogram_npm/mime-db/index.js | 9370 +++++++++++++++++
.../miniprogram_npm/mime-db/index.js.map | 1 +
package-lock.json | 1171 ++
package.json | 21 +
pages/buyer/index.js | 1945 ++++
pages/buyer/index.json | 5 +
pages/buyer/index.wxml | 296 +
pages/buyer/index.wxss | 464 +
pages/debug/debug-gross-weight.js | 66 +
pages/debug/debug-gross-weight.wxml | 2 +
pages/debug/debug-sold-out.js | 66 +
pages/debug/debug-sold-out.wxml | 2 +
pages/debug/debug.js | 66 +
pages/debug/debug.wxml | 2 +
pages/evaluate/index.js | 557 +
pages/evaluate/index.json | 6 +
pages/evaluate/index.wxml | 339 +
pages/evaluate/index.wxss | 769 ++
pages/index/index.js | 977 ++
pages/index/index.json | 5 +
pages/index/index.wxml | 94 +
pages/index/index.wxss | 243 +
pages/notopen/index.js | 64 +
pages/notopen/index.json | 4 +
pages/notopen/index.wxml | 8 +
pages/notopen/index.wxss | 69 +
pages/profile/index.js | 652 ++
pages/profile/index.json | 3 +
pages/profile/index.wxml | 63 +
pages/profile/index.wxss | 1 +
pages/publish/index.js | 588 ++
pages/publish/index.json | 3 +
pages/publish/index.wxml | 54 +
pages/publish/index.wxss | 117 +
pages/seller/index.js | 3333 ++++++
pages/seller/index.json | 5 +
pages/seller/index.wxml | 833 ++
pages/seller/index.wxss | 295 +
pages/settlement/index.js | 1164 ++
pages/settlement/index.json | 4 +
pages/settlement/index.wxml | 367 +
pages/settlement/index.wxss | 1697 +++
pages/test-tools/api-test.js | 66 +
pages/test-tools/api-test.wxml | 2 +
pages/test-tools/clear-storage.js | 66 +
pages/test-tools/clear-storage.wxml | 2 +
pages/test-tools/connection-test.js | 66 +
pages/test-tools/connection-test.wxml | 2 +
pages/test-tools/fix-connection.js | 66 +
pages/test-tools/fix-connection.wxml | 2 +
pages/test-tools/gross-weight-tester.js | 66 +
pages/test-tools/gross-weight-tester.wxml | 2 +
pages/test-tools/phone-test.js | 66 +
pages/test-tools/phone-test.wxml | 2 +
pages/test-tools/test-mode-switch.js | 66 +
pages/test-tools/test-mode-switch.wxml | 2 +
pages/test/undercarriage-test.js | 66 +
pages/test/undercarriage-test.wxml | 2 +
project.config.json | 91 +
project.private.config.json | 23 +
server-example/.env | 24 +
server-example/.env.example.mysql | 101 +
server-example/add-department-column.js | 41 +
server-example/complete-gross-weight-fix.js | 143 +
.../complete-gross-weight-verification.js | 123 +
server-example/create-missing-associations.js | 155 +
server-example/database-extension.js | 356 +
server-example/direct-db-check.js | 175 +
server-example/ecosystem.config.js | 86 +
server-example/find-product-creator.js | 61 +
server-example/fixed-server.js | 85 +
server-example/free-port.js | 87 +
server-example/gross-weight-fix-error.json | 5 +
.../gross-weight-frontend-fix-report.json | 24 +
server-example/gross-weight-log-analyzer.js | 135 +
server-example/list-users.js | 67 +
server-example/logger.js | 86 +
server-example/oss-config.js | 8 +
server-example/oss-uploader.js | 319 +
server-example/package-lock.json | 2393 +++++
server-example/package.json | 35 +
server-example/port-conflict-fix.js | 236 +
server-example/query-database.js | 71 +
server-example/server-mysql-backup-alias.js | 2973 ++++++
server-example/server-mysql-backup-count.js | 2973 ++++++
server-example/server-mysql-backup-final.js | 2973 ++++++
server-example/server-mysql.backup.js | 2963 ++++++
server-example/server-mysql.js | 5702 ++++++++++
server-example/server.js | 11 +
server-example/simple-fix.js | 50 +
server-example/simple-gross-weight-check.js | 96 +
.../simple-gross-weight-verification.js | 145 +
server-example/simple-port-check.js | 36 +
server-example/start-pm2.sh | 199 +
server-example/start-server.js | 9 +
server-example/sync-review-status.js | 108 +
server-example/test-request.json | 1 +
...test_results_2025-11-28T07-49-43-353Z.json | 59 +
server-example/test_settlement_api.js | 274 +
server-example/update-product-contacts.js | 134 +
server-example/update-product-contacts.zip | Bin 0 -> 1799 bytes
.../update-product-review-status.js | 218 +
server-example/user-association-auto-fix.js | 285 +
server-example/user-association-patch.js | 38 +
server-example/view-users-table-structure.js | 106 +
utils/api.js | 2041 ++++
utils/image-url-validator.js | 200 +
121 files changed, 53943 insertions(+)
create mode 100644 .gitignore
create mode 100644 app.js
create mode 100644 app.json
create mode 100644 app.wxss
create mode 100644 components/navigation-bar/navigation-bar.js
create mode 100644 components/navigation-bar/navigation-bar.json
create mode 100644 components/navigation-bar/navigation-bar.wxml
create mode 100644 components/navigation-bar/navigation-bar.wxss
create mode 100644 custom-tab-bar/index.js
create mode 100644 custom-tab-bar/index.json
create mode 100644 custom-tab-bar/index.wxml
create mode 100644 custom-tab-bar/index.wxss
create mode 100644 images/logo.svg
create mode 100644 images/生成鸡蛋贸易平台图片.png
create mode 100644 miniprogram_npm/accepts/miniprogram_npm/mime-db/index.js
create mode 100644 miniprogram_npm/accepts/miniprogram_npm/mime-db/index.js.map
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 pages/buyer/index.js
create mode 100644 pages/buyer/index.json
create mode 100644 pages/buyer/index.wxml
create mode 100644 pages/buyer/index.wxss
create mode 100644 pages/debug/debug-gross-weight.js
create mode 100644 pages/debug/debug-gross-weight.wxml
create mode 100644 pages/debug/debug-sold-out.js
create mode 100644 pages/debug/debug-sold-out.wxml
create mode 100644 pages/debug/debug.js
create mode 100644 pages/debug/debug.wxml
create mode 100644 pages/evaluate/index.js
create mode 100644 pages/evaluate/index.json
create mode 100644 pages/evaluate/index.wxml
create mode 100644 pages/evaluate/index.wxss
create mode 100644 pages/index/index.js
create mode 100644 pages/index/index.json
create mode 100644 pages/index/index.wxml
create mode 100644 pages/index/index.wxss
create mode 100644 pages/notopen/index.js
create mode 100644 pages/notopen/index.json
create mode 100644 pages/notopen/index.wxml
create mode 100644 pages/notopen/index.wxss
create mode 100644 pages/profile/index.js
create mode 100644 pages/profile/index.json
create mode 100644 pages/profile/index.wxml
create mode 100644 pages/profile/index.wxss
create mode 100644 pages/publish/index.js
create mode 100644 pages/publish/index.json
create mode 100644 pages/publish/index.wxml
create mode 100644 pages/publish/index.wxss
create mode 100644 pages/seller/index.js
create mode 100644 pages/seller/index.json
create mode 100644 pages/seller/index.wxml
create mode 100644 pages/seller/index.wxss
create mode 100644 pages/settlement/index.js
create mode 100644 pages/settlement/index.json
create mode 100644 pages/settlement/index.wxml
create mode 100644 pages/settlement/index.wxss
create mode 100644 pages/test-tools/api-test.js
create mode 100644 pages/test-tools/api-test.wxml
create mode 100644 pages/test-tools/clear-storage.js
create mode 100644 pages/test-tools/clear-storage.wxml
create mode 100644 pages/test-tools/connection-test.js
create mode 100644 pages/test-tools/connection-test.wxml
create mode 100644 pages/test-tools/fix-connection.js
create mode 100644 pages/test-tools/fix-connection.wxml
create mode 100644 pages/test-tools/gross-weight-tester.js
create mode 100644 pages/test-tools/gross-weight-tester.wxml
create mode 100644 pages/test-tools/phone-test.js
create mode 100644 pages/test-tools/phone-test.wxml
create mode 100644 pages/test-tools/test-mode-switch.js
create mode 100644 pages/test-tools/test-mode-switch.wxml
create mode 100644 pages/test/undercarriage-test.js
create mode 100644 pages/test/undercarriage-test.wxml
create mode 100644 project.config.json
create mode 100644 project.private.config.json
create mode 100644 server-example/.env
create mode 100644 server-example/.env.example.mysql
create mode 100644 server-example/add-department-column.js
create mode 100644 server-example/complete-gross-weight-fix.js
create mode 100644 server-example/complete-gross-weight-verification.js
create mode 100644 server-example/create-missing-associations.js
create mode 100644 server-example/database-extension.js
create mode 100644 server-example/direct-db-check.js
create mode 100644 server-example/ecosystem.config.js
create mode 100644 server-example/find-product-creator.js
create mode 100644 server-example/fixed-server.js
create mode 100644 server-example/free-port.js
create mode 100644 server-example/gross-weight-fix-error.json
create mode 100644 server-example/gross-weight-frontend-fix-report.json
create mode 100644 server-example/gross-weight-log-analyzer.js
create mode 100644 server-example/list-users.js
create mode 100644 server-example/logger.js
create mode 100644 server-example/oss-config.js
create mode 100644 server-example/oss-uploader.js
create mode 100644 server-example/package-lock.json
create mode 100644 server-example/package.json
create mode 100644 server-example/port-conflict-fix.js
create mode 100644 server-example/query-database.js
create mode 100644 server-example/server-mysql-backup-alias.js
create mode 100644 server-example/server-mysql-backup-count.js
create mode 100644 server-example/server-mysql-backup-final.js
create mode 100644 server-example/server-mysql.backup.js
create mode 100644 server-example/server-mysql.js
create mode 100644 server-example/server.js
create mode 100644 server-example/simple-fix.js
create mode 100644 server-example/simple-gross-weight-check.js
create mode 100644 server-example/simple-gross-weight-verification.js
create mode 100644 server-example/simple-port-check.js
create mode 100644 server-example/start-pm2.sh
create mode 100644 server-example/start-server.js
create mode 100644 server-example/sync-review-status.js
create mode 100644 server-example/test-request.json
create mode 100644 server-example/test_results_2025-11-28T07-49-43-353Z.json
create mode 100644 server-example/test_settlement_api.js
create mode 100644 server-example/update-product-contacts.js
create mode 100644 server-example/update-product-contacts.zip
create mode 100644 server-example/update-product-review-status.js
create mode 100644 server-example/user-association-auto-fix.js
create mode 100644 server-example/user-association-patch.js
create mode 100644 server-example/view-users-table-structure.js
create mode 100644 utils/api.js
create mode 100644 utils/image-url-validator.js
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..9662778
--- /dev/null
+++ b/app.js
@@ -0,0 +1,108 @@
+App({
+ onLaunch: function () {
+ // 初始化应用
+ console.log('App Launch')
+
+ // 初始化本地存储的标签和用户数据
+ if (!wx.getStorageSync('users')) {
+ wx.setStorageSync('users', {})
+ }
+ if (!wx.getStorageSync('tags')) {
+ wx.setStorageSync('tags', {})
+ }
+ if (!wx.getStorageSync('goods')) {
+ // 初始化空的商品列表,不预置默认数据,由服务器获取
+ wx.setStorageSync('goods', [])
+ }
+ if (!wx.getStorageSync('supplies')) {
+ // 初始化空的供应列表,不预置默认数据,由服务器获取
+ wx.setStorageSync('supplies', [])
+ }
+
+ // 检查是否是首次启动
+ const isFirstLaunch = !wx.getStorageSync('hasLaunched')
+ if (isFirstLaunch) {
+ // 标记应用已经启动过
+ wx.setStorageSync('hasLaunched', true)
+
+ // 只有在首次启动时才检查用户身份并可能跳转
+ const userId = wx.getStorageSync('userId')
+ if (userId) {
+ const users = wx.getStorageSync('users')
+ const user = users[userId]
+ if (user && user.type) {
+ // 延迟跳转,确保页面加载完成
+ setTimeout(() => {
+ try {
+ if (user.type === 'buyer') {
+ wx.switchTab({ url: '/pages/buyer/index' })
+ } else if (user.type === 'seller') {
+ wx.switchTab({ url: '/pages/seller/index' })
+ }
+ } catch (e) {
+ console.error('启动时页面跳转异常:', e)
+ // 即使跳转失败,也不影响应用正常启动
+ }
+ }, 100)
+ }
+ }
+ }
+
+ // 获取用户信息
+ wx.getSetting({
+ success: res => {
+ if (res.authSetting['scope.userInfo']) {
+ // 已经授权,可以直接调用 getUserInfo 获取头像昵称
+ wx.getUserInfo({
+ success: res => {
+ this.globalData.userInfo = res.userInfo
+ // 存储用户ID(实际项目中使用openid)
+ if (!wx.getStorageSync('userId')) {
+ const userId = 'user_' + Date.now()
+ wx.setStorageSync('userId', userId)
+ // 初始化用户数据
+ const users = wx.getStorageSync('users')
+ users[userId] = {
+ info: res.userInfo,
+ type: null
+ }
+ wx.setStorageSync('users', users)
+ }
+ }
+ })
+ }
+ }
+ })
+ },
+ onShow: function () {
+ console.log('App Show')
+ },
+ onHide: function () {
+ console.log('App Hide')
+ },
+
+ // 更新当前选中的tab
+ updateCurrentTab(tabKey) {
+ if (this.globalData) {
+ this.globalData.currentTab = tabKey
+ }
+ },
+
+ // 跳转到估价页面
+ goToEvaluatePage() {
+ wx.navigateTo({
+ url: '/pages/evaluate/index'
+ })
+ },
+
+ // 上传手机号数据
+ async uploadPhoneNumberData(phoneData) {
+ const API = require('./utils/api.js')
+ return await API.uploadPhoneNumberData(phoneData)
+ },
+
+ globalData: {
+ userInfo: null,
+ currentTab: 'index' // 当前选中的tab
+ }
+})
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..b26f62d
--- /dev/null
+++ b/app.json
@@ -0,0 +1,76 @@
+{
+ "pages": [
+ "pages/index/index",
+ "pages/evaluate/index",
+ "pages/settlement/index",
+ "pages/publish/index",
+ "pages/buyer/index",
+ "pages/seller/index",
+ "pages/profile/index",
+ "pages/notopen/index"
+ ],
+ "subpackages": [
+ {
+ "root": "pages/debug",
+ "pages": [
+ "debug",
+ "debug-sold-out",
+ "debug-gross-weight"
+ ],
+ "independent": false
+ },
+ {
+ "root": "pages/test",
+ "pages": [
+ "undercarriage-test"
+ ],
+ "independent": false
+ },
+ {
+ "root": "pages/test-tools",
+ "pages": [
+ "test-mode-switch",
+ "connection-test",
+ "api-test",
+ "phone-test",
+ "clear-storage",
+ "gross-weight-tester",
+ "fix-connection"
+ ],
+ "independent": false
+ }
+ ],
+ "window": {
+ "backgroundTextStyle": "light",
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "又鸟蛋平台",
+ "navigationBarTextStyle": "black"
+ },
+ "tabBar": {
+ "custom": true,
+ "color": "#999999",
+ "selectedColor": "#FF6B81",
+ "backgroundColor": "#ffffff",
+ "borderStyle": "black",
+ "list": [
+ {
+ "pagePath": "pages/index/index",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/buyer/index",
+ "text": "购物"
+ },
+ {
+ "pagePath": "pages/seller/index",
+ "text": "货源"
+ },
+ {
+ "pagePath": "pages/profile/index",
+ "text": "我的"
+ }
+ ]
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json"
+}
\ No newline at end of file
diff --git a/app.wxss b/app.wxss
new file mode 100644
index 0000000..770f3de
--- /dev/null
+++ b/app.wxss
@@ -0,0 +1,44 @@
+/**app.wxss**/
+.container {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ background-color: #f5f5f5;
+ }
+
+ .btn {
+ width: 80%;
+ padding: 15rpx 0;
+ margin: 20rpx 0;
+ border-radius: 10rpx;
+ font-size: 32rpx;
+ }
+
+ .card {
+ width: 90%;
+ padding: 30rpx;
+ margin: 20rpx 0;
+ background-color: #fff;
+ border-radius: 10rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0,0,0,0.1);
+ }
+
+ .title {
+ font-size: 36rpx;
+ font-weight: bold;
+ margin-bottom: 20rpx;
+ }
+
+ .input {
+ width: 100%;
+ max-width: 100%;
+ padding: 20rpx;
+ margin: 15rpx 0;
+ border: 1px solid #eee;
+ border-radius: 5rpx;
+ font-size: 28rpx;
+ box-sizing: border-box;
+ }
\ No newline at end of file
diff --git a/components/navigation-bar/navigation-bar.js b/components/navigation-bar/navigation-bar.js
new file mode 100644
index 0000000..eb1770e
--- /dev/null
+++ b/components/navigation-bar/navigation-bar.js
@@ -0,0 +1,102 @@
+Component({
+ options: {
+ multipleSlots: true // 在组件定义时的选项中启用多slot支持
+ },
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ extClass: {
+ type: String,
+ value: ''
+ },
+ title: {
+ type: String,
+ value: ''
+ },
+ background: {
+ type: String,
+ value: ''
+ },
+ color: {
+ type: String,
+ value: ''
+ },
+ back: {
+ type: Boolean,
+ value: true
+ },
+ loading: {
+ type: Boolean,
+ value: false
+ },
+ homeButton: {
+ type: Boolean,
+ value: false,
+ },
+ animated: {
+ // 显示隐藏的时候opacity动画效果
+ type: Boolean,
+ value: true
+ },
+ show: {
+ // 显示隐藏导航,隐藏的时候navigation-bar的高度占位还在
+ type: Boolean,
+ value: true,
+ observer: '_showChange'
+ },
+ // back为true的时候,返回的页面深度
+ delta: {
+ type: Number,
+ value: 1
+ },
+ },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ displayStyle: ''
+ },
+ lifetimes: {
+ attached() {
+ const rect = wx.getMenuButtonBoundingClientRect()
+ const platform = (wx.getDeviceInfo() || wx.getSystemInfoSync()).platform
+ const isAndroid = platform === 'android'
+ const isDevtools = platform === 'devtools'
+ const { windowWidth, safeArea: { top = 0, bottom = 0 } = {} } = wx.getWindowInfo() || wx.getSystemInfoSync()
+ this.setData({
+ ios: !isAndroid,
+ innerPaddingRight: `padding-right: ${windowWidth - rect.left}px`,
+ leftWidth: `width: ${windowWidth - rect.left}px`,
+ safeAreaTop: isDevtools || isAndroid ? `height: calc(var(--height) + ${top}px); padding-top: ${top}px` : ``
+ })
+ },
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ _showChange(show) {
+ const animated = this.data.animated
+ let displayStyle = ''
+ if (animated) {
+ displayStyle = `opacity: ${show ? '1' : '0'
+ };transition:opacity 0.5s;`
+ } else {
+ displayStyle = `display: ${show ? '' : 'none'}`
+ }
+ this.setData({
+ displayStyle
+ })
+ },
+ back() {
+ const data = this.data
+ if (data.delta) {
+ wx.navigateBack({
+ delta: data.delta
+ })
+ }
+ this.triggerEvent('back', { delta: data.delta }, {})
+ }
+ },
+})
diff --git a/components/navigation-bar/navigation-bar.json b/components/navigation-bar/navigation-bar.json
new file mode 100644
index 0000000..4a20f17
--- /dev/null
+++ b/components/navigation-bar/navigation-bar.json
@@ -0,0 +1,5 @@
+{
+ "component": true,
+ "styleIsolation": "apply-shared",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/components/navigation-bar/navigation-bar.wxml b/components/navigation-bar/navigation-bar.wxml
new file mode 100644
index 0000000..be9a663
--- /dev/null
+++ b/components/navigation-bar/navigation-bar.wxml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/navigation-bar/navigation-bar.wxss b/components/navigation-bar/navigation-bar.wxss
new file mode 100644
index 0000000..8bd379e
--- /dev/null
+++ b/components/navigation-bar/navigation-bar.wxss
@@ -0,0 +1,96 @@
+.weui-navigation-bar {
+ --weui-FG-0:rgba(0,0,0,.9);
+ --height: 44px;
+ --left: 16px;
+}
+.weui-navigation-bar .android {
+ --height: 48px;
+}
+
+.weui-navigation-bar {
+ overflow: hidden;
+ color: var(--weui-FG-0);
+ flex: none;
+}
+
+.weui-navigation-bar__inner {
+ position: relative;
+ top: 0;
+ left: 0;
+ height: calc(var(--height) + env(safe-area-inset-top));
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ padding-top: env(safe-area-inset-top);
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.weui-navigation-bar__left {
+ position: relative;
+ padding-left: var(--left);
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ height: 100%;
+ box-sizing: border-box;
+}
+
+.weui-navigation-bar__btn_goback_wrapper {
+ padding: 11px 18px 11px 16px;
+ margin: -11px -18px -11px -16px;
+}
+
+.weui-navigation-bar__btn_goback_wrapper.weui-active {
+ opacity: 0.5;
+}
+
+.weui-navigation-bar__btn_goback {
+ font-size: 12px;
+ width: 12px;
+ height: 24px;
+ -webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;
+ mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;
+ -webkit-mask-size: cover;
+ mask-size: cover;
+ background-color: var(--weui-FG-0);
+}
+
+.weui-navigation-bar__center {
+ font-size: 17px;
+ text-align: center;
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ font-weight: bold;
+ flex: 1;
+ height: 100%;
+}
+
+.weui-navigation-bar__loading {
+ margin-right: 4px;
+ align-items: center;
+}
+
+.weui-loading {
+ font-size: 16px;
+ width: 16px;
+ height: 16px;
+ display: block;
+ background: transparent url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='80px' height='80px' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23606060' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23606060' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23606060' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A") no-repeat;
+ background-size: 100%;
+ margin-left: 0;
+ animation: loading linear infinite 1s;
+}
+
+@keyframes loading {
+ from {
+ transform: rotate(0);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
diff --git a/custom-tab-bar/index.js b/custom-tab-bar/index.js
new file mode 100644
index 0000000..a0fdcf1
--- /dev/null
+++ b/custom-tab-bar/index.js
@@ -0,0 +1,348 @@
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ selected: 'index',
+ show: true, // 控制tab-bar显示状态
+ // 记录tabBar数据,用于匹配
+ tabBarItems: [
+ { key: 'index', route: 'pages/index/index' },
+ { key: 'buyer', route: 'pages/buyer/index' },
+ { key: 'seller', route: 'pages/seller/index' },
+ { key: 'profile', route: 'pages/profile/index' }
+ ]
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ // 切换tab页面的方法 - 增强版,改进状态管理
+ switchTab(e) {
+ try {
+ const data = e.currentTarget.dataset
+ let url = data.path
+ const key = data.key
+
+ console.log('点击tab项:', key, '原始路径:', url)
+
+ // 确保路径格式正确 - 移除可能的前缀斜杠
+ if (url.startsWith('/')) {
+ url = url.substring(1)
+ }
+
+ console.log('修正后路径:', url)
+
+ // 更新全局数据 - 先更新全局状态,确保状态一致性
+ const app = getApp()
+ if (app && app.globalData) {
+ app.globalData.currentTab = key
+ console.log('同步选中状态到全局数据:', key)
+ }
+
+ // 立即更新UI选中状态
+ this.setData({
+ selected: key
+ })
+
+ // 无论跳转到哪个页面,先确保用户身份被正确设置
+ if (key === 'buyer' || key === 'seller') {
+ const userId = wx.getStorageSync('userId');
+ if (userId) {
+ // 更新用户类型
+ let users = wx.getStorageSync('users');
+ if (typeof users !== 'object' || users === null) {
+ users = {};
+ }
+ if (!users[userId]) {
+ users[userId] = {};
+ }
+ users[userId].type = key;
+ wx.setStorageSync('users', users);
+
+ // 更新标签
+ let tags = wx.getStorageSync('tags');
+ if (typeof tags !== 'object' || tags === null) {
+ tags = {};
+ }
+ tags[userId] = tags[userId] || [];
+ tags[userId] = tags[userId].filter(tag => !tag.startsWith('身份:'));
+ tags[userId].push(`身份:${key}`);
+ wx.setStorageSync('tags', tags);
+ }
+ }
+
+ // 特殊处理:点击货源页面时检查登录状态和入驻状态
+ 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)
+ }
+ } catch (e) {
+ console.error('switchTab方法执行错误:', e)
+ }
+ },
+
+ // 跳转到tab页面的通用方法
+ navigateToTabPage(url) {
+ console.log('使用switchTab跳转到tabbar页面:', url)
+ wx.switchTab({
+ url: '/' + url,
+ success: (res) => {
+ console.log('switchTab成功:', url, res)
+ },
+ fail: (err) => {
+ console.error('switchTab失败:', url, err)
+ console.log('尝试使用reLaunch跳转...')
+ wx.reLaunch({
+ url: '/' + url,
+ success: (res) => {
+ console.log('reLaunch成功:', url, res)
+ },
+ fail: (err) => {
+ console.error('reLaunch也失败:', url, err)
+ }
+ })
+ }
+ })
+ },
+
+ // 强制更新选中状态
+ forceUpdateSelectedState(key) {
+ try {
+ this.setData({
+ selected: key
+ })
+ console.log('强制更新选中状态:', key)
+ // 再次同步全局数据,确保双向一致性
+ const app = getApp()
+ if (app && app.globalData) {
+ app.globalData.currentTab = key
+ }
+ } catch (e) {
+ console.error('强制更新选中状态失败:', e)
+ }
+ },
+
+ // 恢复到之前的状态
+ restorePreviousState() {
+ try {
+ const app = getApp()
+ if (app && app.globalData && app.globalData.currentTab) {
+ this.setData({
+ selected: app.globalData.currentTab
+ })
+ console.log('恢复选中状态到:', app.globalData.currentTab)
+ }
+ } catch (e) {
+ console.error('恢复状态失败:', e)
+ }
+ },
+
+ // 跳转到鸡蛋估价页面 - 现已改为未开放页面
+ goToEvaluatePage() {
+ wx.navigateTo({
+ url: '/pages/notopen/index'
+ })
+ },
+
+ // 从全局数据同步状态的方法 - 增强版
+ syncFromGlobalData() {
+ try {
+ const app = getApp()
+ const pages = getCurrentPages()
+ let currentRoute = ''
+
+ // 获取当前页面路由
+ if (pages && pages.length > 0) {
+ const currentPage = pages[pages.length - 1]
+ currentRoute = currentPage.route
+ console.log('当前页面路由:', currentRoute)
+ }
+
+ // 根据当前页面路由确定应该选中的tab
+ let shouldSelect = 'index'
+ for (let item of this.data.tabBarItems) {
+ if (item.route === currentRoute) {
+ shouldSelect = item.key
+ break
+ }
+ }
+
+ // 检查全局数据中是否有控制tab-bar显示的状态
+ let showTabBar = true
+ if (app && app.globalData && typeof app.globalData.showTabBar !== 'undefined') {
+ showTabBar = app.globalData.showTabBar
+ }
+
+ // 更新全局数据和本地数据,确保一致性
+ if (app && app.globalData) {
+ app.globalData.currentTab = shouldSelect
+ }
+
+ // 只在状态不一致时更新,避免频繁重绘
+ const updates = {}
+ if (this.data.selected !== shouldSelect) {
+ updates.selected = shouldSelect
+ console.log('根据当前页面路由更新选中状态:', shouldSelect)
+ }
+
+ if (this.data.show !== showTabBar) {
+ updates.show = showTabBar
+ console.log('更新tab-bar显示状态:', showTabBar)
+ }
+
+ if (Object.keys(updates).length > 0) {
+ this.setData(updates)
+ }
+ } catch (e) {
+ console.error('从全局数据同步状态失败:', e)
+ }
+ },
+
+ // 开始监听全局tab-bar显示状态变化
+ startTabBarStatusListener() {
+ // 使用定时器定期检查全局状态
+ this.tabBarStatusTimer = setInterval(() => {
+ try {
+ const app = getApp()
+ if (app && app.globalData && typeof app.globalData.showTabBar !== 'undefined') {
+ const showTabBar = app.globalData.showTabBar
+ if (this.data.show !== showTabBar) {
+ this.setData({
+ show: showTabBar
+ })
+ console.log('tab-bar显示状态更新:', showTabBar)
+ }
+ }
+ } catch (e) {
+ console.error('监听tab-bar状态失败:', e)
+ }
+ }, 100) // 每100ms检查一次,确保响应迅速
+ }
+ },
+
+ // 组件生命周期
+ lifetimes: {
+ // 组件挂载时执行
+ attached() {
+ console.log('tabBar组件挂载')
+ // 初始化时从全局数据同步一次状态,使用较长延迟确保页面完全加载
+ setTimeout(() => {
+ this.syncFromGlobalData()
+ }, 100)
+
+ // 监听全局tab-bar显示状态变化
+ this.startTabBarStatusListener()
+ },
+
+ // 组件被移动到节点树另一个位置时执行
+ moved() {
+ console.log('tabBar组件移动')
+ // 组件移动时重新同步状态
+ this.syncFromGlobalData()
+ },
+
+ // 组件卸载时执行
+ detached() {
+ console.log('tabBar组件卸载')
+ // 清理定时器
+ if (this.tabBarStatusTimer) {
+ clearInterval(this.tabBarStatusTimer)
+ }
+ }
+ },
+
+ // 页面生命周期
+ pageLifetimes: {
+ // 页面显示时执行
+ show() {
+ console.log('页面显示')
+ const pages = getCurrentPages()
+ if (pages && pages.length > 0) {
+ const currentPage = pages[pages.length - 1]
+ // 对于profile页面,使用更长的延迟以避免服务器错误影响
+ if (currentPage.route === 'pages/profile/index') {
+ setTimeout(() => {
+ this.syncFromGlobalData()
+ // 额外确保profile页面状态正确
+ setTimeout(() => {
+ this.forceUpdateSelectedState('profile')
+ }, 200)
+ }, 200)
+ } else {
+ // 其他页面使用适当延迟
+ setTimeout(() => {
+ this.syncFromGlobalData()
+ }, 50)
+ }
+ }
+
+ // 页面显示时默认显示tab-bar,除非有全局控制
+ const app = getApp()
+ if (app && app.globalData && typeof app.globalData.showTabBar === 'undefined') {
+ this.setData({
+ show: true
+ })
+ }
+ },
+
+ // 页面隐藏时执行
+ hide() {
+ console.log('页面隐藏')
+ // 页面隐藏时保存当前选中状态到全局
+ const app = getApp()
+ if (app && app.globalData) {
+ app.globalData.currentTab = this.data.selected
+ }
+ }
+ }
+})
\ No newline at end of file
diff --git a/custom-tab-bar/index.json b/custom-tab-bar/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/custom-tab-bar/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/custom-tab-bar/index.wxml b/custom-tab-bar/index.wxml
new file mode 100644
index 0000000..aaae602
--- /dev/null
+++ b/custom-tab-bar/index.wxml
@@ -0,0 +1,47 @@
+
+
+
+
+ 🏠
+ 首页
+
+
+
+ 🐥
+ 买蛋
+
+
+
+
+
+
+ 🥚
+ 估
+
+
+
+
+
+
+ 🐣
+ 卖蛋
+
+
+
+ 👤
+ 我的
+
+
+
\ No newline at end of file
diff --git a/custom-tab-bar/index.wxss b/custom-tab-bar/index.wxss
new file mode 100644
index 0000000..3b5b7e3
--- /dev/null
+++ b/custom-tab-bar/index.wxss
@@ -0,0 +1,176 @@
+.tab-bar {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 140rpx;
+ background: rgba(255, 255, 255, 0.95);
+ backdrop-filter: blur(20rpx);
+ -webkit-backdrop-filter: blur(20rpx);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-top: 1rpx solid rgba(255, 255, 255, 0.8);
+ padding: 0 20rpx;
+ box-shadow: 0 -8rpx 40rpx rgba(0, 0, 0, 0.08);
+ z-index: 1000;
+}
+
+/* 左侧按钮组 */
+.tab-bar-left {
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+ flex: 1;
+}
+
+/* 右侧按钮组 */
+.tab-bar-right {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ flex: 1;
+}
+
+/* 中间鸡蛋按钮区域 */
+.tab-bar-center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ width: 140rpx;
+ height: 100%;
+}
+
+.tab-bar-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ width: 120rpx;
+ height: 100%;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ position: relative;
+ border-radius: 20rpx;
+ margin: 0 10rpx;
+}
+
+.tab-bar-item:active {
+ transform: scale(0.92);
+ background: rgba(0, 0, 0, 0.05);
+}
+
+
+
+.tab-bar-icon {
+ font-size: 44rpx;
+ margin-bottom: 8rpx;
+ filter: drop-shadow(0 4rpx 8rpx rgba(0, 0, 0, 0.1));
+}
+
+
+
+.tab-bar-text {
+ font-size: 22rpx;
+ color: #666;
+ font-weight: 500;
+}
+
+
+
+/* 鸡蛋估价按钮样式 */
+.egg-button {
+ position: relative;
+ width: 120rpx;
+ height: 120rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ background: transparent;
+ border-radius: 50%;
+ margin-top: -40rpx;
+}
+
+.egg-button:active {
+ transform: scale(0.9);
+}
+
+.egg-icon {
+ font-size: 90rpx;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ animation: eggMagic 4s ease-in-out infinite;
+ text-shadow: 0 4rpx 12rpx rgba(255, 107, 0, 0.4);
+}
+
+@keyframes eggMagic {
+ 0%, 100% {
+ transform: translateY(0) rotate(0deg);
+ filter: brightness(1) saturate(1);
+ }
+ 25% {
+ transform: translateY(-12rpx) rotate(2deg);
+ filter: brightness(1.1) saturate(1.2);
+ }
+ 50% {
+ transform: translateY(-6rpx) rotate(-1deg);
+ filter: brightness(1.05) saturate(1.1);
+ }
+ 75% {
+ transform: translateY(-10rpx) rotate(1deg);
+ filter: brightness(1.15) saturate(1.3);
+ }
+}
+
+.egg-text {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ font-size: 30rpx;
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow:
+ 0 2rpx 4rpx rgba(255, 107, 0, 0.8),
+ 0 4rpx 12rpx rgba(255, 107, 0, 0.4);
+ z-index: 2;
+ letter-spacing: 1rpx;
+}
+
+/* 移除发光效果 */
+
+/* 添加分隔线 */
+.tab-bar-left .tab-bar-item:last-child::after {
+ content: '';
+ position: absolute;
+ right: -15rpx;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1rpx;
+ height: 40rpx;
+ background: linear-gradient(to bottom,
+ transparent,
+ rgba(0, 0, 0, 0.1),
+ transparent);
+}
+
+.tab-bar-right .tab-bar-item:first-child::before {
+ content: '';
+ position: absolute;
+ left: -15rpx;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1rpx;
+ height: 40rpx;
+ background: linear-gradient(to bottom,
+ transparent,
+ rgba(0, 0, 0, 0.1),
+ transparent);
+}
\ No newline at end of file
diff --git a/images/logo.svg b/images/logo.svg
new file mode 100644
index 0000000..9e92c4c
--- /dev/null
+++ b/images/logo.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/images/生成鸡蛋贸易平台图片.png b/images/生成鸡蛋贸易平台图片.png
new file mode 100644
index 0000000000000000000000000000000000000000..c9f02120b618b506ba1d97267445d5360fdf1e31
GIT binary patch
literal 1255603
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