增加自媒体渠道
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user