对接媒体历史数据

This commit is contained in:
wangchengming 2025-09-18 17:29:29 +08:00
parent 07b2274095
commit 2cb4a07886
2 changed files with 212 additions and 58 deletions

View File

@ -2,64 +2,70 @@
<!-- 历史数据对话框 -->
<el-dialog title="历史数据" v-model="historyDataOpen" width="1250px" class="my_dialog" align-center
:destroy-on-close="true" :close-on-click-modal="false">
<el-form :inline="true" class="myInsertForm">
<el-form-item label="开始时间">
<el-date-picker v-model="queryParams.startTime" type="date" placeholder="开始时间" />
</el-form-item>
<el-form-item label="结束时间">
<el-date-picker v-model="queryParams.endTime" type="date" placeholder="结束时间" />
</el-form-item>
<el-form-item>
<el-radio-group v-model="queryParams.radio1">
<el-radio value="1">折线图</el-radio>
<el-radio value="2">柱状图</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" class="primaryBtn" @click="handleQuery">查询</el-button>
<el-button type="primary" class="primaryBtn" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<div id="historyChar" ref="historyCharRef"></div>
<el-table v-loading="loading" :data="historyList" height="368px">
<el-table-column label="媒体名称" align="left" prop="mediaName">
<template #default="scope">
<span class="mediaNameLabel">{{ scope.row.mediaName }}</span>
</template>
</el-table-column>
<el-table-column label="供应商名称" prop="realName" :show-overflow-tooltip="true" />
<el-table-column label="折扣" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="媒体净价(元)" prop="phonenumber" :show-overflow-tooltip="true" />
<el-table-column label="实际报价(元)" prop="phonenumber" :show-overflow-tooltip="true" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<div v-loading="loading">
<el-form :inline="true" :model="queryParams" class="myInsertForm">
<el-form-item label="开始时间">
<el-date-picker v-model="queryParams.startTime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="开始时间" @change="validateStartTime" />
</el-form-item>
<el-form-item label="结束时间">
<el-date-picker v-model="queryParams.endTime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="结束时间" @change="validateEndTime" />
</el-form-item>
<el-form-item>
<el-radio-group v-model="charsType" @change="handleChangeType">
<el-radio value="1">折线图</el-radio>
<el-radio value="2">柱状图</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" class="primaryBtn" @click="handleQuery">查询</el-button>
<el-button type="primary" class="primaryBtn" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<div id="historyChar" ref="historyCharRef"></div>
<el-table :data="historyList" height="368px">
<el-table-column label="媒体名称" align="left" prop="mediaName" />
<el-table-column label="供应商名称" prop="supplier" :show-overflow-tooltip="true" />
<el-table-column label="折扣" prop="discount" :show-overflow-tooltip="true" />
<el-table-column label="媒体净价(元)" prop="mediaRegularPrice" :show-overflow-tooltip="true" />
<el-table-column label="实际报价(元)" prop="listPrice" :show-overflow-tooltip="true" />
<el-table-column label="创建时间" align="center" prop="createTIme" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
@pagination="getList" />
<!-- <pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
@pagination="getList" /> -->
</div>
</el-dialog>
</template>
<script setup>
import { onMounted, defineEmits, ref } from 'vue'
import { mediaPrice } from "@/api/mediaLibrary"
import * as echarts from 'echarts'
const { proxy } = getCurrentInstance()
//
const charsType = ref('1')
const historyCharRef = ref(null)
const xData = ref([])
const yData = ref([])
const historyDataOpen = ref(false)
const loading = ref(false)
const total = ref(0)
const historyList = ref([])
// const total = ref(0)
const historyList = ref([])
const queryParams = ref({
pageNum: 1,
pageSize: 10,
userName: undefined,
phonenumber: undefined,
mediaId: undefined,
startTime: undefined,
endTime: undefined,
})
const getList = () => {
}
const _historyChar = ref(null)
// 线
const initHistoryCharLine = () => {
@ -71,15 +77,15 @@ const initHistoryCharLine = () => {
formatter: "{b} : {c} 元/年" //
},
grid: {
left: '2%',
right: '2%', //
left: '4%',
right: '3%', //
top: '14%',
bottom: '10%',
containLabel: true
},
xAxis: {
type: 'category',
data: ['滴滴', '五粮液项目', '北京易优行广告传媒有限公司', '滴滴', '五粮液项目', '北京易优行广告传媒有限公司', '滴滴'],
data: xData.value,
axisLabel: {
interval: 0, //
rotate: 15, // 45
@ -130,11 +136,11 @@ const initHistoryCharLine = () => {
},
series: [
{
data: [820, 932, 901, 934, 1290, 1330, 1320],
data: yData.value,
type: 'line',
smooth: true,
// symbol: 'circle',
symbolSize: 12,
symbolSize: 12,
itemStyle: {
color: '#FFC63D'
},
@ -146,11 +152,162 @@ const initHistoryCharLine = () => {
]
})
}
//
const initHistoryCharBar = () => {
if (_historyChar.value) _historyChar.value.dispose();
_historyChar.value = echarts.init(historyCharRef.value)
_historyChar.value.setOption({
tooltip: {
trigger: 'item',
formatter: "{b} : {c} 元/年" //
},
grid: {
left: '4%',
right: '3%', //
top: '14%',
bottom: '10%',
containLabel: true
},
xAxis: {
type: 'category',
data: xData.value,
axisLabel: {
interval: 0, //
rotate: 15, // 45
fontSize: 16, //
color: '#808080'
},
axisLine: {
show: false
},
axisTick: {
show: false
},
splitLine: {
lineStyle: {
type: 'dashed',
color: '#eee',
},
show: false
},
},
yAxis: {
name: '实际报价(元/年)',
nameTextStyle: {
color: '#3B3B3B',
fontSize: 16,
fontWeight: '400',
fontFamily: 'Microsoft YaHei',
align: 'center',
},
type: 'value',
axisLabel: {
fontSize: 16,
color: '#808080'
},
axisLine: {
show: false
},
axisTick: {
show: false
},
splitLine: {
lineStyle: {
type: 'solid',
color: '#F1F1F1',
},
show: true
},
},
series: [{
name: '数值',
type: 'bar',
barWidth: '16',
data: yData.value,
itemStyle: {
// color: '#767C81',
//
color: '#1A75E6',
borderRadius: [0, 0, 0, 0] //
},
label: {
show: false,
position: 'top', //
formatter: '{c}',
color: '#333'
}
}]
})
// window.addEventListener("resize", () => {
// _vehicleTrainBarChart.value.resize()
// })
}
const handleChangeType = (val) => {
charsType.value = val
getMediaPriceList()
}
const handleQuery = () => {
getMediaPriceList()
}
const resetQuery = () => {
queryParams.value.startTime = undefined
queryParams.value.endTime = undefined
getMediaPriceList()
}
const getMediaPriceList = () => {
loading.value = true
console.log('查询参数', queryParams.value)
mediaPrice(queryParams.value).then(res => {
historyList.value = res.data
xData.value = []
yData.value = []
res.data.forEach(item => {
xData.value.push(item.supplier)
yData.value.push(parseFloat(item.listPrice))
});
if (xData.value.length > 0) {
nextTick(() => {
if (charsType.value == '1') initHistoryCharLine()
else initHistoryCharBar()
});
}
loading.value = false
})
}
//
const validateStartTime = (val) => {
if (val && queryParams.value.endTime && new Date(val) > new Date(queryParams.value.endTime)) {
proxy.$modal.msgError("开始时间不能晚于结束时间!")
//
queryParams.value.startTime = queryParams.value.endTime;
}
};
//
const validateEndTime = (val) => {
if (val && queryParams.value.startTime && new Date(val) < new Date(queryParams.value.startTime)) {
proxy.$modal.msgError("结束时间不能早于开始时间!")
//
queryParams.value.endTime = queryParams.value.startTime;
}
};
//
const initHistoryData = (_mediaId) => {
historyDataOpen.value = true
nextTick(() => {
if (_mediaId) {
queryParams.value.mediaId = _mediaId
getMediaPriceList()
}
})
}
// \
defineExpose({
historyDataOpen,
initHistoryCharLine
initHistoryData
});
</script>
<style lang='scss'>

View File

@ -571,11 +571,8 @@ const handleAbolish = (row) => {
else proxy.$modal.notify("该媒体已被废除,无需重复操作!")
}
//
const handleHistoryChart = (row) => {
historyDataRef.value.historyDataOpen = true
nextTick(() => {
historyDataRef.value.initHistoryCharLine()
})
const handleHistoryChart = (row) => {
historyDataRef.value.initHistoryData(row.id)
}
//
const handleDownFiles = (row) => {