yyb
14 小时以前 a1df9699594b0a0e46d26a0394eafb1eb030c68b
src/views/officeProcessAutomation/ApproveManage/approve-template/index.vue
@@ -178,7 +178,7 @@
        <el-form-item label="填报配置">
          <FormConfigEditor v-model="form.formConfigData" />
          <FormConfigEditor v-model="form.formConfigData" :exclude-template-id="form.id" />
          <p class="flow-tip">配置提交审批时需填写的表单项,保存后写入 formConfig(JSON)。</p>
@@ -193,6 +193,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 +286,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 +360,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 +414,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";
@@ -441,6 +492,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 +771,18 @@
}
.upload-block {
  width: 100%;
}
.detail-attachment-tag {
  margin: 0 8px 8px 0;
}
.text-muted {
  font-size: 12px;