| | |
| | | <script setup lang="tsx"> |
| | | import { computed, onMounted, reactive, ref } from 'vue' |
| | | import { useRouter } from 'vue-router' |
| | | import { computed, onActivated, onMounted, reactive, ref } from 'vue' |
| | | import type { DataTableColumns, FormInst, FormRules, UploadFileInfo } from 'naive-ui' |
| | | import { NButton } from 'naive-ui' |
| | | import dayjs from 'dayjs' |
| | |
| | | import { fetchAppVersionPage, releaseAppVersion } from '@/service/api/appVersion' |
| | | import type { AppVersionItem } from '@/service/api/appVersion' |
| | | import Pagination from '@/components/common/Pagination.vue' |
| | | import OperationLogModal from '@/components/custom/OperationLogModal.vue' |
| | | |
| | | const router = useRouter() |
| | | const listData = ref<AppVersionItem[]>([]) |
| | | const loading = ref(false) |
| | | const showForm = ref(false) |
| | |
| | | }, |
| | | ]) |
| | | |
| | | const showOperationLogModal = ref(false) |
| | | |
| | | function handleOpenOperationLog() { |
| | | showOperationLogModal.value = true |
| | | } |
| | | |
| | | async function getData() { |
| | | loading.value = true |
| | | try { |
| | |
| | | window.$message?.error('请完善必填信息') |
| | | return |
| | | } |
| | | console.log('androidUploading.value || iosUploading.value', androidUploading.value, iosUploading.value) |
| | | |
| | | if (androidUploading.value || iosUploading.value) { |
| | | window.$message?.error('请等待文件上传完成') |
| | |
| | | updateDescription: formModel.value.updateNote, |
| | | forceUpdateFlag: formModel.value.isForceUpdate ? 1 : 0, |
| | | } |
| | | console.log('formModel formModel.value', formModel.value) |
| | | |
| | | if (!params.androidFile || !params.iosFile) { |
| | | window.$message?.error('请等待文件上传完成') |
| | | return |
| | |
| | | originalOnError?.() |
| | | } |
| | | try { |
| | | let res = await customUploadRequest(options) |
| | | const res = await customUploadRequest(options) |
| | | if (!res) { |
| | | formModel.value.androidFiles = [] |
| | | } |
| | |
| | | originalOnError?.() |
| | | } |
| | | try { |
| | | let res = await customUploadRequest(options) |
| | | const res = await customUploadRequest(options) |
| | | if (!res) { |
| | | formModel.value.iosFiles = [] |
| | | } |
| | |
| | | onMounted(() => { |
| | | getData() |
| | | }) |
| | | |
| | | onActivated(() => { |
| | | if (window.sessionStorage.getItem('appVersionManageNeedRefresh') === '1') { |
| | | window.sessionStorage.removeItem('appVersionManageNeedRefresh') |
| | | getData() |
| | | } |
| | | }) |
| | | </script> |
| | | |
| | | <template> |
| | |
| | | <n-card class="flex-1 robotaxi-table-card"> |
| | | <template #header> |
| | | <div class="flex items-center justify-between"> |
| | | <div class="flex items-center relative pl-3"> |
| | | <!-- <div class="absolute left-0 top-1/2 -translate-y-1/2 w-1 h-4 bg-[#0068FF] rounded-sm" /> |
| | | <span class="text-base font-bold text-[#1D2129] ml-2">APP版本管理</span> --> |
| | | <div class="flex items-center"> |
| | | <NButton v-permission="20212" @click="handleOpenOperationLog"> |
| | | 操作日志 |
| | | </NButton> |
| | | </div> |
| | | <div v-permission="20221"> |
| | | <NButton style="height: 32px; background-color: #E6F4FF; color: #0068FF; border: 1px solid #7ABDFF" @click="handleAdd"> |
| | | <NButton secondary type="primary" @click="handleAdd"> |
| | | 新增版本号 |
| | | </NButton> |
| | | </div> |
| | |
| | | flex-height |
| | | :header-height="18" |
| | | :row-height="18" |
| | | /> |
| | | > |
| | | <template #empty> |
| | | <div class="flex-center"> |
| | | <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }"> |
| | | </div> |
| | | </template> |
| | | </n-data-table> |
| | | <Pagination |
| | | :count="pagination.itemCount" |
| | | :page="pagination.page" |
| | |
| | | :model="formModel" |
| | | :rules="rules" |
| | | label-placement="left" |
| | | label-width="auto" |
| | | :label-width="88" |
| | | label-align="left" |
| | | :content-style="{ |
| | | padding: '16px 24px 24px 24px', |
| | | }" |
| | | require-mark-placement="left" |
| | | :disabled="formMode === 'view'" |
| | | inline |
| | | > |
| | | <n-grid :cols="2" :x-gap="16" :y-gap="8"> |
| | | <n-gi :span="2"> |
| | | <n-form-item label="版本号" path="version"> |
| | | <n-input v-model:value="formModel.version" placeholder="请输入版本号" /> |
| | | </n-form-item> |
| | | </n-gi> |
| | | <n-gi> |
| | | <div class="flex flex-col gap-8px"> |
| | | <n-form-item label="版本号" path="version"> |
| | | <n-input v-model:value="formModel.version" placeholder="请输入版本号" /> |
| | | </n-form-item> |
| | | <div class="flex "> |
| | | <n-form-item label="安卓文件" path="androidFiles" required> |
| | | <div class="flex flex-col gap-2"> |
| | | <n-upload |
| | |
| | | </div> |
| | | </div> |
| | | </n-form-item> |
| | | </n-gi> |
| | | <n-gi> |
| | | <n-form-item label="iOS 文件" path="iosFiles" required> |
| | | <div class="flex flex-col gap-2"> |
| | | <n-upload |
| | |
| | | </div> |
| | | </div> |
| | | </n-form-item> |
| | | </n-gi> |
| | | <n-gi :span="2"> |
| | | </div> |
| | | <div> |
| | | <n-form-item label="强制更新" path="isForceUpdate"> |
| | | <n-switch v-model:value="formModel.isForceUpdate" /> |
| | | </n-form-item> |
| | | </n-gi> |
| | | <n-gi :span="2"> |
| | | <n-form-item label="更新说明" path="updateNote" required label-placement="top"> |
| | | </div> |
| | | <div> |
| | | <n-form-item label="更新说明" path="updateNote" required> |
| | | <n-input |
| | | v-model:value="formModel.updateNote" |
| | | type="textarea" |
| | |
| | | :autosize="{ minRows: 4, maxRows: 8 }" |
| | | /> |
| | | </n-form-item> |
| | | </n-gi> |
| | | </n-grid> |
| | | </div> |
| | | </div> |
| | | </n-form> |
| | | <template v-if="formMode !== 'view'" #action> |
| | | <div class="flex justify-end gap-3"> |
| | | <NButton @click="handleCancel"> |
| | | 取消 |
| | | </NButton> |
| | | <NButton v-if="formMode !== 'view'" type="primary" @click="handleConfirm"> |
| | | <NButton type="primary" @click="handleConfirm"> |
| | | 保存 |
| | | </NButton> |
| | | </div> |
| | | </template> |
| | | </n-modal> |
| | | </n-card> |
| | | |
| | | <OperationLogModal v-model:show="showOperationLogModal" /> |
| | | </div> |
| | | </template> |