forked from integrated_whb/integrated_whb_vue
				
			安全例会模块优化->参会人员页,详情页
							parent
							
								
									043e071b64
								
							
						
					
					
						commit
						a3b0cded3f
					
				|  | @ -12,3 +12,6 @@ export const addSafetyMeetingView = (params) => | |||
|   upload("/safetymeeting/add", params); // 添加安全通知
 | ||||
| export const getSafetyMeetingRecipient = (params) => | ||||
|   post("/safetymeeting/getAllRecipient", params); // 参会人员
 | ||||
| 
 | ||||
| export const editSafetyMeetingRecipient = (params) => | ||||
|   post("/safetymeeting/edit", params); // 修改参会人员
 | ||||
|  |  | |||
|  | @ -4,4 +4,5 @@ export const getSafetyStaffingList = (params) => | |||
| 
 | ||||
| export const addStaffingView = (params) => upload("/staffing/add", params); // 添加 管理人员配备
 | ||||
| 
 | ||||
| export const editStaffingView = (params) => upload("/staffing/edit", params); // 添加 管理人员配备
 | ||||
| export const editStaffingView = (params) => upload("/staffing/edit", params); // 修改 管理人员配备
 | ||||
| export const infoStaffingView = (params) => upload("/staffing/goEdit", params); // 详情 管理人员配备
 | ||||
|  |  | |||
|  | @ -68,6 +68,7 @@ import { onMounted, reactive, ref } from "vue"; | |||
| import useFormValidate from "@/assets/js/useFormValidate.js"; | ||||
| import { ElMessage } from "element-plus"; | ||||
| import { addSafetyCustomerView } from "@/request/customer_management.js"; | ||||
| import { useRouter } from "vue-router"; | ||||
| 
 | ||||
| const formRef = ref(null); | ||||
| const rules = { | ||||
|  | @ -93,7 +94,7 @@ const data = reactive({ | |||
|     unitsList: [], | ||||
|   }, | ||||
| }); | ||||
| 
 | ||||
| const router = useRouter(); | ||||
| onMounted(async () => { | ||||
|   await fnPerson(); | ||||
| }); | ||||
|  | @ -111,6 +112,7 @@ const fnSubmit = async () => { | |||
| 
 | ||||
|   await addSafetyCustomerView(formData); | ||||
|   ElMessage.success("添加成功"); | ||||
|   router.push("/electronic_waybill_management/customer_management"); | ||||
|   Object.keys(data.form).forEach((key) => { | ||||
|     if (Array.isArray(data.form[key])) { | ||||
|       data.form[key] = []; | ||||
|  |  | |||
|  | @ -105,6 +105,7 @@ import useFormValidate from "@/assets/js/useFormValidate.js"; | |||
| import { ElMessage } from "element-plus"; | ||||
| import { addSafetyLocationView } from "@/request/location_management.js"; | ||||
| import MapDialog from "@/views/enterprise_management/information/components/map.vue"; | ||||
| import { useRouter } from "vue-router"; | ||||
| 
 | ||||
| const formRef = ref(null); | ||||
| const rules = { | ||||
|  | @ -141,7 +142,7 @@ const data = reactive({ | |||
|     territoryCascaderRef: "", | ||||
|   }, | ||||
| }); | ||||
| 
 | ||||
| const router = useRouter(); | ||||
| onMounted(async () => { | ||||
|   await fnPerson(); | ||||
| }); | ||||
|  | @ -153,6 +154,7 @@ const fnSubmit = async () => { | |||
|   await useFormValidate(formRef); | ||||
|   await addSafetyLocationView(data.form); | ||||
|   ElMessage.success("添加成功"); | ||||
|   router.push("/electronic_waybill_management/location_managemen"); | ||||
|   Object.keys(data.form).forEach((key) => { | ||||
|     if (Array.isArray(data.form[key])) { | ||||
|       data.form[key] = []; | ||||
|  |  | |||
|  | @ -267,6 +267,7 @@ import { getPostListAll, getUserListAll } from "@/request/data_dictionary.js"; | |||
| import { getSecurityCustomerList } from "@/request/customer_management.js"; | ||||
| import { getSecurityLocationList } from "@/request/location_management.js"; | ||||
| import { getOperationVehicleList } from "@/request/operation_vehicle.js"; | ||||
| import { useRouter } from "vue-router"; | ||||
| 
 | ||||
| const formRef = ref(null); | ||||
| const rules = { | ||||
|  | @ -334,6 +335,7 @@ const data = reactive({ | |||
|   EndOptions: [], // 目的地 | ||||
|   OperationVehicle: [], // 运输车辆 | ||||
| }); | ||||
| const router = useRouter(); | ||||
| const fnVehicle = async () => { | ||||
|   const res = await getOperationVehicleList(); | ||||
|   const varList = res.varList || []; | ||||
|  | @ -392,6 +394,7 @@ const fnSubmit = async () => { | |||
| 
 | ||||
|   await addSafetyThingsChecView(formData); | ||||
|   ElMessage.success("添加成功"); | ||||
|   router.push("/electronic_waybill_management/waybill_registration"); | ||||
|   Object.keys(data.form).forEach((key) => { | ||||
|     if (Array.isArray(data.form[key])) { | ||||
|       data.form[key] = []; | ||||
|  |  | |||
|  | @ -61,7 +61,7 @@ | |||
| </template> | ||||
| 
 | ||||
| <script setup> | ||||
| import { onMounted, ref } from "vue"; | ||||
| import { onMounted, ref, toRaw } from "vue"; | ||||
| import { useVModels } from "@vueuse/core"; | ||||
| import { ElMessage } from "element-plus"; | ||||
| import LayoutUpload from "@/components/upload/index.vue"; | ||||
|  | @ -120,34 +120,42 @@ const fnClose = () => { | |||
|   formRef.value.resetFields(); | ||||
|   visible.value = false; | ||||
| }; | ||||
| const fnSubmit = async () => { | ||||
|   const params = { | ||||
|     ...form.value, | ||||
|   }; | ||||
| 
 | ||||
| const fnSubmit = async () => { | ||||
|   await formRef.value.validate(); | ||||
| 
 | ||||
|   const rawFormValue = toRaw(form.value); | ||||
| 
 | ||||
|   const formData = new FormData(); | ||||
|   if (Array.isArray(form.file)) { | ||||
|     form.file.forEach((fileItem) => { | ||||
| 
 | ||||
|   // 处理文件上传 | ||||
|   if (Array.isArray(rawFormValue.file)) { | ||||
|     rawFormValue.file.forEach((fileItem) => { | ||||
|       if (fileItem.raw) { | ||||
|         formData.append("FFILE", fileItem.raw); | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   Object.keys(form).forEach((key) => { | ||||
|     if (key !== "file" && form[key] !== null && form[key] !== undefined) { | ||||
|       formData.append(key, form[key]); | ||||
|   Object.keys(rawFormValue).forEach((key) => { | ||||
|     if (key !== "file") { | ||||
|       formData.append(key, rawFormValue[key]); | ||||
|     } | ||||
|   }); | ||||
| 
 | ||||
|   // 执行添加或编辑操作 | ||||
|   if (props.type === "add") { | ||||
|     await addStaffingView(formData); | ||||
|   } else { | ||||
|     formData.append("STAFFING_ID", params.STAFFING_ID); | ||||
|     formData.append("STAFFING_ID", rawFormValue.STAFFING_ID); | ||||
|     await editStaffingView(formData); | ||||
|   } | ||||
| 
 | ||||
|   // 操作成功提示 | ||||
|   ElMessage.success("操作成功"); | ||||
| 
 | ||||
|   // 关闭表单对话框 | ||||
|   fnClose(); | ||||
| 
 | ||||
|   // 触发更新数据的事件 | ||||
|   emits("get-data"); | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,129 +1,27 @@ | |||
| <template> | ||||
|   <div> | ||||
|     <el-card> | ||||
|       <el-form | ||||
|         :model="searchForm" | ||||
|         label-width="100px" | ||||
|         @submit.prevent="searchNotifications" | ||||
|       > | ||||
|         <el-row> | ||||
|           <el-col :span="8"> | ||||
|             <el-form-item label="从业人员" prop="PRACTITIONER"> | ||||
|               <el-input v-model="searchForm.PRACTITIONER" /> | ||||
|             </el-form-item> | ||||
|           </el-col> | ||||
|           <el-col :span="8"> | ||||
|             <el-form-item label="从业类型" prop="PRACTITIONER_TYPE"> | ||||
|               <el-select v-model="searchForm.PRACTITIONER_TYPE"> | ||||
|                 <el-option | ||||
|                   v-for="item in relatedClassificationList" | ||||
|                   :key="item.BIANMA" | ||||
|                   :label="item.name" | ||||
|                   :value="item.BIANMA" | ||||
|                 /> | ||||
|               </el-select> | ||||
|             </el-form-item> | ||||
|           </el-col> | ||||
|           <el-col :span="8"> | ||||
|             <el-form-item label="参会状态" prop="ATTENDANCE_STATUS"> | ||||
|               <el-select v-model="searchForm.ATTENDANCE_STATUS"> | ||||
|                 <el-option label="已参会" :value="1" /> | ||||
|                 <!-- 1代表已签收 --> | ||||
|                 <el-option label="未参会" :value="0" /> | ||||
|                 <!-- 0代表未签收 --> | ||||
|               </el-select> | ||||
|             </el-form-item> | ||||
|           </el-col> | ||||
|           <el-col :span="8"> | ||||
|             <el-form-item> | ||||
|               <el-button type="primary" native-type="submit">搜索</el-button> | ||||
|               <el-button native-type="reset" @click="resetSearchForm" | ||||
|                 >重置</el-button | ||||
|               > | ||||
|             </el-form-item> | ||||
|           </el-col> | ||||
|         </el-row> | ||||
|       </el-form> | ||||
|     </el-card> | ||||
|     <layout-card> | ||||
|       <layout-table | ||||
|         v-model:pagination="pagination" | ||||
|         :data="list" | ||||
|         stripe | ||||
|         border | ||||
|         show-header | ||||
|         @get-data="fnGetData" | ||||
|       > | ||||
|         <el-table-column label="序号" width="60"> | ||||
|           <template #default="{ $index }"> | ||||
|             {{ serialNumber(pagination, $index) }} | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column label="从业人员" prop="PRACTITIONER" /> | ||||
|         <el-table-column label="从业类型" prop="PRACTITIONER_TYPE" /> | ||||
|         <el-table-column label="身份证号" prop="IDENTITY_NUMBER" /> | ||||
|         <el-table-column label="联系电话" prop="CONTACT_PHONE" /> | ||||
|         <el-table-column label="参会状态" prop="ATTENDANCE_STATUS"> | ||||
|           <template #default="{ row }"> | ||||
|             <el-tag v-if="row.ATTENDANCE_STATUS === '1'">{{ "已参会" }}</el-tag> | ||||
|             <el-tag v-else>未参会</el-tag> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|       </layout-table> | ||||
|       <!-- 内容,可能是一个加载中的提示或其他内容 --> | ||||
|       <div v-if="loading">加载中...</div> | ||||
|       <div v-else>文件已尝试打开,请检查您的下载文件夹或弹出窗口设置。</div> | ||||
|     </layout-card> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup> | ||||
| import { reactive, onMounted, ref } from "vue"; | ||||
| import { ref, onMounted } from "vue"; | ||||
| import { useRoute } from "vue-router"; | ||||
| import { layoutFnGetSIGNEDSTATUSClassification } from "@/request/safety_production_related.js"; | ||||
| import { getSafetyMeetingRecipient } from "@/request/traffic_safety_meeting.js"; | ||||
| import { serialNumber } from "@/assets/js/utils"; | ||||
| import useListData from "@/assets/js/useListData"; | ||||
| import { infoStaffingView } from "@/request/traffic_safety_staffing.js"; | ||||
| 
 | ||||
| const route = useRoute(); | ||||
| const SAFETY_MEETING_ID = route.query.SAFETY_MEETING_ID; | ||||
| 
 | ||||
| const searchForm = reactive({ | ||||
|   PERSON: "", | ||||
|   PRACTITIONERTYPE: "", | ||||
|   SIGNEDSTATUS: null, | ||||
|   REPLYSTATUS: null, | ||||
| }); | ||||
| 
 | ||||
| const { list, pagination, fnGetData, fnResetPagination } = useListData( | ||||
|   getSafetyMeetingRecipient, | ||||
|   { | ||||
|     searchForm, | ||||
|     otherParams: { SAFETY_MEETING_ID }, | ||||
|     usePagination: true, | ||||
|   } | ||||
| ); | ||||
| 
 | ||||
| async function searchNotifications() { | ||||
|   const params = Object.keys(searchForm).reduce((acc, key) => { | ||||
|     acc[key] = searchForm[key]; | ||||
|     return acc; | ||||
|   }, {}); | ||||
| 
 | ||||
|   params.SAFETY_MEETING_ID = SAFETY_MEETING_ID; | ||||
|   await fnGetData(params); | ||||
| } | ||||
| 
 | ||||
| // 重置表单时,也确保重置为初始值 | ||||
| function resetSearchForm() { | ||||
|   Object.keys(searchForm).forEach((key) => { | ||||
|     searchForm[key] = ""; | ||||
|   }); | ||||
|   fnResetPagination({ SAFETY_MEETING_ID }); | ||||
| } | ||||
| 
 | ||||
| const relatedClassificationList = ref(null); | ||||
| const STAFFING_ID = route.query.STAFFING_ID; | ||||
| const loading = ref(true); // 用于指示文件是否正在加载 | ||||
| 
 | ||||
| onMounted(async () => { | ||||
|   const data = await layoutFnGetSIGNEDSTATUSClassification(); | ||||
|   relatedClassificationList.value = JSON.parse(data.value.zTreeNodes); | ||||
|   const response = await infoStaffingView({ STAFFING_ID }); | ||||
|   loading.value = false; // 加载完成 | ||||
|   console.log(response.pd.ATTACHMENT_ROUTE, "111111111111111111111111111"); | ||||
|   window.open(response.pd.ATTACHMENT_ROUTE, "_blank"); | ||||
| }); | ||||
| </script> | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,21 +8,21 @@ | |||
|       > | ||||
|         <el-row> | ||||
|           <el-col :span="6"> | ||||
|             <el-form-item label="制度名称" prop="MEETING_TITLE"> | ||||
|               <el-input v-model="searchForm.MEETING_TITLE" /> | ||||
|             <el-form-item label="制度名称" prop="SYSTEMNAME"> | ||||
|               <el-input v-model="searchForm.SYSTEMNAME" /> | ||||
|             </el-form-item> | ||||
|           </el-col> | ||||
|           <el-col :span="6"> | ||||
|             <el-form-item label="完成状态" prop="MEETING_TYPE"> | ||||
|               <el-select v-model="searchForm.MEETING_TYPE"> | ||||
|             <el-form-item label="完成状态" prop="COMPLETIONSTATUS"> | ||||
|               <el-select v-model="searchForm.COMPLETIONSTATUS"> | ||||
|                 <el-option label="已上传" :value="1" /> | ||||
|                 <el-option label="未上传" :value="0" /> | ||||
|               </el-select> | ||||
|             </el-form-item> | ||||
|           </el-col> | ||||
|           <el-col :span="6"> | ||||
|             <el-form-item label="有效状态" prop="MEETING_TYPE"> | ||||
|               <el-select v-model="searchForm.MEETING_TYPE"> | ||||
|             <el-form-item label="有效状态" prop="VALIDSTATUS"> | ||||
|               <el-select v-model="searchForm.VALIDSTATUS"> | ||||
|                 <el-option label="正常" :value="1" /> | ||||
|                 <el-option label="未生效" :value="0" /> | ||||
|               </el-select> | ||||
|  | @ -78,9 +78,9 @@ | |||
|               link | ||||
|               @click=" | ||||
|                 router.push({ | ||||
|                   path: '/safety_production_related/safety_meeting/meeting_info', | ||||
|                   path: '/management_staffing/details', | ||||
|                   query: { | ||||
|                     SAFETY_MEETING_ID: row.SAFETY_MEETING_ID, | ||||
|                     STAFFING_ID: row.STAFFING_ID, | ||||
|                   }, | ||||
|                 }) | ||||
|               " | ||||
|  |  | |||
|  | @ -188,7 +188,6 @@ const fnSubmit = async () => { | |||
|   await useFormValidate(formRef); | ||||
|   const formData = new FormData(); | ||||
| 
 | ||||
|   // 添加文本类型的字段 | ||||
|   Object.keys(data.form).forEach((key) => { | ||||
|     if (key === "MEETING_DATE") { | ||||
|       const dateRangeString = data.form.MEETING_DATE.join(" , "); | ||||
|  | @ -198,12 +197,10 @@ const fnSubmit = async () => { | |||
|     } | ||||
|   }); | ||||
| 
 | ||||
|   // 处理 fileList - 添加文件 | ||||
|   data.form.fileList.forEach((file) => { | ||||
|     if (file.raw) formData.append("FFILE", file.raw); | ||||
|   }); | ||||
| 
 | ||||
|   // 处理 videoList - 添加视频文件 | ||||
|   data.form.videoList.forEach((video) => { | ||||
|     if (video.raw) formData.append("VVIDEO", video.raw); // 注意: 用不同的字段名区分文件和视频 | ||||
|   }); | ||||
|  |  | |||
|  | @ -59,16 +59,28 @@ | |||
|             {{ serialNumber(pagination, $index) }} | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column label="从业人员" prop="userName" /> | ||||
|         <el-table-column label="从业人员" prop="NAME" /> | ||||
|         <el-table-column label="从业类型" prop="PRACTITIONER_TYPE" /> | ||||
|         <el-table-column label="身份证号" prop="IDENTITY_NUMBER" /> | ||||
|         <el-table-column label="联系电话" prop="CONTACT_PHONE" /> | ||||
|         <el-table-column label="联系电话" prop="USERNAME" /> | ||||
|         <el-table-column label="参会状态" prop="ATTENDANCE_STATUS"> | ||||
|           <template #default="{ row }"> | ||||
|             <el-tag v-if="row.ATTENDANCE_STATUS === '1'">{{ "已参会" }}</el-tag> | ||||
|             <el-tag v-else>未参会</el-tag> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column label="操作" width="180"> | ||||
|           <template #default="{ row }"> | ||||
|             <el-button | ||||
|               v-if="row.ATTENDANCE_STATUS === '1'" | ||||
|               type="danger" | ||||
|               text | ||||
|               link | ||||
|               @click="editItem(row.SAFETY_MEETING_ID, row.PRACTITIONER, 0)" | ||||
|             > | ||||
|               移除 | ||||
|             </el-button> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|       </layout-table> | ||||
|     </layout-card> | ||||
|   </div> | ||||
|  | @ -78,9 +90,13 @@ | |||
| import { reactive, onMounted, ref } from "vue"; | ||||
| import { useRoute } from "vue-router"; | ||||
| import { layoutFnGetSIGNEDSTATUSClassification } from "@/request/safety_production_related.js"; | ||||
| import { getSafetyMeetingRecipient } from "@/request/traffic_safety_meeting.js"; | ||||
| import { | ||||
|   editSafetyMeetingRecipient, | ||||
|   getSafetyMeetingRecipient, | ||||
| } from "@/request/traffic_safety_meeting.js"; | ||||
| import { serialNumber } from "@/assets/js/utils"; | ||||
| import useListData from "@/assets/js/useListData"; | ||||
| import { ElMessage, ElMessageBox } from "element-plus"; | ||||
| 
 | ||||
| const route = useRoute(); | ||||
| const SAFETY_MEETING_ID = route.query.SAFETY_MEETING_ID; | ||||
|  | @ -118,6 +134,22 @@ function resetSearchForm() { | |||
|   }); | ||||
|   fnResetPagination({ SAFETY_MEETING_ID }); | ||||
| } | ||||
| const editItem = async ( | ||||
|   safetyMeetingId, | ||||
|   practitioner, | ||||
|   attendanceStatus = 0 | ||||
| ) => { | ||||
|   await ElMessageBox.confirm(`确定要移除吗?`, { | ||||
|     type: "warning", | ||||
|   }); | ||||
|   await editSafetyMeetingRecipient({ | ||||
|     SAFETY_MEETING_ID: safetyMeetingId, | ||||
|     PRACTITIONER: practitioner, | ||||
|     ATTENDANCE_STATUS: attendanceStatus, // 设置参会状态为0 | ||||
|   }); | ||||
|   ElMessage.success("移除成功"); | ||||
|   fnGetData(); | ||||
| }; | ||||
| 
 | ||||
| const relatedClassificationList = ref(null); | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
|           </template> | ||||
|         </el-descriptions-item> | ||||
|         <el-descriptions-item label="会议内容"> | ||||
|           {{ detailItems.MEETING_CONTENT }} | ||||
|           <div v-html="detailItems.MEETING_CONTENT"></div> | ||||
|         </el-descriptions-item> | ||||
|         <!--        <el-descriptions-item label="备注">--> | ||||
|         <!--        {{ detailItems.NOTES }}--> | ||||
|  | @ -43,23 +43,41 @@ | |||
|       <el-table | ||||
|         :border="true" | ||||
|         :data="detailItems.recipientsList" | ||||
|         :show-header="false" | ||||
|         :show-header="true" | ||||
|       > | ||||
|         <el-table-column label="NAME1" align="center"> | ||||
|         <el-table-column label="头像" align="center"> | ||||
|           <template #default="{ row }"> | ||||
|             <img :src="row.AVATAR" alt="Avatar" /> | ||||
|             <img :src="row.USERAVATARURL" alt="Avatar" /> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column label="NAME2" align="center"> | ||||
|           <template #default="{ row }"> | ||||
|             {{ row.PRACTITIONER }}<br /> | ||||
|             {{ row.CONTACT_PHONE }}<br /> | ||||
|             {{ row.HOME_ADDRESS }} | ||||
|           </template> | ||||
|         <el-table-column label="姓名" align="center"> | ||||
|           <template #default="{ row }"> {{ row.NAME }}<br /> </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column label="NAME3" align="center"> | ||||
|         <el-table-column label="手机号" align="center"> | ||||
|           <template #default="{ row }"> {{ row.USERNAME }}<br /> </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column label="参会证明" align="center"> | ||||
|           <template #default="{ row }"> | ||||
|             <img :src="row.SIGNATUREPICTURE" alt="Signature" /> | ||||
|             <img | ||||
|               :src="row.SIGNATUREPICTURE" | ||||
|               alt="Signature" | ||||
|               style=" | ||||
|                 max-width: 100px; | ||||
|                 max-height: 100px; | ||||
|                 display: block; | ||||
|                 margin: auto; | ||||
|               " | ||||
|             /> | ||||
|             <img | ||||
|               :src="row.LIVEPHOTOS" | ||||
|               alt="Live Photo" | ||||
|               style=" | ||||
|                 max-width: 100px; | ||||
|                 max-height: 100px; | ||||
|                 display: block; | ||||
|                 margin: auto; | ||||
|               " | ||||
|             /> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|       </el-table> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue