修正了 pages 名为拼音的问题
This commit is contained in:
37
app.js
37
app.js
@@ -1,11 +1,10 @@
|
||||
// app.js - 稳健生产版本(修复 GoEasy 初始化错误 + 配置100%加载)
|
||||
// app.js
|
||||
import GoEasy from './static/lib/goeasy-2.13.24.esm.min';
|
||||
const ChatCore = require('./utils/chat-core');
|
||||
import { check } from './utils/phone-auth';
|
||||
import { getPrimaryRole, lockPrimaryRole, migrateLegacyCenterRole, PRIMARY_DEFAULT_PAGES } from './utils/primary-role';
|
||||
|
||||
|
||||
// ===== 三端固定首页(与 custom-tab-bar 一致) =====
|
||||
// 三端固定首页
|
||||
const roleDefaultPage = PRIMARY_DEFAULT_PAGES;
|
||||
|
||||
App({
|
||||
@@ -163,20 +162,20 @@ App({
|
||||
primaryRole: 'normal'
|
||||
},
|
||||
|
||||
// ========== 核心启动流程 ==========
|
||||
// 核心启动流程
|
||||
async onLaunch() {
|
||||
// ---------- ① 立即隐藏“返回首页”按钮 ----------
|
||||
// ① 隐藏返回首页按钮
|
||||
wx.hideHomeButton();
|
||||
wx.onAppRoute((res) => {
|
||||
wx.hideHomeButton();
|
||||
const path = (res && res.path) || '';
|
||||
if (path === 'pages/guanshiduan/guanshiduan' || path === 'pages/zuzhangduan/zuzhangduan') {
|
||||
if (path === 'pages/manager/manager' || path === 'pages/leader/leader') {
|
||||
migrateLegacyCenterRole(this);
|
||||
lockPrimaryRole('dashou', this);
|
||||
}
|
||||
});
|
||||
|
||||
// ---------- ② 恢复主端并跳转(旧管事/组长标识自动归打手端) ----------
|
||||
// ② 恢复主端并跳转
|
||||
migrateLegacyCenterRole(this);
|
||||
const savedRole = getPrimaryRole(this);
|
||||
lockPrimaryRole(savedRole, this);
|
||||
@@ -188,18 +187,18 @@ App({
|
||||
}, 0);
|
||||
}
|
||||
|
||||
// ---------- ③ 立刻应用本地缓存配置 ----------
|
||||
// ③ 应用本地缓存配置
|
||||
const cachedConfig = this.readConfigFromStorage();
|
||||
if (cachedConfig) {
|
||||
this.applyDynamicConfig(cachedConfig);
|
||||
}
|
||||
|
||||
// ---------- ④ 初始化基础设施 ----------
|
||||
// ④ 初始化
|
||||
this.initGoEasyWithConfig(); // 只有appkey有效时才真正初始化
|
||||
ChatCore.initGlobalMessageSystem(this);
|
||||
this.initCurrentUser();
|
||||
|
||||
// ---------- ⑤ 建立连接 ----------
|
||||
// ⑤ 建立连接
|
||||
const saved = this.getSavedConnection();
|
||||
console.log('【启动】缓存身份:', saved ? saved.identityType : '无',
|
||||
'userId:', saved ? saved.userId : '无');
|
||||
@@ -208,7 +207,7 @@ App({
|
||||
else if (this.ensureConnection) this.ensureConnection();
|
||||
}, 300);
|
||||
|
||||
// ---------- ⑥ 后台静默获取最新配置 ----------
|
||||
// ⑥ 获取远程配置
|
||||
this.fetchConfigSafely()
|
||||
.then(latestConfig => {
|
||||
this.saveConfigToStorage(latestConfig);
|
||||
@@ -223,7 +222,7 @@ App({
|
||||
console.warn('远程配置获取失败,继续使用本地缓存', err);
|
||||
});
|
||||
|
||||
// ---------- ⑦ 手机号认证检查 ----------
|
||||
// ⑦ 手机号认证检查
|
||||
try {
|
||||
const needAuth = await check();
|
||||
if (needAuth) {
|
||||
@@ -233,7 +232,7 @@ App({
|
||||
} catch (e) {}
|
||||
},
|
||||
|
||||
// ========== 连接管理方法 ==========
|
||||
// 连接管理方法
|
||||
getSavedConnection() {
|
||||
try {
|
||||
const saved = wx.getStorageSync(
|
||||
@@ -245,7 +244,7 @@ App({
|
||||
}
|
||||
},
|
||||
|
||||
// ========== 配置缓存读写 ==========
|
||||
// 配置缓存读写
|
||||
CONFIG_CACHE_KEY: 'app_dynamic_config',
|
||||
|
||||
readConfigFromStorage() {
|
||||
@@ -266,7 +265,7 @@ App({
|
||||
} catch (e) {}
|
||||
},
|
||||
|
||||
// ========== 安全获取远程配置(永不报错) ==========
|
||||
// 获取远程配置
|
||||
fetchConfigSafely() {
|
||||
return new Promise((resolve) => {
|
||||
wx.request({
|
||||
@@ -289,7 +288,7 @@ App({
|
||||
});
|
||||
},
|
||||
|
||||
// ========== 原有方法(保留,仅增强) ==========
|
||||
// 获取远程配置
|
||||
fetchDynamicConfig() {
|
||||
return new Promise((resolve, reject) => {
|
||||
wx.request({
|
||||
@@ -340,7 +339,7 @@ App({
|
||||
}
|
||||
},
|
||||
|
||||
// 🔥 关键修复:只在有效 appkey 时初始化,且避免重复初始化
|
||||
// 仅在有效 appkey 时初始化
|
||||
initGoEasyWithConfig() {
|
||||
const cfg = this.globalData.goEasyConfig;
|
||||
if (!cfg || !cfg.appkey) {
|
||||
@@ -348,7 +347,7 @@ App({
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果已经初始化过,就不再重复创建实例
|
||||
// 避免重复初始化
|
||||
if (wx.goEasy && wx.GoEasy) {
|
||||
console.log('GoEasy 已初始化,跳过');
|
||||
return;
|
||||
@@ -389,7 +388,7 @@ App({
|
||||
}
|
||||
},
|
||||
|
||||
/** 切换当前角色并通知 custom-tab-bar 立即刷新(Storage + globalData + 事件) */
|
||||
/** 切换角色并通知刷新 */
|
||||
setCurrentRole(role) {
|
||||
if (!role) return;
|
||||
this.globalData.currentRole = role;
|
||||
|
||||
116
app.json
116
app.json
@@ -1,68 +1,68 @@
|
||||
{
|
||||
"pages": [
|
||||
"pages/index/index",
|
||||
"pages/fenlei/fenlei",
|
||||
"pages/xuanren/xuanren",
|
||||
"pages/xiaoxi/xiaoxi",
|
||||
"pages/wode/wode",
|
||||
"pages/shangpinxiangqing/shangpinxiangqing",
|
||||
"pages/tijiao/tijiao",
|
||||
"pages/xiugai/xiugai",
|
||||
"pages/dashouduan/dashouduan",
|
||||
"pages/shangjiaduan/shangjiaduan",
|
||||
"pages/guanshiduan/guanshiduan",
|
||||
"pages/dingdan/dingdan",
|
||||
"pages/dingdanxiangqing/dingdanxiangqing",
|
||||
"pages/dashouguize/dashouguize",
|
||||
"pages/dashouxiugai/dashouxiugai",
|
||||
"pages/dashoupaihang/dashoupaihang",
|
||||
"pages/dashouchongzhi/dashouchongzhi",
|
||||
"pages/dashouxiaoxi/dashouxiaoxi",
|
||||
"pages/dashoudingdan/dashoudingdan",
|
||||
"pages/jiedan/jiedan",
|
||||
"pages/tixian/tixian",
|
||||
"pages/yaoqingdashou/yaoqingdashou",
|
||||
"pages/wodedashou/wodedashou",
|
||||
"pages/czjilu/czjilu",
|
||||
"pages/guanshipaihang/guanshipaihang",
|
||||
"pages/sjpaidan/sjpaidan",
|
||||
"pages/sjdingdan/sjdingdan",
|
||||
"pages/sjxiaoxi/sjxiaoxi",
|
||||
"pages/sjpaihang/sjpaihang",
|
||||
"pages/sjchongzhi/sjchongzhi",
|
||||
"pages/sjddxq/sjddxq",
|
||||
"pages/dsddxq/dsddxq",
|
||||
"pages/liaotian/liaotian",
|
||||
"pages/jisufd/jisufd",
|
||||
"pages/jiedanchi/jiedanchi",
|
||||
"pages/haibao/haibao",
|
||||
"pages/jinpaids/jinpaids",
|
||||
"pages/zuzhangduan/zuzhangduan",
|
||||
"pages/guanzhual/guanzhual",
|
||||
"pages/zzfhjilu/zzfhjilu",
|
||||
"pages/yqguanshi/yqguanshi",
|
||||
"pages/jiedanchi2/jiedanchi2",
|
||||
"pages/qunliaotian/qunliaotian",
|
||||
"pages/kefuliaotian/kefuliaotian",
|
||||
"pages/renzheng/renzheng",
|
||||
"pages/category/category",
|
||||
"pages/pick-user/pick-user",
|
||||
"pages/messages/messages",
|
||||
"pages/mine/mine",
|
||||
"pages/product-detail/product-detail",
|
||||
"pages/submit/submit",
|
||||
"pages/edit/edit",
|
||||
"pages/fighter/fighter",
|
||||
"pages/merchant/merchant",
|
||||
"pages/manager/manager",
|
||||
"pages/orders/orders",
|
||||
"pages/order-detail/order-detail",
|
||||
"pages/fighter-rules/fighter-rules",
|
||||
"pages/fighter-edit/fighter-edit",
|
||||
"pages/fighter-rank/fighter-rank",
|
||||
"pages/fighter-recharge/fighter-recharge",
|
||||
"pages/fighter-msg/fighter-msg",
|
||||
"pages/fighter-orders/fighter-orders",
|
||||
"pages/accept-order/accept-order",
|
||||
"pages/withdraw/withdraw",
|
||||
"pages/invite-fighter/invite-fighter",
|
||||
"pages/my-fighter/my-fighter",
|
||||
"pages/recharge-log/recharge-log",
|
||||
"pages/manager-rank/manager-rank",
|
||||
"pages/merchant-dispatch/merchant-dispatch",
|
||||
"pages/merchant-orders/merchant-orders",
|
||||
"pages/merchant-msg/merchant-msg",
|
||||
"pages/merchant-rank/merchant-rank",
|
||||
"pages/merchant-recharge/merchant-recharge",
|
||||
"pages/merchant-order-detail/merchant-order-detail",
|
||||
"pages/fighter-order-detail/fighter-order-detail",
|
||||
"pages/chat/chat",
|
||||
"pages/express-order/express-order",
|
||||
"pages/order-pool/order-pool",
|
||||
"pages/poster/poster",
|
||||
"pages/gold-fighter/gold-fighter",
|
||||
"pages/leader/leader",
|
||||
"pages/manager-assign/manager-assign",
|
||||
"pages/leader-bonus-log/leader-bonus-log",
|
||||
"pages/invite-manager/invite-manager",
|
||||
"pages/order-pool2/order-pool2",
|
||||
"pages/group-chat/group-chat",
|
||||
"pages/cs-chat/cs-chat",
|
||||
"pages/verify/verify",
|
||||
"components/global-notification/global-notification",
|
||||
"components/popup-notice/popup-notice",
|
||||
"components/order-card/order-card",
|
||||
"components/order-sender/order-sender",
|
||||
"pages/cfss/cfss/cfss",
|
||||
"pages/cfss/components/fakuan-list/fakuan-list",
|
||||
"pages/cfss/components/jifen-list/jifen-list",
|
||||
"pages/cfss/components/fakuan-pay/fakuan-pay",
|
||||
"pages/penalty/penalty/penalty",
|
||||
"pages/penalty/components/fakuan-list/fakuan-list",
|
||||
"pages/penalty/components/jifen-list/jifen-list",
|
||||
"pages/penalty/components/fakuan-pay/fakuan-pay",
|
||||
"pages/phone-auth/phone-auth",
|
||||
"components/chenghao-tag/chenghao-tag",
|
||||
"pages/kaoheguan/kaoheguan",
|
||||
"pages/kaohe_dafen/kaohe_dafen",
|
||||
"pages/kaohe_jilu/kaohe_jilu",
|
||||
"pages/kaohe_zhongxin/kaohe_zhongxin",
|
||||
"pages/kaohe_jinpai/kaohe_jinpai",
|
||||
"pages/peihuDingdan/peihuDingdan",
|
||||
"pages/tixian/components/mode1/mode1",
|
||||
"pages/tixian/components/mode2/mode2"
|
||||
"pages/assessor/assessor",
|
||||
"pages/assess-score/assess-score",
|
||||
"pages/assess-log/assess-log",
|
||||
"pages/assess-center/assess-center",
|
||||
"pages/assess-gold/assess-gold",
|
||||
"pages/escort-orders/escort-orders",
|
||||
"pages/withdraw/components/mode1/mode1",
|
||||
"pages/withdraw/components/mode2/mode2"
|
||||
|
||||
|
||||
],
|
||||
@@ -85,13 +85,13 @@
|
||||
|
||||
|
||||
{
|
||||
"pagePath": "pages/jiedanchi/jiedanchi",
|
||||
"pagePath": "pages/order-pool/order-pool",
|
||||
"text": "接单池",
|
||||
"iconPath": "/images/jiedanchi.png",
|
||||
"selectedIconPath": "/images/jiedanchi.png"
|
||||
},
|
||||
{
|
||||
"pagePath": "pages/jiedanchi2/jiedanchi2",
|
||||
"pagePath": "pages/order-pool2/order-pool2",
|
||||
"text": "接单池",
|
||||
"iconPath": "/images/jiedanchi.png",
|
||||
"selectedIconPath": "/images/jiedanchi.png"
|
||||
|
||||
891
app.wxss
891
app.wxss
@@ -1,10 +1,889 @@
|
||||
/**app.wxss**/
|
||||
.container {
|
||||
height: 100%;
|
||||
/* app.wxss — 全局共享样式 */
|
||||
|
||||
/* ========== CSS 变量 ========== */
|
||||
page {
|
||||
--color-price: #ff4444;
|
||||
--color-text-main: #333;
|
||||
--color-text-gray: #999;
|
||||
--color-border-light: #f0f0f0;
|
||||
--bg-white: #ffffff;
|
||||
--bg-gray-hover: #f5f5f5;
|
||||
|
||||
--radius-lg: 30rpx;
|
||||
--radius-normal: 25rpx;
|
||||
--radius-full: 50%;
|
||||
|
||||
--padding-base: 40rpx;
|
||||
--shadow-modal: 0 20rpx 60rpx rgba(0, 0, 0, 0.2);
|
||||
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* ========== 动画 ========== */
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 0.8; transform: scale(1); }
|
||||
50% { opacity: 1; transform: scale(1.2); }
|
||||
}
|
||||
|
||||
@keyframes modalShow {
|
||||
from { opacity: 0; transform: scale(0.9); }
|
||||
to { opacity: 1; transform: scale(1); }
|
||||
}
|
||||
|
||||
@keyframes marquee {
|
||||
0% { transform: translateX(100%); }
|
||||
100% { transform: translateX(-100%); }
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes fadeOut {
|
||||
from { opacity: 1; }
|
||||
to { opacity: 0; }
|
||||
}
|
||||
|
||||
@keyframes slideUp {
|
||||
from { transform: translateY(100%); }
|
||||
to { transform: translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes slideDown {
|
||||
from { transform: translateY(0); }
|
||||
to { transform: translateY(100%); }
|
||||
}
|
||||
|
||||
/* ========== 加载提示 ========== */
|
||||
.loading-toast {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
backdrop-filter: blur(10px);
|
||||
padding: 30rpx 50rpx;
|
||||
border-radius: var(--radius-normal);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 200rpx 0;
|
||||
box-sizing: border-box;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.loading-spinner {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
border: 6rpx solid rgba(255, 255, 255, 0.3);
|
||||
border-top-color: #fff;
|
||||
border-radius: var(--radius-full);
|
||||
animation: spin 1s linear infinite;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.loading-text {
|
||||
font-size: 26rpx;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* ========== 价格组件 ========== */
|
||||
.price-wrap {
|
||||
color: var(--color-price);
|
||||
font-weight: bold;
|
||||
}
|
||||
.price-icon {
|
||||
font-size: 24rpx;
|
||||
margin-right: 2rpx;
|
||||
}
|
||||
.price-integer {
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.price-decimal {
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
/* ========== 弹窗基础 ========== */
|
||||
.modal-mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
backdrop-filter: blur(5px);
|
||||
z-index: 1000;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
width: 600rpx;
|
||||
background: var(--bg-white);
|
||||
border-radius: var(--radius-lg);
|
||||
overflow: hidden;
|
||||
box-shadow: var(--shadow-modal);
|
||||
z-index: 1001;
|
||||
animation: modalShow 0.3s ease-out;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
padding: var(--padding-base);
|
||||
border-bottom: 2rpx solid var(--color-border-light);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.modal-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
color: var(--color-text-main);
|
||||
}
|
||||
|
||||
.modal-close {
|
||||
font-size: 40rpx;
|
||||
color: var(--color-text-gray);
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: var(--radius-full);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.modal-close:active {
|
||||
background: var(--bg-gray-hover);
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
max-height: 600rpx;
|
||||
padding: var(--padding-base);
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.modal-text {
|
||||
font-size: 28rpx;
|
||||
color: var(--color-text-main);
|
||||
line-height: 1.6;
|
||||
white-space: normal;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
/* ========== Flex 工具类 ========== */
|
||||
.flex-center {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.flex-between {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.flex-column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.flex-column-center {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.flex-1 {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.flex-shrink-0 {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.flex-wrap {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
/* ========== 文本工具类 ========== */
|
||||
.text-ellipsis {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.text-ellipsis-2 {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.text-ellipsis-3 {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 3;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.text-bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.text-gray {
|
||||
color: var(--color-text-gray);
|
||||
}
|
||||
|
||||
.text-main {
|
||||
color: var(--color-text-main);
|
||||
}
|
||||
|
||||
/* ========== 安全区域 ========== */
|
||||
.safe-bottom {
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
}
|
||||
|
||||
.safe-bottom-fixed {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
}
|
||||
|
||||
/* ========== 通用卡片 ========== */
|
||||
.card {
|
||||
background: var(--bg-white);
|
||||
border-radius: var(--radius-lg);
|
||||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.card-padding {
|
||||
padding: var(--padding-base);
|
||||
}
|
||||
|
||||
/* ========== 毛玻璃 ========== */
|
||||
.glass {
|
||||
background: rgba(255, 255, 255, 0.72);
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
}
|
||||
|
||||
.glass-dark {
|
||||
background: rgba(0, 0, 0, 0.55);
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
}
|
||||
|
||||
/* ========== 圆形头像 ========== */
|
||||
.avatar-circle {
|
||||
border-radius: var(--radius-full);
|
||||
border: 2rpx solid #fff;
|
||||
object-fit: cover;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.avatar-sm {
|
||||
width: 64rpx;
|
||||
height: 64rpx;
|
||||
}
|
||||
|
||||
.avatar-md {
|
||||
width: 88rpx;
|
||||
height: 88rpx;
|
||||
}
|
||||
|
||||
.avatar-lg {
|
||||
width: 120rpx;
|
||||
height: 120rpx;
|
||||
}
|
||||
|
||||
/* ========== 红点/角标 ========== */
|
||||
.badge-dot {
|
||||
position: absolute;
|
||||
top: -6rpx;
|
||||
right: -6rpx;
|
||||
width: 16rpx;
|
||||
height: 16rpx;
|
||||
background: #fa5151;
|
||||
border-radius: var(--radius-full);
|
||||
border: 2rpx solid #fff;
|
||||
}
|
||||
|
||||
.badge-num {
|
||||
position: absolute;
|
||||
top: -10rpx;
|
||||
right: -10rpx;
|
||||
min-width: 32rpx;
|
||||
height: 32rpx;
|
||||
line-height: 32rpx;
|
||||
padding: 0 8rpx;
|
||||
background: #fa5151;
|
||||
color: #fff;
|
||||
font-size: 20rpx;
|
||||
font-weight: 600;
|
||||
border-radius: 16rpx;
|
||||
text-align: center;
|
||||
border: 2rpx solid #fff;
|
||||
}
|
||||
|
||||
/* ========== 空状态 ========== */
|
||||
.empty-state {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 120rpx 40rpx;
|
||||
}
|
||||
|
||||
.empty-icon {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
margin-bottom: 30rpx;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.empty-text {
|
||||
font-size: 30rpx;
|
||||
color: var(--color-text-gray);
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.empty-subtext {
|
||||
font-size: 26rpx;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
/* ========== 分割线 ========== */
|
||||
.divider {
|
||||
height: 2rpx;
|
||||
background: var(--color-border-light);
|
||||
margin: 20rpx 0;
|
||||
}
|
||||
|
||||
.divider-light {
|
||||
height: 1rpx;
|
||||
background: rgba(0, 0, 0, 0.04);
|
||||
margin: 16rpx 0;
|
||||
}
|
||||
|
||||
.divider-gradient {
|
||||
height: 2rpx;
|
||||
background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.1), transparent);
|
||||
margin: 20rpx 0;
|
||||
}
|
||||
|
||||
/* ========== 固定底部按钮区 ========== */
|
||||
.fixed-bottom {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
padding: 20rpx 30rpx;
|
||||
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
|
||||
background: linear-gradient(transparent, rgba(255, 255, 255, 0.95) 30%);
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
/* ========== 列表项 ========== */
|
||||
.list-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 24rpx 28rpx;
|
||||
border-bottom: 1rpx solid rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
|
||||
.list-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.list-icon {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
margin-right: 16rpx;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.list-text {
|
||||
flex: 1;
|
||||
font-size: 28rpx;
|
||||
color: var(--color-text-main);
|
||||
}
|
||||
|
||||
.list-arrow {
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
opacity: 0.4;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* ========== 标签 ========== */
|
||||
.tag {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 4rpx 14rpx;
|
||||
border-radius: 999rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: 600;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.tag-primary {
|
||||
background: rgba(64, 156, 255, 0.1);
|
||||
color: #409cff;
|
||||
}
|
||||
|
||||
.tag-success {
|
||||
background: rgba(82, 196, 26, 0.1);
|
||||
color: #52c41a;
|
||||
}
|
||||
|
||||
.tag-warning {
|
||||
background: rgba(250, 173, 20, 0.1);
|
||||
color: #faad14;
|
||||
}
|
||||
|
||||
.tag-danger {
|
||||
background: rgba(255, 77, 79, 0.1);
|
||||
color: #ff4d4f;
|
||||
}
|
||||
|
||||
.tag-gold {
|
||||
background: rgba(201, 169, 98, 0.1);
|
||||
color: #C9A962;
|
||||
}
|
||||
|
||||
/* ========== 页面容器 ========== */
|
||||
.page-container {
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.page-bg {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* ========== 按钮 ========== */
|
||||
.btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 48rpx;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
border: none;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.btn:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
/* 主按钮(全宽) */
|
||||
.btn-primary {
|
||||
width: 100%;
|
||||
height: 96rpx;
|
||||
line-height: 96rpx;
|
||||
font-size: 34rpx;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.btn-primary--gold {
|
||||
background: linear-gradient(135deg, #C9A962, #D4B56A);
|
||||
box-shadow: 0 8rpx 20rpx rgba(201, 169, 98, 0.3);
|
||||
}
|
||||
|
||||
.btn-primary--green {
|
||||
background: linear-gradient(135deg, #52c41a, #389e0d);
|
||||
box-shadow: 0 8rpx 20rpx rgba(82, 196, 26, 0.3);
|
||||
}
|
||||
|
||||
.btn-primary--blue {
|
||||
background: linear-gradient(135deg, #409cff, #3080e0);
|
||||
box-shadow: 0 8rpx 20rpx rgba(64, 156, 255, 0.3);
|
||||
}
|
||||
|
||||
.btn-primary--orange {
|
||||
background: linear-gradient(135deg, #ffb347, #ff8c1a);
|
||||
box-shadow: 0 8rpx 20rpx rgba(255, 140, 26, 0.3);
|
||||
}
|
||||
|
||||
.btn-primary--purple {
|
||||
background: linear-gradient(135deg, #6a11cb, #2575fc);
|
||||
box-shadow: 0 8rpx 20rpx rgba(106, 17, 203, 0.3);
|
||||
}
|
||||
|
||||
.btn-primary--red {
|
||||
background: linear-gradient(135deg, #ff4d4f, #cf1322);
|
||||
box-shadow: 0 8rpx 20rpx rgba(255, 77, 79, 0.3);
|
||||
}
|
||||
|
||||
/* 次要按钮 */
|
||||
.btn-secondary {
|
||||
background: rgba(0, 0, 0, 0.04);
|
||||
color: var(--color-text-main);
|
||||
font-size: 28rpx;
|
||||
padding: 16rpx 32rpx;
|
||||
}
|
||||
|
||||
.btn-secondary:active {
|
||||
background: rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
/* 小型按钮 */
|
||||
.btn-sm {
|
||||
padding: 14rpx 32rpx;
|
||||
font-size: 26rpx;
|
||||
color: #fff;
|
||||
border-radius: 40rpx;
|
||||
}
|
||||
|
||||
.btn-sm--gold {
|
||||
background: linear-gradient(135deg, #ffcc00, #ffaa00);
|
||||
box-shadow: 0 6rpx 16rpx rgba(255, 170, 0, 0.3);
|
||||
}
|
||||
|
||||
.btn-sm--green {
|
||||
background: linear-gradient(135deg, #52c41a, #389e0d);
|
||||
box-shadow: 0 6rpx 16rpx rgba(82, 196, 26, 0.3);
|
||||
}
|
||||
|
||||
.btn-sm--blue {
|
||||
background: linear-gradient(135deg, #409cff, #3080e0);
|
||||
box-shadow: 0 6rpx 16rpx rgba(64, 156, 255, 0.3);
|
||||
}
|
||||
|
||||
.btn-sm--red {
|
||||
background: linear-gradient(135deg, #ff4d4f, #cf1322);
|
||||
box-shadow: 0 6rpx 16rpx rgba(255, 77, 79, 0.3);
|
||||
}
|
||||
|
||||
.btn-sm--dark {
|
||||
background: linear-gradient(135deg, #3d4f66, #2c3e50);
|
||||
box-shadow: 0 6rpx 16rpx rgba(44, 62, 80, 0.3);
|
||||
}
|
||||
|
||||
/* 幽灵按钮(描边) */
|
||||
.btn-ghost {
|
||||
background: transparent;
|
||||
border: 2rpx solid currentColor;
|
||||
padding: 14rpx 32rpx;
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.btn-ghost--primary {
|
||||
color: #409cff;
|
||||
border-color: #409cff;
|
||||
}
|
||||
|
||||
.btn-ghost--gold {
|
||||
color: #C9A962;
|
||||
border-color: #C9A962;
|
||||
}
|
||||
|
||||
/* 禁用状态 */
|
||||
.btn[disabled],
|
||||
.btn-disabled {
|
||||
opacity: 0.5;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* ========== 输入框 ========== */
|
||||
.input-rounded {
|
||||
width: 100%;
|
||||
height: 88rpx;
|
||||
background: #fff;
|
||||
border-radius: 44rpx;
|
||||
padding: 0 32rpx;
|
||||
font-size: 28rpx;
|
||||
color: var(--color-text-main);
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.input-rounded--dark {
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
color: #fff;
|
||||
border: 1rpx solid rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
.input-rounded--dark::placeholder {
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
.input-inline {
|
||||
flex: 1;
|
||||
font-size: 32rpx;
|
||||
color: var(--color-text-main);
|
||||
height: 50rpx;
|
||||
line-height: 50rpx;
|
||||
border: none;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.input-box {
|
||||
background: #F7F3ED;
|
||||
border-radius: 24rpx;
|
||||
padding: 0 24rpx;
|
||||
}
|
||||
|
||||
/* ========== 搜索框 ========== */
|
||||
.search-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: #f0f0f0;
|
||||
border-radius: 40rpx;
|
||||
padding: 0 20rpx;
|
||||
height: 68rpx;
|
||||
}
|
||||
|
||||
.search-box--glass {
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
backdrop-filter: blur(20px);
|
||||
border: 1rpx solid rgba(255, 255, 255, 0.3);
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.06);
|
||||
height: 84rpx;
|
||||
border-radius: 50rpx;
|
||||
padding: 0 28rpx;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
font-size: 28rpx;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
|
||||
.search-icon {
|
||||
width: 32rpx;
|
||||
height: 32rpx;
|
||||
opacity: 0.5;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* ========== Tab 标签栏 ========== */
|
||||
.tab-bar {
|
||||
display: flex;
|
||||
background: #fff;
|
||||
border-bottom: 1rpx solid #f0f0f0;
|
||||
}
|
||||
|
||||
.tab-item {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 24rpx 0;
|
||||
position: relative;
|
||||
color: #666;
|
||||
font-size: 28rpx;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
|
||||
.tab-item--active {
|
||||
color: var(--color-price);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.tab-indicator {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 60rpx;
|
||||
height: 6rpx;
|
||||
background: var(--color-price);
|
||||
border-radius: 3rpx;
|
||||
}
|
||||
|
||||
/* 胶囊式 Tab */
|
||||
.tab-capsule {
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 60rpx;
|
||||
padding: 0 30rpx;
|
||||
margin-right: 20rpx;
|
||||
border-radius: 30rpx;
|
||||
background: #f5f5f5;
|
||||
color: #666;
|
||||
font-size: 28rpx;
|
||||
flex-shrink: 0;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.tab-capsule--active {
|
||||
background: #e8f5e9;
|
||||
color: #2e7d32;
|
||||
font-weight: 500;
|
||||
box-shadow: 0 4rpx 12rpx rgba(46, 125, 50, 0.1);
|
||||
}
|
||||
|
||||
/* ========== 加载遮罩 ========== */
|
||||
.loading-mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.loading-mask--dark {
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
|
||||
.loading-mask--light {
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
}
|
||||
|
||||
/* 旋转器尺寸变体 */
|
||||
.spinner {
|
||||
border-radius: var(--radius-full);
|
||||
animation: spin 0.8s linear infinite;
|
||||
}
|
||||
|
||||
.spinner--sm {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border: 3rpx solid rgba(0, 0, 0, 0.08);
|
||||
border-top-color: var(--color-text-main);
|
||||
}
|
||||
|
||||
.spinner--md {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
border: 5rpx solid rgba(0, 0, 0, 0.08);
|
||||
border-top-color: var(--color-text-main);
|
||||
}
|
||||
|
||||
.spinner--lg {
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
border: 6rpx solid rgba(0, 0, 0, 0.08);
|
||||
border-top-color: var(--color-text-main);
|
||||
}
|
||||
|
||||
.spinner--white {
|
||||
border-color: rgba(255, 255, 255, 0.3);
|
||||
border-top-color: #fff;
|
||||
}
|
||||
|
||||
/* ========== 刷新按钮 ========== */
|
||||
.refresh-btn {
|
||||
position: fixed;
|
||||
top: 36rpx;
|
||||
right: 32rpx;
|
||||
width: 56rpx;
|
||||
height: 56rpx;
|
||||
border-radius: var(--radius-full);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 20;
|
||||
}
|
||||
|
||||
.refresh-btn--light {
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
backdrop-filter: blur(12rpx);
|
||||
border: 1rpx solid rgba(255, 255, 255, 0.6);
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.refresh-btn--dark {
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
backdrop-filter: blur(10rpx);
|
||||
}
|
||||
|
||||
.refresh-icon {
|
||||
width: 28rpx;
|
||||
height: 28rpx;
|
||||
}
|
||||
|
||||
/* ========== 状态标签 ========== */
|
||||
.status-tag {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 6rpx 16rpx;
|
||||
border-radius: 20rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.status-tag--danger {
|
||||
background: #fff5f5;
|
||||
color: #ff6b6b;
|
||||
}
|
||||
|
||||
.status-tag--success {
|
||||
background: #f0fff0;
|
||||
color: #52c41a;
|
||||
}
|
||||
|
||||
.status-tag--warning {
|
||||
background: #fffbe6;
|
||||
color: #faad14;
|
||||
}
|
||||
|
||||
.status-tag--info {
|
||||
background: #e6f7ff;
|
||||
color: #1890ff;
|
||||
}
|
||||
|
||||
.status-tag--default {
|
||||
background: #f5f5f5;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
/* ========== 加载更多 ========== */
|
||||
.load-more {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 40rpx 0;
|
||||
}
|
||||
|
||||
.load-more-text {
|
||||
font-size: 26rpx;
|
||||
color: var(--color-text-gray);
|
||||
}
|
||||
|
||||
.no-more {
|
||||
text-align: center;
|
||||
padding: 40rpx 0;
|
||||
font-size: 26rpx;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ Component({
|
||||
progressInterval: null,
|
||||
positionClass: 'top',
|
||||
|
||||
// 滑动相关
|
||||
touchStartY: 0,
|
||||
touchStartX: 0,
|
||||
currentY: 0,
|
||||
@@ -317,20 +316,17 @@ Component({
|
||||
let path = '';
|
||||
let queryParam = null;
|
||||
|
||||
// 根据 notificationType 或消息字段判断
|
||||
if (data.notificationType === 'cs' || msg.teamId) {
|
||||
// 客服消息
|
||||
const teamId = data.teamId || msg.teamId;
|
||||
path = '/pages/kefuliaotian/kefuliaotian';
|
||||
path = '/pages/cs-chat/cs-chat';
|
||||
queryParam = { teamId: teamId };
|
||||
} else if (data.notificationType === 'group' || msg.groupId) {
|
||||
// 群聊消息
|
||||
const groupId = data.groupId || msg.groupId;
|
||||
const orderId = data.orderId || msg.orderId || '';
|
||||
const groupName = data.groupName || '订单群聊';
|
||||
const groupAvatar = data.groupAvatar || '';
|
||||
const isCross = data.isCross || msg.isCross || 0;
|
||||
path = '/pages/qunliaotian/qunliaotian';
|
||||
path = '/pages/group-chat/group-chat';
|
||||
queryParam = {
|
||||
groupId,
|
||||
orderId,
|
||||
@@ -339,11 +335,10 @@ Component({
|
||||
isCross
|
||||
};
|
||||
} else {
|
||||
// 默认私聊
|
||||
const toUserId = data.senderId || msg.senderId;
|
||||
const toName = data.senderName || '用户';
|
||||
const toAvatar = data.avatar || '';
|
||||
path = '/pages/liaotian/liaotian';
|
||||
path = '/pages/chat/chat';
|
||||
queryParam = {
|
||||
toUserId,
|
||||
toName,
|
||||
@@ -357,11 +352,11 @@ Component({
|
||||
url: `${path}?data=${encoded}`,
|
||||
fail: (err) => {
|
||||
console.error('通知跳转失败:', err);
|
||||
wx.switchTab({ url: '/pages/xiaoxi/xiaoxi' });
|
||||
wx.switchTab({ url: '/pages/messages/messages' });
|
||||
}
|
||||
});
|
||||
} else {
|
||||
wx.switchTab({ url: '/pages/xiaoxi/xiaoxi' });
|
||||
wx.switchTab({ url: '/pages/messages/messages' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ Component({
|
||||
isFullscreen: false,
|
||||
timer: null,
|
||||
|
||||
// 悬浮窗相关数据
|
||||
isMinimized: false,
|
||||
floatX: 20,
|
||||
floatY: 200,
|
||||
@@ -163,7 +162,7 @@ Component({
|
||||
this.setData({ muteChecked: e.detail.value.length > 0 });
|
||||
},
|
||||
|
||||
// 🆕 替换原有的 onPreviewImage,改用自定义预览(不触发 onShow)
|
||||
// 自定义图片预览
|
||||
onCustomPreview(e) {
|
||||
const index = e.currentTarget.dataset.index;
|
||||
const urls = this.data.processedImages.map(img => img.url);
|
||||
@@ -174,7 +173,6 @@ Component({
|
||||
});
|
||||
},
|
||||
|
||||
// 🆕 关闭自定义预览
|
||||
onCloseCustomPreview() {
|
||||
this.setData({
|
||||
showCustomPreview: false,
|
||||
@@ -225,7 +223,7 @@ Component({
|
||||
if (app.globalData.morentouxiang) {
|
||||
avatarUrl = app.globalData.morentouxiang;
|
||||
} else {
|
||||
// 使用内嵌的默认头像 base64(灰色圆形),确保绝对显示,不依赖外部图片
|
||||
// 默认头像
|
||||
avatarUrl = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0iI2NjY2NjYyIvPjxwYXRoIGQ9Ik01MCAyNWMtMTMuOCAwLTI1IDExLjItMjUgMjUgMCAzLjIgMS4yIDYuMSAzLjIgOC4zQzM0LjQgNzAuNyA0Mi4xIDc1IDUwIDc1czE1LjYtNC4zIDIxLjgtMTEuN0M3My44IDU2LjEgNzUgNTMuMiA3NSA1MGMwLTEzLjgtMTEuMi0yNS0yNS0yNXoiIGZpbGw9IiNmZmZmZmYiLz48L3N2Zz4=';
|
||||
}
|
||||
|
||||
@@ -319,7 +317,7 @@ Component({
|
||||
return false;
|
||||
},
|
||||
|
||||
// 🆕 阻止事件冒泡(用于预览遮罩内部点击不关闭)
|
||||
// 阻止事件冒泡
|
||||
stopPropagation() {}
|
||||
}
|
||||
});
|
||||
@@ -1,6 +1,5 @@
|
||||
<!-- components/popup-notice/popup-notice.wxml -->
|
||||
|
||||
<!-- 全屏弹窗遮罩层(完全不变) -->
|
||||
<view class="popup-mask" wx:if="{{visible}}" catchtouchmove="preventMove">
|
||||
<view class="popup-container {{isFullscreen ? 'fullscreen' : ''}}">
|
||||
<!-- 右上角操作按钮组 -->
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
transform: translateZ(0);
|
||||
}
|
||||
|
||||
/* 以下原有 movable-view 相关样式已弃用,但保留以维持代码完整(用户要求不删代码) */
|
||||
/* 弃用样式 */
|
||||
.floating-area {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -7,26 +7,26 @@ const roleCfg = {
|
||||
name: '点单老板',
|
||||
tabList: [
|
||||
{ pagePath: 'pages/index/index', text: '商城', iconPath: '/images/zhuye.png', selectedIconPath: '/images/zhuye.png' },
|
||||
{ pagePath: 'pages/fenlei/fenlei', text: '分类', iconPath: '/images/fenlei.png', selectedIconPath: '/images/fenlei.png' },
|
||||
{ pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' },
|
||||
{ pagePath: 'pages/wode/wode', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' },
|
||||
{ pagePath: 'pages/category/category', text: '分类', iconPath: '/images/fenlei.png', selectedIconPath: '/images/fenlei.png' },
|
||||
{ pagePath: 'pages/messages/messages', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' },
|
||||
{ pagePath: 'pages/mine/mine', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' },
|
||||
],
|
||||
},
|
||||
dashou: {
|
||||
name: '打手',
|
||||
tabList: [
|
||||
{ pagePath: 'pages/jiedan/jiedan', text: '接单池', iconPath: '/images/jiedanchi.png', selectedIconPath: '/images/jiedanchi.png' },
|
||||
{ pagePath: 'pages/dashoudingdan/dashoudingdan', text: '订单', iconPath: '/images/dingdan.png', selectedIconPath: '/images/dingdan.png' },
|
||||
{ pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' },
|
||||
{ pagePath: 'pages/dashouduan/dashouduan', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' },
|
||||
{ pagePath: 'pages/accept-order/accept-order', text: '接单池', iconPath: '/images/jiedanchi.png', selectedIconPath: '/images/jiedanchi.png' },
|
||||
{ pagePath: 'pages/fighter-orders/fighter-orders', text: '订单', iconPath: '/images/dingdan.png', selectedIconPath: '/images/dingdan.png' },
|
||||
{ pagePath: 'pages/messages/messages', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' },
|
||||
{ pagePath: 'pages/fighter/fighter', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' },
|
||||
],
|
||||
},
|
||||
shangjia: {
|
||||
name: '商家',
|
||||
tabList: [
|
||||
{ pagePath: 'pages/sjdingdan/sjdingdan', text: '订单', iconPath: '/images/dingdan.png', selectedIconPath: '/images/dingdan.png' },
|
||||
{ pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' },
|
||||
{ pagePath: 'pages/shangjiaduan/shangjiaduan', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' },
|
||||
{ pagePath: 'pages/merchant-orders/merchant-orders', text: '订单', iconPath: '/images/dingdan.png', selectedIconPath: '/images/dingdan.png' },
|
||||
{ pagePath: 'pages/messages/messages', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' },
|
||||
{ pagePath: 'pages/merchant/merchant', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' },
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
data-index="{{index}}"
|
||||
catchtap="switchTab"
|
||||
>
|
||||
<view class="badge-container" wx:if="{{item.pagePath === 'pages/xiaoxi/xiaoxi' && badgeText}}">
|
||||
<view class="badge-container" wx:if="{{item.pagePath === 'pages/messages/messages' && badgeText}}">
|
||||
<view class="tab-badge">{{badgeText}}</view>
|
||||
</view>
|
||||
<image
|
||||
|
||||
@@ -364,7 +364,7 @@ Page({
|
||||
|
||||
// 跳转到充值页面(原封不动)
|
||||
goToChongzhiPage(failureType, huiyuanId = null, requiredYajin = 0) {
|
||||
let url = '/pages/dashouchongzhi/dashouchongzhi';
|
||||
let url = '/pages/fighter-recharge/fighter-recharge';
|
||||
let params = {};
|
||||
|
||||
switch (failureType) {
|
||||
@@ -193,7 +193,7 @@ Page({
|
||||
success: (modalRes) => {
|
||||
if (modalRes.confirm) {
|
||||
wx.navigateTo({
|
||||
url: '/pages/kaohe_dafen/kaohe_dafen?jilu_id=' + jiluId
|
||||
url: '/pages/assess-score/assess-score?jilu_id=' + jiluId
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -245,7 +245,6 @@
|
||||
animation: spin 0.8s linear infinite;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
|
||||
/* 弹窗 */
|
||||
.modal-mask {
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/kaohe_jinpai/kaohe_jinpai.js
|
||||
// pages/assess-gold/assess-gold.js
|
||||
const app = getApp();
|
||||
import request from '../../utils/request.js';
|
||||
|
||||
@@ -433,7 +433,7 @@ Page({
|
||||
toAvatar: fullAvatar
|
||||
};
|
||||
wx.navigateTo({
|
||||
url: '/pages/liaotian/liaotian?data=' + encodeURIComponent(JSON.stringify(param)),
|
||||
url: '/pages/chat/chat?data=' + encodeURIComponent(JSON.stringify(param)),
|
||||
fail: (err) => {
|
||||
wx.showToast({ title: '打开聊天失败', icon: 'none' });
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- pages/kaohe_jinpai/kaohe_jinpai.wxml -->
|
||||
<!-- pages/assess-gold/assess-gold.wxml -->
|
||||
<view class="page-root">
|
||||
<!-- 顶部Tab切换 -->
|
||||
<view class="tab-bar">
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/kaohe_jinpai/kaohe_jinpai.wxss - 晨雾微光风格 */
|
||||
/* pages/assess-gold/assess-gold.wxss - 晨雾微光风格 */
|
||||
.page-root {
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(135deg, #F5F7FA 0%, #E4E8F0 100%);
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/kaohe_jilu/kaohe_jilu.js
|
||||
// pages/assess-log/assess-log.js
|
||||
const app = getApp();
|
||||
import request from '../../utils/request.js';
|
||||
|
||||
@@ -141,7 +141,7 @@ Page({
|
||||
goJudge(e) {
|
||||
const item = e.currentTarget.dataset.item;
|
||||
if (!item) return;
|
||||
wx.navigateTo({ url: '/pages/kaohe_dafen/kaohe_dafen?jilu_id=' + item.jilu_id });
|
||||
wx.navigateTo({ url: '/pages/assess-score/assess-score?jilu_id=' + item.jilu_id });
|
||||
},
|
||||
|
||||
// 阻止冒泡
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- pages/kaohe_jilu/kaohe_jilu.wxml -->
|
||||
<!-- pages/assess-log/assess-log.wxml -->
|
||||
<view class="page-root">
|
||||
<!-- 顶部筛选区 -->
|
||||
<view class="filter-bar">
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/kaohe_jilu/kaohe_jilu.wxss - 晨露微光风格(左右均等边距) */
|
||||
/* pages/assess-log/assess-log.wxss - 晨露微光风格(左右均等边距) */
|
||||
page {
|
||||
background: linear-gradient(135deg, #FDFBF7 0%, #F2EFE9 100%);
|
||||
color: #4A4A4A;
|
||||
@@ -260,4 +260,3 @@ page {
|
||||
animation: spin 0.8s linear infinite;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/kaohe_dafen/kaohe_dafen.js
|
||||
// pages/assess-score/assess-score.js
|
||||
const app = getApp();
|
||||
import request from '../../utils/request.js';
|
||||
import { openPrivateChat, buildDashouPeerId } from '../../utils/im-user.js';
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- pages/kaohe_dafen/kaohe_dafen.wxml -->
|
||||
<!-- pages/assess-score/assess-score.wxml -->
|
||||
<view class="root-page">
|
||||
<view class="scroll-container" scroll-y="true" bindscrolltolower="onReachBottom">
|
||||
<view class="list">
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/kaoheguan/kaoheguan.js
|
||||
// pages/assessor/assessor.js
|
||||
// 只新增了两个字段的接收,其余所有代码未变
|
||||
import request from '../../utils/request.js';
|
||||
import {
|
||||
@@ -48,7 +48,7 @@ Page({
|
||||
_planetTimers: {},
|
||||
|
||||
onLoad() {
|
||||
wx.redirectTo({ url: '/pages/dashouduan/dashouduan' });
|
||||
wx.redirectTo({ url: '/pages/fighter/fighter' });
|
||||
return;
|
||||
const ossUrl = app.globalData.ossImageUrl || '';
|
||||
const iconBase = 'beijing/kaohe/';
|
||||
@@ -191,12 +191,12 @@ Page({
|
||||
goToWithdraw() {
|
||||
const yue = this.data.kaoheData.yue || 0;
|
||||
wx.navigateTo({
|
||||
url: `/pages/tixian/tixian?amount=${yue}&from=kaoheguan`
|
||||
url: `/pages/withdraw/withdraw?amount=${yue}&from=kaoheguan`
|
||||
});
|
||||
},
|
||||
goToDafen() { wx.navigateTo({ url: '/pages/kaohe_dafen/kaohe_dafen' }); },
|
||||
goToJilu() { wx.navigateTo({ url: '/pages/kaohe_jilu/kaohe_jilu' }); },
|
||||
goToZhongxin() { wx.navigateTo({ url: '/pages/kaohe_zhongxin/kaohe_zhongxin' }); },
|
||||
goToDafen() { wx.navigateTo({ url: '/pages/assess-score/assess-score' }); },
|
||||
goToJilu() { wx.navigateTo({ url: '/pages/assess-log/assess-log' }); },
|
||||
goToZhongxin() { wx.navigateTo({ url: '/pages/assess-center/assess-center' }); },
|
||||
|
||||
onPlanetTouch(e) {
|
||||
const id = e.currentTarget.dataset.id;
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- pages/kaoheguan/kaoheguan.wxml -->
|
||||
<!-- pages/assessor/assessor.wxml -->
|
||||
<view class="universe-root">
|
||||
<!-- 全屏弱化背景图 -->
|
||||
<image class="full-bg" src="{{icons.bgImage}}" mode="aspectFill" />
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/kaoheguan/kaoheguan.wxss — 完整版:适度背景 + 整体下移 */
|
||||
/* pages/assessor/assessor.wxss — 完整版:适度背景 + 整体下移 */
|
||||
|
||||
page {
|
||||
background: #0a0c14;
|
||||
@@ -1,80 +1,52 @@
|
||||
// pages/fenlei/fenlei.js
|
||||
// pages/category/category.js
|
||||
const app = getApp()
|
||||
|
||||
Page({
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
// 全局变量引用
|
||||
ossImageUrl: '',
|
||||
|
||||
// 搜索相关
|
||||
searchText: '',
|
||||
showSearchResult: false,
|
||||
searchResults: [],
|
||||
isSearching: false,
|
||||
|
||||
// 页面数据
|
||||
shangpinleixing: [],
|
||||
shangpinzhuanqu: [],
|
||||
shangpinliebiao: [],
|
||||
|
||||
// 状态控制
|
||||
selectedLeixingId: null,
|
||||
selectedZhuanquId: null,
|
||||
filteredZhuanquList: [], // 当前类型下的专区列表
|
||||
filteredShangpinList: [], // 当前专区下的商品列表
|
||||
zhuanquByLeixing: {}, // 类型->专区映射对象
|
||||
shangpinByZhuanqu: {}, // 专区->商品映射对象
|
||||
zhuanquGoodsCount: {}, // 专区商品数量统计
|
||||
|
||||
// UI状态
|
||||
filteredZhuanquList: [],
|
||||
filteredShangpinList: [],
|
||||
zhuanquByLeixing: {},
|
||||
shangpinByZhuanqu: {},
|
||||
zhuanquGoodsCount: {},
|
||||
isLoading: false,
|
||||
hasInitialized: false
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
// 获取全局变量
|
||||
this.setData({
|
||||
ossImageUrl: app.globalData.ossImageUrl
|
||||
})
|
||||
|
||||
// 初始化数据
|
||||
this.initPageData()
|
||||
},
|
||||
|
||||
onShow() {
|
||||
// 原有代码...
|
||||
|
||||
// 🆕 注册通知组件
|
||||
this.registerNotificationComponent();
|
||||
},
|
||||
},
|
||||
|
||||
// 🆕 新增:注册通知组件
|
||||
registerNotificationComponent() {
|
||||
registerNotificationComponent() {
|
||||
const app = getApp();
|
||||
const notificationComp = this.selectComponent('#global-notification');
|
||||
|
||||
if (notificationComp && notificationComp.showNotification) {
|
||||
console.log('🏪 商城页面注册通知组件');
|
||||
app.globalData.globalNotification = {
|
||||
show: (data) => notificationComp.showNotification(data),
|
||||
hide: () => notificationComp.hideNotification()
|
||||
};
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* 初始化页面数据
|
||||
*/
|
||||
initPageData() {
|
||||
const that = this
|
||||
this.setData({ isLoading: true })
|
||||
|
||||
// 检查全局变量是否已有数据
|
||||
if (app.globalData.shangpinleixing && app.globalData.shangpinleixing.length > 0) {
|
||||
this.initFromGlobalData()
|
||||
} else {
|
||||
@@ -82,20 +54,15 @@ registerNotificationComponent() {
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 从全局变量初始化数据
|
||||
*/
|
||||
initFromGlobalData() {
|
||||
const leixingList = app.globalData.shangpinleixing || []
|
||||
const zhuanquList = app.globalData.shangpinzhuanqu || []
|
||||
const shangpinList = app.globalData.shangpinliebiao || []
|
||||
|
||||
// 构建映射关系对象
|
||||
const zhuanquByLeixing = {}
|
||||
const shangpinByZhuanqu = {}
|
||||
const zhuanquGoodsCount = {}
|
||||
|
||||
// 1. 构建专区映射 (按类型分组)
|
||||
zhuanquList.forEach(zhuanqu => {
|
||||
const leixingId = zhuanqu.leixing_id
|
||||
if (!zhuanquByLeixing[leixingId]) {
|
||||
@@ -104,7 +71,6 @@ registerNotificationComponent() {
|
||||
zhuanquByLeixing[leixingId].push(zhuanqu)
|
||||
})
|
||||
|
||||
// 2. 构建商品映射 (按专区分组)并统计数量
|
||||
shangpinList.forEach(shangpin => {
|
||||
const zhuanquId = shangpin.zhuanqu_id
|
||||
if (zhuanquId) {
|
||||
@@ -112,17 +78,13 @@ registerNotificationComponent() {
|
||||
shangpinByZhuanqu[zhuanquId] = []
|
||||
zhuanquGoodsCount[zhuanquId] = 0
|
||||
}
|
||||
|
||||
// 处理价格显示
|
||||
const jiage = parseFloat(shangpin.jiage) || 0
|
||||
const priceInteger = Math.floor(jiage)
|
||||
let priceDecimal = '00'
|
||||
|
||||
const decimalPart = (jiage - priceInteger).toFixed(2)
|
||||
if (decimalPart > 0) {
|
||||
priceDecimal = decimalPart.toString().split('.')[1]
|
||||
}
|
||||
|
||||
shangpinByZhuanqu[zhuanquId].push({
|
||||
id: shangpin.id,
|
||||
biaoqian: shangpin.biaoqian,
|
||||
@@ -132,15 +94,12 @@ registerNotificationComponent() {
|
||||
tupian_url: shangpin.tupian_url,
|
||||
duiwai_xiaoliang: shangpin.duiwai_xiaoliang || 0
|
||||
})
|
||||
|
||||
zhuanquGoodsCount[zhuanquId] += 1
|
||||
}
|
||||
})
|
||||
|
||||
// 设置初始选中状态(第一个类型和第一个专区)
|
||||
const firstLeixing = leixingList[0]
|
||||
let firstZhuanquId = null
|
||||
|
||||
if (firstLeixing && zhuanquByLeixing[firstLeixing.id]) {
|
||||
firstZhuanquId = zhuanquByLeixing[firstLeixing.id][0]?.id || null
|
||||
}
|
||||
@@ -155,15 +114,11 @@ registerNotificationComponent() {
|
||||
selectedLeixingId: firstLeixing?.id || null,
|
||||
selectedZhuanquId: firstZhuanquId
|
||||
}, () => {
|
||||
// 筛选数据
|
||||
this.filterData()
|
||||
this.setData({ isLoading: false, hasInitialized: true })
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 加载所有商品数据
|
||||
*/
|
||||
loadAllShangpinData() {
|
||||
const that = this
|
||||
wx.request({
|
||||
@@ -175,13 +130,9 @@ registerNotificationComponent() {
|
||||
success(res) {
|
||||
if (res.statusCode === 200 && res.data) {
|
||||
const data = res.data
|
||||
|
||||
// 存储到全局变量
|
||||
app.globalData.shangpinleixing = data.shangpinleixing || []
|
||||
app.globalData.shangpinzhuanqu = data.shangpinzhuanqu || []
|
||||
app.globalData.shangpinliebiao = data.shangpinliebiao || []
|
||||
|
||||
// 从全局变量初始化
|
||||
that.initFromGlobalData()
|
||||
} else {
|
||||
that.handleLoadError()
|
||||
@@ -194,9 +145,6 @@ registerNotificationComponent() {
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 处理加载错误
|
||||
*/
|
||||
handleLoadError() {
|
||||
wx.showToast({
|
||||
title: '加载失败,请重试',
|
||||
@@ -205,46 +153,30 @@ registerNotificationComponent() {
|
||||
this.setData({ isLoading: false })
|
||||
},
|
||||
|
||||
/**
|
||||
* 筛选数据
|
||||
*/
|
||||
filterData() {
|
||||
const { selectedLeixingId, selectedZhuanquId, zhuanquByLeixing, shangpinByZhuanqu } = this.data
|
||||
|
||||
// 1. 筛选专区列表
|
||||
const filteredZhuanquList = zhuanquByLeixing[selectedLeixingId] || []
|
||||
|
||||
// 2. 筛选商品列表
|
||||
let filteredShangpinList = []
|
||||
if (selectedZhuanquId) {
|
||||
filteredShangpinList = shangpinByZhuanqu[selectedZhuanquId] || []
|
||||
} else if (filteredZhuanquList.length > 0) {
|
||||
// 如果没有选中的专区,默认显示第一个专区的商品
|
||||
const firstZhuanquId = filteredZhuanquList[0].id
|
||||
filteredShangpinList = shangpinByZhuanqu[firstZhuanquId] || []
|
||||
this.setData({ selectedZhuanquId: firstZhuanquId })
|
||||
}
|
||||
|
||||
this.setData({
|
||||
filteredZhuanquList: filteredZhuanquList,
|
||||
filteredShangpinList: filteredShangpinList
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 选择商品类型
|
||||
*/
|
||||
selectLeixing(e) {
|
||||
const leixingId = e.currentTarget.dataset.id
|
||||
|
||||
if (this.data.selectedLeixingId === leixingId) {
|
||||
return
|
||||
}
|
||||
|
||||
// 获取该类型下的第一个专区
|
||||
const zhuanquList = this.data.zhuanquByLeixing[leixingId] || []
|
||||
const firstZhuanquId = zhuanquList.length > 0 ? zhuanquList[0].id : null
|
||||
|
||||
this.setData({
|
||||
selectedLeixingId: leixingId,
|
||||
selectedZhuanquId: firstZhuanquId
|
||||
@@ -253,20 +185,14 @@ registerNotificationComponent() {
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 选择商品专区
|
||||
*/
|
||||
selectZhuanqu(e) {
|
||||
const zhuanquId = e.currentTarget.dataset.id
|
||||
|
||||
if (this.data.selectedZhuanquId === zhuanquId) {
|
||||
return
|
||||
}
|
||||
|
||||
this.setData({
|
||||
selectedZhuanquId: zhuanquId
|
||||
}, () => {
|
||||
// 筛选商品列表
|
||||
const filteredShangpinList = this.data.shangpinByZhuanqu[zhuanquId] || []
|
||||
this.setData({
|
||||
filteredShangpinList: filteredShangpinList
|
||||
@@ -274,18 +200,12 @@ registerNotificationComponent() {
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 搜索框输入事件
|
||||
*/
|
||||
onSearchInput(e) {
|
||||
this.setData({
|
||||
searchText: e.detail.value
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 点击搜索按钮
|
||||
*/
|
||||
onSearchTap() {
|
||||
const searchText = this.data.searchText.trim()
|
||||
if (!searchText) {
|
||||
@@ -295,14 +215,9 @@ registerNotificationComponent() {
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 开始搜索
|
||||
this.startSearch(searchText)
|
||||
},
|
||||
|
||||
/**
|
||||
* 键盘搜索事件(回车键)
|
||||
*/
|
||||
onSearchConfirm(e) {
|
||||
const searchText = e.detail.value.trim()
|
||||
if (!searchText) {
|
||||
@@ -312,40 +227,28 @@ registerNotificationComponent() {
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
this.setData({
|
||||
searchText: searchText
|
||||
})
|
||||
|
||||
// 开始搜索
|
||||
this.startSearch(searchText)
|
||||
},
|
||||
|
||||
/**
|
||||
* 执行搜索
|
||||
*/
|
||||
startSearch(searchText) {
|
||||
this.setData({
|
||||
isSearching: true,
|
||||
showSearchResult: true
|
||||
})
|
||||
|
||||
// 本地搜索
|
||||
const allShangpin = this.data.shangpinliebiao
|
||||
const results = []
|
||||
|
||||
for (const item of allShangpin) {
|
||||
if (item.biaoqian && item.biaoqian.toLowerCase().includes(searchText.toLowerCase())) {
|
||||
// 处理价格显示
|
||||
const jiage = parseFloat(item.jiage) || 0
|
||||
const priceInteger = Math.floor(jiage)
|
||||
let priceDecimal = '00'
|
||||
|
||||
const decimalPart = (jiage - priceInteger).toFixed(2)
|
||||
if (decimalPart > 0) {
|
||||
priceDecimal = decimalPart.toString().split('.')[1]
|
||||
}
|
||||
|
||||
results.push({
|
||||
id: item.id,
|
||||
biaoqian: item.biaoqian,
|
||||
@@ -358,16 +261,12 @@ registerNotificationComponent() {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
this.setData({
|
||||
searchResults: results,
|
||||
isSearching: false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 清空搜索
|
||||
*/
|
||||
onClearSearch() {
|
||||
this.setData({
|
||||
searchText: '',
|
||||
@@ -376,9 +275,6 @@ registerNotificationComponent() {
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 根据类型ID获取类型名称
|
||||
*/
|
||||
getLeixingName(leixingId) {
|
||||
const leixingList = this.data.shangpinleixing
|
||||
for (const item of leixingList) {
|
||||
@@ -389,9 +285,6 @@ registerNotificationComponent() {
|
||||
return ''
|
||||
},
|
||||
|
||||
/**
|
||||
* 根据专区ID获取专区名称
|
||||
*/
|
||||
getZhuanquName(zhuanquId) {
|
||||
const zhuanquList = this.data.shangpinzhuanqu
|
||||
for (const item of zhuanquList) {
|
||||
@@ -402,34 +295,23 @@ registerNotificationComponent() {
|
||||
return ''
|
||||
},
|
||||
|
||||
/**
|
||||
* 跳转到商品详情页
|
||||
*/
|
||||
goToDetail(e) {
|
||||
const shangpinId = e.currentTarget.dataset.id
|
||||
if (!shangpinId) return
|
||||
|
||||
wx.navigateTo({
|
||||
url: `/pages/shangpinxiangqing/shangpinxiangqing?id=${shangpinId}`
|
||||
url: `/pages/product-detail/product-detail?id=${shangpinId}`
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 刷新所有数据
|
||||
*/
|
||||
onRefresh() {
|
||||
wx.showLoading({
|
||||
title: '刷新中...',
|
||||
mask: true
|
||||
})
|
||||
|
||||
// 清空全局变量
|
||||
app.globalData.shangpinleixing = []
|
||||
app.globalData.shangpinzhuanqu = []
|
||||
app.globalData.shangpinliebiao = []
|
||||
|
||||
this.loadAllShangpinData()
|
||||
|
||||
setTimeout(() => {
|
||||
wx.hideLoading()
|
||||
wx.showToast({
|
||||
@@ -440,13 +322,10 @@ registerNotificationComponent() {
|
||||
}, 1000)
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {
|
||||
return {
|
||||
title: '阿龙电竞 - 商品分类',
|
||||
path: '/pages/fenlei/fenlei'
|
||||
path: '/pages/category/category'
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -1,8 +1,8 @@
|
||||
<!-- pages/fenlei/fenlei.wxml -->
|
||||
<!-- pages/category/category.wxml -->
|
||||
<view class="fenlei-page">
|
||||
<!-- 1. 毛玻璃搜索框区域(固定) -->
|
||||
<view class="search-container">
|
||||
<view class="search-box">
|
||||
<view class="search-box search-box--glass">
|
||||
<image src="/images/sousuo.png" class="search-icon" />
|
||||
<input
|
||||
type="text"
|
||||
@@ -19,7 +19,7 @@
|
||||
<image src="/images/clear.png" class="clear-icon" />
|
||||
</view>
|
||||
<!-- 搜索按钮 -->
|
||||
<view class="search-btn" bindtap="onSearchTap">
|
||||
<view class="search-btn btn btn-sm btn-sm--gold" bindtap="onSearchTap">
|
||||
<text class="search-btn-text">搜索</text>
|
||||
</view>
|
||||
</view>
|
||||
@@ -201,7 +201,7 @@
|
||||
</view>
|
||||
|
||||
<!-- 全局加载状态 -->
|
||||
<view class="loading-toast" wx:if="{{isLoading}}">
|
||||
<view class="loading-toast loading-mask loading-mask--dark" wx:if="{{isLoading}}">
|
||||
<view class="loading-content">
|
||||
<view class="loading-spinner">
|
||||
<view class="spinner-ring"></view>
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/fenlei/fenlei.wxss */
|
||||
/* pages/category/category.wxss */
|
||||
.fenlei-page {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
@@ -19,18 +19,11 @@
|
||||
}
|
||||
|
||||
.search-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
backdrop-filter: blur(30rpx);
|
||||
-webkit-backdrop-filter: blur(30rpx);
|
||||
border-radius: 50rpx;
|
||||
padding: 0 28rpx;
|
||||
height: 84rpx;
|
||||
box-shadow:
|
||||
0 8rpx 32rpx rgba(31, 38, 135, 0.1),
|
||||
inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
|
||||
border: 1rpx solid rgba(255, 255, 255, 0.3);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
@@ -55,9 +48,7 @@
|
||||
}
|
||||
|
||||
.search-input {
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
font-size: 28rpx;
|
||||
margin-left: 0;
|
||||
color: #222;
|
||||
font-weight: 400;
|
||||
}
|
||||
@@ -68,12 +59,7 @@
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
background: linear-gradient(135deg, #ffcc00, #ffaa00);
|
||||
border-radius: 40rpx;
|
||||
padding: 14rpx 32rpx;
|
||||
margin-left: 20rpx;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 6rpx 20rpx rgba(255, 170, 0, 0.3);
|
||||
transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||
}
|
||||
@@ -127,7 +113,7 @@
|
||||
height: 24rpx;
|
||||
}
|
||||
|
||||
/* 2. 商品类型选择区域(固定)- 恢复原大小 */
|
||||
/* 2. 商品类型选择区域(固定) */
|
||||
.leixing-container {
|
||||
padding: 0 32rpx 24rpx;
|
||||
flex-shrink: 0;
|
||||
@@ -165,8 +151,8 @@
|
||||
}
|
||||
|
||||
.leixing-image-box {
|
||||
width: 100rpx; /* 恢复原大小 */
|
||||
height: 100rpx; /* 恢复原大小 */
|
||||
width: 100rpx; /* 恢复原大小 */ /* 恢复原大小 */
|
||||
height: 100rpx; /* 恢复原大小 */ /* 恢复原大小 */
|
||||
border-radius: 50%;
|
||||
position: relative;
|
||||
margin-bottom: 16rpx;
|
||||
@@ -230,7 +216,7 @@
|
||||
|
||||
.leixing-text {
|
||||
font-size: 24rpx;
|
||||
color: #555; /* 颜色加深 */
|
||||
color: #555;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s;
|
||||
white-space: nowrap;
|
||||
@@ -321,7 +307,7 @@
|
||||
|
||||
.zhuanqu-name {
|
||||
font-size: 26rpx;
|
||||
color: #444; /* 颜色加深 */
|
||||
color: #444;
|
||||
text-align: center;
|
||||
line-height: 1.4;
|
||||
margin-bottom: 8rpx;
|
||||
@@ -444,7 +430,7 @@
|
||||
|
||||
.shangpin-item {
|
||||
background: white;
|
||||
padding: 28rpx 30rpx 22rpx; /* 底部距离缩小 */
|
||||
padding: 28rpx 30rpx 22rpx;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
@@ -736,13 +722,6 @@
|
||||
box-shadow: 0 4rpx 16rpx rgba(255, 170, 0, 0.4);
|
||||
}
|
||||
|
||||
.load-more {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 40rpx 0;
|
||||
}
|
||||
|
||||
.load-more-line {
|
||||
width: 60rpx;
|
||||
height: 1rpx;
|
||||
@@ -844,7 +823,7 @@
|
||||
|
||||
.search-results-list {
|
||||
flex: 1;
|
||||
height: 100%; /* 新增:修复滚动问题的关键代码 */
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.search-result-item {
|
||||
@@ -1010,16 +989,7 @@
|
||||
|
||||
/* 全局加载状态 */
|
||||
.loading-toast {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
backdrop-filter: blur(10rpx);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 3000;
|
||||
}
|
||||
|
||||
@@ -1066,7 +1036,6 @@
|
||||
|
||||
.loading-text {
|
||||
font-size: 28rpx;
|
||||
color: white;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@@ -1204,12 +1173,3 @@
|
||||
transform: translate(0, 0) scale(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {
|
||||
"fakuan-pay": "/pages/cfss/components/fakuan-pay/fakuan-pay"
|
||||
}
|
||||
}
|
||||
@@ -41,10 +41,8 @@ Page({
|
||||
teamName = p.teamName || '客服';
|
||||
teamAvatar = p.teamAvatar || '';
|
||||
} catch (e) {
|
||||
console.error('解析客服页面参数失败', e);
|
||||
}
|
||||
}
|
||||
// 默认头像使用全局配置
|
||||
if (!teamAvatar) {
|
||||
teamAvatar = app.globalData.ossImageUrl + app.globalData.morentouxiang;
|
||||
}
|
||||
@@ -171,7 +169,7 @@ Page({
|
||||
this.setData({ messages: msgs });
|
||||
},
|
||||
|
||||
// ---------- 历史消息 + 永久欢迎语 ----------
|
||||
// 历史消息
|
||||
loadHistory(refresh) {
|
||||
if (!refresh && !this.data.hasMore) return Promise.resolve();
|
||||
return new Promise((resolve) => {
|
||||
@@ -209,7 +207,7 @@ Page({
|
||||
const unique = [];
|
||||
for (const m of final) { if (!ids.has(m.messageId)) { ids.add(m.messageId); unique.push(m); } }
|
||||
|
||||
// 强制在第一行插入欢迎语(如果不存在)
|
||||
// 插入欢迎语
|
||||
const welcomeId = 'welcome-cs';
|
||||
if (!unique.some(m => m.messageId === welcomeId)) {
|
||||
const welcome = this.createWelcomeMessage();
|
||||
@@ -249,7 +247,7 @@ Page({
|
||||
};
|
||||
},
|
||||
|
||||
// ---------- 接收新客服消息 ----------
|
||||
// 接收新客服消息
|
||||
listenNewMsg() {
|
||||
if (this._msgHandler) wx.goEasy.im.off(wx.GoEasy.IM_EVENT.CS_MESSAGE_RECEIVED, this._msgHandler);
|
||||
this._msgHandler = (msg) => {
|
||||
@@ -310,7 +308,7 @@ Page({
|
||||
wx.goEasy.im.on(wx.GoEasy.IM_EVENT.MESSAGE_DELETED, this._deleteHandler);
|
||||
},
|
||||
|
||||
// ---------- 面板控制 ----------
|
||||
// 面板控制
|
||||
togglePlusPanel() { this.setData({ showPlusPanel: !this.data.showPlusPanel, showEmojiPanel: false }); },
|
||||
closePlusPanel() { this.setData({ showPlusPanel: false }); },
|
||||
openEmojiFromPlus() { this.setData({ showPlusPanel: false, showEmojiPanel: true }); },
|
||||
@@ -318,7 +316,7 @@ Page({
|
||||
insertEmoji(e) { this.setData({ inputText: this.data.inputText + e.currentTarget.dataset.emoji }); },
|
||||
closeEmojiPanel() { this.setData({ showEmojiPanel: false }); },
|
||||
|
||||
// ---------- 发送消息 ----------
|
||||
// 发送消息
|
||||
onInput(e) { this.setData({ inputText: e.detail.value }); },
|
||||
chooseImage() {
|
||||
const that = this;
|
||||
@@ -409,7 +407,7 @@ Page({
|
||||
});
|
||||
},
|
||||
|
||||
// ---------- 订单发送 ----------
|
||||
// 订单发送
|
||||
openOrderSender() { this.setData({ showOrderSender: true, showPlusPanel: false }); },
|
||||
closeOrderSender() { this.setData({ showOrderSender: false }); },
|
||||
onSendOrder(e) {
|
||||
@@ -445,7 +443,7 @@ Page({
|
||||
updateMsg(id, status) { this.setData({ messages: this.data.messages.map(m => m.messageId === id ? { ...m, status } : m) }); },
|
||||
needShow(ts) { const ms = this.data.messages; if (!ms.length) return true; const last = ms[ms.length-1]; return (ts - last.timestamp) / 60000 > 5; },
|
||||
|
||||
// ---------- 消息操作 ----------
|
||||
// 消息操作
|
||||
onBubbleTap(e) {
|
||||
const msgId = e.currentTarget.dataset.messageid;
|
||||
const text = e.currentTarget.dataset.text;
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/xiugai/xiugai.js
|
||||
// pages/edit/edit.js
|
||||
const app = getApp()
|
||||
import upload from '../../utils/upload.js'
|
||||
|
||||
@@ -37,7 +37,7 @@ Page({
|
||||
}
|
||||
},
|
||||
|
||||
// 加载用户数据(手机号只读,不参与修改逻辑)
|
||||
// 加载用户数据
|
||||
loadUserData() {
|
||||
try {
|
||||
const uid = wx.getStorageSync('uid') || ''
|
||||
@@ -59,7 +59,7 @@ Page({
|
||||
avatarUrl,
|
||||
uid,
|
||||
nicheng,
|
||||
phone, // 仅展示
|
||||
phone,
|
||||
originalAvatar: touxiang,
|
||||
originalNicheng: nicheng,
|
||||
isLoading: false
|
||||
@@ -71,7 +71,7 @@ Page({
|
||||
}
|
||||
},
|
||||
|
||||
// 微信头像选择(未改动)
|
||||
// 微信头像选择
|
||||
onChooseAvatar(e) {
|
||||
const avatarTempPath = e.detail.avatarUrl
|
||||
this.setData({
|
||||
@@ -83,14 +83,13 @@ Page({
|
||||
},
|
||||
|
||||
chooseAvatar() {
|
||||
// 仅保留动画效果(透明按钮已触发 onChooseAvatar)
|
||||
this.setData({ isAvatarActive: true })
|
||||
setTimeout(() => {
|
||||
this.setData({ isAvatarActive: false })
|
||||
}, 500)
|
||||
},
|
||||
|
||||
// 昵称输入(未改动)
|
||||
// 昵称输入
|
||||
onNicknameInput(e) {
|
||||
const value = e.detail.value.trim()
|
||||
this.setData({
|
||||
@@ -101,14 +100,14 @@ Page({
|
||||
})
|
||||
},
|
||||
|
||||
// 检查变化(只比较昵称和头像)
|
||||
// 检查变化
|
||||
checkChanges() {
|
||||
const { originalNicheng, nicheng, newAvatarFile } = this.data;
|
||||
const hasChanges = (nicheng !== originalNicheng) || (newAvatarFile !== null);
|
||||
this.setData({ hasChanges });
|
||||
},
|
||||
|
||||
// 保存(不包含手机号逻辑)
|
||||
// 保存
|
||||
async onSave() {
|
||||
if (!this.data.hasChanges) {
|
||||
wx.showToast({ title: '没有需要保存的更改', icon: 'none' });
|
||||
@@ -116,7 +115,7 @@ Page({
|
||||
}
|
||||
if (this.data.isSaving) return;
|
||||
|
||||
// 验证数据(昵称)
|
||||
// 验证数据
|
||||
if (!this.validateData()) return;
|
||||
|
||||
this.setData({ isSaving: true });
|
||||
@@ -155,7 +154,7 @@ Page({
|
||||
if (res.confirm) {
|
||||
wx.removeStorageSync('token');
|
||||
wx.removeStorageSync('userInfo');
|
||||
wx.switchTab({ url: '/pages/wode/wode' });
|
||||
wx.switchTab({ url: '/pages/mine/mine' });
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -168,7 +167,7 @@ Page({
|
||||
}
|
||||
},
|
||||
|
||||
// 验证数据(只验证昵称)
|
||||
// 验证数据
|
||||
validateData() {
|
||||
const { nicheng } = this.data;
|
||||
let hasError = false;
|
||||
@@ -191,7 +190,7 @@ Page({
|
||||
return true;
|
||||
},
|
||||
|
||||
// 更新成功处理(不再处理手机号)
|
||||
// 更新成功处理
|
||||
async handleUpdateSuccess(updateData) {
|
||||
if (updateData.touxiang !== undefined && updateData.touxiang !== null) {
|
||||
wx.setStorageSync('touxiang', updateData.touxiang);
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- pages/xiugai/xiugai.wxml -->
|
||||
<!-- pages/edit/edit.wxml -->
|
||||
<view class="xiugai-page">
|
||||
|
||||
<!-- 头像区域(未改动) -->
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/xiugai/xiugai.wxss */
|
||||
/* pages/edit/edit.wxss */
|
||||
page {
|
||||
background: linear-gradient(135deg, #fffaf0 0%, #f0f8ff 100%);
|
||||
min-height: 100vh;
|
||||
@@ -8,7 +8,7 @@ page {
|
||||
padding: 30rpx 40rpx 100rpx;
|
||||
}
|
||||
|
||||
/* ============ 头像区域样式 ============ */
|
||||
/* 头像区域样式 */
|
||||
.avatar-section {
|
||||
position: relative;
|
||||
display: flex;
|
||||
@@ -24,7 +24,7 @@ page {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* 头像包装器:精确居中,包含头像+光晕 */
|
||||
/* 头像包装器 */
|
||||
.avatar-image-wrapper {
|
||||
position: relative;
|
||||
width: 200rpx;
|
||||
@@ -48,16 +48,16 @@ page {
|
||||
box-shadow:
|
||||
0 0 0 1rpx rgba(0, 200, 83, 0.3),
|
||||
0 15rpx 40rpx rgba(0, 200, 83, 0.15);
|
||||
box-sizing: border-box; /* 关键:边框向内计算,不占宽度 */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* ✅ 光晕精确居中:已计算头像 6rpx 边框的偏移量 */
|
||||
/* 光晕 */
|
||||
.avatar-halo {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%); /* 强制居中,无视任何偏差 */
|
||||
width: 228rpx; /* 精确计算:200 + 6*2(边框) + 8*2(外延) = 228 */
|
||||
transform: translate(-50%, -50%);
|
||||
width: 228rpx;
|
||||
height: 228rpx;
|
||||
border-radius: 50%;
|
||||
background: transparent;
|
||||
@@ -68,7 +68,7 @@ page {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* ✅ 像素点环绕也强制居中 */
|
||||
/* 像素点环绕 */
|
||||
.avatar-image-wrapper::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
@@ -215,11 +215,9 @@ page {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* ============ 表单区域 ============ */
|
||||
/* 表单区域 */
|
||||
.form-section {
|
||||
background: white;
|
||||
border-radius: 25rpx;
|
||||
overflow: hidden;
|
||||
margin-bottom: 50rpx;
|
||||
box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.08);
|
||||
border: 1rpx solid #f0f0f0;
|
||||
@@ -251,13 +249,7 @@ page {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.item-input {
|
||||
flex: 1;
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
height: 50rpx;
|
||||
line-height: 50rpx;
|
||||
}
|
||||
/* .item-input — 与全局 .input-inline 完全相同,已移除 */
|
||||
|
||||
.placeholder {
|
||||
color: #ccc;
|
||||
@@ -302,19 +294,13 @@ page {
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
/* ============ 保存按钮 ============ */
|
||||
/* 保存按钮 */
|
||||
.save-btn {
|
||||
width: 100%;
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
border-radius: 50rpx;
|
||||
background: linear-gradient(135deg, #00C853 0%, #64DD17 100%);
|
||||
color: white;
|
||||
font-size: 34rpx;
|
||||
font-weight: 500;
|
||||
border: none;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 15rpx 40rpx rgba(0, 200, 83, 0.25);
|
||||
margin-top: 30rpx;
|
||||
}
|
||||
@@ -361,7 +347,7 @@ page {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
/* ============ 手机号获取按钮 ============ */
|
||||
/* 手机号获取按钮 */
|
||||
.phone-row {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
@@ -380,15 +366,8 @@ page {
|
||||
margin-left: 20rpx;
|
||||
padding: 10rpx 24rpx;
|
||||
background: #4a6cf7;
|
||||
color: #fff;
|
||||
font-size: 26rpx;
|
||||
border-radius: 40rpx;
|
||||
border: none;
|
||||
line-height: 1.4;
|
||||
height: 60rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.phone-btn-hover {
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/peihuDingdan/peihuDingdan.js
|
||||
// pages/escort-orders/escort-orders.js
|
||||
Page({
|
||||
|
||||
/**
|
||||
2
pages/escort-orders/escort-orders.wxml
Normal file
2
pages/escort-orders/escort-orders.wxml
Normal file
@@ -0,0 +1,2 @@
|
||||
<!--pages/escort-orders/escort-orders.wxml-->
|
||||
<text>pages/escort-orders/escort-orders.wxml</text>
|
||||
1
pages/escort-orders/escort-orders.wxss
Normal file
1
pages/escort-orders/escort-orders.wxss
Normal file
@@ -0,0 +1 @@
|
||||
/* pages/escort-orders/escort-orders.wxss */
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/jisufd/jisufd.js
|
||||
// pages/express-order/express-order.js
|
||||
import request from '../../utils/request.js'
|
||||
|
||||
const PAGE_SIZE = 50
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- pages/jisufd/jisufd.wxml -->
|
||||
<!-- pages/express-order/express-order.wxml -->
|
||||
<view class="page-container">
|
||||
<!-- 余额卡片 -->
|
||||
<view class="balance-card">
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/jisufd/jisufd.wxss - 增强版,包含标签展示 */
|
||||
/* pages/express-order/express-order.wxss - 增强版,包含标签展示 */
|
||||
.page-container {
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(135deg, #0a0a0f 0%, #1a1a2e 50%, #16213e 100%);
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/cfss/cfss.js
|
||||
// pages/penalty/penalty.js
|
||||
import request from '../../utils/request.js'
|
||||
const app = getApp()
|
||||
const MEIYE_TIAOSHU = 5
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- pages/cfss/cfss.wxml -->
|
||||
<!-- pages/penalty/penalty.wxml -->
|
||||
<view class="cfss-container">
|
||||
<!-- 顶部统计卡片 -->
|
||||
<view class="tongji-card">
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/cfss/cfss.wxss */
|
||||
/* pages/penalty/penalty.wxss */
|
||||
/* 🔴【恢复您原来的深色背景,但调淡一点】 */
|
||||
|
||||
:root {
|
||||
@@ -907,7 +907,7 @@
|
||||
|
||||
|
||||
|
||||
/* pages/cfss/cfss.wxss 中新增样式 */
|
||||
/* pages/penalty/penalty.wxss 中新增样式 */
|
||||
|
||||
/* 🔴【关键修改】图片网格和图片样式 */
|
||||
.tupian-grid {
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/dsddxq/dsddxq.js - 【最终版:提交前公告弹窗 + 修改图片至少保留一张】
|
||||
// pages/fighter-order-detail/fighter-order-detail.js - 【最终版:提交前公告弹窗 + 修改图片至少保留一张】
|
||||
const app = getApp()
|
||||
import request from '../../utils/request.js'
|
||||
const COS = require('../../utils/cos-wx-sdk-v5.js')
|
||||
@@ -322,7 +322,7 @@ Page({
|
||||
isCross,
|
||||
}
|
||||
wx.navigateTo({
|
||||
url: '/pages/qunliaotian/qunliaotian?data=' + encodeURIComponent(JSON.stringify(param)),
|
||||
url: '/pages/group-chat/group-chat?data=' + encodeURIComponent(JSON.stringify(param)),
|
||||
})
|
||||
},
|
||||
onFailed: (err) => {
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/dsddxq/dsddxq.wxss */
|
||||
/* pages/fighter-order-detail/fighter-order-detail.wxss */
|
||||
|
||||
/* 页面基础样式 */
|
||||
.dsddxq-page {
|
||||
@@ -294,11 +294,11 @@ Page({
|
||||
|
||||
if (this.data.orderType === 'peihu') {
|
||||
wx.navigateTo({
|
||||
url: `/pages/peihuDingdan/peihuDingdan?dingdanData=${dataStr}`
|
||||
url: `/pages/escort-orders/escort-orders?dingdanData=${dataStr}`
|
||||
});
|
||||
} else {
|
||||
wx.navigateTo({
|
||||
url: `/pages/dsddxq/dsddxq?dingdanData=${dataStr}`
|
||||
url: `/pages/fighter-order-detail/fighter-order-detail?dingdanData=${dataStr}`
|
||||
});
|
||||
}
|
||||
},
|
||||
@@ -281,9 +281,7 @@ page {
|
||||
animation: spin 0.8s linear infinite;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.empty-img {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
@@ -132,8 +132,6 @@ page {
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
|
||||
.state-img {
|
||||
width: 160rpx; height: 160rpx;
|
||||
margin-bottom: 20rpx;
|
||||
@@ -75,7 +75,7 @@ Page({
|
||||
this.initPage();
|
||||
},
|
||||
|
||||
// pages/tijiao/tijiao.js 中添加 onHide 方法(如果已有则合并内容)
|
||||
// pages/submit/submit.js 中添加 onHide 方法(如果已有则合并内容)
|
||||
onHide() {
|
||||
const popupComp = this.selectComponent('#popupNotice');
|
||||
if (popupComp && popupComp.cleanup) {
|
||||
@@ -18,7 +18,7 @@ const PLATFORM_INVITE_CODE = '0000008RffVgKHMj7kQC'
|
||||
|
||||
Page({
|
||||
data: {
|
||||
// 🆕 图片路径对象(逻辑层拼接完整URL)
|
||||
// 图片路径对象
|
||||
imgUrls: {},
|
||||
|
||||
isDashou: false,
|
||||
@@ -188,7 +188,7 @@ Page({
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
// 注意:这里不再重复声明 app,直接使用上面的 app 变量
|
||||
// 注意:不再重复声明 app
|
||||
if (!app.globalData.hasShownPopupOnColdStart) {
|
||||
app.globalData.hasShownPopupOnColdStart = true;
|
||||
setTimeout(() => {
|
||||
@@ -296,7 +296,7 @@ Page({
|
||||
this.setData({ totalAssets: total.toFixed(2), assetBreakdown: breakdown });
|
||||
},
|
||||
|
||||
/** 打手端:已认证不展示;商家始终第一位且靠左排列 */
|
||||
/** 打手端:已认证不展示;商家始终第一位 */
|
||||
_updatePendingAuth() {
|
||||
const d = this.data;
|
||||
const img = d.imgUrls || {};
|
||||
@@ -671,23 +671,23 @@ Page({
|
||||
},
|
||||
|
||||
goToGuanshiWithdraw() {
|
||||
wx.navigateTo({ url: '/pages/tixian/tixian' });
|
||||
wx.navigateTo({ url: '/pages/withdraw/withdraw' });
|
||||
},
|
||||
|
||||
goToZuzhangWithdraw() {
|
||||
wx.navigateTo({ url: `/pages/tixian/tixian?from=zuzhang&amount=${this.data.ketixian}` });
|
||||
wx.navigateTo({ url: `/pages/withdraw/withdraw?from=zuzhang&amount=${this.data.ketixian}` });
|
||||
},
|
||||
|
||||
goToInviteUser() { wx.navigateTo({ url: '/pages/yaoqingdashou/yaoqingdashou' }); },
|
||||
goToMySubordinate() { wx.navigateTo({ url: '/pages/wodedashou/wodedashou' }); },
|
||||
goToRechargeRecord() { wx.navigateTo({ url: '/pages/czjilu/czjilu' }); },
|
||||
goToInviteUser() { wx.navigateTo({ url: '/pages/invite-fighter/invite-fighter' }); },
|
||||
goToMySubordinate() { wx.navigateTo({ url: '/pages/my-fighter/my-fighter' }); },
|
||||
goToRechargeRecord() { wx.navigateTo({ url: '/pages/recharge-log/recharge-log' }); },
|
||||
goToGuanshiRanking() {
|
||||
wx.navigateTo({ url: '/pages/dashoupaihang/dashoupaihang?type=guanshi' });
|
||||
wx.navigateTo({ url: '/pages/fighter-rank/fighter-rank?type=guanshi' });
|
||||
},
|
||||
goToPromoPoster() { wx.navigateTo({ url: '/pages/haibao/haibao' }); },
|
||||
goToFenhongJilu() { wx.navigateTo({ url: '/pages/zzfhjilu/zzfhjilu' }); },
|
||||
goToYaoqingGuanshi() { wx.navigateTo({ url: '/pages/yqguanshi/yqguanshi' }); },
|
||||
goToGuanshiAuthPage() { wx.navigateTo({ url: '/pages/renzheng/renzheng?type=guanshi' }); },
|
||||
goToPromoPoster() { wx.navigateTo({ url: '/pages/poster/poster' }); },
|
||||
goToFenhongJilu() { wx.navigateTo({ url: '/pages/leader-bonus-log/leader-bonus-log' }); },
|
||||
goToYaoqingGuanshi() { wx.navigateTo({ url: '/pages/invite-manager/invite-manager' }); },
|
||||
goToGuanshiAuthPage() { wx.navigateTo({ url: '/pages/verify/verify?type=guanshi' }); },
|
||||
|
||||
async contactZuzhang() {
|
||||
wx.showLoading({ title: '获取组长信息...', mask: true });
|
||||
@@ -723,20 +723,16 @@ Page({
|
||||
if (res && res.data.code === 0 && res.data.data) {
|
||||
const list = res.data.data.chenghao_list || [];
|
||||
this.setData({ chenghaoList: list });
|
||||
// 可选:也存入全局,方便其他页面使用
|
||||
const app = getApp();
|
||||
app.globalData.chenghaoList = list;
|
||||
} else {
|
||||
this.setData({ chenghaoList: [] });
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('获取称号标签失败', e);
|
||||
// 失败不影响主流程
|
||||
}
|
||||
},
|
||||
// ========================================================
|
||||
|
||||
// 联系邀请人(保持不变)
|
||||
// 联系邀请人
|
||||
async contactInviter() {
|
||||
wx.showLoading({ title: '获取邀请人...', mask: true });
|
||||
try {
|
||||
@@ -798,7 +794,7 @@ Page({
|
||||
fail: () => {
|
||||
wx.hideLoading();
|
||||
console.error('微信登录失败');
|
||||
wx.reLaunch({ url: '/pages/wode/wode' });
|
||||
wx.reLaunch({ url: '/pages/mine/mine' });
|
||||
}
|
||||
});
|
||||
},
|
||||
@@ -1079,7 +1075,7 @@ Page({
|
||||
if (avatarUrl) wx.previewImage({ urls: [avatarUrl] });
|
||||
},
|
||||
|
||||
goToWithdraw() { wx.navigateTo({ url: '/pages/tixian/tixian' }) },
|
||||
goToWithdraw() { wx.navigateTo({ url: '/pages/withdraw/withdraw' }) },
|
||||
goToTotalWithdraw() { this.goToWithdraw(); },
|
||||
|
||||
goToKefu() {
|
||||
@@ -1111,7 +1107,7 @@ Page({
|
||||
}
|
||||
return;
|
||||
}
|
||||
wx.navigateTo({ url: `/pages/renzheng/renzheng?type=${type}` });
|
||||
wx.navigateTo({ url: `/pages/verify/verify?type=${type}` });
|
||||
},
|
||||
|
||||
onTapAuthItem(e) {
|
||||
@@ -1125,7 +1121,7 @@ Page({
|
||||
|
||||
enterShangjiaCenter() {
|
||||
if (!this.data.shangjiaCertified) {
|
||||
wx.navigateTo({ url: '/pages/renzheng/renzheng?type=shangjia' });
|
||||
wx.navigateTo({ url: '/pages/verify/verify?type=shangjia' });
|
||||
return;
|
||||
}
|
||||
enterLockedRole('shangjia', getApp());
|
||||
@@ -1136,28 +1132,28 @@ Page({
|
||||
this.enterShangjiaCenter();
|
||||
return;
|
||||
}
|
||||
wx.navigateTo({ url: '/pages/renzheng/renzheng?type=shangjia' });
|
||||
wx.navigateTo({ url: '/pages/verify/verify?type=shangjia' });
|
||||
},
|
||||
goToReceiveOrder() { wx.navigateTo({ url: '/pages/jiedan/jiedan' }) },
|
||||
goToMyOrders() { wx.navigateTo({ url: '/pages/dashoudingdan/dashoudingdan' }) },
|
||||
goToMyPunishment() { wx.navigateTo({ url: '/pages/cfss/cfss/cfss' }) },
|
||||
goToRecharge() { wx.navigateTo({ url: '/pages/dashouchongzhi/dashouchongzhi' }) },
|
||||
goToReceiveOrder() { wx.navigateTo({ url: '/pages/accept-order/accept-order' }) },
|
||||
goToMyOrders() { wx.navigateTo({ url: '/pages/fighter-orders/fighter-orders' }) },
|
||||
goToMyPunishment() { wx.navigateTo({ url: '/pages/penalty/penalty/penalty' }) },
|
||||
goToRecharge() { wx.navigateTo({ url: '/pages/fighter-recharge/fighter-recharge' }) },
|
||||
goToRanking(e) {
|
||||
const type = e?.currentTarget?.dataset?.type || 'dashou';
|
||||
wx.navigateTo({ url: `/pages/dashoupaihang/dashoupaihang?type=${type}` });
|
||||
wx.navigateTo({ url: `/pages/fighter-rank/fighter-rank?type=${type}` });
|
||||
},
|
||||
goToGuanzhuKs() { wx.navigateTo({ url: '/pages/guanzhual/guanzhual' }) },
|
||||
goToKaoheDafen() { wx.navigateTo({ url: '/pages/kaohe_dafen/kaohe_dafen' }) },
|
||||
goToKaoheJilu() { wx.navigateTo({ url: '/pages/kaohe_jilu/kaohe_jilu' }) },
|
||||
goToKaoheZhongxin() { wx.navigateTo({ url: '/pages/kaohe_zhongxin/kaohe_zhongxin' }) },
|
||||
goToGuanzhuKs() { wx.navigateTo({ url: '/pages/manager-assign/manager-assign' }) },
|
||||
goToKaoheDafen() { wx.navigateTo({ url: '/pages/assess-score/assess-score' }) },
|
||||
goToKaoheJilu() { wx.navigateTo({ url: '/pages/assess-log/assess-log' }) },
|
||||
goToKaoheZhongxin() { wx.navigateTo({ url: '/pages/assess-center/assess-center' }) },
|
||||
goToKaoheWithdraw() {
|
||||
const yue = this.data.kaoheYue || '0.00';
|
||||
wx.navigateTo({ url: `/pages/tixian/tixian?amount=${yue}&from=kaoheguan` });
|
||||
wx.navigateTo({ url: `/pages/withdraw/withdraw?amount=${yue}&from=kaoheguan` });
|
||||
},
|
||||
goToModifyInfo() { wx.navigateTo({ url: '/pages/dashouxiugai/dashouxiugai' }) },
|
||||
goToRules() { wx.navigateTo({ url: '/pages/dashouguize/dashouguize' }) },
|
||||
goToModifyInfo() { wx.navigateTo({ url: '/pages/fighter-edit/fighter-edit' }) },
|
||||
goToRules() { wx.navigateTo({ url: '/pages/fighter-rules/fighter-rules' }) },
|
||||
goToKaohe() {
|
||||
wx.navigateTo({ url: '/pages/kaohe_jinpai/kaohe_jinpai' });
|
||||
wx.navigateTo({ url: '/pages/assess-gold/assess-gold' });
|
||||
},
|
||||
|
||||
quickRegisterAsPlatform() {
|
||||
@@ -4,15 +4,9 @@ page {
|
||||
color: #1A1A1A;
|
||||
}
|
||||
|
||||
/* .page-bg 与全局相同,仅保留差异 */
|
||||
.page-bg {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 0.42;
|
||||
z-index: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.unreg-area {
|
||||
@@ -50,31 +44,26 @@ page {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
/* .unreg-input 与 .input-rounded 类似,仅保留差异 */
|
||||
.unreg-input {
|
||||
width: 100%;
|
||||
height: 80rpx;
|
||||
background: #FFFFFF;
|
||||
border-radius: 40rpx;
|
||||
padding: 0 32rpx;
|
||||
font-size: 28rpx;
|
||||
box-sizing: border-box;
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
|
||||
.ph { color: #999; }
|
||||
|
||||
/* .unreg-btn 与 .btn .btn-secondary 类似,仅保留差异 */
|
||||
.unreg-btn {
|
||||
width: 100%;
|
||||
height: 80rpx;
|
||||
background: rgba(255, 255, 255, 0.65);
|
||||
border-radius: 40rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 1rpx solid rgba(0, 0, 0, 0.06);
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
|
||||
/* .unreg-btn-secondary 与 .btn-secondary 类似,仅保留差异 */
|
||||
.unreg-btn-secondary {
|
||||
margin-bottom: 0;
|
||||
background: rgba(255, 255, 255, 0.45);
|
||||
@@ -112,27 +101,9 @@ page {
|
||||
padding: 0 24rpx 150rpx;
|
||||
}
|
||||
|
||||
.refresh-btn {
|
||||
position: fixed;
|
||||
top: 36rpx;
|
||||
right: 32rpx;
|
||||
width: 56rpx;
|
||||
height: 56rpx;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
backdrop-filter: blur(12rpx);
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 20;
|
||||
border: 1rpx solid rgba(255, 255, 255, 0.6);
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
/* .refresh-btn 与全局 .refresh-btn .refresh-btn--light 完全相同,删除 */
|
||||
|
||||
.refresh-icon {
|
||||
width: 28rpx;
|
||||
height: 28rpx;
|
||||
}
|
||||
/* .refresh-icon 与全局 .refresh-icon 完全相同,删除 */
|
||||
|
||||
.user-card {
|
||||
position: relative;
|
||||
@@ -163,13 +134,9 @@ page {
|
||||
backdrop-filter: blur(12rpx);
|
||||
}
|
||||
|
||||
/* .user-avatar 与 .avatar-circle .avatar-md 类似,仅保留差异 */
|
||||
.user-avatar {
|
||||
width: 88rpx;
|
||||
height: 88rpx;
|
||||
border-radius: 50%;
|
||||
border: 2rpx solid #FFFFFF;
|
||||
margin-right: 20rpx;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.user-info { flex: 1; min-width: 0; }
|
||||
@@ -254,7 +221,7 @@ page {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* ===== 黑卡 VIP ===== */
|
||||
/* 黑卡 VIP */
|
||||
.vip-black-card {
|
||||
position: relative;
|
||||
height: 152rpx;
|
||||
@@ -329,7 +296,7 @@ page {
|
||||
color: #f3ead8;
|
||||
}
|
||||
|
||||
/* ===== 资产面板 ===== */
|
||||
/* 资产面板 */
|
||||
.asset-panel {
|
||||
position: relative;
|
||||
border-radius: 28rpx;
|
||||
@@ -447,7 +414,7 @@ page {
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
|
||||
/* ===== 排行榜(无大框,梯形格) ===== */
|
||||
/* 排行榜 */
|
||||
.rank-section {
|
||||
margin-bottom: 22rpx;
|
||||
padding: 0 2rpx;
|
||||
@@ -613,7 +580,7 @@ page {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* ===== 功能面板 ===== */
|
||||
/* 功能面板 */
|
||||
.func-panel {
|
||||
position: relative;
|
||||
border-radius: 28rpx;
|
||||
@@ -720,10 +687,10 @@ page {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* .list-card 与 .card 类似,仅保留差异 */
|
||||
.list-card {
|
||||
position: relative;
|
||||
border-radius: 28rpx;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 6rpx 24rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
|
||||
@@ -743,23 +710,22 @@ page {
|
||||
backdrop-filter: blur(12rpx);
|
||||
}
|
||||
|
||||
/* .list-item 与全局 .list-item 类似,仅保留差异 */
|
||||
.list-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 22rpx 20rpx;
|
||||
border-bottom: 1rpx solid rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
|
||||
.list-item:last-child { border-bottom: none; }
|
||||
|
||||
/* .list-icon 与全局 .list-icon 类似,仅保留差异(缺少 flex-shrink:0) */
|
||||
.list-icon {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
|
||||
/* .list-text 与全局 .list-text 类似,仅保留差异 */
|
||||
.list-text {
|
||||
flex: 1;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
@@ -769,13 +735,12 @@ page {
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
|
||||
/* .list-arrow 与全局 .list-arrow 类似,仅保留差异 */
|
||||
.list-arrow {
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
opacity: 0.45;
|
||||
}
|
||||
|
||||
/* ===== 客服入口 ===== */
|
||||
/* 客服入口 */
|
||||
.kefu-banner {
|
||||
position: relative;
|
||||
margin-bottom: 18rpx;
|
||||
@@ -851,7 +816,7 @@ page {
|
||||
margin-left: 16rpx;
|
||||
}
|
||||
|
||||
/* ===== 总资产 ===== */
|
||||
/* 总资产 */
|
||||
.total-asset-row {
|
||||
position: relative;
|
||||
border-radius: 24rpx;
|
||||
@@ -937,6 +902,7 @@ page {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* .withdraw-btn 与 .btn-sm--dark 类似,仅保留差异 */
|
||||
.withdraw-btn {
|
||||
flex-shrink: 0;
|
||||
min-width: 120rpx;
|
||||
@@ -944,10 +910,7 @@ page {
|
||||
line-height: 72rpx;
|
||||
text-align: center;
|
||||
padding: 0 28rpx;
|
||||
font-size: 26rpx;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
background: linear-gradient(135deg, #3d4f66 0%, #2c3e50 100%);
|
||||
border-radius: 999rpx;
|
||||
box-shadow: 0 6rpx 20rpx rgba(44, 62, 80, 0.22);
|
||||
}
|
||||
@@ -965,7 +928,7 @@ page {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* ===== 身份认证 ===== */
|
||||
/* 身份认证 */
|
||||
.auth-grid {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
@@ -1008,28 +971,12 @@ page {
|
||||
background: rgba(90, 107, 87, 0.1);
|
||||
}
|
||||
|
||||
.loading-mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 9999;
|
||||
}
|
||||
/* .loading-mask 与全局 .loading-mask .loading-mask--light 完全相同,删除 */
|
||||
|
||||
/* .loading-spinner 与 .spinner--md 类似,仅保留差异 */
|
||||
.loading-spinner {
|
||||
width: 52rpx;
|
||||
height: 52rpx;
|
||||
border: 3rpx solid rgba(0, 0, 0, 0.08);
|
||||
border-top-color: #1A1A1A;
|
||||
border-radius: 50%;
|
||||
animation: spin 0.8s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// pages/jinpaids/jinpaids.js
|
||||
// pages/gold-fighter/gold-fighter.js
|
||||
import request from '../../utils/request.js'
|
||||
import popupService from '../../services/popupService.js'
|
||||
import {
|
||||
@@ -68,11 +68,11 @@ Page({
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
wx.redirectTo({ url: '/pages/dashouduan/dashouduan' });
|
||||
wx.redirectTo({ url: '/pages/fighter/fighter' });
|
||||
},
|
||||
|
||||
onShow() {
|
||||
wx.redirectTo({ url: '/pages/dashouduan/dashouduan' });
|
||||
wx.redirectTo({ url: '/pages/fighter/fighter' });
|
||||
},
|
||||
|
||||
_deprecatedOnLoad() {
|
||||
@@ -197,7 +197,7 @@ Page({
|
||||
checkJinpaiAndRedirect(chenghao) {
|
||||
if (chenghao !== '金牌选手') {
|
||||
wx.setStorageSync('isJinpai', 0)
|
||||
wx.redirectTo({ url: '/pages/dashouduan/dashouduan' })
|
||||
wx.redirectTo({ url: '/pages/fighter/fighter' })
|
||||
} else {
|
||||
wx.setStorageSync('isJinpai', 1)
|
||||
}
|
||||
@@ -254,7 +254,7 @@ Page({
|
||||
toAvatar: fullAvatar
|
||||
}
|
||||
wx.navigateTo({
|
||||
url: '/pages/liaotian/liaotian?data=' + encodeURIComponent(JSON.stringify(param)),
|
||||
url: '/pages/chat/chat?data=' + encodeURIComponent(JSON.stringify(param)),
|
||||
fail: (err) => {
|
||||
console.error('跳转私聊失败', err)
|
||||
wx.showToast({ title: '打开聊天失败', icon: 'none' })
|
||||
@@ -284,17 +284,17 @@ Page({
|
||||
if (this.data.avatarUrl) wx.previewImage({ urls: [this.data.avatarUrl] })
|
||||
},
|
||||
|
||||
goToWithdraw() { wx.navigateTo({ url: '/pages/tixian/tixian' }) },
|
||||
goToReceiveOrder() { wx.navigateTo({ url: '/pages/jiedan/jiedan' }) },
|
||||
goToRecharge() { wx.navigateTo({ url: '/pages/dashouchongzhi/dashouchongzhi' }) },
|
||||
goToMyOrders() { wx.navigateTo({ url: '/pages/dashoudingdan/dashoudingdan' }) },
|
||||
goToMyPunishment() { wx.navigateTo({ url: '/pages/cfss/cfss/cfss' }) },
|
||||
goToRanking() { wx.navigateTo({ url: '/pages/dashoupaihang/dashoupaihang?type=dashou' }) },
|
||||
goToModifyInfo() { wx.navigateTo({ url: '/pages/dashouxiugai/dashouxiugai' }) },
|
||||
goToRules() { wx.navigateTo({ url: '/pages/dashouguize/dashouguize' }) },
|
||||
goToWithdraw() { wx.navigateTo({ url: '/pages/withdraw/withdraw' }) },
|
||||
goToReceiveOrder() { wx.navigateTo({ url: '/pages/accept-order/accept-order' }) },
|
||||
goToRecharge() { wx.navigateTo({ url: '/pages/fighter-recharge/fighter-recharge' }) },
|
||||
goToMyOrders() { wx.navigateTo({ url: '/pages/fighter-orders/fighter-orders' }) },
|
||||
goToMyPunishment() { wx.navigateTo({ url: '/pages/penalty/penalty/penalty' }) },
|
||||
goToRanking() { wx.navigateTo({ url: '/pages/fighter-rank/fighter-rank?type=dashou' }) },
|
||||
goToModifyInfo() { wx.navigateTo({ url: '/pages/fighter-edit/fighter-edit' }) },
|
||||
goToRules() { wx.navigateTo({ url: '/pages/fighter-rules/fighter-rules' }) },
|
||||
// 跳转到考核金牌
|
||||
goToKaohe() {
|
||||
wx.navigateTo({ url: '/pages/kaohe_jinpai/kaohe_jinpai' });
|
||||
wx.navigateTo({ url: '/pages/assess-gold/assess-gold' });
|
||||
},
|
||||
|
||||
async fetchChenghaoList() {
|
||||
@@ -1,4 +1,4 @@
|
||||
/* pages/jinpaids/jinpaids.wxss - 金牌打手机甲风格(CSS变量版) */
|
||||
/* pages/gold-fighter/gold-fighter.wxss - 金牌打手机甲风格(CSS变量版) */
|
||||
|
||||
/* ========== 全局 ========== */
|
||||
page {
|
||||
@@ -49,7 +49,6 @@ Page({
|
||||
isCross: p.isCross
|
||||
});
|
||||
wx.setNavigationBarTitle({ title: this.data.groupName });
|
||||
// 如果有外部传入的 currentUser 信息,直接用,不再依赖全局状态
|
||||
if (p.currentUserId) {
|
||||
this.setData({
|
||||
currentUser: {
|
||||
@@ -111,22 +110,6 @@ Page({
|
||||
});
|
||||
this.setData({ messages: msgs });
|
||||
},
|
||||
/*onLoad(options) {
|
||||
if (options.data) {
|
||||
try {
|
||||
const p = JSON.parse(decodeURIComponent(options.data));
|
||||
this.setData({
|
||||
groupId: p.groupId || '',
|
||||
groupName: p.groupName || '订单群聊',
|
||||
groupAvatar: p.groupAvatar || '',
|
||||
orderId: p.orderId || '',
|
||||
isCross: p.isCross || 0
|
||||
});
|
||||
} catch (e) {}
|
||||
}
|
||||
wx.setNavigationBarTitle({ title: this.data.groupName });
|
||||
this.initCurrentUser();
|
||||
},*/
|
||||
|
||||
onShow() {
|
||||
this.autoConnect();
|
||||
@@ -189,8 +172,8 @@ Page({
|
||||
if (!groupId) return;
|
||||
wx.goEasy.im.subscribeGroup({
|
||||
groupIds: [groupId],
|
||||
onSuccess: () => console.log(`[群聊页] 订阅成功: ${groupId}`),
|
||||
onFailed: (err) => console.error(`[群聊页] 订阅失败: ${groupId}`, err)
|
||||
onSuccess: () => {},
|
||||
onFailed: () => {}
|
||||
});
|
||||
},
|
||||
|
||||
@@ -279,7 +262,7 @@ Page({
|
||||
this.markGroupMessageAsRead();
|
||||
};
|
||||
wx.goEasy.im.on(wx.GoEasy.IM_EVENT.GROUP_MESSAGE_RECEIVED, this._msgHandler);
|
||||
this.markGroupMessageAsRead(); // ← 收到新消息就标记已读
|
||||
this.markGroupMessageAsRead();
|
||||
},
|
||||
|
||||
markGroupMessageAsRead() {
|
||||
@@ -5,23 +5,20 @@ import { fetchShopGoods, bindShop } from '../../utils/shop';
|
||||
import { backfillUserProfileCache, getSessionToken } from '../../utils/role-tab-bar';
|
||||
import PopupService from '../../services/popupService.js';
|
||||
|
||||
// 🔥 固定参数:扫码时从 scene 中获取店铺ID的字段名(可在此处集中修改)
|
||||
const SCENE_PARAM = 'scene'; // 二维码参数统一使用 scene,解码后即为店铺ID
|
||||
// 扫码场景参数名
|
||||
const SCENE_PARAM = 'scene';
|
||||
|
||||
Page({
|
||||
data: {
|
||||
// 全局变量引用
|
||||
ossImageUrl: '',
|
||||
lunbozhanwei: '',
|
||||
|
||||
// 页面数据
|
||||
shangpingonggao: '',
|
||||
lunboList: [],
|
||||
shangpinleixing: [],
|
||||
shangpinzhuanqu: [],
|
||||
shangpinliebiao: [],
|
||||
|
||||
// 状态控制
|
||||
selectedLeixingId: null,
|
||||
filteredData: [],
|
||||
showGonggaoModal: false,
|
||||
@@ -33,16 +30,15 @@ Page({
|
||||
currentTime: ''
|
||||
},
|
||||
|
||||
// 从二维码解析出的店铺ID(仅在扫码时存在)
|
||||
// 扫码解析的店铺ID
|
||||
shopId: null,
|
||||
|
||||
onLoad(options) {
|
||||
// 🔥 解析二维码参数(scene)
|
||||
// 解析二维码参数
|
||||
if (options[SCENE_PARAM]) {
|
||||
try {
|
||||
// 微信会对 scene 进行编码,需要解码
|
||||
const scene = decodeURIComponent(options[SCENE_PARAM]);
|
||||
this.shopId = scene; // 例如:dianpu_123
|
||||
this.shopId = scene;
|
||||
} catch (e) {
|
||||
console.error('scene解码失败', e);
|
||||
}
|
||||
@@ -50,16 +46,15 @@ Page({
|
||||
|
||||
// 等待全局配置加载完成
|
||||
this.waitForConfigAndInit();
|
||||
// 🆕 修改:仅在已登录时检查弹窗,避免未登录时发起请求导致 401 弹窗
|
||||
// 已登录时才检查弹窗
|
||||
const token = getSessionToken(app);
|
||||
if (token) {
|
||||
PopupService.checkAndShow(this, 'index');
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
// 🆕 页面隐藏时清理弹窗视图
|
||||
// 页面隐藏时清理弹窗视图
|
||||
onHide: function () {
|
||||
const popupComp = this.selectComponent('#popupNotice');
|
||||
if (popupComp && popupComp.cleanup) {
|
||||
@@ -153,15 +148,15 @@ Page({
|
||||
// 1. 确保登录(静默,不跳转)
|
||||
await ensureLogin({ page: this });
|
||||
|
||||
// 2. 🔥 关键:仅当通过扫码进入且携带了有效的店铺ID时,才执行绑定
|
||||
// 2. 扫码进入时绑定店铺
|
||||
if (this.shopId) {
|
||||
await bindShop(this.shopId);
|
||||
}
|
||||
|
||||
// 3. 并行加载公告轮播图(复用原接口,独立请求)和店铺商品(新接口)
|
||||
// 3. 并行加载公告轮播图和商品数据
|
||||
const [gonggaoResult, shopData] = await Promise.all([
|
||||
this.loadGonggaoAndLunbo(), // 公告轮播图使用原有的 wx.request 方式,不受影响
|
||||
fetchShopGoods() // 商品数据通过封装的 request 获取
|
||||
this.loadGonggaoAndLunbo(),
|
||||
fetchShopGoods()
|
||||
]);
|
||||
|
||||
// 4. 处理商品数据
|
||||
@@ -169,8 +164,7 @@ Page({
|
||||
const sortedZhuanqu = this.sortByPaixu(shopData.shangpinzhuanqu || []);
|
||||
const sortedShangpin = this.sortByPaixu(shopData.shangpinliebiao || []);
|
||||
|
||||
|
||||
// 更新全局缓存(可选,用于其他页面复用)
|
||||
// 更新全局缓存
|
||||
app.globalData.shangpinleixing = sortedLeixing;
|
||||
app.globalData.shangpinzhuanqu = sortedZhuanqu;
|
||||
app.globalData.shangpinliebiao = sortedShangpin;
|
||||
@@ -189,12 +183,11 @@ Page({
|
||||
} catch (error) {
|
||||
console.error('初始化失败:', error);
|
||||
this.setData({ isLoading: false });
|
||||
// 错误提示已在各函数内部处理,此处仅做兜底
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 加载公告和轮播图(完全复用原逻辑,使用 wx.request,不使用封装 request)
|
||||
* 加载公告和轮播图
|
||||
*/
|
||||
loadGonggaoAndLunbo() {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -237,7 +230,7 @@ Page({
|
||||
},
|
||||
|
||||
/**
|
||||
* 筛选商品数据(完全复用原有逻辑,不做任何改动)
|
||||
* 筛选商品数据
|
||||
*/
|
||||
filterShangpinData() {
|
||||
const { selectedLeixingId, shangpinzhuanqu, shangpinliebiao } = this.data;
|
||||
@@ -337,8 +330,8 @@ Page({
|
||||
},
|
||||
|
||||
/**
|
||||
* 刷新所有数据(点击刷新按钮)
|
||||
* 只刷新商品数据,公告轮播图保持不变(若需刷新可清空全局缓存后调用 loadGonggaoAndLunbo)
|
||||
* 刷新所有数据
|
||||
* 只刷新商品数据
|
||||
*/
|
||||
async refreshAllData() {
|
||||
if (this.data.isRefreshing) return;
|
||||
@@ -346,11 +339,9 @@ Page({
|
||||
wx.showLoading({ title: '刷新中...', mask: true });
|
||||
|
||||
try {
|
||||
// 重新获取商品数据(登录状态由 fetchShopGoods 内部确保)
|
||||
// 重新获取商品数据
|
||||
const shopData = await fetchShopGoods();
|
||||
|
||||
// 公告轮播图通常不需要随刷新按钮更新,保持原样
|
||||
|
||||
const sortedLeixing = this.sortByPaixu(shopData.shangpinleixing || []);
|
||||
const sortedZhuanqu = this.sortByPaixu(shopData.shangpinzhuanqu || []);
|
||||
const sortedShangpin = this.sortByPaixu(shopData.shangpinliebiao || []);
|
||||
@@ -381,7 +372,7 @@ Page({
|
||||
const shangpinId = e.currentTarget.dataset.id;
|
||||
if (!shangpinId) return;
|
||||
wx.navigateTo({
|
||||
url: `/pages/shangpinxiangqing/shangpinxiangqing?id=${shangpinId}`
|
||||
url: `/pages/product-detail/product-detail?id=${shangpinId}`
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
@@ -113,7 +113,6 @@
|
||||
class="shangpin-image"
|
||||
lazy-load="{{true}}"
|
||||
/>
|
||||
<!-- 移除已售标签 -->
|
||||
</view>
|
||||
|
||||
<!-- 商品标题 -->
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user