优化
This commit is contained in:
		| @ -7,7 +7,8 @@ | ||||
|           <el-form :model="state.queryForm" :inline="true"> | ||||
|             <el-form-item label="版本号" prop="versions"> | ||||
|               <el-select v-model="state.queryForm.versions" placeholder="选择版本号"> | ||||
|                 <el-option v-for="item in state.options" :key="item.versions" :label="item.versions" :value="item.versions" /> | ||||
|                 <el-option v-for="item in state.options" :key="item.versions" :label="item.versions" | ||||
|                   :value="item.versions" /> | ||||
|               </el-select> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="表名" prop="sheet"> | ||||
| @ -24,9 +25,13 @@ | ||||
|             <el-form-item> | ||||
|               <el-upload ref="uploadRef" class="upload-demo" :http-request="importExcel" :show-file-list="false"> | ||||
|                 <template #trigger> | ||||
|                   <el-button type="primary">导入excel</el-button> | ||||
|                   <el-button v-if="Object.keys(state.versionsData).length === 0 || state.versionsData.status == 'cancel' ||state.versionsData.status == 'back'" type="primary">导入excel</el-button> | ||||
|                 </template> | ||||
|               </el-upload> | ||||
|               <el-button v-if="state.versionsData.status == 'draft'" type="primary" con="edit" | ||||
|                     @click="clickApprovalSheet()">审核</el-button> | ||||
|                   <el-button v-if="state.versionsData.status == 'waiting' || state.versionsData.status == 'finish'" | ||||
|                     icon="view" @click="lookApprovalFlow()" type="warning">查看流程</el-button> | ||||
|             </el-form-item> | ||||
|           </el-form> | ||||
|         </el-card> | ||||
| @ -34,53 +39,32 @@ | ||||
|           <el-form :model="state.queryForm" :inline="true"> | ||||
|             <el-form-item label="版本号" prop="versions"> | ||||
|               <el-select v-model="state.queryForm.versions" placeholder="选择版本号" @change="handleChangeVersion"> | ||||
|                 <el-option v-for="item in state.options" :key="item.versions" :label="item.versions" :value="item.versions" /> | ||||
|                 <el-option v-for="item in state.options" :key="item.versions" :label="item.versions" | ||||
|                   :value="item.versions" /> | ||||
|               </el-select> | ||||
|             </el-form-item> | ||||
|             <el-form-item> | ||||
|               <el-upload | ||||
|                 ref="uploadRef" | ||||
|                 class="upload-demo" | ||||
|                 :http-request="importExcel" | ||||
|                 style="margin-right: 12px" | ||||
|                 v-if="Object.keys(state.versionsData).length === 0 || state.versionsData.status == 'cancel'" | ||||
|                 :show-file-list="false" | ||||
|               > | ||||
|                 <template #trigger> | ||||
|                   <el-button type="primary">导入excel</el-button> | ||||
|                 </template> | ||||
|               </el-upload> | ||||
|               <el-button v-if="state.versionsData.status == 'draft'" type="primary" con="edit" @click="clickApprovalSheet()">审核</el-button> | ||||
|               <el-button | ||||
|                 v-if="state.versionsData.status == 'waiting' || state.versionsData.status == 'finish'" | ||||
|                 icon="view" | ||||
|                 @click="lookApprovalFlow()" | ||||
|                 type="warning" | ||||
|                 >查看流程</el-button | ||||
|               > | ||||
|               <el-button v-if="Object.keys(state.versionsData).length === 0 || state.versionsData.status == 'cancel'" type="primary">导入excel</el-button> | ||||
|               <el-button v-if="state.versionsData.status == 'draft'" type="primary" con="edit" | ||||
|                 @click="clickApprovalSheet()">审核</el-button> | ||||
|               <el-button v-if="state.versionsData.status == 'waiting' || state.versionsData.status == 'finish'" | ||||
|                 icon="view" @click="lookApprovalFlow()" type="warning">查看流程</el-button> | ||||
|             </el-form-item> | ||||
|           </el-form> | ||||
|         </el-card> | ||||
|         <el-table | ||||
|           v-if="index < 3" | ||||
|           :ref="(el) => (tableRef[index] = el)" | ||||
|           :data="state.tableData" | ||||
|           v-loading="state.loading.list" | ||||
|           stripe | ||||
|           :row-class-name="state.tableData.length === 0 ? 'table-null' : ''" | ||||
|           style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" | ||||
|           row-key="id" | ||||
|           lazy | ||||
|           border | ||||
|           :default-expand-all="true" | ||||
|         > | ||||
|         <el-table v-if="index < 3" :ref="(el) => (tableRef[index] = el)" :data="state.tableData" | ||||
|           v-loading="state.loading.list" stripe :row-class-name="state.tableData.length === 0 ? 'table-null' : ''" | ||||
|           style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" row-key="id" lazy border | ||||
|           :default-expand-all="true"> | ||||
|           <el-table-column prop="num" label="编号" /> | ||||
|           <el-table-column prop="name" label="工程或费用名称" /> | ||||
|           <el-table-column prop="unit" label="单位" /> | ||||
|           <el-table-column prop="specification" label="规格" /> | ||||
|           <el-table-column prop="quantity" label="数量" /> | ||||
|           <el-table-column prop="remark" label="备注" /> | ||||
|         </el-table> | ||||
|         <el-table v-if="index == 3" :data="state.tableData" style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" row-key="id" border> | ||||
|         <el-table v-if="index == 3" :data="state.tableData" | ||||
|           style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" row-key="id" border> | ||||
|           <el-table-column prop="num" label="编号" /> | ||||
|           <el-table-column prop="name" label="名称" /> | ||||
|           <el-table-column prop="specification" label="规格" /> | ||||
| @ -108,7 +92,7 @@ const currentProject = computed(() => userStore.selectedProject); | ||||
| const { proxy } = getCurrentInstance(); | ||||
| const { work_order_type } = toRefs(proxy?.useDict('work_order_type')); | ||||
| const tableRef = ref({}); | ||||
| console.log(currentProject.value); | ||||
| console.log(work_order_type); | ||||
|  | ||||
| // tableData | ||||
| // 版本号 | ||||
| @ -138,6 +122,7 @@ const state = reactive({ | ||||
| }); | ||||
| // tab切换 | ||||
| const handleTabChange = (tab) => { | ||||
|   console.log('tab',tab); | ||||
|   state.tableData = []; | ||||
|   state.options = []; | ||||
|   state.sheets = []; | ||||
| @ -171,10 +156,10 @@ async function getVersionNums(isSheet = true) { | ||||
|       state.options = rows || []; | ||||
|       if (state.options.length > 0) { | ||||
|         state.queryForm.versions = state.options[0].versions; | ||||
|         if (state.work_order_type == 3) { | ||||
|           state.versionsData = state.options[0] || []; | ||||
|           console.log('state.versionsData', state.versionsData); | ||||
|         } | ||||
|         // if (state.work_order_type == 3) { | ||||
|         state.versionsData = state.options[0] || []; | ||||
|           // console.log('state.versionsData', state.versionsData); | ||||
|         // } | ||||
|         // 等待表名加载完成 | ||||
|         console.log(isSheet, state.sheets.length); | ||||
|         if (isSheet) { | ||||
| @ -317,7 +302,7 @@ function handleArr(arr, flag, table) { | ||||
| function clickApprovalSheet(row) { | ||||
|   proxy.$tab.closePage(proxy.$route); | ||||
|   proxy.$router.push({ | ||||
|     path: `/approval/billofQuantities/indexEdit`, | ||||
|     path: `/approval/billofQuantities/indexEdit`+state.work_order_type, | ||||
|     query: { | ||||
|       id: state.queryForm.versions, | ||||
|       type: 'update' | ||||
| @ -327,7 +312,7 @@ function clickApprovalSheet(row) { | ||||
| // 审核流程 | ||||
| function lookApprovalFlow(row) { | ||||
|   proxy.$router.push({ | ||||
|     path: `/approval/billofQuantities/indexEdit`, | ||||
|     path: `/approval/billofQuantities/indexEdit`+state.work_order_type, | ||||
|     query: { | ||||
|       id: state.queryForm.versions, | ||||
|       type: 'view' | ||||
|  | ||||
							
								
								
									
										357
									
								
								src/views/design/billofQuantities/indexEdit0.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								src/views/design/billofQuantities/indexEdit0.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,357 @@ | ||||
| <template> | ||||
|   <div class="p-4 bg-gray-50"> | ||||
|     <div class="max-w-4xl mx-auto"> | ||||
|       <!-- 顶部按钮区域 --> | ||||
|       <el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md"> | ||||
|         <approvalButton | ||||
|           @submitForm="submitForm" | ||||
|           @approvalVerifyOpen="approvalVerifyOpen" | ||||
|           @handleApprovalRecord="handleApprovalRecord" | ||||
|           :buttonLoading="buttonLoading" | ||||
|           :id="form.versions" | ||||
|           :status="form.status" | ||||
|           :pageType="routeParams.type" | ||||
|         /> | ||||
|       </el-card> | ||||
|       <!-- 表单区域 --> | ||||
|       <el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden"> | ||||
|         <div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100"> | ||||
|           <h3 class="text-lg font-semibold text-gray-800">投标工程清单</h3> | ||||
|         </div> | ||||
|         <div class="p-6"> | ||||
|           <el-form | ||||
|             ref="leaveFormRef" | ||||
|             v-loading="loading" | ||||
|             :disabled="routeParams.type === 'view' || form.status == 'waiting'" | ||||
|             :model="form" | ||||
|             :rules="rules" | ||||
|             label-width="100px" | ||||
|             class="space-y-4" | ||||
|           > | ||||
|             <div class="grid grid-cols-1 gap-4"> | ||||
|               <el-row> | ||||
|                 <el-col :span="12"> | ||||
|                   <el-form-item label="版本号" prop="formNo"> | ||||
|                     <el-input disabled v-model="form.versions" placeholder="请输入文件名称" /> | ||||
|                   </el-form-item> | ||||
|                 </el-col> | ||||
|               </el-row> | ||||
|             </div> | ||||
|           </el-form> | ||||
|           <el-table :data="tableData" style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" row-key="id" border> | ||||
|             <el-table-column prop="num" label="编号" /> | ||||
|             <el-table-column prop="name" label="名称" /> | ||||
|             <el-table-column prop="specification" label="规格" /> | ||||
|             <el-table-column prop="unit" label="单位" /> | ||||
|             <el-table-column prop="quantity" label="数量" /> | ||||
|             <el-table-column prop="remark" label="备注" /> | ||||
|           </el-table> | ||||
|         </div> | ||||
|       </el-card> | ||||
|       <!-- 提交组件 --> | ||||
|       <submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" /> | ||||
|       <approvalRecord ref="approvalRecordRef"></approvalRecord> | ||||
|       <!-- 流程选择对话框 --> | ||||
|       <el-dialog | ||||
|         draggable | ||||
|         v-model="dialogVisible.visible" | ||||
|         :title="dialogVisible.title" | ||||
|         :before-close="handleClose" | ||||
|         width="500" | ||||
|         class="rounded-lg shadow-lg" | ||||
|       > | ||||
|         <div class="p-4"> | ||||
|           <p class="text-gray-600 mb-4">请选择要启动的流程:</p> | ||||
|           <el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%"> | ||||
|             <el-option v-for="item in flowCodeOptions" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|           </el-select> | ||||
|         </div> | ||||
|         <template #footer> | ||||
|           <div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3"> | ||||
|             <el-button @click="handleClose" class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors" | ||||
|               >取消</el-button | ||||
|             > | ||||
|             <el-button type="primary" @click="submitFlow()" class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors" | ||||
|               >确认</el-button | ||||
|             > | ||||
|           </div> | ||||
|         </template> | ||||
|       </el-dialog> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup name="Leave" lang="ts"> | ||||
| import { LeaveForm, LeaveQuery, LeaveVO } from '@/api/workflow/leave/types'; | ||||
| import { startWorkFlow } from '@/api/workflow/task'; | ||||
| import SubmitVerify from '@/components/Process/submitVerify.vue'; | ||||
| import ApprovalRecord from '@/components/Process/approvalRecord.vue'; | ||||
| import ApprovalButton from '@/components/Process/approvalButton.vue'; | ||||
| import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
| import { useUserStoreHook } from '@/store/modules/user'; | ||||
| const { design_change_reason_type } = toRefs<any>(proxy?.useDict('design_change_reason_type')); | ||||
| import { detailsMaterialAndEquipmentApproval } from '@/api/design/billofQuantities/index'; | ||||
| // 获取用户 store | ||||
| const userStore = useUserStoreHook(); | ||||
| // 从 store 中获取项目列表和当前选中的项目 | ||||
| const currentProject = computed(() => userStore.selectedProject); | ||||
| const buttonLoading = ref(false); | ||||
| const loading = ref(true); | ||||
| //路由参数 | ||||
| const routeParams = ref<Record<string, any>>({}); | ||||
| const flowCode = ref<string>(''); | ||||
| const status = ref<string>(''); | ||||
| const dialogVisible = reactive<DialogOption>({ | ||||
|   visible: false, | ||||
|   title: '流程定义' | ||||
| }); | ||||
| //提交组件 | ||||
| const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>(); | ||||
| //审批记录组件 | ||||
| const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>(); | ||||
| //按钮组件 | ||||
| const flowCodeOptions = [ | ||||
|   { | ||||
|     value: currentProject.value?.id + '_bidEquipmentList', | ||||
|     label: '投标工程清单审核' | ||||
|   } | ||||
| ]; | ||||
|  | ||||
| const leaveFormRef = ref<ElFormInstance>(); | ||||
| const dialog = reactive({ | ||||
|   visible: false, | ||||
|   title: '', | ||||
|   isEdit: false | ||||
| }); | ||||
| const submitFormData = ref<StartProcessBo>({ | ||||
|   businessId: '', | ||||
|   flowCode: '', | ||||
|   variables: {} | ||||
| }); | ||||
| const taskVariables = ref<Record<string, any>>({}); | ||||
|  | ||||
| const initFormData = { | ||||
|   id: undefined, | ||||
|   fileName: undefined, | ||||
|   fileUrl: undefined, | ||||
|   status: undefined, | ||||
|   originalName: undefined | ||||
| }; | ||||
| const data = reactive({ | ||||
|   form: { ...initFormData }, | ||||
|   tableData: [], | ||||
|   rules: {} | ||||
| }); | ||||
|  | ||||
| const handleClose = () => { | ||||
|   dialogVisible.visible = false; | ||||
|   flowCode.value = ''; | ||||
|   buttonLoading.value = false; | ||||
| }; | ||||
| const { form, rules, tableData } = toRefs(data); | ||||
|  | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|   form.value = { ...initFormData }; | ||||
|   leaveFormRef.value?.resetFields(); | ||||
| }; | ||||
|  | ||||
| /** 获取详情 */ | ||||
| const getInfo = () => { | ||||
|   loading.value = true; | ||||
|   buttonLoading.value = false; | ||||
|   nextTick(async () => { | ||||
|     const res = await detailsMaterialAndEquipmentApproval(routeParams.value.id); | ||||
|     console.log('res.data', res.data); | ||||
|  | ||||
|     Object.assign(form.value, res.data); | ||||
|     console.log('form', form.value); | ||||
|  | ||||
|     tableData.value = res.data.auditData; | ||||
|     loading.value = false; | ||||
|     buttonLoading.value = false; | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** 提交按钮 */ | ||||
| const submitForm = (status1: string) => { | ||||
|   status.value = status1; | ||||
|   submit(status.value, form.value); | ||||
| }; | ||||
|  | ||||
| const submitFlow = async () => { | ||||
|   handleStartWorkFlow(form.value); | ||||
|   dialogVisible.visible = false; | ||||
| }; | ||||
| //提交申请 | ||||
| const handleStartWorkFlow = async (data: LeaveForm) => { | ||||
|   try { | ||||
|     submitFormData.value.flowCode = flowCode.value; | ||||
|     submitFormData.value.businessId = data.versions; | ||||
|     //流程变量 | ||||
|     taskVariables.value = { | ||||
|       // leave4/5 使用的流程变量 | ||||
|       userList: ['1', '3', '4'] | ||||
|     }; | ||||
|     submitFormData.value.variables = taskVariables.value; | ||||
|     const resp = await startWorkFlow(submitFormData.value); | ||||
|     if (submitVerifyRef.value) { | ||||
|       buttonLoading.value = false; | ||||
|       submitVerifyRef.value.openDialog(resp.data.taskId); | ||||
|     } | ||||
|   } finally { | ||||
|     buttonLoading.value = false; | ||||
|   } | ||||
| }; | ||||
| //审批记录 | ||||
| const handleApprovalRecord = () => { | ||||
|   approvalRecordRef.value.init(form.value.versions); | ||||
| }; | ||||
| //提交回调 | ||||
| const submitCallback = async () => { | ||||
|   await proxy.$tab.closePage(proxy.$route); | ||||
|   proxy.$router.go(-1); | ||||
| }; | ||||
| //审批 | ||||
| const approvalVerifyOpen = async () => { | ||||
|   submitVerifyRef.value.openDialog(routeParams.value.taskId); | ||||
| }; | ||||
| // 图纸上传成功之后 开始提交 | ||||
| const submit = async (status, data) => { | ||||
|   form.value = data; | ||||
|   if (status === 'draft') { | ||||
|     buttonLoading.value = false; | ||||
|     proxy?.$modal.msgSuccess('暂存成功'); | ||||
|     proxy.$tab.closePage(proxy.$route); | ||||
|     proxy.$router.go(-1); | ||||
|   } else { | ||||
|     if ((form.value.status === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') { | ||||
|       flowCode.value = flowCodeOptions[0].value; | ||||
|       dialogVisible.visible = true; | ||||
|       return; | ||||
|     } | ||||
|     //说明启动过先随意穿个参数 | ||||
|     if (flowCode.value === '' || flowCode.value === null) { | ||||
|       flowCode.value = 'xx'; | ||||
|     } | ||||
|     await handleStartWorkFlow(data); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|   nextTick(async () => { | ||||
|     routeParams.value = proxy.$route.query; | ||||
|     reset(); | ||||
|     loading.value = false; | ||||
|     if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { | ||||
|       getInfo(); | ||||
|       console.log('routeParams.value', routeParams.value); | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
| <style scoped lang="scss"> | ||||
| /* 全局样式 */ | ||||
| :root { | ||||
|   --primary: #409eff; | ||||
|   --primary-light: #66b1ff; | ||||
|   --primary-dark: #3a8ee6; | ||||
|   --success: #67c23a; | ||||
|   --warning: #e6a23c; | ||||
|   --danger: #f56c6c; | ||||
|   --info: #909399; | ||||
| } | ||||
|  | ||||
| /* 表单样式优化 */ | ||||
| .el-form-item { | ||||
|   .el-form-item__label { | ||||
|     color: #606266; | ||||
|     font-weight: 500; | ||||
|   } | ||||
|  | ||||
|   .el-input__inner, | ||||
|   .el-select .el-input__inner { | ||||
|     border-radius: 4px; | ||||
|     transition: | ||||
|       border-color 0.2s, | ||||
|       box-shadow 0.2s; | ||||
|  | ||||
|     &:focus { | ||||
|       border-color: var(--primary-light); | ||||
|       box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .el-textarea__inner { | ||||
|     border-radius: 4px; | ||||
|     transition: | ||||
|       border-color 0.2s, | ||||
|       box-shadow 0.2s; | ||||
|  | ||||
|     &:focus { | ||||
|       border-color: var(--primary-light); | ||||
|       box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 按钮样式优化 */ | ||||
| .el-button { | ||||
|   border-radius: 4px; | ||||
|   transition: all 0.2s; | ||||
|  | ||||
|   &.is-primary { | ||||
|     background-color: var(--primary); | ||||
|     border-color: var(--primary); | ||||
|  | ||||
|     &:hover { | ||||
|       background-color: var(--primary-light); | ||||
|       border-color: var(--primary-light); | ||||
|     } | ||||
|  | ||||
|     &:active { | ||||
|       background-color: var(--primary-dark); | ||||
|       border-color: var(--primary-dark); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   &.is-text { | ||||
|     color: var(--primary); | ||||
|  | ||||
|     &:hover { | ||||
|       color: var(--primary-light); | ||||
|       background-color: rgba(64, 158, 255, 0.05); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 卡片样式优化 */ | ||||
| .el-card { | ||||
|   transition: all 0.3s ease; | ||||
|  | ||||
|   &:hover { | ||||
|     /* transform: translateY(-2px); */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 对话框样式优化 */ | ||||
| .el-dialog { | ||||
|   .el-dialog__header { | ||||
|     background-color: #f5f7fa; | ||||
|     border-bottom: 1px solid #ebeef5; | ||||
|     padding: 15px 20px; | ||||
|   } | ||||
|  | ||||
|   .el-dialog__title { | ||||
|     font-size: 16px; | ||||
|     font-weight: 600; | ||||
|     color: #303133; | ||||
|   } | ||||
|  | ||||
|   .el-dialog__footer { | ||||
|     padding: 15px 20px; | ||||
|     border-top: 1px solid #ebeef5; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										357
									
								
								src/views/design/billofQuantities/indexEdit1.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								src/views/design/billofQuantities/indexEdit1.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,357 @@ | ||||
| <template> | ||||
|   <div class="p-4 bg-gray-50"> | ||||
|     <div class="max-w-4xl mx-auto"> | ||||
|       <!-- 顶部按钮区域 --> | ||||
|       <el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md"> | ||||
|         <approvalButton | ||||
|           @submitForm="submitForm" | ||||
|           @approvalVerifyOpen="approvalVerifyOpen" | ||||
|           @handleApprovalRecord="handleApprovalRecord" | ||||
|           :buttonLoading="buttonLoading" | ||||
|           :id="form.versions" | ||||
|           :status="form.status" | ||||
|           :pageType="routeParams.type" | ||||
|         /> | ||||
|       </el-card> | ||||
|       <!-- 表单区域 --> | ||||
|       <el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden"> | ||||
|         <div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100"> | ||||
|           <h3 class="text-lg font-semibold text-gray-800">限价工程量清单</h3> | ||||
|         </div> | ||||
|         <div class="p-6"> | ||||
|           <el-form | ||||
|             ref="leaveFormRef" | ||||
|             v-loading="loading" | ||||
|             :disabled="routeParams.type === 'view' || form.status == 'waiting'" | ||||
|             :model="form" | ||||
|             :rules="rules" | ||||
|             label-width="100px" | ||||
|             class="space-y-4" | ||||
|           > | ||||
|             <div class="grid grid-cols-1 gap-4"> | ||||
|               <el-row> | ||||
|                 <el-col :span="12"> | ||||
|                   <el-form-item label="版本号" prop="formNo"> | ||||
|                     <el-input disabled v-model="form.versions" placeholder="请输入文件名称" /> | ||||
|                   </el-form-item> | ||||
|                 </el-col> | ||||
|               </el-row> | ||||
|             </div> | ||||
|           </el-form> | ||||
|           <el-table :data="tableData" style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" row-key="id" border> | ||||
|             <el-table-column prop="num" label="编号" /> | ||||
|             <el-table-column prop="name" label="名称" /> | ||||
|             <el-table-column prop="specification" label="规格" /> | ||||
|             <el-table-column prop="unit" label="单位" /> | ||||
|             <el-table-column prop="quantity" label="数量" /> | ||||
|             <el-table-column prop="remark" label="备注" /> | ||||
|           </el-table> | ||||
|         </div> | ||||
|       </el-card> | ||||
|       <!-- 提交组件 --> | ||||
|       <submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" /> | ||||
|       <approvalRecord ref="approvalRecordRef"></approvalRecord> | ||||
|       <!-- 流程选择对话框 --> | ||||
|       <el-dialog | ||||
|         draggable | ||||
|         v-model="dialogVisible.visible" | ||||
|         :title="dialogVisible.title" | ||||
|         :before-close="handleClose" | ||||
|         width="500" | ||||
|         class="rounded-lg shadow-lg" | ||||
|       > | ||||
|         <div class="p-4"> | ||||
|           <p class="text-gray-600 mb-4">请选择要启动的流程:</p> | ||||
|           <el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%"> | ||||
|             <el-option v-for="item in flowCodeOptions" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|           </el-select> | ||||
|         </div> | ||||
|         <template #footer> | ||||
|           <div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3"> | ||||
|             <el-button @click="handleClose" class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors" | ||||
|               >取消</el-button | ||||
|             > | ||||
|             <el-button type="primary" @click="submitFlow()" class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors" | ||||
|               >确认</el-button | ||||
|             > | ||||
|           </div> | ||||
|         </template> | ||||
|       </el-dialog> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup name="Leave" lang="ts"> | ||||
| import { LeaveForm, LeaveQuery, LeaveVO } from '@/api/workflow/leave/types'; | ||||
| import { startWorkFlow } from '@/api/workflow/task'; | ||||
| import SubmitVerify from '@/components/Process/submitVerify.vue'; | ||||
| import ApprovalRecord from '@/components/Process/approvalRecord.vue'; | ||||
| import ApprovalButton from '@/components/Process/approvalButton.vue'; | ||||
| import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
| import { useUserStoreHook } from '@/store/modules/user'; | ||||
| const { design_change_reason_type } = toRefs<any>(proxy?.useDict('design_change_reason_type')); | ||||
| import { detailsMaterialAndEquipmentApproval } from '@/api/design/billofQuantities/index'; | ||||
| // 获取用户 store | ||||
| const userStore = useUserStoreHook(); | ||||
| // 从 store 中获取项目列表和当前选中的项目 | ||||
| const currentProject = computed(() => userStore.selectedProject); | ||||
| const buttonLoading = ref(false); | ||||
| const loading = ref(true); | ||||
| //路由参数 | ||||
| const routeParams = ref<Record<string, any>>({}); | ||||
| const flowCode = ref<string>(''); | ||||
| const status = ref<string>(''); | ||||
| const dialogVisible = reactive<DialogOption>({ | ||||
|   visible: false, | ||||
|   title: '流程定义' | ||||
| }); | ||||
| //提交组件 | ||||
| const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>(); | ||||
| //审批记录组件 | ||||
| const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>(); | ||||
| //按钮组件 | ||||
| const flowCodeOptions = [ | ||||
|   { | ||||
|     value: currentProject.value?.id + '_priceEquipmentList', | ||||
|     label: '限价工程量清单' | ||||
|   } | ||||
| ]; | ||||
|  | ||||
| const leaveFormRef = ref<ElFormInstance>(); | ||||
| const dialog = reactive({ | ||||
|   visible: false, | ||||
|   title: '', | ||||
|   isEdit: false | ||||
| }); | ||||
| const submitFormData = ref<StartProcessBo>({ | ||||
|   businessId: '', | ||||
|   flowCode: '', | ||||
|   variables: {} | ||||
| }); | ||||
| const taskVariables = ref<Record<string, any>>({}); | ||||
|  | ||||
| const initFormData = { | ||||
|   id: undefined, | ||||
|   fileName: undefined, | ||||
|   fileUrl: undefined, | ||||
|   status: undefined, | ||||
|   originalName: undefined | ||||
| }; | ||||
| const data = reactive({ | ||||
|   form: { ...initFormData }, | ||||
|   tableData: [], | ||||
|   rules: {} | ||||
| }); | ||||
|  | ||||
| const handleClose = () => { | ||||
|   dialogVisible.visible = false; | ||||
|   flowCode.value = ''; | ||||
|   buttonLoading.value = false; | ||||
| }; | ||||
| const { form, rules, tableData } = toRefs(data); | ||||
|  | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|   form.value = { ...initFormData }; | ||||
|   leaveFormRef.value?.resetFields(); | ||||
| }; | ||||
|  | ||||
| /** 获取详情 */ | ||||
| const getInfo = () => { | ||||
|   loading.value = true; | ||||
|   buttonLoading.value = false; | ||||
|   nextTick(async () => { | ||||
|     const res = await detailsMaterialAndEquipmentApproval(routeParams.value.id); | ||||
|     console.log('res.data', res.data); | ||||
|  | ||||
|     Object.assign(form.value, res.data); | ||||
|     console.log('form', form.value); | ||||
|  | ||||
|     tableData.value = res.data.auditData; | ||||
|     loading.value = false; | ||||
|     buttonLoading.value = false; | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** 提交按钮 */ | ||||
| const submitForm = (status1: string) => { | ||||
|   status.value = status1; | ||||
|   submit(status.value, form.value); | ||||
| }; | ||||
|  | ||||
| const submitFlow = async () => { | ||||
|   handleStartWorkFlow(form.value); | ||||
|   dialogVisible.visible = false; | ||||
| }; | ||||
| //提交申请 | ||||
| const handleStartWorkFlow = async (data: LeaveForm) => { | ||||
|   try { | ||||
|     submitFormData.value.flowCode = flowCode.value; | ||||
|     submitFormData.value.businessId = data.versions; | ||||
|     //流程变量 | ||||
|     taskVariables.value = { | ||||
|       // leave4/5 使用的流程变量 | ||||
|       userList: ['1', '3', '4'] | ||||
|     }; | ||||
|     submitFormData.value.variables = taskVariables.value; | ||||
|     const resp = await startWorkFlow(submitFormData.value); | ||||
|     if (submitVerifyRef.value) { | ||||
|       buttonLoading.value = false; | ||||
|       submitVerifyRef.value.openDialog(resp.data.taskId); | ||||
|     } | ||||
|   } finally { | ||||
|     buttonLoading.value = false; | ||||
|   } | ||||
| }; | ||||
| //审批记录 | ||||
| const handleApprovalRecord = () => { | ||||
|   approvalRecordRef.value.init(form.value.versions); | ||||
| }; | ||||
| //提交回调 | ||||
| const submitCallback = async () => { | ||||
|   await proxy.$tab.closePage(proxy.$route); | ||||
|   proxy.$router.go(-1); | ||||
| }; | ||||
| //审批 | ||||
| const approvalVerifyOpen = async () => { | ||||
|   submitVerifyRef.value.openDialog(routeParams.value.taskId); | ||||
| }; | ||||
| // 图纸上传成功之后 开始提交 | ||||
| const submit = async (status, data) => { | ||||
|   form.value = data; | ||||
|   if (status === 'draft') { | ||||
|     buttonLoading.value = false; | ||||
|     proxy?.$modal.msgSuccess('暂存成功'); | ||||
|     proxy.$tab.closePage(proxy.$route); | ||||
|     proxy.$router.go(-1); | ||||
|   } else { | ||||
|     if ((form.value.status === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') { | ||||
|       flowCode.value = flowCodeOptions[0].value; | ||||
|       dialogVisible.visible = true; | ||||
|       return; | ||||
|     } | ||||
|     //说明启动过先随意穿个参数 | ||||
|     if (flowCode.value === '' || flowCode.value === null) { | ||||
|       flowCode.value = 'xx'; | ||||
|     } | ||||
|     await handleStartWorkFlow(data); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|   nextTick(async () => { | ||||
|     routeParams.value = proxy.$route.query; | ||||
|     reset(); | ||||
|     loading.value = false; | ||||
|     if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { | ||||
|       getInfo(); | ||||
|       console.log('routeParams.value', routeParams.value); | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
| <style scoped lang="scss"> | ||||
| /* 全局样式 */ | ||||
| :root { | ||||
|   --primary: #409eff; | ||||
|   --primary-light: #66b1ff; | ||||
|   --primary-dark: #3a8ee6; | ||||
|   --success: #67c23a; | ||||
|   --warning: #e6a23c; | ||||
|   --danger: #f56c6c; | ||||
|   --info: #909399; | ||||
| } | ||||
|  | ||||
| /* 表单样式优化 */ | ||||
| .el-form-item { | ||||
|   .el-form-item__label { | ||||
|     color: #606266; | ||||
|     font-weight: 500; | ||||
|   } | ||||
|  | ||||
|   .el-input__inner, | ||||
|   .el-select .el-input__inner { | ||||
|     border-radius: 4px; | ||||
|     transition: | ||||
|       border-color 0.2s, | ||||
|       box-shadow 0.2s; | ||||
|  | ||||
|     &:focus { | ||||
|       border-color: var(--primary-light); | ||||
|       box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .el-textarea__inner { | ||||
|     border-radius: 4px; | ||||
|     transition: | ||||
|       border-color 0.2s, | ||||
|       box-shadow 0.2s; | ||||
|  | ||||
|     &:focus { | ||||
|       border-color: var(--primary-light); | ||||
|       box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 按钮样式优化 */ | ||||
| .el-button { | ||||
|   border-radius: 4px; | ||||
|   transition: all 0.2s; | ||||
|  | ||||
|   &.is-primary { | ||||
|     background-color: var(--primary); | ||||
|     border-color: var(--primary); | ||||
|  | ||||
|     &:hover { | ||||
|       background-color: var(--primary-light); | ||||
|       border-color: var(--primary-light); | ||||
|     } | ||||
|  | ||||
|     &:active { | ||||
|       background-color: var(--primary-dark); | ||||
|       border-color: var(--primary-dark); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   &.is-text { | ||||
|     color: var(--primary); | ||||
|  | ||||
|     &:hover { | ||||
|       color: var(--primary-light); | ||||
|       background-color: rgba(64, 158, 255, 0.05); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 卡片样式优化 */ | ||||
| .el-card { | ||||
|   transition: all 0.3s ease; | ||||
|  | ||||
|   &:hover { | ||||
|     /* transform: translateY(-2px); */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 对话框样式优化 */ | ||||
| .el-dialog { | ||||
|   .el-dialog__header { | ||||
|     background-color: #f5f7fa; | ||||
|     border-bottom: 1px solid #ebeef5; | ||||
|     padding: 15px 20px; | ||||
|   } | ||||
|  | ||||
|   .el-dialog__title { | ||||
|     font-size: 16px; | ||||
|     font-weight: 600; | ||||
|     color: #303133; | ||||
|   } | ||||
|  | ||||
|   .el-dialog__footer { | ||||
|     padding: 15px 20px; | ||||
|     border-top: 1px solid #ebeef5; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										357
									
								
								src/views/design/billofQuantities/indexEdit2.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								src/views/design/billofQuantities/indexEdit2.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,357 @@ | ||||
| <template> | ||||
|   <div class="p-4 bg-gray-50"> | ||||
|     <div class="max-w-4xl mx-auto"> | ||||
|       <!-- 顶部按钮区域 --> | ||||
|       <el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md"> | ||||
|         <approvalButton | ||||
|           @submitForm="submitForm" | ||||
|           @approvalVerifyOpen="approvalVerifyOpen" | ||||
|           @handleApprovalRecord="handleApprovalRecord" | ||||
|           :buttonLoading="buttonLoading" | ||||
|           :id="form.versions" | ||||
|           :status="form.status" | ||||
|           :pageType="routeParams.type" | ||||
|         /> | ||||
|       </el-card> | ||||
|       <!-- 表单区域 --> | ||||
|       <el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden"> | ||||
|         <div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100"> | ||||
|           <h3 class="text-lg font-semibold text-gray-800">招采工程量清单</h3> | ||||
|         </div> | ||||
|         <div class="p-6"> | ||||
|           <el-form | ||||
|             ref="leaveFormRef" | ||||
|             v-loading="loading" | ||||
|             :disabled="routeParams.type === 'view' || form.status == 'waiting'" | ||||
|             :model="form" | ||||
|             :rules="rules" | ||||
|             label-width="100px" | ||||
|             class="space-y-4" | ||||
|           > | ||||
|             <div class="grid grid-cols-1 gap-4"> | ||||
|               <el-row> | ||||
|                 <el-col :span="12"> | ||||
|                   <el-form-item label="版本号" prop="formNo"> | ||||
|                     <el-input disabled v-model="form.versions" placeholder="请输入文件名称" /> | ||||
|                   </el-form-item> | ||||
|                 </el-col> | ||||
|               </el-row> | ||||
|             </div> | ||||
|           </el-form> | ||||
|           <el-table :data="tableData" style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" row-key="id" border> | ||||
|             <el-table-column prop="num" label="编号" /> | ||||
|             <el-table-column prop="name" label="名称" /> | ||||
|             <el-table-column prop="specification" label="规格" /> | ||||
|             <el-table-column prop="unit" label="单位" /> | ||||
|             <el-table-column prop="quantity" label="数量" /> | ||||
|             <el-table-column prop="remark" label="备注" /> | ||||
|           </el-table> | ||||
|         </div> | ||||
|       </el-card> | ||||
|       <!-- 提交组件 --> | ||||
|       <submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" /> | ||||
|       <approvalRecord ref="approvalRecordRef"></approvalRecord> | ||||
|       <!-- 流程选择对话框 --> | ||||
|       <el-dialog | ||||
|         draggable | ||||
|         v-model="dialogVisible.visible" | ||||
|         :title="dialogVisible.title" | ||||
|         :before-close="handleClose" | ||||
|         width="500" | ||||
|         class="rounded-lg shadow-lg" | ||||
|       > | ||||
|         <div class="p-4"> | ||||
|           <p class="text-gray-600 mb-4">请选择要启动的流程:</p> | ||||
|           <el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%"> | ||||
|             <el-option v-for="item in flowCodeOptions" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|           </el-select> | ||||
|         </div> | ||||
|         <template #footer> | ||||
|           <div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3"> | ||||
|             <el-button @click="handleClose" class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors" | ||||
|               >取消</el-button | ||||
|             > | ||||
|             <el-button type="primary" @click="submitFlow()" class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors" | ||||
|               >确认</el-button | ||||
|             > | ||||
|           </div> | ||||
|         </template> | ||||
|       </el-dialog> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup name="Leave" lang="ts"> | ||||
| import { LeaveForm, LeaveQuery, LeaveVO } from '@/api/workflow/leave/types'; | ||||
| import { startWorkFlow } from '@/api/workflow/task'; | ||||
| import SubmitVerify from '@/components/Process/submitVerify.vue'; | ||||
| import ApprovalRecord from '@/components/Process/approvalRecord.vue'; | ||||
| import ApprovalButton from '@/components/Process/approvalButton.vue'; | ||||
| import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
| import { useUserStoreHook } from '@/store/modules/user'; | ||||
| const { design_change_reason_type } = toRefs<any>(proxy?.useDict('design_change_reason_type')); | ||||
| import { detailsMaterialAndEquipmentApproval } from '@/api/design/billofQuantities/index'; | ||||
| // 获取用户 store | ||||
| const userStore = useUserStoreHook(); | ||||
| // 从 store 中获取项目列表和当前选中的项目 | ||||
| const currentProject = computed(() => userStore.selectedProject); | ||||
| const buttonLoading = ref(false); | ||||
| const loading = ref(true); | ||||
| //路由参数 | ||||
| const routeParams = ref<Record<string, any>>({}); | ||||
| const flowCode = ref<string>(''); | ||||
| const status = ref<string>(''); | ||||
| const dialogVisible = reactive<DialogOption>({ | ||||
|   visible: false, | ||||
|   title: '流程定义' | ||||
| }); | ||||
| //提交组件 | ||||
| const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>(); | ||||
| //审批记录组件 | ||||
| const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>(); | ||||
| //按钮组件 | ||||
| const flowCodeOptions = [ | ||||
|   { | ||||
|     value: currentProject.value?.id + '_pickEquipmentList', | ||||
|     label: '招采工程量清单审核' | ||||
|   } | ||||
| ]; | ||||
|  | ||||
| const leaveFormRef = ref<ElFormInstance>(); | ||||
| const dialog = reactive({ | ||||
|   visible: false, | ||||
|   title: '', | ||||
|   isEdit: false | ||||
| }); | ||||
| const submitFormData = ref<StartProcessBo>({ | ||||
|   businessId: '', | ||||
|   flowCode: '', | ||||
|   variables: {} | ||||
| }); | ||||
| const taskVariables = ref<Record<string, any>>({}); | ||||
|  | ||||
| const initFormData = { | ||||
|   id: undefined, | ||||
|   fileName: undefined, | ||||
|   fileUrl: undefined, | ||||
|   status: undefined, | ||||
|   originalName: undefined | ||||
| }; | ||||
| const data = reactive({ | ||||
|   form: { ...initFormData }, | ||||
|   tableData: [], | ||||
|   rules: {} | ||||
| }); | ||||
|  | ||||
| const handleClose = () => { | ||||
|   dialogVisible.visible = false; | ||||
|   flowCode.value = ''; | ||||
|   buttonLoading.value = false; | ||||
| }; | ||||
| const { form, rules, tableData } = toRefs(data); | ||||
|  | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|   form.value = { ...initFormData }; | ||||
|   leaveFormRef.value?.resetFields(); | ||||
| }; | ||||
|  | ||||
| /** 获取详情 */ | ||||
| const getInfo = () => { | ||||
|   loading.value = true; | ||||
|   buttonLoading.value = false; | ||||
|   nextTick(async () => { | ||||
|     const res = await detailsMaterialAndEquipmentApproval(routeParams.value.id); | ||||
|     console.log('res.data', res.data); | ||||
|  | ||||
|     Object.assign(form.value, res.data); | ||||
|     console.log('form', form.value); | ||||
|  | ||||
|     tableData.value = res.data.auditData; | ||||
|     loading.value = false; | ||||
|     buttonLoading.value = false; | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** 提交按钮 */ | ||||
| const submitForm = (status1: string) => { | ||||
|   status.value = status1; | ||||
|   submit(status.value, form.value); | ||||
| }; | ||||
|  | ||||
| const submitFlow = async () => { | ||||
|   handleStartWorkFlow(form.value); | ||||
|   dialogVisible.visible = false; | ||||
| }; | ||||
| //提交申请 | ||||
| const handleStartWorkFlow = async (data: LeaveForm) => { | ||||
|   try { | ||||
|     submitFormData.value.flowCode = flowCode.value; | ||||
|     submitFormData.value.businessId = data.versions; | ||||
|     //流程变量 | ||||
|     taskVariables.value = { | ||||
|       // leave4/5 使用的流程变量 | ||||
|       userList: ['1', '3', '4'] | ||||
|     }; | ||||
|     submitFormData.value.variables = taskVariables.value; | ||||
|     const resp = await startWorkFlow(submitFormData.value); | ||||
|     if (submitVerifyRef.value) { | ||||
|       buttonLoading.value = false; | ||||
|       submitVerifyRef.value.openDialog(resp.data.taskId); | ||||
|     } | ||||
|   } finally { | ||||
|     buttonLoading.value = false; | ||||
|   } | ||||
| }; | ||||
| //审批记录 | ||||
| const handleApprovalRecord = () => { | ||||
|   approvalRecordRef.value.init(form.value.versions); | ||||
| }; | ||||
| //提交回调 | ||||
| const submitCallback = async () => { | ||||
|   await proxy.$tab.closePage(proxy.$route); | ||||
|   proxy.$router.go(-1); | ||||
| }; | ||||
| //审批 | ||||
| const approvalVerifyOpen = async () => { | ||||
|   submitVerifyRef.value.openDialog(routeParams.value.taskId); | ||||
| }; | ||||
| // 图纸上传成功之后 开始提交 | ||||
| const submit = async (status, data) => { | ||||
|   form.value = data; | ||||
|   if (status === 'draft') { | ||||
|     buttonLoading.value = false; | ||||
|     proxy?.$modal.msgSuccess('暂存成功'); | ||||
|     proxy.$tab.closePage(proxy.$route); | ||||
|     proxy.$router.go(-1); | ||||
|   } else { | ||||
|     if ((form.value.status === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') { | ||||
|       flowCode.value = flowCodeOptions[0].value; | ||||
|       dialogVisible.visible = true; | ||||
|       return; | ||||
|     } | ||||
|     //说明启动过先随意穿个参数 | ||||
|     if (flowCode.value === '' || flowCode.value === null) { | ||||
|       flowCode.value = 'xx'; | ||||
|     } | ||||
|     await handleStartWorkFlow(data); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|   nextTick(async () => { | ||||
|     routeParams.value = proxy.$route.query; | ||||
|     reset(); | ||||
|     loading.value = false; | ||||
|     if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { | ||||
|       getInfo(); | ||||
|       console.log('routeParams.value', routeParams.value); | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
| </script> | ||||
| <style scoped lang="scss"> | ||||
| /* 全局样式 */ | ||||
| :root { | ||||
|   --primary: #409eff; | ||||
|   --primary-light: #66b1ff; | ||||
|   --primary-dark: #3a8ee6; | ||||
|   --success: #67c23a; | ||||
|   --warning: #e6a23c; | ||||
|   --danger: #f56c6c; | ||||
|   --info: #909399; | ||||
| } | ||||
|  | ||||
| /* 表单样式优化 */ | ||||
| .el-form-item { | ||||
|   .el-form-item__label { | ||||
|     color: #606266; | ||||
|     font-weight: 500; | ||||
|   } | ||||
|  | ||||
|   .el-input__inner, | ||||
|   .el-select .el-input__inner { | ||||
|     border-radius: 4px; | ||||
|     transition: | ||||
|       border-color 0.2s, | ||||
|       box-shadow 0.2s; | ||||
|  | ||||
|     &:focus { | ||||
|       border-color: var(--primary-light); | ||||
|       box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .el-textarea__inner { | ||||
|     border-radius: 4px; | ||||
|     transition: | ||||
|       border-color 0.2s, | ||||
|       box-shadow 0.2s; | ||||
|  | ||||
|     &:focus { | ||||
|       border-color: var(--primary-light); | ||||
|       box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 按钮样式优化 */ | ||||
| .el-button { | ||||
|   border-radius: 4px; | ||||
|   transition: all 0.2s; | ||||
|  | ||||
|   &.is-primary { | ||||
|     background-color: var(--primary); | ||||
|     border-color: var(--primary); | ||||
|  | ||||
|     &:hover { | ||||
|       background-color: var(--primary-light); | ||||
|       border-color: var(--primary-light); | ||||
|     } | ||||
|  | ||||
|     &:active { | ||||
|       background-color: var(--primary-dark); | ||||
|       border-color: var(--primary-dark); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   &.is-text { | ||||
|     color: var(--primary); | ||||
|  | ||||
|     &:hover { | ||||
|       color: var(--primary-light); | ||||
|       background-color: rgba(64, 158, 255, 0.05); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 卡片样式优化 */ | ||||
| .el-card { | ||||
|   transition: all 0.3s ease; | ||||
|  | ||||
|   &:hover { | ||||
|     /* transform: translateY(-2px); */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* 对话框样式优化 */ | ||||
| .el-dialog { | ||||
|   .el-dialog__header { | ||||
|     background-color: #f5f7fa; | ||||
|     border-bottom: 1px solid #ebeef5; | ||||
|     padding: 15px 20px; | ||||
|   } | ||||
|  | ||||
|   .el-dialog__title { | ||||
|     font-size: 16px; | ||||
|     font-weight: 600; | ||||
|     color: #303133; | ||||
|   } | ||||
|  | ||||
|   .el-dialog__footer { | ||||
|     padding: 15px 20px; | ||||
|     border-top: 1px solid #ebeef5; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @ -114,7 +114,7 @@ const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>(); | ||||
| const flowCodeOptions = [ | ||||
|   { | ||||
|     value: currentProject.value?.id + '_equipmentList', | ||||
|     label: '工程量清单审核' | ||||
|     label: '物资设备清单审核' | ||||
|   } | ||||
| ]; | ||||
| 
 | ||||
		Reference in New Issue
	
	Block a user