diff --git a/src/components/Form/src/components/Upload.vue b/src/components/Form/src/components/Upload.vue index a0f3a76..6b68dc4 100644 --- a/src/components/Form/src/components/Upload.vue +++ b/src/components/Form/src/components/Upload.vue @@ -56,7 +56,7 @@ :multiple="multiple" :beforeUpload="beforeUpload" :listType="listType" - :show-upload-list="{ showDownloadIcon, showPreviewIcon, showRemoveIcon }" + :show-upload-list="showUploadList" @remove="handleRemove" @download="handleDownload" @preview="handlePreview" @@ -67,7 +67,7 @@
- 点击上传 + {{ btnTip || '点击上传' }}
{{ VITE_GLOB_UPLOAD_ALERT_TIP }} @@ -161,6 +161,16 @@ import { methodOf } from 'lodash-es'; showDownloadIcon: { type: Boolean, default: true + }, + showUploadList: { + type: Boolean, + default: true + }, + fileList: Array, + btnTip: String, + dataDelete: { // 是否调接口删除 + type: Boolean, + default: false } }); @@ -178,9 +188,9 @@ import { methodOf } from 'lodash-es'; tableName.value = data.tableName; columnName.value = data.columnName; }else{ - tableId.value = ''; - tableName.value = ''; - columnName.value = ''; + tableId.value = props.value || ''; + tableName.value = props.tableName || ''; + columnName.value = props.columnName || ''; } } @@ -193,8 +203,35 @@ import { methodOf } from 'lodash-es'; const previewFile = ref(''); const previewTitle = ref(''); + watch( + () => props.fileList, + async (val) => { + if (val) { + fileList.value = props.fileList + if (fileList.value.length) { + fileList.value.forEach((x) => { + x.name = x.fileOrg; + x.url = x.filePath; + x.thumbUrl = x.thUrl; + x.status = 'done'; //没有则不会展示下载按钮 + }); + } + bindValues(fileList.value[0]); + } else { + bindValues(undefined); + } + if (!val) { + fileList.value = []; + } + }, + { + immediate: true + } + ); + const refreshList = async (val:any) => { if (val) { + if (props.dataDelete) return let _list = await getFileList({ tableName: props.tableName, columnName: props.columnName,tableId: props.value }); fileList.value = _list.filter((o) => !removeIds.value.includes(o.id)); if (fileList.value.length) { @@ -205,6 +242,7 @@ import { methodOf } from 'lodash-es'; x.status = 'done'; //没有则不会展示下载按钮 }); bindValues(fileList.value[0]); + emit('change', fileList.value); } } else { bindValues(undefined); @@ -249,10 +287,20 @@ import { methodOf } from 'lodash-es'; }); let tableIdValue = tableId.value; bindValues(res[0]); + if (props.dataDelete) { + let fileArr = res||[] + fileArr.forEach((x) => { + x.status = 'done'; //没有则不会展示下载按钮 + x.url = x.fileUrl; + x.thumbUrl = x.thUrl; + x.name = x.fileOrg; + }); + fileList.value = [...fileList.value, ...fileArr] + } emit('update:value', tableId.value); emit('update:tableName', tableName.value); emit('update:columnName', columnName.value); - emit('change'); + emit('change', fileList.value); if(tableIdValue==tableId.value){ await refreshList(tableId.value); } @@ -293,6 +341,17 @@ import { methodOf } from 'lodash-es'; } const handleRemove = async (info) => { const id = info.response ? info.response.data.id : info.id; + if (props.dataDelete) { + const index = fileList.value.findIndex((x) => x.id === id); + fileList.value.splice(index, 1); + emit('update:value', tableId.value); + emit('change', fileList.value); + notification.success({ + message: 'Tip', + description: '删除成功!' + }); + return + } const status = await deleteFile([id]); if (status) { removeIds.value.push(id); @@ -303,7 +362,7 @@ import { methodOf } from 'lodash-es'; emit('update:value', tableId.value); emit('update:tableName', tableName.value); emit('update:columnName', columnName.value); - emit('change'); + emit('change', fileList.value); await refreshList(tableId.value); notification.success({ message: 'Tip', diff --git a/src/components/Form/src/components/UploadNew.vue b/src/components/Form/src/components/UploadNew.vue index f6ede10..d457136 100644 --- a/src/components/Form/src/components/UploadNew.vue +++ b/src/components/Form/src/components/UploadNew.vue @@ -174,9 +174,9 @@ tableName.value = data.tableName; columnName.value = data.columnName; }else{ - tableId.value = ''; - tableName.value = ''; - columnName.value = ''; + tableId.value = props.value || ''; + tableName.value = props.tableName || ''; + columnName.value = props.columnName || ''; } } const deleteFlag = ref(false); @@ -262,13 +262,14 @@ x.url = x.fileUrl; x.thumbUrl = x.thUrl; x.fileSize = x.fileSize + x.name = x.fileOrg; }); bindValues(res[0]); fileList.value = [...fileList.value, ...fileArr] emit('update:value', tableId.value); emit('update:tableName', tableName.value); emit('update:columnName', columnName.value); - emit('change'); + emit('change', fileList.value); loading.value = false; } catch (error) { console.error(error); diff --git a/src/views/sales/Customer/components/certificateModal.vue b/src/views/sales/Customer/components/certificateModal.vue index 7b7eb91..5a89e84 100644 --- a/src/views/sales/Customer/components/certificateModal.vue +++ b/src/views/sales/Customer/components/certificateModal.vue @@ -33,9 +33,9 @@ -
{{ fileTip }}
- +
@@ -50,11 +50,13 @@ import { Form, message } from 'ant-design-vue'; import { useI18n } from '/@/hooks/web/useI18n'; import type { Rule } from 'ant-design-vue/es/form'; import { useMessage } from '/@/hooks/web/useMessage'; -import UploadNew from '/@/components/Form/src/components/UploadNew.vue'; import { getDocCpList } from '/@/api/sales/Customer'; import type { FormInstance } from 'ant-design-vue'; import dayjs from 'dayjs'; +import Upload from '/@/components/Form/src/components/Upload.vue'; +const tableName = 'Customer' +const columnName = 'fileList' const { t } = useI18n(); const isUpdate = ref(true); const isDisable = ref(false); @@ -68,14 +70,18 @@ const emit = defineEmits(['success','register']); const getTitle = computed(() => (!unref(isUpdate) ? t('新增证书') : t('编辑证书'))); let formState = reactive({ docTypeCode: '', - fileList: [] + fileList: [], + filePath: '' }); const list = ref() const rules = { docTypeCode: [{ required: true, message: "该项为必填项", trigger: 'change' }], }; +const curData = ref() const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { + curData.value = '' + formState.filePath = '' getOption() setModalProps({ confirmLoading: false }); isUpdate.value = !!data?.isUpdate; @@ -85,7 +91,9 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data let dateFrom = data.record?.dateFrom ? dayjs(data.record?.dateFrom) : null let dateTo = data.record?.dateTo ? dayjs(data.record?.dateTo) : null Object.assign(formState, {...data.record,dateFrom, dateTo}) - formState.filePath = formState.fileList[0]?.xjrFileId + let json = JSON.parse(JSON.stringify(data.record)) + formState.filePath = (json?.fileList||[])[0]?.tableId + curData.value = json?.docTypeCode } }); @@ -108,7 +116,7 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data } function changeUplod (val) { formState.fileList = val - console.log(val, 532, formState.filePath) + console.log(val, 532, ) } async function getOption() { optionList = await getDocCpList({'valid': 'Y'}) @@ -124,17 +132,10 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data ...formState, dateFrom: formState.dateFrom ? dayjs(formState.dateFrom).format('YYYY-MM-DD') : '', dateTo: formState.dateTo ? dayjs(formState.dateTo).format('YYYY-MM-DD') : '', - fileList: formState.fileList.map(v => { - return { - fileOrg: v.name, - filePath: v.url, - fileSize: v.fileSize, - xjrFileId: v.tableId - } - }) + fileList: formState.fileList || [] } let idx =list.value.findIndex(v => v.docTypeCode == obj.docTypeCode) - if (idx > -1) { + if (idx > -1 && formState.docTypeCode !=curData.value) { message.warn('证书已存在') formRef.value.resetFields(); closeModal(); diff --git a/src/views/sales/Customer/components/createForm.vue b/src/views/sales/Customer/components/createForm.vue index de901e7..9968154 100644 --- a/src/views/sales/Customer/components/createForm.vue +++ b/src/views/sales/Customer/components/createForm.vue @@ -284,11 +284,15 @@ (上传公司财报等附件)
- +