完善机械模块页面
This commit is contained in:
		| @ -48,7 +48,6 @@ export interface MachineryDetailVO { | ||||
|    * 机械主键id | ||||
|    */ | ||||
|   machineryId: string | number; | ||||
|  | ||||
| } | ||||
|  | ||||
| export interface MachineryDetailForm extends BaseEntity { | ||||
| @ -101,11 +100,9 @@ export interface MachineryDetailForm extends BaseEntity { | ||||
|    * 机械主键id | ||||
|    */ | ||||
|   machineryId?: string | number; | ||||
|  | ||||
| } | ||||
|  | ||||
| export interface MachineryDetailQuery extends PageQuery { | ||||
|  | ||||
| export interface MachineryDetailQuery extends PageRequest { | ||||
|   /** | ||||
|    * 检验证编号 | ||||
|    */ | ||||
| @ -151,6 +148,3 @@ export interface MachineryDetailQuery extends PageQuery { | ||||
|    */ | ||||
|   params?: any; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -0,0 +1,113 @@ | ||||
| <template> | ||||
|   <el-dialog title="添加机械出入场详情" v-model="visible" width="500px" append-to-body> | ||||
|     <el-form ref="formRef" :model="form" :rules="rules" label-width="140px"> | ||||
|       <el-form-item label="出入场" prop="outPut"> | ||||
|         <el-select v-model="form.type" clearable placeholder="请选择出入场"> | ||||
|           <el-option v-for="item in machinery_entry_exit_type" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="检验证编号" prop="checkoutNumber"> | ||||
|         <el-input v-model="form.checkoutNumber" placeholder="请输入检验证编号" /> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="检验单位" prop="checkoutUnit"> | ||||
|         <el-input v-model="form.checkoutUnit" placeholder="请输入检验单位" /> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="检定日期/有效期" prop="checkoutDate"> | ||||
|         <el-date-picker clearable v-model="form.checkoutDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择检定日期/有效期"> | ||||
|         </el-date-picker> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="施工类型状态" prop="outPut"> | ||||
|         <el-select v-model="form.status" clearable placeholder="请选择施工类型状态"> | ||||
|           <el-option v-for="item in sys_normal_disable" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="入场时间" prop="checkoutDate"> | ||||
|         <el-date-picker clearable v-model="form.entryTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择入场时间"> | ||||
|         </el-date-picker> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="备注" prop="remark"> | ||||
|         <el-input v-model="form.remark" type="textarea" placeholder="请输入备注" /> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="图片" prop="picture"> | ||||
|         <el-input v-model="form.picture" placeholder="请输入图片" /> | ||||
|       </el-form-item> | ||||
|     </el-form> | ||||
|     <template #footer> | ||||
|       <div class="dialog-footer"> | ||||
|         <el-button :loading="loading" type="primary" @click="submitForm">提 交</el-button> | ||||
|         <el-button @click="closeDialog">取 消</el-button> | ||||
|       </div> | ||||
|     </template> | ||||
|   </el-dialog> | ||||
| </template> | ||||
| <script setup lang="ts"> | ||||
| import { defineExpose, reactive, ref } from 'vue'; | ||||
| import { ElMessage } from 'element-plus'; | ||||
| import { MachineryDetailForm } from '@/api/machinery/machineryDetail/types'; | ||||
| import { addMachineryDetail } from '@/api/machinery/machineryDetail'; | ||||
|  | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
| const { machinery_entry_exit_type, sys_normal_disable } = toRefs<any>(proxy?.useDict('machinery_entry_exit_type', 'sys_normal_disable')); | ||||
|  | ||||
| interface Props { | ||||
|   machineryId: string | number; | ||||
| } | ||||
|  | ||||
| const props = defineProps<Props>(); | ||||
|  | ||||
| const visible = ref<boolean>(false); | ||||
| const loading = ref<boolean>(false); | ||||
|  | ||||
| // 定义表单数据,注意结构与校验规则需要与接口对应 | ||||
| const form = reactive<MachineryDetailForm>({ | ||||
|   machineryId: props.machineryId, | ||||
|   checkoutNumber: '', | ||||
|   checkoutUnit: '', | ||||
|   checkoutDate: '', | ||||
|   status: undefined, | ||||
|   type: undefined, | ||||
|   entryTime: '', | ||||
|   remark: '', | ||||
|   picture: '' | ||||
| }); | ||||
|  | ||||
| // 定义校验规则 | ||||
| const rules = reactive({ | ||||
|   checkoutNumber: [{ required: true, message: '请输入检验证编号', trigger: 'blur' }], | ||||
|   checkoutUnit: [{ required: true, message: '请输入检验单位', trigger: 'blur' }], | ||||
|   checkoutDate: [{ required: true, message: '请选择检定日期', trigger: 'blur' }], | ||||
|   entryTime: [{ required: true, message: '请选择进场时间', trigger: 'blur' }] | ||||
| }); | ||||
|  | ||||
| const formRef = ref(); | ||||
|  | ||||
| const submitForm = () => { | ||||
|   formRef.value.validate(async (valid: boolean) => { | ||||
|     if (!valid) return; | ||||
|     loading.value = true; | ||||
|     try { | ||||
|       // 调用接口提交数据 | ||||
|       await addMachineryDetail({ ...form, machineryId: props.machineryId }).finally(() => (loading.value = false)); | ||||
|       ElMessage.success('提交成功'); | ||||
|       closeDialog(); | ||||
|     } catch (error) { | ||||
|       ElMessage.error('提交失败'); | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| const closeDialog = () => { | ||||
|   visible.value = false; | ||||
|   // 重置表单数据 | ||||
|   formRef.value.resetFields(); | ||||
| }; | ||||
|  | ||||
| // 供外部调用的打开方法 | ||||
| const openDialog = () => { | ||||
|   visible.value = true; | ||||
| }; | ||||
|  | ||||
| defineExpose({ | ||||
|   openDialog | ||||
| }); | ||||
| </script> | ||||
							
								
								
									
										186
									
								
								plus-ui/src/views/machinery/component/MachineryDetailTable.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								plus-ui/src/views/machinery/component/MachineryDetailTable.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,186 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <el-table size="small" v-if="machineryDetailList.length !== 0" :data="machineryDetailList"> | ||||
|       <el-table-column label="出入场" align="center" prop="type"> | ||||
|         <template #default="scope"> | ||||
|           <dict-tag :options="machinery_entry_exit_type" :value="scope.row.type" /> | ||||
|         </template> | ||||
|       </el-table-column> | ||||
|       <el-table-column label="检验证编号" align="center" prop="checkoutNumber" /> | ||||
|       <el-table-column label="检验单位" align="center" prop="checkoutUnit" /> | ||||
|       <el-table-column label="检定日期/有效期" align="center" prop="checkoutDate" /> | ||||
|       <el-table-column label="入场时间" align="center" prop="entryTime" /> | ||||
|       <el-table-column label="图片" align="center" prop="picture"> | ||||
|         <template #default="scope"> | ||||
|           <el-image :src="scope.row.picture" /> | ||||
|         </template> | ||||
|       </el-table-column> | ||||
|       <el-table-column label="备注" align="center" prop="remark" /> | ||||
|       <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||
|         <template #default="scope"> | ||||
|           <el-space wrap> | ||||
|             <el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['machinery:machineryDetail:edit']"> | ||||
|               修改 | ||||
|             </el-button> | ||||
|           </el-space> | ||||
|           <el-space wrap> | ||||
|             <el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['machinery:machineryDetail:remove']"> | ||||
|               删除 | ||||
|             </el-button> | ||||
|           </el-space> | ||||
|         </template> | ||||
|       </el-table-column> | ||||
|     </el-table> | ||||
|     <pagination v-show="total > 0" :total="total" v-model:page="queryParams.current" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|     <el-dialog title="修改机械出入场详情" v-model="dialogRef" width="500px" append-to-body> | ||||
|       <el-form ref="formRef" :model="form" :rules="rules" label-width="140px"> | ||||
|         <el-form-item label="出入场" prop="type"> | ||||
|           <el-select v-model="form.type" clearable placeholder="请选择出入场"> | ||||
|             <el-option v-for="item in machinery_entry_exit_type" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|           </el-select> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="检验证编号" prop="checkoutNumber"> | ||||
|           <el-input v-model="form.checkoutNumber" placeholder="请输入检验证编号" /> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="检验单位" prop="checkoutUnit"> | ||||
|           <el-input v-model="form.checkoutUnit" placeholder="请输入检验单位" /> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="检定日期/有效期" prop="checkoutDate"> | ||||
|           <el-date-picker | ||||
|             clearable | ||||
|             v-model="form.checkoutDate" | ||||
|             type="datetime" | ||||
|             value-format="YYYY-MM-DD HH:mm:ss" | ||||
|             placeholder="请选择检定日期/有效期" | ||||
|           > | ||||
|           </el-date-picker> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="施工类型状态" prop="status"> | ||||
|           <el-select v-model="form.status" clearable placeholder="请选择施工类型状态"> | ||||
|             <el-option v-for="item in sys_normal_disable" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|           </el-select> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="入场时间" prop="checkoutDate"> | ||||
|           <el-date-picker clearable v-model="form.entryTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择入场时间"> | ||||
|           </el-date-picker> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="备注" prop="remark"> | ||||
|           <el-input v-model="form.remark" type="textarea" placeholder="请输入备注" /> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="图片" prop="picture"> | ||||
|           <el-input v-model="form.picture" placeholder="请输入图片" /> | ||||
|         </el-form-item> | ||||
|       </el-form> | ||||
|       <template #footer> | ||||
|         <div class="dialog-footer"> | ||||
|           <el-button :loading="loading" type="primary" @click="submitForm">提 交</el-button> | ||||
|           <el-button @click="closeDialog">取 消</el-button> | ||||
|         </div> | ||||
|       </template> | ||||
|     </el-dialog> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import { MachineryDetailForm, MachineryDetailQuery, MachineryDetailVO } from '@/api/machinery/machineryDetail/types'; | ||||
| import { delMachineryDetail, getMachineryDetail, listMachineryDetail, updateMachineryDetail } from '@/api/machinery/machineryDetail'; | ||||
| import { ref } from 'vue'; | ||||
|  | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
| const { machinery_entry_exit_type, sys_normal_disable } = toRefs<any>(proxy?.useDict('machinery_entry_exit_type', 'sys_normal_disable')); | ||||
|  | ||||
| interface Props { | ||||
|   machineryId: string | number; | ||||
| } | ||||
|  | ||||
| const props = defineProps<Props>(); | ||||
| const ids = ref<Array<string | number>>([]); | ||||
| const formRef = ref(); | ||||
| const loading = ref(true); | ||||
| const total = ref<number>(0); | ||||
| const initFormData: MachineryDetailForm = { | ||||
|   id: undefined, | ||||
|   checkoutNumber: undefined, | ||||
|   checkoutUnit: undefined, | ||||
|   checkoutDate: undefined, | ||||
|   status: undefined, | ||||
|   type: undefined, | ||||
|   entryTime: undefined, | ||||
|   remark: undefined, | ||||
|   picture: undefined, | ||||
|   machineryId: undefined | ||||
| }; | ||||
| const data = reactive<PageData<MachineryDetailForm, MachineryDetailQuery>>({ | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     current: 1, | ||||
|     pageSize: 10, | ||||
|     sortField: 'createTime', | ||||
|     sortOrder: 'descend', | ||||
|     checkoutNumber: undefined, | ||||
|     checkoutUnit: undefined, | ||||
|     checkoutDate: undefined, | ||||
|     status: undefined, | ||||
|     type: undefined, | ||||
|     entryTime: undefined, | ||||
|     picture: undefined, | ||||
|     machineryId: props.machineryId | ||||
|   }, | ||||
|   rules: { | ||||
|     checkoutNumber: [{ required: true, message: '请输入检验证编号', trigger: 'blur' }], | ||||
|     checkoutUnit: [{ required: true, message: '请输入检验单位', trigger: 'blur' }], | ||||
|     checkoutDate: [{ required: true, message: '请选择检定日期', trigger: 'blur' }], | ||||
|     entryTime: [{ required: true, message: '请选择进场时间', trigger: 'blur' }] | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs(data); | ||||
|  | ||||
| const machineryDetailList = ref<MachineryDetailVO[]>([]); | ||||
| /** 展开选中数据 */ | ||||
| const getList = async () => { | ||||
|   loading.value = true; | ||||
|   const res = await listMachineryDetail(queryParams.value); | ||||
|   machineryDetailList.value = res.data.records; | ||||
|   total.value = res.data.total; | ||||
|   loading.value = false; | ||||
| }; | ||||
|  | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: MachineryDetailVO) => { | ||||
|   const _ids = row?.id || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除机械详情编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false)); | ||||
|   await delMachineryDetail(_ids); | ||||
|   proxy?.$modal.msgSuccess('删除成功'); | ||||
|   await getList(); | ||||
| }; | ||||
|  | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = async (row?: MachineryDetailVO) => { | ||||
|   const _id = row?.id || ids.value[0]; | ||||
|   const res = await getMachineryDetail(_id); | ||||
|   Object.assign(form.value, res.data); | ||||
|   dialogRef.value = true; | ||||
| }; | ||||
|  | ||||
| const dialogRef = ref(); | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|   formRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       loading.value = true; | ||||
|       await updateMachineryDetail(form.value).finally(() => (loading.value = false)); | ||||
|       proxy?.$modal.msgSuccess('操作成功'); | ||||
|       dialogRef.value = false; | ||||
|       await getList(); | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
| /** 取消按钮 */ | ||||
| const closeDialog = () => { | ||||
|   dialogRef.value = false; | ||||
| }; | ||||
| onMounted(() => { | ||||
|   getList(); | ||||
| }); | ||||
| </script> | ||||
| @ -7,9 +7,6 @@ | ||||
|             <el-form-item label="机械名称" prop="machineryName"> | ||||
|               <el-input v-model="queryParams.machineryName" placeholder="请输入机械名称" clearable @keyup.enter="handleQuery" /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="机械型号" prop="machineryNumber"> | ||||
|               <el-input v-model="queryParams.machineryNumber" placeholder="请输入机械型号" clearable @keyup.enter="handleQuery" /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="负责人" prop="principal"> | ||||
|               <el-input v-model="queryParams.principal" placeholder="请输入负责人" clearable @keyup.enter="handleQuery" /> | ||||
|             </el-form-item> | ||||
| @ -29,13 +26,13 @@ | ||||
|             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['machinery:machinery:add']"> 新增 </el-button> | ||||
|           </el-col> | ||||
|           <el-col :span="1.5"> | ||||
|             <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['machinery:machinery:edit']" | ||||
|               >修改 | ||||
|             <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['machinery:machinery:edit']"> | ||||
|               修改 | ||||
|             </el-button> | ||||
|           </el-col> | ||||
|           <el-col :span="1.5"> | ||||
|             <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['machinery:machinery:remove']" | ||||
|               >删除 | ||||
|             <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['machinery:machinery:remove']"> | ||||
|               删除 | ||||
|             </el-button> | ||||
|           </el-col> | ||||
|           <el-col :span="1.5"> | ||||
| @ -45,7 +42,19 @@ | ||||
|         </el-row> | ||||
|       </template> | ||||
|  | ||||
|       <el-table v-loading="loading" :data="machineryList" @selection-change="handleSelectionChange"> | ||||
|       <el-table | ||||
|         v-loading="loading" | ||||
|         :data="machineryList" | ||||
|         @selection-change="handleSelectionChange" | ||||
|         :row-key="getRowKey" | ||||
|         :expand-row-keys="expandedRowKeys" | ||||
|         @expand-change="handleExpandChange" | ||||
|       > | ||||
|         <el-table-column type="expand"> | ||||
|           <template #default=""> | ||||
|             <machinery-detail-table :machinery-id="expandedRowKeys[0]" /> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column type="selection" width="55" align="center" /> | ||||
|         <el-table-column label="序号" type="index" width="60" align="center" /> | ||||
|         <el-table-column label="机械名称" align="center" prop="machineryName" /> | ||||
| @ -55,12 +64,13 @@ | ||||
|         <el-table-column label="备注" align="center" prop="remark" /> | ||||
|         <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||
|           <template #default="scope"> | ||||
|             <el-tooltip content="修改" placement="top"> | ||||
|               <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['machinery:machinery:edit']"></el-button> | ||||
|             </el-tooltip> | ||||
|             <el-tooltip content="删除" placement="top"> | ||||
|               <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['machinery:machinery:remove']"></el-button> | ||||
|             </el-tooltip> | ||||
|             <el-space wrap> | ||||
|               <el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['machinery:machinery:edit']">修改 </el-button> | ||||
|               <el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['machinery:machinery:remove']"> | ||||
|                 删除 | ||||
|               </el-button> | ||||
|               <el-button link type="primary" icon="Plus" @click="handleAddMachineryDetail(scope.row)"> 入场</el-button> | ||||
|             </el-space> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|       </el-table> | ||||
| @ -93,6 +103,7 @@ | ||||
|         </div> | ||||
|       </template> | ||||
|     </el-dialog> | ||||
|     <machinery-detail-add-dialog :machinery-id="currentMachineryId" ref="dialogRef" /> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @ -101,6 +112,8 @@ import { addMachinery, delMachinery, getMachinery, listMachinery, updateMachiner | ||||
| import { MachineryForm, MachineryQuery, MachineryVO } from '@/api/machinery/machinery/types'; | ||||
|  | ||||
| import { useUserStoreHook } from '@/store/modules/user'; | ||||
| import MachineryDetailTable from '@/views/machinery/component/MachineryDetailTable.vue'; | ||||
| import MachineryDetailAddDialog from '@/views/machinery/component/MachineryDetailAddDialog.vue'; | ||||
|  | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
|  | ||||
| @ -247,6 +260,29 @@ const handleExport = () => { | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| // 存储当前展开行的 key 数组(只允许一个展开) | ||||
| const expandedRowKeys = ref([]); | ||||
| // row-key 函数:返回每一行的唯一标识 | ||||
| const getRowKey = (row: any) => row.id; | ||||
| /** 展开选中数据 */ | ||||
| const handleExpandChange = async (selection: MachineryVO, expanded: any) => { | ||||
|   if (expanded) { | ||||
|     // 展开当前行时,将其他展开行关闭,只保留当前行 id | ||||
|     expandedRowKeys.value = [selection.id]; | ||||
|   } else { | ||||
|     // 收起当前行时,从 expandedRowKeys 中移除 | ||||
|     expandedRowKeys.value = expandedRowKeys.value.filter((key) => key !== selection.id); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| const dialogRef = ref(); | ||||
| const currentMachineryId = ref<number | string>(0); | ||||
| /** 添加机械出入场详情 */ | ||||
| const handleAddMachineryDetail = (row?: MachineryVO) => { | ||||
|   currentMachineryId.value = row.id ?? 0; | ||||
|   dialogRef.value.openDialog(); | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|   getList(); | ||||
| }); | ||||
|  | ||||
| @ -1,281 +0,0 @@ | ||||
| <template> | ||||
|   <div class="p-2"> | ||||
|     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||
|       <div v-show="showSearch" class="mb-[10px]"> | ||||
|         <el-card shadow="hover"> | ||||
|           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||
|             <el-form-item label="检验证编号" prop="checkoutNumber"> | ||||
|               <el-input v-model="queryParams.checkoutNumber" placeholder="请输入检验证编号" clearable @keyup.enter="handleQuery" /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="检验单位" prop="checkoutUnit"> | ||||
|               <el-input v-model="queryParams.checkoutUnit" placeholder="请输入检验单位" clearable @keyup.enter="handleQuery" /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="检定日期/有效期" prop="checkoutDate"> | ||||
|               <el-input v-model="queryParams.checkoutDate" placeholder="请输入检定日期/有效期" clearable @keyup.enter="handleQuery" /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="入场时间" prop="entryTime"> | ||||
|               <el-date-picker clearable | ||||
|                 v-model="queryParams.entryTime" | ||||
|                 type="date" | ||||
|                 value-format="YYYY-MM-DD" | ||||
|                 placeholder="请选择入场时间" | ||||
|               /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="图片(英文逗号分隔)" prop="picture"> | ||||
|               <el-input v-model="queryParams.picture" placeholder="请输入图片(英文逗号分隔)" clearable @keyup.enter="handleQuery" /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="机械主键id" prop="machineryId"> | ||||
|               <el-input v-model="queryParams.machineryId" placeholder="请输入机械主键id" clearable @keyup.enter="handleQuery" /> | ||||
|             </el-form-item> | ||||
|             <el-form-item> | ||||
|               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||
|               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||
|             </el-form-item> | ||||
|           </el-form> | ||||
|         </el-card> | ||||
|       </div> | ||||
|     </transition> | ||||
|  | ||||
|     <el-card shadow="never"> | ||||
|       <template #header> | ||||
|         <el-row :gutter="10" class="mb8"> | ||||
|           <el-col :span="1.5"> | ||||
|             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['machinery:machineryDetail:add']">新增</el-button> | ||||
|           </el-col> | ||||
|           <el-col :span="1.5"> | ||||
|             <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['machinery:machineryDetail:edit']">修改</el-button> | ||||
|           </el-col> | ||||
|           <el-col :span="1.5"> | ||||
|             <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['machinery:machineryDetail:remove']">删除</el-button> | ||||
|           </el-col> | ||||
|           <el-col :span="1.5"> | ||||
|             <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['machinery:machineryDetail:export']">导出</el-button> | ||||
|           </el-col> | ||||
|           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||
|         </el-row> | ||||
|       </template> | ||||
|  | ||||
|       <el-table v-loading="loading" :data="machineryDetailList" @selection-change="handleSelectionChange"> | ||||
|         <el-table-column type="selection" width="55" align="center" /> | ||||
|         <el-table-column label="主键id" align="center" prop="id" v-if="true" /> | ||||
|         <el-table-column label="检验证编号" align="center" prop="checkoutNumber" /> | ||||
|         <el-table-column label="检验单位" align="center" prop="checkoutUnit" /> | ||||
|         <el-table-column label="检定日期/有效期" align="center" prop="checkoutDate" /> | ||||
|         <el-table-column label="施工类型状态" align="center" prop="status" /> | ||||
|         <el-table-column label="0入场 1出场" align="center" prop="type" /> | ||||
|         <el-table-column label="入场时间" align="center" prop="entryTime" width="180"> | ||||
|           <template #default="scope"> | ||||
|             <span>{{ parseTime(scope.row.entryTime, '{y}-{m}-{d}') }}</span> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column label="备注" align="center" prop="remark" /> | ||||
|         <el-table-column label="图片(英文逗号分隔)" align="center" prop="picture" /> | ||||
|         <el-table-column label="机械主键id" align="center" prop="machineryId" /> | ||||
|         <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||
|           <template #default="scope"> | ||||
|             <el-tooltip content="修改" placement="top"> | ||||
|               <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['machinery:machineryDetail:edit']"></el-button> | ||||
|             </el-tooltip> | ||||
|             <el-tooltip content="删除" placement="top"> | ||||
|               <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['machinery:machineryDetail:remove']"></el-button> | ||||
|             </el-tooltip> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|       </el-table> | ||||
|  | ||||
|       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|     </el-card> | ||||
|     <!-- 添加或修改机械详情对话框 --> | ||||
|     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> | ||||
|       <el-form ref="machineryDetailFormRef" :model="form" :rules="rules" label-width="80px"> | ||||
|         <el-form-item label="检验证编号" prop="checkoutNumber"> | ||||
|           <el-input v-model="form.checkoutNumber" placeholder="请输入检验证编号" /> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="检验单位" prop="checkoutUnit"> | ||||
|           <el-input v-model="form.checkoutUnit" placeholder="请输入检验单位" /> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="检定日期/有效期" prop="checkoutDate"> | ||||
|           <el-input v-model="form.checkoutDate" placeholder="请输入检定日期/有效期" /> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="入场时间" prop="entryTime"> | ||||
|           <el-date-picker clearable | ||||
|             v-model="form.entryTime" | ||||
|             type="datetime" | ||||
|             value-format="YYYY-MM-DD HH:mm:ss" | ||||
|             placeholder="请选择入场时间"> | ||||
|           </el-date-picker> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="备注" prop="remark"> | ||||
|             <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="图片(英文逗号分隔)" prop="picture"> | ||||
|             <el-input v-model="form.picture" type="textarea" placeholder="请输入内容" /> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="机械主键id" prop="machineryId"> | ||||
|           <el-input v-model="form.machineryId" placeholder="请输入机械主键id" /> | ||||
|         </el-form-item> | ||||
|       </el-form> | ||||
|       <template #footer> | ||||
|         <div class="dialog-footer"> | ||||
|           <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> | ||||
|           <el-button @click="cancel">取 消</el-button> | ||||
|         </div> | ||||
|       </template> | ||||
|     </el-dialog> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup name="MachineryDetail" lang="ts"> | ||||
| import { listMachineryDetail, getMachineryDetail, delMachineryDetail, addMachineryDetail, updateMachineryDetail } from '@/api/machinery/machineryDetail'; | ||||
| import { MachineryDetailVO, MachineryDetailQuery, MachineryDetailForm } from '@/api/machinery/machineryDetail/types'; | ||||
|  | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
|  | ||||
| const machineryDetailList = ref<MachineryDetailVO[]>([]); | ||||
| const buttonLoading = ref(false); | ||||
| const loading = ref(true); | ||||
| const showSearch = ref(true); | ||||
| const ids = ref<Array<string | number>>([]); | ||||
| const single = ref(true); | ||||
| const multiple = ref(true); | ||||
| const total = ref(0); | ||||
|  | ||||
| const queryFormRef = ref<ElFormInstance>(); | ||||
| const machineryDetailFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| const initFormData: MachineryDetailForm = { | ||||
|   id: undefined, | ||||
|   checkoutNumber: undefined, | ||||
|   checkoutUnit: undefined, | ||||
|   checkoutDate: undefined, | ||||
|   status: undefined, | ||||
|   type: undefined, | ||||
|   entryTime: undefined, | ||||
|   remark: undefined, | ||||
|   picture: undefined, | ||||
|   machineryId: undefined, | ||||
| } | ||||
| const data = reactive<PageData<MachineryDetailForm, MachineryDetailQuery>>({ | ||||
|   form: {...initFormData}, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     checkoutNumber: undefined, | ||||
|     checkoutUnit: undefined, | ||||
|     checkoutDate: undefined, | ||||
|     status: undefined, | ||||
|     type: undefined, | ||||
|     entryTime: undefined, | ||||
|     picture: undefined, | ||||
|     machineryId: undefined, | ||||
|     params: { | ||||
|     } | ||||
|   }, | ||||
|   rules: { | ||||
|     id: [ | ||||
|       { required: true, message: "主键id不能为空", trigger: "blur" } | ||||
|     ], | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs(data); | ||||
|  | ||||
| /** 查询机械详情列表 */ | ||||
| const getList = async () => { | ||||
|   loading.value = true; | ||||
|   const res = await listMachineryDetail(queryParams.value); | ||||
|   machineryDetailList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
| } | ||||
|  | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|   reset(); | ||||
|   dialog.visible = false; | ||||
| } | ||||
|  | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|   form.value = {...initFormData}; | ||||
|   machineryDetailFormRef.value?.resetFields(); | ||||
| } | ||||
|  | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
|  | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
|  | ||||
| /** 多选框选中数据 */ | ||||
| const handleSelectionChange = (selection: MachineryDetailVO[]) => { | ||||
|   ids.value = selection.map(item => item.id); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
|  | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = () => { | ||||
|   reset(); | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加机械详情"; | ||||
| } | ||||
|  | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = async (row?: MachineryDetailVO) => { | ||||
|   reset(); | ||||
|   const _id = row?.id || ids.value[0] | ||||
|   const res = await getMachineryDetail(_id); | ||||
|   Object.assign(form.value, res.data); | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改机械详情"; | ||||
| } | ||||
|  | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|   machineryDetailFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       buttonLoading.value = true; | ||||
|       if (form.value.id) { | ||||
|         await updateMachineryDetail(form.value).finally(() =>  buttonLoading.value = false); | ||||
|       } else { | ||||
|         await addMachineryDetail(form.value).finally(() =>  buttonLoading.value = false); | ||||
|       } | ||||
|       proxy?.$modal.msgSuccess("操作成功"); | ||||
|       dialog.visible = false; | ||||
|       await getList(); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: MachineryDetailVO) => { | ||||
|   const _ids = row?.id || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除机械详情编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); | ||||
|   await delMachineryDetail(_ids); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
|   await getList(); | ||||
| } | ||||
|  | ||||
| /** 导出按钮操作 */ | ||||
| const handleExport = () => { | ||||
|   proxy?.download('machinery/machineryDetail/export', { | ||||
|     ...queryParams.value | ||||
|   }, `machineryDetail_${new Date().getTime()}.xlsx`) | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|   getList(); | ||||
| }); | ||||
| </script> | ||||
| @ -2,7 +2,7 @@ | ||||
|   <el-dialog title="添加材料出入库" v-model="visible" width="500px" append-to-body> | ||||
|     <el-form ref="formRef" :model="form" :rules="rules" label-width="120px"> | ||||
|       <el-form-item label="出入库状态" prop="outPut"> | ||||
|         <el-select v-model="form.outPut" clearable placeholder="请输入出入库状态"> | ||||
|         <el-select v-model="form.outPut" clearable placeholder="请选择出入库状态"> | ||||
|           <el-option v-for="item in out_put_type" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
| @ -66,7 +66,7 @@ const loading = ref<boolean>(false); | ||||
| const form = reactive<MaterialsInventoryForm>({ | ||||
|   materialsId: props.materialsId, | ||||
|   projectId: props.projectId, | ||||
|   outPut: '0', | ||||
|   outPut: undefined, | ||||
|   number: 1, | ||||
|   outPutTime: '', | ||||
|   residue: '', | ||||
|  | ||||
		Reference in New Issue
	
	Block a user