123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <template>
- <hc-dialog v-model="isShow" ui="hc-exctab-exceltab-excel-upload" title="上传Excel表格" widths="800px" @close="dialogClose">
- <div class="upload-div mb-14px">
- <el-upload
- ref="uploadRef" accept=".xls, .xlsx" class="upload-demo" :auto-upload="false" :file-list="[]"
- :on-change="excelHandleChange" :show-file-list="false" multiple
- >
- <el-button type="primary">选择文件</el-button>
- </el-upload>
- </div>
- <hc-table
- ref="tableRef" :column="tableColumn" :datas="tableData" is-row-drop is-sort heights="auto"
- quick-sort style="height: auto" @row-drop="rowDropTap" @row-sort="rowSortTap"
- >
- <template #name="{ row }">
- <hc-table-input v-model="row.name" placeholder="请输入文件名称" />
- </template>
- <template #action="{ index }">
- <el-link type="danger" @click="delRowClick(index)">删除</el-link>
- </template>
- </hc-table>
- <template #footer>
- <el-button hc-btn @click="dialogClose">取消</el-button>
- <el-button hc-btn type="primary" :disabled="tableData.length <= 0" :loading="submitLoading" @click="dialogSubmit">确认上传</el-button>
- </template>
- </hc-dialog>
- </template>
- <script setup>
- import { nextTick, ref, watch } from 'vue'
- import { getObjValue } from 'js-fast-way'
- import mainApi from '~api/exctab/exceltab'
- const props = defineProps({
- data: {
- type: Object,
- default: () => ({}),
- },
- })
- //事件
- const emit = defineEmits(['finish', 'close'])
- //双向绑定
- const isShow = defineModel('modelValue', {
- default: false,
- })
- //监听可否编辑
- const datas = ref(props.data)
- watch(() => props.data, (val) => {
- datas.value = getObjValue(val)
- }, { immediate: true, deep: true })
- //表格
- const tableRef = ref(null)
- const tableColumn = [
- { key: 'name', name: '文件名称' },
- { key: 'action', name: '操作', width: 80, align: 'center' },
- ]
- const tableData = ref([])
- //上传组件
- const uploadRef = ref(null)
- //文件被选择
- const excelHandleChange = (_, files) => {
- tableData.value = files
- }
- // 行拖拽
- const rowDropTap = (rows) => {
- tableData.value = [] // 先清空,否则排序会异常
- nextTick(() => {
- tableRef.value?.setData(rows)
- })
- }
- // 点击排序
- const rowSortTap = (rows) => {
- tableData.value = [] // 先清空,否则排序会异常
- nextTick(() => {
- tableData.value = rows
- })
- }
- //删除
- const delRowClick = (index) => {
- tableData.value.splice(index, 1)
- }
- //提交
- const submitLoading = ref(false)
- const dialogSubmit = async () => {
- submitLoading.value = true
- let formData = new FormData()
- const rows = tableData.value
- rows.forEach(item => {
- formData.append('file', item.raw, item.name)
- })
- const { id } = datas.value
- formData.append('id', id)
- const { code } = await mainApi.batchUploadExcelTab(formData)
- submitLoading.value = false
- if (code === 200) {
- window.$message.success('保存成功')
- dialogClose()
- emit('finish')
- }
- }
- //关闭弹窗
- const dialogClose = () => {
- uploadRef.value?.clearFiles()
- isShow.value = false
- submitLoading.value = false
- tableData.value = []
- datas.value = {}
- emit('close')
- }
- </script>
- <style lang="scss">
- .el-overlay-dialog .el-dialog.hc-new-dialog.hc-exctab-exceltab-excel-upload .el-dialog__body{
- padding: 12px 0;
- }
- </style>
|