Compare commits
5 Commits
main
...
384111d6aa
| Author | SHA1 | Date | |
|---|---|---|---|
| 384111d6aa | |||
| 1df86154c8 | |||
| 15ded03ffb | |||
| 3196876bac | |||
| d5bd898896 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -43,4 +43,4 @@ Thumbs.db
|
|||||||
# Add any other project specific ignores below this line
|
# Add any other project specific ignores below this line
|
||||||
# local supabase
|
# local supabase
|
||||||
supabase/
|
supabase/
|
||||||
unpacked/
|
unpackage/
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
<!-- 机构端 - AI问诊页面 -->
|
<!-- 机构端 - AI问诊页面 -->
|
||||||
<template>
|
<template>
|
||||||
<view class="ai-page">
|
<view class="ai-page">
|
||||||
|
<!-- ===== 顶部固定区 ===== -->
|
||||||
|
<view class="top-fixed">
|
||||||
<!-- #ifdef MP-WEIXIN -->
|
<!-- #ifdef MP-WEIXIN -->
|
||||||
<view class="detail-navbar">
|
<view class="detail-navbar">
|
||||||
<view class="detail-navbar-back" @click="uni.navigateBack()">
|
<view class="detail-navbar-back" @click="uni.navigateBack()">
|
||||||
@@ -17,8 +19,17 @@
|
|||||||
<text class="risk-banner-icon">⚠️</text>
|
<text class="risk-banner-icon">⚠️</text>
|
||||||
<text class="risk-banner-text">AI问诊仅供参考,不能代替专业医生诊断,紧急情况请立即拨打120</text>
|
<text class="risk-banner-text">AI问诊仅供参考,不能代替专业医生诊断,紧急情况请立即拨打120</text>
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
<!-- 症状快捷选择 -->
|
<!-- ===== 中间自适应聊天区 ===== -->
|
||||||
|
<view class="middle-flex">
|
||||||
|
<scroll-view
|
||||||
|
class="chat-scroll"
|
||||||
|
direction="vertical"
|
||||||
|
:scroll-into-view="lastMsgId"
|
||||||
|
:scroll-with-animation="true"
|
||||||
|
>
|
||||||
|
<!-- 症状快捷选择(在聊天区顶部,随聊天区滚动) -->
|
||||||
<view v-if="!hasConversation" class="quick-select-area">
|
<view v-if="!hasConversation" class="quick-select-area">
|
||||||
<text class="qs-title">请选择主要症状(可多选)</text>
|
<text class="qs-title">请选择主要症状(可多选)</text>
|
||||||
<view class="qs-tags">
|
<view class="qs-tags">
|
||||||
@@ -37,13 +48,6 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 对话区域 -->
|
|
||||||
<scroll-view
|
|
||||||
class="chat-scroll"
|
|
||||||
direction="vertical"
|
|
||||||
:scroll-into-view="lastMsgId"
|
|
||||||
:scroll-with-animation="true"
|
|
||||||
>
|
|
||||||
<!-- 欢迎提示 -->
|
<!-- 欢迎提示 -->
|
||||||
<view class="welcome-msg" v-if="messages.length === 0 && !hasConversation">
|
<view class="welcome-msg" v-if="messages.length === 0 && !hasConversation">
|
||||||
<view class="welcome-avatar">🤖</view>
|
<view class="welcome-avatar">🤖</view>
|
||||||
@@ -113,10 +117,25 @@
|
|||||||
|
|
||||||
<view id="msg-bottom" style="height: 20rpx;"></view>
|
<view id="msg-bottom" style="height: 20rpx;"></view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
|
||||||
<!-- 快捷问题(有对话后显示) -->
|
<!-- ===== 底部固定区 ===== -->
|
||||||
<view v-if="hasConversation && quickReplies.length > 0" class="quick-replies">
|
<view class="bottom-fixed">
|
||||||
<scroll-view direction="horizontal" class="qr-scroll">
|
<!-- 快捷问题模块 -->
|
||||||
|
<view v-if="quickReplies.length > 0" class="quick-replies">
|
||||||
|
<view class="quick-replies-header" @click="toggleQuickReplies">
|
||||||
|
<view class="qr-header-left">
|
||||||
|
<text class="qr-header-icon">💬</text>
|
||||||
|
<text class="qr-title">快捷问题</text>
|
||||||
|
</view>
|
||||||
|
<view class="qr-toggle">
|
||||||
|
<text class="qr-toggle-text">{{ quickRepliesExpanded ? '收起' : '展开' }}</text>
|
||||||
|
<text class="qr-toggle-icon">{{ quickRepliesExpanded ? '▾' : '▸' }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="quickRepliesExpanded" class="quick-replies-body">
|
||||||
|
<scroll-view class="qr-scroll" :scroll-x="true" :scroll-y="false">
|
||||||
|
<view class="qr-scroll-inner">
|
||||||
<view
|
<view
|
||||||
v-for="qr in quickReplies"
|
v-for="qr in quickReplies"
|
||||||
:key="qr"
|
:key="qr"
|
||||||
@@ -125,8 +144,10 @@
|
|||||||
>
|
>
|
||||||
{{ qr }}
|
{{ qr }}
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
<!-- 输入区 -->
|
<!-- 输入区 -->
|
||||||
<view class="input-bar">
|
<view class="input-bar">
|
||||||
@@ -150,6 +171,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="uts">
|
<script lang="uts">
|
||||||
@@ -194,7 +216,8 @@
|
|||||||
lastMsgId: '' as string,
|
lastMsgId: '' as string,
|
||||||
selectedSymptoms: [] as string[],
|
selectedSymptoms: [] as string[],
|
||||||
symptomOptions: ['头晕', '胸痛', '发烧', '呼吸困难', '腹痛', '跌倒', '意识模糊', '血压异常', '血糖异常', '情绪异常'] as string[],
|
symptomOptions: ['头晕', '胸痛', '发烧', '呼吸困难', '腹痛', '跌倒', '意识模糊', '血压异常', '血糖异常', '情绪异常'] as string[],
|
||||||
quickReplies: ['症状加重了', '需要上门服务', '联系家属', '转诊医生', '今日用药'] as string[]
|
quickReplies: ['症状加重了', '需要上门服务', '联系家属', '转诊医生', '今日用药'] as string[],
|
||||||
|
quickRepliesExpanded: false as boolean
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -282,11 +305,16 @@
|
|||||||
this.messages = []
|
this.messages = []
|
||||||
this.hasConversation = false
|
this.hasConversation = false
|
||||||
this.lastMsgId = ''
|
this.lastMsgId = ''
|
||||||
|
this.quickRepliesExpanded = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
toggleQuickReplies() {
|
||||||
|
this.quickRepliesExpanded = !this.quickRepliesExpanded
|
||||||
|
},
|
||||||
|
|
||||||
exportRecord() {
|
exportRecord() {
|
||||||
uni.showToast({ title: '导出功能开发中', icon: 'none' })
|
uni.showToast({ title: '导出功能开发中', icon: 'none' })
|
||||||
},
|
},
|
||||||
@@ -309,9 +337,34 @@
|
|||||||
<style>
|
<style>
|
||||||
.ai-page {
|
.ai-page {
|
||||||
background-color: #f0f2f7;
|
background-color: #f0f2f7;
|
||||||
min-height: 100vh;
|
height: 100vh;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===== 三段式布局容器 ===== */
|
||||||
|
.top-fixed {
|
||||||
|
flex: none;
|
||||||
|
z-index: 10;
|
||||||
|
background-color: #f0f2f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.middle-flex {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom-fixed {
|
||||||
|
flex: none;
|
||||||
|
z-index: 10;
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-top-width: 1rpx;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-color: #eeeeee;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 导航栏 ===== */
|
/* ===== 导航栏 ===== */
|
||||||
@@ -444,7 +497,9 @@
|
|||||||
/* ===== 聊天滚动区 ===== */
|
/* ===== 聊天滚动区 ===== */
|
||||||
.chat-scroll {
|
.chat-scroll {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
width: 100%;
|
||||||
padding: 20rpx 0;
|
padding: 20rpx 0;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 欢迎消息 ===== */
|
/* ===== 欢迎消息 ===== */
|
||||||
@@ -686,34 +741,98 @@
|
|||||||
margin: 0 4rpx;
|
margin: 0 4rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 快捷回复 ===== */
|
/* ===== 快捷问题模块 ===== */
|
||||||
.quick-replies {
|
.quick-replies {
|
||||||
background-color: #ffffff;
|
flex: none;
|
||||||
|
background-color: #f8f9ff;
|
||||||
border-top-width: 1rpx;
|
border-top-width: 1rpx;
|
||||||
border-top-style: solid;
|
border-top-style: solid;
|
||||||
border-top-color: #f0f0f0;
|
border-top-color: #dde3f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.quick-replies-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 16rpx 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-header-left {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-header-icon {
|
||||||
|
font-size: 26rpx;
|
||||||
|
margin-right: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-title {
|
||||||
|
font-size: 26rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-toggle {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
background-color: rgb(66,121,240);
|
||||||
|
border-radius: 24rpx;
|
||||||
|
padding: 8rpx 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-toggle-text {
|
||||||
|
font-size: 22rpx;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-right: 6rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-toggle-icon {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #ffffff;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.quick-replies-body {
|
||||||
|
padding-bottom: 12rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.qr-scroll {
|
.qr-scroll {
|
||||||
white-space: nowrap;
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr-scroll-inner {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 16rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.qr-chip {
|
.qr-chip {
|
||||||
display: inline-flex;
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-shrink: 0;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
color: rgb(66,121,240);
|
color: rgb(66,121,240);
|
||||||
background-color: #eef2fe;
|
background-color: #ffffff;
|
||||||
border-radius: 20rpx;
|
border-width: 1rpx;
|
||||||
padding: 10rpx 24rpx;
|
border-style: solid;
|
||||||
margin: 12rpx 8rpx;
|
border-color: rgb(66,121,240);
|
||||||
|
border-radius: 24rpx;
|
||||||
|
padding: 10rpx 28rpx;
|
||||||
|
margin: 0 8rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
line-height: 60rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 输入区 ===== */
|
/* ===== 输入区 ===== */
|
||||||
.input-bar {
|
.input-bar {
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
border-top-width: 1rpx;
|
|
||||||
border-top-style: solid;
|
|
||||||
border-top-color: #eeeeee;
|
|
||||||
padding-bottom: env(safe-area-inset-bottom);
|
padding-bottom: env(safe-area-inset-bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
38
pages/mall/merchant/certification.uvue
Normal file
38
pages/mall/merchant/certification.uvue
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<!-- 机构端 - 资质管理页面 -->
|
||||||
|
<template>
|
||||||
|
<view class="page">
|
||||||
|
<!-- #ifdef MP-WEIXIN -->
|
||||||
|
<view class="detail-navbar">
|
||||||
|
<view class="detail-navbar-back" @click="uni.navigateBack()">
|
||||||
|
<text class="back-arrow">‹</text>
|
||||||
|
<text class="back-text">返回</text>
|
||||||
|
</view>
|
||||||
|
<text class="detail-navbar-title">资质管理</text>
|
||||||
|
<view style="width: 120rpx;"></view>
|
||||||
|
</view>
|
||||||
|
<!-- #endif -->
|
||||||
|
|
||||||
|
<view class="content">
|
||||||
|
<text class="tip">资质管理功能开发中,敬请期待</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="uts">
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.page { background-color: #f5f5f5; min-height: 100vh; }
|
||||||
|
.detail-navbar { display: flex; flex-direction: row; align-items: flex-end; background-color: #ffffff; border-bottom-width: 1rpx; border-bottom-style: solid; border-bottom-color: #eeeeee; box-sizing: border-box; padding-top: var(--status-bar-height); height: calc(88rpx + var(--status-bar-height)); }
|
||||||
|
.detail-navbar-back { display: flex; flex-direction: row; align-items: center; padding: 0 30rpx; height: 88rpx; width: 120rpx; }
|
||||||
|
.back-arrow { font-size: 44rpx; color: #333333; line-height: 1; margin-right: 4rpx; }
|
||||||
|
.back-text { font-size: 28rpx; color: #333333; }
|
||||||
|
.detail-navbar-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: 600; color: #1a1a1a; height: 88rpx; line-height: 88rpx; }
|
||||||
|
.content { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 120rpx 40rpx; }
|
||||||
|
.tip { font-size: 28rpx; color: #999; }
|
||||||
|
</style>
|
||||||
@@ -156,15 +156,18 @@
|
|||||||
async loadLevels() {
|
async loadLevels() {
|
||||||
const res = await supa.from('ml_member_levels').select('*').order('level_rank', { ascending: true }).execute()
|
const res = await supa.from('ml_member_levels').select('*').order('level_rank', { ascending: true }).execute()
|
||||||
if (res.data != null) {
|
if (res.data != null) {
|
||||||
this.levels = (res.data as any[]).map((item: any) => {
|
const raw = res.data as any[]
|
||||||
const obj = item as UTSJSONObject
|
const levels: MemberLevel[] = []
|
||||||
return {
|
for (let i = 0; i < raw.length; i++) {
|
||||||
|
const obj = raw[i] as UTSJSONObject
|
||||||
|
levels.push({
|
||||||
id: obj.getString('id') || '',
|
id: obj.getString('id') || '',
|
||||||
name: obj.getString('name') || '',
|
name: obj.getString('name') || '',
|
||||||
discount_rate: obj.getNumber('discount_rate') || 1.0,
|
discount_rate: obj.getNumber('discount_rate') || 1.0,
|
||||||
level_rank: obj.getNumber('level_rank') || 0
|
level_rank: obj.getNumber('level_rank') || 0
|
||||||
} as MemberLevel
|
} as MemberLevel)
|
||||||
})
|
}
|
||||||
|
this.levels = levels
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async loadUsers() {
|
async loadUsers() {
|
||||||
@@ -467,66 +470,414 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.members-page { background-color: #f8f9fa; min-height: 100vh; }
|
.members-page {
|
||||||
/* ===== tabs 横排 ===== */
|
display: flex;
|
||||||
.tabs { display: flex; flex-direction: row; background: #fff; padding: 20rpx 0; border-bottom: 1rpx solid #eee; }
|
flex-direction: column;
|
||||||
.tab { flex: 1; text-align: center; font-size: 28rpx; color: #666; }
|
background-color: #f8f9fa;
|
||||||
.tab.active { color: rgb(66, 121, 240); font-weight: bold; }
|
min-height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
.list-container { padding: 20rpx; }
|
.tabs {
|
||||||
.section-card { background: #fff; border-radius: 16rpx; padding: 30rpx; }
|
display: flex;
|
||||||
/* ===== 卡片头部横排 ===== */
|
flex-direction: row;
|
||||||
.card-header { display: flex; flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 30rpx; }
|
align-items: center;
|
||||||
.card-title { font-size: 32rpx; font-weight: bold; }
|
background: #ffffff;
|
||||||
.add-btn { color: rgb(66, 121, 240); font-size: 26rpx; }
|
padding: 0;
|
||||||
|
border-bottom: 1rpx solid #eeeeee;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
/* ===== 等级列表项横排(左名称+折扣 / 右操作)===== */
|
.tab {
|
||||||
.level-item { display: flex; flex-direction: row; justify-content: space-between; align-items: center; border-bottom: 1rpx solid #f5f5f5; padding: 20rpx 0; }
|
flex: 1;
|
||||||
.level-info { display: flex; flex-direction: column; flex: 1; }
|
display: flex;
|
||||||
.level-name { font-size: 30rpx; color: #333; margin-bottom: 4rpx; }
|
flex-direction: row;
|
||||||
.level-rate { font-size: 24rpx; color: #FF9500; }
|
align-items: center;
|
||||||
.level-actions { display: flex; flex-direction: row; align-items: center; }
|
justify-content: center;
|
||||||
.action-edit { color: rgb(66, 121, 240); font-size: 26rpx; margin-right: 24rpx; }
|
height: 88rpx;
|
||||||
.action-del { color: #FF3B30; font-size: 26rpx; }
|
font-size: 28rpx;
|
||||||
|
color: #666666;
|
||||||
|
position: relative;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
.search-bar { display: flex; flex-direction: row; align-items: center; padding: 20rpx; background: #fff; margin-bottom: 20rpx; border-radius: 12rpx; }
|
.tab.active {
|
||||||
.search-input { flex: 1; height: 72rpx; background: #f5f5f5; border-radius: 36rpx; padding: 0 30rpx; font-size: 26rpx; }
|
color: rgb(66, 121, 240);
|
||||||
.search-btn { margin-left: 20rpx; color: rgb(66, 121, 240); line-height: 72rpx; font-size: 28rpx; }
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
/* ===== 用户列表项横排(左头像 / 中信息 / 右操作)===== */
|
.tab.active::after {
|
||||||
.user-item { display: flex; flex-direction: row; align-items: center; background: #fff; padding: 24rpx; border-radius: 16rpx; margin-bottom: 20rpx; }
|
content: '';
|
||||||
.user-avatar { width: 90rpx; height: 90rpx; border-radius: 45rpx; background: #eee; flex-shrink: 0; }
|
position: absolute;
|
||||||
.user-info { flex: 1; margin-left: 24rpx; display: flex; flex-direction: column; }
|
bottom: 0;
|
||||||
/* 姓名行:昵称 + 等级标签横排 */
|
left: 50%;
|
||||||
.user-title-row { display: flex; flex-direction: row; align-items: center; flex-wrap: wrap; margin-bottom: 4rpx; }
|
transform: translateX(-50%);
|
||||||
.user-name { font-size: 30rpx; font-weight: bold; color: #333; margin-right: 10rpx; }
|
width: 44rpx;
|
||||||
.user-email { font-size: 22rpx; color: #999; margin-bottom: 4rpx; }
|
height: 4rpx;
|
||||||
.user-phone { font-size: 24rpx; color: #999; }
|
background: rgb(66, 121, 240);
|
||||||
.user-tier-tag { background: #FF9500; color: #fff; font-size: 20rpx; padding: 2rpx 12rpx; border-radius: 4rpx; }
|
border-radius: 2rpx;
|
||||||
/* ===== 操作按钮区横排 ===== */
|
}
|
||||||
.user-actions { display: flex; flex-direction: row; align-items: center; flex-shrink: 0; margin-left: 16rpx; }
|
|
||||||
.action-set { font-size: 24rpx; color: rgb(66, 121, 240); padding: 10rpx 16rpx; background-color: #e8f0fe; border-radius: 8rpx; }
|
|
||||||
.action-set.discount-btn { color: #FF9800; background-color: #FFF8E1; margin-left: 12rpx; }
|
|
||||||
|
|
||||||
/* 弹窗样式 */
|
.list-container {
|
||||||
.modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); display: flex; flex-direction: row; align-items: center; justify-content: center; z-index: 999; }
|
flex: 1;
|
||||||
.modal-content { background: #fff; width: 600rpx; border-radius: 24rpx; padding: 40rpx; }
|
height: calc(100vh - 176rpx);
|
||||||
.modal-title { text-align: center; font-size: 34rpx; font-weight: bold; margin-bottom: 30rpx; }
|
padding: 20rpx;
|
||||||
.form-item { margin-bottom: 30rpx; }
|
box-sizing: border-box;
|
||||||
.label { font-size: 26rpx; color: #666; margin-bottom: 12rpx; display: block; }
|
}
|
||||||
.input { background: #f5f5f5; height: 80rpx; border-radius: 12rpx; padding: 0 20rpx; font-size: 28rpx; }
|
|
||||||
/* ===== modal 按钮横排 ===== */
|
|
||||||
.modal-btns { display: flex; flex-direction: row; justify-content: flex-end; margin-top: 40rpx; }
|
|
||||||
.btn { padding: 16rpx 40rpx; border-radius: 12rpx; font-size: 28rpx; margin-left: 20rpx; }
|
|
||||||
.btn.cancel { background: #eee; color: #666; }
|
|
||||||
.btn.confirm { background: rgb(66, 121, 240); color: #fff; }
|
|
||||||
|
|
||||||
/* ===== 等级选择横向排列 ===== */
|
.section-card {
|
||||||
.tier-options { display: flex; flex-direction: row; flex-wrap: wrap; }
|
background: #ffffff;
|
||||||
.tier-option { padding: 16rpx 30rpx; background: #f5f5f5; margin: 10rpx; border-radius: 36rpx; font-size: 26rpx; }
|
border-radius: 16rpx;
|
||||||
.tier-option.selected { background: rgb(66, 121, 240); color: #fff; }
|
padding: 30rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.add-btn {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: rgb(66, 121, 240);
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 24rpx 0;
|
||||||
|
border-bottom: 1rpx solid #f5f5f5;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-info {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-name {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #333333;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 1.4;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-rate {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #ff9500;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-actions {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-edit,
|
||||||
|
.action-del {
|
||||||
|
font-size: 24rpx;
|
||||||
|
line-height: 1.4;
|
||||||
|
padding: 8rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-edit {
|
||||||
|
color: rgb(66, 121, 240);
|
||||||
|
margin-right: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-del {
|
||||||
|
color: #ff3b30;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-tip {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 220rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999999;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 24rpx;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-avatar {
|
||||||
|
width: 90rpx;
|
||||||
|
height: 90rpx;
|
||||||
|
border-radius: 45rpx;
|
||||||
|
background: #eeeeee;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-info {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-left: 24rpx;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-title-row {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-name {
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 1.4;
|
||||||
|
margin-right: 12rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-tier-tag {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 36rpx;
|
||||||
|
padding: 0 14rpx;
|
||||||
|
background: #ff9500;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 20rpx;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
line-height: 1;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-top: 4rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-email {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666666;
|
||||||
|
line-height: 1.4;
|
||||||
|
margin-bottom: 6rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-phone {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-actions {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-set {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 60rpx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: rgb(66, 121, 240);
|
||||||
|
background-color: #e8f0fe;
|
||||||
|
border-radius: 30rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-left: 12rpx;
|
||||||
|
margin-top: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-set.discount-btn {
|
||||||
|
color: #ff9800;
|
||||||
|
background-color: #fff8e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-bar {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
padding: 20rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input {
|
||||||
|
flex: 1;
|
||||||
|
height: 72rpx;
|
||||||
|
background: #f5f5f5;
|
||||||
|
border-radius: 36rpx;
|
||||||
|
padding: 0 30rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-btn {
|
||||||
|
margin-left: 20rpx;
|
||||||
|
height: 72rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: rgb(66, 121, 240);
|
||||||
|
font-size: 28rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal {
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 999;
|
||||||
|
padding: 30rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
width: 600rpx;
|
||||||
|
max-width: 100%;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 24rpx;
|
||||||
|
padding: 40rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-title {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 34rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 1.4;
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #666666;
|
||||||
|
line-height: 1.4;
|
||||||
|
margin-bottom: 12rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
background: #f5f5f5;
|
||||||
|
height: 80rpx;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-btns {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 160rpx;
|
||||||
|
height: 76rpx;
|
||||||
|
padding: 0 32rpx;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-left: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn.cancel {
|
||||||
|
background: #eeeeee;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
.btn.confirm {
|
||||||
|
background: rgb(66, 121, 240);
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tier-options {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: -10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tier-option {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 16rpx 30rpx;
|
||||||
|
background: #f5f5f5;
|
||||||
|
margin: 10rpx;
|
||||||
|
border-radius: 36rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #333333;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tier-option.selected {
|
||||||
|
background: rgb(66, 121, 240);
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -84,11 +84,7 @@
|
|||||||
const session = supa.getSession()
|
const session = supa.getSession()
|
||||||
this.merchantId = session?.user?.getString('id') || uni.getStorageSync('user_id') || ''
|
this.merchantId = session?.user?.getString('id') || uni.getStorageSync('user_id') || ''
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
},
|
this.loadPromotions()
|
||||||
|
|
||||||
async loadPromotions() {
|
|
||||||
this.loading = true
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await supa
|
const response = await supa
|
||||||
.from('ml_coupon_templates')
|
.from('ml_coupon_templates')
|
||||||
|
|||||||
@@ -100,7 +100,12 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
onLoad() {
|
onLoad() {
|
||||||
this.initMerchantId()
|
// 同步设置 merchantId,不用 async 包裹,避免 generator 内 this 绑定异常
|
||||||
|
try {
|
||||||
|
const session = supa.getSession()
|
||||||
|
this.merchantId = session?.user?.getString('id') || uni.getStorageSync('user_id') || ''
|
||||||
|
} catch (e) {}
|
||||||
|
this.loadReviews()
|
||||||
},
|
},
|
||||||
|
|
||||||
onShow() {
|
onShow() {
|
||||||
@@ -108,17 +113,10 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
async initMerchantId() {
|
|
||||||
try {
|
|
||||||
const session = supa.getSession()
|
|
||||||
this.merchantId = session?.user?.getString('id') || uni.getStorageSync('user_id') || ''
|
|
||||||
} catch (e) {}
|
|
||||||
},
|
|
||||||
|
|
||||||
async loadReviews() {
|
async loadReviews() {
|
||||||
|
if (!this.merchantId || this.merchantId.split('-').length !== 5) return
|
||||||
if (this.loading) return
|
if (this.loading) return
|
||||||
this.loading = true
|
this.loading = true
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let query = supa
|
let query = supa
|
||||||
.from('ml_product_reviews')
|
.from('ml_product_reviews')
|
||||||
@@ -127,7 +125,6 @@
|
|||||||
.order('created_at', { ascending: false })
|
.order('created_at', { ascending: false })
|
||||||
.page(this.page)
|
.page(this.page)
|
||||||
.limit(this.limit)
|
.limit(this.limit)
|
||||||
|
|
||||||
const response = await query.execute()
|
const response = await query.execute()
|
||||||
|
|
||||||
if (response.error != null || !response.data) {
|
if (response.error != null || !response.data) {
|
||||||
@@ -186,7 +183,8 @@
|
|||||||
if (!this.loadingMore && this.hasMore) {
|
if (!this.loadingMore && this.hasMore) {
|
||||||
this.loadingMore = true
|
this.loadingMore = true
|
||||||
this.page++
|
this.page++
|
||||||
this.loadReviews().then(() => { this.loadingMore = false })
|
const resetMore = () => { this.loadingMore = false }
|
||||||
|
this.loadReviews().then(resetMore).catch(resetMore)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -253,44 +251,334 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.reviews-page { background-color: #f5f5f5; min-height: 100vh; }
|
.reviews-page {
|
||||||
.filter-tabs { display: flex; flex-direction: row; background-color: #fff; padding: 0 20rpx; margin-bottom: 20rpx; }
|
display: flex;
|
||||||
.filter-tab { flex: 1; text-align: center; padding: 24rpx 0; font-size: 26rpx; color: #666; position: relative; }
|
flex-direction: column;
|
||||||
.filter-tab.active { color: rgb(66, 121, 240); font-weight: bold; }
|
background-color: #f5f5f5;
|
||||||
.filter-tab.active::after { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 40rpx; height: 4rpx; background-color: rgb(66, 121, 240); border-radius: 2rpx; }
|
min-height: 100vh;
|
||||||
.reviews-list { padding: 0 20rpx; height: calc(100vh - 120rpx); }
|
box-sizing: border-box;
|
||||||
.loading-container, .empty-container { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 100rpx 0; }
|
}
|
||||||
.empty-icon { font-size: 100rpx; margin-bottom: 20rpx; }
|
|
||||||
.empty-text, .loading-text { font-size: 28rpx; color: #999; }
|
.filter-tabs {
|
||||||
.review-card { background-color: #fff; border-radius: 16rpx; margin-bottom: 20rpx; padding: 24rpx; }
|
display: flex;
|
||||||
.review-header { display: flex; flex-direction: row; align-items: center; margin-bottom: 20rpx; }
|
flex-direction: row;
|
||||||
.user-avatar { width: 70rpx; height: 70rpx; border-radius: 50%; margin-right: 16rpx; background-color: #f5f5f5; }
|
align-items: center;
|
||||||
.user-info { flex: 1; }
|
justify-content: space-between;
|
||||||
.user-name { font-size: 26rpx; color: #333; font-weight: 500; display: block; margin-bottom: 8rpx; }
|
background-color: #ffffff;
|
||||||
.rating { display: flex; flex-direction: row; }
|
padding: 0 20rpx;
|
||||||
.star { font-size: 22rpx; color: #ddd; margin-right: 4rpx; }
|
margin-bottom: 20rpx;
|
||||||
.star.filled { color: #FFB800; }
|
border-bottom: 1rpx solid #f2f2f2;
|
||||||
.review-time { font-size: 22rpx; color: #999; }
|
box-sizing: border-box;
|
||||||
.review-product { font-size: 24rpx; color: #666; margin-bottom: 12rpx; }
|
}
|
||||||
.review-content { font-size: 26rpx; color: #333; line-height: 1.5; margin-bottom: 16rpx; }
|
|
||||||
.review-images { display: flex; flex-direction: row; flex-wrap: wrap; gap: 12rpx; margin-bottom: 16rpx; }
|
.filter-tab {
|
||||||
.review-image { width: 120rpx; height: 120rpx; border-radius: 8rpx; }
|
flex: 1;
|
||||||
.review-reply { background-color: #f5f5f5; padding: 16rpx; border-radius: 8rpx; margin-top: 16rpx; }
|
display: flex;
|
||||||
.reply-label { font-size: 24rpx; color: rgb(66, 121, 240); font-weight: 500; display: block; margin-bottom: 8rpx; }
|
flex-direction: row;
|
||||||
.reply-content { font-size: 24rpx; color: #666; }
|
align-items: center;
|
||||||
.review-actions { margin-top: 16rpx; text-align: right; }
|
justify-content: center;
|
||||||
.action-btn { display: inline-block; padding: 12rpx 24rpx; font-size: 24rpx; background-color: #E3F2FD; color: rgb(66, 121, 240); border-radius: 24rpx; }
|
height: 88rpx;
|
||||||
.load-more { padding: 30rpx 0; text-align: center; }
|
font-size: 26rpx;
|
||||||
.load-more-text { font-size: 24rpx; color: #999; }
|
color: #666666;
|
||||||
.modal-mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0,0,0,0.5); display: flex; align-items: flex-end; justify-content: center; z-index: 1000; }
|
position: relative;
|
||||||
.modal-content { width: 100%; background-color: #fff; border-radius: 24rpx 24rpx 0 0; padding-bottom: env(safe-area-inset-bottom); }
|
box-sizing: border-box;
|
||||||
.modal-header { display: flex; flex-direction: row; justify-content: space-between; align-items: center; padding: 30rpx; border-bottom: 1rpx solid #f5f5f5; }
|
}
|
||||||
.modal-title { font-size: 32rpx; font-weight: bold; color: #333; }
|
|
||||||
.modal-close { font-size: 44rpx; color: #999; }
|
.filter-tab.active {
|
||||||
.modal-body { padding: 30rpx; }
|
color: rgb(66, 121, 240);
|
||||||
.reply-input { width: 100%; height: 200rpx; border: 1rpx solid #e5e5e5; border-radius: 8rpx; padding: 20rpx; font-size: 28rpx; box-sizing: border-box; }
|
font-weight: bold;
|
||||||
.modal-footer { display: flex; flex-direction: row; border-top: 1rpx solid #f5f5f5; }
|
}
|
||||||
.modal-btn { flex: 1; height: 88rpx; line-height: 88rpx; text-align: center; font-size: 28rpx; }
|
|
||||||
.modal-btn.cancel { color: #666; border-right: 1rpx solid #f5f5f5; }
|
.filter-tab.active::after {
|
||||||
.modal-btn.confirm { color: rgb(66, 121, 240); font-weight: bold; }
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 44rpx;
|
||||||
|
height: 4rpx;
|
||||||
|
background-color: rgb(66, 121, 240);
|
||||||
|
border-radius: 2rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reviews-list {
|
||||||
|
flex: 1;
|
||||||
|
height: calc(100vh - 176rpx);
|
||||||
|
padding: 0 20rpx 20rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading-container,
|
||||||
|
.empty-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 120rpx 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-icon {
|
||||||
|
font-size: 100rpx;
|
||||||
|
line-height: 1;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-text,
|
||||||
|
.loading-text {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999999;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-card {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
padding: 24rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-avatar {
|
||||||
|
width: 72rpx;
|
||||||
|
height: 72rpx;
|
||||||
|
border-radius: 36rpx;
|
||||||
|
margin-right: 16rpx;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-info {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-name {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #333333;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 1.4;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rating {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.star {
|
||||||
|
font-size: 22rpx;
|
||||||
|
line-height: 1;
|
||||||
|
color: #dddddd;
|
||||||
|
margin-right: 4rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.star.filled {
|
||||||
|
color: #ffb800;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-time {
|
||||||
|
margin-left: 16rpx;
|
||||||
|
font-size: 22rpx;
|
||||||
|
color: #999999;
|
||||||
|
line-height: 1.4;
|
||||||
|
text-align: right;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-product {
|
||||||
|
margin-bottom: 12rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-name {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666666;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-content {
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 1.6;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-images {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-image {
|
||||||
|
width: 120rpx;
|
||||||
|
height: 120rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
margin-right: 12rpx;
|
||||||
|
margin-bottom: 12rpx;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-reply {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background-color: #f7f8fa;
|
||||||
|
padding: 18rpx 20rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
margin-top: 16rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reply-label {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: rgb(66, 121, 240);
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 1.4;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reply-content {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666666;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.review-actions {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-btn {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 12rpx 24rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
line-height: 1.4;
|
||||||
|
background-color: #e8f0fe;
|
||||||
|
color: rgb(66, 121, 240);
|
||||||
|
border-radius: 24rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-more {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 30rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-more-text {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-mask {
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: flex-end;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
width: 100%;
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 24rpx 24rpx 0 0;
|
||||||
|
padding-bottom: env(safe-area-inset-bottom);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 30rpx;
|
||||||
|
border-bottom: 1rpx solid #f2f2f2;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-title {
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-close {
|
||||||
|
font-size: 44rpx;
|
||||||
|
color: #999999;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body {
|
||||||
|
padding: 30rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reply-input {
|
||||||
|
width: 100%;
|
||||||
|
height: 220rpx;
|
||||||
|
border: 1rpx solid #e5e5e5;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
padding: 20rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
line-height: 1.6;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-footer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
border-top: 1rpx solid #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-btn {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 88rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-btn.cancel {
|
||||||
|
color: #666666;
|
||||||
|
border-right: 1rpx solid #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-btn.confirm {
|
||||||
|
color: rgb(66, 121, 240);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
71
pages/mall/merchant/search.uvue
Normal file
71
pages/mall/merchant/search.uvue
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
<!-- 机构端 - 搜索页面 -->
|
||||||
|
<template>
|
||||||
|
<view class="page">
|
||||||
|
<!-- #ifdef MP-WEIXIN -->
|
||||||
|
<view class="detail-navbar">
|
||||||
|
<view class="detail-navbar-back" @click="uni.navigateBack()">
|
||||||
|
<text class="back-arrow">‹</text>
|
||||||
|
<text class="back-text">返回</text>
|
||||||
|
</view>
|
||||||
|
<text class="detail-navbar-title">搜索</text>
|
||||||
|
<view style="width: 120rpx;"></view>
|
||||||
|
</view>
|
||||||
|
<!-- #endif -->
|
||||||
|
|
||||||
|
<view class="search-bar-row">
|
||||||
|
<input
|
||||||
|
class="search-input"
|
||||||
|
type="text"
|
||||||
|
placeholder="搜索商品、订单、用户…"
|
||||||
|
:value="keyword"
|
||||||
|
@input="onInput"
|
||||||
|
@confirm="doSearch"
|
||||||
|
/>
|
||||||
|
<view class="search-btn" @click="doSearch">
|
||||||
|
<text class="search-btn-text">搜索</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="content" v-if="!searched">
|
||||||
|
<text class="tip">输入关键字开始搜索</text>
|
||||||
|
</view>
|
||||||
|
<view class="content" v-else>
|
||||||
|
<text class="tip">暂无搜索结果</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="uts">
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
keyword: '' as string,
|
||||||
|
searched: false as boolean
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onInput(e : InputEvent) {
|
||||||
|
this.keyword = e.detail.value
|
||||||
|
},
|
||||||
|
doSearch() {
|
||||||
|
if (!this.keyword.trim()) return
|
||||||
|
this.searched = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.page { background-color: #f5f5f5; min-height: 100vh; }
|
||||||
|
.detail-navbar { display: flex; flex-direction: row; align-items: flex-end; background-color: #ffffff; border-bottom-width: 1rpx; border-bottom-style: solid; border-bottom-color: #eeeeee; box-sizing: border-box; padding-top: var(--status-bar-height); height: calc(88rpx + var(--status-bar-height)); }
|
||||||
|
.detail-navbar-back { display: flex; flex-direction: row; align-items: center; padding: 0 30rpx; height: 88rpx; width: 120rpx; }
|
||||||
|
.back-arrow { font-size: 44rpx; color: #333333; line-height: 1; margin-right: 4rpx; }
|
||||||
|
.back-text { font-size: 28rpx; color: #333333; }
|
||||||
|
.detail-navbar-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: 600; color: #1a1a1a; height: 88rpx; line-height: 88rpx; }
|
||||||
|
.search-bar-row { display: flex; flex-direction: row; align-items: center; background-color: #ffffff; padding: 20rpx 30rpx; margin-bottom: 20rpx; }
|
||||||
|
.search-input { flex: 1; height: 72rpx; background-color: #f5f5f5; border-radius: 36rpx; padding: 0 30rpx; font-size: 28rpx; }
|
||||||
|
.search-btn { margin-left: 20rpx; padding: 0 30rpx; height: 72rpx; line-height: 72rpx; background-color: rgb(66, 121, 240); border-radius: 36rpx; }
|
||||||
|
.search-btn-text { font-size: 28rpx; color: #ffffff; }
|
||||||
|
.content { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 120rpx 40rpx; }
|
||||||
|
.tip { font-size: 28rpx; color: #999; }
|
||||||
|
</style>
|
||||||
@@ -1,117 +1,39 @@
|
|||||||
VM12683 vendor.js:6839 GET http://119.146.131.237:9126/rest/v1/ml_shops?select=*&limit=1&merchant_id=eq.demo-merchant-001 400 (Bad Request)(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
mp.esm.js:126 TypeError: this.loadReviews is not a function
|
||||||
(anonymous) @ VM12683 vendor.js:6839
|
at Proxy.onShow (reviews.uvue:107)
|
||||||
invokeApi @ VM12683 vendor.js:6217
|
at callWithErrorHandling (vue.runtime.esm.js:1356)
|
||||||
promiseApi @ VM12683 vendor.js:6715
|
at callWithAsyncErrorHandling (vue.runtime.esm.js:1363)
|
||||||
(anonymous) @ VM12746 ak-req.js:250
|
at Array.hook.__weh.hook.__weh (vue.runtime.esm.js:2461)
|
||||||
doOnce @ VM12746 ak-req.js:248
|
at invokeArrayFns (uni-shared.es.js:469)
|
||||||
_loop$ @ VM12746 ak-req.js:310
|
at Proxy.callHook (uni.mp.esm.js:944)
|
||||||
s @ VM12687 regeneratorRuntime.js:1
|
at ai.mpOptions.<computed> [as onShow] (uni.mp.esm.js:984)
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
at ai.<anonymous> (VM16334 WASubContext.js:1)
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
at ai.s.__callPageLifeTime__ (VM16334 WASubContext.js:1)
|
||||||
s @ VM12687 regeneratorRuntime.js:1
|
at VM16334 WASubContext.js:1(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
||||||
_ @ VM12687 regeneratorRuntime.js:1
|
onError2 @ mp.esm.js:126
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
callWithErrorHandling @ vue.runtime.esm.js:1356
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
callWithAsyncErrorHandling @ vue.runtime.esm.js:1363
|
||||||
fulfilled @ VM12683 vendor.js:9601
|
hook.__weh.hook.__weh @ vue.runtime.esm.js:2461
|
||||||
Promise.then (async)
|
invokeArrayFns @ uni-shared.es.js:469
|
||||||
step @ VM12683 vendor.js:9614
|
callHook @ uni.mp.esm.js:944
|
||||||
(anonymous) @ VM12683 vendor.js:9616
|
errorHandler @ vue.runtime.esm.js:5331
|
||||||
__awaiter @ VM12683 vendor.js:9598
|
callWithErrorHandling @ vue.runtime.esm.js:1356
|
||||||
request @ VM12746 ak-req.js:177
|
handleError @ vue.runtime.esm.js:1396
|
||||||
_callee19$ @ VM12684 aksupa.js:1838
|
callWithErrorHandling @ vue.runtime.esm.js:1358
|
||||||
s @ VM12687 regeneratorRuntime.js:1
|
callWithAsyncErrorHandling @ vue.runtime.esm.js:1363
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
hook.__weh.hook.__weh @ vue.runtime.esm.js:2461
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
invokeArrayFns @ uni-shared.es.js:469
|
||||||
(anonymous) @ VM12683 vendor.js:9616
|
callHook @ uni.mp.esm.js:944
|
||||||
__awaiter @ VM12683 vendor.js:9598
|
mpOptions.<computed> @ uni.mp.esm.js:984
|
||||||
requestWithAutoRefresh @ VM12684 aksupa.js:1832
|
TypeError: this.loadReviews is not a function
|
||||||
_callee11$ @ VM12684 aksupa.js:1492
|
at Proxy._callee$ (reviews.uvue:116)
|
||||||
s @ VM12687 regeneratorRuntime.js:1
|
at s (regeneratorRuntime.js?forceSync=true:1)
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
at Generator.<anonymous> (regeneratorRuntime.js?forceSync=true:1)
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
at Generator.next (regeneratorRuntime.js?forceSync=true:1)
|
||||||
(anonymous) @ VM12683 vendor.js:9616
|
at tslib.es6.js:76
|
||||||
__awaiter @ VM12683 vendor.js:9598
|
at new Promise (<anonymous>)
|
||||||
select @ VM12684 aksupa.js:1425
|
at Object.__awaiter (tslib.es6.js:72)
|
||||||
_callee$ @ VM12684 aksupa.js:715
|
at Proxy.initMerchantId (reviews.uvue:111)
|
||||||
s @ VM12687 regeneratorRuntime.js:1
|
at Proxy.onLoad (reviews.uvue:103)
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
at callWithErrorHandling (vue.runtime.esm.js:1356)(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
mp.esm.js:126 {reason: TypeError: this.loadReviews is not a function
|
||||||
(anonymous) @ VM12683 vendor.js:9616
|
at Proxy._callee$ (weapp:///pages/mall/merchant/r…, promise: Promise}(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
||||||
__awaiter @ VM12683 vendor.js:9598
|
|
||||||
execute @ VM12684 aksupa.js:691
|
|
||||||
_callee2$ @ shop-edit.uvue:108
|
|
||||||
s @ VM12687 regeneratorRuntime.js:1
|
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
|
||||||
(anonymous) @ VM12683 vendor.js:9616
|
|
||||||
__awaiter @ VM12683 vendor.js:9598
|
|
||||||
loadShop @ shop-edit.uvue:101
|
|
||||||
_callee$ @ shop-edit.uvue:95
|
|
||||||
s @ VM12687 regeneratorRuntime.js:1
|
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
|
||||||
(anonymous) @ VM12687 regeneratorRuntime.js:1
|
|
||||||
(anonymous) @ VM12683 vendor.js:9616
|
|
||||||
__awaiter @ VM12683 vendor.js:9598
|
|
||||||
initMerchantId @ shop-edit.uvue:86
|
|
||||||
onLoad @ shop-edit.uvue:82
|
|
||||||
callWithErrorHandling @ VM12683 vendor.js:1733
|
|
||||||
callWithAsyncErrorHandling @ VM12683 vendor.js:1740
|
|
||||||
hook.__weh.hook.__weh @ VM12683 vendor.js:2725
|
|
||||||
invokeArrayFns @ VM12683 vendor.js:259
|
|
||||||
callHook @ VM12683 vendor.js:8827
|
|
||||||
methods.onLoad @ VM12683 vendor.js:9367
|
|
||||||
Show 30 more frames
|
|
||||||
Error: MiniProgramError
|
|
||||||
{"errMsg":"navigateTo:fail page \"pages/mall/merchant/health-management\" is not found"}
|
|
||||||
at Object.errorReport (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Function.thirdErrorReport (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Object.thirdErrorReport (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at i (VM12659 WASubContext.js:1)
|
|
||||||
at Object.cb (VM12659 WASubContext.js:1)
|
|
||||||
at X._privEmit (VM12659 WASubContext.js:1)
|
|
||||||
at X.emit (VM12659 WASubContext.js:1)
|
|
||||||
at VM12659 WASubContext.js:1
|
|
||||||
at n (VM12659 WASubContext.js:1)
|
|
||||||
at He (VM12659 WASubContext.js:1)(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
|
||||||
VM12683 vendor.js:7499 {reason: {…}, promise: Promise}(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
|
||||||
onError2 @ VM12683 vendor.js:7499
|
|
||||||
(anonymous) @ VM12683 vendor.js:6764
|
|
||||||
Error: SystemError (appServiceSDKScriptError)
|
|
||||||
{"errMsg":"SocketTask.send:fail SocketTask.readyState is not OPEN"}
|
|
||||||
at Function.errorReport (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Object.<anonymous> (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Object.cb (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at J._privEmit (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at J.emit (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at WAServiceMainContext.js?t=wechat&v=3.14.2:1
|
|
||||||
at a (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at ze (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Object.He (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at ae (WAServiceMainContext.js?t=wechat&v=3.14.2:1)(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
|
||||||
Error: MiniProgramError
|
|
||||||
{"errMsg":"navigateTo:fail page \"pages/mall/merchant/ai-consultation\" is not found"}
|
|
||||||
at Object.errorReport (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Function.thirdErrorReport (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Object.thirdErrorReport (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at i (VM12659 WASubContext.js:1)
|
|
||||||
at Object.cb (VM12659 WASubContext.js:1)
|
|
||||||
at X._privEmit (VM12659 WASubContext.js:1)
|
|
||||||
at X.emit (VM12659 WASubContext.js:1)
|
|
||||||
at VM12659 WASubContext.js:1
|
|
||||||
at n (VM12659 WASubContext.js:1)
|
|
||||||
at He (VM12659 WASubContext.js:1)(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
|
||||||
VM12683 vendor.js:7499 {reason: {…}, promise: Promise}(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
|
||||||
onError2 @ VM12683 vendor.js:7499
|
|
||||||
(anonymous) @ VM12683 vendor.js:6764
|
|
||||||
Error: SystemError (appServiceSDKScriptError)
|
|
||||||
{"errMsg":"SocketTask.send:fail SocketTask.readyState is not OPEN"}
|
|
||||||
at Function.errorReport (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Object.<anonymous> (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Object.cb (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at J._privEmit (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at J.emit (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at WAServiceMainContext.js?t=wechat&v=3.14.2:1
|
|
||||||
at a (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at ze (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at Object.He (WAServiceMainContext.js?t=wechat&v=3.14.2:1)
|
|
||||||
at ae (WAServiceMainContext.js?t=wechat&v=3.14.2:1)(env: Windows,mp,1.06.2504030; lib: 3.14.2)
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
unpackage/cache/.app-android/class/ktClasss.ser
vendored
BIN
unpackage/cache/.app-android/class/ktClasss.ser
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user