This commit is contained in:
ylj20011123 2025-06-13 19:53:09 +08:00
parent 216d4716fe
commit b02851d456
38 changed files with 372 additions and 173 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -43,7 +43,6 @@ function fallbackDecrypt(ciphertext) {
return decrypted.toString(CryptoJS.enc.Utf8);
} catch (error) {
console.error('解密失败:', error);
return '';
}
}

View File

@ -56,12 +56,12 @@ const handleGetData = async () => {
let realData: string[] = []
const req: any = {
// ProvinceCode: "530000",
ProvinceCode: "340000",
ProvinceCode: "530000",
GetFromRedis: true
// ProvinceCode: "340000",
}
const data = await handleGetProjectSummaryInfo(req)
console.log('dsajoidasjodasjoida', data);
//
let ArrearageList = data.ArrearageList
@ -114,7 +114,7 @@ const handleHaveFirstPie = async () => {
},
formatter: function (params: any) {
return `
<div style="font-weight:bold">${params.name} ${params.value}</div>
<div>${params.name} ${params.percent}%</div>
`;
}
},
@ -165,16 +165,16 @@ const handleHaveFirstPie = async () => {
const handleGetDataSecond = async () => {
let category: string[] = []
let seriesData: number[] = []
let seriesData: any = []
let realData: string[] = []
const req: any = {
// ProvinceCode: "530000",
ProvinceCode: "340000",
ProvinceCode: "530000",
GetFromRedis: true
// ProvinceCode: "340000",
}
const data = await handleGetContractExpiredInfo(req)
console.log('dasdasjdasoijdo', data);
//
let ContractHalfYearListExpired = data.ContractHalfYearListExpired
@ -185,7 +185,7 @@ const handleGetDataSecond = async () => {
if (ContractHalfYearListExpired && ContractHalfYearListExpired.length > 0) {
ContractHalfYearListExpired.forEach((item: any) => {
category.push(item.Expired_Situation)
seriesData.push(item.Expired_Count)
seriesData.push({ name: item.Expired_Situation, value: item.Expired_Count })
})
}

View File

@ -41,16 +41,31 @@ onMounted(async () => {
type: 'category',
data: res.category,
axisLabel: {
color: '#fff',
width: 80,
overflow: 'truncate',
ellipsis: '...',
interval: 0
},
axisLine: {
lineStyle: {
color: '#fff' // y 线
}
}
},
xAxis: { // xAxis
type: 'value',
name: "万元",
splitLine: { show: false }
splitLine: { show: false },
axisLabel: {
color: '#fff',
formatter: '{value}' //
},
axisLine: {
lineStyle: {
color: '#fff' // y 线
}
},
},
series: [
{
@ -121,10 +136,9 @@ const handleGetData = async () => {
let seriesData: any = []
const req: any = {
GetFromRedis: true
}
const data = await handleGetProjectYearlyArrearageList(req)
console.log('handleGetProjectYearlyArrearageListhandleGetProjectYearlyArrearageListhandleGetProjectYearlyArrearageList', data);
let list: any = data.ProjectMonthlyCompleteList.slice(0, 5)
list.reverse()

View File

@ -7,6 +7,7 @@
.AssessmentScoringRankingItem {
width: 100%;
height: 80px;
box-sizing: border-box;
padding: 11px 10px;
background: linear-gradient(0deg, rgba(0, 148, 255, 0.1) 0%, rgba(0, 148, 255, 0.05) 100%);

View File

@ -17,15 +17,18 @@ onMounted(async () => {
const handleGetData = async () => {
const req: any = {
DataType: 1,
StartMonth: "202501",
EndMonth: "202501",
StartMonth: "202505",
EndMonth: "202505",
provinceCode: "530000",
}
const data = await handleGetExamineResultList(req)
console.log('fjdisfjoasidfj', data);
let list: any = data.slice(0, 5)
rankList.value = list
if (list && list.length > 0) {
rankList.value = list
} else {
rankList.value = [{}, {}, {}, {}, {}]
}
}
</script>

View File

@ -153,7 +153,7 @@
.brandRightBottomItem {
font-family: Microsoft YaHei, Microsoft YaHei;
font-weight: 400;
font-size: 10px;
font-size: 12px;
color: #0094FF;
text-align: center;
font-style: normal;

View File

@ -36,6 +36,8 @@ let selectTab = ref<number>(1)
let allBrandList = ref<any>([])
//
let brandListData = ref<any>([])
//
let allBrandObjData = ref<any>()
//
const props = defineProps<{
@ -135,17 +137,15 @@ const handleGoMounted = async () => {
//
const handleGetData = async () => {
//
const enumData: any = await handleGetFieldEnumTree({
FieldExplainField: "BRAND_TYPE",
sessionName: "BRAND_TYPE"
})
console.log('enumDataenumDataenumDataenumData', enumData);
// const enumData: any = await handleGetFieldEnumTree({
// FieldExplainField: "BRAND_TYPE",
// sessionName: "BRAND_TYPE"
// })
let req: any = {
ProvinceCode: "530000"
}
const data = await handleGetBrandStructureAnalysis(req)
console.log('datadatadatadatadata', data);
let category: any = []
let pieData: any = []
if (data && data.length > 0) {
@ -177,11 +177,8 @@ const handleGetData = async () => {
// SERVERPART_IDS: props.currentService?.SERVERPART_ID || ""
})
console.log('listDatalistDatalistData', listData);
let tableList: any = []
if (listData && listData.length > 0) {
listData.forEach((item: any) => {
tableList.push({ label: item.AUTOSTATISTICS_NAME, value: item.AUTOSTATISTICS_ID })
@ -190,7 +187,24 @@ const handleGetData = async () => {
tabList.value = tableList
await handleGetTableData(tableList[0].value)
let obj: any = {}
if (tableList && tableList.length > 0) {
for (let i = 0; i < tableList.length; i++) {
obj[tableList[i].value] = await handleGetTableData(tableList[i].value)
if (i === 0) {
console.log('i 0 ', obj[tableList[i].value]);
brandListData.value = obj[tableList[i].value]
}
}
}
console.log('obj', obj);
allBrandObjData.value = obj
brandListData.value = obj[tableList[0].value]
// await handleGetTableData(tableList[0].value)
let res: any = {
category: category,// x
@ -209,15 +223,19 @@ const handleGetTableData = async (BRAND_INDUSTRY: number) => {
// SERVERPART_IDS:""
}
const data = await handleGetCombineBrandList(req)
console.log('tableDatasadasd', data);
brandListData.value = data.slice(0, 6)
// brandListData.value = data.slice(0, 6)
return data.slice(0, 6)
}
// tab
const handleChangeTab = async (value: number) => {
brandListData.value = []
selectTab.value = value
await handleGetTableData(tabList.value[value - 1].value)
if (allBrandObjData.value[tabList.value[value - 1].value]) {
brandListData.value = []
selectTab.value = value
brandListData.value = allBrandObjData.value[tabList.value[value - 1].value]
// await handleGetTableData(tabList.value[value - 1].value)
}
}

View File

@ -112,12 +112,14 @@
color: #78828E;
text-align: left;
font-style: normal;
white-space: nowrap;
}
.changeBox {
margin-left: 5px;
display: flex;
align-items: center;
.changeIcon {
width: 6px;
height: 8px;
@ -257,18 +259,17 @@
.featureAnalysis {
width: 100%;
height: 283px;
margin-top: 32px;
.featureAnalysisBox {
width: 100%;
height: 283px;
height: 300px;
margin-top: 18px;
}
.featureAnalysisBottom {
width: 100%;
height: 283px;
height: 300px;
margin-top: 18px;
}
}

View File

@ -83,13 +83,12 @@ const handleChangeTab = async (value: number) => {
//
const handleGetData = async () => {
const req: any = {
ProvinceCode: "340000",
ProvinceCode: "530000",
StatisticsDate: moment().subtract(1, 'd').format('YYYY-MM-DD'),
ServerpartId: props.currentService?.SERVERPART_ID || "",
}
const data = await handleCodeGetRevenueCompare(req)
console.log('djsakjdaskldjasoifioad', data);
getAllData.value = data
@ -153,7 +152,6 @@ const handleGetData = async () => {
2: [category, ...res2],
3: [category, ...res3],
}
console.log('dhsauhdasjhdak', obj);
realData.value = obj
handleShowData(selectTab.value)
@ -176,8 +174,6 @@ const handleGetBottomData = async () => {
const data = await handleGetRevenueTrend(req)
const yesData = await handleGetRevenueTrend(yesReq)
console.log('datadatadatadata', data);
console.log('yesDatayesDatayesDatayesData', yesData);
let category: string[] = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
let currentYear: number[] = []
@ -207,7 +203,6 @@ const handleGetBottomData = async () => {
const handleShowData = async (value: number) => {
let data = realData.value[value]
console.log('fjidufasdhfsdjfsdn', data);
const chartDom = document.getElementById('featureAnalysis');
@ -447,21 +442,22 @@ onBeforeUnmount(() => {
</div>
<div class="BusinessCaseRightItemBottom">
<div class="BusinessCaseItemBottomLeft">
<div class="compareTitle">相比去年同日</div>
<div class="changeBox">
<img class="changeIcon" :src="selectTab === 1 ? getAllData?.RevenueAmountYOYRate > 0 ? addIcon : reduce :
selectTab === 2 ? getAllData?.TicketCountYOYRate > 0 ? addIcon : reduce :
selectTab === 3 ? getAllData?.AvgTicketAmountRate > 0 ? addIcon : reduce : ''
" />
<img v-if="getAllData?.RevenueAmountYOYRate || getAllData?.TicketCountYOYRate || getAllData?.AvgTicketAmountRate"
class="changeIcon" :src="selectTab === 1 ? getAllData?.RevenueAmountYOYRate > 0 ? addIcon : reduce :
selectTab === 2 ? getAllData?.TicketCountYOYRate > 0 ? addIcon : reduce :
selectTab === 3 ? getAllData?.AvgTicketAmountRate > 0 ? addIcon : reduce : ''
" />
<div class="changeText" :style="{
color: selectTab === 1 ? getAllData?.RevenueAmountYOYRate > 0 ? '#00FF00' : '#D24343' :
selectTab === 2 ? getAllData?.TicketCountYOYRate > 0 ? '#00FF00' : '#D24343' :
selectTab === 3 ? getAllData?.AvgTicketAmountRate > 0 ? '#00FF00' : '#D24343' : ''
}">{{
selectTab === 1 ? getAllData?.RevenueAmountYOYRate :
selectTab === 2 ? getAllData?.TicketCountYOYRate :
selectTab === 3 ? getAllData?.AvgTicketAmountRate : ''
selectTab === 1 ? getAllData?.RevenueAmountYOYRate || '-' :
selectTab === 2 ? getAllData?.TicketCountYOYRate || '-' :
selectTab === 3 ? getAllData?.AvgTicketAmountRate || '-' : ''
}}%</div>
<div class="compareTitle">(相比去年同日)</div>
</div>
</div>
@ -473,7 +469,7 @@ onBeforeUnmount(() => {
getAllData?.TicketCount.toLocaleString() : selectTab === 3 ?
getAllData?.AvgTicketAmount.toLocaleString() : ''
}}</div>
<div class="BusinessCaseRevenueUnit">{{ selectTab===2?'笔':'元' }}</div>
<div class="BusinessCaseRevenueUnit">{{ selectTab === 2 ? '笔' : '元' }}</div>
</div>
</div>

View File

@ -7,7 +7,7 @@
width: 100%;
height: 210px;
box-sizing: border-box;
padding: 42px 0 0 31px;
padding: 52px 0 0 31px;
.BusinessStructureUnit {
font-family: "Microsoft YaHei";

View File

@ -168,7 +168,6 @@ const handleGetData = async () => {
const data = await handleGetBusinessTradeRevenue(req)
console.log('业态结构占比', data)
let list: any = data.BusinessTradeRank
let seriesData: any = []

View File

@ -29,7 +29,6 @@ const handleGetServiceBusyData = async () => {
}
// const data = await handleGetCurHalfCollect(req)
const data = await handleGetCurBusyRank(req)
console.log('服务区繁忙度数据:', data);
let list: any = data.List
//
const revenueReq: any = {

View File

@ -153,7 +153,6 @@ onMounted(async () => {
type: 'line' // 线
},
formatter: function (params: any) {
console.log('paramsparamsparamsparams', params);
return `<div>
<div>${params[0].name}</div>
@ -203,7 +202,6 @@ const handleGetData = async () => {
Serverpart_ID: ''
}
const data = await handleGetTransactionConvert(req)
console.log('jfidsafuidsopfjsdflksjdfds', data);
let carList = data.BayonetList.data
@ -234,7 +232,6 @@ const handleGetData = async () => {
orderResList: orderResList,
orderRealResList: orderRealResList
}
console.log('resresresresres', res);
return res

View File

@ -42,7 +42,8 @@ onMounted(async () => {
//
const handleGetData = async () => {
const req: any = {
ProvinceCode: '530000'
ProvinceCode: '530000',
GetFromRedis: true
}
const data = await handleGetProjectSummaryInfo(req)
@ -156,7 +157,7 @@ onBeforeUnmount(() => {
<div class="ContractInformationBigRightText">
<span class="ContractInformationBigRightSmallLabel">签约合同</span>
<span class="ContractInformationBigRightValue">{{ realDataObj?.Contract_SignCount || ''
}}</span>
}}</span>
</div>
</div>

View File

@ -1,5 +1,5 @@
.CustomerAgeGroupBox {
width: calc((100% - 28px) / 3);
width: calc((100% - 28px) / 4);
display: inline-block;
height: 210px;

View File

@ -75,13 +75,16 @@ const handleGoMounted = async () => {
},
yAxis: {
type: 'value',
name: "万辆",
name: "客单占比(%)",
axisLine: {
show: true,
lineStyle: {
color: '#fff'
}
},
nameTextStyle: {
padding: [0, 0, 0, 30]
},
splitLine: { show: false } // 线
},
series: [
@ -130,7 +133,7 @@ const handleGoMounted = async () => {
left: '0', //
right: '0', //
bottom: '0', //
top: '10', //
top: '30', //
containLabel: true // grid
},
tooltip: { // tooltip
@ -145,7 +148,7 @@ const handleGoMounted = async () => {
return `
<div style="font-weight:bold">${data.name}</div>
<div>车流量${realData ? realData + '%' : data.value + '%'} </div>
<div>客单占比${realData ? realData + '%' : data.value + '%'} </div>
`;
}
},

View File

@ -75,7 +75,7 @@ const handleGoMounted = async () => {
//
type: 'text',
style: {
text: `${dailyDetailObj.value.CompleteRate || '-'}`, //
text: `${dailyDetailObj.value.CompleteRate || '-'}%`, //
font: 'bold 20px Arial', //
fill: '#FFFFFF', //
textAlign: 'center',
@ -135,9 +135,10 @@ watch(
const handleGetData = async () => {
const req: any = {
StartDate: '2025-01-01',
EndDate: '2025-01-01',
provinceCode: "340000"
StartDate: moment().subtract(1, 'd').startOf('M').format('YYYY-MM-DD'),
EndDate: moment().subtract(1, 'd').endOf('M').format('YYYY-MM-DD'),
// provinceCode: "340000"
provinceCode: "530000"
}
const data = await handleGetPatrolAnalysis(req)

View File

@ -101,7 +101,7 @@ onMounted(async () => {
const handleGetSectionFlowCount = async () => {
const req: any = {
GetFromRedis: true
}
const data = await handleGetProjectYearlyArrearageList(req)
console.log('handleGetProjectYearlyArrearageListhandleGetProjectYearlyArrearageListhandleGetProjectYearlyArrearageList', data);

View File

@ -13,7 +13,7 @@
.FestivalRevenue {
width: 100%;
height: 220px;
height: 260px;
margin-top: 20px;
}
}

View File

@ -88,7 +88,7 @@ const handleGoMounted = async () => {
},
yAxis: {
type: 'value',
name: '万元',
name: '营收(万元)',
splitLine: { show: false },
axisLabel: {
@ -175,8 +175,8 @@ const handleGetData = async () => {
let lastYearDateList: any = []
const req: any = {
// pushProvinceCode: 530000,
pushProvinceCode: 340000,
pushProvinceCode: 530000,
// pushProvinceCode: 340000,
curYear: moment().format('YYYY'),
compareYear: moment().subtract(1, 'y').format('YYYY'),
HolidayType: props?.FestivalValue || 5,

View File

@ -1,5 +1,5 @@
.GenderCustomerGroupBox {
width: calc((100% - 28px) / 3);
width: calc((100% - 28px) / 4);
display: inline-block;
height: 210px;

View File

@ -167,7 +167,7 @@ const handleGetData = async () => {
if (data && data.length > 0) {
data.forEach((item: any) => {
category.push(item.StatisticsMonth)
category.push(`${item.StatisticsMonth}`)
TicketCountData.push(item.TicketCount)
SellAmountData.push(item.SellAmount)
})

View File

@ -49,8 +49,10 @@ onMounted(async () => {
fontSize: 14
},
formatter: function (params: any) {
console.log('params', params);
return `
<div style="font-weight:bold">${params.name} ${params.value}%</div>
<div>${params.name}${params.percent}%</div>
`;
}
},
@ -106,6 +108,7 @@ const handleGetData = async () => {
//
const req: any = {
ProvinceCode: '530000',
GetFromRedis: true
}
const data = await handleGetContractExpiredInfo(req)
@ -114,7 +117,7 @@ const handleGetData = async () => {
receivePayment.value = data
let category: string[] = ["未到期金额", "到期金额"]
let seriesData: number[] = [data.UnExpired_Amount, data.Expired_Amount]
let seriesData: any = [{ name: '未到期金额', value: Number(data.UnExpired_Amount.toFixed(2)) }, { name: '到期金额', value: Number(data.Expired_Amount.toFixed(2)) }]
let realData: string[] = []
@ -148,7 +151,7 @@ onBeforeUnmount(() => {
<div class="boxTopLeft">到期金额收款进度</div>
<div class="boxTopRight">
<span class="progressBoxrightLabel">总金额</span>
<span class="progressBoxrightValue">{{ receivePayment?.Paid_Amount ? receivePayment?.Paid_Amount :
<span class="progressBoxrightValue">{{ receivePayment?.Paid_Amount ? receivePayment?.Paid_Amount.toFixed(2) :
""
}}</span>
<span class="progressBoxrightUnit">万元</span>
@ -171,8 +174,8 @@ onBeforeUnmount(() => {
<div class="itemName">未到期金额</div>
</div>
<div class="progressPieItemRight">
<div class="itemValue">{{ receivePayment?.UnExpired_Amount }}</div>
<div class="itemUnit"></div>
<div class="itemValue">{{ Number(receivePayment?.UnExpired_Amount.toFixed(2)) }}</div>
<div class="itemUnit"></div>
</div>
</div>
<div class="progressPieItem">
@ -181,8 +184,8 @@ onBeforeUnmount(() => {
<div class="itemName">到期金额</div>
</div>
<div class="progressPieItemRight">
<div class="itemValue">{{ receivePayment?.Expired_Amount }}</div>
<div class="itemUnit"></div>
<div class="itemValue">{{ Number(receivePayment?.Expired_Amount.toFixed(2)) }}</div>
<div class="itemUnit"></div>
</div>
</div>
</div>

View File

@ -1,6 +1,6 @@
.PreferenceTypeBox {
// width: 50%;
width: calc((100% - 28px) / 3 * 2);
width: calc((100% - 28px) / 4 * 2);
display: inline-block;
height: 210px;

View File

@ -42,7 +42,8 @@ onMounted(async () => {
//
const handleGetData = async () => {
const req: any = {
ProvinceCode: '530000'
ProvinceCode: '530000',
GetFromRedis: true
}
const data = await handleGetProjectSummaryInfo(req)
@ -175,7 +176,7 @@ onBeforeUnmount(() => {
<div class="SignedClientsSmallLeft" id="SignedClients1"></div>
<div class="SignedClientsSmallRight">
<div class="SignedClientsSmallRightLeft">
<div class="SignedClientsSmallRightLeftTop">合作分成</div>
<div class="SignedClientsSmallRightLeftTop">联合经营</div>
<div class="SignedClientsSmallRightLeftBottom">
<span class="SignedClientsSmallRightLeftBottomNormalText">欠款商户</span>
<span class="SignedClientsSmallRightLeftBottomValue">{{
@ -201,7 +202,7 @@ onBeforeUnmount(() => {
<div class="SignedClientsSmallLeft" id="SignedClients2"></div>
<div class="SignedClientsSmallRight">
<div class="SignedClientsSmallRightLeft">
<div class="SignedClientsSmallRightLeftTop">固定租金</div>
<div class="SignedClientsSmallRightLeftTop">委托运营管理</div>
<div class="SignedClientsSmallRightLeftBottom">
<span class="SignedClientsSmallRightLeftBottomNormalText">欠款商户</span>
<span class="SignedClientsSmallRightLeftBottomValue">{{ FixedRent?.ArrearageMerchant_Count

View File

@ -60,7 +60,7 @@ onMounted(async () => {
},
formatter: function (params: any) { //
return `
<div style="font-weight:bold">${params.data.name} ${params?.percent}% ${res.realData[params.dataIndex]}</div>
<div style="font-weight:bold">${params.data.name} ${params?.percent}%</div>
`;
}
},

View File

@ -76,15 +76,33 @@ onMounted(async () => {
type: 'shadow'
},
axisLabel: {
color: '#fff',
interval: 0, //
rotate: 0, //
fontSize: 10 //
}
},
axisLine: {
lineStyle: {
color: '#fff' // y 线
}
},
}
],
yAxis: {
name: '已收金额(元)',
type: 'value',
splitLine: { show: false } // 线
splitLine: { show: false }, // 线
nameTextStyle: {
padding: [0, 0, 0, 20]
},
axisLabel: {
color: '#fff',
},
axisLine: {
lineStyle: {
color: '#fff' // y 线
}
},
},
series: [
{
@ -110,6 +128,7 @@ onMounted(async () => {
]
}
},
data: res.seriesData
},
@ -146,7 +165,8 @@ const handleGetSectionFlowCount = async () => {
const req: any = {
ProvinceCode: "530000",
StatisticsYear: moment().subtract(1, 'd').format('YYYY')
StatisticsYear: moment().subtract(1, 'd').format('YYYY'),
GetFromRedis: true
}
const data = await handleGetProjectMonthlyArrearageList(req)

View File

@ -16,6 +16,8 @@
padding: 10px 15px;
display: flex;
align-items: center;
background: linear-gradient(0, rgba(0, 148, 255, 0.1) 0%, rgba(0, 148, 255, 0) 100%);
.TradingAlertItemLeft {
width: 46px;
@ -30,6 +32,7 @@
.TradingAlertItemRight {
flex: 1;
.TradingAlertItemRightLabel {
font-family: Microsoft YaHei, Microsoft YaHei;
font-weight: 400;
@ -39,15 +42,34 @@
font-style: normal;
}
.TradingAlertItemRightValue {
font-family: Impact, Impact;
font-weight: 400;
font-size: 25px;
color: #FFFFFF;
letter-spacing: 2px;
text-align: right;
font-style: normal;
.TradingAlertItemRightValueBox {
display: flex;
align-items: flex-end;
justify-content: flex-end;
.TradingAlertItemRightValue {
font-family: Impact, Impact;
font-weight: 400;
font-size: 25px;
color: #FFFFFF;
letter-spacing: 2px;
text-align: right;
font-style: normal;
}
.OverviewOfServiceAreaBusyContentItemRightUnit {
font-family: Inter, Inter;
font-weight: 400;
font-size: 12px;
color: #808A96;
text-align: right;
font-style: normal;
text-transform: none;
margin-left: 10px;
}
}
}
}
}

View File

@ -52,21 +52,28 @@ const handleGetData = async () => {
<div class="TradingAlertBox">
<div class="TradingAlertItem">
<div class="TradingAlertItemLeft">
<div class="TradingAlertItemLeftIcon"></div>
<img class="TradingAlertItemLeftIcon" src="../../../../assets/image/busyIcon.png" />
</div>
<div class="TradingAlertItemRight">
<div class="TradingAlertItemRightLabel">必查项</div>
<div class="TradingAlertItemRightValue">{{ TradingOtherData?.value || '' }}</div>
<div class="TradingAlertItemRightValueBox">
<div class="TradingAlertItemRightValue">{{ TradingOtherData?.value || '' }}</div>
<div class="OverviewOfServiceAreaBusyContentItemRightUnit"></div>
</div>
</div>
</div>
<div class="TradingAlertItem">
<div class="TradingAlertItemLeft">
<div class=""></div>
<img class="TradingAlertItemLeftIcon" src="../../../../assets/image/normalIcon.png" />
</div>
<div class="TradingAlertItemRight">
<div class="TradingAlertItemRightLabel">抽查项</div>
<div class="TradingAlertItemRightValue">{{ TradingOtherData?.data || '' }}</div>
<div class="TradingAlertItemRightValueBox">
<div class="TradingAlertItemRightValue">{{ TradingOtherData?.data || '' }}</div>
<div class="OverviewOfServiceAreaBusyContentItemRightUnit"></div>
</div>
</div>
</div>

View File

@ -1,5 +1,6 @@
.TrendOfTrafficFlowBox {
width: 100%;
// width: 100%;
width: calc((100vw - 90px) / 4 - 35px);
.TrendOfTrafficFlowCharts {
width: 100%;

View File

@ -1,5 +1,7 @@
.VehicleModelStayBox {
width: 100%;
// width: 100%;
width: calc((100vw - 90px) / 4 - 35px);
.VehicleModelStayCharts {
width: 100%;

View File

@ -173,7 +173,8 @@ const handleGetData = async () => {
const req: any = {
StatisticsDate: moment().format('YYYY'),
ProvinceCode: '340000',
// ProvinceCode: '340000',
ProvinceCode: '530000',
StatisticsType: 4,
}
const data = await handleGetRevenueTrend(req)
@ -188,7 +189,8 @@ const handleGetData = async () => {
const lastYearReq: any = {
StatisticsDate: moment().subtract(1, 'y').format('YYYY'),
ProvinceCode: '340000',
// ProvinceCode: '340000',
ProvinceCode: '530000',
StatisticsType: 4,
}
const lastYearData = await handleGetRevenueTrend(lastYearReq)

View File

@ -1,7 +1,7 @@
<script setup lang="ts">
import './noticeListBox.less'
import noticeIcon from '../../../../assets/image/noticeIcon.png'
import { nextTick, onMounted, reactive, ref, watch } from 'vue'
import { nextTick, onMounted, onUnmounted, reactive, ref, watch } from 'vue'
import { handleGetGDNearServiceList } from '../../service'
@ -23,6 +23,7 @@ onMounted(async () => {
//
const props = defineProps<{
currentService?: any;
selectPageTab?: number
}>();
//
@ -35,7 +36,17 @@ watch(
},
{ deep: true }
);
//
watch(
() => props.selectPageTab,
(newVal, oldVal) => {
//
handleGetNoticeList()
//
startScrolling()
},
{ deep: true }
);
//
const handleGetNoticeList = async () => {
@ -65,7 +76,7 @@ const handleGetNoticeList = async () => {
const startScrolling = () => {
isScrolling.value = false;
nextTick(() => {
const listEl = document.querySelector('.noticeList') as HTMLElement;
const listEl = document.querySelector(`.noticeList${props.selectPageTab}`) as HTMLElement;
if (listEl) {
const originWidth = listEl.scrollWidth / 2;
const speed = 100; // px/s
@ -121,6 +132,20 @@ const stopScrolling = () => {
// }
}
onUnmounted(() => {
// //
// if (scrollTimer) {
// clearInterval(scrollTimer)
// }
//
stopScrolling();
//
const styleEl = document.getElementById('dynamic-scroll-keyframes');
if (styleEl) {
styleEl.remove();
}
})
</script>
@ -129,7 +154,8 @@ const stopScrolling = () => {
<div class="noticeListBigBox">
<img class="noticeIcon" :src="noticeIcon" />
<div class="noticeListBox">
<div :class="['noticeList', { 'scrolling': isScrolling }]" :style="{ '--scroll-duration': scrollDuration }">
<div :class="['noticeList', `noticeList${props.selectPageTab}`, { 'scrolling': isScrolling }]"
:style="{ '--scroll-duration': scrollDuration }">
<div class="noticeItem" v-for="(item, index) in noticeList.concat(noticeList)" :key="index">
<div class="icon"></div>
<div class="contentMessage">

View File

@ -8,7 +8,7 @@
.supplierListItem {
width: 100%;
height: 86px;
// height: 86px;
box-sizing: border-box;
padding: 10px 20px;
border-radius: 10px;
@ -31,22 +31,41 @@
// }
.supplierListRight {
// flex: 1;
width: 100%;
box-sizing: border-box;
padding: 10px 0;
display: flex;
align-items: center;
justify-content: space-between;
.supplierListName {
font-family: Microsoft YaHei, Microsoft YaHei;
font-weight: 400;
font-size: 12px;
color: #FFFFFF;
text-align: left;
font-style: normal;
.supplierListNamebox {
width: 60%;
display: flex;
align-items: center;
.supplierListIcon {
width: 17px;
height: 14px;
margin-right: 7px;
}
.supplierListName {
width: calc(100% - 24px);
font-family: Microsoft YaHei, Microsoft YaHei;
font-weight: 400;
font-size: 12px;
color: #FFFFFF;
text-align: left;
font-style: normal;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
}
.supplierListContent {
margin-top: 12px;
// margin-top: 12px;
.shopIcon {
width: 12px;
@ -55,7 +74,7 @@
}
.shopValue {
width: 60px;
width: 50px;
display: inline-block;
font-family: Impact, Impact;
font-weight: 400;
@ -68,7 +87,19 @@
margin-right: 4px;
}
.shopLabel {
width: 50px;
display: inline-block;
font-family: Source Han Sans SC;
font-weight: 400;
font-size: 14px;
color: #B2B2B2;
line-height: 1px;
}
.shopUnit {
width: 20px;
display: inline-block;
font-family: Microsoft YaHei, Microsoft YaHei;
font-weight: 400;
font-size: 12px;

View File

@ -3,7 +3,7 @@ import { onMounted, ref } from 'vue';
import './supplierListBox.less'
import shopIcon from '../../../../assets/image/shopIcon.png'
import { handleGetSupplierList, handleGetSupplierListChain } from '../../service';
import supplierIcon from '../../../../assets/image/supplierIcon.png'
//
let supplierList = ref<any>([])
@ -23,7 +23,7 @@ const handleGetData = async () => {
const data = await handleGetSupplierListChain(req)
console.log('handleGetSupplierListChainhandleGetSupplierListChain', data);
supplierList.value = data.slice(0, 9)
supplierList.value = data.slice(0, 11)
}
@ -37,12 +37,19 @@ const handleGetData = async () => {
</div> -->
<div class="supplierListRight">
<div class="supplierListName">{{ item.SupplierName || '' }}</div>
<div class="supplierListNamebox">
<img class="supplierListIcon" :src="supplierIcon" />
<div class="supplierListName">{{ item.SupplierName || '' }}</div>
</div>
<div class="supplierListContent">
<img class="shopIcon" :src="shopIcon" />
<!-- <img class="shopIcon" :src="shopIcon" /> -->
<span class="shopValue">{{ item.VarietyCount }}</span>
<span class="shopUnit"></span>
<!-- <span class="shopLabel">送达率</span>
<span class="shopValue">{{ item.DeliverRate || '-' }}</span>
<span class="shopUnit">%</span> -->
</div>
</div>
</div>

View File

@ -114,41 +114,48 @@ const handleChangePageTab = (value: number) => {
</div>
<!-- 分区一 -->
<div class="content169" v-if="selectPageTab === 1">
<div class="content169" v-show="selectPageTab === 1 || selectPageTab === 3">
<div class="content169Left">
<!-- 消息轮播框 -->
<NoticeListBox :currentService="currentService" />
<NoticeListBox v-if="selectPageTab === 1" :currentService="currentService"
:selectPageTab="selectPageTab" />
<!-- <modalTitle :title="'流量趋势'" style="margin-top: 20px;" /> -->
<div class="content169LeftContent">
<!-- 服务区概况 -->
<OverviewOfServiceArea />
<NewBigTitleBox :title="'特情事件'" style="margin-top: 15px;" />
<div v-show="selectPageTab === 1">
<div class="content169LeftContent">
<!-- 服务区概况 -->
<OverviewOfServiceArea />
<!-- 今日走势图 -->
<!-- <TodayTrend /> -->
<NewBigTitleBox :title="'特情事件'" style="margin-top: 15px;" />
<!-- 服务区繁忙排行 交易排行 -->
<!-- <BusyTradingRanking style="margin-top: 11px;" /> -->
<!-- 今日走势图 -->
<!-- <TodayTrend /> -->
<!-- 交易预警 -->
<TradingAlert style="margin-top: 11px;" />
<!-- 服务区繁忙排行 交易排行 -->
<!-- <BusyTradingRanking style="margin-top: 11px;" /> -->
<!-- 交易预警 -->
<TradingAlert style="margin-top: 11px;" />
</div>
</div>
<!-- <modalTitle :title="'节假日营收分析'" style="margin-top: 20px;">
<template #extra>
<div class="FestivalBox">
<el-select class="festivalSelect" v-model="FestivalValue" placeholder="Select"
style="width: 72px;">
<el-option v-for="item in FestivalOptions" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</div>
</template>
</modalTitle> -->
<!-- 节假日营收分析 -->
<!-- <FestivalRevenue :currentService="currentService" /> -->
<div v-if="selectPageTab === 3">
<NewBigTitleBox title="应收账款" style="margin-top: 20px;" />
<div style="width: 100%;box-sizing: border-box;padding: 20px 11px;">
<!-- 合同信息 -->
<ContractInformation />
<!-- 收款完成进度 -->
<PaymentProgress style="margin-top: 24px;" />
<!-- 收款预警 -->
<AccountsReceivableWarning style="margin-top: 24px;" />
</div>
</div>
</div>
<div class="content169Center">
@ -167,30 +174,51 @@ const handleChangePageTab = (value: number) => {
<!-- 时间天气等内容 -->
<BasicMessageBox :currentService="currentService" />
<NewBigTitleBox title="流量趋势" style="margin-top: 24px;" />
<div v-show="selectPageTab === 1">
<NewBigTitleBox title="流量趋势" style="margin-top: 24px;" />
<div class="content169LeftContent" style="margin-top: 21px;">
<div class="leftContentBoxItem">
<!-- 断面流量趋势 -->
<TrendOfTrafficFlow :currentService="currentService" />
</div>
<div class="content169LeftContent" style="margin-top: 21px;">
<div class="leftContentBoxItem">
<!-- 断面流量趋势 -->
<TrendOfTrafficFlow :currentService="currentService" />
</div>
<div class="leftContentBoxItem" style="margin-top: 23px;">
<!-- 入区车流趋势 -->
<VehiclesEntering :currentService="currentService" />
</div>
<div class="leftContentBoxItem" style="margin-top: 23px;">
<!-- 入区车流趋势 -->
<VehiclesEntering :currentService="currentService" />
</div>
<!-- <div class="leftContentBoxItem" style="margin-top: 30px;"> -->
<!-- 客流变化 -->
<!-- <PassengerFlowChanges :currentService="currentService" /> -->
<!-- </div> -->
<!-- <div class="leftContentBoxItem" style="margin-top: 30px;"> -->
<!-- 客流变化 -->
<!-- <PassengerFlowChanges :currentService="currentService" /> -->
<!-- </div> -->
<div class="leftContentBoxItem" style="margin-top: 33px;">
<!-- 经营效益趋势 -->
<VehicleModelStay />
<div class="leftContentBoxItem" style="margin-top: 33px;">
<!-- 经营效益趋势 -->
<VehicleModelStay />
</div>
</div>
</div>
<div v-if="selectPageTab === 3">
<NewBigTitleBox :title="'应收账款'" style="margin-top: 20px;" />
<div style="width: 100%;box-sizing: border-box;padding: 16px 11px 0;">
<!-- 签约客户 -->
<SignedClients />
<!-- 应收总额完成度 -->
<TotalAccountsReceivable style="margin-top: 35px;" />
<!-- 年度应收总额完成度 -->
<AnnualAccountsReceivable style="margin-top: 35px;" />
<!-- 详细款项完成进度 -->
<DetailedPayment style="margin-top: 35px;" />
</div>
</div>
</div>
</div>
@ -202,7 +230,7 @@ const handleChangePageTab = (value: number) => {
<div class="content1692st" v-if="selectPageTab === 2">
<div class="content1692stLeft">
<!-- 消息轮播框 -->
<NoticeListBox style="margin-top: 20px;width: 50%;" />
<NoticeListBox style="margin-top: 20px;width: 50%;" :selectPageTab="selectPageTab" />
<!-- 核心经营数据 -->
<!-- <modalTitle :title="'核心经营数据'" style="margin-top: 20px;" /> -->
<!-- <CoreBusinessData style="position: relative;z-index: 9;" :noTitle="true" /> -->
@ -299,7 +327,7 @@ const handleChangePageTab = (value: number) => {
<BusinessStructure :currentService="currentService" style="margin-top: 22px;" />
</div>
<NewBigTitleBox :title="'节假日营收分析'" style="margin-top: 34px;">
<NewBigTitleBox :title="'节假日营收分析'" style="margin-top: 44px;">
<template #extra>
<div class="FestivalBox">
<el-select class="festivalSelect" v-model="FestivalValue" placeholder="Select"
@ -338,10 +366,10 @@ const handleChangePageTab = (value: number) => {
<!-- 分区三 -->
<div class="content1693st" v-if="selectPageTab === 3">
<div class="content1693st" v-if="selectPageTab === 99999">
<div class="content1693stItem">
<!-- 消息轮播框 -->
<NoticeListBox :currentService="currentService" />
<NoticeListBox :currentService="currentService" :selectPageTab="selectPageTab" />
<NewBigTitleBox title="应收账款" style="margin-top: 20px;" />
<div style="width: 100%;box-sizing: border-box;padding: 20px 11px;">
@ -421,7 +449,7 @@ const handleChangePageTab = (value: number) => {
<div class="content1694st" v-if="selectPageTab === 4">
<div class="content1694stItem">
<!-- 消息轮播框 -->
<NoticeListBox />
<NoticeListBox :selectPageTab="selectPageTab" />
<NewBigTitleBox :title="'管理运营监控'" style="margin-top: 29px;" />

View File

@ -443,6 +443,23 @@
justify-content: space-between;
}
}
.FestivalBox {
padding-right: 20px;
.festivalSelect {
.el-select__wrapper {
background-color: #122849;
box-shadow: 0 0 0 1px #394051 inset;
.el-select__selection {
.el-select__selected-item {
color: #fff;
}
}
}
}
}
}
}