修改小程序bug

This commit is contained in:
2026-03-24 00:21:19 +08:00
parent 9efd2bc3a3
commit ca8794ea3a
28 changed files with 3169 additions and 986 deletions

View File

@@ -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 {
baseUrl : string;
apikey : string;

View File

@@ -3,7 +3,9 @@
"private": true,
"scripts": {
"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": {
"@supabase/supabase-js": "^2.99.1",

1822
pages.full.json Normal file

File diff suppressed because it is too large Load Diff

173
pages.merchant.json Normal file
View 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"
}
}

View File

@@ -1,300 +1,32 @@
编译 pages/mall/merchant/exclusive-discounts.wxss
编译 pages/mall/merchant/exclusive-discounts.wxss
编译 pages/mall/merchant/profile.wxss
编译 pages/mall/merchant/profile.wxss
getDevCodeByFileList-miniProgram
编译 pages/mall/merchant/index.js
编译 pages/mall/merchant/index.js
getDevCodeByFileList-miniProgram
编译 pages/mall/merchant/orders.js
编译 pages/mall/merchant/orders.js
编译 app.json
编译 ext.json
编译 246 个页面json文件
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
getDevCodeByFileList-miniProgram
Cannot read properties of undefined (reading 'functionalPages')
Compile app.json
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')
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]
12:17:17.493 开始差量编译...
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".
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".
12:18:07.237
12:18:07.237 编译器内存溢出请参考https://uniapp.dcloud.net.cn/tutorial/run/OOM.html
12:18:07.237
12:18:07.237 <--- Last few GCs --->
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
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
12:18:07.237 <--- JS stacktrace --->
12:18:07.237 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
12:18:07.354 1: 00007FF6CDCD5AFF node_api_throw_syntax_error+174175
12:18:07.354 2: 00007FF6CDC58F26 v8::internal::wasm::WasmCode::safepoint_table_offset+59926
12:18:07.354 3: 00007FF6CDC5ABC0 v8::internal::wasm::WasmCode::safepoint_table_offset+67248
12:18:07.354 4: 00007FF6CE706224 v8::Isolate::ReportExternalAllocationLimitReached+116
12:18:07.354 5: 00007FF6CE6F15B2 v8::Isolate::Exit+674
12:18:07.354 6: 00007FF6CE57327C v8::internal::EmbedderStackStateScope::ExplicitScopeForTesting+124
12:18:07.354 7: 00007FF6CE57049B v8::internal::Heap::CollectGarbage+3963
12:18:07.354 8: 00007FF6CE517125 v8::internal::IndexGenerator::~IndexGenerator+22565
12:18:07.354 9: 00007FF6CDBED953 ENGINE_get_load_privkey_function+4835
12:18:07.354 10: 00007FF6CDBEC2F6 v8::CTypeInfoBuilder<void>::Build+21526
12:18:07.354 11: 00007FF6CDD31E4B uv_update_time+491
12:18:07.354 12: 00007FF6CDD31992 uv_run+1266
12:18:07.354 13: 00007FF6CDD04692 node::SpinEventLoop+322
12:18:07.354 14: 00007FF6CDC112F8 ENGINE_get_load_privkey_function+150664
12:18:07.354 15: 00007FF6CDC95A6E node::InitializeOncePerProcess+2862
12:18:07.354 16: 00007FF6CDC97403 node::Start+835
12:18:07.354 17: 00007FF6CDA9C12C AES_cbc_encrypt+145244
12:18:07.354 18: 00007FF6CED25DE4 inflateValidate+19092
12:18:07.354 19: 00007FFE7BD8E8D7 BaseThreadInitThunk+23
12:18:07.354 20: 00007FFE7D74C48C RtlUserThreadStart+44
12:18:07.601 已停止运行...

View File

@@ -41,7 +41,38 @@
</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-header">
@@ -332,7 +363,8 @@
} as PendingCountsType,
recentOrders: [] as OrderType[],
unreadCount: 0,
refreshing: false
refreshing: false,
isPageReady: false
}
},
@@ -348,6 +380,32 @@
},
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) {
this.loadAllData()
this.startRealtimeSubscription()
@@ -424,6 +482,25 @@
await this.loadPendingCounts()
await this.loadRecentOrders()
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 {
@@ -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-title { font-size: 34rpx; font-weight: bold; color: #333333; }
.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>

View File

@@ -13,9 +13,17 @@
</view>
<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">
<text class="loading-icon">⏳</text>
<text class="loading-text">加载中...</text>
<view v-if="loading && conversations.length === 0" class="ske-msg-list">
<view v-for="n in 5" :key="n" class="ske-conv-item">
<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 v-else-if="conversations.length === 0" class="empty-container">
@@ -87,7 +95,8 @@
conversations: [] as ConversationType[],
loading: false,
refreshing: false,
merchantId: ''
merchantId: '',
isPageReady: false
}
},
@@ -96,6 +105,17 @@
},
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()
},
@@ -173,12 +193,17 @@
}
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) {
console.error('加载消息失败:', e)
} finally {
this.loading = false
this.refreshing = false
this.isPageReady = true
}
},
@@ -248,4 +273,15 @@
.conv-arrow { font-size: 40rpx; color: #ccc; margin-left: 10rpx; }
.safe-bottom { height: 160rpx; }
/* ===== 骨架屏 ===== */
@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>

View File

@@ -2,9 +2,8 @@
<template>
<view class="orders-page">
<!-- #ifdef MP-WEIXIN -->
<!-- Tab 页无返回按鈕,展示顶部安全区 + 页面标题 -->
<view class="mp-tab-navbar">
<text class="mp-tab-title">订单管理</text>
<text class="mp-tab-title">订单</text>
</view>
<!-- #endif -->
<!-- 标签页切换 -->
@@ -38,14 +37,30 @@
<!-- 订单列表 -->
<scroll-view
class="orders-list"
scroll-y
direction="vertical"
:refresher-enabled="true"
:refresher-triggered="refreshing"
@refresherrefresh="onRefresh"
@scrolltolower="loadMore"
>
<view v-if="loading && orders.length === 0" class="loading-container">
<text class="loading-text">加载中...</text>
<view v-if="loading && orders.length === 0" class="ske-orders-wrap">
<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 v-else-if="orders.length === 0" class="empty-container">
@@ -134,6 +149,8 @@
<view v-if="!hasMore && orders.length > 0" class="no-more">
<text class="no-more-text">没有更多了</text>
</view>
<!-- 底部占位tabbar高度 + safeAreaInsets.bottom动态计算 -->
<view class="safe-bottom" :style="{ height: safeBottomHeight }"></view>
</scroll-view>
<!-- 发货弹窗 -->
@@ -257,7 +274,10 @@
{ name: '京东物流', code: 'JD' }
] as LogisticsType[],
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.initMerchantId()
this.initSafeArea()
},
onShow() {
@@ -288,6 +309,23 @@
},
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() {
try {
const session = supa.getSession()
@@ -415,7 +453,6 @@
this.hasMore = rawData.length >= this.limit
} catch (e) {
console.error('获取订单异常:', e)
uni.showToast({ title: '加载失败,请检查网络连接', icon: 'none' })
} finally {
this.loading = false
this.refreshing = false
@@ -636,21 +673,42 @@
<style>
.orders-page {
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-title { font-size: 34rpx; font-weight: bold; color: #333333; }
.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;
}
.tabs-container {
background-color: #fff;
position: sticky;
top: 0;
z-index: 100;
/* 去除 sticky+z-index在小程序中两者结合会创建茂叠上下文层
导致兴弟节点 merchant-tabbar (position:fixed) 被层叠侧改而隐藏 */
flex-shrink: 0;
}
.tabs-scroll {
display: flex;
flex-direction: row;
overflow-x: auto;
white-space: nowrap;
padding: 0 20rpx;
@@ -728,7 +786,14 @@
.orders-list {
padding: 0 20rpx;
height: calc(100vh - 460rpx);
flex: 1;
overflow: hidden;
}
.safe-bottom {
/* 高度通过 :style=" {height: safeBottomHeight}" 动态设置,
不再写死 160rpx */
background-color: transparent;
}
.loading-container, .empty-container {
@@ -1058,4 +1123,18 @@
color: #007AFF;
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>

File diff suppressed because it is too large Load Diff

45
scripts/switch-pages.js Normal file
View 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 恢复完整编译模式");
}