diff --git a/web/src/views/system/fileList/crud.tsx b/web/src/views/system/fileList/crud.tsx index a9ffcb7..5dc388e 100644 --- a/web/src/views/system/fileList/crud.tsx +++ b/web/src/views/system/fileList/crud.tsx @@ -33,7 +33,7 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp buttons: { add: { show: true, - // click: () => context.openAddHandle?.() + click: () => context.openAddHandle?.() }, }, }, @@ -43,6 +43,17 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp editRequest, delRequest, }, + tabs: { + show: true, + name: 'file_type', + type: '', + options: [ + { value: 0, label: '图片' }, + { value: 1, label: '视频' }, + { value: 2, label: '音频' }, + { value: 3, label: '其他' }, + ] + }, rowHandle: { //固定右侧 fixed: 'right', @@ -118,6 +129,16 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp }, }, }, + preview: { + title: '预览', + column: { + minWidth: 120, + align: 'center' + }, + form: { + show: false + } + }, url: { title: '文件地址', type: 'file-uploader', @@ -145,10 +166,6 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp type: 'input', form: { show: false, - component: { - placeholder: '请输入文件名称', - clearable: true - }, }, column: { minWidth: 160 @@ -203,6 +220,15 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp show: true } }, + create_datetime: { + title: '创建时间', + column: { + minWidth: 160 + }, + form: { + show: false + } + }, // fileselectortest: { // title: '文件选择器测试', // type: 'file-selector', diff --git a/web/src/views/system/fileList/index.vue b/web/src/views/system/fileList/index.vue index b388ad4..8d3fd01 100644 --- a/web/src/views/system/fileList/index.vue +++ b/web/src/views/system/fileList/index.vue @@ -10,8 +10,40 @@ + - +
+ + +
+ + + +
+
+ @@ -29,7 +61,7 @@ const getSizeDisplay = (n: number) => n < 1024 ? n + 'b' : (n < 1024 * 1024 ? (n const openAddHandle = async () => { fileSelectorRef.value.selectVisiable = true; await nextTick(); -} +}; // crud组件的ref const crudRef = ref(); // crud 配置的ref @@ -41,8 +73,76 @@ const { crudOptions } = createCrudOptions({ crudExpose, context: { openAddHandle // 初始化crud配置 const { resetCrudOptions } = useCrud({ crudExpose, crudOptions }); +const openPreview = ref(false); +const videoPreviewSrc = ref(''); +const audioPreviewSrc = ref(''); +const videoPreviewRef = ref(); +const audioPreviewRef = ref(); +const openPreviewHandle = (src: string, type: string) => { + openPreview.value = true; + (videoPreviewRef.value as HTMLVideoElement).muted = true; + (audioPreviewRef.value as HTMLAudioElement).muted = true; + if (type === 'video') videoPreviewSrc.value = src; + else audioPreviewSrc.value = src; + window.addEventListener('keydown', onPreviewKeydown); +}; +const closePreview = () => { + openPreview.value = false; + videoPreviewSrc.value = ''; + audioPreviewSrc.value = ''; + window.removeEventListener('keydown', onPreviewKeydown); +}; +const onPreviewKeydown = (e: KeyboardEvent) => { + if (e.key !== 'Escape') return; + openPreview.value = false; + videoPreviewSrc.value = ''; + audioPreviewSrc.value = ''; + window.removeEventListener('keydown', onPreviewKeydown); +}; + // 页面打开后获取列表数据 onMounted(() => { crudExpose.doRefresh(); }); - \ No newline at end of file + + \ No newline at end of file