【招生小程序】 优化# 主账号-团队:数据简报移除新增客户,添加线索未领取数量

master
kaeery 2025-03-07 21:40:29 +08:00
parent d06d3f7c78
commit 1d966f3d10
7 changed files with 75 additions and 58 deletions

View File

@ -31,7 +31,7 @@
<text class="text-muted w-[128rpx]">跟进时间</text> <text class="text-muted w-[128rpx]">跟进时间</text>
<text class="flex-1">{{ item.followUpTime }}</text> <text class="flex-1">{{ item.followUpTime }}</text>
</view> </view>
<view class="flex gap-[20rpx] mb-[16rpx]"> <view class="flex gap-[20rpx] mb-[16rpx]" v-if="item.recruitTeacherId !== null">
<text class="text-muted w-[128rpx]">招生老师</text> <text class="text-muted w-[128rpx]">招生老师</text>
<text class="flex-1">{{ item.recruitTeacherName }}</text> <text class="flex-1">{{ item.recruitTeacherName }}</text>
</view> </view>
@ -39,17 +39,33 @@
<text class="text-muted w-[128rpx]">领取时间</text> <text class="text-muted w-[128rpx]">领取时间</text>
<text class="flex-1">{{ item.getTime }}</text> <text class="flex-1">{{ item.getTime }}</text>
</view> </view>
<view class="flex gap-[20rpx] mb-[16rpx]"> <view
class="flex gap-[20rpx] mb-[16rpx]"
v-if="
(item.situation == converStatusEnum.ADD_RELATION ||
item.situation == converStatusEnum.EXCEPTION) &&
item.state !== null
"
>
<text class="text-muted w-[128rpx]">状态</text> <text class="text-muted w-[128rpx]">状态</text>
<text class="flex-1 text-orage">{{ parseStateText }}</text> <text class="flex-1 text-orage">{{ parseStateText }}</text>
</view> </view>
<view class="flex gap-[20rpx] mb-[16rpx]"> <view
class="flex gap-[20rpx] mb-[16rpx]"
v-if="
item.situation == converStatusEnum.CONVERTED ||
item.situation == converStatusEnum.FAILED
"
>
<text class="text-muted w-[128rpx]">备注</text> <text class="text-muted w-[128rpx]">备注</text>
<view class="flex gap-[12rpx] flex-1"> <view class="flex gap-[12rpx] flex-1">
<text class="text-error">{{ item.remark }}</text> <text class="text-error">{{ item.remark }}</text>
</view> </view>
</view> </view>
<view class="flex gap-[20rpx] mb-[16rpx]"> <view
class="flex gap-[20rpx] mb-[16rpx]"
v-if="item.situation == converStatusEnum.CONVERTED"
>
<text class="text-muted w-[128rpx]">成交时间</text> <text class="text-muted w-[128rpx]">成交时间</text>
<text class="flex-1">{{ item.accomplishTime }}</text> <text class="flex-1">{{ item.accomplishTime }}</text>
</view> </view>

View File

@ -115,8 +115,8 @@ const handleSubmit = () => {
} }
await apiAddCluseProgress(data) await apiAddCluseProgress(data)
toast('添加进展成功') toast('添加进展成功')
uni.navigateBack()
uni.$emit('refreshPage') uni.$emit('refreshPage')
uni.navigateBack()
} catch (error) {} } catch (error) {}
} }
}) })

View File

@ -68,7 +68,7 @@ const dateDropdownPickerRef = ref<InstanceType<typeof dateDropdownPicker>>()
const teamDropdownRef = ref<InstanceType<typeof selectDropdown>>() const teamDropdownRef = ref<InstanceType<typeof selectDropdown>>()
const orgDropdownRef = ref<InstanceType<typeof selectDropdown>>() const orgDropdownRef = ref<InstanceType<typeof selectDropdown>>()
const uDropdownRef = ref() const uDropdownRef = ref()
const defaultValue = ref() // const defaultValue = ref('') //
const organizationList = ref([]) const organizationList = ref([])
const localValue = computed({ const localValue = computed({

View File

@ -45,12 +45,12 @@ interface ICluseStatus {
const data = ref<ICluseStatus[]>([]) const data = ref<ICluseStatus[]>([])
const loading = ref(false) const loading = ref(false)
const dataMap: Record<string, string> = { const dataMap: Record<string, string> = {
unclaimedCount: '待领取', unclaimed: '待领取',
conversionCount: '转化中', conversion: '转化中',
addedCount: '已添加', added: '已添加',
abnormalCount: '异常待处理', abnormal: '异常待处理',
tradedCount: '已成交', traded: '已成交',
failCount: '已战败' fail: '已战败'
} }
const fetchData = async (payload: IForm) => { const fetchData = async (payload: IForm) => {
loading.value = true loading.value = true
@ -59,7 +59,7 @@ const fetchData = async (payload: IForm) => {
data.value = Object.keys(dataMap).map(item => { data.value = Object.keys(dataMap).map(item => {
return { return {
label: dataMap[item], label: dataMap[item],
value: result[item] * 100 || 0 value: parseFloat(result[item].replace('%', '')) || 0
} }
}) })
console.log(data.value) console.log(data.value)

View File

@ -40,12 +40,13 @@ const fetchData = async (payload: IForm) => {
const result = await convertedSuccessApi(payload) const result = await convertedSuccessApi(payload)
console.log(result) console.log(result)
data.value = result.map(item => { data.value = result.map(item => {
const { clientCount, clueCount, percentConversion } = item.leadToCustomerStatisticsVo const { transactionClient, clueCount, percentConversion } =
item.leadToCustomerStatisticsVo
return { return {
name: item.organizationName, name: item.organizationName,
children: [ children: [
{ label: '线索', value: clueCount ?? 0 + '个' }, { label: '线索', value: clueCount ?? 0 + '个' },
{ label: '成交客户', value: clientCount ?? 0 + '个' }, { label: '成交客户', value: transactionClient ?? 0 + '个' },
{ label: '转化率', value: percentConversion } { label: '转化率', value: percentConversion }
] ]
} }

View File

@ -36,7 +36,8 @@ const loading = ref(false)
const data = ref<DataItem[]>([]) const data = ref<DataItem[]>([])
const dataMap: Record<string, string> = { const dataMap: Record<string, string> = {
followUpRecord: '新增跟进', followUpRecord: '新增跟进',
newCustomer: '新增客户', // newCustomer: '',
unclaimedQuantity: '未领取',
transactionClient: '成交客户', transactionClient: '成交客户',
convertingClient: '转化中客户', convertingClient: '转化中客户',
exceptionPending: '异常待处理', exceptionPending: '异常待处理',

View File

@ -1,11 +1,11 @@
<template> <template>
<view @click="handleClick"> <view @click.stop="handleClick">
<slot>复制</slot> <slot>复制</slot>
</view> </view>
</template> </template>
<script> <script>
export default { export default {
name: "xy-copy", name: 'xy-copy',
props: { props: {
content: { content: {
type: String, type: String,
@ -23,48 +23,47 @@ export default {
emits: ['success'], emits: ['success'],
methods: { methods: {
handleClick() { handleClick() {
let content = this.content; let content = this.content
if (!content) { if (!content) {
uni.showToast({ uni.showToast({
title: '暂无', title: '暂无',
icon: 'none', icon: 'none',
duration: 2000, duration: 2000
}); })
return false; return false
} }
content = typeof content === 'string' ? content : content.toString() // content = typeof content === 'string' ? content : content.toString() //
/** /**
* 小程序端 app端的复制逻辑 * 小程序端 app端的复制逻辑
*/ */
let that = this; let that = this
uni.setClipboardData({ uni.setClipboardData({
data: content, data: content,
success: function() { success: function () {
if (that.alertStyle == 'modal') { if (that.alertStyle == 'modal') {
uni.showModal({ uni.showModal({
title: '提示', title: '提示',
content: that.notice content: that.notice
}); })
} else { } else {
uni.showToast({ uni.showToast({
title: that.notice, title: that.notice,
icon: 'none' icon: 'none'
}); })
} }
that.$emit('success'); that.$emit('success')
}, },
fail:function(){ fail: function () {
uni.showToast({ uni.showToast({
title: '复制失败', title: '复制失败',
icon: 'none', icon: 'none',
duration:3000, duration: 3000
}); })
} }
}); })
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
</style>