修改小程序bug
This commit is contained in:
@@ -670,6 +670,38 @@ export class AkSupaStorageApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supabase Channel-style realtime subscription wrapper.
|
||||||
|
* Provides a chainable API compatible with the Supabase JS client channel() pattern.
|
||||||
|
* Internally delegates to the AkSupa polling/websocket layer.
|
||||||
|
*/
|
||||||
|
export class AkSupaRealtimeChannel {
|
||||||
|
private _topic: string;
|
||||||
|
private _client: any; // AkSupa reference (any to avoid forward-reference issues)
|
||||||
|
private _listeners: Array<{ type: string; callback: (payload: any) => void }> = [];
|
||||||
|
|
||||||
|
constructor(client: any, topic: string) {
|
||||||
|
this._client = client;
|
||||||
|
this._topic = topic;
|
||||||
|
}
|
||||||
|
|
||||||
|
on(type: string, _filter: any, callback: (payload: any) => void): AkSupaRealtimeChannel {
|
||||||
|
this._listeners.push({ type, callback });
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
subscribe(callback?: (status: string, err: any | null) => void): AkSupaRealtimeChannel {
|
||||||
|
if (callback != null) {
|
||||||
|
callback('SUBSCRIBED', null);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsubscribe(): void {
|
||||||
|
this._listeners = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class AkSupa {
|
export class AkSupa {
|
||||||
baseUrl : string;
|
baseUrl : string;
|
||||||
apikey : string;
|
apikey : string;
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint --ext .js,.vue,.uvue pages layouts",
|
"lint": "eslint --ext .js,.vue,.uvue pages layouts",
|
||||||
"lint:fix": "eslint --ext .js,.vue,.uvue --fix pages layouts"
|
"lint:fix": "eslint --ext .js,.vue,.uvue --fix pages layouts",
|
||||||
|
"pages:merchant": "node scripts/switch-pages.js merchant",
|
||||||
|
"pages:full": "node scripts/switch-pages.js full"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@supabase/supabase-js": "^2.99.1",
|
"@supabase/supabase-js": "^2.99.1",
|
||||||
|
|||||||
1822
pages.full.json
Normal file
1822
pages.full.json
Normal file
File diff suppressed because it is too large
Load Diff
173
pages.merchant.json
Normal file
173
pages.merchant.json
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
{
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"path": "pages/user/boot",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/user/login",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "用户登录",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/user/register",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "注册"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/user/forgot-password",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "忘记密码"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/user/terms",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "用户协议与隐私政策"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/user/change-password",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "修改密码"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "首页",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/messages",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "消息",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/orders",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "订单",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/growth",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "成长",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/profile",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "我的",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/order-detail",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "订单详情",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/products",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "商品管理",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/product-detail",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "商品详情",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/product-edit",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "编辑商品",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/reviews",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "评价管理",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/inventory",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "库存管理",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/shop-edit",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "店铺设置",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/promotions",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "营销活动",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/statistics",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "数据统计",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/finance",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "财务结算",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/members",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "会员管理",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/chat",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "客服聊天",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mall/merchant/exclusive-discounts",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "专属折扣",
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"globalStyle": {
|
||||||
|
"navigationBarTextStyle": "black",
|
||||||
|
"navigationBarTitleText": "mall",
|
||||||
|
"navigationBarBackgroundColor": "#FFFFFF",
|
||||||
|
"backgroundColor": "#F8F8F8"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,300 +1,32 @@
|
|||||||
编译 pages/mall/merchant/exclusive-discounts.wxss
|
12:17:17.493 开始差量编译...
|
||||||
编译 pages/mall/merchant/exclusive-discounts.wxss
|
12:17:40.769 ../../../../骅锋/mall/pages/mall/merchant/chat.uvue?vue&type=script&lang.uts (3:15): "AkSupaRealtimeChannel" is not exported by "../../../../骅锋/mall/components/supadb/aksupa.uts", imported by "../../../../骅锋/mall/pages/mall/merchant/chat.uvue?vue&type=script&lang.uts".
|
||||||
编译 pages/mall/merchant/profile.wxss
|
12:17:40.787 ../../../../骅锋/mall/pages/mall/consumer/chat.uvue?vue&type=script&setup=true&lang.uts (8:14): "AkSupaRealtimeChannel" is not exported by "../../../../骅锋/mall/components/supadb/aksupa.uts", imported by "../../../../骅锋/mall/pages/mall/consumer/chat.uvue?vue&type=script&setup=true&lang.uts".
|
||||||
编译 pages/mall/merchant/profile.wxss
|
12:18:07.237
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.237 编译器内存溢出,请参考:https://uniapp.dcloud.net.cn/tutorial/run/OOM.html
|
||||||
编译 pages/mall/merchant/index.js
|
12:18:07.237
|
||||||
编译 pages/mall/merchant/index.js
|
12:18:07.237 <--- Last few GCs --->
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.237 [52392:000000000406C4F0] 318731 ms: Mark-sweep 3001.0 (3118.8) -> 2981.7 (3119.0) MB, 792.1 / 0.0 ms (average mu = 0.129, current mu = 0.068) task; scavenge might not succeed
|
||||||
编译 pages/mall/merchant/orders.js
|
12:18:07.237 [52392:000000000406C4F0] 320456 ms: Mark-sweep 3005.2 (3119.6) -> 2981.1 (3120.3) MB, 1666.9 / 0.0 ms (average mu = 0.073, current mu = 0.034) task; scavenge might not succeed
|
||||||
编译 pages/mall/merchant/orders.js
|
12:18:07.237 <--- JS stacktrace --->
|
||||||
编译 app.json
|
12:18:07.237 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
|
||||||
编译 ext.json
|
12:18:07.354 1: 00007FF6CDCD5AFF node_api_throw_syntax_error+174175
|
||||||
编译 246 个页面json文件
|
12:18:07.354 2: 00007FF6CDC58F26 v8::internal::wasm::WasmCode::safepoint_table_offset+59926
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 3: 00007FF6CDC5ABC0 v8::internal::wasm::WasmCode::safepoint_table_offset+67248
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 4: 00007FF6CE706224 v8::Isolate::ReportExternalAllocationLimitReached+116
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 5: 00007FF6CE6F15B2 v8::Isolate::Exit+674
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 6: 00007FF6CE57327C v8::internal::EmbedderStackStateScope::ExplicitScopeForTesting+124
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 7: 00007FF6CE57049B v8::internal::Heap::CollectGarbage+3963
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 8: 00007FF6CE517125 v8::internal::IndexGenerator::~IndexGenerator+22565
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 9: 00007FF6CDBED953 ENGINE_get_load_privkey_function+4835
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 10: 00007FF6CDBEC2F6 v8::CTypeInfoBuilder<void>::Build+21526
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 11: 00007FF6CDD31E4B uv_update_time+491
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 12: 00007FF6CDD31992 uv_run+1266
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 13: 00007FF6CDD04692 node::SpinEventLoop+322
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 14: 00007FF6CDC112F8 ENGINE_get_load_privkey_function+150664
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 15: 00007FF6CDC95A6E node::InitializeOncePerProcess+2862
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 16: 00007FF6CDC97403 node::Start+835
|
||||||
getDevCodeByFileList-miniProgram
|
12:18:07.354 17: 00007FF6CDA9C12C AES_cbc_encrypt+145244
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
12:18:07.354 18: 00007FF6CED25DE4 inflateValidate+19092
|
||||||
Compile app.json
|
12:18:07.354 19: 00007FFE7BD8E8D7 BaseThreadInitThunk+23
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
12:18:07.354 20: 00007FFE7D74C48C RtlUserThreadStart+44
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
12:18:07.601 已停止运行...
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Cannot read properties of undefined (reading 'functionalPages')
|
|
||||||
Compile ext.json
|
|
||||||
Compile json files of 246 pages
|
|
||||||
analyzing codes...
|
|
||||||
ignoring files: project.private.config.json,uni_modules/charts/EChartsView2.js,layouts/admin/components/PlaceholderPage.wxml,layouts/admin/pages/HomeIndex.wxml,components/analytics/AnalyticsAreaChart.js,pages/mall/admin/homePage/components/KpiMiniCard.js,pages/mall/admin/decoration/components/types.js,uni_modules/ak-req/index.js,pages/mall/admin/homePage/components/KpiMiniCard.wxss,components/analytics/AnalyticsAreaChart.wxss,components/analytics/AnalyticsAreaChart.json,pages/mall/admin/homePage/components/KpiMiniCard.json,pages/mall/admin/product/product-management/components/edit.wxml,pages/mall/admin/product/product-management/components/member-price.wxml,pages/mall/admin/homePage/components/KpiMiniCard.wxml,components/analytics/AnalyticsAreaChart.wxml
|
|
||||||
analyzing codes success
|
|
||||||
Ignored by code analyzer: project.private.config.json,uni_modules/charts/EChartsView2.js,layouts/admin/components/PlaceholderPage.wxml,layouts/admin/pages/HomeIndex.wxml,components/analytics/AnalyticsAreaChart.js,pages/mall/admin/homePage/components/KpiMiniCard.js,pages/mall/admin/decoration/components/types.js,uni_modules/ak-req/index.js,pages/mall/admin/homePage/components/KpiMiniCard.wxss,components/analytics/AnalyticsAreaChart.wxss,components/analytics/AnalyticsAreaChart.json,pages/mall/admin/homePage/components/KpiMiniCard.json,pages/mall/admin/product/product-management/components/edit.wxml,pages/mall/admin/product/product-management/components/member-price.wxml,pages/mall/admin/homePage/components/KpiMiniCard.wxml,components/analytics/AnalyticsAreaChart.wxml
|
|
||||||
analyzing codes...
|
|
||||||
ignoring files: project.private.config.json,uni_modules/charts/EChartsView2.js,layouts/admin/components/PlaceholderPage.wxml,layouts/admin/pages/HomeIndex.wxml,components/analytics/AnalyticsAreaChart.js,pages/mall/admin/homePage/components/KpiMiniCard.js,pages/mall/admin/decoration/components/types.js,uni_modules/ak-req/index.js,pages/mall/admin/homePage/components/KpiMiniCard.wxss,components/analytics/AnalyticsAreaChart.wxss,components/analytics/AnalyticsAreaChart.json,pages/mall/admin/homePage/components/KpiMiniCard.json,pages/mall/admin/product/product-management/components/edit.wxml,pages/mall/admin/product/product-management/components/member-price.wxml,pages/mall/admin/homePage/components/KpiMiniCard.wxml,components/analytics/AnalyticsAreaChart.wxml
|
|
||||||
analyzing codes success
|
|
||||||
analyzing codes...
|
|
||||||
ignoring files: project.private.config.json,uni_modules/charts/EChartsView2.js,layouts/admin/components/PlaceholderPage.wxml,layouts/admin/pages/HomeIndex.wxml,components/analytics/AnalyticsAreaChart.js,pages/mall/admin/homePage/components/KpiMiniCard.js,pages/mall/admin/decoration/components/types.js,uni_modules/ak-req/index.js,pages/mall/admin/homePage/components/KpiMiniCard.wxss,components/analytics/AnalyticsAreaChart.wxss,components/analytics/AnalyticsAreaChart.json,pages/mall/admin/homePage/components/KpiMiniCard.json,pages/mall/admin/product/product-management/components/edit.wxml,pages/mall/admin/product/product-management/components/member-price.wxml,pages/mall/admin/homePage/components/KpiMiniCard.wxml,components/analytics/AnalyticsAreaChart.wxml
|
|
||||||
analyzing codes success
|
|
||||||
Ignored by code analyzer: project.private.config.json,uni_modules/charts/EChartsView2.js,layouts/admin/components/PlaceholderPage.wxml,layouts/admin/pages/HomeIndex.wxml,components/analytics/AnalyticsAreaChart.js,pages/mall/admin/homePage/components/KpiMiniCard.js,uni_modules/ak-req/index.js,pages/mall/admin/homePage/components/KpiMiniCard.wxss,components/analytics/AnalyticsAreaChart.wxss,components/analytics/AnalyticsAreaChart.json,pages/mall/admin/homePage/components/KpiMiniCard.json,pages/mall/admin/homePage/components/KpiMiniCard.wxml,components/analytics/AnalyticsAreaChart.wxml
|
|
||||||
getDevCodeByFileList-miniProgram
|
|
||||||
Compiling layouts/admin/AdminLayout.wxml
|
|
||||||
Compiling layouts/admin/AdminLayout.wxml
|
|
||||||
Compiling layouts/admin/components/AdminAside.wxml
|
|
||||||
Compiling layouts/admin/components/AdminAside.wxml
|
|
||||||
Compiling layouts/admin/components/AdminFooter.wxml
|
|
||||||
Compiling layouts/admin/components/AdminFooter.wxml
|
|
||||||
Compiling layouts/admin/components/AdminHeader.wxml
|
|
||||||
Compiling layouts/admin/components/AdminHeader.wxml
|
|
||||||
Compiling layouts/admin/components/AdminPageLoading.wxml
|
|
||||||
Compiling layouts/admin/components/AdminPageLoading.wxml
|
|
||||||
Compiling layouts/admin/components/AdminSubSider.wxml
|
|
||||||
Compiling layouts/admin/components/AdminSubSider.wxml
|
|
||||||
Compiling layouts/admin/components/AdminTagsView.wxml
|
|
||||||
Compiling layouts/admin/components/AdminTagsView.wxml
|
|
||||||
Compiling common/uniView.wxs
|
|
||||||
Compiling common/uniView.wxs
|
|
||||||
Compiling pages/user/boot.wxml
|
|
||||||
Compiling pages/user/boot.wxml
|
|
||||||
Compiling pages/user/login.wxml
|
|
||||||
Compiling pages/user/login.wxml
|
|
||||||
Compiling pages/mall/admin/homePage/index.wxml
|
|
||||||
Compiling pages/mall/admin/homePage/index.wxml
|
|
||||||
Compiling pages/user/terms.wxml
|
|
||||||
Compiling pages/user/terms.wxml
|
|
||||||
Compiling pages/user/register.wxml
|
|
||||||
Compiling pages/user/register.wxml
|
|
||||||
Compiling pages/user/forgot-password.wxml
|
|
||||||
Compiling pages/user/forgot-password.wxml
|
|
||||||
Compiling pages/mall/admin/userCenter/index.wxml
|
|
||||||
Compiling pages/mall/admin/userCenter/index.wxml
|
|
||||||
Compiling pages/user/center.wxml
|
|
||||||
Compiling pages/user/center.wxml
|
|
||||||
Compiling pages/user/profile.wxml
|
|
||||||
Compiling pages/user/profile.wxml
|
|
||||||
Compiling pages/user/change-password.wxml
|
|
||||||
Compiling pages/user/change-password.wxml
|
|
||||||
Compiling pages/user/bind-phone.wxml
|
|
||||||
Compiling pages/user/bind-phone.wxml
|
|
||||||
Compiling pages/main/index.wxml
|
|
||||||
Compiling pages/main/index.wxml
|
|
||||||
Compiling pages/user/bind-email.wxml
|
|
||||||
Compiling pages/user/bind-email.wxml
|
|
||||||
Compiling pages/main/messages.wxml
|
|
||||||
Compiling pages/main/messages.wxml
|
|
||||||
Compiling pages/main/category.wxml
|
|
||||||
Compiling pages/main/category.wxml
|
|
||||||
Compiling pages/main/cart.wxml
|
|
||||||
Compiling pages/main/cart.wxml
|
|
||||||
Compiling pages/main/profile.wxml
|
|
||||||
Compiling pages/main/profile.wxml
|
|
||||||
Compiling pages/mall/merchant/index.wxml
|
|
||||||
Compiling pages/mall/merchant/index.wxml
|
|
||||||
Compiling pages/mall/merchant/orders.wxml
|
|
||||||
Compiling pages/mall/merchant/orders.wxml
|
|
||||||
Compiling pages/mall/merchant/order-detail.wxml
|
|
||||||
Compiling pages/mall/merchant/order-detail.wxml
|
|
||||||
Compiling pages/mall/merchant/products.wxml
|
|
||||||
Compiling pages/mall/merchant/products.wxml
|
|
||||||
Compiling pages/mall/merchant/product-edit.wxml
|
|
||||||
Compiling pages/mall/merchant/product-edit.wxml
|
|
||||||
Compiling pages/mall/merchant/product-detail.wxml
|
|
||||||
Compiling pages/mall/merchant/product-detail.wxml
|
|
||||||
Compiling pages/mall/merchant/inventory.wxml
|
|
||||||
Compiling pages/mall/merchant/inventory.wxml
|
|
||||||
Compiling pages/mall/merchant/reviews.wxml
|
|
||||||
Compiling pages/mall/merchant/reviews.wxml
|
|
||||||
Compiling pages/mall/merchant/messages.wxml
|
|
||||||
Compiling pages/mall/merchant/messages.wxml
|
|
||||||
Compiling pages/mall/merchant/shop-edit.wxml
|
|
||||||
Compiling pages/mall/merchant/shop-edit.wxml
|
|
||||||
Compiling pages/mall/merchant/promotions.wxml
|
|
||||||
Compiling pages/mall/merchant/promotions.wxml
|
|
||||||
Compiling pages/mall/merchant/statistics.wxml
|
|
||||||
Compiling pages/mall/merchant/statistics.wxml
|
|
||||||
Compiling pages/mall/merchant/finance.wxml
|
|
||||||
Compiling pages/mall/merchant/finance.wxml
|
|
||||||
Compiling pages/mall/merchant/members.wxml
|
|
||||||
Compiling pages/mall/merchant/members.wxml
|
|
||||||
Compiling pages/mall/merchant/chat.wxml
|
|
||||||
Compiling pages/mall/merchant/chat.wxml
|
|
||||||
Compiling pages/mall/merchant/exclusive-discounts.wxml
|
|
||||||
Compiling pages/mall/merchant/exclusive-discounts.wxml
|
|
||||||
Compiling pages/mall/merchant/profile.wxml
|
|
||||||
Compiling pages/mall/merchant/profile.wxml
|
|
||||||
Compiling components/CommonPagination/CommonPagination.wxml
|
|
||||||
Compiling components/CommonPagination/CommonPagination.wxml
|
|
||||||
Compiling components/StatusSwitch.wxml
|
|
||||||
Compiling components/StatusSwitch.wxml
|
|
||||||
Compiling uni_modules/charts/EChartsView.wxml
|
|
||||||
Compiling uni_modules/charts/EChartsView.wxml
|
|
||||||
Compiling components/analytics/AnalyticsSidebarMenu.wxml
|
|
||||||
Compiling components/analytics/AnalyticsSidebarMenu.wxml
|
|
||||||
Compiling components/analytics/AnalyticsTopBar.wxml
|
|
||||||
Compiling components/analytics/AnalyticsTopBar.wxml
|
|
||||||
Compiling components/analytics/AnalyticsDateRangePicker.wxml
|
|
||||||
Compiling components/analytics/AnalyticsDateRangePicker.wxml
|
|
||||||
Compiling components/analytics/AnalyticsMultiLineChart.wxml
|
|
||||||
Compiling components/analytics/AnalyticsMultiLineChart.wxml
|
|
||||||
Compiling components/analytics/AnalyticsUserGenderSection.wxml
|
|
||||||
Compiling components/analytics/AnalyticsUserGenderSection.wxml
|
|
||||||
Compiling components/analytics/AnalyticsUserMapTable.wxml
|
|
||||||
Compiling components/analytics/AnalyticsUserMapTable.wxml
|
|
||||||
Compiling components/analytics/AnalyticsPieChart.wxml
|
|
||||||
Compiling components/analytics/AnalyticsPieChart.wxml
|
|
||||||
Compiling components/analytics/AnalyticsComboChart.wxml
|
|
||||||
Compiling components/analytics/AnalyticsComboChart.wxml
|
|
||||||
Compiling components/analytics/AnalyticsRegionMap.wxml
|
|
||||||
Compiling components/analytics/AnalyticsRegionMap.wxml
|
|
||||||
getDevCodeByFileList-miniProgram
|
|
||||||
Compiling layouts/admin/AdminLayout.wxss
|
|
||||||
Compiling layouts/admin/AdminLayout.wxss
|
|
||||||
Compiling layouts/admin/components/AdminAside.wxss
|
|
||||||
Compiling layouts/admin/components/AdminAside.wxss
|
|
||||||
Compiling layouts/admin/components/AdminFooter.wxss
|
|
||||||
Compiling layouts/admin/components/AdminFooter.wxss
|
|
||||||
Compiling layouts/admin/components/AdminHeader.wxss
|
|
||||||
Compiling layouts/admin/components/AdminHeader.wxss
|
|
||||||
Compiling layouts/admin/components/AdminPageLoading.wxss
|
|
||||||
Compiling layouts/admin/components/AdminPageLoading.wxss
|
|
||||||
Compiling layouts/admin/components/AdminSubSider.wxss
|
|
||||||
Compiling layouts/admin/components/AdminSubSider.wxss
|
|
||||||
Compiling layouts/admin/components/AdminTagsView.wxss
|
|
||||||
Compiling layouts/admin/components/AdminTagsView.wxss
|
|
||||||
Compiling pages/mall/merchant/index.wxss
|
|
||||||
Compiling pages/mall/merchant/index.wxss
|
|
||||||
Compiling pages/mall/merchant/orders.wxss
|
|
||||||
Compiling pages/mall/merchant/orders.wxss
|
|
||||||
Compiling pages/mall/merchant/order-detail.wxss
|
|
||||||
Compiling pages/mall/merchant/order-detail.wxss
|
|
||||||
Compiling pages/mall/merchant/products.wxss
|
|
||||||
Compiling pages/mall/merchant/products.wxss
|
|
||||||
Compiling pages/mall/merchant/product-detail.wxss
|
|
||||||
Compiling pages/mall/merchant/product-detail.wxss
|
|
||||||
Compiling pages/mall/merchant/product-edit.wxss
|
|
||||||
Compiling pages/mall/merchant/product-edit.wxss
|
|
||||||
Compiling pages/mall/merchant/messages.wxss
|
|
||||||
Compiling pages/mall/merchant/messages.wxss
|
|
||||||
Compiling pages/mall/merchant/reviews.wxss
|
|
||||||
Compiling pages/mall/merchant/reviews.wxss
|
|
||||||
Compiling pages/mall/merchant/inventory.wxss
|
|
||||||
Compiling pages/mall/merchant/inventory.wxss
|
|
||||||
Compiling pages/mall/merchant/shop-edit.wxss
|
|
||||||
Compiling pages/mall/merchant/shop-edit.wxss
|
|
||||||
Compiling pages/mall/merchant/promotions.wxss
|
|
||||||
Compiling pages/mall/merchant/promotions.wxss
|
|
||||||
Compiling pages/mall/merchant/finance.wxss
|
|
||||||
Compiling pages/mall/merchant/finance.wxss
|
|
||||||
Compiling pages/mall/merchant/statistics.wxss
|
|
||||||
Compiling pages/mall/merchant/statistics.wxss
|
|
||||||
Compiling pages/mall/merchant/members.wxss
|
|
||||||
Compiling pages/mall/merchant/members.wxss
|
|
||||||
Compiling pages/mall/merchant/chat.wxss
|
|
||||||
Compiling pages/mall/merchant/chat.wxss
|
|
||||||
Compiling pages/mall/merchant/exclusive-discounts.wxss
|
|
||||||
Compiling pages/mall/merchant/exclusive-discounts.wxss
|
|
||||||
Compiling pages/mall/merchant/profile.wxss
|
|
||||||
Compiling pages/mall/merchant/profile.wxss
|
|
||||||
Compiling components/analytics/AnalyticsComboChart.wxss
|
|
||||||
Compiling components/analytics/AnalyticsComboChart.wxss
|
|
||||||
Compiling components/analytics/AnalyticsSidebarMenu.wxss
|
|
||||||
Compiling components/analytics/AnalyticsSidebarMenu.wxss
|
|
||||||
Compiling components/analytics/AnalyticsDateRangePicker.wxss
|
|
||||||
Compiling components/analytics/AnalyticsDateRangePicker.wxss
|
|
||||||
Compiling components/analytics/AnalyticsTopBar.wxss
|
|
||||||
Compiling components/analytics/AnalyticsTopBar.wxss
|
|
||||||
Compiling uni_modules/charts/EChartsView.wxss
|
|
||||||
Compiling uni_modules/charts/EChartsView.wxss
|
|
||||||
Compiling components/analytics/AnalyticsRegionMap.wxss
|
|
||||||
Compiling components/analytics/AnalyticsRegionMap.wxss
|
|
||||||
Compiling components/CommonPagination/CommonPagination.wxss
|
|
||||||
Compiling components/CommonPagination/CommonPagination.wxss
|
|
||||||
Compiling components/StatusSwitch.wxss
|
|
||||||
Compiling components/StatusSwitch.wxss
|
|
||||||
Compiling components/analytics/AnalyticsMultiLineChart.wxss
|
|
||||||
Compiling components/analytics/AnalyticsMultiLineChart.wxss
|
|
||||||
Compiling components/analytics/AnalyticsUserMapTable.wxss
|
|
||||||
Compiling components/analytics/AnalyticsUserMapTable.wxss
|
|
||||||
Compiling components/analytics/AnalyticsUserGenderSection.wxss
|
|
||||||
Compiling components/analytics/AnalyticsUserGenderSection.wxss
|
|
||||||
Compiling components/analytics/AnalyticsPieChart.wxss
|
|
||||||
Compiling components/analytics/AnalyticsPieChart.wxss
|
|
||||||
Compiling uvue.wxss
|
|
||||||
Compiling uvue.wxss
|
|
||||||
Compiling app.wxss
|
|
||||||
Compiling app.wxss
|
|
||||||
Compiling pages/user/boot.wxss
|
|
||||||
Compiling pages/user/boot.wxss
|
|
||||||
Compiling pages/user/login.wxss
|
|
||||||
Compiling pages/user/login.wxss
|
|
||||||
Compiling pages/mall/admin/homePage/index.wxss
|
|
||||||
Compiling pages/mall/admin/homePage/index.wxss
|
|
||||||
Compiling pages/user/register.wxss
|
|
||||||
Compiling pages/user/register.wxss
|
|
||||||
Compiling pages/mall/admin/userCenter/index.wxss
|
|
||||||
Compiling pages/mall/admin/userCenter/index.wxss
|
|
||||||
Compiling pages/user/forgot-password.wxss
|
|
||||||
Compiling pages/user/forgot-password.wxss
|
|
||||||
Compiling pages/user/terms.wxss
|
|
||||||
Compiling pages/user/terms.wxss
|
|
||||||
Compiling pages/user/center.wxss
|
|
||||||
Compiling pages/user/center.wxss
|
|
||||||
Compiling pages/user/profile.wxss
|
|
||||||
Compiling pages/user/profile.wxss
|
|
||||||
Compiling pages/user/change-password.wxss
|
|
||||||
Compiling pages/user/change-password.wxss
|
|
||||||
Compiling pages/user/bind-phone.wxss
|
|
||||||
Compiling pages/user/bind-phone.wxss
|
|
||||||
Compiling pages/main/index.wxss
|
|
||||||
Compiling pages/main/index.wxss
|
|
||||||
Compiling pages/user/bind-email.wxss
|
|
||||||
Compiling pages/user/bind-email.wxss
|
|
||||||
Compiling pages/main/category.wxss
|
|
||||||
Compiling pages/main/category.wxss
|
|
||||||
Compiling pages/main/messages.wxss
|
|
||||||
Compiling pages/main/messages.wxss
|
|
||||||
Compiling pages/main/cart.wxss
|
|
||||||
Compiling pages/main/cart.wxss
|
|
||||||
Compiling pages/main/profile.wxss
|
|
||||||
Compiling pages/main/profile.wxss
|
|
||||||
getDevCodeByFileList-miniProgram
|
|
||||||
Compiling app.js
|
|
||||||
Compiling app.js
|
|
||||||
getDevCodeByFileList-miniProgram
|
|
||||||
Compiling pages/mall/merchant/orders.js
|
|
||||||
Compiling pages/mall/merchant/orders.js
|
|
||||||
getDevCodeByFileList-miniProgram
|
|
||||||
Compiling pages/mall/merchant/inventory.js
|
|
||||||
Compiling pages/mall/merchant/inventory.js
|
|
||||||
getDevCodeByFileList-miniProgram
|
|
||||||
Compiling pages/mall/merchant/promotions.js
|
|
||||||
Compiling pages/mall/merchant/promotions.js
|
|
||||||
getDevCodeByFileList-miniProgram
|
|
||||||
Compiling pages/mall/merchant/products.js
|
|
||||||
Compiling pages/mall/merchant/products.js
|
|
||||||
getDevCodeByFileList-miniProgram
|
|
||||||
Compile app.json
|
|
||||||
app.json: app.json is not found in the project root directory
|
|
||||||
app.json: app.json is not found in the project root directory
|
|
||||||
Compile app.json
|
|
||||||
app.json: ["pages"][17]: "pages/mall/merchant/index" Should not exist in ["subPackages"][17] ["pages"][18]: "pages/mall/merchant/messages" Should not exist in ["subPackages"][17] ["pages"][19]: "pages/mall/merchant/orders" Should not exist in ["subPackages"][17] ["pages"][20]: "pages/mall/merchant/growth" Should not exist in ["subPackages"][17] ["pages"][21]: "pages/mall/merchant/profile" Should not exist in ["subPackages"][17]
|
|
||||||
Compile app.json
|
|
||||||
app.json: ["pages"][17]: "pages/mall/merchant/index" Should not exist in ["subPackages"][17] ["pages"][18]: "pages/mall/merchant/messages" Should not exist in ["subPackages"][17] ["pages"][19]: "pages/mall/merchant/orders" Should not exist in ["subPackages"][17] ["pages"][20]: "pages/mall/merchant/growth" Should not exist in ["subPackages"][17] ["pages"][21]: "pages/mall/merchant/profile" Should not exist in ["subPackages"][17]
|
|
||||||
@@ -41,7 +41,38 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="content-area">
|
<!-- 骨架屏:数据首次加载中 -->
|
||||||
|
<view v-if="!isPageReady" class="ske-body">
|
||||||
|
<view class="ske-card-wrap">
|
||||||
|
<view class="ske-row ske-mb16"><view class="ske-bar ske-w30 ske-h28"></view></view>
|
||||||
|
<view class="ske-grid-row">
|
||||||
|
<view v-for="n in 4" :key="n" class="ske-cell25">
|
||||||
|
<view class="ske-icon-sq"></view>
|
||||||
|
<view class="ske-bar ske-w40 ske-mt8 ske-h32"></view>
|
||||||
|
<view class="ske-bar ske-w60 ske-mt6 ske-h20"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="ske-card-wrap">
|
||||||
|
<view class="ske-row ske-mb16"><view class="ske-bar ske-w30 ske-h28"></view></view>
|
||||||
|
<view class="ske-grid-row">
|
||||||
|
<view v-for="n in 8" :key="n" class="ske-cell25">
|
||||||
|
<view class="ske-icon-sq"></view>
|
||||||
|
<view class="ske-bar ske-w60 ske-mt8 ske-h20"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="ske-card-wrap">
|
||||||
|
<view v-for="n in 3" :key="n" class="ske-order-row">
|
||||||
|
<view class="ske-order-img"></view>
|
||||||
|
<view class="ske-order-info">
|
||||||
|
<view class="ske-bar ske-w70 ske-h26 ske-mb8"></view>
|
||||||
|
<view class="ske-bar ske-w40 ske-h22"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="isPageReady" class="content-area">
|
||||||
<!-- 今日数据卡片 -->
|
<!-- 今日数据卡片 -->
|
||||||
<view class="stats-card">
|
<view class="stats-card">
|
||||||
<view class="stats-header">
|
<view class="stats-header">
|
||||||
@@ -332,7 +363,8 @@
|
|||||||
} as PendingCountsType,
|
} as PendingCountsType,
|
||||||
recentOrders: [] as OrderType[],
|
recentOrders: [] as OrderType[],
|
||||||
unreadCount: 0,
|
unreadCount: 0,
|
||||||
refreshing: false
|
refreshing: false,
|
||||||
|
isPageReady: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -348,6 +380,32 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
onShow() {
|
onShow() {
|
||||||
|
// 先从缓存恢复数据,消除白屏
|
||||||
|
try {
|
||||||
|
const raw = uni.getStorageSync('merchant_idx_cache')
|
||||||
|
if (raw != null && raw !== '') {
|
||||||
|
const c = JSON.parse(raw as string) as UTSJSONObject
|
||||||
|
this.shopInfo.shop_name = c.getString('shop_name') ?? null
|
||||||
|
this.shopInfo.shop_logo = c.getString('shop_logo') ?? null
|
||||||
|
this.shopInfo.rating_avg = c.getNumber('rating_avg') ?? null
|
||||||
|
this.shopInfo.total_sales = c.getNumber('total_sales') ?? null
|
||||||
|
this.todayStats = {
|
||||||
|
orders: c.getNumber('c_orders'),
|
||||||
|
sales: c.getNumber('c_sales'),
|
||||||
|
visitors: c.getNumber('c_visitors'),
|
||||||
|
conversion: c.getNumber('c_conversion')
|
||||||
|
}
|
||||||
|
this.pendingCounts = {
|
||||||
|
pending_shipment: c.getNumber('c_pship') ?? 0,
|
||||||
|
refund_requests: c.getNumber('c_refund') ?? 0,
|
||||||
|
low_stock: c.getNumber('c_lstock') ?? 0,
|
||||||
|
pending_reviews: c.getNumber('c_reviews') ?? 0
|
||||||
|
}
|
||||||
|
this.unreadCount = c.getNumber('c_unread') ?? 0
|
||||||
|
this.isPageReady = true
|
||||||
|
}
|
||||||
|
} catch(e) {}
|
||||||
|
// 后台刷新数据
|
||||||
if (this.merchantId) {
|
if (this.merchantId) {
|
||||||
this.loadAllData()
|
this.loadAllData()
|
||||||
this.startRealtimeSubscription()
|
this.startRealtimeSubscription()
|
||||||
@@ -424,6 +482,25 @@
|
|||||||
await this.loadPendingCounts()
|
await this.loadPendingCounts()
|
||||||
await this.loadRecentOrders()
|
await this.loadRecentOrders()
|
||||||
await this.loadUnreadCount()
|
await this.loadUnreadCount()
|
||||||
|
this.isPageReady = true
|
||||||
|
// 保存缓存
|
||||||
|
try {
|
||||||
|
uni.setStorageSync('merchant_idx_cache', JSON.stringify({
|
||||||
|
shop_name: this.shopInfo.shop_name ?? '',
|
||||||
|
shop_logo: this.shopInfo.shop_logo ?? '',
|
||||||
|
rating_avg: this.shopInfo.rating_avg ?? 5.0,
|
||||||
|
total_sales: this.shopInfo.total_sales ?? 0,
|
||||||
|
c_orders: this.todayStats.orders ?? 0,
|
||||||
|
c_sales: this.todayStats.sales ?? 0,
|
||||||
|
c_visitors: this.todayStats.visitors ?? 0,
|
||||||
|
c_conversion: this.todayStats.conversion ?? 0,
|
||||||
|
c_pship: this.pendingCounts.pending_shipment ?? 0,
|
||||||
|
c_refund: this.pendingCounts.refund_requests ?? 0,
|
||||||
|
c_lstock: this.pendingCounts.low_stock ?? 0,
|
||||||
|
c_reviews: this.pendingCounts.pending_reviews ?? 0,
|
||||||
|
c_unread: this.unreadCount
|
||||||
|
}))
|
||||||
|
} catch(e) {}
|
||||||
},
|
},
|
||||||
|
|
||||||
formatNumber(value: number | null): string {
|
formatNumber(value: number | null): string {
|
||||||
@@ -900,6 +977,22 @@
|
|||||||
.mp-tab-navbar { height: calc(88rpx + var(--status-bar-height)); padding-top: var(--status-bar-height); background-color: #ffffff; display: flex; flex-direction: row; align-items: center; justify-content: center; border-bottom-width: 1rpx; border-bottom-style: solid; border-bottom-color: #f0f0f0; }
|
.mp-tab-navbar { height: calc(88rpx + var(--status-bar-height)); padding-top: var(--status-bar-height); background-color: #ffffff; display: flex; flex-direction: row; align-items: center; justify-content: center; border-bottom-width: 1rpx; border-bottom-style: solid; border-bottom-color: #f0f0f0; }
|
||||||
.mp-tab-title { font-size: 34rpx; font-weight: bold; color: #333333; }
|
.mp-tab-title { font-size: 34rpx; font-weight: bold; color: #333333; }
|
||||||
.safe-bottom { height: 160rpx; }
|
.safe-bottom { height: 160rpx; }
|
||||||
|
|
||||||
|
/* ===== 骨架屏 ===== */
|
||||||
|
@keyframes ske-pulse { 0% { opacity: 1; } 50% { opacity: 0.45; } 100% { opacity: 1; } }
|
||||||
|
.ske-body { padding: 24rpx; }
|
||||||
|
.ske-card-wrap { background: #fff; border-radius: 24rpx; padding: 28rpx; margin-bottom: 24rpx; }
|
||||||
|
.ske-bar { border-radius: 8rpx; background-color: #e8e8e8; animation: ske-pulse 1.4s ease-in-out infinite; }
|
||||||
|
.ske-icon-sq { width: 64rpx; height: 64rpx; border-radius: 16rpx; background-color: #e8e8e8; margin-bottom: 12rpx; animation: ske-pulse 1.4s ease-in-out infinite; }
|
||||||
|
.ske-grid-row { display: flex; flex-direction: row; flex-wrap: wrap; }
|
||||||
|
.ske-cell25 { width: 25%; display: flex; flex-direction: column; align-items: center; padding-top: 16rpx; padding-bottom: 16rpx; }
|
||||||
|
.ske-row { display: flex; flex-direction: row; }
|
||||||
|
.ske-order-row { display: flex; flex-direction: row; align-items: center; margin-bottom: 20rpx; }
|
||||||
|
.ske-order-img { width: 100rpx; height: 100rpx; border-radius: 12rpx; background-color: #e8e8e8; margin-right: 16rpx; flex-shrink: 0; animation: ske-pulse 1.4s ease-in-out infinite; }
|
||||||
|
.ske-order-info { flex: 1; }
|
||||||
|
.ske-w30 { width: 30%; } .ske-w40 { width: 40%; } .ske-w60 { width: 60%; } .ske-w70 { width: 70%; }
|
||||||
|
.ske-h20 { height: 20rpx; } .ske-h22 { height: 22rpx; } .ske-h26 { height: 26rpx; } .ske-h28 { height: 28rpx; } .ske-h32 { height: 32rpx; }
|
||||||
|
.ske-mt6 { margin-top: 6rpx; } .ske-mt8 { margin-top: 8rpx; } .ske-mb8 { margin-bottom: 8rpx; } .ske-mb16 { margin-bottom: 16rpx; }
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,17 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<scroll-view class="messages-list" direction="vertical" :refresher-enabled="true" :refresher-triggered="refreshing" @refresherrefresh="onRefresh">
|
<scroll-view class="messages-list" direction="vertical" :refresher-enabled="true" :refresher-triggered="refreshing" @refresherrefresh="onRefresh">
|
||||||
<view v-if="loading && conversations.length === 0" class="loading-container">
|
<view v-if="loading && conversations.length === 0" class="ske-msg-list">
|
||||||
<text class="loading-icon">⏳</text>
|
<view v-for="n in 5" :key="n" class="ske-conv-item">
|
||||||
<text class="loading-text">加载中...</text>
|
<view class="ske-avatar-circle"></view>
|
||||||
|
<view class="ske-conv-info">
|
||||||
|
<view class="ske-conv-top">
|
||||||
|
<view class="ske-bar ske-w50 ske-h28"></view>
|
||||||
|
<view class="ske-bar ske-w20 ske-h22"></view>
|
||||||
|
</view>
|
||||||
|
<view class="ske-bar ske-w75 ske-h22 ske-mt10"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-else-if="conversations.length === 0" class="empty-container">
|
<view v-else-if="conversations.length === 0" class="empty-container">
|
||||||
@@ -87,7 +95,8 @@
|
|||||||
conversations: [] as ConversationType[],
|
conversations: [] as ConversationType[],
|
||||||
loading: false,
|
loading: false,
|
||||||
refreshing: false,
|
refreshing: false,
|
||||||
merchantId: ''
|
merchantId: '',
|
||||||
|
isPageReady: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -96,6 +105,17 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
onShow() {
|
onShow() {
|
||||||
|
// 先从缓存恢复会话列表,消除白屏
|
||||||
|
try {
|
||||||
|
const raw = uni.getStorageSync('merchant_msg_cache')
|
||||||
|
if (raw != null && raw !== '') {
|
||||||
|
const arr = JSON.parse(raw as string) as ConversationType[]
|
||||||
|
if (arr != null && (arr as any[]).length > 0) {
|
||||||
|
this.conversations = arr
|
||||||
|
this.isPageReady = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch(e) {}
|
||||||
this.loadMessages()
|
this.loadMessages()
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -173,12 +193,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.conversations = Array.from(sessionMap.values()).sort((a, b) => b.unread - a.unread)
|
this.conversations = Array.from(sessionMap.values()).sort((a, b) => b.unread - a.unread)
|
||||||
|
// 保存缓存
|
||||||
|
try {
|
||||||
|
uni.setStorageSync('merchant_msg_cache', JSON.stringify(this.conversations))
|
||||||
|
} catch(e) {}
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('加载消息失败:', e)
|
console.error('加载消息失败:', e)
|
||||||
} finally {
|
} finally {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.refreshing = false
|
this.refreshing = false
|
||||||
|
this.isPageReady = true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -248,4 +273,15 @@
|
|||||||
.conv-arrow { font-size: 40rpx; color: #ccc; margin-left: 10rpx; }
|
.conv-arrow { font-size: 40rpx; color: #ccc; margin-left: 10rpx; }
|
||||||
|
|
||||||
.safe-bottom { height: 160rpx; }
|
.safe-bottom { height: 160rpx; }
|
||||||
</style>
|
|
||||||
|
/* ===== 骨架屏 ===== */
|
||||||
|
@keyframes ske-pulse { 0% { opacity: 1; } 50% { opacity: 0.45; } 100% { opacity: 1; } }
|
||||||
|
.ske-msg-list { padding: 20rpx; }
|
||||||
|
.ske-conv-item { display: flex; flex-direction: row; align-items: center; padding-top: 24rpx; padding-bottom: 24rpx; border-bottom-width: 1rpx; border-bottom-style: solid; border-bottom-color: #f5f5f5; }
|
||||||
|
.ske-avatar-circle { width: 88rpx; height: 88rpx; border-radius: 44rpx; background-color: #e8e8e8; margin-right: 20rpx; flex-shrink: 0; animation: ske-pulse 1.4s ease-in-out infinite; }
|
||||||
|
.ske-conv-info { flex: 1; }
|
||||||
|
.ske-conv-top { display: flex; flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 10rpx; }
|
||||||
|
.ske-bar { border-radius: 8rpx; background-color: #e8e8e8; animation: ske-pulse 1.4s ease-in-out infinite; }
|
||||||
|
.ske-w20 { width: 20%; } .ske-w50 { width: 50%; } .ske-w75 { width: 75%; }
|
||||||
|
.ske-h22 { height: 22rpx; } .ske-h28 { height: 28rpx; } .ske-mt10 { margin-top: 10rpx; }
|
||||||
|
</style>
|
||||||
@@ -2,9 +2,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="orders-page">
|
<view class="orders-page">
|
||||||
<!-- #ifdef MP-WEIXIN -->
|
<!-- #ifdef MP-WEIXIN -->
|
||||||
<!-- Tab 页无返回按鈕,展示顶部安全区 + 页面标题 -->
|
|
||||||
<view class="mp-tab-navbar">
|
<view class="mp-tab-navbar">
|
||||||
<text class="mp-tab-title">订单管理</text>
|
<text class="mp-tab-title">订单</text>
|
||||||
</view>
|
</view>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- 标签页切换 -->
|
<!-- 标签页切换 -->
|
||||||
@@ -38,14 +37,30 @@
|
|||||||
<!-- 订单列表 -->
|
<!-- 订单列表 -->
|
||||||
<scroll-view
|
<scroll-view
|
||||||
class="orders-list"
|
class="orders-list"
|
||||||
scroll-y
|
direction="vertical"
|
||||||
:refresher-enabled="true"
|
:refresher-enabled="true"
|
||||||
:refresher-triggered="refreshing"
|
:refresher-triggered="refreshing"
|
||||||
@refresherrefresh="onRefresh"
|
@refresherrefresh="onRefresh"
|
||||||
@scrolltolower="loadMore"
|
@scrolltolower="loadMore"
|
||||||
>
|
>
|
||||||
<view v-if="loading && orders.length === 0" class="loading-container">
|
<view v-if="loading && orders.length === 0" class="ske-orders-wrap">
|
||||||
<text class="loading-text">加载中...</text>
|
<view v-for="n in 4" :key="n" class="ske-order-card">
|
||||||
|
<view class="ske-order-hd">
|
||||||
|
<view class="ske-bar ske-w50 ske-h26"></view>
|
||||||
|
<view class="ske-bar ske-w22 ske-h26"></view>
|
||||||
|
</view>
|
||||||
|
<view class="ske-order-product">
|
||||||
|
<view class="ske-product-img"></view>
|
||||||
|
<view class="ske-product-info">
|
||||||
|
<view class="ske-bar ske-w70 ske-h28 ske-mb10"></view>
|
||||||
|
<view class="ske-bar ske-w40 ske-h22"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="ske-order-ft">
|
||||||
|
<view class="ske-bar ske-w30 ske-h22"></view>
|
||||||
|
<view class="ske-bar ske-w25 ske-h30"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-else-if="orders.length === 0" class="empty-container">
|
<view v-else-if="orders.length === 0" class="empty-container">
|
||||||
@@ -134,6 +149,8 @@
|
|||||||
<view v-if="!hasMore && orders.length > 0" class="no-more">
|
<view v-if="!hasMore && orders.length > 0" class="no-more">
|
||||||
<text class="no-more-text">没有更多了</text>
|
<text class="no-more-text">没有更多了</text>
|
||||||
</view>
|
</view>
|
||||||
|
<!-- 底部占位:tabbar高度 + safeAreaInsets.bottom,动态计算 -->
|
||||||
|
<view class="safe-bottom" :style="{ height: safeBottomHeight }"></view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|
||||||
<!-- 发货弹窗 -->
|
<!-- 发货弹窗 -->
|
||||||
@@ -257,7 +274,10 @@
|
|||||||
{ name: '京东物流', code: 'JD' }
|
{ name: '京东物流', code: 'JD' }
|
||||||
] as LogisticsType[],
|
] as LogisticsType[],
|
||||||
selectedLogistics: null as LogisticsType | null,
|
selectedLogistics: null as LogisticsType | null,
|
||||||
trackingNumber: ''
|
trackingNumber: '',
|
||||||
|
isPageReady: false,
|
||||||
|
// 动态计算的底部安全却高度(tabbar高度 + safeAreaInsets.bottom)
|
||||||
|
safeBottomHeight: '160rpx' as string
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -273,6 +293,7 @@
|
|||||||
this.currentTab = statusMap[type] ?? -2
|
this.currentTab = statusMap[type] ?? -2
|
||||||
}
|
}
|
||||||
this.initMerchantId()
|
this.initMerchantId()
|
||||||
|
this.initSafeArea()
|
||||||
},
|
},
|
||||||
|
|
||||||
onShow() {
|
onShow() {
|
||||||
@@ -288,6 +309,23 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
// 计算底部安全區: tabbar自身高度(~56px) + 底部制安全区高度
|
||||||
|
initSafeArea() {
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
try {
|
||||||
|
const info = wx.getWindowInfo()
|
||||||
|
const safeObj = info.safeArea
|
||||||
|
if (safeObj != null) {
|
||||||
|
const bottomInset = info.screenHeight - safeObj.bottom
|
||||||
|
// tabbar内容区域约60px + 底部安剨覆盖
|
||||||
|
this.safeBottomHeight = (60 + bottomInset) + 'px'
|
||||||
|
}
|
||||||
|
} catch(_e : any) {
|
||||||
|
this.safeBottomHeight = '160rpx'
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
|
||||||
async initMerchantId() {
|
async initMerchantId() {
|
||||||
try {
|
try {
|
||||||
const session = supa.getSession()
|
const session = supa.getSession()
|
||||||
@@ -415,7 +453,6 @@
|
|||||||
this.hasMore = rawData.length >= this.limit
|
this.hasMore = rawData.length >= this.limit
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('获取订单异常:', e)
|
console.error('获取订单异常:', e)
|
||||||
uni.showToast({ title: '加载失败,请检查网络连接', icon: 'none' })
|
|
||||||
} finally {
|
} finally {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.refreshing = false
|
this.refreshing = false
|
||||||
@@ -636,21 +673,42 @@
|
|||||||
<style>
|
<style>
|
||||||
.orders-page {
|
.orders-page {
|
||||||
background-color: #f5f5f5;
|
background-color: #f5f5f5;
|
||||||
min-height: 100vh;
|
/* 使用严格高度而非 min-height,确保 flex:1 的 scroll-view 正确被限制在视口内 */
|
||||||
|
height: 100vh;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mp-tab-navbar { height: calc(88rpx + var(--status-bar-height)); padding-top: var(--status-bar-height); background-color: #ffffff; display: flex; flex-direction: row; align-items: center; justify-content: center; border-bottom-width: 1rpx; border-bottom-style: solid; border-bottom-color: #f0f0f0; }
|
.mp-tab-navbar {
|
||||||
.mp-tab-title { font-size: 34rpx; font-weight: bold; color: #333333; }
|
height: calc(88rpx + var(--status-bar-height));
|
||||||
|
padding-top: var(--status-bar-height);
|
||||||
|
background-color: #ffffff;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-bottom-width: 1rpx;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mp-tab-title {
|
||||||
|
font-size: 34rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
.tabs-container {
|
.tabs-container {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
position: sticky;
|
/* 去除 sticky+z-index:在小程序中两者结合会创建茂叠上下文层,
|
||||||
top: 0;
|
导致兴弟节点 merchant-tabbar (position:fixed) 被层叠侧改而隐藏 */
|
||||||
z-index: 100;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabs-scroll {
|
.tabs-scroll {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
padding: 0 20rpx;
|
padding: 0 20rpx;
|
||||||
@@ -728,7 +786,14 @@
|
|||||||
|
|
||||||
.orders-list {
|
.orders-list {
|
||||||
padding: 0 20rpx;
|
padding: 0 20rpx;
|
||||||
height: calc(100vh - 460rpx);
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.safe-bottom {
|
||||||
|
/* 高度通过 :style=" {height: safeBottomHeight}" 动态设置,
|
||||||
|
不再写死 160rpx */
|
||||||
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.loading-container, .empty-container {
|
.loading-container, .empty-container {
|
||||||
@@ -1058,4 +1123,18 @@
|
|||||||
color: #007AFF;
|
color: #007AFF;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ===== 骨架屏 ===== */
|
||||||
|
@keyframes ske-pulse { 0% { opacity: 1; } 50% { opacity: 0.45; } 100% { opacity: 1; } }
|
||||||
|
.ske-orders-wrap { padding: 24rpx; }
|
||||||
|
.ske-order-card { background-color: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 24rpx; }
|
||||||
|
.ske-order-hd { display: flex; flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 20rpx; }
|
||||||
|
.ske-order-product { display: flex; flex-direction: row; align-items: center; margin-bottom: 20rpx; }
|
||||||
|
.ske-product-img { width: 100rpx; height: 100rpx; border-radius: 12rpx; background-color: #e8e8e8; margin-right: 16rpx; flex-shrink: 0; animation: ske-pulse 1.4s ease-in-out infinite; }
|
||||||
|
.ske-product-info { flex: 1; }
|
||||||
|
.ske-order-ft { display: flex; flex-direction: row; justify-content: space-between; align-items: center; border-top-width: 1rpx; border-top-style: solid; border-top-color: #f5f5f5; padding-top: 16rpx; }
|
||||||
|
.ske-bar { border-radius: 8rpx; background-color: #e8e8e8; animation: ske-pulse 1.4s ease-in-out infinite; }
|
||||||
|
.ske-w22 { width: 22%; } .ske-w25 { width: 25%; } .ske-w30 { width: 30%; } .ske-w40 { width: 40%; } .ske-w50 { width: 50%; } .ske-w70 { width: 70%; }
|
||||||
|
.ske-h22 { height: 22rpx; } .ske-h26 { height: 26rpx; } .ske-h28 { height: 28rpx; } .ske-h30 { height: 30rpx; }
|
||||||
|
.ske-mb10 { margin-bottom: 10rpx; }
|
||||||
</style>
|
</style>
|
||||||
File diff suppressed because it is too large
Load Diff
45
scripts/switch-pages.js
Normal file
45
scripts/switch-pages.js
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* 切换 pages.json 在「完整模式」和「商家端专属模式」之间
|
||||||
|
*
|
||||||
|
* 用法:
|
||||||
|
* npm run pages:merchant → 仅编译 merchant 相关页面(大幅缩短编译时间)
|
||||||
|
* npm run pages:full → 恢复完整 pages.json
|
||||||
|
*/
|
||||||
|
const fs = require("fs");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
const root = path.resolve(__dirname, "..");
|
||||||
|
const pagesJson = path.join(root, "pages.json");
|
||||||
|
const pagesFull = path.join(root, "pages.full.json");
|
||||||
|
const pagesMerchant = path.join(root, "pages.merchant.json");
|
||||||
|
|
||||||
|
const mode = process.argv[2]; // 'merchant' | 'full'
|
||||||
|
|
||||||
|
if (mode === "merchant") {
|
||||||
|
if (!fs.existsSync(pagesMerchant)) {
|
||||||
|
console.error("❌ pages.merchant.json 不存在,请先创建该文件。");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
// 备份当前 pages.json(仅在未备份时执行,避免覆盖真正的完整版本)
|
||||||
|
if (!fs.existsSync(pagesFull)) {
|
||||||
|
fs.copyFileSync(pagesJson, pagesFull);
|
||||||
|
console.log("📦 已备份 pages.json → pages.full.json");
|
||||||
|
}
|
||||||
|
fs.copyFileSync(pagesMerchant, pagesJson);
|
||||||
|
console.log("✅ 已切换为【商家端专属编译模式】");
|
||||||
|
console.log(" 仅包含 merchant 页面,差量编译速度大幅提升。");
|
||||||
|
console.log(" 恢复完整版本:npm run pages:full");
|
||||||
|
} else if (mode === "full") {
|
||||||
|
if (!fs.existsSync(pagesFull)) {
|
||||||
|
console.error("❌ pages.full.json 不存在。");
|
||||||
|
console.error(" 可能当前已经是完整模式,或备份文件已被删除。");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
fs.copyFileSync(pagesFull, pagesJson);
|
||||||
|
console.log("✅ 已恢复【完整 pages.json】");
|
||||||
|
console.log(" 包含 consumer + merchant + admin 全部页面。");
|
||||||
|
} else {
|
||||||
|
console.log("用法:");
|
||||||
|
console.log(" npm run pages:merchant 切换到商家端专属编译模式");
|
||||||
|
console.log(" npm run pages:full 恢复完整编译模式");
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user