feat: 门店详情商户电话多号码用,分隔展示并自动拆分连写号码,icon颜色与相邻模块一致

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jacobxu666
2026-08-28 21:59:34 +08:00
co-authored by Claude Fable 5
parent 4143667d1c
commit bc2fb1715b
+34 -8
View File
@@ -20,14 +20,17 @@
</view> </view>
</view> </view>
<!-- 商户电话(取商铺客服电话字段,点击拨号) --> <!-- 商户电话(取商铺客服电话字段,多个用,分隔,点击拨号) -->
<view class="discount-section" v-if="store.servicePhone"> <view class="discount-section" v-if="servicePhoneList.length">
<view class="section-title"> <view class="section-title">
<u-icon name="phone-fill" color="#0088ff" size="34"></u-icon> <u-icon name="phone-fill" color="#1296DB" size="34"></u-icon>
<text class="discount-title">商户电话</text> <text class="discount-title">商户电话</text>
</view> </view>
<view class="discount-list"> <view class="discount-list">
<text class="discount-item phone-link" @click="callPhone">{{ store.servicePhone }}</text> <text class="discount-item">
<text v-for="(p, i) in servicePhoneList" :key="i" class="phone-link"
@click="callPhone(p)">{{ i > 0 ? ',' : '' }}{{ p }}</text>
</text>
</view> </view>
</view> </view>
@@ -76,6 +79,29 @@ export default {
discountList() { discountList() {
if (!this.store || !this.store.merchantDiscount) return [] if (!this.store || !this.store.merchantDiscount) return []
return this.store.merchantDiscount.split('\n') return this.store.merchantDiscount.split('\n')
},
// xuchao: 客服电话列表:按常见分隔符切分;无分隔符连写的多个11位手机号也自动拆开
servicePhoneList() {
if (!this.store || !this.store.servicePhone) return []
const parts = String(this.store.servicePhone).split(/[,,;;、\s\n]+/).filter(Boolean)
const out = []
parts.forEach(p => {
if (p.length > 11 && /^1[3-9]\d{9}$/.test(p.slice(0, 11))) {
let rest = p
const segs = []
while (rest.length >= 11 && /^1[3-9]\d{9}$/.test(rest.slice(0, 11))) {
segs.push(rest.slice(0, 11))
rest = rest.slice(11)
}
if (rest) segs[segs.length - 1] += rest
if (segs.length > 1) {
out.push(...segs)
return
}
}
out.push(p)
})
return out
} }
}, },
onLoad(options) { onLoad(options) {
@@ -84,10 +110,10 @@ export default {
} }
}, },
methods: { methods: {
// xuchao: 点击商户电话唤起拨号 // xuchao: 点击某个商户电话唤起拨号(多个号码时逐个可点)
callPhone() { callPhone(phone) {
if (!this.store || !this.store.servicePhone) return if (!phone) return
uni.makePhoneCall({ phoneNumber: String(this.store.servicePhone) }) uni.makePhoneCall({ phoneNumber: String(phone) })
}, },
loadDetail(shopId) { loadDetail(shopId) {
const loc = uni.getStorageSync('lng') && uni.getStorageSync('lat') const loc = uni.getStorageSync('lng') && uni.getStorageSync('lat')