|
@@ -24,19 +24,33 @@ import {
|
|
|
newVersionApi,
|
|
newVersionApi,
|
|
|
syncVersionApi
|
|
syncVersionApi
|
|
|
} from '@/api/version'
|
|
} from '@/api/version'
|
|
|
|
|
+import { getChannelListApi } from '@/api/channel'
|
|
|
|
|
+import type { ChannelData } from '@/api/channel/types'
|
|
|
|
|
|
|
|
interface Params {
|
|
interface Params {
|
|
|
pageIndex?: number
|
|
pageIndex?: number
|
|
|
pageSize?: number
|
|
pageSize?: number
|
|
|
|
|
+ channel?: string
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const { t } = useI18n()
|
|
const { t } = useI18n()
|
|
|
|
|
|
|
|
|
|
+const getChannelLabel = (code: string) => {
|
|
|
|
|
+ console.log(code)
|
|
|
|
|
+ const c = channelOptions.value.find((x) => x.code === code)
|
|
|
|
|
+ return c ? c.name : code
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const columns: TableColumn[] = [
|
|
const columns: TableColumn[] = [
|
|
|
{
|
|
{
|
|
|
field: 'name',
|
|
field: 'name',
|
|
|
label: t('version_server.title')
|
|
label: t('version_server.title')
|
|
|
},
|
|
},
|
|
|
|
|
+ {
|
|
|
|
|
+ field: 'channel',
|
|
|
|
|
+ label: t('version_server.channel'),
|
|
|
|
|
+ formatter: (row) => getChannelLabel(row.channel)
|
|
|
|
|
+ },
|
|
|
{
|
|
{
|
|
|
field: 'version',
|
|
field: 'version',
|
|
|
label: t('version_server.number')
|
|
label: t('version_server.number')
|
|
@@ -89,26 +103,36 @@ const loading = ref(true)
|
|
|
const drawerText = ref('')
|
|
const drawerText = ref('')
|
|
|
|
|
|
|
|
const versionDataList = ref<VersionData[]>([])
|
|
const versionDataList = ref<VersionData[]>([])
|
|
|
-const selectedChannel = ref<string>('wx')
|
|
|
|
|
-const appliedChannel = ref<string>('wx')
|
|
|
|
|
|
|
+const selectedChannel = ref<string>('')
|
|
|
|
|
+const appliedChannel = ref<string>('')
|
|
|
|
|
|
|
|
-// 渠道选项:写死 wx 和 抖音
|
|
|
|
|
-const channelOptions = ['wx', '抖音']
|
|
|
|
|
|
|
+// 渠道选项:从后端获取
|
|
|
|
|
+const channelOptions = ref<ChannelData[]>([])
|
|
|
|
|
|
|
|
-// 根据渠道筛选后的列表(点击确定后应用)
|
|
|
|
|
-const filteredVersionList = computed(() => {
|
|
|
|
|
- if (!appliedChannel.value) return versionDataList.value
|
|
|
|
|
- return versionDataList.value.filter((item) => item.name === appliedChannel.value)
|
|
|
|
|
-})
|
|
|
|
|
|
|
+const getChannelList = async () => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await getChannelListApi({ pageIndex: 1, pageSize: 100 })
|
|
|
|
|
+ const list = res?.data?.list ?? (Array.isArray(res?.data) ? res.data : [])
|
|
|
|
|
+ channelOptions.value = list.filter((c) => c && c.status !== false)
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.warn('[渠道列表] 请求失败:', e)
|
|
|
|
|
+ channelOptions.value = []
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
const applyChannelFilter = () => {
|
|
const applyChannelFilter = () => {
|
|
|
- appliedChannel.value = selectedChannel.value
|
|
|
|
|
|
|
+ getVersionList({
|
|
|
|
|
+ pageIndex: 1,
|
|
|
|
|
+ pageSize: 10,
|
|
|
|
|
+ channel: selectedChannel.value
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const form = reactive({
|
|
const form = reactive({
|
|
|
type: 'new',
|
|
type: 'new',
|
|
|
data: {
|
|
data: {
|
|
|
id: '',
|
|
id: '',
|
|
|
|
|
+ channel: '',
|
|
|
version: '',
|
|
version: '',
|
|
|
name: '',
|
|
name: '',
|
|
|
cdn: '',
|
|
cdn: '',
|
|
@@ -119,6 +143,7 @@ const form = reactive({
|
|
|
|
|
|
|
|
const formReset = () => {
|
|
const formReset = () => {
|
|
|
form.data.id = ''
|
|
form.data.id = ''
|
|
|
|
|
+ form.data.channel = ''
|
|
|
form.data.version = ''
|
|
form.data.version = ''
|
|
|
form.data.name = ''
|
|
form.data.name = ''
|
|
|
form.data.cdn = ''
|
|
form.data.cdn = ''
|
|
@@ -167,6 +192,7 @@ const editVersion = async (params) => {
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+getChannelList()
|
|
|
getVersionList()
|
|
getVersionList()
|
|
|
|
|
|
|
|
const updateDefaultStatus = async (row: VersionData, val) => {
|
|
const updateDefaultStatus = async (row: VersionData, val) => {
|
|
@@ -209,6 +235,7 @@ const syncVersion = async () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const actionFn = (type: string, data: any) => {
|
|
const actionFn = (type: string, data: any) => {
|
|
|
|
|
+ getChannelList()
|
|
|
if (type == 'new') {
|
|
if (type == 'new') {
|
|
|
formReset()
|
|
formReset()
|
|
|
form.type = 'new'
|
|
form.type = 'new'
|
|
@@ -217,6 +244,7 @@ const actionFn = (type: string, data: any) => {
|
|
|
if (type == 'edit') {
|
|
if (type == 'edit') {
|
|
|
form.type = 'edit'
|
|
form.type = 'edit'
|
|
|
drawerText.value = t('version_server.edit')
|
|
drawerText.value = t('version_server.edit')
|
|
|
|
|
+ form.data.channel = data.channel
|
|
|
form.data.id = data.id.id
|
|
form.data.id = data.id.id
|
|
|
form.data.cdn = data.cdn
|
|
form.data.cdn = data.cdn
|
|
|
form.data.url = data.url
|
|
form.data.url = data.url
|
|
@@ -230,6 +258,7 @@ const actionFn = (type: string, data: any) => {
|
|
|
const closeDrawer = () => {
|
|
const closeDrawer = () => {
|
|
|
drawer.value = false
|
|
drawer.value = false
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
|
<template>
|
|
@@ -256,7 +285,8 @@ const closeDrawer = () => {
|
|
|
:placeholder="t('version_server.channelSelect')"
|
|
:placeholder="t('version_server.channelSelect')"
|
|
|
style="width: 180px"
|
|
style="width: 180px"
|
|
|
>
|
|
>
|
|
|
- <ElOption v-for="opt in channelOptions" :key="opt" :label="opt" :value="opt" />
|
|
|
|
|
|
|
+ <ElOption :label="t('version_server.allChannels')" value="" />
|
|
|
|
|
+ <ElOption v-for="c in channelOptions" :key="c.code" :label="c.name" :value="c.code" />
|
|
|
</ElSelect>
|
|
</ElSelect>
|
|
|
<ElButton type="primary" @click="applyChannelFilter">
|
|
<ElButton type="primary" @click="applyChannelFilter">
|
|
|
{{ t('version_server.confirm') }}
|
|
{{ t('version_server.confirm') }}
|
|
@@ -275,16 +305,37 @@ const closeDrawer = () => {
|
|
|
<ContentWrap>
|
|
<ContentWrap>
|
|
|
<Table
|
|
<Table
|
|
|
:columns="columns"
|
|
:columns="columns"
|
|
|
- :data="filteredVersionList"
|
|
|
|
|
|
|
+ :data="versionDataList"
|
|
|
:loading="loading"
|
|
:loading="loading"
|
|
|
:defaultSort="{ prop: 'display_time', order: 'descending' }"
|
|
:defaultSort="{ prop: 'display_time', order: 'descending' }"
|
|
|
/>
|
|
/>
|
|
|
</ContentWrap>
|
|
</ContentWrap>
|
|
|
- <ElDrawer v-model="drawer" direction="rtl" size="40%" :z-index="4000">
|
|
|
|
|
|
|
+ <ElDrawer
|
|
|
|
|
+ v-model="drawer"
|
|
|
|
|
+ direction="rtl"
|
|
|
|
|
+ size="40%"
|
|
|
|
|
+ >
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<span class="text-16px font-700">{{ drawerText }}</span>
|
|
<span class="text-16px font-700">{{ drawerText }}</span>
|
|
|
</template>
|
|
</template>
|
|
|
<ElForm :model="form" label-width="auto" style="max-width: 600px">
|
|
<ElForm :model="form" label-width="auto" style="max-width: 600px">
|
|
|
|
|
+ <ElFormItem :label="t('version_server.channel')" required>
|
|
|
|
|
+ <ElSelect
|
|
|
|
|
+ v-model="form.data.channel"
|
|
|
|
|
+ :placeholder="
|
|
|
|
|
+ channelOptions.length
|
|
|
|
|
+ ? t('version_server.channelSelect')
|
|
|
|
|
+ : t('version_server.channelEmpty')
|
|
|
|
|
+ "
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ :disabled="form.type == 'edit'"
|
|
|
|
|
+ >
|
|
|
|
|
+ <ElOption v-for="c in channelOptions" :key="c.code" :label="c.name" :value="c.code" />
|
|
|
|
|
+ </ElSelect>
|
|
|
|
|
+ <div v-if="!channelOptions.length" class="el-form-item__error">
|
|
|
|
|
+ {{ t('version_server.channelEmptyTip') }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </ElFormItem>
|
|
|
<ElFormItem :label="t('version_server.title')">
|
|
<ElFormItem :label="t('version_server.title')">
|
|
|
<ElInput v-model="form.data.name" />
|
|
<ElInput v-model="form.data.name" />
|
|
|
</ElFormItem>
|
|
</ElFormItem>
|