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 @@
+
+
+ 附件
+
+
+
+
+
+
+
+ {{ getFileName(file) }}
+
+
+
+
+
+
+
+ 暂无附件
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+ {{ getFileName(file) }}
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+ 附件
+
+
+
+
+
+
+
+ {{ getFileName(file) }}
+
+
+
+
+
+
+
+
+
+
+ 暂无附件
+
+
+
+
+
+
+
\ 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) {