解决问题接待中有空白区域

This commit is contained in:
zhonghua.li
2026-04-18 14:33:16 +08:00
parent d18a546915
commit b5f3a1b2f7
22 changed files with 443 additions and 15 deletions

View File

@@ -22,6 +22,11 @@
<text class="function-name">服务中</text>
<text class="function-desc"></text>
</view>
<view class="function-item" @click="quickJumpReceptionInProgress">
<view class="function-icon"></view>
<text class="function-name">接待中</text>
<text class="function-desc"></text>
</view>
<view class="function-item" @click="quickJumpReceptionTab('tag')">
<view class="function-icon">🏷</view>
<text class="function-name">标签管理</text>
@@ -211,6 +216,18 @@ export default {
},
});
},
quickJumpReceptionInProgress() {
uni.navigateTo({
url: '/pages-subpackage/furniture_reception/reception_in_progress',
fail: (err) => {
console.error('[AiAnalysisDashboardBody] 快捷跳转接待中页失败:', err);
uni.showToast({
title: '跳转失败,请稍后重试',
icon: 'none',
});
},
});
},
quickJumpCustomerTab(tabKey) {
const allowedTabs = ['service', 'customer'];
if (!allowedTabs.includes(tabKey)) {

View File

@@ -0,0 +1,347 @@
<template>
<view class="page">
<!-- #ifdef APP -->
<statusBar></statusBar>
<!-- #endif -->
<uni-nav-bar
:fixed="true"
:statusBar="true"
:border="false"
title="接待中"
leftIcon="left"
@clickLeft="goBack"
color="#333"
backgroundColor="#FFFFFF"
/>
<view class="content">
<view class="tabs" :style="{ top: computedNavbarTop || navbarTop }">
<view
class="tab-item"
:class="{ active: activeTab === 'reception' }"
@click="switchTab('reception')">
<text>开始接待</text>
</view>
<view
class="tab-item"
:class="{ active: activeTab === 'status' }"
@click="switchTab('status')">
<text>接待中</text>
</view>
</view>
<common-begin-reception
v-if="activeTab === 'reception'"
class="reception-form-container"
:style="{ top: computedContentTop || contentTop }"
:initial-data="receptionForm"
@cancel="onReceptionCancel"
@save-success="onReceptionSaveSuccess"
@save-error="onReceptionSaveError"
/>
<service-list-furniture
v-if="activeTab === 'status'"
ref="serviceListRef"
class="service-status-container"
:style="{ top: computedContentTop || contentTop }"
record-state-label="接待中"
empty-list-hint="暂无接待中记录"
:show-reception-entry-shortcut="true"
/>
</view>
</view>
</template>
<script>
// #ifdef APP
import statusBar from '@/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar';
// #endif
import CommonBeginReception from './common_begin_reception.vue';
import ServiceListFurniture from './serviceListFurniture.vue';
export default {
name: '接待中',
// #ifdef APP
components: {
statusBar,
CommonBeginReception,
ServiceListFurniture,
},
// #endif
// #ifndef APP
components: {
CommonBeginReception,
ServiceListFurniture,
},
// #endif
data() {
return {
activeTab: 'status',
navbarTop: '88rpx',
contentTop: '160rpx',
receptionForm: {
id: '',
customerName: '',
contact: '',
customerSource: '',
gender: '女',
age: '',
dealershipId: '',
dealershipName: '',
salesId: '',
salesName: '',
salesPhone: '',
recordingCount: 0,
intendedModel: '',
infoCard: '',
remark: '',
detailedAddress: '',
contactCount: 0,
},
};
},
computed: {
computedNavbarTop() {
const systemInfo = uni.getSystemInfoSync();
const statusBarHeight = systemInfo.statusBarHeight || 20;
const navbarHeight = 44;
const windowWidth = systemInfo.windowWidth || systemInfo.screenWidth || 375;
const pxToRpx = 750 / windowWidth;
const totalNavbarHeightRpx = (statusBarHeight + navbarHeight) * pxToRpx;
return totalNavbarHeightRpx + 'rpx';
},
computedContentTop() {
const systemInfo = uni.getSystemInfoSync();
const statusBarHeight = systemInfo.statusBarHeight || 20;
const navbarHeight = 44;
const windowWidth = systemInfo.windowWidth || systemInfo.screenWidth || 375;
const pxToRpx = 750 / windowWidth;
const totalNavbarHeightRpx = (statusBarHeight + navbarHeight) * pxToRpx;
return totalNavbarHeightRpx + 72 + 'rpx';
},
},
onLoad() {
this.updateNavbarPosition();
this.loadCurrentUserInfo();
},
onShow() {
this.$nextTick(() => {
this.updateNavbarPosition();
setTimeout(() => this.updateNavbarPosition(), 50);
if (this.activeTab === 'status') {
this.$nextTick(() => {
const list = this.$refs.serviceListRef;
if (list && typeof list.onServiceStatusRefresh === 'function') {
list.onServiceStatusRefresh();
}
});
}
});
},
methods: {
updateNavbarPosition() {
const systemInfo = uni.getSystemInfoSync();
const statusBarHeight = systemInfo.statusBarHeight || 20;
const navbarHeight = 44;
const statusBarHeightRpx = statusBarHeight * 2;
const navbarHeightRpx = navbarHeight * 2;
const totalNavbarHeight = statusBarHeightRpx + navbarHeightRpx;
this.$set(this, 'navbarTop', totalNavbarHeight + 'rpx');
this.$set(this, 'contentTop', totalNavbarHeight + 72 + 'rpx');
// #ifdef MP-WEIXIN
this.$forceUpdate();
// #endif
},
loadCurrentUserInfo() {
try {
const loginResponse = uni.getStorageSync('backend-login-response') || {};
if (loginResponse.userName) {
this.receptionForm.salesName = loginResponse.userName;
}
if (loginResponse.phone) {
this.receptionForm.salesPhone = loginResponse.phone;
} else if (loginResponse.userName) {
this.receptionForm.salesPhone = loginResponse.userName;
}
if (loginResponse.userId) {
this.receptionForm.salesId = String(loginResponse.userId);
}
} catch (e) {
console.error('[ReceptionInProgress] 加载当前登录用户信息失败:', e);
}
},
goBack() {
const pages = getCurrentPages();
if (pages.length <= 1) {
uni.switchTab({
url: '/pages/workbench/workbench',
fail: (err) => {
console.error('[ReceptionInProgress] 切回工作台失败:', err);
},
});
return;
}
uni.navigateBack({
fail: (err) => {
console.error('[ReceptionInProgress] 返回失败:', err);
},
});
},
switchTab(tab) {
if (tab !== 'reception' && tab !== 'status') {
return;
}
this.activeTab = tab;
if (tab === 'reception') {
this.resetReceptionForm();
}
},
resetReceptionForm() {
this.receptionForm = {
id: '',
customerName: '',
contact: '',
customerSource: '',
gender: '女',
age: '',
dealershipId: '',
dealershipName: '',
salesId: '',
salesName: '',
salesPhone: '',
recordingCount: 0,
intendedModel: '',
infoCard: '',
remark: '',
detailedAddress: '',
contactCount: 0,
};
this.loadCurrentUserInfo();
},
onReceptionCancel() {
this.resetReceptionForm();
},
onReceptionSaveSuccess({ action, data }) {
if (data) {
this.receptionForm = { ...this.receptionForm, ...data };
}
this.resetReceptionForm();
if (action === 'start') {
this.activeTab = 'status';
this.$nextTick(() => {
const list = this.$refs.serviceListRef;
if (list && typeof list.onServiceStatusRefresh === 'function') {
list.onServiceStatusRefresh();
}
});
}
},
onReceptionSaveError({ action, error }) {
console.error('[ReceptionInProgress] 保存失败:', action, error);
},
},
};
</script>
<style>
page {
background-color: #f5f5f5;
}
.page {
/* #ifndef MP-WEIXIN */
min-height: 100vh;
/* #endif */
/* #ifdef MP-WEIXIN */
height: 100vh !important;
min-height: 100vh !important;
/* #endif */
background-color: #f5f5f5;
}
.content {
padding-top: 0;
margin-top: 0;
position: relative;
/* #ifndef MP-WEIXIN */
min-height: 100vh;
/* #endif */
/* #ifdef MP-WEIXIN */
height: 100vh !important;
min-height: 100vh !important;
max-height: 100vh !important;
/* #endif */
}
::v-deep .uni-navbar__placeholder {
display: none !important;
height: 0 !important;
}
::v-deep .uni-navbar__placeholder-view {
display: none !important;
height: 0 !important;
}
::v-deep .uni-navbar--border {
border-bottom: none !important;
}
.tabs {
display: flex !important;
visibility: visible !important;
opacity: 1 !important;
background-color: #ffffff;
border-bottom: 1px solid #e0e0e0;
padding: 0 16rpx;
margin-top: 0;
position: fixed;
left: 0;
right: 0;
z-index: 999;
height: 72rpx;
box-sizing: border-box;
align-items: center;
will-change: top;
}
.tab-item {
padding: 24rpx 32rpx;
position: relative;
}
.tab-item text {
font-size: 30rpx;
color: #666;
}
.tab-item.active text {
color: #333;
font-weight: 500;
}
.tab-item.active::after {
content: '';
position: absolute;
bottom: 0;
left: 32rpx;
right: 32rpx;
height: 4rpx;
background-color: #007aff;
border-radius: 2rpx;
}
.service-status-container,
.reception-form-container {
position: absolute;
left: 0;
right: 0;
/* #ifdef MP-WEIXIN */
display: flex;
flex-direction: column;
min-height: 0;
bottom: 0 !important;
/* #endif */
/* #ifndef MP-WEIXIN */
bottom: 96rpx;
/* #endif */
}
</style>

View File

@@ -29,6 +29,14 @@
@confirm="onServiceStatusSearch"
/>
<view class="toolbar-actions">
<view
v-if="showReceptionEntryShortcut"
class="toolbar-btn toolbar-btn--reception"
@click="goReceptionEntry"
>
<uni-icons type="home" size="18" color="#2A68FF"></uni-icons>
<text>接待</text>
</view>
<view class="toolbar-btn toolbar-btn--refresh" @click="onServiceStatusRefresh">
<uni-icons type="refresh" size="18" color="#2A68FF"></uni-icons>
<text>刷新</text>
@@ -79,7 +87,7 @@
<text>结束</text>
</view>
<uni-icons type="bars" size="16" color="#007AFF"></uni-icons>
<text>服务中</text>
<text>{{ recordStateLabel }}</text>
</view>
</view>
@@ -125,7 +133,7 @@
</view>
</view>
<view class="service-status-empty" v-if="!serviceStatusLoading && !serviceStatusList.length">
<text>暂无服务中记录</text>
<text>{{ emptyListHint }}</text>
</view>
<view class="service-status-loading-more" v-if="serviceStatusLoading && serviceStatusList.length">
<text>正在加载更多...</text>
@@ -208,6 +216,22 @@ function firstNonEmptyString(...parts) {
}
export default {
props: {
/** 卡片右侧状态文案默认与接待页「服务中」Tab 一致 */
recordStateLabel: {
type: String,
default: '服务中',
},
emptyListHint: {
type: String,
default: '暂无服务中记录',
},
/** 是否在工具栏显示进入完整「接待」页的快捷入口 */
showReceptionEntryShortcut: {
type: Boolean,
default: false,
},
},
data() {
return {
serviceStatusLoading: false,
@@ -394,6 +418,15 @@ export default {
this.serviceStatusPage.current = 1;
this.fetchServiceStatusList({ force: true });
},
goReceptionEntry() {
const url = '/pages-subpackage/furniture_reception/furniture_reception_entry?tab=reception';
uni.navigateTo({
url,
fail: () => {
uni.showToast({ title: '跳转接待失败', icon: 'none' });
},
});
},
onServiceStatusReachBottom() {
// 已在加载中或全部加载完成则不再触发
if (this.serviceStatusLoading) return;

View File

@@ -259,6 +259,12 @@
"navigationStyle": "custom"
}
},
{
"path": "furniture_reception/reception_in_progress",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "bluetooth-recorder/bluetooth-recorder",
"style": {

View File

@@ -17,7 +17,11 @@
<text class="function-name">服务中</text>
<text class="function-desc"></text>
</view>
<view class="function-item" @click="openReceptionInProgress">
<view class="function-icon"></view>
<text class="function-name">接待中</text>
<text class="function-desc"></text>
</view>
<view class="function-item" @click="openReceptionTab('tag')">
<view class="function-icon">🗂</view>
<text class="function-name">标签管理</text>
@@ -76,6 +80,15 @@ export default {
},
});
},
/** 独立「接待中」列表页(与接待页内「服务中」列表同源逻辑) */
openReceptionInProgress() {
uni.navigateTo({
url: '/pages-subpackage/furniture_reception/reception_in_progress',
fail: () => {
uni.showToast({ title: '跳转接待中失败', icon: 'none' });
},
});
},
openCustomerTab(tab) {
const url = `/pages-subpackage/furniture_customer/furniture_customer?tab=${tab}`;
uni.navigateTo({ url });

View File

@@ -47,6 +47,7 @@
"workspace/scene-detail",
"furniture_customer/furniture_customer",
"furniture_reception/furniture_reception_entry",
"furniture_reception/reception_in_progress",
"bluetooth-recorder/bluetooth-recorder",
"uni-agree/uni-agree",
"ucenter/settings/settings",

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
"use strict";const e=require("../common/vendor.js"),o={name:"AiAnalysisDashboardBody",props:{contentTop:{type:String,default:""},contentBottom:{type:String,default:"96rpx"}},data:()=>({showQualityCoverage:!1,openQualityCoverageTrigger:0}),computed:{scrollTop(){return this.contentTop||"88rpx"},scrollBottom(){return this.contentBottom||"96rpx"}},methods:{showQualityCoveragePopup(){this.showQualityCoverage=!0,this.$nextTick((()=>{this.openQualityCoverageTrigger++}))},onQualityCoveragePopupClose(){this.showQualityCoverage=!1},navigateToPage(o){const t=`pages-subpackage/ai_features/${o}/${o}`;e.index.navigateTo({url:`/${t}`,fail:o=>{console.error("导航失败:",o),e.index.showToast({title:"页面跳转失败",icon:"none"})}})},quickJumpReceptionTab(o){if(["status","reception","tag"].includes(o)){try{e.index.setStorageSync("workbench-reception-tab",o)}catch(t){console.warn("[AiAnalysisDashboardBody] 写入接待tab快捷跳转参数失败:",t)}e.index.navigateTo({url:`/pages-subpackage/furniture_reception/furniture_reception_entry?tab=${encodeURIComponent(o)}`,fail:o=>{console.error("[AiAnalysisDashboardBody] 快捷跳转接待页失败:",o),e.index.showToast({title:"跳转失败,请稍后重试",icon:"none"})}})}},quickJumpCustomerTab(o){["service","customer"].includes(o)&&e.index.navigateTo({url:`/pages-subpackage/furniture_customer/furniture_customer?tab=${o}`,fail:o=>{console.error("[AiAnalysisDashboardBody] 快捷跳转客户页失败:",o),e.index.showToast({title:"跳转失败,请稍后重试",icon:"none"})}})}}};if(!Array){e.resolveComponent("QualityCoveragePopup")()}const t=e._export_sfc(o,[["render",function(o,t,a,i,n,r){return e.e({a:e.o((e=>r.quickJumpReceptionTab("reception")),"9a"),b:e.o((e=>r.quickJumpReceptionTab("status")),"18"),c:e.o((e=>r.quickJumpReceptionTab("tag")),"59"),d:e.o((e=>r.quickJumpCustomerTab("customer")),"7c"),e:e.o((e=>r.quickJumpCustomerTab("service")),"e4"),f:e.o((e=>r.navigateToPage("recording_duration")),"99"),g:e.o((e=>r.navigateToPage("customer_count")),"57"),h:e.o(((...e)=>r.showQualityCoveragePopup&&r.showQualityCoveragePopup(...e)),"05"),i:e.o((e=>r.navigateToPage("speech_rating")),"a9"),j:e.o((e=>r.navigateToPage("intent_level")),"5b"),k:e.o((e=>r.navigateToPage("deal_attribution")),"4b"),l:e.o((e=>r.navigateToPage("opening_rate")),"89"),m:e.o((e=>r.navigateToPage("over_commitment")),"52"),n:e.o((e=>r.navigateToPage("red_line_touch")),"e8"),o:r.scrollTop,p:r.scrollBottom,q:n.showQualityCoverage},n.showQualityCoverage?{r:e.o(r.onQualityCoveragePopupClose,"99"),s:e.p({"open-trigger":n.openQualityCoverageTrigger})}:{})}],["__scopeId","data-v-da88ed95"]]);wx.createComponent(t);
"use strict";const e=require("../common/vendor.js"),o={name:"AiAnalysisDashboardBody",props:{contentTop:{type:String,default:""},contentBottom:{type:String,default:"96rpx"}},data:()=>({showQualityCoverage:!1,openQualityCoverageTrigger:0}),computed:{scrollTop(){return this.contentTop||"88rpx"},scrollBottom(){return this.contentBottom||"96rpx"}},methods:{showQualityCoveragePopup(){this.showQualityCoverage=!0,this.$nextTick((()=>{this.openQualityCoverageTrigger++}))},onQualityCoveragePopupClose(){this.showQualityCoverage=!1},navigateToPage(o){const t=`pages-subpackage/ai_features/${o}/${o}`;e.index.navigateTo({url:`/${t}`,fail:o=>{console.error("导航失败:",o),e.index.showToast({title:"页面跳转失败",icon:"none"})}})},quickJumpReceptionTab(o){if(["status","reception","tag"].includes(o)){try{e.index.setStorageSync("workbench-reception-tab",o)}catch(t){console.warn("[AiAnalysisDashboardBody] 写入接待tab快捷跳转参数失败:",t)}e.index.navigateTo({url:`/pages-subpackage/furniture_reception/furniture_reception_entry?tab=${encodeURIComponent(o)}`,fail:o=>{console.error("[AiAnalysisDashboardBody] 快捷跳转接待页失败:",o),e.index.showToast({title:"跳转失败,请稍后重试",icon:"none"})}})}},quickJumpReceptionInProgress(){e.index.navigateTo({url:"/pages-subpackage/furniture_reception/reception_in_progress",fail:o=>{console.error("[AiAnalysisDashboardBody] 快捷跳转接待中页失败:",o),e.index.showToast({title:"跳转失败,请稍后重试",icon:"none"})}})},quickJumpCustomerTab(o){["service","customer"].includes(o)&&e.index.navigateTo({url:`/pages-subpackage/furniture_customer/furniture_customer?tab=${o}`,fail:o=>{console.error("[AiAnalysisDashboardBody] 快捷跳转客户页失败:",o),e.index.showToast({title:"跳转失败,请稍后重试",icon:"none"})}})}}};if(!Array){e.resolveComponent("QualityCoveragePopup")()}const t=e._export_sfc(o,[["render",function(o,t,a,i,n,r){return e.e({a:e.o((e=>r.quickJumpReceptionTab("reception")),"80"),b:e.o((e=>r.quickJumpReceptionTab("status")),"3c"),c:e.o(((...e)=>r.quickJumpReceptionInProgress&&r.quickJumpReceptionInProgress(...e)),"e2"),d:e.o((e=>r.quickJumpReceptionTab("tag")),"e5"),e:e.o((e=>r.quickJumpCustomerTab("customer")),"95"),f:e.o((e=>r.quickJumpCustomerTab("service")),"0e"),g:e.o((e=>r.navigateToPage("recording_duration")),"ff"),h:e.o((e=>r.navigateToPage("customer_count")),"79"),i:e.o(((...e)=>r.showQualityCoveragePopup&&r.showQualityCoveragePopup(...e)),"2c"),j:e.o((e=>r.navigateToPage("speech_rating")),"6a"),k:e.o((e=>r.navigateToPage("intent_level")),"76"),l:e.o((e=>r.navigateToPage("deal_attribution")),"96"),m:e.o((e=>r.navigateToPage("opening_rate")),"94"),n:e.o((e=>r.navigateToPage("over_commitment")),"43"),o:e.o((e=>r.navigateToPage("red_line_touch")),"01"),p:r.scrollTop,q:r.scrollBottom,r:n.showQualityCoverage},n.showQualityCoverage?{s:e.o(r.onQualityCoveragePopupClose,"14"),t:e.p({"open-trigger":n.openQualityCoverageTrigger})}:{})}],["__scopeId","data-v-e2fd5293"]]);wx.createComponent(t);

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
.ai-dashboard-body.data-v-da88ed95{position:relative;width:100%}.content.data-v-da88ed95{padding-top:0!important;margin-top:0!important;position:relative;top:0;min-height:calc(100vh - 200rpx)}.content-scroll.data-v-da88ed95{position:absolute;left:0;right:0;top:0;bottom:0;padding:0!important;margin:0!important;box-sizing:border-box}.content-scroll>view.data-v-da88ed95{margin-top:0;padding-top:0;margin-bottom:0;padding-bottom:0}.category-section.data-v-da88ed95{margin:20rpx 30rpx;background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 2rpx 8rpx rgba(0,0,0,.04)}.category-section.data-v-da88ed95:first-child{margin-top:0}.category-section.data-v-da88ed95:last-child{margin-bottom:0}.category-header.data-v-da88ed95{display:flex;align-items:center;padding:30rpx;background:#fff;border-bottom:1rpx solid #f0f0f0}.category-icon.data-v-da88ed95{font-size:32rpx;margin-right:20rpx}.category-title.data-v-da88ed95{font-size:32rpx;font-weight:500;color:#333}.function-grid.data-v-da88ed95{display:flex;flex-wrap:wrap;padding:10rpx}.quick-links-section .function-item.data-v-da88ed95{width:calc(33.333% - 10rpx);background:#fff;border-radius:12rpx;padding:24rpx 12rpx;margin:5rpx;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0;box-sizing:border-box}.two-column .function-item.data-v-da88ed95{flex:1;background:#fff;border-radius:12rpx;padding:24rpx 16rpx;margin:0 5rpx;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0}.three-column .function-item.data-v-da88ed95{width:31%;background:#fff;border-radius:12rpx;padding:24rpx 12rpx;margin:1%;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0}.sales-analysis .function-item.full-row-item.data-v-da88ed95{flex:1;width:calc(50% - 10rpx);background:#fff;border-radius:12rpx;padding:24rpx 16rpx;margin:0 5rpx;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0}.sales-analysis .function-item.new-line-item.data-v-da88ed95{flex-basis:100%;width:calc(50% - 10rpx);margin-top:10rpx}.function-item.data-v-da88ed95:active{transform:scale(.95);box-shadow:0 1rpx 2rpx rgba(0,0,0,.1)}.function-icon.data-v-da88ed95{font-size:48rpx;margin-bottom:12rpx}.function-name.data-v-da88ed95{display:block;font-size:28rpx;font-weight:500;color:#333;margin-bottom:8rpx}.function-desc.data-v-da88ed95{display:block;font-size:24rpx;color:#666;line-height:1.4}
.ai-dashboard-body.data-v-e2fd5293{position:relative;width:100%}.content.data-v-e2fd5293{padding-top:0!important;margin-top:0!important;position:relative;top:0;min-height:calc(100vh - 200rpx)}.content-scroll.data-v-e2fd5293{position:absolute;left:0;right:0;top:0;bottom:0;padding:0!important;margin:0!important;box-sizing:border-box}.content-scroll>view.data-v-e2fd5293{margin-top:0;padding-top:0;margin-bottom:0;padding-bottom:0}.category-section.data-v-e2fd5293{margin:20rpx 30rpx;background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 2rpx 8rpx rgba(0,0,0,.04)}.category-section.data-v-e2fd5293:first-child{margin-top:0}.category-section.data-v-e2fd5293:last-child{margin-bottom:0}.category-header.data-v-e2fd5293{display:flex;align-items:center;padding:30rpx;background:#fff;border-bottom:1rpx solid #f0f0f0}.category-icon.data-v-e2fd5293{font-size:32rpx;margin-right:20rpx}.category-title.data-v-e2fd5293{font-size:32rpx;font-weight:500;color:#333}.function-grid.data-v-e2fd5293{display:flex;flex-wrap:wrap;padding:10rpx}.quick-links-section .function-item.data-v-e2fd5293{width:calc(33.333% - 10rpx);background:#fff;border-radius:12rpx;padding:24rpx 12rpx;margin:5rpx;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0;box-sizing:border-box}.two-column .function-item.data-v-e2fd5293{flex:1;background:#fff;border-radius:12rpx;padding:24rpx 16rpx;margin:0 5rpx;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0}.three-column .function-item.data-v-e2fd5293{width:31%;background:#fff;border-radius:12rpx;padding:24rpx 12rpx;margin:1%;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0}.sales-analysis .function-item.full-row-item.data-v-e2fd5293{flex:1;width:calc(50% - 10rpx);background:#fff;border-radius:12rpx;padding:24rpx 16rpx;margin:0 5rpx;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0}.sales-analysis .function-item.new-line-item.data-v-e2fd5293{flex-basis:100%;width:calc(50% - 10rpx);margin-top:10rpx}.function-item.data-v-e2fd5293:active{transform:scale(.95);box-shadow:0 1rpx 2rpx rgba(0,0,0,.1)}.function-icon.data-v-e2fd5293{font-size:48rpx;margin-bottom:12rpx}.function-name.data-v-e2fd5293{display:block;font-size:28rpx;font-weight:500;color:#333;margin-bottom:8rpx}.function-desc.data-v-e2fd5293{display:block;font-size:24rpx;color:#666;line-height:1.4}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t={name:"接待中",components:{CommonBeginReception:()=>"./common_begin_reception.js",ServiceListFurniture:()=>"./serviceListFurniture.js"},data:()=>({activeTab:"status",navbarTop:"88rpx",contentTop:"160rpx",receptionForm:{id:"",customerName:"",contact:"",customerSource:"",gender:"女",age:"",dealershipId:"",dealershipName:"",salesId:"",salesName:"",salesPhone:"",recordingCount:0,intendedModel:"",infoCard:"",remark:"",detailedAddress:"",contactCount:0}}),computed:{computedNavbarTop(){const t=e.index.getSystemInfoSync();return((t.statusBarHeight||20)+44)*(750/(t.windowWidth||t.screenWidth||375))+"rpx"},computedContentTop(){const t=e.index.getSystemInfoSync();return((t.statusBarHeight||20)+44)*(750/(t.windowWidth||t.screenWidth||375))+72+"rpx"}},onLoad(){this.updateNavbarPosition(),this.loadCurrentUserInfo()},onShow(){this.$nextTick((()=>{this.updateNavbarPosition(),setTimeout((()=>this.updateNavbarPosition()),50),"status"===this.activeTab&&this.$nextTick((()=>{const e=this.$refs.serviceListRef;e&&"function"==typeof e.onServiceStatusRefresh&&e.onServiceStatusRefresh()}))}))},methods:{updateNavbarPosition(){const t=2*(e.index.getSystemInfoSync().statusBarHeight||20)+88;this.$set(this,"navbarTop",t+"rpx"),this.$set(this,"contentTop",t+72+"rpx"),this.$forceUpdate()},loadCurrentUserInfo(){try{const t=e.index.getStorageSync("backend-login-response")||{};t.userName&&(this.receptionForm.salesName=t.userName),t.phone?this.receptionForm.salesPhone=t.phone:t.userName&&(this.receptionForm.salesPhone=t.userName),t.userId&&(this.receptionForm.salesId=String(t.userId))}catch(t){console.error("[ReceptionInProgress] 加载当前登录用户信息失败:",t)}},goBack(){getCurrentPages().length<=1?e.index.switchTab({url:"/pages/workbench/workbench",fail:e=>{console.error("[ReceptionInProgress] 切回工作台失败:",e)}}):e.index.navigateBack({fail:e=>{console.error("[ReceptionInProgress] 返回失败:",e)}})},switchTab(e){"reception"!==e&&"status"!==e||(this.activeTab=e,"reception"===e&&this.resetReceptionForm())},resetReceptionForm(){this.receptionForm={id:"",customerName:"",contact:"",customerSource:"",gender:"女",age:"",dealershipId:"",dealershipName:"",salesId:"",salesName:"",salesPhone:"",recordingCount:0,intendedModel:"",infoCard:"",remark:"",detailedAddress:"",contactCount:0},this.loadCurrentUserInfo()},onReceptionCancel(){this.resetReceptionForm()},onReceptionSaveSuccess({action:e,data:t}){t&&(this.receptionForm={...this.receptionForm,...t}),this.resetReceptionForm(),"start"===e&&(this.activeTab="status",this.$nextTick((()=>{const e=this.$refs.serviceListRef;e&&"function"==typeof e.onServiceStatusRefresh&&e.onServiceStatusRefresh()})))},onReceptionSaveError({action:e,error:t}){console.error("[ReceptionInProgress] 保存失败:",e,t)}}};if(!Array){(e.resolveComponent("uni-nav-bar")+e.resolveComponent("common-begin-reception")+e.resolveComponent("service-list-furniture"))()}Math;const o=e._export_sfc(t,[["render",function(t,o,r,n,s,i){return e.e({a:e.o(i.goBack,"42"),b:e.p({fixed:!0,statusBar:!0,border:!1,title:"接待中",leftIcon:"left",color:"#333",backgroundColor:"#FFFFFF"}),c:"reception"===s.activeTab?1:"",d:e.o((e=>i.switchTab("reception")),"3d"),e:"status"===s.activeTab?1:"",f:e.o((e=>i.switchTab("status")),"30"),g:i.computedNavbarTop||s.navbarTop,h:"reception"===s.activeTab},"reception"===s.activeTab?{i:i.computedContentTop||s.contentTop,j:e.o(i.onReceptionCancel,"06"),k:e.o(i.onReceptionSaveSuccess,"f9"),l:e.o(i.onReceptionSaveError,"4b"),m:e.p({"initial-data":s.receptionForm})}:{},{n:"status"===s.activeTab},"status"===s.activeTab?{o:e.sr("serviceListRef","199fff57-2"),p:i.computedContentTop||s.contentTop,q:e.p({"record-state-label":"接待中","empty-list-hint":"暂无接待中记录","show-reception-entry-shortcut":!0})}:{})}]]);wx.createPage(o);

View File

@@ -0,0 +1,8 @@
{
"navigationStyle": "custom",
"usingComponents": {
"common-begin-reception": "./common_begin_reception",
"service-list-furniture": "./serviceListFurniture",
"uni-nav-bar": "../../uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar"
}
}

View File

@@ -0,0 +1 @@
<view class="page"><uni-nav-bar wx:if="{{b}}" bindclickLeft="{{a}}" u-i="199fff57-0" bind:__l="__l" u-p="{{b}}"/><view class="content"><view class="tabs" style="{{'top:' + g}}"><view class="{{['tab-item', c && 'active']}}" bindtap="{{d}}"><text>开始接待</text></view><view class="{{['tab-item', e && 'active']}}" bindtap="{{f}}"><text>接待中</text></view></view><common-begin-reception wx:if="{{h}}" class="reception-form-container" style="{{'top:' + i}}" bindcancel="{{j}}" bindsaveSuccess="{{k}}" bindsaveError="{{l}}" u-i="199fff57-1" bind:__l="__l" u-p="{{m}}"/><service-list-furniture wx:if="{{n}}" u-r="serviceListRef" class="service-status-container r" style="{{'top:' + p}}" u-i="199fff57-2" bind:__l="__l" u-p="{{q}}"/></view></view>

View File

@@ -0,0 +1 @@
page{background-color:#f5f5f5}.page{height:100vh!important;min-height:100vh!important;background-color:#f5f5f5}.content{padding-top:0;margin-top:0;position:relative;height:100vh!important;min-height:100vh!important;max-height:100vh!important}.uni-navbar__placeholder,.uni-navbar__placeholder-view{display:none!important;height:0!important}.uni-navbar--border{border-bottom:none!important}.tabs{display:flex!important;visibility:visible!important;opacity:1!important;background-color:#fff;border-bottom:1px solid #e0e0e0;padding:0 16rpx;margin-top:0;position:fixed;left:0;right:0;z-index:999;height:72rpx;box-sizing:border-box;align-items:center;will-change:top}.tab-item{padding:24rpx 32rpx;position:relative}.tab-item text{font-size:30rpx;color:#666}.tab-item.active text{color:#333;font-weight:500}.tab-item.active:after{content:"";position:absolute;bottom:0;left:32rpx;right:32rpx;height:4rpx;background-color:#007aff;border-radius:2rpx}.service-status-container,.reception-form-container{position:absolute;left:0;right:0;display:flex;flex-direction:column;min-height:0;bottom:0!important}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
"use strict";const e=require("../../../common/vendor.js"),t={name:"SalesScenarioNew",props:{contentTop:{type:String,default:"0rpx"},contentBottom:{type:String,default:"0rpx"}},methods:{openReceptionTab(t){if(!["status","reception","tag"].includes(t))return;const o=`/pages-subpackage/furniture_reception/furniture_reception_entry?tab=${encodeURIComponent(t)}`;e.index.navigateTo({url:o,fail:()=>{e.index.showToast({title:"跳转接待页失败",icon:"none"})}})},openCustomerTab(t){const o=`/pages-subpackage/furniture_customer/furniture_customer?tab=${t}`;e.index.navigateTo({url:o})}}};const o=e._export_sfc(t,[["render",function(t,o,n,r,a,c){return{a:e.o((e=>c.openReceptionTab("reception")),"28"),b:e.o((e=>c.openReceptionTab("status")),"75"),c:e.o((e=>c.openReceptionTab("tag")),"24"),d:e.o((e=>c.openCustomerTab("service")),"5c"),e:e.o((e=>c.openCustomerTab("customer")),"13"),f:n.contentTop,g:n.contentBottom}}],["__scopeId","data-v-ba0b423c"]]);wx.createComponent(o);
"use strict";const e=require("../../../common/vendor.js"),o={name:"SalesScenarioNew",props:{contentTop:{type:String,default:"0rpx"},contentBottom:{type:String,default:"0rpx"}},methods:{openReceptionTab(o){if(!["status","reception","tag"].includes(o))return;const n=`/pages-subpackage/furniture_reception/furniture_reception_entry?tab=${encodeURIComponent(o)}`;e.index.navigateTo({url:n,fail:()=>{e.index.showToast({title:"跳转接待页失败",icon:"none"})}})},openReceptionInProgress(){e.index.navigateTo({url:"/pages-subpackage/furniture_reception/reception_in_progress",fail:()=>{e.index.showToast({title:"跳转接待中失败",icon:"none"})}})},openCustomerTab(o){const n=`/pages-subpackage/furniture_customer/furniture_customer?tab=${o}`;e.index.navigateTo({url:n})}}};const n=e._export_sfc(o,[["render",function(o,n,t,r,a,i){return{a:e.o((e=>i.openReceptionTab("reception")),"04"),b:e.o((e=>i.openReceptionTab("status")),"8d"),c:e.o(((...e)=>i.openReceptionInProgress&&i.openReceptionInProgress(...e)),"f7"),d:e.o((e=>i.openReceptionTab("tag")),"07"),e:e.o((e=>i.openCustomerTab("service")),"6e"),f:e.o((e=>i.openCustomerTab("customer")),"4a"),g:t.contentTop,h:t.contentBottom}}],["__scopeId","data-v-101b35ee"]]);wx.createComponent(n);

View File

@@ -1 +1 @@
<view class="scenario-wrapper data-v-ba0b423c" style="{{'top:' + f + ';' + ('bottom:' + g)}}"><scroll-view class="content-scroll data-v-ba0b423c" scroll-y="true"><view class="category-section two-column data-v-ba0b423c"><view class="category-header data-v-ba0b423c"><text class="category-icon data-v-ba0b423c">🏷️</text><text class="category-title data-v-ba0b423c">接待</text></view><view class="function-grid data-v-ba0b423c"><view class="function-item data-v-ba0b423c" bindtap="{{a}}"><view class="function-icon data-v-ba0b423c">🛎️</view><text class="function-name data-v-ba0b423c">开始接待</text><text class="function-desc data-v-ba0b423c"></text></view><view class="function-item data-v-ba0b423c" bindtap="{{b}}"><view class="function-icon data-v-ba0b423c">📌</view><text class="function-name data-v-ba0b423c">服务中</text><text class="function-desc data-v-ba0b423c"></text></view><view class="function-item data-v-ba0b423c" bindtap="{{c}}"><view class="function-icon data-v-ba0b423c">🗂️</view><text class="function-name data-v-ba0b423c">标签管理</text><text class="function-desc data-v-ba0b423c"></text></view></view></view><view class="category-section two-column data-v-ba0b423c"><view class="category-header data-v-ba0b423c"><text class="category-icon data-v-ba0b423c">👤</text><text class="category-title data-v-ba0b423c">客户</text></view><view class="function-grid data-v-ba0b423c"><view class="function-item data-v-ba0b423c" bindtap="{{d}}"><view class="function-icon data-v-ba0b423c">📝</view><text class="function-name data-v-ba0b423c">服务记录</text><text class="function-desc data-v-ba0b423c"></text></view><view class="function-item data-v-ba0b423c" bindtap="{{e}}"><view class="function-icon data-v-ba0b423c">👥</view><text class="function-name data-v-ba0b423c">客户</text><text class="function-desc data-v-ba0b423c"></text></view></view></view></scroll-view></view>
<view class="scenario-wrapper data-v-101b35ee" style="{{'top:' + g + ';' + ('bottom:' + h)}}"><scroll-view class="content-scroll data-v-101b35ee" scroll-y="true"><view class="category-section two-column data-v-101b35ee"><view class="category-header data-v-101b35ee"><text class="category-icon data-v-101b35ee">🏷️</text><text class="category-title data-v-101b35ee">接待</text></view><view class="function-grid data-v-101b35ee"><view class="function-item data-v-101b35ee" bindtap="{{a}}"><view class="function-icon data-v-101b35ee">🛎️</view><text class="function-name data-v-101b35ee">开始接待</text><text class="function-desc data-v-101b35ee"></text></view><view class="function-item data-v-101b35ee" bindtap="{{b}}"><view class="function-icon data-v-101b35ee">📌</view><text class="function-name data-v-101b35ee">服务中</text><text class="function-desc data-v-101b35ee"></text></view><view class="function-item data-v-101b35ee" bindtap="{{c}}"><view class="function-icon data-v-101b35ee">⏳</view><text class="function-name data-v-101b35ee">接待中</text><text class="function-desc data-v-101b35ee"></text></view><view class="function-item data-v-101b35ee" bindtap="{{d}}"><view class="function-icon data-v-101b35ee">🗂️</view><text class="function-name data-v-101b35ee">标签管理</text><text class="function-desc data-v-101b35ee"></text></view></view></view><view class="category-section two-column data-v-101b35ee"><view class="category-header data-v-101b35ee"><text class="category-icon data-v-101b35ee">👤</text><text class="category-title data-v-101b35ee">客户</text></view><view class="function-grid data-v-101b35ee"><view class="function-item data-v-101b35ee" bindtap="{{e}}"><view class="function-icon data-v-101b35ee">📝</view><text class="function-name data-v-101b35ee">服务记录</text><text class="function-desc data-v-101b35ee"></text></view><view class="function-item data-v-101b35ee" bindtap="{{f}}"><view class="function-icon data-v-101b35ee">👥</view><text class="function-name data-v-101b35ee">客户</text><text class="function-desc data-v-101b35ee"></text></view></view></view></scroll-view></view>

View File

@@ -1 +1 @@
.scenario-wrapper.data-v-ba0b423c{position:absolute;left:0;right:0}.content-scroll.data-v-ba0b423c{height:100%}.category-section.data-v-ba0b423c{margin:20rpx 30rpx;background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 2rpx 8rpx rgba(0,0,0,.04)}.category-section.data-v-ba0b423c:first-child{margin-top:0}.category-section.data-v-ba0b423c:last-child{margin-bottom:0}.category-header.data-v-ba0b423c{display:flex;align-items:center;padding:30rpx;background:#fff;border-bottom:1rpx solid #f0f0f0}.category-icon.data-v-ba0b423c{font-size:32rpx;margin-right:20rpx}.category-title.data-v-ba0b423c{font-size:32rpx;font-weight:500;color:#333}.function-grid.data-v-ba0b423c{display:flex;flex-wrap:wrap;padding:10rpx}.two-column .function-item.data-v-ba0b423c{flex:1;background:#fff;border-radius:12rpx;padding:24rpx 16rpx;margin:0 5rpx;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0}.function-item.data-v-ba0b423c{min-width:42%}.function-item.data-v-ba0b423c:active{transform:scale(.95);box-shadow:0 1rpx 2rpx rgba(0,0,0,.1)}.function-icon.data-v-ba0b423c{font-size:48rpx;margin-bottom:12rpx}.function-name.data-v-ba0b423c{display:block;font-size:28rpx;font-weight:500;color:#333;margin-bottom:8rpx}.function-desc.data-v-ba0b423c{display:block;font-size:24rpx;color:#666;line-height:1.4}
.scenario-wrapper.data-v-101b35ee{position:absolute;left:0;right:0}.content-scroll.data-v-101b35ee{height:100%}.category-section.data-v-101b35ee{margin:20rpx 30rpx;background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 2rpx 8rpx rgba(0,0,0,.04)}.category-section.data-v-101b35ee:first-child{margin-top:0}.category-section.data-v-101b35ee:last-child{margin-bottom:0}.category-header.data-v-101b35ee{display:flex;align-items:center;padding:30rpx;background:#fff;border-bottom:1rpx solid #f0f0f0}.category-icon.data-v-101b35ee{font-size:32rpx;margin-right:20rpx}.category-title.data-v-101b35ee{font-size:32rpx;font-weight:500;color:#333}.function-grid.data-v-101b35ee{display:flex;flex-wrap:wrap;padding:10rpx}.two-column .function-item.data-v-101b35ee{flex:1;background:#fff;border-radius:12rpx;padding:24rpx 16rpx;margin:0 5rpx;text-align:center;box-shadow:0 2rpx 4rpx rgba(0,0,0,.04);transition:all .3s ease;border:1rpx solid #f0f0f0}.function-item.data-v-101b35ee{min-width:42%}.function-item.data-v-101b35ee:active{transform:scale(.95);box-shadow:0 1rpx 2rpx rgba(0,0,0,.1)}.function-icon.data-v-101b35ee{font-size:48rpx;margin-bottom:12rpx}.function-name.data-v-101b35ee{display:block;font-size:28rpx;font-weight:500;color:#333;margin-bottom:8rpx}.function-desc.data-v-101b35ee{display:block;font-size:24rpx;color:#666;line-height:1.4}