增加自媒体渠道

This commit is contained in:
2026-04-23 15:43:22 +08:00
parent 366b005d78
commit 54431cbeb1
19 changed files with 737 additions and 47 deletions
+38 -2
View File
@@ -43,6 +43,24 @@
</el-select>
</el-form-item>
<el-form-item label="自媒体渠道">
<el-select
v-model="queryParams.media_channel_code"
placeholder="全部渠道"
clearable
filterable
style="width: 220px"
@change="handleMediaChannelChange"
>
<el-option
v-for="item in mediaChannelOptions"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="时间范围">
<el-radio-group v-model="queryParams.time_type" @change="handleTimeTypeChange">
<el-radio-button label="today">今天</el-radio-button>
@@ -208,6 +226,11 @@ interface OptionItem {
name: string
}
interface MediaChannelOption {
code: string
name: string
}
interface MetricCard {
key: string
label: string
@@ -227,6 +250,7 @@ const deptTreeOptions = ref<any[]>([])
const deptOptions = ref<OptionItem[]>([])
const assistantOptions = ref<OptionItem[]>([])
const doctorOptions = ref<OptionItem[]>([])
const mediaChannelOptions = ref<MediaChannelOption[]>([])
const filtersLoaded = ref(false)
const overview = reactive<Record<string, any>>({
dimension: 'dept',
@@ -250,6 +274,7 @@ const queryParams = reactive({
dept_id: undefined as number | undefined,
assistant_id: undefined as number | undefined,
doctor_id: undefined as number | undefined,
media_channel_code: '',
time_type: 'today',
start_date: '',
end_date: ''
@@ -367,8 +392,8 @@ const fanPieHasData = computed(() => overview.charts.fan_share.length > 0)
const rankingChartData = computed(() => {
const ranking = overview.charts?.ranking || {}
const names = Array.isArray(ranking.names) ? ranking.names : []
const normalize = (values: unknown[]) => names.map((_, index) => Number(values?.[index] ?? 0))
const names: unknown[] = Array.isArray(ranking.names) ? ranking.names : []
const normalize = (values: unknown[]) => names.map((_: unknown, index: number) => Number(values?.[index] ?? 0))
return {
names,
@@ -505,6 +530,7 @@ const applyFilterOptions = (filters?: Record<string, any>) => {
const departments = Array.isArray(filters.departments) ? filters.departments : []
const assistants = Array.isArray(filters.assistants) ? filters.assistants : []
const doctors = Array.isArray(filters.doctors) ? filters.doctors : []
const mediaChannels = Array.isArray(filters.media_channels) ? filters.media_channels : []
deptTreeOptions.value = departments
deptOptions.value = flattenDepts(departments)
@@ -516,6 +542,10 @@ const applyFilterOptions = (filters?: Record<string, any>) => {
id: Number(item.id),
name: item.name,
}))
mediaChannelOptions.value = mediaChannels.map((item: any) => ({
code: String(item.code || ''),
name: String(item.name || ''),
}))
}
const fetchOverview = async () => {
@@ -540,6 +570,11 @@ const handleEntityChange = () => {
fetchOverview()
}
const handleMediaChannelChange = () => {
pager.page = 1
fetchOverview()
}
const handleTimeTypeChange = () => {
if (queryParams.time_type !== 'custom') {
dateRange.value = []
@@ -565,6 +600,7 @@ const handleReset = () => {
queryParams.dept_id = undefined
queryParams.assistant_id = undefined
queryParams.doctor_id = undefined
queryParams.media_channel_code = ''
queryParams.time_type = 'today'
dateRange.value = []
pager.page = 1