diff --git a/src/components/Form/index.ts b/src/components/Form/index.ts index d3be25e9..d85b3c51 100644 --- a/src/components/Form/index.ts +++ b/src/components/Form/index.ts @@ -13,6 +13,5 @@ export { default as ApiTree } from './src/components/ApiTree.vue'; export { default as ApiRadioGroup } from './src/components/ApiRadioGroup.vue'; export { default as ApiCascader } from './src/components/ApiCascader.vue'; export { default as ApiTransfer } from './src/components/ApiTransfer.vue'; -export { default as ImageUpload } from './src/components/ImageUpload.vue'; export { BasicForm }; diff --git a/src/components/Form/src/componentMap.ts b/src/components/Form/src/componentMap.ts index f33a5890..3168bb28 100644 --- a/src/components/Form/src/componentMap.ts +++ b/src/components/Form/src/componentMap.ts @@ -27,8 +27,7 @@ import ApiTree from './components/ApiTree.vue'; import ApiTreeSelect from './components/ApiTreeSelect.vue'; import ApiCascader from './components/ApiCascader.vue'; import ApiTransfer from './components/ApiTransfer.vue'; -import ImageUpload from './components/ImageUpload.vue'; -import { BasicUpload } from '/@/components/Upload'; +import { BasicUpload, ImageUpload } from '/@/components/Upload'; import { StrengthMeter } from '/@/components/StrengthMeter'; import { IconPicker } from '/@/components/Icon'; import { CountdownInput } from '/@/components/CountDown'; diff --git a/src/components/Form/src/components/ImageUpload.vue b/src/components/Form/src/components/ImageUpload.vue deleted file mode 100644 index 22fec05e..00000000 --- a/src/components/Form/src/components/ImageUpload.vue +++ /dev/null @@ -1,253 +0,0 @@ - - - - - diff --git a/src/components/Modal/src/index.less b/src/components/Modal/src/index.less index 26a6d9ab..5071f955 100644 --- a/src/components/Modal/src/index.less +++ b/src/components/Modal/src/index.less @@ -82,7 +82,7 @@ display: inline-block; width: 96px; height: 56px; - line-height: 56px; + line-height: 56px !important; } &-confirm-body { diff --git a/src/components/Upload/index.ts b/src/components/Upload/index.ts index 568a7d98..325a3963 100644 --- a/src/components/Upload/index.ts +++ b/src/components/Upload/index.ts @@ -1,4 +1,6 @@ import { withInstall } from '/@/utils'; import basicUpload from './src/BasicUpload.vue'; +import uploadImage from './src/components/ImageUpload.vue'; +export const ImageUpload = withInstall(uploadImage); export const BasicUpload = withInstall(basicUpload); diff --git a/src/components/Upload/src/BasicUpload.vue b/src/components/Upload/src/BasicUpload.vue index 6152c6b9..a8d0b2fb 100644 --- a/src/components/Upload/src/BasicUpload.vue +++ b/src/components/Upload/src/BasicUpload.vue @@ -47,8 +47,8 @@ import { omit } from 'lodash-es'; import { useI18n } from '/@/hooks/web/useI18n'; import { isArray } from '/@/utils/is'; - import UploadModal from './UploadModal.vue'; - import UploadPreviewModal from './UploadPreviewModal.vue'; + import UploadModal from './components/UploadModal.vue'; + import UploadPreviewModal from './components/UploadPreviewModal.vue'; export default defineComponent({ name: 'BasicUpload', diff --git a/src/components/Upload/src/FileList.vue b/src/components/Upload/src/components/FileList.vue similarity index 98% rename from src/components/Upload/src/FileList.vue rename to src/components/Upload/src/components/FileList.vue index 5f86771e..9d32018b 100644 --- a/src/components/Upload/src/FileList.vue +++ b/src/components/Upload/src/components/FileList.vue @@ -1,5 +1,5 @@ + + diff --git a/src/components/Upload/src/ThumbUrl.vue b/src/components/Upload/src/components/ThumbUrl.vue similarity index 100% rename from src/components/Upload/src/ThumbUrl.vue rename to src/components/Upload/src/components/ThumbUrl.vue diff --git a/src/components/Upload/src/UploadModal.vue b/src/components/Upload/src/components/UploadModal.vue similarity index 95% rename from src/components/Upload/src/UploadModal.vue rename to src/components/Upload/src/components/UploadModal.vue index 8b8378e7..f9770177 100644 --- a/src/components/Upload/src/UploadModal.vue +++ b/src/components/Upload/src/components/UploadModal.vue @@ -53,14 +53,14 @@ import { Upload, Alert } from 'ant-design-vue'; import { BasicModal, useModalInner } from '/@/components/Modal'; // hooks - import { useUploadType } from './useUpload'; + import { useUploadType } from '../hooks/useUpload'; import { useMessage } from '/@/hooks/web/useMessage'; // types - import { FileItem, UploadResultStatus } from './typing'; - import { basicProps } from './props'; + import { FileItem, UploadResultStatus } from '../types/typing'; + import { basicProps } from '../props'; import { createTableColumns, createActionColumn } from './data'; // utils - import { checkImgType, getBase64WithFile } from './helper'; + import { checkImgType, getBase64WithFile } from '../helper'; import { buildUUID } from '/@/utils/uuid'; import { isFunction } from '/@/utils/is'; import { warn } from '/@/utils/log'; @@ -193,7 +193,7 @@ ); const { data } = ret; item.status = UploadResultStatus.SUCCESS; - item.responseData = data; + item.response = data; return { success: true, error: null, @@ -247,9 +247,9 @@ const fileList: string[] = []; for (const item of fileListRef.value) { - const { status, responseData } = item; - if (status === UploadResultStatus.SUCCESS && responseData) { - fileList.push(responseData.url); + const { status, response } = item; + if (status === UploadResultStatus.SUCCESS && response) { + fileList.push(response.url); } } // 存在一个上传成功的即可保存 diff --git a/src/components/Upload/src/UploadPreviewModal.vue b/src/components/Upload/src/components/UploadPreviewModal.vue similarity index 96% rename from src/components/Upload/src/UploadPreviewModal.vue rename to src/components/Upload/src/components/UploadPreviewModal.vue index b66c777c..74dcd316 100644 --- a/src/components/Upload/src/UploadPreviewModal.vue +++ b/src/components/Upload/src/components/UploadPreviewModal.vue @@ -14,8 +14,8 @@ import { defineComponent, watch, ref } from 'vue'; import FileList from './FileList.vue'; import { BasicModal, useModalInner } from '/@/components/Modal'; - import { previewProps } from './props'; - import { PreviewFileItem } from './typing'; + import { previewProps } from '../props'; + import { PreviewFileItem } from '../types/typing'; import { downloadByUrl } from '/@/utils/file/download'; import { createPreviewColumns, createPreviewActionColumn } from './data'; import { useI18n } from '/@/hooks/web/useI18n'; diff --git a/src/components/Upload/src/data.tsx b/src/components/Upload/src/components/data.tsx similarity index 98% rename from src/components/Upload/src/data.tsx rename to src/components/Upload/src/components/data.tsx index d84cf7ab..e1eb80ba 100644 --- a/src/components/Upload/src/data.tsx +++ b/src/components/Upload/src/components/data.tsx @@ -1,6 +1,6 @@ import type { BasicColumn, ActionItem } from '/@/components/Table'; -import { FileBasicColumn, FileItem, PreviewFileItem, UploadResultStatus } from './typing'; -import { isImgTypeByName } from './helper'; +import { FileBasicColumn, FileItem, PreviewFileItem, UploadResultStatus } from '../types/typing'; +import { isImgTypeByName } from '../helper'; import { Progress, Tag } from 'ant-design-vue'; import TableAction from '/@/components/Table/src/components/TableAction.vue'; import ThumbUrl from './ThumbUrl.vue'; diff --git a/src/components/Upload/src/useUpload.ts b/src/components/Upload/src/hooks/useUpload.ts similarity index 100% rename from src/components/Upload/src/useUpload.ts rename to src/components/Upload/src/hooks/useUpload.ts diff --git a/src/components/Upload/src/props.ts b/src/components/Upload/src/props.ts index 91a56e90..7a38ef70 100644 --- a/src/components/Upload/src/props.ts +++ b/src/components/Upload/src/props.ts @@ -1,5 +1,5 @@ import type { PropType } from 'vue'; -import { FileBasicColumn } from './typing'; +import { FileBasicColumn } from './types/typing'; import type { Options } from 'sortablejs'; @@ -13,7 +13,13 @@ type SortableOptions = Merge< } >; +type ListType = 'text' | 'picture' | 'picture-card'; + export const basicProps = { + listType: { + type: String as PropType, + default: 'picture-card', + }, helpText: { type: String as PropType, default: '', diff --git a/src/components/Upload/src/typing.ts b/src/components/Upload/src/types/typing.ts similarity index 91% rename from src/components/Upload/src/typing.ts rename to src/components/Upload/src/types/typing.ts index 2ca5d4e3..ab645040 100644 --- a/src/components/Upload/src/typing.ts +++ b/src/components/Upload/src/types/typing.ts @@ -1,4 +1,4 @@ -import { BasicColumn } from '../../Table'; +import { BasicColumn } from '/@/components/Table'; import { UploadApiResult } from '/@/api/sys/model/uploadModel'; export enum UploadResultStatus { @@ -15,7 +15,7 @@ export interface FileItem { percent: number; file: File; status?: UploadResultStatus; - responseData?: UploadApiResult; + response?: UploadApiResult; uuid: string; } diff --git a/src/views/demo/form/index.vue b/src/views/demo/form/index.vue index e9af3503..830d1984 100644 --- a/src/views/demo/form/index.vue +++ b/src/views/demo/form/index.vue @@ -70,6 +70,7 @@ import { cloneDeep } from 'lodash-es'; import { areaRecord } from '/@/api/demo/cascader'; import { uploadApi } from '/@/api/sys/upload'; + // import { isArray } from '/@/utils/is'; const valueSelectA = ref([]); const valueSelectB = ref([]); @@ -743,13 +744,30 @@ { field: 'field23', component: 'ImageUpload', - label: '字段23', - colProps: { - span: 8, - }, + label: '上传图片', + required: true, + defaultValue: [ + 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', + ], componentProps: { - api: () => Promise.resolve('https://via.placeholder.com/600/92c952'), + api: uploadApi, + accept: ['png', 'jpeg', 'jpg'], + maxSize: 2, + maxNumber: 1, }, + // rules: [ + // { + // required: true, + // trigger: 'change', + // validator(_, value) { + // if (isArray(value) && value.length > 0) { + // return Promise.resolve(); + // } else { + // return Promise.reject('请选择上传图片'); + // } + // }, + // }, + // ], }, ];