库位导入显示进度条
parent
9480a8f874
commit
2c1e96580c
|
|
@ -65,4 +65,11 @@ export const locationApi = {
|
||||||
multipleInsert: (param: object) => {
|
multipleInsert: (param: object) => {
|
||||||
return postRequest('/location/multipleInsert', param);
|
return postRequest('/location/multipleInsert', param);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入 @author hj
|
||||||
|
*/
|
||||||
|
importLocations: (file: object, config = {}) => {
|
||||||
|
return postRequest('/location/importLocations', file, config);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -146,11 +146,12 @@ export const request = (config) => {
|
||||||
/**
|
/**
|
||||||
* post请求
|
* post请求
|
||||||
*/
|
*/
|
||||||
export const postRequest = (url, data) => {
|
export const postRequest = (url, data,configs = {}) => {
|
||||||
return request({
|
return request({
|
||||||
data,
|
data,
|
||||||
url,
|
url,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
|
...configs,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,11 +69,18 @@
|
||||||
|
|
||||||
<a-button @click="showMultipleInsertForm" type="primary" v-privilege="'location:multipleInsert'">
|
<a-button @click="showMultipleInsertForm" type="primary" v-privilege="'location:multipleInsert'">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<EditOutlined/>
|
<PlusOutlined/>
|
||||||
</template>
|
</template>
|
||||||
批量新建
|
批量新建
|
||||||
</a-button>
|
</a-button>
|
||||||
|
|
||||||
|
<a-button @click="showImportModal" type="primary" v-privilege="'location:importLocations'">
|
||||||
|
<template #icon>
|
||||||
|
<ImportOutlined/>
|
||||||
|
</template>
|
||||||
|
导入
|
||||||
|
</a-button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="smart-table-setting-block">
|
<div class="smart-table-setting-block">
|
||||||
<TableOperator v-model="columns" :tableId="TABLE_ID_CONST.BUSINESS.BASE.LOCATION" :refresh="queryData"/>
|
<TableOperator v-model="columns" :tableId="TABLE_ID_CONST.BUSINESS.BASE.LOCATION" :refresh="queryData"/>
|
||||||
|
|
@ -166,6 +173,39 @@
|
||||||
<!-- 批量新建-->
|
<!-- 批量新建-->
|
||||||
<MultipleInsert ref="multipleInsertFormRef" @reloadList="queryData"/>
|
<MultipleInsert ref="multipleInsertFormRef" @reloadList="queryData"/>
|
||||||
|
|
||||||
|
<a-modal v-model:open="importModalShowFlag" title="导入" @onCancel="hideImportModal" @ok="hideImportModal">
|
||||||
|
<div style="text-align: center; width: 400px; margin: 0 auto">
|
||||||
|
<a-button @click="downloadExcel">
|
||||||
|
<download-outlined/>
|
||||||
|
第一步:下载模板
|
||||||
|
</a-button>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<a-upload
|
||||||
|
v-model:fileList="fileList"
|
||||||
|
name="file"
|
||||||
|
:multiple="false"
|
||||||
|
action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
|
||||||
|
accept=".xls,.xlsx"
|
||||||
|
:before-upload="beforeUpload"
|
||||||
|
@remove="handleRemove"
|
||||||
|
>
|
||||||
|
<a-button>
|
||||||
|
<upload-outlined/>
|
||||||
|
第二步:选择文件
|
||||||
|
</a-button>
|
||||||
|
</a-upload>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<a-button @click="onImportLocations">
|
||||||
|
<ImportOutlined/>
|
||||||
|
第三步:开始导入
|
||||||
|
</a-button>
|
||||||
|
<!-- 新增进度条 -->
|
||||||
|
<a-progress v-if="uploadProgress > 0" :percent="uploadProgress" status="active" />
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
|
|
||||||
</a-card>
|
</a-card>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
@ -185,6 +225,7 @@ import SmartEnumSelect from '/@/components/framework/smart-enum-select/index.vue
|
||||||
import DictPreview from '/@/components/dict-preview/index.vue';
|
import DictPreview from '/@/components/dict-preview/index.vue';
|
||||||
import {useDict} from '/@/utils/dict';
|
import {useDict} from '/@/utils/dict';
|
||||||
import MultipleInsert from "/@/views/business/base/location/multiple-insert.vue";
|
import MultipleInsert from "/@/views/business/base/location/multiple-insert.vue";
|
||||||
|
import { UploadFile } from 'ant-design-vue';
|
||||||
|
|
||||||
|
|
||||||
const locType = useDict('LOC_TYPE');
|
const locType = useDict('LOC_TYPE');
|
||||||
|
|
@ -407,4 +448,82 @@ const multipleInsertFormRef = ref();
|
||||||
function showMultipleInsertForm() {
|
function showMultipleInsertForm() {
|
||||||
multipleInsertFormRef.value.showMultipleInsert();
|
multipleInsertFormRef.value.showMultipleInsert();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------- 导出和导入 ---------------------------------
|
||||||
|
// 导入弹窗
|
||||||
|
const importModalShowFlag = ref(false);
|
||||||
|
|
||||||
|
const fileList = ref<UploadFile[]>([])
|
||||||
|
|
||||||
|
// 新增上传进度
|
||||||
|
const uploadProgress = ref(0);
|
||||||
|
|
||||||
|
// 显示导入
|
||||||
|
function showImportModal() {
|
||||||
|
fileList.value = [];
|
||||||
|
uploadProgress.value = 0;
|
||||||
|
importModalShowFlag.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭 导入
|
||||||
|
function hideImportModal() {
|
||||||
|
importModalShowFlag.value = false;
|
||||||
|
uploadProgress.value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//下载模板
|
||||||
|
function downloadExcel() {
|
||||||
|
window.open('https://smartadmin.vip/cdn/%E5%95%86%E5%93%81%E6%A8%A1%E6%9D%BF.xls');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 移除文件
|
||||||
|
function handleRemove(file: UploadFile) {
|
||||||
|
const index = fileList.value.indexOf(file);
|
||||||
|
const newFileList = fileList.value.slice();
|
||||||
|
newFileList.splice(index, 1);
|
||||||
|
fileList.value = newFileList;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上传文件
|
||||||
|
function beforeUpload(file:UploadFile) {
|
||||||
|
fileList.value = [...(fileList.value || []), file];
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//导入
|
||||||
|
async function onImportLocations() {
|
||||||
|
console.log(fileList.value.length);
|
||||||
|
if (fileList.value.length === 0) {
|
||||||
|
return message.error('请选择文件');
|
||||||
|
}
|
||||||
|
const formData = new FormData();
|
||||||
|
fileList.value.forEach((file: UploadFile) => {
|
||||||
|
formData.append('file', file.originFileObj!);
|
||||||
|
});
|
||||||
|
|
||||||
|
SmartLoading.show();
|
||||||
|
try {
|
||||||
|
// 补全进度条的显示代码
|
||||||
|
const config = {
|
||||||
|
onUploadProgress: (progressEvent) => {
|
||||||
|
const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
|
||||||
|
// 更新进度条状态
|
||||||
|
console.log(`上传进度: ${percentCompleted}%`);
|
||||||
|
uploadProgress.value = percentCompleted;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
let res = await locationApi.importLocations(formData, config);
|
||||||
|
message.success(res.msg);
|
||||||
|
await queryData();
|
||||||
|
} catch (e) {
|
||||||
|
smartSentry.captureError(e);
|
||||||
|
message.error('导入失败');
|
||||||
|
} finally {
|
||||||
|
SmartLoading.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue