|
@@ -0,0 +1,127 @@
|
|
|
+<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>
|