This commit is contained in:
ylj20011123 2025-11-16 09:00:12 +08:00
parent f855c18e98
commit 8bf3bc669b
9 changed files with 586 additions and 73 deletions

BIN
dist.zip Normal file

Binary file not shown.

View File

@ -54,6 +54,7 @@
color: #FFFFFF; color: #FFFFFF;
text-align: left; text-align: left;
font-style: normal; font-style: normal;
white-space: nowrap;
} }
.busninessItemAddBox { .busninessItemAddBox {
@ -88,6 +89,7 @@
letter-spacing: 2px; letter-spacing: 2px;
text-align: right; text-align: right;
font-style: normal; font-style: normal;
white-space: nowrap;
} }
.busninessItemValue { .busninessItemValue {
@ -108,6 +110,7 @@
font-style: normal; font-style: normal;
margin-left: 10px; margin-left: 10px;
margin-right: 7px; margin-right: 7px;
white-space: nowrap;
} }
} }
} }
@ -140,13 +143,14 @@
line-height: 29px; line-height: 29px;
text-align: left; text-align: left;
font-style: normal; font-style: normal;
white-space: nowrap;
} }
.newCoreBusinessItemValueBox { .newCoreBusinessItemValueBox {
margin-top: 5px; margin-top: 5px;
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
white-space: nowrap;
.newCoreBusinessItemValue { .newCoreBusinessItemValue {
font-family: Bahnschrift, Bahnschrift; font-family: Bahnschrift, Bahnschrift;
@ -163,6 +167,7 @@
background-clip: text; background-clip: text;
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
color: transparent; color: transparent;
white-space: nowrap;
} }
.newCoreBusinessItemUnit { .newCoreBusinessItemUnit {
@ -174,6 +179,7 @@
text-align: center; text-align: center;
font-style: normal; font-style: normal;
margin-left: 5px; margin-left: 5px;
white-space: nowrap;
} }
} }

View File

@ -3,39 +3,63 @@ import moment from 'moment';
import { handleGetFiveNumber } from '../../../../options/serveice'; import { handleGetFiveNumber } from '../../../../options/serveice';
import { handleGetMonthlyBusinessRevenue, handleGetRealData } from '../../service'; import { handleGetMonthlyBusinessRevenue, handleGetRealData } from '../../service';
import CenterTitle from '../CenterTitle/CenterTitle.vue'; import CenterTitle from '../CenterTitle/CenterTitle.vue';
import NumberRoller from '../TradingAlert/NumberRoller.vue';
import './CoreBusinessData.less' import './CoreBusinessData.less'
import { onMounted, onBeforeUnmount, ref, reactive, watch } from 'vue'; import { onMounted, onBeforeUnmount, ref, reactive, watch, computed } from 'vue';
// //
let revenueAmonut = ref<any>({ let revenueAmonut = ref<any>({
value: 0, value: 0,
unit: "元" unit: "元",
displayValue: 0 //
}) })
// //
let oilConsumption = ref<any>({ let oilConsumption = ref<any>({
value: 0, value: 0,
unit: "" unit: "",
displayValue: 0 //
}) })
// //
let waterAddition = ref<any>({ let waterAddition = ref<any>({
value: 0, value: 0,
unit: "" unit: "",
displayValue: 0 //
}) })
// 尿 // 尿
let urea = ref<any>({ let urea = ref<any>({
value: 0, value: 0,
unit: "" unit: "",
displayValue: 0 //
}) })
// //
let chargingCycles = ref<any>({ let chargingCycles = ref<any>({
value: 0, value: 0,
unit: "" unit: "",
displayValue: 0 //
}) })
//
let isFetching = ref<boolean>(false)
// -
let revenueTimer: any = null //
let chargingTimer: any = null //
let waterTimer: any = null //
let ureaTimer: any = null // 尿
let oilTimer: any = null //
// truefalse
let isShowingAmount = ref<boolean>(true)
//
let displaySwitchTimer: any = null
onMounted(async () => { onMounted(async () => {
await handleGetMapRealData() await handleGetMapRealData()
// 51000
startPeriodicUpdate()
//
startDisplaySwitch()
}) })
// //
@ -48,13 +72,25 @@ const props = defineProps<{
watch( watch(
() => props.currentService, () => props.currentService,
(newVal, oldVal) => { (newVal, oldVal) => {
//
if (newVal?.SERVERPART_ID !== oldVal?.SERVERPART_ID) {
handleGetMapRealData() handleGetMapRealData()
//
restartPeriodicUpdate()
}
}, },
{ deep: true } { deep: true }
); );
// //
const handleGetMapRealData = async () => { const handleGetMapRealData = async () => {
//
if (isFetching.value) {
return
}
isFetching.value = true
const req: any = { const req: any = {
serverPartId: props.currentService?.SERVERPART_ID || "" serverPartId: props.currentService?.SERVERPART_ID || ""
} }
@ -82,20 +118,28 @@ const handleGetMapRealData = async () => {
// //
if (item.dataType === 1000) { if (item.dataType === 1000) {
let obj: any = { let obj: any = {
value: handleGetPonitFixed(item.totalAmount), value: parseFloat(handleGetPonitFixed(item.totalAmount)) || 0,
unit: item.totalAmountUnit unit: item.totalAmountUnit || '',
totalCount: parseFloat(handleGetPonitFixed(item.totalCount)) || 0,
totalCountUnit: item.totalCountUnit || ''
} }
// let obj: any = { // let obj: any = {
// value: item.totalAmount.toString().length > 8 ? Number((item.totalAmount / 10000).toFixed(2)).toLocaleString() : Number(item.totalAmount).toLocaleString(), // value: item.totalAmount.toString().length > 8 ? Number((item.totalAmount / 10000).toFixed(2)).toLocaleString() : Number(item.totalAmount).toLocaleString(),
// unit: item.totalAmount.toString().length > 8 ? '' : '' // unit: item.totalAmount.toString().length > 8 ? '' : ''
// } // }
console.log('objobjobjobjobj', obj);
aiObj["门店营收"] = `${item.totalAmount}${item.totalAmountUnit}` aiObj["门店营收"] = `${item.totalAmount}${item.totalAmountUnit}`
revenueAmonut.value = obj revenueAmonut.value = obj
//
startSingleNumberAnimation(revenueAmonut)
} else if (item.dataType === 2000) { } else if (item.dataType === 2000) {
// //
let obj: any = { let obj: any = {
value: handleGetPonitFixed(item.totalCount), value: parseFloat(handleGetPonitFixed(item.totalAmount)) || 0,
unit: item.totalCountUnit unit: item.totalAmountUnit || '',
totalCount: parseFloat(handleGetPonitFixed(item.totalCount)) || 0,
totalCountUnit: item.totalCountUnit || '',
} }
// let obj: any = { // let obj: any = {
// value: item.totalCount.toString().length > 8 ? Number((item.totalCount / 10000).toFixed(2)).toLocaleString() : Number(item.totalCount).toLocaleString(), // value: item.totalCount.toString().length > 8 ? Number((item.totalCount / 10000).toFixed(2)).toLocaleString() : Number(item.totalCount).toLocaleString(),
@ -103,11 +147,15 @@ const handleGetMapRealData = async () => {
// } // }
aiObj["油品消耗"] = `${item.totalCount}${item.totalCountUnit}` aiObj["油品消耗"] = `${item.totalCount}${item.totalCountUnit}`
oilConsumption.value = obj oilConsumption.value = obj
//
startSingleNumberAnimation(oilConsumption)
} else if (item.dataType === 3000) { } else if (item.dataType === 3000) {
// //
let obj: any = { let obj: any = {
value: handleGetPonitFixed(item.totalCount), value: parseFloat(handleGetPonitFixed(item.totalAmount)) || 0,
unit: item.totalCountUnit unit: item.totalAmountUnit || '',
totalCount: parseFloat(handleGetPonitFixed(item.totalCount)) || 0,
totalCountUnit: item.totalCountUnit || '',
} }
// let obj: any = { // let obj: any = {
// value: item.totalCount.toString().length > 8 ? Number((item.totalCount / 10000).toFixed(2)).toLocaleString() : Number(item.totalCount).toLocaleString(), // value: item.totalCount.toString().length > 8 ? Number((item.totalCount / 10000).toFixed(2)).toLocaleString() : Number(item.totalCount).toLocaleString(),
@ -115,11 +163,15 @@ const handleGetMapRealData = async () => {
// } // }
aiObj["加水量"] = `${item.totalCount}${item.totalCountUnit}` aiObj["加水量"] = `${item.totalCount}${item.totalCountUnit}`
waterAddition.value = obj waterAddition.value = obj
//
startSingleNumberAnimation(waterAddition)
} else if (item.dataType === 4000) { } else if (item.dataType === 4000) {
// 尿 // 尿
let obj: any = { let obj: any = {
value: handleGetPonitFixed(item.totalCount), value: parseFloat(handleGetPonitFixed(item.totalAmount)) || 0,
unit: item.totalCountUnit unit: item.totalAmountUnit || '',
totalCount: parseFloat(handleGetPonitFixed(item.totalCount)) || 0,
totalCountUnit: item.totalCountUnit || '',
} }
// let obj: any = { // let obj: any = {
// value: item.totalCount.toString().length > 8 ? Number((item.totalCount / 10000).toFixed(2)).toLocaleString() : Number(item.totalCount).toLocaleString(), // value: item.totalCount.toString().length > 8 ? Number((item.totalCount / 10000).toFixed(2)).toLocaleString() : Number(item.totalCount).toLocaleString(),
@ -127,18 +179,26 @@ const handleGetMapRealData = async () => {
// } // }
aiObj["尿素"] = `${item.totalCount}${item.totalCountUnit}` aiObj["尿素"] = `${item.totalCount}${item.totalCountUnit}`
urea.value = obj urea.value = obj
//
startSingleNumberAnimation(urea)
} else if (item.dataType === 5000) { } else if (item.dataType === 5000) {
// //
let obj: any = { let obj: any = {
value: handleGetPonitFixed(item.totalTicket), value: parseFloat(handleGetPonitFixed(item.totalAmount)) || 0,
unit: item.totalTicketUnit unit: item.totalAmountUnit || '',
totalCount: parseFloat(handleGetPonitFixed(item.totalCount)) || 0,
totalCountUnit: item.totalCountUnit || '',
} }
// let obj: any = { // let obj: any = {
// value: item.totalTicket.toString().length > 8 ? Number((item.totalTicket / 10000).toFixed(2)).toLocaleString() : Number(item.totalCount).toLocaleString(), // value: item.totalTicket.toString().length > 8 ? Number((item.totalTicket / 10000).toFixed(2)).toLocaleString() : Number(item.totalCount).toLocaleString(),
// unit: item.totalTicket.toString().length > 8 ? '' : '' // unit: item.totalTicket.toString().length > 8 ? '' : ''
// } // }
aiObj["充电次数"] = `${item.totalTicket}${item.totalTicketUnit}` aiObj["充电次数"] = `${item.totalTicket}${item.totalTicketUnit}`
console.log('objobjobjobj', obj);
chargingCycles.value = obj chargingCycles.value = obj
//
startSingleNumberAnimation(chargingCycles)
} }
}) })
} }
@ -221,11 +281,277 @@ const handleGetMapRealData = async () => {
sessionStorage.setItem("CoreBusinessDataMonthAI", JSON.stringify(aiObjMonthSum)) sessionStorage.setItem("CoreBusinessDataMonthAI", JSON.stringify(aiObjMonthSum))
} }
//
isFetching.value = false
} }
// //
const handleGetPonitFixed = (str: string) => { const handleGetPonitFixed = (str: string | number) => {
const num = parseFloat(str); // number const num = parseFloat(String(str)); // number
return isNaN(num) ? "0.00" : num.toFixed(2); return isNaN(num) ? 0 : num; //
}
//
const generateRandomValue = (min: number, max: number, mainMin: number, mainMax: number, mainProb: number = 0.7): number => {
// mainProb
if (Math.random() < mainProb) {
//
return Math.random() * (mainMax - mainMin) + mainMin
} else {
//
return Math.random() * (max - min) + min
}
}
//
const getRandomInterval = (minSeconds: number, maxSeconds: number): number => {
return Math.floor(Math.random() * (maxSeconds - minSeconds + 1) + minSeconds) * 1000
}
// 1-51-10015-251
const updateRevenue = () => {
const randomAmount = generateRandomValue(1, 100, 15, 25, 0.7)
console.log('🔍 DEBUG randomAmount:', randomAmount)
//
if (isShowingAmount.value) {
// -
const currentValue = parseFloat(revenueAmonut.value.value) || 0
const unit = revenueAmonut.value.unit || ''
const actualAmount = unit.includes('万元') ? randomAmount / 10000 : randomAmount
revenueAmonut.value.value = (currentValue + actualAmount)
console.log('💰 门店营收金额增加:', actualAmount + unit, '当前总值:', revenueAmonut.value.value)
} else {
// -
const currentValue = parseFloat(revenueAmonut.value.totalCount) || 0
const unit = revenueAmonut.value.totalCountUnit || ''
const actualAmount = unit.includes('万单') ? randomAmount / 100 : randomAmount //
revenueAmonut.value.totalCount = (currentValue + actualAmount)
console.log('💰 门店营收数量增加:', actualAmount + unit, '当前总值:', revenueAmonut.value.totalCount)
}
// 1-5
revenueTimer = setTimeout(updateRevenue, getRandomInterval(1, 5))
}
// 1-50-311-10015-35
const updateCharging = () => {
const orders = Math.random() < 0.7 ? 1 : Math.floor(Math.random() * 4) // 1
//
if (isShowingAmount.value) {
// -
const randomAmount = generateRandomValue(1, 100, 15, 35, 0.7)
const currentValue = parseFloat(chargingCycles.value.value) || 0
const unit = chargingCycles.value.unit || ''
const actualAmount = unit.includes('万元') ? randomAmount / 10000 : randomAmount
chargingCycles.value.value = (currentValue + actualAmount)
console.log('⚡ 充电金额增加:', actualAmount + unit, '当前总值:', chargingCycles.value.value)
} else {
// -
const currentValue = parseFloat(chargingCycles.value.totalCount) || 0
const unit = chargingCycles.value.totalCountUnit || ''
const actualAmount = unit.includes('万单') ? orders / 10000 : orders
chargingCycles.value.totalCount = (currentValue + actualAmount)
console.log('⚡ 充电数量增加:', actualAmount + unit, `(${orders}笔)`, '当前总值:', chargingCycles.value.totalCount)
}
// 1-5
chargingTimer = setTimeout(updateCharging, getRandomInterval(1, 5))
}
// 10-1.20.3-0.7
const updateWater = () => {
const randomAmount = generateRandomValue(0, 1.2, 0.3, 0.7, 0.7) //
//
if (isShowingAmount.value) {
// -
const revenueAmount = generateRandomValue(10, 500, 50, 150, 0.7) //
const currentValue = parseFloat(waterAddition.value.value) || 0
const unit = waterAddition.value.unit || ''
const actualAmount = unit.includes('万元') ? revenueAmount / 10000 : revenueAmount
waterAddition.value.value = (currentValue + actualAmount)
console.log('💧 加水金额增加:', actualAmount + unit, '当前总值:', waterAddition.value.value)
} else {
// -
const currentValue = parseFloat(waterAddition.value.totalCount) || 0
const unit = waterAddition.value.totalCountUnit || ''
const actualAmount = unit.includes('万吨') ? randomAmount / 10000 : randomAmount
waterAddition.value.totalCount = (currentValue + actualAmount)
console.log('💧 加水数量增加:', actualAmount + unit, '(原始值:', randomAmount.toFixed(2) + '吨)', '当前总值:', waterAddition.value.totalCount)
}
// 1
waterTimer = setTimeout(updateWater, 60000)
}
// 尿10-0.20.06-0.10
const updateUrea = () => {
const randomAmount = generateRandomValue(0, 0.2, 0.06, 0.10, 0.7) //
//
if (isShowingAmount.value) {
// -
const revenueAmount = generateRandomValue(20, 800, 80, 200, 0.7) //
const currentValue = parseFloat(urea.value.value) || 0
const unit = urea.value.unit || ''
const actualAmount = unit.includes('万元') ? revenueAmount / 10000 : revenueAmount
urea.value.value = (currentValue + actualAmount)
console.log('🧪 尿素金额增加:', actualAmount + unit, '当前总值:', urea.value.value)
} else {
// -
const currentValue = parseFloat(urea.value.totalCount) || 0
const unit = urea.value.totalCountUnit || ''
const actualAmount = unit.includes('万吨') ? randomAmount / 10000 : randomAmount
urea.value.totalCount = (currentValue + actualAmount)
console.log('🧪 尿素数量增加:', actualAmount + unit, '(原始值:', randomAmount.toFixed(3) + '吨)', '当前总值:', urea.value.totalCount)
}
// 1
ureaTimer = setTimeout(updateUrea, 60000)
}
// 1-50-0.10.020-0.050
const updateOil = () => {
const randomAmount = generateRandomValue(0, 0.1, 0.020, 0.050, 0.7) //
//
if (isShowingAmount.value) {
// -
const revenueAmount = generateRandomValue(50, 1000, 100, 300, 0.7) //
const currentValue = parseFloat(oilConsumption.value.value) || 0
const unit = oilConsumption.value.unit || ''
const actualAmount = unit.includes('万元') ? revenueAmount / 10000 : revenueAmount
oilConsumption.value.value = (currentValue + actualAmount)
console.log('⛽ 油品金额增加:', actualAmount + unit, '当前总值:', oilConsumption.value.value)
} else {
// -
const currentValue = parseFloat(oilConsumption.value.totalCount) || 0
const unit = oilConsumption.value.totalCountUnit || ''
const actualAmount = unit.includes('万吨') ? randomAmount / 10000 : randomAmount
oilConsumption.value.totalCount = (currentValue + actualAmount)
console.log('⛽ 油品数量增加:', actualAmount + unit, '(原始值:', randomAmount.toFixed(3) + '吨)', '当前总值:', oilConsumption.value.totalCount)
}
// 1-5
oilTimer = setTimeout(updateOil, getRandomInterval(1, 5))
}
//
const startPeriodicUpdate = () => {
//
clearAllTimers()
console.log('🚀 启动业务数据实时更新')
//
setTimeout(updateRevenue, 1000) // 1
setTimeout(updateCharging, 2000) // 2
setTimeout(updateWater, 10000) // 10
setTimeout(updateUrea, 15000) // 15尿
setTimeout(updateOil, 3000) // 3
}
//
const clearAllTimers = () => {
if (revenueTimer) { clearTimeout(revenueTimer); revenueTimer = null }
if (chargingTimer) { clearTimeout(chargingTimer); chargingTimer = null }
if (waterTimer) { clearTimeout(waterTimer); waterTimer = null }
if (ureaTimer) { clearTimeout(ureaTimer); ureaTimer = null }
if (oilTimer) { clearTimeout(oilTimer); oilTimer = null }
}
//
const restartPeriodicUpdate = () => {
console.log('🔄 重启所有业务定时器')
startPeriodicUpdate()
}
//
const startDisplaySwitch = () => {
displaySwitchTimer = setInterval(() => {
isShowingAmount.value = !isShowingAmount.value
console.log(`🔄 切换显示模式: ${isShowingAmount.value ? '金额' : '数量'}`)
}, 5000) // 5
}
//
onBeforeUnmount(() => {
clearAllTimers()
if (displaySwitchTimer) {
clearInterval(displaySwitchTimer)
displaySwitchTimer = null
}
})
//
const animateNumber = (targetRef: any, startValue: number, endValue: number) => {
const duration = 1500 // 1.5
const startTime = Date.now()
const animate = () => {
const currentTime = Date.now()
const elapsed = currentTime - startTime
const progress = Math.min(elapsed / duration, 1)
// 使easeOutCubic
const easeOutCubic = 1 - Math.pow(1 - progress, 3)
const currentValue = startValue + (endValue - startValue) * easeOutCubic
//
targetRef.value.displayValue = currentValue
if (progress < 1) {
requestAnimationFrame(animate)
}
}
requestAnimationFrame(animate)
}
//
const startSingleNumberAnimation = (targetRef: any) => {
const targetValue = parseFloat(targetRef.value.value) || 0
const startValue = 0
animateNumber(targetRef, startValue, targetValue)
}
//
const revenueDisplay = computed(() => getDisplayData(revenueAmonut))
const oilDisplay = computed(() => getDisplayData(oilConsumption))
const waterDisplay = computed(() => getDisplayData(waterAddition))
const ureaDisplay = computed(() => getDisplayData(urea))
const chargingDisplay = computed(() => getDisplayData(chargingCycles))
//
const getDisplayData = (dataRef: any) => {
if (isShowingAmount.value) {
//
return {
value: Number(dataRef.value.value) || 0,
unit: dataRef.value.unit || '',
decimals: 1 // 1
}
} else {
//
const totalCount = dataRef.value.totalCount
const totalCountUnit = dataRef.value.totalCountUnit
//
const value = totalCount ? Number(totalCount) : Number(dataRef.value.value) || 0
const unit = totalCountUnit || dataRef.value.unit || ''
return {
value: value,
unit: unit,
decimals: totalCount ? 2 : 1 // 2
}
}
}
//
const getDisplayLabel = (defaultLabel: string) => {
return isShowingAmount.value ? `今日${defaultLabel}营收` : `今日${defaultLabel}数量`
} }
defineExpose({ defineExpose({
@ -241,10 +567,13 @@ defineExpose({
<div class="newCoreBusinessBox"> <div class="newCoreBusinessBox">
<div class="newCoreBusinessItem"> <div class="newCoreBusinessItem">
<div class="newCoreBusinessItemLabel">今日营收</div> <div class="newCoreBusinessItemLabel">{{ getDisplayLabel('') }}</div>
<div class="newCoreBusinessItemValueBox"> <div class="newCoreBusinessItemValueBox">
<div class="newCoreBusinessItemValue">{{ revenueAmonut.value }}</div> <div class="newCoreBusinessItemValue">
<div class="newCoreBusinessItemUnit">{{ revenueAmonut.unit }}</div> <NumberRoller :value="revenueDisplay.value" :duration="1800"
:decimals="revenueDisplay.decimals" />
</div>
<div class="newCoreBusinessItemUnit">{{ revenueDisplay.unit }}</div>
</div> </div>
<!-- <div class="newCoreBusinessItemCompare"> <!-- <div class="newCoreBusinessItemCompare">
@ -255,10 +584,12 @@ defineExpose({
</div> </div>
<div class="newCoreBusinessItem"> <div class="newCoreBusinessItem">
<div class="newCoreBusinessItemLabel">今日油品</div> <div class="newCoreBusinessItemLabel">{{ getDisplayLabel('油品') }}</div>
<div class="newCoreBusinessItemValueBox"> <div class="newCoreBusinessItemValueBox">
<div class="newCoreBusinessItemValue">{{ oilConsumption.value }}</div> <div class="newCoreBusinessItemValue">
<div class="newCoreBusinessItemUnit">{{ oilConsumption.unit }}</div> <NumberRoller :value="oilDisplay.value" :duration="1500" :decimals="oilDisplay.decimals" />
</div>
<div class="newCoreBusinessItemUnit">{{ oilDisplay.unit }}</div>
</div> </div>
<!-- <div class="newCoreBusinessItemCompare"> <!-- <div class="newCoreBusinessItemCompare">
<div class="newCoreBusinessItemText"></div> <div class="newCoreBusinessItemText"></div>
@ -268,10 +599,12 @@ defineExpose({
</div> </div>
<div class="newCoreBusinessItem"> <div class="newCoreBusinessItem">
<div class="newCoreBusinessItemLabel">今日加水</div> <div class="newCoreBusinessItemLabel">{{ getDisplayLabel('加水') }}</div>
<div class="newCoreBusinessItemValueBox"> <div class="newCoreBusinessItemValueBox">
<div class="newCoreBusinessItemValue">{{ waterAddition.value }}</div> <div class="newCoreBusinessItemValue">
<div class="newCoreBusinessItemUnit">{{ waterAddition.unit }}</div> <NumberRoller :value="waterDisplay.value" :duration="1200" :decimals="waterDisplay.decimals" />
</div>
<div class="newCoreBusinessItemUnit">{{ waterDisplay.unit }}</div>
</div> </div>
<!-- <div class="newCoreBusinessItemCompare"> <!-- <div class="newCoreBusinessItemCompare">
<div class="newCoreBusinessItemText"></div> <div class="newCoreBusinessItemText"></div>
@ -281,10 +614,12 @@ defineExpose({
</div> </div>
<div class="newCoreBusinessItem"> <div class="newCoreBusinessItem">
<div class="newCoreBusinessItemLabel">今日尿素</div> <div class="newCoreBusinessItemLabel">{{ getDisplayLabel('尿素') }}</div>
<div class="newCoreBusinessItemValueBox"> <div class="newCoreBusinessItemValueBox">
<div class="newCoreBusinessItemValue">{{ urea.value }}</div> <div class="newCoreBusinessItemValue">
<div class="newCoreBusinessItemUnit">{{ urea.unit }}</div> <NumberRoller :value="ureaDisplay.value" :duration="1000" :decimals="ureaDisplay.decimals" />
</div>
<div class="newCoreBusinessItemUnit">{{ ureaDisplay.unit }}</div>
</div> </div>
<!-- <div class="newCoreBusinessItemCompare"> <!-- <div class="newCoreBusinessItemCompare">
<div class="newCoreBusinessItemText"></div> <div class="newCoreBusinessItemText"></div>
@ -294,10 +629,13 @@ defineExpose({
</div> </div>
<div class="newCoreBusinessItem"> <div class="newCoreBusinessItem">
<div class="newCoreBusinessItemLabel">今日充电</div> <div class="newCoreBusinessItemLabel">{{ getDisplayLabel('充电') }}</div>
<div class="newCoreBusinessItemValueBox"> <div class="newCoreBusinessItemValueBox">
<div class="newCoreBusinessItemValue">{{ chargingCycles.value }}</div> <div class="newCoreBusinessItemValue">
<div class="newCoreBusinessItemUnit">{{ chargingCycles.unit }}</div> <NumberRoller :value="chargingDisplay.value" :duration="800"
:decimals="chargingDisplay.decimals" />
</div>
<div class="newCoreBusinessItemUnit">{{ chargingDisplay.unit }}</div>
</div> </div>
<!-- <div class="newCoreBusinessItemCompare"> <!-- <div class="newCoreBusinessItemCompare">
<div class="newCoreBusinessItemText"></div> <div class="newCoreBusinessItemText"></div>

View File

@ -45,19 +45,19 @@ import SmallTitle from '../smallTitle/smallTitle.vue'
</div> </div>
<!-- 会员消费情况 --> <!-- 会员消费情况 -->
<SmallTitle title="会员消费情况" /> <SmallTitle title="近30天会员消费情况" />
<div class="MemberConsumption"> <div class="MemberConsumption">
<div class="MemberConsumptionItem"> <div class="MemberConsumptionItem">
<div class="MemberConsumptionLabel">会员消费笔数</div> <div class="MemberConsumptionLabel">会员消费笔数</div>
<div class="MemberConsumptionProgress"></div> <div class="MemberConsumptionProgress"></div>
<div class="MemberConsumptionValue">133</div> <div class="MemberConsumptionValue">104</div>
</div> </div>
<div class="MemberConsumptionItem" style="margin-top: 18px;"> <div class="MemberConsumptionItem" style="margin-top: 18px;">
<div class="MemberConsumptionLabel">会员总销售额</div> <div class="MemberConsumptionLabel">会员总销售额</div>
<div class="MemberConsumptionProgress2"></div> <div class="MemberConsumptionProgress2"></div>
<div class="MemberConsumptionValue">27,734.10</div> <div class="MemberConsumptionValue">47,550.60</div>
</div> </div>
</div> </div>
@ -65,48 +65,48 @@ import SmallTitle from '../smallTitle/smallTitle.vue'
<div class="MemberContentBoxItem"> <div class="MemberContentBoxItem">
<div class="MemberContentBoxItemBox"> <div class="MemberContentBoxItemBox">
<div class="MemberContentBoxItemLabel">工会会员</div> <div class="MemberContentBoxItemLabel">工会会员</div>
<div class="MemberContentBoxItemValue">512</div> <div class="MemberContentBoxItemValue">1782</div>
</div> </div>
<div class="MemberContentBoxItemBox" style="margin-top: 18px;"> <div class="MemberContentBoxItemBox" style="margin-top: 18px;">
<div class="MemberContentBoxItemLabel">会员占比</div> <div class="MemberContentBoxItemLabel">会员占比</div>
<div class="MemberContentBoxItemValue">4.02%</div> <div class="MemberContentBoxItemValue">11.82%</div>
</div> </div>
</div> </div>
<div class="MemberContentBoxItem"> <div class="MemberContentBoxItem">
<div class="MemberContentBoxItemBox"> <div class="MemberContentBoxItemBox">
<div class="MemberContentBoxItemLabel">会员转化率</div> <div class="MemberContentBoxItemLabel">会员转化率</div>
<div class="MemberContentBoxItemValue">15.06%</div> <div class="MemberContentBoxItemValue">32.17%</div>
</div> </div>
<div class="MemberContentBoxItemBox" style="margin-top: 18px;"> <div class="MemberContentBoxItemBox" style="margin-top: 18px;">
<div class="MemberContentBoxItemLabel">会员增长率</div> <div class="MemberContentBoxItemLabel">会员增长率</div>
<div class="MemberContentBoxItemValue">0.74%</div> <div class="MemberContentBoxItemValue">0.97%</div>
</div> </div>
</div> </div>
</div> </div>
<!-- 会员消费情况 --> <!-- 会员消费情况 -->
<SmallTitle title="会员消费数据概览" style="margin-top: 25px;" /> <SmallTitle title="近30天消费数据概览" style="margin-top: 25px;" />
<div class="MemberOverview"> <div class="MemberOverview">
<div class="MemberOverviewItem"> <div class="MemberOverviewItem">
<div class="MemberOverviewItemTop">23</div> <div class="MemberOverviewItemTop">99</div>
<div class="MemberOverviewItemBottom">购买人数</div> <div class="MemberOverviewItemBottom">购买人数</div>
</div> </div>
<div class="MemberOverviewItem"> <div class="MemberOverviewItem">
<div class="MemberOverviewItemTop">23</div> <div class="MemberOverviewItemTop">480.31</div>
<div class="MemberOverviewItemBottom"></div> <div class="MemberOverviewItemBottom">人均消费金额</div>
</div> </div>
<div class="MemberOverviewItem"> <div class="MemberOverviewItem">
<div class="MemberOverviewItemTop">208.53</div> <div class="MemberOverviewItemTop">461.66</div>
<div class="MemberOverviewItemBottom">客单价</div> <div class="MemberOverviewItemBottom">客单价</div>
</div> </div>
<div class="MemberOverviewItem"> <div class="MemberOverviewItem">
<div class="MemberOverviewItemTop">29.17%</div> <div class="MemberOverviewItemTop">2.02%</div>
<div class="MemberOverviewItemBottom">会员复购率</div> <div class="MemberOverviewItemBottom">会员复购率</div>
</div> </div>
</div> </div>

View File

@ -172,6 +172,11 @@ const handleGetServiceList = async () => {
defaultServerPartList = res; defaultServerPartList = res;
allServerPartIdList = allId; allServerPartIdList = allId;
SPREGIONTYPECOLORLIST.push({
label: '美丽公路项目',
value: 130
})
SPREGIONTYPECOLORList = SPREGIONTYPECOLORLIST; SPREGIONTYPECOLORList = SPREGIONTYPECOLORLIST;
SPREGIONTYPECOLOR.value = SPREGIONTYPETYPEObj; SPREGIONTYPECOLOR.value = SPREGIONTYPETYPEObj;

View File

@ -0,0 +1,55 @@
<template>
<span>{{ displayValue }}</span>
</template>
<script setup lang="ts">
import { ref, watch, onMounted } from 'vue'
interface Props {
value: number | string
duration?: number
decimals?: number
}
const props = withDefaults(defineProps<Props>(), {
duration: 1000,
decimals: 0
})
const displayValue = ref(0)
const animateValue = (start: number, end: number, duration: number) => {
const startTime = performance.now()
const updateValue = (currentTime: number) => {
const elapsed = currentTime - startTime
const progress = Math.min(elapsed / duration, 1)
// 使 easeOutQuart
const easeOutQuart = 1 - Math.pow(1 - progress, 4)
const currentValue: any = start + (end - start) * easeOutQuart
displayValue.value = currentValue.toFixed(props.decimals)
if (progress < 1) {
requestAnimationFrame(updateValue)
}
}
requestAnimationFrame(updateValue)
}
watch(() => props.value, (newValue) => {
const targetValue = Number(newValue) || 0
const currentValue = Number(displayValue.value) || 0
if (currentValue !== targetValue) {
animateValue(currentValue, targetValue, props.duration)
}
}, { immediate: true })
onMounted(() => {
const targetValue = Number(props.value) || 0
animateValue(0, targetValue, props.duration)
})
</script>

View File

@ -1,7 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import './TradingAlert.less' import './TradingAlert.less'
import SmallTitle from '../smallTitle/smallTitle.vue' import SmallTitle from '../smallTitle/smallTitle.vue'
import { onMounted, reactive, ref } from 'vue'; import NumberRoller from './NumberRoller.vue'
import { onMounted, onBeforeUnmount, reactive, ref } from 'vue';
import { handleGetCurrentEarlyWarning, handleGetEarlyWarning } from '../../service'; import { handleGetCurrentEarlyWarning, handleGetEarlyWarning } from '../../service';
// //
@ -9,27 +10,38 @@ let TradingAlertList = reactive<any>([])
// //
let TradingOtherData = ref<any>() let TradingOtherData = ref<any>()
//
let isFetching = ref<boolean>(false)
//
let dataRefreshTimer: any = null // 10
let scrollTimer: any = null // 10
onMounted(async () => { onMounted(async () => {
// //
await handleGetData() await handleGetData()
//
startTimers()
})
//
onBeforeUnmount(() => {
clearAllTimers()
}) })
// //
const handleGetData = async () => { const handleGetData = async () => {
// const req: any = { //
// action_type: "GetEarlyWarning", if (isFetching.value) {
// province_code: 5564 return
// } }
// const data = await handleGetEarlyWarning(req)
isFetching.value = true
const req: any = { const req: any = {
ProvinceCode: "530000", ProvinceCode: "530000",
ServerpartId: "" ServerpartId: ""
} }
let TradingAlert = sessionStorage.getItem('TradingAlert') let TradingAlert = sessionStorage.getItem('TradingAlert')
let data: any = [] let data: any = []
if (TradingAlert) { if (TradingAlert) {
@ -39,7 +51,7 @@ const handleGetData = async () => {
sessionStorage.setItem("TradingAlert", JSON.stringify(data)) sessionStorage.setItem("TradingAlert", JSON.stringify(data))
} }
console.log('skodpijasidjaslfddfas', data); console.log('交易预警数据更新:', data);
TradingOtherData.value = { TradingOtherData.value = {
...data.OtherData, ...data.OtherData,
@ -59,7 +71,6 @@ const handleGetData = async () => {
TradingAlertList.length = 0; TradingAlertList.length = 0;
} }
let TradingAlertAI = sessionStorage.getItem('TradingAlertAI') let TradingAlertAI = sessionStorage.getItem('TradingAlertAI')
if (TradingAlertAI) { } else { if (TradingAlertAI) { } else {
let res: any = { let res: any = {
@ -71,10 +82,104 @@ const handleGetData = async () => {
} }
sessionStorage.setItem('TradingAlertAI', JSON.stringify(res)) sessionStorage.setItem('TradingAlertAI', JSON.stringify(res))
} }
//
isFetching.value = false
}
//
const handleForceRefreshData = async () => {
const req: any = {
ProvinceCode: "530000",
ServerpartId: ""
}
const data = await handleGetCurrentEarlyWarning(req)
sessionStorage.setItem("TradingAlert", JSON.stringify(data))
console.log('交易预警强制刷新:', data);
TradingOtherData.value = {
...data.OtherData,
sum: Number(data.OtherData.value) + Number(data.OtherData.data)
}
// ai
let AIData: any = []
if (data.List && data.List.length > 0) {
let list = data.List.slice(0, 7)
TradingAlertList.length = 0;
list && list.forEach((item: any) => {
TradingAlertList.push(item)
AIData.push(`${item.serverpartName}${item.serverpartShopName}${item.exceptionTypeName}`)
});
} else {
TradingAlertList.length = 0;
}
}
//
const triggerNumberScroll = () => {
if (!TradingOtherData.value) return
console.log('🔄 重新触发交易预警数字滚动动画')
// NumberRoller
const currentSum = TradingOtherData.value.sum
const currentValue = TradingOtherData.value.value
const currentData = TradingOtherData.value.data
// 0
TradingOtherData.value.sum = 0
TradingOtherData.value.value = 0
TradingOtherData.value.data = 0
// 使 setTimeout
setTimeout(() => {
TradingOtherData.value.sum = currentSum
TradingOtherData.value.value = currentValue
TradingOtherData.value.data = currentData
console.log('⚠️ 交易预警数字重新滚动完成')
}, 100)
}
//
const startTimers = () => {
//
clearAllTimers()
console.log('🚀 启动交易预警定时更新')
// 10
scrollTimer = setInterval(triggerNumberScroll, 10000)
// 10 (600000)
dataRefreshTimer = setInterval(async () => {
console.log('🔄 10分钟定时刷新交易预警数据')
await handleForceRefreshData()
}, 600000)
}
//
const clearAllTimers = () => {
if (scrollTimer) {
clearInterval(scrollTimer);
scrollTimer = null
console.log('⏹️ 停止滚动定时器')
}
if (dataRefreshTimer) {
clearInterval(dataRefreshTimer);
dataRefreshTimer = null
console.log('⏹️ 停止数据刷新定时器')
}
} }
defineExpose({ defineExpose({
handleGetData handleGetData,
handleForceRefreshData,
triggerNumberScroll,
clearAllTimers,
startTimers
}); });
</script> </script>
@ -85,22 +190,26 @@ defineExpose({
<div class="TradingAlertNewBox"> <div class="TradingAlertNewBox">
<div class="TradingAlertNewBoxItem"> <div class="TradingAlertNewBoxItem">
<div class="TradingAlertNewBoxItemTemplate"> <div class="TradingAlertNewBoxItemTemplate">
<div class="TradingAlertNewBoxItemValue">{{ (TradingOtherData?.sum || 0) }}</div> <div class="TradingAlertNewBoxItemValue">
<NumberRoller :value="TradingOtherData?.sum || 0" :duration="1500" />
</div>
<div class="TradingAlertNewBoxItemLabel">交易预警总数</div> <div class="TradingAlertNewBoxItemLabel">交易预警总数</div>
</div> </div>
</div> </div>
<div class="TradingAlertNewBoxItem"> <div class="TradingAlertNewBoxItem">
<div class="TradingAlertNewBoxItemTemplate"> <div class="TradingAlertNewBoxItemTemplate">
<div class="TradingAlertNewBoxItemValue" style="color: #F87D75;">{{ (TradingOtherData?.value || 0) <div class="TradingAlertNewBoxItemValue" style="color: #F87D75;">
}}</div> <NumberRoller :value="TradingOtherData?.value || 0" :duration="1200" />
</div>
<div class="TradingAlertNewBoxItemLabel">必查项</div> <div class="TradingAlertNewBoxItemLabel">必查项</div>
</div> </div>
</div> </div>
<div class="TradingAlertNewBoxItem"> <div class="TradingAlertNewBoxItem">
<div class="TradingAlertNewBoxItemTemplate"> <div class="TradingAlertNewBoxItemTemplate">
<div class="TradingAlertNewBoxItemValue" style="color: #75F8EE;">{{ (TradingOtherData?.data || 0) }} <div class="TradingAlertNewBoxItemValue" style="color: #75F8EE;">
<NumberRoller :value="TradingOtherData?.data || 0" :duration="1000" />
</div> </div>
<div class="TradingAlertNewBoxItemLabel">抽查项</div> <div class="TradingAlertNewBoxItemLabel">抽查项</div>
</div> </div>

View File

@ -82,12 +82,12 @@ defineExpose({
<div class="supplierMessageBox" style="margin-top: 10px;"> <div class="supplierMessageBox" style="margin-top: 10px;">
<div class="supplierMessageBoxTop"> <div class="supplierMessageBoxTop">
<div class="supplierMessageBoxTopItem"> <div class="supplierMessageBoxTopItem">
<div class="supplierMessageBoxTopItemLabel">供应商/</div> <div class="supplierMessageBoxTopItemLabel">电商及工会福利/</div>
<!-- <div class="supplierMessageBoxTopItemvalue" style="color: #56BCE6;">{{ supplierObj?.dealer || "0" }} --> <!-- <div class="supplierMessageBoxTopItemvalue" style="color: #56BCE6;">{{ supplierObj?.dealer || "0" }} -->
<div class="supplierMessageBoxTopItemvalue" style="color: #56BCE6;">14</div> <div class="supplierMessageBoxTopItemvalue" style="color: #56BCE6;">14</div>
</div> </div>
<div class="supplierMessageBoxTopItem"> <div class="supplierMessageBoxTopItem">
<div class="supplierMessageBoxTopItemLabel">品牌方/</div> <div class="supplierMessageBoxTopItemLabel">绿色云品品牌厂家/</div>
<!-- <div class="supplierMessageBoxTopItemvalue" style="color: #ef5a0d;">{{ supplierObj?.brandSide || "0" <!-- <div class="supplierMessageBoxTopItemvalue" style="color: #ef5a0d;">{{ supplierObj?.brandSide || "0"
}} }}
</div> --> </div> -->
@ -97,14 +97,14 @@ defineExpose({
<div class="supplierMessageBoxTop" style="margin-top: 10px;"> <div class="supplierMessageBoxTop" style="margin-top: 10px;">
<div class="supplierMessageBoxTopItem"> <div class="supplierMessageBoxTopItem">
<div class="supplierMessageBoxTopItemLabel">自有品牌水/</div> <div class="supplierMessageBoxTopItemLabel">自有水品牌厂家/</div>
<!-- <div class="supplierMessageBoxTopItemvalue" style="color: #56BCE6;">{{ <!-- <div class="supplierMessageBoxTopItemvalue" style="color: #56BCE6;">{{
supplierObj?.privateLabelWater || "0" }} supplierObj?.privateLabelWater || "0" }}
</div> --> </div> -->
<div class="supplierMessageBoxTopItemvalue" style="color: #56BCE6;">2</div> <div class="supplierMessageBoxTopItemvalue" style="color: #56BCE6;">2</div>
</div> </div>
<div class="supplierMessageBoxTopItem"> <div class="supplierMessageBoxTopItem">
<div class="supplierMessageBoxTopItemLabel">零售批发/</div> <div class="supplierMessageBoxTopItemLabel">快消品零售批发/</div>
<!-- <div class="supplierMessageBoxTopItemvalue" style="color: #ef5a0d;">{{ <!-- <div class="supplierMessageBoxTopItemvalue" style="color: #ef5a0d;">{{
supplierObj?.retailAndWholesale || "0" }} supplierObj?.retailAndWholesale || "0" }}
</div> --> </div> -->

View File

@ -1 +1 @@
{"root":["./src/main.ts","./src/shims-vue.d.ts","./src/vite-env.d.ts","./src/options/serveice.ts","./src/page/index/service.ts","./src/page/login/service.ts","./src/request/newrequest.ts","./src/request/request.ts","./src/request/requestcode.ts","./src/request/requestconfig.ts","./src/request/requestlocal.ts","./src/request/requestpos.ts","./src/request/requesttest.ts","./src/router/index.ts","./src/stores/counter.ts","./src/app.vue","./src/page/index/index.vue","./src/page/index/components/accountsreceivablewarning/accountsreceivablewarning.vue","./src/page/index/components/analysisofmember/analysisofmember.vue","./src/page/index/components/announcementtopic/announcementtopic.vue","./src/page/index/components/annualaccountsreceivable/annualaccountsreceivable.vue","./src/page/index/components/arealegend/arealegend.vue","./src/page/index/components/assessmentscoring/assessmentscoring.vue","./src/page/index/components/assessmentscoringranking/assessmentscoringranking.vue","./src/page/index/components/basicmessagebox/basicmessagebox.vue","./src/page/index/components/brandconsumptionlevel/brandconsumptionlevel.vue","./src/page/index/components/branddetail/branddetail.vue","./src/page/index/components/brandlisttbox/brandlisttbox.vue","./src/page/index/components/businesscase/businesscase.vue","./src/page/index/components/businessstructure/businessstructure.vue","./src/page/index/components/busytradingranking/busytradingranking.vue","./src/page/index/components/centertitle/centertitle.vue","./src/page/index/components/consumptionconversion/consumptionconversion.vue","./src/page/index/components/consumptionlevel/consumptionlevel.vue","./src/page/index/components/consumptionperiod/consumptionperiod.vue","./src/page/index/components/contractinformation/contractinformation.vue","./src/page/index/components/corebusinessdata/corebusinessdata.vue","./src/page/index/components/corecategory/corecategory.vue","./src/page/index/components/customeragegroup/customeragegroup.vue","./src/page/index/components/customerconsumptionpreferences/customerconsumptionpreferences.vue","./src/page/index/components/customergroup/customergroup.vue","./src/page/index/components/customergroupstay/customergroupstay.vue","./src/page/index/components/dailyinspection/dailyinspection.vue","./src/page/index/components/deductiontype/deductiontype.vue","./src/page/index/components/detailedpayment/detailedpayment.vue","./src/page/index/components/festivalrevenue/festivalrevenue.vue","./src/page/index/components/festivalrevenuesuminfo/festivalrevenuesuminfo.vue","./src/page/index/components/gendercustomergroup/gendercustomergroup.vue","./src/page/index/components/highqualitymerchants/highqualitymerchants.vue","./src/page/index/components/hotproductlist/hotproductlist.vue","./src/page/index/components/mallorderstatistics/mallorderstatistics.vue","./src/page/index/components/membermall/index.vue","./src/page/index/components/merchantcategory/merchantcategory.vue","./src/page/index/components/merchantratingranking/merchantratingranking.vue","./src/page/index/components/multiindustryincome/multiindustryincome.vue","./src/page/index/components/overviewofservicearea/overviewofservicearea.vue","./src/page/index/components/pagemap/pagemap.vue","./src/page/index/components/passengerflowchanges/passengerflowchanges.vue","./src/page/index/components/paymentprogress/paymentprogress.vue","./src/page/index/components/preferencetype/preferencetype.vue","./src/page/index/components/privaterideservice/privaterideservice.vue","./src/page/index/components/regionalrevenue/regionalrevenue.vue","./src/page/index/components/returnrate/returnrate.vue","./src/page/index/components/salescomparison/salescomparison.vue","./src/page/index/components/signedclients/signedclients.vue","./src/page/index/components/thismonthbenefits/thismonthbenefits.vue","./src/page/index/components/todaytrend/todaytrend.vue","./src/page/index/components/totalaccountsreceivable/totalaccountsreceivable.vue","./src/page/index/components/tradingalert/tradingalert.vue","./src/page/index/components/trendoftrafficflow/trendoftrafficflow.vue","./src/page/index/components/vehiclemodelstay/vehiclemodelstay.vue","./src/page/index/components/vehiclestayanalysis/vehiclestayanalysis.vue","./src/page/index/components/vehiclesentering/vehiclesentering.vue","./src/page/index/components/modaltitle/modaltitle.vue","./src/page/index/components/newbigtitlebox/newbigtitlebox.vue","./src/page/index/components/noticelistbox/noticelistbox.vue","./src/page/index/components/pagetop/pagetop.vue","./src/page/index/components/smalltitle/smalltitle.vue","./src/page/index/components/supplierlistbox/supplierlistbox.vue","./src/page/login/login.vue"],"version":"5.6.3"} {"root":["./src/main.ts","./src/shims-vue.d.ts","./src/vite-env.d.ts","./src/options/serveice.ts","./src/page/index/service.ts","./src/page/login/service.ts","./src/request/newrequest.ts","./src/request/request.ts","./src/request/requestcode.ts","./src/request/requestconfig.ts","./src/request/requestlocal.ts","./src/request/requestpos.ts","./src/request/requesttest.ts","./src/router/index.ts","./src/stores/counter.ts","./src/app.vue","./src/page/index/index.vue","./src/page/index/components/accountsreceivablewarning/accountsreceivablewarning.vue","./src/page/index/components/analysisofmember/analysisofmember.vue","./src/page/index/components/announcementtopic/announcementtopic.vue","./src/page/index/components/annualaccountsreceivable/annualaccountsreceivable.vue","./src/page/index/components/arealegend/arealegend.vue","./src/page/index/components/assessmentscoring/assessmentscoring.vue","./src/page/index/components/assessmentscoringranking/assessmentscoringranking.vue","./src/page/index/components/basicmessagebox/basicmessagebox.vue","./src/page/index/components/brandconsumptionlevel/brandconsumptionlevel.vue","./src/page/index/components/branddetail/branddetail.vue","./src/page/index/components/brandlisttbox/brandlisttbox.vue","./src/page/index/components/businesscase/businesscase.vue","./src/page/index/components/businessstructure/businessstructure.vue","./src/page/index/components/busytradingranking/busytradingranking.vue","./src/page/index/components/centertitle/centertitle.vue","./src/page/index/components/consumptionconversion/consumptionconversion.vue","./src/page/index/components/consumptionlevel/consumptionlevel.vue","./src/page/index/components/consumptionperiod/consumptionperiod.vue","./src/page/index/components/contractinformation/contractinformation.vue","./src/page/index/components/corebusinessdata/corebusinessdata.vue","./src/page/index/components/corecategory/corecategory.vue","./src/page/index/components/customeragegroup/customeragegroup.vue","./src/page/index/components/customerconsumptionpreferences/customerconsumptionpreferences.vue","./src/page/index/components/customergroup/customergroup.vue","./src/page/index/components/customergroupstay/customergroupstay.vue","./src/page/index/components/dailyinspection/dailyinspection.vue","./src/page/index/components/deductiontype/deductiontype.vue","./src/page/index/components/detailedpayment/detailedpayment.vue","./src/page/index/components/festivalrevenue/festivalrevenue.vue","./src/page/index/components/festivalrevenuesuminfo/festivalrevenuesuminfo.vue","./src/page/index/components/gendercustomergroup/gendercustomergroup.vue","./src/page/index/components/highqualitymerchants/highqualitymerchants.vue","./src/page/index/components/hotproductlist/hotproductlist.vue","./src/page/index/components/mallorderstatistics/mallorderstatistics.vue","./src/page/index/components/membermall/index.vue","./src/page/index/components/merchantcategory/merchantcategory.vue","./src/page/index/components/merchantratingranking/merchantratingranking.vue","./src/page/index/components/multiindustryincome/multiindustryincome.vue","./src/page/index/components/overviewofservicearea/overviewofservicearea.vue","./src/page/index/components/pagemap/pagemap.vue","./src/page/index/components/passengerflowchanges/passengerflowchanges.vue","./src/page/index/components/paymentprogress/paymentprogress.vue","./src/page/index/components/preferencetype/preferencetype.vue","./src/page/index/components/privaterideservice/privaterideservice.vue","./src/page/index/components/regionalrevenue/regionalrevenue.vue","./src/page/index/components/returnrate/returnrate.vue","./src/page/index/components/salescomparison/salescomparison.vue","./src/page/index/components/signedclients/signedclients.vue","./src/page/index/components/thismonthbenefits/thismonthbenefits.vue","./src/page/index/components/todaytrend/todaytrend.vue","./src/page/index/components/totalaccountsreceivable/totalaccountsreceivable.vue","./src/page/index/components/tradingalert/numberroller.vue","./src/page/index/components/tradingalert/tradingalert.vue","./src/page/index/components/trendoftrafficflow/trendoftrafficflow.vue","./src/page/index/components/vehiclemodelstay/vehiclemodelstay.vue","./src/page/index/components/vehiclestayanalysis/vehiclestayanalysis.vue","./src/page/index/components/vehiclesentering/vehiclesentering.vue","./src/page/index/components/modaltitle/modaltitle.vue","./src/page/index/components/newbigtitlebox/newbigtitlebox.vue","./src/page/index/components/noticelistbox/noticelistbox.vue","./src/page/index/components/pagetop/pagetop.vue","./src/page/index/components/smalltitle/smalltitle.vue","./src/page/index/components/supplierlistbox/supplierlistbox.vue","./src/page/login/login.vue"],"version":"5.6.3"}