解决微信小程序首页空白问题。

This commit is contained in:
cst61
2026-02-01 09:21:11 +08:00
parent 80d6d46182
commit cc01c4dc47
454 changed files with 404 additions and 62235 deletions

View File

@@ -1,524 +0,0 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
const common_config = require("../../../common/config.js");
const pagesSubpackage_customer_utils_dataInit = require("../utils/dataInit.js");
const _sfc_main = {
name: "ConversationSummaryFurniture",
props: {
// 服务记录项
serviceItem: {
type: Object,
default: () => ({})
}
},
data() {
return {
summaryList: [],
furnitureAnalysisList: [],
// 家具意向分析数据
productCategoryList: [],
// 产品类别列表
activeProductCategory: "",
// 当前选中的产品类别
productRequirementMap: {},
// 产品需求映射 {categoryKey: {rows: [...]}}
summarySentence: "",
// 一句话总结
dealKeyPoints: "",
// 成交关键点
loading: false
// 加载状态
};
},
computed: {
// 当前选中的产品需求
currentProductRequirement() {
if (!this.activeProductCategory)
return null;
return this.productRequirementMap[this.activeProductCategory] || null;
}
},
watch: {
serviceItem: {
handler(newVal, oldVal) {
var _a, _b;
if (newVal === oldVal) {
return;
}
if (newVal && typeof newVal === "object") {
const newId = newVal.id || ((_a = newVal.rawData) == null ? void 0 : _a.id);
const oldId = (oldVal == null ? void 0 : oldVal.id) || ((_b = oldVal == null ? void 0 : oldVal.rawData) == null ? void 0 : _b.id);
if (newId && newId === oldId) {
return;
}
if (newId) {
this.initData();
this.loadFurnitureAnalysis(newVal);
} else {
this.initData();
}
} else {
this.initData();
}
},
immediate: true,
deep: true
}
},
mounted() {
var _a;
if (this.serviceItem && (this.serviceItem.id || ((_a = this.serviceItem.rawData) == null ? void 0 : _a.id))) {
this.initData();
this.loadFurnitureAnalysis(this.serviceItem);
}
},
methods: {
// 初始化数据
initData() {
var _a;
try {
if (this.serviceItem && (this.serviceItem.id || ((_a = this.serviceItem.rawData) == null ? void 0 : _a.id))) {
this.summaryList = pagesSubpackage_customer_utils_dataInit.initSummaryList(this.serviceItem);
} else {
this.summaryList = [];
}
} catch (error) {
common_vendor.index.__f__("error", "at pages-subpackage/customer/components/ConversationSummaryFurniture.vue:197", "初始化总结数据失败:", error);
this.summaryList = [];
}
this.productCategoryList = [];
this.activeProductCategory = "";
this.productRequirementMap = {};
this.summarySentence = "";
this.dealKeyPoints = "";
this.furnitureAnalysisList = [];
this.loading = false;
},
// 加载家具意向分析数据
async loadFurnitureAnalysis(item) {
var _a, _b;
if (!item) {
return;
}
try {
this.loading = true;
const parentId = ((_a = item.rawData) == null ? void 0 : _a.id) || item.id;
if (!parentId) {
common_vendor.index.__f__("warn", "at pages-subpackage/customer/components/ConversationSummaryFurniture.vue:220", "无法获取parentId");
this.furnitureAnalysisList = [];
this.loading = false;
return;
}
const url = `${common_config.getApiUrl("/api/audioTextAnalysisFurniture/byParentId")}?parentId=${parentId}`;
const res = await common_vendor.index.request({
url,
method: "GET",
timeout: 1e4
});
if (res.statusCode === 200 && res.data && res.data.success) {
this.furnitureAnalysisList = res.data.data || [];
if (this.furnitureAnalysisList.length > 0) {
this.updateSummaryWithFurnitureData();
}
} else {
common_vendor.index.__f__("warn", "at pages-subpackage/customer/components/ConversationSummaryFurniture.vue:242", "获取家具意向分析失败:", ((_b = res.data) == null ? void 0 : _b.message) || "未知错误");
this.furnitureAnalysisList = [];
}
} catch (error) {
common_vendor.index.__f__("error", "at pages-subpackage/customer/components/ConversationSummaryFurniture.vue:246", "获取家具意向分析失败:", error);
this.furnitureAnalysisList = [];
} finally {
this.loading = false;
}
},
// 用家具意向分析数据更新会话总结
updateSummaryWithFurnitureData() {
if (this.furnitureAnalysisList.length === 0)
return;
const firstItem = this.furnitureAnalysisList[0];
const summaryItems = [];
if (firstItem.customerType) {
summaryItems.push({
label: "客户类型",
value: firstItem.customerType,
rawData: firstItem
});
}
if (firstItem.familyStructure) {
summaryItems.push({
label: "家庭结构",
value: firstItem.familyStructure,
rawData: firstItem
});
}
if (firstItem.summarySentence) {
this.summarySentence = firstItem.summarySentence;
}
if (firstItem.dealKeyPoints) {
this.dealKeyPoints = firstItem.dealKeyPoints;
} else if (firstItem.summarySentence) {
const keyWords = [];
const summary = firstItem.summarySentence;
if (summary.includes("优惠") || summary.includes("活动")) {
keyWords.push("活动优惠");
}
if (summary.includes("搭配")) {
keyWords.push("整套搭配");
}
if (summary.includes("环保")) {
keyWords.push("环保");
}
if (summary.includes("安全")) {
keyWords.push("安全");
}
if (summary.includes("交付") || summary.includes("周期")) {
keyWords.push("快速交付");
}
if (summary.includes("退换") || summary.includes("服务")) {
keyWords.push("无忧退换服务");
}
if (keyWords.length > 0) {
this.dealKeyPoints = keyWords.join("");
}
}
if (summaryItems.length > 0) {
this.summaryList = summaryItems;
}
this.buildProductRequirementList(firstItem);
},
// 构建产品需求清单(固定显示所有产品类别)
buildProductRequirementList(data) {
const categories = [
{ key: "sofa", name: "沙发", field: "sofa" },
{ key: "bed", name: "床", field: "bedAndMattress" },
{ key: "mattress", name: "床垫", field: "bedAndMattress" },
{ key: "dining_table", name: "餐桌椅", field: "diningTable" },
{ key: "tea_table", name: "茶几", field: "teaTable" },
{ key: "tv_cabinet", name: "电视柜", field: "tvCabinet" },
{ key: "study_desk", name: "学习桌", field: "studyDesk" },
{ key: "cabinet", name: "橱柜", field: "cabinet" },
{ key: "wine_cabinet", name: "酒柜", field: "wineCabinet" },
{ key: "master_bedroom_cabinet", name: "主卧衣柜", field: "masterBedroomCabinet" },
{ key: "secondary_bedroom_cabinet", name: "次卧衣柜", field: "secondaryBedroomCabinet" },
{ key: "shoe_cabinet", name: "鞋柜", field: "shoeCabinet" },
{ key: "custom", name: "定制家居", field: null }
];
const requirementMap = {};
const categoryList = [];
categories.forEach((category) => {
let hasData = false;
let productData = null;
if (category.key === "bed" || category.key === "mattress") {
const fieldValue = data.bedAndMattress || data.bed_and_mattress || "";
if (fieldValue && fieldValue.trim()) {
hasData = true;
productData = this.parseProductJson(fieldValue);
}
} else if (category.key === "custom") {
hasData = false;
} else {
const fieldValue = data[category.field] || data[this.toSnakeCase(category.field)] || "";
if (fieldValue && fieldValue.trim()) {
hasData = true;
productData = this.parseProductJson(fieldValue);
}
}
if (hasData) {
categoryList.push({ key: category.key, name: category.name });
const rows = this.buildProductDimensionRows(productData, data, category.key);
requirementMap[category.key] = { rows };
}
});
this.productRequirementMap = requirementMap;
this.productCategoryList = categoryList;
if (categoryList.length > 0) {
this.activeProductCategory = categoryList[0].key;
}
},
// 解析产品JSON字符串
parseProductJson(jsonString) {
if (!jsonString || typeof jsonString !== "string") {
return null;
}
try {
const parsed = JSON.parse(jsonString);
return parsed;
} catch (error) {
common_vendor.index.__f__("warn", "at pages-subpackage/customer/components/ConversationSummaryFurniture.vue:397", "解析产品JSON失败:", error, jsonString);
return null;
}
},
// 驼峰转蛇形命名
toSnakeCase(str) {
if (!str)
return "";
return str.replace(/([A-Z])/g, "_$1").toLowerCase().replace(/^_/, "");
},
// 切换产品类别
switchProductCategory(categoryKey) {
this.activeProductCategory = categoryKey;
},
// 获取产品类别名称
getProductCategoryName(categoryKey) {
const category = this.productCategoryList.find((item) => item.key === categoryKey);
return category ? category.name : "";
},
// 获取所有产品类别名称(用于意向产品清单显示)
getProductCategoryNames() {
return this.productCategoryList.map((item) => item.name).join("");
},
parseProductAttributes(productKey, requirementText, data) {
const attributes = {};
const text = (requirementText || "").trim();
if (!text)
return attributes;
const matchFirst = (pattern) => {
const result = text.match(pattern);
return result ? result[0] : "";
};
switch (productKey) {
case "sofa":
attributes.type = matchFirst(/(L型|L形|一字型|U型|U形|带贵妃榻|贵妃榻|三人位|四人位|转角|组合)/);
attributes.material = matchFirst(/(真皮|科技布|布艺|布|皮质|皮革|实木|板式|棉麻|绒布)/);
attributes.size = matchFirst(/(\d+\.?\d*)\s*(米|m|平米|平方米)/);
attributes.color = matchFirst(/(米白|白色|灰色|黑色|棕色|蓝色|绿色|暖色调|冷色调|灰白色系)/);
attributes.style = matchFirst(/(现代简约|简约现代|现代|北欧|中式|美式|欧式|工业风|原木风|简约|极简)/);
if (text.includes("储物") || text.includes("收纳"))
attributes.feature = "储物";
if (text.includes("好打理"))
attributes.remark = "要求好打理";
break;
case "bed":
attributes.size = matchFirst(/(\d+\.?\d*)\s*(米|m)/);
attributes.material = matchFirst(/(实木|板式|软包|皮质|布艺)/);
attributes.style = data.decorationStyle || "";
if (text.includes("主卧"))
attributes.remark = "主卧";
break;
case "mattress":
attributes.size = matchFirst(/(\d+\.?\d*)\s*(米|m)/);
attributes.material = matchFirst(/(弹簧|记忆棉|乳胶|椰棕|海绵)/);
if (text.includes("分区支撑"))
attributes.softness = "分区支撑(兼顾软硬需求)";
else if (text.includes("偏软") || text.includes("软"))
attributes.softness = "偏软";
else if (text.includes("偏硬") || text.includes("硬"))
attributes.softness = "偏硬";
break;
case "dining_table":
if (text.includes("伸缩"))
attributes.type = "可伸缩";
const rangeMatch = text.match(/(\d+\.?\d*)\s*[-~到]\s*(\d+\.?\d*)\s*米/);
if (rangeMatch)
attributes.size = `${rangeMatch[1]}-${rangeMatch[2]}`;
else
attributes.size = matchFirst(/(\d+\.?\d*)\s*米/);
attributes.chairCount = matchFirst(/(\d+)\s*把/);
if (text.includes("舒适"))
attributes.feature = "舒适型";
attributes.style = data.decorationStyle || "";
break;
case "tea_table":
if (text.includes("抽屉"))
attributes.type = "带抽屉";
if (text.includes("储物") || text.includes("收纳"))
attributes.feature = "储物";
attributes.style = data.decorationStyle || "";
break;
case "tv_cabinet":
if (text.includes("组合"))
attributes.type = "组合式";
if (text.includes("储物"))
attributes.feature = "储物";
attributes.style = data.decorationStyle || "";
break;
case "study_desk":
if (text.includes("可调节") || text.includes("调节高度"))
attributes.type = "可调节高度";
if (text.includes("成长"))
attributes.feature = "适应孩子成长";
break;
case "wine_cabinet":
if (text.includes("恒温"))
attributes.feature = "恒温";
const capacity = text.match(/(\d+)[-~到](\d+)\s*瓶|(\d+)\s*瓶/);
if (capacity) {
if (capacity[1] && capacity[2])
attributes.capacity = `${capacity[1]}-${capacity[2]}`;
else if (capacity[3])
attributes.capacity = `${capacity[3]}`;
}
break;
case "master_bedroom_cabinet":
case "secondary_bedroom_cabinet":
if (text.includes("定制") || text.includes("整墙"))
attributes.type = text.includes("整墙") ? "整墙定制" : "定制";
attributes.size = matchFirst(/(\d+\.?\d*)\s*(米|m)/);
if (text.includes("衣帽间"))
attributes.feature = "带衣帽间";
if (text.includes("主卧"))
attributes.remark = "主卧";
if (text.includes("次卧"))
attributes.remark = "次卧";
break;
case "shoe_cabinet":
if (text.includes("窄款") || text.includes("高型"))
attributes.type = "窄款高型";
attributes.size = matchFirst(/(\d+\.?\d*)\s*(米|m)/);
if (text.includes("带座") || text.includes("可坐"))
attributes.feature = "带座功能";
if (text.includes("收纳空间"))
attributes.remark = "大容量收纳";
break;
default:
attributes.description = text;
break;
}
if (!attributes.style && data && data.decorationStyle)
attributes.style = data.decorationStyle;
if (!attributes.color && data && data.decorationStyle) {
const color = data.decorationStyle.match(/(米白|白色|灰色|黑色|棕色|蓝色|暖色调|冷色调|灰白色系|原木色)/);
if (color)
attributes.color = color[0];
}
if (!attributes.description && text)
attributes.description = text;
return attributes;
},
buildProductDimensionRows(productData = null, data = {}, categoryKey = "") {
const dimensionLabels = [
{ key: "styleColor", label: "偏好风格与颜色", field: "preferenceStyleAndColor" },
{ key: "material", label: "材质偏好", field: "materialPreference" },
{ key: "focus", label: "客户重点关注", field: "customerFocusAreas" },
{ key: "price", label: "价格敏感度", field: "priceSensitivity" },
{ key: "campaign", label: "活动参与度", field: "activityParticipation" },
{ key: "ordered", label: "客户疑虑点", field: "customerConcerns" },
{ key: "service", label: "交付服务", field: "deliveryService" },
{ key: "competitor", label: "竞品反馈", field: "competitorFeedback" },
{ key: "delivery", label: "交付周期", field: "deliveryCycle" },
{ key: "appearance", label: "产品颜值", field: "productAppearance" }
];
const isParsedJson = productData && typeof productData === "object" && !Array.isArray(productData) && productData !== null && ("preferenceStyleAndColor" in productData || "materialPreference" in productData || "customerConcerns" in productData);
const getValue = (field) => {
if (isParsedJson) {
const value = productData[field];
if (value === null || value === void 0 || value === "") {
return "暂无信息";
}
if (typeof value === "string") {
const trimmed = value.trim();
return trimmed || "暂无信息";
}
return String(value) || "暂无信息";
} else {
const attributes = productData || {};
switch (field) {
case "preferenceStyleAndColor":
const parts = [];
if (attributes.style)
parts.push(attributes.style);
if (attributes.color)
parts.push(attributes.color);
if (parts.length === 0 && data.decorationStyle)
parts.push(data.decorationStyle);
return parts.join(" / ") || "暂无信息";
case "materialPreference":
return attributes.material || "暂无信息";
case "customerFocusAreas":
return attributes.feature || attributes.remark || "暂无信息";
case "priceSensitivity":
return data.priceSensitivity || "暂无信息";
case "activityParticipation":
return data.campaignPreference || data.activityParticipation || "暂无信息";
case "customerConcerns":
return attributes.description || "暂无信息";
case "deliveryService":
return data.serviceExpectation || "暂无信息";
case "competitorFeedback":
return data.competitorFeedback || "暂无信息";
case "deliveryCycle":
return data.deliveryCycle || "暂无信息";
case "productAppearance":
return data.appearancePreference || attributes.style || "暂无信息";
default:
return "暂无信息";
}
}
};
return dimensionLabels.map((item) => ({
label: item.label,
content: getValue(item.field) || "暂无信息"
}));
},
viewSummaryDetail(item) {
common_vendor.index.__f__("log", "at pages-subpackage/customer/components/ConversationSummaryFurniture.vue:591", "查看总结详情", item);
}
}
};
if (!Array) {
const _easycom_uni_icons2 = common_vendor.resolveComponent("uni-icons");
_easycom_uni_icons2();
}
const _easycom_uni_icons = () => "../../../uni_modules/uni-icons/components/uni-icons/uni-icons.js";
if (!Math) {
_easycom_uni_icons();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: $data.loading
}, $data.loading ? {} : !$data.loading && $data.summaryList.length === 0 && !$data.summarySentence && !$data.dealKeyPoints && $data.productCategoryList.length === 0 ? {} : {}, {
b: !$data.loading && $data.summaryList.length === 0 && !$data.summarySentence && !$data.dealKeyPoints && $data.productCategoryList.length === 0,
c: common_vendor.f($data.summaryList, (item, index, i0) => {
return {
a: common_vendor.t(item.label),
b: common_vendor.t(item.value),
c: "71565a67-0-" + i0,
d: index,
e: common_vendor.o(($event) => $options.viewSummaryDetail(item), index)
};
}),
d: common_vendor.p({
type: "right",
size: "16",
color: "#999"
}),
e: $data.productCategoryList.length > 0
}, $data.productCategoryList.length > 0 ? {
f: common_vendor.t($options.getProductCategoryNames())
} : {}, {
g: $data.summarySentence
}, $data.summarySentence ? {
h: common_vendor.t($data.summarySentence)
} : {}, {
i: $data.dealKeyPoints
}, $data.dealKeyPoints ? {
j: common_vendor.t($data.dealKeyPoints)
} : {}, {
k: $data.productCategoryList.length > 0
}, $data.productCategoryList.length > 0 ? {
l: common_vendor.f($data.productCategoryList, (category, index, i0) => {
return {
a: common_vendor.t(category.name),
b: $data.activeProductCategory === category.key ? 1 : "",
c: index,
d: common_vendor.o(($event) => $options.switchProductCategory(category.key), index)
};
})
} : {}, {
m: $data.activeProductCategory && $options.currentProductRequirement
}, $data.activeProductCategory && $options.currentProductRequirement ? {
n: common_vendor.t($options.getProductCategoryName($data.activeProductCategory)),
o: common_vendor.f($options.currentProductRequirement.rows, (row, index, i0) => {
return {
a: common_vendor.t(row.label),
b: common_vendor.t(row.content),
c: index
};
})
} : $data.productCategoryList.length === 0 && $data.furnitureAnalysisList.length > 0 ? {} : {}, {
p: $data.productCategoryList.length === 0 && $data.furnitureAnalysisList.length > 0
});
}
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-71565a67"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/customer/components/ConversationSummaryFurniture.js.map

View File

@@ -1,6 +0,0 @@
{
"component": true,
"usingComponents": {
"uni-icons": "../../../uni_modules/uni-icons/components/uni-icons/uni-icons"
}
}

View File

@@ -1 +0,0 @@
<scroll-view class="detail-content data-v-71565a67" scroll-y><view wx:if="{{a}}" class="loading-container data-v-71565a67"><text class="loading-text data-v-71565a67">加载中...</text></view><view wx:elif="{{b}}" class="empty-container data-v-71565a67"><text class="empty-text data-v-71565a67">暂无会话总结数据</text></view><view wx:for="{{c}}" wx:for-item="item" wx:key="d" class="summary-item data-v-71565a67" bindtap="{{item.e}}"><view class="summary-label data-v-71565a67"><text class="data-v-71565a67">{{item.a}}</text></view><view class="summary-value data-v-71565a67"><text class="data-v-71565a67">{{item.b}}</text></view><uni-icons wx:if="{{d}}" class="data-v-71565a67" u-i="{{item.c}}" bind:__l="__l" u-p="{{d}}"></uni-icons></view><view wx:if="{{e}}" class="summary-item data-v-71565a67"><view class="summary-label data-v-71565a67"><text class="data-v-71565a67">意向产品清单</text></view><view class="summary-value data-v-71565a67"><text class="data-v-71565a67">{{f}}</text></view></view><view wx:if="{{g}}" class="summary-item data-v-71565a67"><view class="summary-label data-v-71565a67"><text class="data-v-71565a67">一句话总结</text></view><view class="summary-value data-v-71565a67"><text class="data-v-71565a67">{{h}}</text></view></view><view wx:if="{{i}}" class="summary-item data-v-71565a67"><view class="summary-label data-v-71565a67"><text class="data-v-71565a67">成交关键点</text></view><view class="summary-value data-v-71565a67"><text class="data-v-71565a67">{{j}}</text></view></view><view wx:if="{{k}}" class="product-category-tabs data-v-71565a67"><scroll-view class="category-tabs-scroll data-v-71565a67" scroll-x><view class="category-tabs-wrapper data-v-71565a67"><view wx:for="{{l}}" wx:for-item="category" wx:key="c" class="{{['category-tab-item', 'data-v-71565a67', category.b && 'active']}}" bindtap="{{category.d}}"><text class="data-v-71565a67">{{category.a}}</text></view></view></scroll-view></view><view wx:if="{{m}}" class="product-requirement-table data-v-71565a67"><view class="requirement-title data-v-71565a67"><text class="data-v-71565a67">{{n}}</text></view><view class="requirement-table data-v-71565a67"><view wx:for="{{o}}" wx:for-item="row" wx:key="c" class="requirement-row data-v-71565a67"><view class="requirement-label data-v-71565a67"><text class="data-v-71565a67">{{row.a}}</text></view><view class="requirement-content data-v-71565a67"><text class="data-v-71565a67">{{row.b}}</text></view></view></view></view><view wx:elif="{{p}}" class="product-requirement-table data-v-71565a67"><view class="requirement-title data-v-71565a67"><text class="data-v-71565a67">产品需求</text></view><view class="requirement-table data-v-71565a67"><view class="requirement-row data-v-71565a67"><view class="requirement-label data-v-71565a67"><text class="data-v-71565a67">提示</text></view><view class="requirement-content data-v-71565a67"><text class="data-v-71565a67">暂无产品需求信息</text></view></view></view></view></scroll-view>

View File

@@ -1,136 +0,0 @@
/* 详情内容 */
.detail-content.data-v-71565a67 {
flex: 1;
padding: 24rpx 32rpx;
background-color: #FFFFFF;
overflow-y: auto;
min-height: 0;
}
.summary-item.data-v-71565a67 {
padding: 24rpx 0;
border-bottom: 1px solid #F0F0F0;
display: flex;
flex-direction: column;
position: relative;
padding-right: 40rpx;
}
.summary-item.data-v-71565a67:last-child {
border-bottom: none;
}
.summary-label.data-v-71565a67 {
margin-bottom: 12rpx;
}
.summary-label text.data-v-71565a67 {
font-size: 28rpx;
color: #666;
font-weight: 500;
}
.summary-value.data-v-71565a67 {
flex: 1;
}
.summary-value text.data-v-71565a67 {
font-size: 28rpx;
color: #333;
line-height: 1.6;
}
.summary-item uni-icons.data-v-71565a67 {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
/* 产品类别标签页 */
.product-category-tabs.data-v-71565a67 {
background-color: #FFFFFF;
border-bottom: 1px solid #E0E0E0;
margin-bottom: 24rpx;
padding: 0;
}
.category-tabs-scroll.data-v-71565a67 {
white-space: nowrap;
width: 100%;
}
.category-tabs-wrapper.data-v-71565a67 {
display: inline-flex;
padding: 0 32rpx;
}
.category-tab-item.data-v-71565a67 {
padding: 24rpx 16rpx;
position: relative;
margin-right: 32rpx;
white-space: nowrap;
}
.category-tab-item text.data-v-71565a67 {
font-size: 28rpx;
color: #666;
}
.category-tab-item.active text.data-v-71565a67 {
color: #333;
font-weight: 500;
}
.category-tab-item.active.data-v-71565a67::after {
content: '';
position: absolute;
bottom: 0;
left: 16rpx;
right: 16rpx;
height: 4rpx;
background-color: #007AFF;
border-radius: 2rpx;
}
/* 产品需求清单表格 */
.product-requirement-table.data-v-71565a67 {
background-color: #FFFFFF;
padding: 0;
}
.requirement-title.data-v-71565a67 {
padding: 24rpx 32rpx;
font-size: 32rpx;
font-weight: 600;
color: #333;
border-bottom: 1px solid #F0F0F0;
}
.requirement-table.data-v-71565a67 {
padding: 0 32rpx 24rpx;
}
.requirement-row.data-v-71565a67 {
display: flex;
padding: 24rpx 0;
border-bottom: 1px solid #F0F0F0;
}
.requirement-row.data-v-71565a67:last-child {
border-bottom: none;
}
.requirement-label.data-v-71565a67 {
min-width: 200rpx;
width: 200rpx;
padding-right: 24rpx;
}
.requirement-label text.data-v-71565a67 {
font-size: 28rpx;
color: #666;
font-weight: 500;
}
.requirement-content.data-v-71565a67 {
flex: 1;
}
.requirement-content text.data-v-71565a67 {
font-size: 28rpx;
color: #333;
line-height: 1.6;
}
/* 加载和空状态 */
.loading-container.data-v-71565a67,
.empty-container.data-v-71565a67 {
padding: 80rpx 0;
text-align: center;
}
.loading-text.data-v-71565a67,
.empty-text.data-v-71565a67 {
font-size: 28rpx;
color: #999;
}

View File

@@ -1,84 +0,0 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
const _sfc_main = {
name: "CustomerList",
props: {
list: {
type: Array,
default: () => []
}
},
data() {
return {
salesName: "",
customerName: ""
};
},
methods: {
onInputChange() {
},
handleRefresh() {
this.$emit("filterClick", {
salesName: this.salesName.trim(),
customerName: this.customerName.trim()
});
}
}
};
if (!Array) {
const _easycom_uni_icons2 = common_vendor.resolveComponent("uni-icons");
_easycom_uni_icons2();
}
const _easycom_uni_icons = () => "../../../uni_modules/uni-icons/components/uni-icons/uni-icons.js";
if (!Math) {
_easycom_uni_icons();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.t($props.list.length),
b: common_vendor.o((...args) => $options.handleRefresh && $options.handleRefresh(...args)),
c: common_vendor.o([($event) => $data.salesName = $event.detail.value, (...args) => $options.onInputChange && $options.onInputChange(...args)]),
d: $data.salesName,
e: common_vendor.o((...args) => $options.handleRefresh && $options.handleRefresh(...args)),
f: common_vendor.o([($event) => $data.customerName = $event.detail.value, (...args) => $options.onInputChange && $options.onInputChange(...args)]),
g: $data.customerName,
h: common_vendor.p({
type: "refresh",
size: "18",
color: "#2A68FF"
}),
i: common_vendor.o((...args) => $options.handleRefresh && $options.handleRefresh(...args)),
j: common_vendor.f($props.list, (item, index, i0) => {
return common_vendor.e({
a: common_vendor.t(item.name),
b: common_vendor.t(item.intent),
c: common_vendor.n(item.intent === "高" ? "intent-high" : "intent-medium"),
d: common_vendor.t(item.serviceStaff),
e: common_vendor.t(item.serviceCount),
f: common_vendor.t(item.lastService),
g: common_vendor.f(item.tags, (tag, tagIndex, i1) => {
return {
a: common_vendor.t(tag.text),
b: common_vendor.n("tag-" + tag.color),
c: tagIndex
};
}),
h: item.phone || item.budget
}, item.phone || item.budget ? common_vendor.e({
i: item.phone
}, item.phone ? {
j: common_vendor.t(item.phone)
} : {}, {
k: item.budget
}, item.budget ? {
l: common_vendor.t(item.budget)
} : {}) : {}, {
m: index,
n: common_vendor.o(($event) => _ctx.$emit("itemClick", item), index)
});
})
};
}
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-323a5a4c"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/customer/components/CustomerList.js.map

View File

@@ -1,6 +0,0 @@
{
"component": true,
"usingComponents": {
"uni-icons": "../../../uni_modules/uni-icons/components/uni-icons/uni-icons"
}
}

View File

@@ -1 +0,0 @@
<view class="customer-list-container data-v-323a5a4c"><view class="service-status-toolbar data-v-323a5a4c"><text class="toolbar-total data-v-323a5a4c">共{{a}}条</text><input class="toolbar-input data-v-323a5a4c" placeholder="所属销售姓名" placeholder-style="color: #b0b0b0" confirm-type="search" bindconfirm="{{b}}" bindinput="{{c}}" value="{{d}}"/><input class="toolbar-input data-v-323a5a4c" placeholder="客户姓名" placeholder-style="color: #b0b0b0" confirm-type="search" bindconfirm="{{e}}" bindinput="{{f}}" value="{{g}}"/><view class="toolbar-actions data-v-323a5a4c"><view class="toolbar-btn toolbar-btn--refresh data-v-323a5a4c" bindtap="{{i}}"><uni-icons wx:if="{{h}}" class="data-v-323a5a4c" u-i="323a5a4c-0" bind:__l="__l" u-p="{{h}}"></uni-icons><text class="data-v-323a5a4c">刷新</text></view></view></view><scroll-view class="customer-list data-v-323a5a4c" scroll-y><view wx:for="{{j}}" wx:for-item="item" wx:key="m" class="customer-card data-v-323a5a4c" catchtap="{{item.n}}"><view class="customer-header data-v-323a5a4c"><text class="customer-name-text data-v-323a5a4c">{{item.a}}</text><view class="{{['intent-badge', 'data-v-323a5a4c', item.c]}}"><text class="data-v-323a5a4c">意向{{item.b}}</text></view></view><view class="customer-service-info data-v-323a5a4c"><text class="data-v-323a5a4c">服务人员:{{item.d}} 服务{{item.e}}次 上次服务:{{item.f}}</text></view><view class="customer-tags data-v-323a5a4c"><view wx:for="{{item.g}}" wx:for-item="tag" wx:key="c" class="{{['tag-item', 'data-v-323a5a4c', tag.b]}}"><text class="data-v-323a5a4c">{{tag.a}}</text></view></view><view wx:if="{{item.h}}" class="customer-footer data-v-323a5a4c"><text wx:if="{{item.i}}" class="customer-phone data-v-323a5a4c">{{item.j}}</text><text wx:if="{{item.k}}" class="customer-budget data-v-323a5a4c">{{item.l}}</text></view></view></scroll-view></view>

View File

@@ -1,169 +0,0 @@
.customer-list-container.data-v-323a5a4c {
/* 使用绝对定位从tab页底部开始到底部导航栏结束 */
position: absolute;
top: 160rpx; /* 导航栏(88rpx) + tab页(72rpx) = 160rpx */
left: 0;
right: 0;
bottom: 96rpx; /* 底部导航栏高度 */
display: flex;
flex-direction: column;
background-color: #F5F5F5;
padding: 24rpx 16rpx;
box-sizing: border-box;
}
.service-status-toolbar.data-v-323a5a4c {
display: flex;
flex-wrap: nowrap;
align-items: center;
gap: 8rpx; /* 增加间距,避免元素被挤压 */
padding: 12rpx 8rpx; /* 增加内边距,给搜索框更多空间 */
margin-bottom: 24rpx; /* 与列表项间距保持一致24rpx */
background-color: #F8F8FA;
border-radius: 8rpx;
border: 1px solid #EFEFF2;
overflow-x: auto;
min-height: 64rpx; /* 设置最小高度,确保搜索区域不被挤压 */
box-sizing: border-box;
flex-shrink: 0; /* 防止被压缩 */
}
.toolbar-total.data-v-323a5a4c {
font-size: 24rpx;
color: #666;
white-space: nowrap;
flex-shrink: 0;
margin-right: 8rpx; /* 增加右边距,与搜索框保持距离 */
line-height: 1.2;
padding: 0 4rpx; /* 增加左右内边距 */
}
.toolbar-input.data-v-323a5a4c {
flex: 1;
min-width: 120rpx; /* 增加最小宽度,避免被挤压变形 */
max-width: 200rpx; /* 设置最大宽度,保持合理比例 */
height: 56rpx; /* 稍微增加高度,提升可用性 */
line-height: 56rpx;
background-color: #F5F6FA;
border-radius: 8rpx;
padding: 0 12rpx; /* 增加左右内边距 */
font-size: 24rpx;
border: 1px solid transparent;
box-sizing: border-box;
flex-shrink: 1; /* 允许适当收缩,但保持最小宽度 */
}
.toolbar-actions.data-v-323a5a4c {
display: flex;
align-items: center;
margin-left: auto;
flex-shrink: 0;
gap: 8rpx; /* 增加按钮之间的间距 */
}
.toolbar-btn.data-v-323a5a4c {
padding: 0 12rpx; /* 增加左右内边距 */
height: 56rpx; /* 与输入框高度保持一致 */
min-width: 56rpx;
color: #2A68FF;
display: flex;
align-items: center;
justify-content: center;
gap: 4rpx; /* 增加图标和文字之间的间距 */
font-size: 24rpx;
font-weight: 400;
line-height: 1;
box-sizing: border-box;
}
.toolbar-btn text.data-v-323a5a4c {
color: #2A68FF;
}
.customer-list.data-v-323a5a4c {
/* 使用flex填充剩余空间 */
flex: 1;
background-color: transparent;
box-sizing: border-box;
overflow-y: auto;
}
.customer-card.data-v-323a5a4c {
width: 100%;
box-sizing: border-box;
background-color: #FFFFFF;
border-radius: 16rpx;
padding: 32rpx;
margin-bottom: 24rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
}
.customer-header.data-v-323a5a4c {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16rpx;
}
.customer-name-text.data-v-323a5a4c {
font-size: 32rpx;
font-weight: 600;
color: #333;
}
.intent-badge.data-v-323a5a4c {
padding: 6rpx 16rpx;
border-radius: 8rpx;
}
.intent-high.data-v-323a5a4c {
background-color: #E3F2FD;
}
.intent-high text.data-v-323a5a4c {
font-size: 24rpx;
color: #1976D2;
font-weight: 500;
}
.intent-medium.data-v-323a5a4c {
background-color: #FFF3E0;
}
.intent-medium text.data-v-323a5a4c {
font-size: 24rpx;
color: #F57C00;
font-weight: 500;
}
.customer-service-info.data-v-323a5a4c {
margin-bottom: 20rpx;
}
.customer-service-info text.data-v-323a5a4c {
font-size: 24rpx;
color: #999;
}
.customer-tags.data-v-323a5a4c {
display: flex;
flex-wrap: wrap;
margin-bottom: 20rpx;
gap: 12rpx;
}
.tag-item.data-v-323a5a4c {
padding: 8rpx 16rpx;
border-radius: 8rpx;
}
.tag-orange.data-v-323a5a4c {
background-color: #FFF3E0;
}
.tag-orange text.data-v-323a5a4c {
font-size: 24rpx;
color: #F57C00;
}
.tag-blue.data-v-323a5a4c {
background-color: #E3F2FD;
}
.tag-blue text.data-v-323a5a4c {
font-size: 24rpx;
color: #1976D2;
}
.customer-footer.data-v-323a5a4c {
display: flex;
justify-content: space-between;
align-items: center;
padding-top: 16rpx;
border-top: 1px solid #F0F0F0;
}
.customer-phone.data-v-323a5a4c {
font-size: 28rpx;
color: #333;
}
.customer-budget.data-v-323a5a4c {
font-size: 26rpx;
color: #1976D2;
}

View File

@@ -1,116 +0,0 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
const _sfc_main = {
name: "CustomerProfileModal",
props: {
profile: {
type: Object,
default: () => ({})
}
},
data() {
return {
collapsed: false
};
},
methods: {
open() {
this.$refs.popup.open();
},
close() {
this.$refs.popup.close();
this.$emit("close");
},
toggleCollapse() {
this.collapsed = !this.collapsed;
}
}
};
if (!Array) {
const _easycom_uni_icons2 = common_vendor.resolveComponent("uni-icons");
const _easycom_uni_popup2 = common_vendor.resolveComponent("uni-popup");
(_easycom_uni_icons2 + _easycom_uni_popup2)();
}
const _easycom_uni_icons = () => "../../../uni_modules/uni-icons/components/uni-icons/uni-icons.js";
const _easycom_uni_popup = () => "../../../uni_modules/uni-popup/components/uni-popup/uni-popup.js";
if (!Math) {
(_easycom_uni_icons + _easycom_uni_popup)();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_vendor.p({
type: "close",
size: "24",
color: "#333"
}),
b: common_vendor.o((...args) => $options.close && $options.close(...args)),
c: common_vendor.t($props.profile.name),
d: common_vendor.t($props.profile.intent),
e: common_vendor.n($props.profile.intent === "高" ? "intent-high" : "intent-medium"),
f: common_vendor.t($props.profile.serviceCount),
g: common_vendor.t($props.profile.lastService),
h: common_vendor.t($props.profile.phone),
i: common_vendor.t($props.profile.serviceStaff),
j: common_vendor.t($props.profile.wechatStatus),
k: common_vendor.t($props.profile.address),
l: common_vendor.t($props.profile.source),
m: common_vendor.t($data.collapsed ? "展开" : "收起"),
n: common_vendor.p({
type: $data.collapsed ? "down" : "up",
size: "14",
color: "#666"
}),
o: common_vendor.o((...args) => $options.toggleCollapse && $options.toggleCollapse(...args)),
p: !$data.collapsed
}, !$data.collapsed ? {
q: common_vendor.t($props.profile.followStage),
r: common_vendor.p({
type: "right",
size: "16",
color: "#999"
})
} : {}, {
s: !$data.collapsed
}, !$data.collapsed ? common_vendor.e({
t: common_vendor.p({
type: "person",
size: "20",
color: "#007AFF"
}),
v: common_vendor.f($props.profile.systemTags, (tag, index, i0) => {
return {
a: common_vendor.t(tag),
b: "system-" + index
};
}),
w: $props.profile.customTags && $props.profile.customTags.length > 0
}, $props.profile.customTags && $props.profile.customTags.length > 0 ? {} : {}, {
x: $props.profile.customTags && $props.profile.customTags.length > 0
}, $props.profile.customTags && $props.profile.customTags.length > 0 ? {
y: common_vendor.f($props.profile.customTags, (tag, index, i0) => {
return {
a: common_vendor.t(tag),
b: "custom-" + index
};
})
} : {}) : {}, {
z: !$data.collapsed
}, !$data.collapsed ? {
A: common_vendor.p({
type: "star",
size: "20",
color: "#007AFF"
}),
B: common_vendor.t($props.profile.intent),
C: common_vendor.t($props.profile.intentDescription)
} : {}, {
D: common_vendor.sr("popup", "6dcbcf9c-0"),
E: common_vendor.p({
type: "bottom",
["mask-click"]: false
})
});
}
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-6dcbcf9c"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/customer/components/CustomerProfileModal.js.map

View File

@@ -1,7 +0,0 @@
{
"component": true,
"usingComponents": {
"uni-icons": "../../../uni_modules/uni-icons/components/uni-icons/uni-icons",
"uni-popup": "../../../uni_modules/uni-popup/components/uni-popup/uni-popup"
}
}

View File

@@ -1 +0,0 @@
<uni-popup wx:if="{{E}}" class="r data-v-6dcbcf9c" u-s="{{['d']}}" u-r="popup" u-i="6dcbcf9c-0" bind:__l="__l" u-p="{{E}}"><view class="customer-profile-modal data-v-6dcbcf9c"><view class="profile-header data-v-6dcbcf9c"><view class="profile-close data-v-6dcbcf9c" bindtap="{{b}}"><uni-icons wx:if="{{a}}" class="data-v-6dcbcf9c" u-i="6dcbcf9c-1,6dcbcf9c-0" bind:__l="__l" u-p="{{a}}"></uni-icons></view><text class="profile-title data-v-6dcbcf9c">客户档案</text></view><scroll-view class="profile-content data-v-6dcbcf9c" scroll-y><view class="profile-section data-v-6dcbcf9c"><view class="profile-name-row data-v-6dcbcf9c"><text class="profile-name data-v-6dcbcf9c">{{c}}</text><view class="{{['profile-intent-badge', 'data-v-6dcbcf9c', e]}}"><text class="data-v-6dcbcf9c">意向{{d}}</text></view></view><view class="profile-service-info data-v-6dcbcf9c"><text class="data-v-6dcbcf9c">服务{{f}}次 {{g}}</text></view><view class="profile-details data-v-6dcbcf9c"><view class="detail-row data-v-6dcbcf9c"><text class="detail-label data-v-6dcbcf9c">电话:</text><text class="detail-value data-v-6dcbcf9c">{{h}}</text></view><view class="detail-row data-v-6dcbcf9c"><text class="detail-label data-v-6dcbcf9c">服务人员:</text><text class="detail-value data-v-6dcbcf9c">{{i}}</text></view><view class="detail-row data-v-6dcbcf9c"><text class="detail-label data-v-6dcbcf9c">微信状态:</text><text class="detail-value data-v-6dcbcf9c">{{j}}</text></view><view class="detail-row data-v-6dcbcf9c"><text class="detail-label data-v-6dcbcf9c">客户地址:</text><text class="detail-value data-v-6dcbcf9c">{{k}}</text></view><view class="detail-row data-v-6dcbcf9c"><text class="detail-label data-v-6dcbcf9c">客户来源:</text><text class="detail-value data-v-6dcbcf9c">{{l}}</text><view class="collapse-btn data-v-6dcbcf9c" bindtap="{{o}}"><text class="data-v-6dcbcf9c">{{m}}</text><uni-icons wx:if="{{n}}" class="data-v-6dcbcf9c" u-i="6dcbcf9c-2,6dcbcf9c-0" bind:__l="__l" u-p="{{n}}"></uni-icons></view></view></view></view><view wx:if="{{p}}" class="profile-section data-v-6dcbcf9c"><view class="section-header data-v-6dcbcf9c"><text class="section-title data-v-6dcbcf9c">跟进阶段</text><view class="stage-info data-v-6dcbcf9c"><text class="data-v-6dcbcf9c">当前: {{q}}</text><uni-icons wx:if="{{r}}" class="data-v-6dcbcf9c" u-i="6dcbcf9c-3,6dcbcf9c-0" bind:__l="__l" u-p="{{r}}"></uni-icons></view></view></view><view wx:if="{{s}}" class="profile-section data-v-6dcbcf9c"><view class="section-header data-v-6dcbcf9c"><view class="section-icon data-v-6dcbcf9c"><uni-icons wx:if="{{t}}" class="data-v-6dcbcf9c" u-i="6dcbcf9c-4,6dcbcf9c-0" bind:__l="__l" u-p="{{t}}"></uni-icons></view><text class="section-title data-v-6dcbcf9c">客户画像</text></view><view class="profile-tags data-v-6dcbcf9c"><view wx:for="{{v}}" wx:for-item="tag" wx:key="b" class="profile-tag tag-blue data-v-6dcbcf9c"><text class="data-v-6dcbcf9c">{{tag.a}}</text></view></view><view wx:if="{{w}}" class="custom-label data-v-6dcbcf9c"><text class="data-v-6dcbcf9c">自定义</text></view><view wx:if="{{x}}" class="profile-tags data-v-6dcbcf9c"><view wx:for="{{y}}" wx:for-item="tag" wx:key="b" class="profile-tag tag-yellow data-v-6dcbcf9c"><text class="data-v-6dcbcf9c">{{tag.a}}</text></view></view></view><view wx:if="{{z}}" class="profile-section data-v-6dcbcf9c"><view class="section-header data-v-6dcbcf9c"><view class="section-icon data-v-6dcbcf9c"><uni-icons wx:if="{{A}}" class="data-v-6dcbcf9c" u-i="6dcbcf9c-5,6dcbcf9c-0" bind:__l="__l" u-p="{{A}}"></uni-icons></view><text class="section-title data-v-6dcbcf9c">客户意向</text><view class="intent-level data-v-6dcbcf9c"><text class="data-v-6dcbcf9c">意向{{B}}</text></view></view><view class="intent-description data-v-6dcbcf9c"><text class="data-v-6dcbcf9c">{{C}}</text></view></view></scroll-view></view></uni-popup>

View File

@@ -1,188 +0,0 @@
.customer-profile-modal.data-v-6dcbcf9c {
background-color: #FFFFFF;
border-radius: 32rpx 32rpx 0 0;
max-height: 90vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
.profile-header.data-v-6dcbcf9c {
display: flex;
justify-content: space-between;
align-items: center;
padding: 32rpx;
border-bottom: 1px solid #F0F0F0;
position: relative;
}
.profile-close.data-v-6dcbcf9c {
width: 48rpx;
height: 48rpx;
display: flex;
align-items: center;
justify-content: center;
}
.profile-title.data-v-6dcbcf9c {
position: absolute;
left: 50%;
transform: translateX(-50%);
font-size: 36rpx;
font-weight: 600;
color: #333;
}
.profile-content.data-v-6dcbcf9c {
flex: 1;
padding: 32rpx;
background-color: #FFFFFF;
}
.profile-section.data-v-6dcbcf9c {
margin-bottom: 32rpx;
}
.profile-name-row.data-v-6dcbcf9c {
display: flex;
align-items: center;
margin-bottom: 16rpx;
}
.profile-name.data-v-6dcbcf9c {
font-size: 36rpx;
font-weight: 600;
color: #333;
margin-right: 16rpx;
}
.profile-intent-badge.data-v-6dcbcf9c {
padding: 6rpx 16rpx;
border-radius: 8rpx;
}
.profile-intent-badge.intent-high.data-v-6dcbcf9c {
background-color: #E3F2FD;
}
.profile-intent-badge.intent-high text.data-v-6dcbcf9c {
font-size: 24rpx;
color: #1976D2;
font-weight: 500;
}
.profile-intent-badge.intent-medium.data-v-6dcbcf9c {
background-color: #FFF3E0;
}
.profile-intent-badge.intent-medium text.data-v-6dcbcf9c {
font-size: 24rpx;
color: #F57C00;
font-weight: 500;
}
.profile-service-info.data-v-6dcbcf9c {
margin-bottom: 24rpx;
}
.profile-service-info text.data-v-6dcbcf9c {
font-size: 26rpx;
color: #999;
}
.profile-details.data-v-6dcbcf9c {
background-color: #F5F5F5;
border-radius: 16rpx;
padding: 24rpx;
}
.detail-row.data-v-6dcbcf9c {
display: flex;
align-items: center;
margin-bottom: 16rpx;
position: relative;
}
.detail-row.data-v-6dcbcf9c:last-child {
margin-bottom: 0;
}
.detail-label.data-v-6dcbcf9c {
font-size: 28rpx;
color: #666;
width: 160rpx;
flex-shrink: 0;
}
.detail-value.data-v-6dcbcf9c {
font-size: 28rpx;
color: #333;
flex: 1;
}
.collapse-btn.data-v-6dcbcf9c {
display: flex;
align-items: center;
margin-left: 16rpx;
padding: 4rpx 8rpx;
}
.collapse-btn text.data-v-6dcbcf9c {
font-size: 24rpx;
color: #666;
margin-right: 4rpx;
}
.section-header.data-v-6dcbcf9c {
display: flex;
align-items: center;
margin-bottom: 24rpx;
}
.section-icon.data-v-6dcbcf9c {
margin-right: 8rpx;
}
.section-title.data-v-6dcbcf9c {
font-size: 30rpx;
font-weight: 500;
color: #333;
flex: 1;
}
.stage-info.data-v-6dcbcf9c {
display: flex;
align-items: center;
}
.stage-info text.data-v-6dcbcf9c {
font-size: 28rpx;
color: #333;
margin-right: 8rpx;
}
.profile-tags.data-v-6dcbcf9c {
display: flex;
flex-wrap: wrap;
gap: 12rpx;
margin-bottom: 24rpx;
}
.profile-tag.data-v-6dcbcf9c {
padding: 8rpx 16rpx;
border-radius: 8rpx;
}
.profile-tag.tag-blue.data-v-6dcbcf9c {
background-color: #E3F2FD;
}
.profile-tag.tag-blue text.data-v-6dcbcf9c {
font-size: 24rpx;
color: #1976D2;
}
.profile-tag.tag-yellow.data-v-6dcbcf9c {
background-color: #FFF3E0;
}
.profile-tag.tag-yellow text.data-v-6dcbcf9c {
font-size: 24rpx;
color: #F57C00;
}
.custom-label.data-v-6dcbcf9c {
margin-bottom: 16rpx;
}
.custom-label text.data-v-6dcbcf9c {
font-size: 26rpx;
color: #666;
}
.intent-level.data-v-6dcbcf9c {
padding: 6rpx 16rpx;
background-color: #E3F2FD;
border-radius: 8rpx;
}
.intent-level text.data-v-6dcbcf9c {
font-size: 24rpx;
color: #1976D2;
font-weight: 500;
}
.intent-description.data-v-6dcbcf9c {
background-color: #F5F5F5;
border-radius: 16rpx;
padding: 24rpx;
}
.intent-description text.data-v-6dcbcf9c {
font-size: 28rpx;
color: #333;
line-height: 1.8;
}

View File

@@ -1,149 +0,0 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
const _sfc_main = {
name: "ServiceList",
props: {
list: {
type: Array,
default: () => []
},
total: {
type: Number,
default: 0
}
},
data() {
return {
salesName: "",
customerName: "",
selectedServiceItem: null,
showServiceActionMenu: false
};
},
methods: {
onInputChange() {
},
handleRefresh() {
this.$emit("filterClick", {
salesName: this.salesName.trim(),
customerName: this.customerName.trim()
});
},
onReachBottom() {
this.$emit("reachBottom");
},
// 菜单按钮点击
onMenuButtonClick(item) {
if (this.selectedServiceItem && this.selectedServiceItem.id === item.id && this.showServiceActionMenu) {
this.closeServiceActionMenu();
return;
}
this.selectedServiceItem = item;
this.showServiceActionMenu = true;
},
// 关闭菜单
closeServiceActionMenu() {
this.showServiceActionMenu = false;
this.selectedServiceItem = null;
},
// 处理删除
handleDelete(item) {
this.closeServiceActionMenu();
this.$emit("menuAction", {
action: "delete",
item
});
},
// 处理查看
handleView(item) {
this.closeServiceActionMenu();
this.$emit("menuAction", {
action: "view",
item
});
},
// 处理AI分析
handleAnalysis(item) {
this.closeServiceActionMenu();
this.$emit("menuAction", {
action: "analysis",
item
});
},
// 处理录音
handleAudio(item) {
this.closeServiceActionMenu();
this.$emit("menuAction", {
action: "audio",
item
});
},
// 处理列表项点击
handleItemClick(item) {
if (this.showServiceActionMenu) {
return;
}
this.$emit("itemClick", item);
}
}
};
if (!Array) {
const _easycom_uni_icons2 = common_vendor.resolveComponent("uni-icons");
_easycom_uni_icons2();
}
const _easycom_uni_icons = () => "../../../uni_modules/uni-icons/components/uni-icons/uni-icons.js";
if (!Math) {
_easycom_uni_icons();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_vendor.t($props.total || $props.list.length),
b: common_vendor.o((...args) => $options.handleRefresh && $options.handleRefresh(...args)),
c: common_vendor.o([($event) => $data.salesName = $event.detail.value, (...args) => $options.onInputChange && $options.onInputChange(...args)]),
d: $data.salesName,
e: common_vendor.o((...args) => $options.handleRefresh && $options.handleRefresh(...args)),
f: common_vendor.o([($event) => $data.customerName = $event.detail.value, (...args) => $options.onInputChange && $options.onInputChange(...args)]),
g: $data.customerName,
h: common_vendor.p({
type: "refresh",
size: "18",
color: "#2A68FF"
}),
i: common_vendor.o((...args) => $options.handleRefresh && $options.handleRefresh(...args)),
j: common_vendor.f($props.list, (item, index, i0) => {
return common_vendor.e({
a: common_vendor.t(item.title),
b: "0c664d9c-1-" + i0,
c: common_vendor.o(($event) => $options.onMenuButtonClick(item), index),
d: common_vendor.t(item.date),
e: common_vendor.t(item.description),
f: common_vendor.t(item.customerName.charAt(0)),
g: common_vendor.t(item.customerName),
h: $data.selectedServiceItem && $data.selectedServiceItem.id === item.id && $data.showServiceActionMenu
}, $data.selectedServiceItem && $data.selectedServiceItem.id === item.id && $data.showServiceActionMenu ? {
i: common_vendor.o(($event) => $options.handleDelete(item), index),
j: common_vendor.o(($event) => $options.handleView(item), index),
k: common_vendor.o(($event) => $options.handleAnalysis(item), index),
l: common_vendor.o(($event) => $options.handleAudio(item), index),
m: common_vendor.o(() => {
}, index)
} : {}, {
n: index,
o: $data.selectedServiceItem && $data.selectedServiceItem.id === item.id ? 1 : "",
p: common_vendor.o(($event) => $options.handleItemClick(item), index)
});
}),
k: common_vendor.p({
type: "more-filled",
size: "20",
color: "#999"
}),
l: common_vendor.o((...args) => $options.onReachBottom && $options.onReachBottom(...args)),
m: $data.showServiceActionMenu
}, $data.showServiceActionMenu ? {
n: common_vendor.o((...args) => $options.closeServiceActionMenu && $options.closeServiceActionMenu(...args))
} : {});
}
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-0c664d9c"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/customer/components/ServiceList.js.map

View File

@@ -1,6 +0,0 @@
{
"component": true,
"usingComponents": {
"uni-icons": "../../../uni_modules/uni-icons/components/uni-icons/uni-icons"
}
}

View File

@@ -1 +0,0 @@
<view class="service-list-container data-v-0c664d9c"><view class="service-status-toolbar data-v-0c664d9c"><text class="toolbar-total data-v-0c664d9c">共{{a}}条</text><input class="toolbar-input data-v-0c664d9c" placeholder="所属销售姓名" placeholder-style="color: #b0b0b0" confirm-type="search" bindconfirm="{{b}}" bindinput="{{c}}" value="{{d}}"/><input class="toolbar-input data-v-0c664d9c" placeholder="客户姓名" placeholder-style="color: #b0b0b0" confirm-type="search" bindconfirm="{{e}}" bindinput="{{f}}" value="{{g}}"/><view class="toolbar-actions data-v-0c664d9c"><view class="toolbar-btn toolbar-btn--refresh data-v-0c664d9c" bindtap="{{i}}"><uni-icons wx:if="{{h}}" class="data-v-0c664d9c" u-i="0c664d9c-0" bind:__l="__l" u-p="{{h}}"></uni-icons><text class="data-v-0c664d9c">刷新</text></view></view></view><scroll-view class="service-list data-v-0c664d9c" scroll-y bindscrolltolower="{{l}}"><view wx:for="{{j}}" wx:for-item="item" wx:key="n" class="{{['service-item', 'data-v-0c664d9c', item.o && 'service-item--active']}}" bindtap="{{item.p}}"><view class="service-header data-v-0c664d9c"><text class="service-title data-v-0c664d9c">{{item.a}}</text><view class="service-menu-button data-v-0c664d9c" catchtap="{{item.c}}"><uni-icons wx:if="{{k}}" class="data-v-0c664d9c" u-i="{{item.b}}" bind:__l="__l" u-p="{{k}}"></uni-icons></view></view><view class="service-meta data-v-0c664d9c"><text class="service-date data-v-0c664d9c">{{item.d}}</text></view><view class="service-content data-v-0c664d9c"><text class="service-desc data-v-0c664d9c">{{item.e}}</text></view><view class="service-customer data-v-0c664d9c"><view class="customer-avatar data-v-0c664d9c"><text class="avatar-text data-v-0c664d9c">{{item.f}}</text></view><text class="customer-name data-v-0c664d9c">{{item.g}}</text></view><view wx:if="{{item.h}}" class="service-action-menu data-v-0c664d9c" catchtap="{{item.m}}"><view class="service-action-menu-item service-action-menu-item--danger data-v-0c664d9c" bindtap="{{item.i}}"><text class="data-v-0c664d9c">删除</text></view><view class="service-action-menu-divider data-v-0c664d9c"></view><view class="service-action-menu-item data-v-0c664d9c" bindtap="{{item.j}}"><text class="data-v-0c664d9c">查看</text></view><view class="service-action-menu-divider data-v-0c664d9c"></view><view class="service-action-menu-item data-v-0c664d9c" bindtap="{{item.k}}"><text class="data-v-0c664d9c">AI分析</text></view><view class="service-action-menu-divider data-v-0c664d9c"></view><view class="service-action-menu-item data-v-0c664d9c" bindtap="{{item.l}}"><text class="data-v-0c664d9c">录音</text></view></view></view></scroll-view><view wx:if="{{m}}" class="service-action-menu-mask data-v-0c664d9c" bindtap="{{n}}"></view></view>

View File

@@ -1,206 +0,0 @@
.service-list-container.data-v-0c664d9c {
/* 使用绝对定位从tab页底部开始到底部导航栏结束 */
position: absolute;
top: 160rpx; /* 导航栏(88rpx) + tab页(72rpx) = 160rpx */
left: 0;
right: 0;
bottom: 96rpx; /* 底部导航栏高度 */
display: flex;
flex-direction: column;
background-color: #F5F5F5;
padding: 24rpx 16rpx;
box-sizing: border-box;
}
.service-status-toolbar.data-v-0c664d9c {
display: flex;
flex-wrap: nowrap;
align-items: center;
gap: 8rpx; /* 增加间距,避免元素被挤压 */
padding: 12rpx 8rpx; /* 增加内边距,给搜索框更多空间 */
margin-bottom: 24rpx; /* 与列表项间距保持一致24rpx */
background-color: #F8F8FA;
border-radius: 8rpx;
border: 1px solid #EFEFF2;
overflow-x: auto;
min-height: 64rpx; /* 设置最小高度,确保搜索区域不被挤压 */
box-sizing: border-box;
flex-shrink: 0; /* 防止被压缩 */
}
.toolbar-total.data-v-0c664d9c {
font-size: 24rpx;
color: #666;
white-space: nowrap;
flex-shrink: 0;
margin-right: 8rpx; /* 增加右边距,与搜索框保持距离 */
line-height: 1.2;
padding: 0 4rpx; /* 增加左右内边距 */
}
.toolbar-input.data-v-0c664d9c {
flex: 1;
min-width: 120rpx; /* 增加最小宽度,避免被挤压变形 */
max-width: 200rpx; /* 设置最大宽度,保持合理比例 */
height: 56rpx; /* 稍微增加高度,提升可用性 */
line-height: 56rpx;
background-color: #F5F6FA;
border-radius: 8rpx;
padding: 0 12rpx; /* 增加左右内边距 */
font-size: 24rpx;
border: 1px solid transparent;
box-sizing: border-box;
flex-shrink: 1; /* 允许适当收缩,但保持最小宽度 */
}
.toolbar-actions.data-v-0c664d9c {
display: flex;
align-items: center;
margin-left: auto;
flex-shrink: 0;
gap: 8rpx; /* 增加按钮之间的间距 */
}
.toolbar-btn.data-v-0c664d9c {
padding: 0 12rpx; /* 增加左右内边距 */
height: 56rpx; /* 与输入框高度保持一致 */
min-width: 56rpx;
color: #2A68FF;
display: flex;
align-items: center;
justify-content: center;
gap: 4rpx; /* 增加图标和文字之间的间距 */
font-size: 24rpx;
font-weight: 400;
line-height: 1;
box-sizing: border-box;
}
.toolbar-btn text.data-v-0c664d9c {
color: #2A68FF;
}
.service-list.data-v-0c664d9c {
/* 使用flex填充剩余空间 */
flex: 1;
background-color: transparent;
box-sizing: border-box;
overflow-y: auto;
}
.service-item.data-v-0c664d9c {
width: 100%;
box-sizing: border-box;
background-color: #FFFFFF;
border-radius: 16rpx;
padding: 32rpx;
margin-bottom: 24rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
position: relative;
}
.service-header.data-v-0c664d9c {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16rpx;
position: relative;
}
.service-title.data-v-0c664d9c {
font-size: 32rpx;
font-weight: 500;
color: #333;
}
.service-menu-button.data-v-0c664d9c {
width: 48rpx;
height: 48rpx;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.service-action-menu.data-v-0c664d9c {
position: absolute;
top: 60rpx;
right: 32rpx;
width: 160rpx;
background-color: #FFFFFF;
border-radius: 12rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.15);
z-index: 100;
overflow: hidden;
margin-right: 0;
}
.service-action-menu-item.data-v-0c664d9c {
padding: 24rpx 32rpx;
font-size: 28rpx;
color: #333;
text-align: center;
background-color: #FFFFFF;
}
.service-action-menu-item.data-v-0c664d9c:active {
background-color: #F5F5F5;
}
.service-action-menu-item--danger.data-v-0c664d9c {
color: #FF5722;
}
.service-action-menu-divider.data-v-0c664d9c {
height: 1rpx;
background-color: #E0E0E0;
margin: 0 16rpx;
}
.service-action-menu-mask.data-v-0c664d9c {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: transparent;
z-index: 99;
}
.service-meta.data-v-0c664d9c {
display: flex;
align-items: center;
margin-bottom: 16rpx;
}
.service-date.data-v-0c664d9c {
font-size: 24rpx;
color: #999;
margin-right: 16rpx;
}
.service-duration.data-v-0c664d9c {
font-size: 24rpx;
color: #999;
}
.service-content.data-v-0c664d9c {
margin-bottom: 24rpx;
}
.service-desc.data-v-0c664d9c {
font-size: 28rpx;
color: #666;
line-height: 1.6;
}
.service-customer.data-v-0c664d9c {
display: flex;
align-items: center;
margin-bottom: 16rpx;
}
.customer-avatar.data-v-0c664d9c {
width: 64rpx;
height: 64rpx;
background-color: #2196F3;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16rpx;
}
.avatar-text.data-v-0c664d9c {
font-size: 32rpx;
color: #FFFFFF;
font-weight: 500;
}
.customer-name.data-v-0c664d9c {
font-size: 28rpx;
color: #333;
}
.ai-tag.data-v-0c664d9c {
padding-top: 16rpx;
border-top: 1px solid #F0F0F0;
}
.ai-tag text.data-v-0c664d9c {
font-size: 24rpx;
color: #999;
}