发起变更通用footer以及保存提交统一修改

This commit is contained in:
2026-09-04 14:57:46 +08:00
parent 8706ec4b92
commit 10115eb422
6 changed files with 161 additions and 323 deletions
@@ -1,27 +1,18 @@
<!-- 变更培训内容 -->
<!-- 验收评价 -->
<script setup lang="ts">
import { ref } from 'vue';
import { Icon } from '@iconify/vue'
import { useThemeStore } from '@/store/modules/theme';
import { getColorWithOpacity } from "@/utils/common";
import ApprovalDrawer from './approvalDrawer.vue'
import Footer from './footer.vue';
const themeStore = useThemeStore();
const props = defineProps(['type','isAiOpen','title','currentId'])
const emit = defineEmits(['save','submit','confirmTab']);
// 抽屉类型
const approvalDrawerShow = ref<boolean>(false);
const trainText = ref<string>('');
const btnDisabled = ref<boolean>(false);
const saveLoading = ref<boolean>(false);
const downloadLoading = ref<boolean>(false);
const regenerateLoading = ref<boolean>(false);
const submitLoading = ref<boolean>(false);
const confirmed = ref<boolean>(false);
const approvers = ref<Record<string, string>>({
部门审核: "李主任(一车间主任)",
最终批准: "李主任(部门负责人 · 固定)",
const form = ref<{ content: string }>({
content: ''
});
const signers = ref<Record<string, string>>({});
const editing = ref<any>(null);
const acceptRows = ref([
@@ -33,30 +24,20 @@ const acceptRows = ref([
]);
const acceptNote = ref("");
const regenerate = () => window.$message?.success(`演示:已根据变更描述重新生成变更申请表(本页内容已刷新)`);
const download = () => window.$message?.success(`演示:变更申请表已下载(Word/PDF)`);
// 保存草稿
const saveDraft = async () => {
// if(changeApplyRules()){
// return
// }
// saveLoading.value = true;
// const {error} = await applicationSaveApi(props.currentId, form.value);
// if(!error){
// window.$message?.success("已保存为草稿,可在左侧「我的草稿」中继续编辑");
// }
// saveLoading.value = false;
const saveDraft = () => {
emit('save');
}
// ---------- 提交 ----------
const submitApply = () => {
// 提交
const submitConfirm = () => {
emit('submit', props.type);
}
const confirmTab = () => {
confirmed.value = !confirmed.value;
// // 确认标签内容
const confirmTab = (tab:string, val:boolean) => {
emit('confirmTab', tab, val);
}
defineExpose({trainText})
defineExpose({form})
</script>
<template>
@@ -197,47 +178,16 @@ defineExpose({trainText})
</div>
</div>
</div>
<div class="flex flex-wrap items-center justify-between gap-2 border-t p-4">
<div class="flex flex-wrap gap-2">
<NButton ghost type="success" :disabled="btnDisabled" :loading="downloadLoading" @click="download">
<Icon icon="material-symbols:download" class="size-16px" /> 下载验收评价
</NButton>
<NButton ghost type="warning" :disabled="btnDisabled" :loading="regenerateLoading" @click="regenerate">
<Icon icon="tdesign:refresh" class="size-14px" /> 重新生成验收评价
</NButton>
<NButton ghost :type="confirmed ? 'success' : 'primary'" :disabled="btnDisabled" @click="confirmTab">
<Icon icon="ix:success" class="size-16px" /> {{ confirmed ? '已确认完毕' : '本标签内容确认完毕' }}
</NButton>
</div>
</div>
<div class="flex flex-wrap items-center gap-x-4 gap-y-2 bg-[#EAF0F9] px-4 py-2.5 shadow-[0_-2px_8px_rgba(0,0,0,0.05)]">
<div class="flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1 text-xs text-slate-500">
<Icon icon="lucide:users" class="size-14px" />
<span class="min-w-0 truncate">
部门审核{{ approvers.部门审核 }} 专业会签{{ Object.keys(signers).length ? Object.values(signers).join('、') : '未涉及专业 · 免会签' }} 最终批准{{ approvers.最终批准 }}
</span>
<NButton ghost size="small" type="primary" @click="approvalDrawerShow = true">
<Icon icon="octicon:sliders-24" class="size-14px" />
审批流程设置
</NButton>
</div>
<div class="ml-auto flex shrink-0 items-center gap-2">
<NButton size="small" type="primary" :disabled="btnDisabled" :loading="saveLoading" @click="saveDraft">保存</NButton>
<!-- <span v-if="!form" class="flex items-center text-xs text-amber-600">请先在变更预识别页生成变更申请单</span> -->
<NButton size="small" type="primary" @click="submitApply" :disabled="btnDisabled" :loading="submitLoading">
提交 <Icon icon="formkit:right" class="size-14px" />
</NButton>
</div>
</div>
<!-- 审批流程设置 -->
<NDrawer v-model:show="approvalDrawerShow" placement="right" width="28rem">
<NDrawerContent>
<template #header>
<div class="text-base font-semibold text-slate-800">审批流程设置</div>
</template>
<ApprovalDrawer />
</NDrawerContent>
</NDrawer>
<Footer
ref="footerRef"
:type="props.type"
:currentId="props.currentId"
:title="props.title"
:isAiOpen="props.isAiOpen"
@save="saveDraft"
@submit="submitConfirm"
@confirmTab="confirmTab"
/>
</template>
<style scoped lang="scss">
.scroll {