123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <template>
- <BasicModal
- v-bind="$attrs"
- @register="register"
- :title="t('routes.scenes.downloadScene')"
- :showCancelBtn="false"
- :okText="downloadInfo.isDownloaded ? t('common.okText') : t('routes.scenes.cancelDownload')"
- @ok="handleSubmit"
- @cancel="cancelDownload"
- >
- <div class="pt-20px">
- <BasicForm @register="registerForm">
- <template #label="{ model, field }">
- {{ model[field] }}
- </template>
- <template #process> {{ downloadInfo.process }} % </template>
- <template #status> {{ downloadInfo.status }} </template>
- </BasicForm>
- </div>
- <template #centerFooter>
- <!-- <a-button>xxxx</a-button> -->
- </template>
- </BasicModal>
- </template>
- <script lang="ts">
- import { defineComponent, reactive, ref, watch } from 'vue';
- import { BasicModal, useModalInner } from '/@/components/Modal';
- import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
- // import { BasicTable, useTable, BasicColumn, FormSchema } from '/@/components/Table';
- // import { useMessage } from '/@/hooks/web/useMessage';
- // import { checkUserAddAble } from '/@/api/corporation/modal';
- import { useI18n } from '/@/hooks/web/useI18n';
- import { getDownloadProcessApi } from '/@/api/scene/list';
- // import { bindAnchorListParam } from '/@/api/scene/model';
- // import { Time } from '/@/components/Time';
- // import { useUserStore } from '/@/store/modules/user';
- import {
- downloadByUrl,
- // downloadByData,
- // downloadByBase64,
- // downloadByOnlineUrl,
- } from '/@/utils/file/download';
- const schemas: FormSchema[] = [
- {
- field: 'sceneName',
- label: '场景名称:',
- component: 'Input',
- slot: 'label',
- },
- {
- field: 'process',
- label: '下载进度:',
- component: 'Input',
- slot: 'process',
- },
- {
- field: 'status',
- label: '状态:',
- component: 'Input',
- slot: 'status',
- },
- ];
- export default defineComponent({
- components: { BasicModal, BasicForm },
- props: {
- userData: { type: Object },
- },
- emits: ['register', 'success'],
- setup() {
- const { t } = useI18n();
- // const { createMessage } = useMessage();
- const sceneNum = ref('');
- const finishDowloadUrl = ref('');
- const downloadInfo = reactive<Recordable>({});
- downloadInfo.timer = null;
- downloadInfo.process = 0;
- downloadInfo.status = '下载中';
- downloadInfo.isDownloaded = false;
- const [registerForm, { setFieldsValue }] = useForm({
- schemas: schemas,
- labelWidth: 120,
- showActionButtonGroup: false,
- actionColOptions: {
- span: 24,
- },
- // submitFunc: handleSubmit,
- });
- const [register, { closeModal }] = useModalInner((data) => {
- data && onDataReceive(data);
- });
- function onDataReceive(data) {
- console.log('Data Received', data, data.num);
- setFieldsValue({
- ...data,
- });
- sceneNum.value = data.num;
- }
- const handleSubmit = async () => {
- try {
- cancelDownload();
- closeModal();
- if (downloadInfo.isDownloaded) {
- downloadByUrl({
- url: finishDowloadUrl.value as any as string,
- target: '_self',
- });
- }
- } catch (error) {}
- };
- async function getDownloadInfo(sceneNum: string) {
- downloadInfo.timer = setInterval(async () => {
- const res = await getDownloadProcessApi({ sceneNum });
- console.log('res', res);
- const percent = res.percent && Math.round(res.percent);
- downloadInfo.process = percent;
- if (res.status === 1000) {
- downloadInfo.status = '获取中';
- }
- if (res.status === 1002 && res.url) {
- cancelDownload();
- finishDowloadUrl.value = res.url;
- downloadInfo.isDownloaded = true;
- downloadInfo.status = '获取成功';
- handleSubmit();
- }
- }, 2000);
- }
- function cancelDownload() {
- clearInterval(downloadInfo.timer);
- sceneNum.value = '';
- }
- watch(
- () => sceneNum.value,
- () => {
- console.log('sceneNum', sceneNum.value);
- if (sceneNum.value) {
- getDownloadInfo(sceneNum.value);
- }
- },
- );
- return {
- t,
- register,
- schemas,
- handleSubmit,
- closeModal,
- registerForm,
- downloadInfo,
- cancelDownload,
- };
- },
- });
- </script>
|