From 28fc65c34d1642b007dc45b83782e23be58d718c Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 08 七月 2026 16:43:58 +0800
Subject: [PATCH] 已进行排班并且人员已打卡的前提下,对应的班次配置不能编辑删除。
---
src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue | 138 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 133 insertions(+), 5 deletions(-)
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue b/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
index 5bc65dd..0a495c6 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
@@ -114,7 +114,13 @@
<el-form-item label="妯℃澘鍚嶇О" prop="templateName">
- <el-input v-model="form.templateName" placeholder="濡傦細椤圭洰绔嬮」瀹℃壒" maxlength="50" show-word-limit />
+ <el-input
+ v-model="form.templateName"
+ placeholder="濡傦細椤圭洰绔嬮」瀹℃壒"
+ maxlength="50"
+ show-word-limit
+ :disabled="isEditingBuiltin"
+ />
</el-form-item>
@@ -124,7 +130,12 @@
<el-form-item label="妯℃澘绫诲瀷" prop="businessType">
- <el-select v-model="form.businessType" placeholder="璇烽�夋嫨" style="width: 100%">
+ <el-select
+ v-model="form.businessType"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ :disabled="isEditingBuiltin"
+ >
<el-option
@@ -178,7 +189,12 @@
<el-form-item label="濉姤閰嶇疆">
- <FormConfigEditor v-model="form.formConfigData" />
+ <FormConfigEditor
+ v-model="form.formConfigData"
+ :exclude-template-id="form.id"
+ :disable-import="isEditingBuiltin"
+ :locked-field-uids="isEditingBuiltin ? form.lockedFormFieldUids : []"
+ />
<p class="flow-tip">閰嶇疆鎻愪氦瀹℃壒鏃堕渶濉啓鐨勮〃鍗曢」锛屼繚瀛樺悗鍐欏叆 formConfig锛圝SON锛夈��</p>
@@ -193,6 +209,18 @@
鎸夐『搴忔祦杞細鍙负姣忎釜鑺傜偣娣诲姞澶氬悕瀹℃壒浜猴紱浼氱闇�鍏ㄩ儴閫氳繃锛屾垨绛句换涓�浜洪�氳繃鍗冲彲杩涘叆涓嬩竴鑺傜偣銆�
</p>
+
+ </el-form-item>
+
+ <el-form-item label="闄勪欢">
+
+ <div class="upload-block">
+
+ <FileUpload v-model:file-list="form.storageBlobDTOs" :limit="10" button-text="鐐瑰嚮閫夋嫨鏂囦欢" />
+
+ </div>
+
+ <p class="flow-tip">鍙笂浼犳ā鏉胯鏄庢枃妗c�佸埗搴︽枃浠剁瓑锛堥�夊~锛夈��</p>
</el-form-item>
@@ -274,6 +302,16 @@
</el-table-column>
+ <el-table-column label="閫夐」鏉ユ簮" width="100">
+
+ <template #default="{ row }">
+
+ {{ row.type === 'select' ? selectOptionSourceLabel(row.optionSource) : '鈥�' }}
+
+ </template>
+
+ </el-table-column>
+
<el-table-column label="蹇呭~" width="70" align="center">
<template #default="{ row }">{{ row.required !== false ? "鏄�" : "鍚�" }}</template>
@@ -338,6 +376,27 @@
<el-empty v-else description="鏆傛棤娴佺▼鑺傜偣" :image-size="60" />
+ <el-divider content-position="left">闄勪欢锛坽{ detailAttachments.length }} 涓級</el-divider>
+
+ <template v-if="detailAttachments.length">
+
+ <div class="detail-attachment-list">
+ <div
+ v-for="(f, i) in detailAttachments"
+ :key="i"
+ class="detail-attachment-item"
+ @click="openAttachmentFile(f)"
+ >
+ <el-icon class="attachment-icon"><Document /></el-icon>
+ <span class="attachment-name">{{ attachmentDisplayName(f) }}</span>
+ <el-icon class="attachment-download"><Download /></el-icon>
+ </div>
+ </div>
+
+ </template>
+
+ <el-empty v-else description="鏆傛棤闄勪欢" :image-size="48" />
+
</div>
<template #footer>
@@ -358,7 +417,7 @@
<script setup>
-import { ArrowRight, Plus, RefreshRight } from "@element-plus/icons-vue";
+import { ArrowRight, Document, Download, Plus, RefreshRight } from "@element-plus/icons-vue";
import { ElMessage } from "element-plus";
@@ -366,13 +425,16 @@
import { userListNoPageByTenantId } from "@/api/system/user.js";
+import FileUpload from "@/components/AttachmentUpload/file/index.vue";
+
import FormConfigEditor from "./components/FormConfigEditor.vue";
import TemplateFlowEditor from "./components/TemplateFlowEditor.vue";
-import { formatDisplayTime } from "./approveTemplateConstants.js";
+import { formatDisplayTime, mapAttachmentsFromApi } from "./approveTemplateConstants.js";
import { formatDefaultValueDisplay, formFieldTypeLabel, parseFormConfigToData } from "./formConfigUtils.js";
+import { selectOptionSourceLabel } from "./selectOptionSource.js";
import { useApproveTemplate } from "./useApproveTemplate.js";
@@ -408,6 +470,8 @@
formRules,
+ isEditingBuiltin,
+
detailDialog,
detailRow,
@@ -442,6 +506,28 @@
);
+
+
+const detailAttachments = computed(() => mapAttachmentsFromApi(detailRow.value));
+
+
+
+function attachmentDisplayName(file) {
+
+ if (!file) return "鏈懡鍚�";
+
+ return file.name || file.originalFilename || file.fileName || "鏈懡鍚�";
+
+}
+
+function openAttachmentFile(file) {
+ const url = file?.url || file?.previewURL || file?.downloadURL || file?.previewUrl || "";
+ if (url) {
+ window.open(url, "_blank");
+ } else {
+ ElMessage.warning("鏃犳硶鎵撳紑璇ラ檮浠�");
+ }
+}
function unwrapArray(payload) {
@@ -706,6 +792,48 @@
}
+.upload-block {
+
+ width: 100%;
+
+}
+
+.detail-attachment-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+}
+
+.detail-attachment-item {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ padding: 8px 12px;
+ background: var(--el-fill-color-light);
+ border-radius: 6px;
+ cursor: pointer;
+ transition: background 0.2s;
+}
+
+.detail-attachment-item:hover {
+ background: var(--el-fill-color);
+}
+
+.attachment-icon {
+ font-size: 16px;
+ color: var(--el-text-color-regular);
+}
+
+.attachment-name {
+ font-size: 14px;
+ color: var(--el-text-color-primary);
+}
+
+.attachment-download {
+ font-size: 14px;
+ color: var(--el-text-color-secondary);
+}
+
.text-muted {
font-size: 12px;
--
Gitblit v1.9.3