liyong
2 天以前 93b8ceac34e2fbd5c57fe5ab4f5bac32c85408aa
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(JSON)。</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">可上传模板说明文档、制度文件等(选填)。</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,32 @@
      <el-empty v-else description="暂无流程节点" :image-size="60" />
      <el-divider content-position="left">附件({{ detailAttachments.length }} 个)</el-divider>
      <template v-if="detailAttachments.length">
        <el-tag
          v-for="(f, i) in detailAttachments"
          :key="i"
          class="detail-attachment-tag"
          type="info"
          effect="plain"
        >
          {{ attachmentDisplayName(f) }}
        </el-tag>
      </template>
      <el-empty v-else description="暂无附件" :image-size="48" />
      </div>
      <template #footer>
@@ -366,13 +430,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 +475,8 @@
  formRules,
  isEditingBuiltin,
  detailDialog,
  detailRow,
@@ -441,6 +510,20 @@
  parseFormConfigToData(detailRow.value?.formConfigData ?? detailRow.value?.formConfig)
);
const detailAttachments = computed(() => mapAttachmentsFromApi(detailRow.value));
function attachmentDisplayName(file) {
  if (!file) return "未命名";
  return file.name || file.originalFilename || file.fileName || "未命名";
}
@@ -706,6 +789,18 @@
}
.upload-block {
  width: 100%;
}
.detail-attachment-tag {
  margin: 0 8px 8px 0;
}
.text-muted {
  font-size: 12px;