|
|
@@ -1,10 +1,20 @@
|
|
|
<script setup lang="tsx">
|
|
|
-import { ElButton, ElSwitch, ElDrawer, ElForm, ElFormItem, ElInput, ElTooltip } from 'element-plus'
|
|
|
+import {
|
|
|
+ ElButton,
|
|
|
+ ElSwitch,
|
|
|
+ ElDrawer,
|
|
|
+ ElForm,
|
|
|
+ ElFormItem,
|
|
|
+ ElInput,
|
|
|
+ ElTooltip,
|
|
|
+ ElSelect,
|
|
|
+ ElOption
|
|
|
+} from 'element-plus'
|
|
|
import { ContentWrap } from '@/components/ContentWrap'
|
|
|
import { useI18n } from '@/hooks/web/useI18n'
|
|
|
import { Table, TableColumn } from '@/components/Table'
|
|
|
import { VersionData } from '@/api/version/types'
|
|
|
-import { ref, h, reactive } from 'vue'
|
|
|
+import { ref, h, reactive, computed } from 'vue'
|
|
|
import { Connection } from '@element-plus/icons-vue'
|
|
|
import { BaseButton } from '@/components/Button'
|
|
|
import {
|
|
|
@@ -25,23 +35,23 @@ const { t } = useI18n()
|
|
|
const columns: TableColumn[] = [
|
|
|
{
|
|
|
field: 'name',
|
|
|
- label: t('version.title')
|
|
|
+ label: t('version_server.title')
|
|
|
},
|
|
|
{
|
|
|
field: 'version',
|
|
|
- label: t('version.number')
|
|
|
+ label: t('version_server.number')
|
|
|
},
|
|
|
{
|
|
|
field: 'url',
|
|
|
- label: t('version.url')
|
|
|
+ label: t('version_server.url')
|
|
|
},
|
|
|
{
|
|
|
field: 'cdn',
|
|
|
- label: t('version.cdn')
|
|
|
+ label: t('version_server.cdn')
|
|
|
},
|
|
|
{
|
|
|
field: 'default',
|
|
|
- label: t('version.default'),
|
|
|
+ label: t('version_server.default'),
|
|
|
slots: {
|
|
|
default: (data) => {
|
|
|
return (
|
|
|
@@ -57,16 +67,16 @@ const columns: TableColumn[] = [
|
|
|
},
|
|
|
{
|
|
|
field: 'action',
|
|
|
- label: t('version.action'),
|
|
|
+ label: t('version_server.action'),
|
|
|
slots: {
|
|
|
default: (data) => {
|
|
|
return (
|
|
|
<>
|
|
|
<BaseButton type="primary" onClick={() => actionFn('edit', data.row)}>
|
|
|
- {t('version.action')}
|
|
|
+ {t('version_server.action')}
|
|
|
</BaseButton>
|
|
|
<BaseButton type="danger" onClick={() => deleteFn(data.row)}>
|
|
|
- {t('version.delete')}
|
|
|
+ {t('version_server.delete')}
|
|
|
</BaseButton>
|
|
|
</>
|
|
|
)
|
|
|
@@ -79,6 +89,21 @@ const loading = ref(true)
|
|
|
const drawerText = ref('')
|
|
|
|
|
|
const versionDataList = ref<VersionData[]>([])
|
|
|
+const selectedChannel = ref<string>('wx')
|
|
|
+const appliedChannel = ref<string>('wx')
|
|
|
+
|
|
|
+// 渠道选项:写死 wx 和 抖音
|
|
|
+const channelOptions = ['wx', '抖音']
|
|
|
+
|
|
|
+// 根据渠道筛选后的列表(点击确定后应用)
|
|
|
+const filteredVersionList = computed(() => {
|
|
|
+ if (!appliedChannel.value) return versionDataList.value
|
|
|
+ return versionDataList.value.filter((item) => item.name === appliedChannel.value)
|
|
|
+})
|
|
|
+
|
|
|
+const applyChannelFilter = () => {
|
|
|
+ appliedChannel.value = selectedChannel.value
|
|
|
+}
|
|
|
|
|
|
const form = reactive({
|
|
|
type: 'new',
|
|
|
@@ -187,11 +212,11 @@ const actionFn = (type: string, data: any) => {
|
|
|
if (type == 'new') {
|
|
|
formReset()
|
|
|
form.type = 'new'
|
|
|
- drawerText.value = t('version.new')
|
|
|
+ drawerText.value = t('version_server.new')
|
|
|
}
|
|
|
if (type == 'edit') {
|
|
|
form.type = 'edit'
|
|
|
- drawerText.value = t('version.edit')
|
|
|
+ drawerText.value = t('version_server.edit')
|
|
|
form.data.id = data.id.id
|
|
|
form.data.cdn = data.cdn
|
|
|
form.data.url = data.url
|
|
|
@@ -209,10 +234,35 @@ const closeDrawer = () => {
|
|
|
|
|
|
<template>
|
|
|
<ContentWrap>
|
|
|
- <div style="display: flex; justify-content: space-between; align-items: center">
|
|
|
- <ElButton type="primary" @click="() => actionFn('new', null)">
|
|
|
- {{ t('version.new') }}
|
|
|
- </ElButton>
|
|
|
+ <div
|
|
|
+ style="
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 12px;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <div style="display: flex; align-items: center; gap: 12px">
|
|
|
+ <ElButton type="primary" @click="() => actionFn('new', null)">
|
|
|
+ {{ t('version_server.new') }}
|
|
|
+ </ElButton>
|
|
|
+ <div style="display: flex; align-items: center; gap: 8px">
|
|
|
+ <span style="font-size: 14px; color: var(--el-text-color-regular)">
|
|
|
+ {{ t('version_server.channelSelect') }}:
|
|
|
+ </span>
|
|
|
+ <ElSelect
|
|
|
+ v-model="selectedChannel"
|
|
|
+ :placeholder="t('version_server.channelSelect')"
|
|
|
+ style="width: 180px"
|
|
|
+ >
|
|
|
+ <ElOption v-for="opt in channelOptions" :key="opt" :label="opt" :value="opt" />
|
|
|
+ </ElSelect>
|
|
|
+ <ElButton type="primary" @click="applyChannelFilter">
|
|
|
+ {{ t('version_server.confirm') }}
|
|
|
+ </ElButton>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<ElTooltip content="同步版本列表" placement="top">
|
|
|
<ElButton type="primary" circle @click="() => syncVersion()">
|
|
|
<template #icon>
|
|
|
@@ -225,7 +275,7 @@ const closeDrawer = () => {
|
|
|
<ContentWrap>
|
|
|
<Table
|
|
|
:columns="columns"
|
|
|
- :data="versionDataList"
|
|
|
+ :data="filteredVersionList"
|
|
|
:loading="loading"
|
|
|
:defaultSort="{ prop: 'display_time', order: 'descending' }"
|
|
|
/>
|
|
|
@@ -235,16 +285,16 @@ const closeDrawer = () => {
|
|
|
<span class="text-16px font-700">{{ drawerText }}</span>
|
|
|
</template>
|
|
|
<ElForm :model="form" label-width="auto" style="max-width: 600px">
|
|
|
- <ElFormItem :label="t('version.title')">
|
|
|
+ <ElFormItem :label="t('version_server.title')">
|
|
|
<ElInput v-model="form.data.name" />
|
|
|
</ElFormItem>
|
|
|
- <ElFormItem :label="t('version.number')">
|
|
|
+ <ElFormItem :label="t('version_server.number')">
|
|
|
<el-input v-model="form.data.version" />
|
|
|
</ElFormItem>
|
|
|
- <ElFormItem :label="t('version.url')">
|
|
|
+ <ElFormItem :label="t('version_server.url')">
|
|
|
<el-input v-model="form.data.url" />
|
|
|
</ElFormItem>
|
|
|
- <ElFormItem :label="t('version.cdn')">
|
|
|
+ <ElFormItem :label="t('version_server.cdn')">
|
|
|
<el-input v-model="form.data.cdn" />
|
|
|
</ElFormItem>
|
|
|
<ElFormItem>
|