diff --git a/src/components/BasicFile/config.ts b/src/components/BasicFile/config.ts new file mode 100644 index 0000000..7f15971 --- /dev/null +++ b/src/components/BasicFile/config.ts @@ -0,0 +1,56 @@ +// BasicFile 组件配置文件 + +// 文件类型映射 +export const FILE_TYPE_MAP = { + pdf: '/static/base/view/pdf.png', + doc: '/static/base/view/word.png', + docx: '/static/base/view/word.png', + xls: '/static/base/view/excel.png', + xlsx: '/static/base/view/excel.png', + ppt: '/static/base/view/ppt.png', + pptx: '/static/base/view/ppt.png', + zip: '/static/base/view/zip.png', + rar: '/static/base/view/zip.png', + '7z': '/static/base/view/zip.png', +} as const; + +// 默认文件图标 +export const DEFAULT_FILE_ICON = '/static/base/view/more.png'; + +// 可预览的文件扩展名 +export const PREVIEWABLE_EXTENSIONS = [ + 'pdf', + 'doc', + 'docx', + 'xls', + 'xlsx', + 'ppt', + 'pptx', + 'txt', + 'jpg', + 'jpeg', + 'png', + 'gif', + 'bmp', + 'webp' +]; + +// 视频文件扩展名 +export const VIDEO_EXTENSIONS = [ + 'mp4', + 'avi', + 'mov', + 'wmv', + 'flv', + 'webm' +]; + +// 图片文件扩展名 +export const IMAGE_EXTENSIONS = [ + 'jpg', + 'jpeg', + 'png', + 'gif', + 'bmp', + 'webp' +]; \ No newline at end of file diff --git a/src/components/BasicFile/detail.vue b/src/components/BasicFile/detail.vue new file mode 100644 index 0000000..8811165 --- /dev/null +++ b/src/components/BasicFile/detail.vue @@ -0,0 +1,341 @@ + + + + + \ No newline at end of file diff --git a/src/components/BasicFile/item.vue b/src/components/BasicFile/item.vue new file mode 100644 index 0000000..04172ce --- /dev/null +++ b/src/components/BasicFile/item.vue @@ -0,0 +1,231 @@ + + + + + \ No newline at end of file diff --git a/src/components/BasicFile/preview.vue b/src/components/BasicFile/preview.vue new file mode 100644 index 0000000..9a8aade --- /dev/null +++ b/src/components/BasicFile/preview.vue @@ -0,0 +1,458 @@ + + + + + \ No newline at end of file diff --git a/src/pages/view/hr/jsQj/components/jsQjDetailInfo.vue b/src/pages/view/hr/jsQj/components/jsQjDetailInfo.vue index a5d8ef1..6962a74 100644 --- a/src/pages/view/hr/jsQj/components/jsQjDetailInfo.vue +++ b/src/pages/view/hr/jsQj/components/jsQjDetailInfo.vue @@ -22,6 +22,15 @@ + + + @@ -29,6 +38,8 @@ import { findQjById } from "@/api/base/jsQjApi"; import { useDataStore } from "@/store/modules/data"; import { ref, computed, watch, onMounted } from "vue"; +import BasicFilePreview from "@/components/BasicFile/preview.vue"; +import BasicTitle from "@/components/BasicTitle/Title.vue"; const { getXxts } = useDataStore(); diff --git a/src/pages/view/hr/jsQj/components/jsQjDkEdit.vue b/src/pages/view/hr/jsQj/components/jsQjDkEdit.vue index c8333d6..ca032fb 100644 --- a/src/pages/view/hr/jsQj/components/jsQjDkEdit.vue +++ b/src/pages/view/hr/jsQj/components/jsQjDkEdit.vue @@ -175,7 +175,7 @@ const getPkkbList = async () => { const newList = await QjPageUtils.getPkkbList(props.data); if (!newList || !newList.length) { console.log("没有排课信息"); - return; + return []; } // 记录原始选课的数据 const srcData: any = {}; @@ -196,6 +196,7 @@ const getPkkbList = async () => { }) // 将kmMap转换成value对应的数组 kmDkList.value = Object.values(kmMap); + return dkList.value; }; const changeJsByTy = (selected: any, item: any) => { diff --git a/src/pages/view/hr/jsQj/components/jsQjEdit.vue b/src/pages/view/hr/jsQj/components/jsQjEdit.vue index 0f4642b..0cba78a 100644 --- a/src/pages/view/hr/jsQj/components/jsQjEdit.vue +++ b/src/pages/view/hr/jsQj/components/jsQjEdit.vue @@ -3,7 +3,7 @@ @@ -65,6 +65,10 @@ let formData = ref({ const dkRef = ref(null); +// 添加全局变量存储文件名和格式 +const fileName = ref(''); +const fileFormat = ref(''); + const [register, { setValue, getValue }] = useForm({ schema: [ { @@ -121,6 +125,34 @@ const [register, { setValue, getValue }] = useForm({ }, }, { interval: true }, + { + field: "fileUrl", + label: "上传附件", + component: "BasicUpload", + required: true, + itemProps: { + labelPosition: "top", + }, + componentProps: { + multiple: false, + accept: "*/*", + maxCount: 1, + disabled: false, + limit: 1, + beforeUpload: (file: any) => { + const fileFullName = file.name || ''; + const fileExt = fileFullName.split('.').pop() || ''; + const fileWithoutExt = fileFullName.replace(/\.[^/.]+$/, ''); + + // 存储到全局变量中 + fileName.value = fileWithoutExt; + fileFormat.value = fileExt; + + return true; + } + }, + }, + { interval: true }, { field: "dkfs", label: "代课方式", @@ -210,6 +242,8 @@ const submit = async () => { // 注入审批人/抄送人 params.sprList = formData.value.sprList || []; params.csrList = formData.value.csrList || []; + params.fileName = fileName.value; + params.fileFormat = fileFormat.value; if (fd.dkfs === 0) { const dkList = dkRef.value.getDkList(); if (!dkList.length) { @@ -246,6 +280,19 @@ const submit = async () => { } else { params.dkList = []; } + } else if (fd.dkfs === 2) { + let dkList = dkRef.value.getDkList(); + if (!dkList.length) { + dkList = await dkRef.value.getPkkbList(); + } + if (dkList.length > 0) { + uni.showToast({ + title: "您在请假期间有课程,请选择自行协调或教科处协调", + icon: "none", + }); + return; + } + return; } let submitApi = jsQjSqApi; if (props.data && props.data.id) {