yanghao 2 днів тому
батько
коміт
08081c8dc4

+ 1 - 1
src/router/modules/remaining.ts

@@ -2314,7 +2314,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
         meta: {
           noCache: true,
           canto: true,
-          icon: 'ep:info',
+          icon: 'ep:view',
           title: '月报详情',
           hidden: true
         }

+ 44 - 74
src/views/pms/qhse/monthlyReport/MonthlyReport.vue

@@ -39,11 +39,11 @@
           <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item label="年月" prop="yearMonths">
               <el-date-picker
+                disabled
                 v-model="reportInfo.yearMonths"
                 type="month"
                 placeholder="选择年月"
                 format="YYYY-MM"
-                disabled
                 value-format="YYYY-MM"
                 style="width: 100%" />
             </el-form-item>
@@ -76,8 +76,8 @@
               <el-input-number
                 v-model="reportInfo.subcontractors"
                 :min="0"
-                :precision="0"
                 disabled
+                :precision="0"
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -87,8 +87,8 @@
               <el-input-number
                 v-model="reportInfo.drivingMileage"
                 :min="0"
-                :precision="2"
                 disabled
+                :precision="2"
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -98,8 +98,8 @@
               <el-input-number
                 v-model="reportInfo.totalManHours"
                 :min="0"
-                :precision="2"
                 disabled
+                :precision="2"
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -143,8 +143,8 @@
               <el-input-number
                 v-model="reportInfo.injury"
                 :min="0"
-                disabled
                 :precision="0"
+                disabled
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -167,8 +167,8 @@
               <el-input-number
                 v-model="reportInfo.medicalCase"
                 :min="0"
-                disabled
                 :precision="0"
+                disabled
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -200,8 +200,8 @@
               <el-input-number
                 v-model="reportInfo.nearMiss"
                 :min="0"
-                disabled
                 :precision="0"
+                disabled
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -213,8 +213,8 @@
               <el-input-number
                 v-model="reportInfo.spill"
                 :min="0"
-                :precision="0"
                 disabled
+                :precision="0"
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -293,8 +293,8 @@
               <el-input-number
                 v-model="reportInfo.qhseInspection"
                 :min="0"
-                disabled
                 :precision="0"
+                disabled
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -305,8 +305,8 @@
                 v-model="reportInfo.socCards"
                 :min="0"
                 :precision="0"
-                controls-position="right"
                 disabled
+                controls-position="right"
                 style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -340,8 +340,8 @@
                 v-model="reportInfo.drills"
                 :min="0"
                 :precision="0"
-                controls-position="right"
                 disabled
+                controls-position="right"
                 style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -351,8 +351,8 @@
                 v-model="reportInfo.training"
                 :min="0"
                 :precision="0"
-                controls-position="right"
                 disabled
+                controls-position="right"
                 style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -362,8 +362,8 @@
                 v-model="reportInfo.participantsTraining"
                 :min="0"
                 :precision="0"
-                controls-position="right"
                 disabled
+                controls-position="right"
                 style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -373,8 +373,8 @@
                 v-model="reportInfo.trainingsHours"
                 :min="0"
                 :precision="2"
-                controls-position="right"
                 disabled
+                controls-position="right"
                 style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -396,8 +396,8 @@
                 v-model="reportInfo.waterConsumption"
                 :min="0"
                 :precision="2"
-                controls-position="right"
                 disabled
+                controls-position="right"
                 style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -407,8 +407,8 @@
                 v-model="reportInfo.dieselConsumption"
                 :min="0"
                 :precision="2"
-                controls-position="right"
                 disabled
+                controls-position="right"
                 style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -417,8 +417,8 @@
               <el-input-number
                 v-model="reportInfo.electricityConsumption"
                 :min="0"
-                disabled
                 :precision="2"
+                disabled
                 controls-position="right"
                 style="width: 100%" />
             </el-form-item>
@@ -448,16 +448,19 @@
         <el-row :gutter="16">
           <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item label="工单填报人" prop="dutyPerson">
-              <el-input
-                v-model="dutyPersonName"
-                placeholder="请选择填报人"
-                readonly
+              <el-select
+                v-model="reportInfo.dutyPerson"
+                filterable
+                clearable
                 disabled
-                @click="openUserSelect">
-                <template #suffix>
-                  <Icon icon="ep:search" class="cursor-pointer" />
-                </template>
-              </el-input>
+                placeholder="请选择填报人"
+                style="width: 100%">
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.nickname"
+                  :value="item.id" />
+              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
@@ -467,8 +470,8 @@
               <el-input
                 v-model="reportInfo.remark"
                 type="textarea"
-                :rows="4"
                 disabled
+                :rows="4"
                 placeholder="请输入备注信息" />
             </el-form-item>
           </el-col>
@@ -477,15 +480,9 @@
 
       <!-- 操作按钮 -->
       <div class="form-actions">
-        <el-button type="primary" @click="back"> 返回 </el-button>
+        <el-button @click="handleCancel">返 回</el-button>
       </div>
     </el-form>
-
-    <!-- 部门选择弹窗 -->
-    <DeptSelectForm ref="deptSelectFormRef" :multiple="false" @confirm="handleDeptConfirm" />
-
-    <!-- 用户选择弹窗 -->
-    <UserSelectForm ref="userSelectFormRef" @confirm="handleUserConfirm" />
   </div>
 </template>
 
@@ -494,26 +491,27 @@ import { reactive, ref } from 'vue'
 import { useRouter, useRoute } from 'vue-router'
 import { FormInstance, FormRules } from 'element-plus'
 import { QhseMonthReportApi } from '@/api/pms/qhse'
-// import DeptSelectForm from '@/components/DeptSelectForm/qhseDept.vue'
-import UserSelectForm from '@/components/UserSelectForm/index.vue'
 import { handleTree, defaultProps } from '@/utils/tree'
 import * as DeptApi from '@/api/system/dept'
-const deptList2 = ref<Tree[]>([]) // 树形结构
+import * as UserApi from '@/api/system/user'
+import { getUserProfile } from '@/api/system/user/profile'
 import { useTagsViewStore } from '@/store/modules/tagsView'
 const { delView } = useTagsViewStore()
 
-defineOptions({ name: 'MonthlyReportInfo' })
+defineOptions({ name: 'MonthlyReportAdd' })
 
 const router = useRouter()
 const route = useRoute()
 const message = useMessage()
+const deptList2 = ref<Tree[]>([]) // 树形结构
+const userList = ref<any[]>([])
 
 // 表单引用
 const formRef = ref<FormInstance>()
 const submitLoading = ref(false)
 
 // 表单数据
-const reportInfo = reactive({
+let reportInfo = reactive({
   title: '',
   yearMonths: '',
   deptId: 0,
@@ -562,38 +560,6 @@ const formRules = reactive<FormRules>({
 // 部门名称显示
 const deptName = ref('')
 
-// 填报人名称显示
-const dutyPersonName = ref('')
-
-// 部门选择弹窗引用
-const deptSelectFormRef = ref()
-
-// 用户选择弹窗引用
-const userSelectFormRef = ref()
-
-/** 部门选择确认 */
-const handleDeptConfirm = async (deptList: any[]) => {
-  if (deptList && deptList.length > 0) {
-    const dept = deptList[0]
-    reportInfo.deptId = dept.id
-    deptName.value = dept.name
-  }
-}
-
-/** 打开用户选择 */
-const openUserSelect = () => {
-  userSelectFormRef.value?.open()
-}
-
-/** 用户选择确认 */
-const handleUserConfirm = (userId: any, userList: any[]) => {
-  if (userList && userList.length > 0) {
-    const user = userList[0]
-    reportInfo.dutyPerson = user.id
-    dutyPersonName.value = user.nickname
-  }
-}
-
 /** 提交表单 */
 const handleSubmit = async () => {
   if (!formRef.value) return
@@ -616,19 +582,23 @@ const handleSubmit = async () => {
 }
 
 /** 取消 */
-const back = () => {
+const handleCancel = () => {
   delView(unref(router.currentRoute))
   router.push({ name: 'QhseMonthlyReport', params: {} })
 }
 
+const userInfo = ref<any>({})
 onMounted(async () => {
+  const users = await getUserProfile()
+  userInfo.value = users
   deptList2.value = handleTree(await DeptApi.getSimpleDeptList())
+  userList.value = await UserApi.selectedDeptsEmployee({
+    deptIds: userInfo.value.dept.id
+  })
   const res = await QhseMonthReportApi.getQhseMonthReport(route.params.id)
   const data = (res as any)?.data ?? res ?? {}
 
   Object.assign(reportInfo, data)
-  dutyPersonName.value =
-    data.personName || data.dutyPersonName || getUserDisplayName(data.dutyPersonInfo || data)
 })
 </script>
 <style scoped lang="scss">

+ 53 - 41
src/views/pms/qhse/monthlyReport/MonthlyReportAdd.vue

@@ -419,15 +419,18 @@
         <el-row :gutter="16">
           <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item label="工单填报人" prop="dutyPerson">
-              <el-input
+              <el-select
                 v-model="reportInfo.dutyPerson"
+                filterable
+                clearable
                 placeholder="请选择填报人"
-                readonly
-                @click="openUserSelect">
-                <template #suffix>
-                  <Icon icon="ep:search" class="cursor-pointer" />
-                </template>
-              </el-input>
+                style="width: 100%">
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.nickname"
+                  :value="item.id" />
+              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
@@ -450,9 +453,6 @@
         <el-button type="primary" @click="handleSubmit" :loading="submitLoading"> 提交 </el-button>
       </div>
     </el-form>
-
-    <!-- 用户选择弹窗 -->
-    <UserSelectForm ref="userSelectFormRef" @confirm="handleUserConfirm" />
   </div>
 </template>
 
@@ -461,11 +461,10 @@ import { reactive, ref } from 'vue'
 import { useRouter, useRoute } from 'vue-router'
 import { FormInstance, FormRules } from 'element-plus'
 import { QhseMonthReportApi } from '@/api/pms/qhse'
-// import DeptSelectForm from '@/components/DeptSelectForm/qhseDept.vue'
-import UserSelectForm from '@/components/UserSelectForm/index.vue'
 import { handleTree, defaultProps } from '@/utils/tree'
 import * as DeptApi from '@/api/system/dept'
-const deptList2 = ref<Tree[]>([]) // 树形结构
+import * as UserApi from '@/api/system/user'
+import { getUserProfile } from '@/api/system/user/profile'
 import { useTagsViewStore } from '@/store/modules/tagsView'
 const { delView } = useTagsViewStore()
 
@@ -474,6 +473,8 @@ defineOptions({ name: 'MonthlyReportAdd' })
 const router = useRouter()
 const route = useRoute()
 const message = useMessage()
+const deptList2 = ref<Tree[]>([]) // 树形结构
+const userList = ref<any[]>([])
 
 // 表单引用
 const formRef = ref<FormInstance>()
@@ -523,36 +524,43 @@ const formRules = reactive<FormRules>({
   title: [{ required: true, message: '月报标题不能为空', trigger: 'blur' }],
   yearMonth: [{ required: true, message: '年月不能为空', trigger: 'change' }],
   deptId: [{ required: true, message: '部门不能为空', trigger: 'change' }],
-  dutyPerson: [{ required: true, message: '工单填报人不能为空', trigger: 'change' }]
+  dutyPerson: [{ required: true, message: '工单填报人不能为空', trigger: 'change' }],
+  employee: [{ required: true, message: '员工数不能为空', trigger: 'blur' }],
+  subcontractors: [{ required: true, message: '分包商人数不能为空', trigger: 'blur' }],
+  drivingMileage: [{ required: true, message: '行驶里程不能为空', trigger: 'blur' }],
+  totalManHours: [{ required: true, message: '总工时不能为空', trigger: 'blur' }],
+  withoutAccident: [{ required: true, message: '无事故累计天数不能为空', trigger: 'blur' }],
+  fatality: [{ required: true, message: '死亡不能为空', trigger: 'blur' }],
+  injury: [{ required: true, message: '损失工时事故不能为空', trigger: 'blur' }],
+  restrictedCase: [{ required: true, message: '受限事件不能为空', trigger: 'blur' }],
+  medicalCase: [{ required: true, message: '医疗事件不能为空', trigger: 'blur' }],
+  firstAidCase: [{ required: true, message: '急救事件不能为空', trigger: 'blur' }],
+  vehicleAccident: [{ required: true, message: '车辆事故不能为空', trigger: 'blur' }],
+  nearMiss: [{ required: true, message: '未遂事件次数不能为空', trigger: 'blur' }],
+  spill: [{ required: true, message: '泄漏事件次数不能为空', trigger: 'blur' }],
+  lifeSavingRules: [{ required: true, message: '违反保命规则的次数不能为空', trigger: 'blur' }],
+  toolboxTalk: [{ required: true, message: '班前会次不能为空', trigger: 'blur' }],
+  committeeMeeting: [{ required: true, message: '委员会会议不能为空', trigger: 'blur' }],
+  monthlyMeeting: [{ required: true, message: '月度会议不能为空', trigger: 'blur' }],
+  companyHazard: [{ required: true, message: '隐患排查次数不能为空', trigger: 'blur' }],
+  qhseInspection: [{ required: true, message: '请填写QHSE检查次数', trigger: 'blur' }],
+  socCards: [{ required: true, message: 'SOC 卡片不能为空', trigger: 'blur' }],
+  ptwAudit: [{ required: true, message: 'PTW 审核不能为空', trigger: 'blur' }],
+  jsa: [{ required: true, message: 'JSA 不能为空', trigger: 'blur' }],
+  drills: [{ required: true, message: '演练次数不能为空', trigger: 'blur' }],
+  training: [{ required: true, message: '培训次数不能为空', trigger: 'blur' }],
+  participantsTraining: [{ required: true, message: 'QHSE培训人次不能为空', trigger: 'blur' }],
+  waterConsumption: [{ required: true, message: '水耗不能为空', trigger: 'blur' }],
+  dieselConsumption: [{ required: true, message: '柴油耗能不能为空', trigger: 'blur' }],
+  electricityConsumption: [{ required: true, message: '电耗不能为空', trigger: 'blur' }],
+  naturalGasConsumption: [{ required: true, message: '天然气耗不能为空', trigger: 'blur' }],
+  trainingsHours: [{ required: true, message: '培训课时不能为空', trigger: 'blur' }],
+  yearMonths: [{ required: true, message: '年月不能为空', trigger: 'change' }]
 })
 
 // 部门名称显示
 const deptName = ref('')
 
-// 填报人名称显示
-const dutyPersonName = ref('')
-
-// 用户选择弹窗引用
-const userSelectFormRef = ref()
-
-/** 打开用户选择 */
-const openUserSelect = () => {
-  userSelectFormRef.value?.open()
-}
-
-const getUserDisplayName = (user: any) => {
-  return user?.nickname || user?.label || user?.name || user?.username || String(user?.id || '')
-}
-
-/** 用户选择确认 */
-const handleUserConfirm = (userId: any, userList: any[]) => {
-  if (userList && userList.length > 0) {
-    const user = userList[0]
-    reportInfo.dutyPerson = user.id
-    dutyPersonName.value = getUserDisplayName(user)
-  }
-}
-
 /** 提交表单 */
 const handleSubmit = async () => {
   if (!formRef.value) return
@@ -563,7 +571,7 @@ const handleSubmit = async () => {
 
   submitLoading.value = true
   try {
-    await QhseMonthReportApi.createQhseMonthReport(reportInfo)
+    await QhseMonthReportApi.updateQhseMonthReport(reportInfo)
     message.success('新增成功')
     // 返回列表页或上一页
     router.back()
@@ -580,14 +588,18 @@ const handleCancel = () => {
   router.push({ name: 'QhseMonthlyReport', params: {} })
 }
 
+const userInfo = ref<any>({})
 onMounted(async () => {
+  const users = await getUserProfile()
+  userInfo.value = users
   deptList2.value = handleTree(await DeptApi.getSimpleDeptList())
+  userList.value = await UserApi.selectedDeptsEmployee({
+    deptIds: userInfo.value.dept.id
+  })
   const res = await QhseMonthReportApi.getQhseMonthReport(route.params.id)
   const data = (res as any)?.data ?? res ?? {}
 
   Object.assign(reportInfo, data)
-  dutyPersonName.value =
-    data.personName || data.dutyPersonName || getUserDisplayName(data.dutyPersonInfo || data)
 })
 </script>
 <style scoped lang="scss">

+ 12 - 9
src/views/pms/qhse/monthlyReport/index.vue

@@ -5,8 +5,8 @@
       <ContentWrap style="border: 0">
         <!-- 搜索工作栏 -->
         <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true">
-          <el-form-item label="工单填报人" prop="personName">
-            <el-input v-model="queryParams.personName" placeholder="请输入工单填报人" />
+          <el-form-item label="月报标题" prop="title">
+            <el-input v-model="queryParams.title" placeholder="请输入月报标题" />
           </el-form-item>
 
           <el-form-item label="创建日期" prop="createTime">
@@ -51,8 +51,8 @@
             align="center"
             fixed="left"
             show-overflow-tooltip />
-          <zm-table-column prop="personName" label="工单填报人" align="center" width="100" />
-          <zm-table-column label="创建日期" prop="createTime" width="160" align="center">
+          <zm-table-column prop="personName" label="工单填报人" align="center" />
+          <zm-table-column label="创建日期" prop="createTime" align="center">
             <template #default="{ row }">
               {{ formatDate(row.createTime) }}
             </template>
@@ -101,9 +101,8 @@ const router = useRouter()
 // 查询参数
 const queryParams = reactive({
   createTime: null,
-  dutyPerson: '',
-  deptId: '',
-  personName: ''
+  title: '',
+  deptId: ''
 })
 
 let queryFormRef = ref(null)
@@ -228,6 +227,10 @@ const add = (row) => {
 }
 
 const detail = (row) => {
+  if (row.dutyPerson !== userInfo.value.id) {
+    ElMessage.error('您没有权限进行此操作')
+    return
+  }
   router.push({
     name: 'MonthlyReportInfo',
     params: {
@@ -252,8 +255,8 @@ const loadTableData = async () => {
       pageNo: pagination.pageNo,
       pageSize: pagination.pageSize,
       createTime: queryParams.createTime,
-      dutyPerson: queryParams.dutyPerson,
-      personName: queryParams.personName,
+
+      title: queryParams.title,
       deptId: queryParams.deptId
     }
     const res = await QhseMonthReportApi.getQhseMonthReportPage(params)