Browse Source

fix(accidentReport): 修复事故报告保存及交互逻辑

yusheng 2 months ago
parent
commit
926cab5b6d

+ 1 - 2
api/accidentReport/index.js

@@ -4,8 +4,7 @@ import Vue from "vue";
 // 保存或更新
 export async function save(data) {
   const url = Vue.prototype.apiUrl + '/ehs/accidentIncidents/' + (data.id ? 'update' : 'save');
-  const fn = data.id ? putJ : postJ;
-  const res = await fn(url, data);
+  const res = await postJ(url, data);
   if (res.code == 0) return res.data;
   return Promise.reject(new Error(res.message));
 }

+ 3 - 1
components/selectUserDialog.vue

@@ -302,10 +302,11 @@ export default {
 
     // ============ 点击切换选中 ============
     toggleItem(item, index) {
+		console.log(this.isAll,'this.isAll')
       if (item.disabled) return;
 
       // 单选模式:只能选一个
-      if (this.isAll !== "1") {
+      if (this.isAll != "1") {
         if (this.selectedIds.includes(item.id)) {
           this.selectedIds = [];
         } else {
@@ -316,6 +317,7 @@ export default {
 
       // 多选模式:切换
       const idx = this.selectedIds.indexOf(item.id);
+	  console.log(idx,'idx')
       if (idx > -1) {
         this.selectedIds.splice(idx, 1);
       } else {

+ 326 - 280
pages/ehs/accidentReport/accident.vue

@@ -1,303 +1,349 @@
 <template>
-  <view class="accident-list">
-    <!-- 搜索 -->
-    <view class="search-row">
-      <input
-        class="search-input"
-        v-model="searchName"
-        placeholder="事故事件名称"
-      />
+	<view class="accident-list">
+		<!-- 搜索 -->
+		<view class="search-row">
+			<input class="search-input" v-model="searchName" placeholder="事故事件名称" />
 
-      <button class="search-btn" @click="handleSearch">搜索</button>
-    </view>
+			<button class="search-btn" @click="handleSearch">搜索</button>
+		</view>
 
-    <u-list @scrolltolower="loadMore" class="list-content">
-      <view v-for="(item, idx) in listData" :key="item.id" class="card-wrapper">
-        <myCard
-          :item="item"
-          :index="idx + 1"
-          :btnList="getBtnList(item)"
-          :columns="cardColumns"
-          :title="item.acdntName"
-          :status="getStatusLabel(item.approvalStatus)"
-          @goDetail="goDetail"
-          @edit="handleEdit"
-          @handleSubmit="handleSubmit"
-          @handleDelete="handleDelete"
-        />
-      </view>
-      <view style="height: 20rpx"></view>
-      <view v-if="loading" class="load-more">加载中...</view>
-      <view v-if="isEnd && listData.length > 0" class="load-more"
-        >没有更多了</view
-      >
-      <u-empty v-if="!loading && listData.length === 0" text="暂无数据" />
-    </u-list>
+		<u-list @scrolltolower="loadMore" class="list-content">
+			<view v-for="(item, idx) in listData" :key="item.id" class="card-wrapper">
+				<myCard :item="item" :index="idx + 1" :btnList="getBtnList(item)" :columns="cardColumns"
+					:title="item.acdntName" :status="getStatusLabel(item.approvalStatus)" @goDetail="goDetail"
+					@edit="handleEdit(item)" @handleSubmit="handleSubmit(item)" @handleDelete="handleDelete(item)" />
+			</view>
+			<view style="height: 20rpx"></view>
+			<view v-if="loading" class="load-more">加载中...</view>
+			<view v-if="isEnd && listData.length > 0" class="load-more">没有更多了</view>
+			<u-empty v-if="!loading && listData.length === 0" text="暂无数据" />
+		</u-list>
 
-    <!-- 新增按钮 -->
-    <view class="add-btn" @click="handleAdd">
-      <u-icon name="plus" color="#fff" size="40"></u-icon>
-    </view>
+		<!-- 新增按钮 -->
+		<view class="add-btn" @click="handleAdd">
+			<u-icon name="plus" color="#fff" size="40"></u-icon>
+		</view>
 
-    <!-- 弹窗 -->
-    <accidentDialog ref="dialogRef" @reload="reloadList" />
-    <!-- <processSubmitDialog ref="processSubmitRef" @reload="reloadList" /> -->
+		<!-- 弹窗 -->
+		<accidentDialog ref="dialogRef" @reload="reloadList" />
+		<!-- <processSubmitDialog ref="processSubmitRef" @reload="reloadList" /> -->
 
-    <u-toast ref="uToast" />
-  </view>
+		<u-toast ref="uToast" />
+	</view>
 </template>
 
 <script>
-import myCard from "@/components/myCard.vue";
-import accidentDialog from "./accidentDialog.vue";
+	import myCard from "@/components/myCard.vue";
+	import accidentDialog from "./accidentDialog.vue";
+	import {
+		processInstanceCreateAPI,
+		processInstancePage
+	} from '@/api/wt/index.js'
+	import {
+		getList,
+		remove
+	} from "@/api/accidentReport/index.js";
+	import {
+		reviewStatusEnum
+	} from "@/enum/dict";
 
-import { getList, remove } from "@/api/accidentReport/index.js";
-import { reviewStatus } from "@/enum/dict";
+	export default {
+		components: {
+			myCard,
+			accidentDialog
+		},
+		data() {
+			return {
+				searchName: "",
+				deptId: null,
+				listData: [],
+				page: 1,
+				size: 10,
+				isEnd: false,
+				loading: false,
+				cardColumns: [
+					[{
+						prop: "acdntCode",
+						label: "编码",
+						className: "perce100"
+					}],
+					[{
+						prop: "acdntPlace",
+						label: "发生地点",
+						className: "perce100"
+					}],
+					[{
+							prop: "dutyUnitName",
+							label: "责任单位",
+							className: "perce50"
+						},
+						{
+							prop: "acdntLevelName",
+							label: "事故级别",
+							className: "perce50"
+						},
+					],
+					[{
+						prop: "occurrenceTime",
+						label: "发生时间",
+						className: "perce100"
+					}],
+					[{
+						label: "操作",
+						prop: "action",
+						type: "action",
+						className: "perce100",
+					}, ],
+				],
+			};
+		},
+		mounted() {
+			this.getList();
+		},
+		methods: {
+			onDeptConfirm(data) {
+				const id = data[0];
+				this.deptId = id;
+				const findDept = (list) => {
+					for (const item of list) {
+						if (item.id === id) return item.name;
+						if (item.children) {
+							const found = findDept(item.children);
+							if (found) return found;
+						}
+					}
+					return null;
+				};
+				this.deptName = findDept(this.deptList) || "责任单位";
+				this.page = 1;
+				this.isEnd = false;
+				this.getList();
+			},
 
-export default {
-  components: { myCard, accidentDialog },
-  data() {
-    return {
-      searchName: "",
-      deptId: null,
-      listData: [],
-      page: 1,
-      size: 10,
-      isEnd: false,
-      loading: false,
-      cardColumns: [
-        [{ prop: "acdntCode", label: "编码", className: "perce100" }],
-        [{ prop: "acdntPlace", label: "发生地点", className: "perce100" }],
-        [
-          { prop: "dutyUnitName", label: "责任单位", className: "perce50" },
-          { prop: "acdntLevelName", label: "事故级别", className: "perce50" },
-        ],
-        [{ prop: "occurrenceTime", label: "发生时间", className: "perce100" }],
-        [
-          {
-            label: "操作",
-            prop: "action",
-            type: "action",
-            className: "perce100",
-          },
-        ],
-      ],
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    onDeptConfirm(data) {
-      const id = data[0];
-      this.deptId = id;
-      const findDept = (list) => {
-        for (const item of list) {
-          if (item.id === id) return item.name;
-          if (item.children) {
-            const found = findDept(item.children);
-            if (found) return found;
-          }
-        }
-        return null;
-      };
-      this.deptName = findDept(this.deptList) || "责任单位";
-      this.page = 1;
-      this.isEnd = false;
-      this.getList();
-    },
+			getStatusLabel(status) {
+				return reviewStatusEnum.find(item => item.value == status).label
+			},
 
-    getStatusLabel(status) {
-      return;
-      return reviewStatus[status] || status;
-    },
+			getBtnList(item) {
+				const btns = [];
+				const canEdit = [0, 3].includes(item.approvalStatus);
+				if (canEdit) {
+					btns.push({
+						name: "编辑",
+						apiName: "edit",
+						btnType: "primary",
+						judge: [{
+							// authorities: 'ehs:accidentIncidents:update'
+						}],
+					});
+					btns.push({
+						name: "提交",
+						apiName: "handleSubmit",
+						btnType: "success",
+						judge: [{
+							// authorities: 'ehs:accidentIncidents:update'
+						}],
+					});
+					btns.push({
+						name: "删除",
+						apiName: "handleDelete",
+						btnType: "danger",
+						judge: [{
+							// authorities: 'ehs:accidentIncidents:delete'
+						}],
+					});
+				}
 
-    getBtnList(item) {
-      const btns = [];
-      const canEdit = [0, 3].includes(item.approvalStatus);
-      if (canEdit) {
-        btns.push({
-          name: "编辑",
-          apiName: "edit",
-          btnType: "primary",
-          judge: [{ fn: () => true }],
-        });
-        btns.push({
-          name: "提交",
-          apiName: "handleSubmit",
-          btnType: "success",
-          judge: [{ fn: () => true }],
-        });
-        btns.push({
-          name: "删除",
-          apiName: "handleDelete",
-          btnType: "danger",
-          judge: [{ fn: () => true }],
-        });
-      }
-      // 查看始终有
-      btns.push({
-        name: "详情",
-        apiName: "goDetail",
-        btnType: "info",
-        judge: [{ fn: () => true }],
-      });
-      return btns;
-    },
+				return btns;
+			},
 
-    goDetail(item) {
-      this.$refs.dialogRef.open(item, "view");
-    },
-    handleAdd() {
-      this.$refs.dialogRef.open(null, "add");
-    },
-    handleEdit(item) {
-      this.$refs.dialogRef.open(item, "edit");
-    },
+			goDetail(item) {
+				this.$refs.dialogRef.open(item, "view");
+			},
+			handleAdd() {
+				this.$refs.dialogRef.open(null, "add");
+			},
+			handleEdit(item) {
+				this.$refs.dialogRef.open(item, "edit");
+			},
 
-    handleSubmit(item) {
-      this.$refs.processSubmitRef.open({
-        businessId: item.id,
-        businessKey: "ehs_accident_incidents",
-        formCreateUserId: item.createUserId,
-        variables: {
-          businessCode: item.acdntCode,
-          businessName: item.acdntName,
-          businessType: item.acdntTypeName,
-        },
-      });
-    },
+			async handleSubmit(row) {
+				//后台不提供接口
+				let list = await processInstancePage({
+					pageNo: 1,
+					pageSize: 1,
+					reset: true,
+					key: 'ehs_accident_incidents'
+				})
+				let params = {
+					businessId: row.id,
+					businessKey: 'ehs_accident_incidents',
+					formCreateUserId: row.createUserId,
+					processDefinitionId: list.list[0].processDefinition.id,
+					variables: {
+						businessCode: row.acdntCode,
+						businessName: row.acdntName,
+						businessType: row.acdntTypeName
+					},
+				}
 
-    async handleDelete(item) {
-      const res = await uni.showModal({
-        title: "提示",
-        content: "确认删除该事故记录吗?",
-      });
-      if (res.confirm) {
-        try {
-          await remove([item.id]);
-          uni.showToast({ title: "删除成功", icon: "success" });
-          this.reloadList();
-        } catch (e) {
-          this.$refs.uToast.show({ type: "error", message: e.message });
-        }
-      }
-    },
+				await processInstanceCreateAPI(params)
+				uni.showModal({
+					title: `提交成功`,
+					content: '',
+					confirmText: '确认',
+					showCancel: false, // 是否显示取消按钮,默认为 true
+					success: () => {
+						this.reloadList();
+					}
+				})
+			},
 
-    handleSearch() {
-      this.page = 1;
-      this.isEnd = false;
-      this.getList();
-    },
+			async handleDelete(item) {
+				const res = await uni.showModal({
+					title: "提示",
+					content: "确认删除该事故记录吗?",
+				});
+				console.log(res, 'dsds')
+				if (res[1].confirm) {
+					try {
+						await remove([item.id]);
+						uni.showToast({
+							title: "删除成功",
+							icon: "success"
+						});
+						this.reloadList();
+					} catch (e) {
+						this.$refs.uToast.show({
+							type: "error",
+							message: e.message
+						});
+					}
+				}
+			},
 
-    reloadList() {
-      this.page = 1;
-      this.isEnd = false;
-      this.getList();
-    },
+			handleSearch() {
+				this.page = 1;
+				this.isEnd = false;
+				this.getList();
+			},
 
-    async getList() {
-      if (this.loading || this.isEnd) return;
-      this.loading = true;
-      try {
-        const params = {
-          pageNum: this.page,
-          size: this.size,
-          acdntName: this.searchName || undefined,
-          dutyUnitId: this.deptId || undefined,
-        };
-        const res = await getList(params);
-        const list = res.list || [];
-        if (this.page === 1) this.listData = list;
-        else this.listData = this.listData.concat(list);
-        this.isEnd =
-          list.length < this.size || this.listData.length >= res.count;
-        this.page += 1;
-      } catch (e) {
-        this.$refs.uToast.show({
-          type: "error",
-          message: e.message || "加载失败",
-        });
-      } finally {
-        this.loading = false;
-      }
-    },
+			reloadList() {
+				this.page = 1;
+				this.isEnd = false;
+				this.getList();
+			},
 
-    loadMore() {
-      if (!this.isEnd && !this.loading) this.getList();
-    },
-  },
-};
+			async getList() {
+				if (this.loading || this.isEnd) return;
+				this.loading = true;
+				try {
+					const params = {
+						pageNum: this.page,
+						size: this.size,
+						acdntName: this.searchName || undefined,
+						dutyUnitId: this.deptId || undefined,
+					};
+					const res = await getList(params);
+					const list = res.list || [];
+					if (this.page === 1) this.listData = list;
+					else this.listData = this.listData.concat(list);
+					this.isEnd =
+						list.length < this.size || this.listData.length >= res.count;
+					this.page += 1;
+				} catch (e) {
+					this.$refs.uToast.show({
+						type: "error",
+						message: e.message || "加载失败",
+					});
+				} finally {
+					this.loading = false;
+				}
+			},
+
+			loadMore() {
+				if (!this.isEnd && !this.loading) this.getList();
+			},
+		},
+	};
 </script>
 
 <style lang="scss" scoped>
-.accident-list {
-  .search-row {
-    display: flex;
-    align-items: center;
-    gap: 12rpx;
-    padding: 16rpx 0;
-    background: #fff;
-    border-radius: 24rpx;
-    padding: 16rpx 20rpx;
-    margin-bottom: 16rpx;
-    .search-input {
-      flex: 1;
-      height: 60rpx;
-      background: #f5f7fb;
-      border-radius: 48rpx;
-      padding: 0 20rpx;
-      font-size: 26rpx;
-    }
-    .dept-btn {
-      display: flex;
-      align-items: center;
-      height: 60rpx;
-      padding: 0 20rpx;
-      background: #e8edf4;
-      border-radius: 48rpx;
-      color: #2979ff;
-      font-size: 24rpx;
-      gap: 4rpx;
-      .arrow {
-        font-size: 18rpx;
-      }
-    }
-    .search-btn {
-      height: 60rpx;
-      padding: 0 28rpx;
-      background: $theme-color;
-      border-radius: 48rpx;
-      color: #fff;
-      font-size: 26rpx;
-      line-height: 60rpx;
-    }
-  }
-  .list-content {
-    height: calc(100vh - 300rpx);
-  }
-  .card-wrapper {
-    margin-top: 16rpx;
-  }
-  .add-btn {
-    position: fixed;
-    bottom: 120rpx;
-    right: 40rpx;
-    width: 100rpx;
-    height: 100rpx;
-    border-radius: 50%;
-    background: $theme-color;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.15);
-    z-index: 999;
-  }
-  .load-more {
-    text-align: center;
-    font-size: 26rpx;
-    color: #aaa;
-    padding: 20rpx 0;
-  }
-}
-</style>
+	.accident-list {
+		.search-row {
+			display: flex;
+			align-items: center;
+			gap: 12rpx;
+			padding: 16rpx 0;
+			background: #fff;
+			border-radius: 24rpx;
+			padding: 16rpx 20rpx;
+			margin-bottom: 16rpx;
+
+			.search-input {
+				flex: 1;
+				height: 60rpx;
+				background: #f5f7fb;
+				border-radius: 48rpx;
+				padding: 0 20rpx;
+				font-size: 26rpx;
+			}
+
+			.dept-btn {
+				display: flex;
+				align-items: center;
+				height: 60rpx;
+				padding: 0 20rpx;
+				background: #e8edf4;
+				border-radius: 48rpx;
+				color: #2979ff;
+				font-size: 24rpx;
+				gap: 4rpx;
+
+				.arrow {
+					font-size: 18rpx;
+				}
+			}
+
+			.search-btn {
+				height: 60rpx;
+				padding: 0 28rpx;
+				background: $theme-color;
+				border-radius: 48rpx;
+				color: #fff;
+				font-size: 26rpx;
+				line-height: 60rpx;
+			}
+		}
+
+		.list-content {
+			height: calc(100vh - 300rpx);
+		}
+
+		.card-wrapper {
+			margin-top: 16rpx;
+		}
+
+		.add-btn {
+			position: fixed;
+			bottom: 120rpx;
+			right: 40rpx;
+			width: 100rpx;
+			height: 100rpx;
+			border-radius: 50%;
+			background: $theme-color;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.15);
+			z-index: 999;
+		}
+
+		.load-more {
+			text-align: center;
+			font-size: 26rpx;
+			color: #aaa;
+			padding: 20rpx 0;
+		}
+	}
+</style>

+ 720 - 710
pages/ehs/accidentReport/accidentDialog.vue

@@ -1,717 +1,727 @@
 <template>
-  <u-popup
-    :show="visible"
-    mode="bottom"
-    :round="10"
-    :closeOnClickOverlay="false"
-    @close="cancel"
-    class="accident-popup"
-  >
-    <view class="popup-content">
-      <view class="popup-header"
-        ><text class="popup-title">{{ dialogTitle }}</text
-        ><view class="close-btn" @click="cancel">×</view></view
-      >
-      <scroll-view class="popup-body" scroll-y>
-        <view class="card-a">
-          <!-- 事故事件信息 -->
-          <view class="card-section">
-            <view class="section-title">📋 事故事件信息</view>
-            <u--form
-              labelPosition="left"
-              labelWidth="180rpx"
-              :model="form"
-              :rules="rules"
-              ref="formRef"
-            >
-              <u-form-item
-                label="事故事件名称"
-                prop="acdntName"
-                borderBottom
-                required
-              >
-                <u--input
-                  v-model="form.acdntName"
-                  placeholder="请输入"
-                  :disabled="isView"
-                  border="none"
-                  inputAlign="right"
-                />
-              </u-form-item>
-              <u-form-item
-                label="发生时间"
-                prop="occurrenceTime"
-                borderBottom
-                required
-              >
-                <view
-                  class="picker-value"
-                  @click="!isView && showDateTimePicker('occurrenceTime')"
-                  >{{ form.occurrenceTime || "请选择" }}</view
-                >
-                <u-icon slot="right" name="arrow-right" />
-              </u-form-item>
-              <u-form-item
-                label="事故发生地点"
-                prop="acdntPlace"
-                borderBottom
-                required
-              >
-                <u--input
-                  v-model="form.acdntPlace"
-                  placeholder="请输入"
-                  :disabled="isView"
-                  border="none"
-                  inputAlign="right"
-                />
-              </u-form-item>
-              <u-form-item label="来源类型" borderBottom>
-                <view
-                  class="picker-value"
-                  @click="!isView && showSourceTypePicker()"
-                  >{{ getSourceTypeLabel(form.sourceType) || "请选择" }}</view
-                >
-                <u-icon slot="right" name="arrow-right" />
-              </u-form-item>
-              <u-form-item label="来源单据名称" borderBottom>
-                <u--input
-                  v-model="form.sourceName"
-                  placeholder="请选择"
-                  readonly
-                  :disabled="isView"
-                  border="none"
-                  inputAlign="right"
-                  @click="addSource"
-                />
-              </u-form-item>
-              <u-form-item
-                label="事故事件经过"
-                prop="acdntPass"
-                borderBottom
-                required
-              >
-                <u--textarea
-                  v-model="form.acdntPass"
-                  placeholder="请输入"
-                  :disabled="isView"
-                  border="none"
-                  height="120rpx"
-                />
-              </u-form-item>
-              <u-form-item label="上报人" prop="reportPersonName" borderBottom>
-                <u--input
-                  v-model="form.reportPersonName"
-                  placeholder="请选择"
-                  readonly
-                  :disabled="isView"
-                  border="none"
-                  inputAlign="report"
-                  @click="userOpen('duty')"
-                />
-              </u-form-item>
-              <u-form-item label="上报部门" borderBottom>
-                <u--input
-                  v-model="form.reportDeptName"
-                  disabled
-                  border="none"
-                  inputAlign="right"
-                />
-              </u-form-item>
-              <u-form-item
-                label="上报时间"
-                prop="reportTime"
-                borderBottom
-                required
-              >
-                <view
-                  class="picker-value"
-                  @click="!isView && showDateTimePicker('reportTime')"
-                  >{{ form.reportTime || "请选择" }}</view
-                >
-                <u-icon slot="right" name="arrow-right" />
-              </u-form-item>
-            </u--form>
-          </view>
-
-          <!-- 调查处理信息 -->
-          <view class="card-section" v-if="!isView || form.acdntLevelId">
-            <view class="section-title">🔍 调查处理信息</view>
-            <u--form
-              labelPosition="left"
-              labelWidth="180rpx"
-              :model="form"
-              ref="form2Ref"
-            >
-              <u-form-item
-                label="事故级别"
-                prop="acdntLevelId"
-                borderBottom
-                required
-              >
-                <DictSelection
-                  dictName="事故级别"
-                  clearable
-                  :disabled="isView"
-                  v-model="formData.acdntLevelId"
-                />
-              </u-form-item>
-              <u-form-item
-                label="事故事件类型"
-                prop="acdntTypeId"
-                borderBottom
-                required
-              >
-                <DictSelection
-                  dictName="事故事件类型"
-                  clearable
-                  :disabled="isView"
-                  v-model="formData.acdntTypeId"
-                />
-              </u-form-item>
-              <u-form-item label="事故原因" prop="acdntCauselText" borderBottom>
-                <u--textarea
-                  v-model="form.acdntCauselText"
-                  placeholder="请输入"
-                  :disabled="isView"
-                  border="none"
-                  height="120rpx"
-                />
-              </u-form-item>
-              <u-form-item
-                label="事故责任人"
-                prop="dutyPersonName"
-                borderBottom
-              >
-                <u--input
-                  v-model="form.dutyPersonName"
-                  placeholder="请选择"
-                  readonly
-                  :disabled="isView"
-                  border="none"
-                  inputAlign="right"
-                  @click="userOpen('duty')"
-                />
-              </u-form-item>
-              <u-form-item label="责任单位" borderBottom>
-                <u--input
-                  v-model="form.dutyUnitName"
-                  disabled
-                  border="none"
-                  inputAlign="right"
-                />
-              </u-form-item>
-              <u-form-item label="间接经济损失(万元)" borderBottom>
-                <u--input
-                  v-model="form.indirectEconomicLoss"
-                  type="number"
-                  placeholder="请输入"
-                  :disabled="isView"
-                  border="none"
-                  inputAlign="right"
-                />
-              </u-form-item>
-              <u-form-item label="直接经济损失(万元)" borderBottom>
-                <u--input
-                  v-model="form.directEconomicLoss"
-                  type="number"
-                  placeholder="请输入"
-                  :disabled="isView"
-                  border="none"
-                  inputAlign="right"
-                />
-              </u-form-item>
-            </u--form>
-          </view>
-
-          <!-- 伤亡人员列表 -->
-          <view class="card-section">
-            <view class="section-title"
-              >👥 伤亡人员列表
-              <text class="add-btn" v-if="!isView" @click="userOpen('casualty')"
-                >+ 添加</text
-              ></view
-            >
-            <view
-              v-for="(p, idx) in form.ehsAccidentCasualtiesVOList"
-              :key="idx"
-              class="person-item"
-            >
-              <view class="person-info"
-                ><text class="name">{{ p.userName }}</text
-                ><text class="dept">{{ p.userDeptName }}</text></view
-              >
-              <view class="person-extra">
-                <picker
-                  mode="selector"
-                  :range="injuryDegreeOptions"
-                  range-key="label"
-                  :value="injuryDegreeIndex(p.injuryDegree)"
-                  @change="(e) => onInjuryChange(e, idx)"
-                  :disabled="isView"
-                >
-                  <view class="tag">{{
-                    getInjuryLabel(p.injuryDegree) || "受伤程度"
-                  }}</view>
-                </picker>
-                <input
-                  class="days-input"
-                  v-model="p.lostWorkDays"
-                  type="number"
-                  placeholder="损失工作日"
-                  :disabled="isView"
-                />
-                <text class="delete" v-if="!isView" @click="removeCasualty(idx)"
-                  >✕</text
-                >
-              </view>
-            </view>
-            <view
-              v-if="form.ehsAccidentCasualtiesVOList.length === 0"
-              class="empty-tip"
-              >暂无伤亡人员</view
-            >
-          </view>
-        </view>
-      </scroll-view>
-
-      <view class="popup-footer">
-        <u-button type="default" @click="cancel">取消</u-button>
-        <u-button v-if="!isView" type="primary" @click="save" :loading="loading"
-          >保存</u-button
-        >
-      </view>
-    </view>
-
-    <!-- 选择器:字典、日期、人员等 -->
-    <u-action-sheet
-      :show="showDictPopup"
-      :actions="dictActions"
-      @close="showDictPopup = false"
-      @select="onDictSelect"
-    />
-    <u-datetime-picker
-      :show="showDateTimePopup"
-      v-model="datetimeValue"
-      mode="datetime"
-      @confirm="onDateTimeConfirm"
-      @cancel="showDateTimePopup = false"
-    />
-    <selectUserDialog ref="userSelectRef" @confirm="changePersonel" />
-    <drillOrderSelect
-      ref="drillOrderSelectRef"
-      @confirm="onDrillOrderConfirm"
-    />
-    <u-toast ref="uToast" />
-  </u-popup>
+	<u-popup :show="visible" mode="bottom" :round="10" :closeOnClickOverlay="false" @close="cancel"
+		class="accident-popup">
+		<view class="popup-content">
+			<view class="popup-header"><text class="popup-title">{{ dialogTitle }}</text>
+				<view class="close-btn" @click="cancel">×</view>
+			</view>
+			<scroll-view class="popup-body" scroll-y>
+				<view class="card-a">
+					<!-- 事故事件信息 -->
+					<view class="card-section">
+						<view class="section-title">📋 事故事件信息</view>
+						<u--form labelPosition="left" labelWidth="190rpx" :model="form" :rules="rules" ref="formRef">
+							<u-form-item label="事故事件名称" prop="acdntName" borderBottom required>
+								<u--input v-model="form.acdntName" placeholder="请输入" :disabled="isView" border="none"
+									inputAlign="right" />
+							</u-form-item>
+							<u-form-item label="发生时间" prop="occurrenceTime" borderBottom required>
+								<view class="picker-value" @click="!isView && showDateTimePicker('occurrenceTime')">
+									{{ form.occurrenceTime || "请选择" }}
+								</view>
+								<u-icon slot="right" name="arrow-right" />
+							</u-form-item>
+							<u-form-item label="事故发生地点" prop="acdntPlace" borderBottom required>
+								<u--input v-model="form.acdntPlace" placeholder="请输入" :disabled="isView" border="none"
+									inputAlign="right" />
+							</u-form-item>
+							<u-form-item label="来源类型" borderBottom>
+								<view class="picker-value" @click="!isView && showSourceTypePicker()">
+									{{ getSourceTypeLabel(form.sourceType) || "请选择" }}
+								</view>
+								<u-icon slot="right" name="arrow-right" />
+							</u-form-item>
+							<u-form-item label="来源单据名称" borderBottom>
+								<u--input v-model="form.sourceName" placeholder="请选择" readonly :disabled="isView"
+									border="none" inputAlign="right" @click="addSource" />
+							</u-form-item>
+							<u-form-item label="事故事件经过" prop="acdntPass" borderBottom required>
+								<u--textarea v-model="form.acdntPass" placeholder="请输入" :disabled="isView"
+									height="120rpx" />
+							</u-form-item>
+							<!-- 修复:上报人使用 userOpen('report') -->
+							<u-form-item label="上报人" prop="reportPersonName" borderBottom @click="userOpen('report')">
+								<u--input v-model="form.reportPersonName" placeholder="请选择" :disabled="isView"
+									border="none" inputAlign="right" />
+							</u-form-item>
+							<u-form-item label="上报部门" borderBottom>
+								<u--input v-model="form.reportDeptName" disabled border="none" inputAlign="right" />
+							</u-form-item>
+							<u-form-item label="上报时间" prop="reportTime" borderBottom required>
+								<view class="picker-value" @click="!isView && showDateTimePicker('reportTime')">
+									{{ form.reportTime || "请选择" }}
+								</view>
+								<u-icon slot="right" name="arrow-right" />
+							</u-form-item>
+						</u--form>
+					</view>
+
+					<!-- 调查处理信息 -->
+					<view class="card-section" v-if="!isView || form.acdntLevelId">
+						<view class="section-title">🔍 调查处理信息</view>
+						<u--form labelPosition="left" labelWidth="180rpx" :model="form" ref="form2Ref">
+							<u-form-item label="事故级别" prop="acdntLevelId" borderBottom required>
+								<DictSelection dictName="事故级别" clearable :disabled="isView"
+									v-model="form.acdntLevelId" />
+							</u-form-item>
+							<u-form-item label="事故事件类型" prop="acdntTypeId" borderBottom required labelWidth="190rpx">
+								<DictSelection dictName="事故事件类型" clearable :disabled="isView"
+									v-model="form.acdntTypeId" />
+							</u-form-item>
+							<u-form-item label="事故原因" prop="acdntCauselText" borderBottom>
+								<u--textarea v-model="form.acdntCauselText" placeholder="请输入" :disabled="isView"
+									height="120rpx" />
+							</u-form-item>
+							<!-- 事故责任人 -->
+							<u-form-item label="事故责任人" prop="dutyPersonName" borderBottom @click="userOpen('duty')">
+								<u--input v-model="form.dutyPersonName" placeholder="请选择" :disabled="isView"
+									border="none" inputAlign="right" />
+							</u-form-item>
+							<u-form-item label="责任单位" borderBottom>
+								<u--input v-model="form.dutyUnitName" disabled border="none" inputAlign="right" />
+							</u-form-item>
+							<u-form-item label="间接经济损失(万元)" borderBottom>
+								<u--input v-model="form.indirectEconomicLoss" type="number" placeholder="请输入"
+									:disabled="isView" border="none" inputAlign="right" />
+							</u-form-item>
+							<u-form-item label="直接经济损失(万元)" borderBottom>
+								<u--input v-model="form.directEconomicLoss" type="number" placeholder="请输入"
+									:disabled="isView" border="none" inputAlign="right" />
+							</u-form-item>
+						</u--form>
+					</view>
+
+					<!-- ===== 伤亡人员列表(修改部分) ===== -->
+					<view class="card-section">
+						<view class="section-title">👥 伤亡人员列表
+							<text class="add-btn" v-if="!isView" @click="userOpen('casualty')">+ 添加</text>
+						</view>
+
+						<view v-for="(p, idx) in form.ehsAccidentCasualtiesVOList" :key="idx" class="person-card">
+							<!-- 第一行:姓名 + 部门 + 删除按钮 -->
+							<view class="person-header">
+								<view class="person-info">
+									<text class="name">{{ p.userName || '-' }}</text>
+									<text class="dept">{{ p.userDeptName || '-' }}</text>
+								</view>
+								<text class="delete-btn" v-if="!isView" @click="removeCasualty(idx)">✕</text>
+							</view>
+
+							<!-- 第二行:受伤程度(独占一行) -->
+							<view class="field-row" @click="!isView && showInjuryPickerFn(idx)">
+								<text class="field-label">受伤程度</text>
+								<view class="field-value-wrapper">
+									<text class="field-value" :class="{ placeholder: !getInjuryLabel(p.injuryDegree) }">
+										{{ getInjuryLabel(p.injuryDegree) || '请选择' }}
+									</text>
+									<u-icon v-if="!isView" name="arrow-right" size="28" color="#999" />
+								</view>
+							</view>
+
+							<!-- 第三行:损失工作日(独占一行) -->
+							<view class="field-row">
+								<text class="field-label">损失工作日</text>
+								<view class="field-value-wrapper">
+									<input class="days-input" v-model="p.lostWorkDays" type="number"
+										placeholder="请输入" :disabled="isView" />
+								</view>
+							</view>
+						</view>
+
+						<view v-if="form.ehsAccidentCasualtiesVOList.length === 0" class="empty-tip">暂无伤亡人员</view>
+					</view>
+				</view>
+			</scroll-view>
+
+			<view class="popup-footer">
+				<u-button type="default" @click="cancel">取消</u-button>
+				<u-button v-if="!isView" type="primary" @click="save" :loading="loading">保存</u-button>
+			</view>
+		</view>
+
+		<!-- 字典选择器 -->
+		<u-action-sheet :show="showDictPopup" :actions="dictActions" @close="showDictPopup = false"
+			@select="onDictSelect" />
+
+		<!-- 受伤程度选择器(新增) -->
+		<u-action-sheet :show="showInjuryPicker" :actions="injuryActions" title="请选择受伤程度"
+			@close="showInjuryPicker = false" @select="onInjurySelect" />
+
+		<!-- 日期时间选择器 -->
+		<u-datetime-picker :show="showDateTimePopup" v-model="datetimeValue" mode="datetime"
+			@confirm="onDateTimeConfirm" @cancel="showDateTimePopup = false" />
+
+		<!-- 人员选择 -->
+		<selectUserDialog ref="userSelectRef" @confirm="changePersonel" />
+
+		<!-- 演练工单选择 -->
+		<drillOrderSelect ref="drillOrderSelectRef" @confirm="onDrillOrderConfirm" />
+
+		<u-toast ref="uToast" />
+	</u-popup>
 </template>
 
 <script>
-import drillOrderSelect from "./drillOrderSelect.vue";
-import selectUserDialog from "@/components/selectUserDialog.vue";
-import { save, getById } from "@/api/accidentReport/index.js";
-import dictMixins from "@/mixins/dictMixins";
-
-const defForm = {
-  acdntName: "",
-  occurrenceTime: "",
-  acdntPlace: "",
-  acdntPass: "",
-  sourceType: "",
-  sourceName: "",
-  sourceId: "",
-  reportPersonName: "",
-  reportPersonUserId: "",
-  reportDeptName: "",
-  reportDeptId: "",
-  reportTime: "",
-  acdntLevelId: "",
-  acdntTypeId: "",
-  acdntCauselText: "",
-  dutyUnitId: "",
-  dutyUnitName: "",
-  dutyPersonName: "",
-  dutyPersonId: "",
-  indirectEconomicLoss: undefined,
-  directEconomicLoss: undefined,
-  ehsAccidentCasualtiesVOList: [],
-};
-
-export default {
-  components: { selectUserDialog, drillOrderSelect },
-  mixins: [dictMixins],
-  data() {
-    return {
-      visible: false,
-      loading: false,
-      dialogType: "add",
-      form: JSON.parse(JSON.stringify(defForm)),
-      injuryDegreeOptions: [
-        { value: "1", label: "轻微伤" },
-        { value: "2", label: "轻伤二级" },
-        { value: "3", label: "轻微一级" },
-        { value: "4", label: "重伤二级" },
-        { value: "5", label: "重伤一级" },
-      ],
-      showDictPopup: false,
-      dictActions: [],
-      dictField: "",
-      showDateTimePopup: false,
-      datetimeValue: 0,
-      dateField: "",
-      selectMode: "",
-      rules: {
-        acdntName: { required: true, message: "请输入事故事件名称" },
-        occurrenceTime: { required: true, message: "请选择发生时间" },
-        acdntPlace: { required: true, message: "请输入事故发生地点" },
-        acdntPass: { required: true, message: "请输入事故事件经过" },
-        reportTime: { required: true, message: "请选择上报时间" },
-        acdntLevelId: { required: true, message: "请选择事故级别" },
-        acdntTypeId: { required: true, message: "请选择事故事件类型" },
-      },
-    };
-  },
-  computed: {
-    dialogTitle() {
-      return (
-        { add: "新增事故上报", edit: "编辑事故上报", view: "查看事故上报" }[
-          this.dialogType
-        ] || "事故上报"
-      );
-    },
-    isView() {
-      return this.dialogType === "view";
-    },
-  },
-  methods: {
-    async open(row, type = "add") {
-      this.visible = true;
-      this.dialogType = type;
-      if (row && row.id) {
-        const data = await getById(row.id);
-        this.form = { ...JSON.parse(JSON.stringify(defForm)), ...data };
-        if (!this.form.ehsAccidentCasualtiesVOList)
-          this.form.ehsAccidentCasualtiesVOList = [];
-      } else {
-        this.form = JSON.parse(JSON.stringify(defForm));
-        const userInfo = uni.getStorageSync("userInfo") || {};
-        this.form.reportPersonName = userInfo.name || "";
-        this.form.reportPersonUserId = userInfo.userId || "";
-        this.form.reportDeptName = userInfo.groupName || "";
-        this.form.reportDeptId = userInfo.groupId || "";
-      }
-      this.$nextTick(() => {
-        if (this.$refs.formRef) this.$refs.formRef.setRules(this.rules);
-      });
-    },
-    cancel() {
-      this.visible = false;
-      this.form = JSON.parse(JSON.stringify(defForm));
-    },
-
-    // 日期选择
-    showDateTimePicker(field) {
-      if (this.isView) return;
-      this.dateField = field;
-      this.datetimeValue = this.form[field]
-        ? new Date(this.form[field]).getTime()
-        : Date.now();
-      this.showDateTimePopup = true;
-    },
-    onDateTimeConfirm(e) {
-      this.showDateTimePopup = false;
-      this.form[this.dateField] = this.$u.timeFormat(
-        e.value,
-        "yyyy-mm-dd hh:MM:ss",
-      );
-    },
-
-    onDictSelect(e) {
-      this.showDictPopup = false;
-      this.form[this.dictField] = e.value;
-      if (this.$refs.formRef) this.$refs.formRef.validateField(this.dictField);
-    },
-
-    // 来源类型
-    getSourceTypeLabel(val) {
-      const map = { 1: "应急演练工单" };
-      return map[val] || "";
-    },
-    showSourceTypePicker() {
-      if (this.isView) return;
-      this.dictField = "sourceType";
-      this.dictActions = [{ name: "应急演练工单", value: "1" }];
-      this.showDictPopup = true;
-    },
-
-    // 来源单据
-    addSource() {
-      if (this.isView) return;
-      if (!this.form.sourceType) {
-        this.$refs.uToast.show({
-          type: "warning",
-          message: "请先选择来源类型",
-        });
-        return;
-      }
-      if (this.form.sourceType == "1") this.$refs.drillOrderSelectRef.open();
-    },
-    onDrillOrderConfirm(data) {
-      this.form.sourceName = data.name || "";
-      this.form.sourceId = data.id || "";
-      this.form.acdntPlace = data.planLocation || "";
-    },
-
-    // 打开人员选择
-    userOpen(key) {
-      if (this.isView || this.loading) return;
-      this.userKey = key;
-      // 上报人、责任人:单选
-      if (key === "report" || key === "duty") {
-        this.$refs.userSelectRef.open(2);
-      }
-      // 伤亡人员:多选,传入已选列表禁用
-      if (key === "casualty") {
-        const disabledList = this.form.ehsAccidentCasualtiesVOList.map(
-          (item) => ({
-            id: item.userId,
-          }),
-        );
-        this.$refs.userSelectRef.open(1);
-      }
-    },
-
-    // 统一回调
-    changePersonel(data) {
-      if (!data || data.length === 0) return;
-
-      if (this.userKey === "report") {
-        const person = data[0];
-        this.form.reportPersonName = person.name || "";
-        this.form.reportPersonUserId = person.id || "";
-        this.form.reportDeptName = person.groupName || "";
-        this.form.reportDeptId = person.groupId || "";
-      } else if (this.userKey === "duty") {
-        const person = data[0];
-        this.form.dutyPersonName = person.name || "";
-        this.form.dutyPersonId = person.id || "";
-        this.form.dutyUnitName = person.groupName || "";
-        this.form.dutyUnitId = person.groupId || "";
-      } else if (this.userKey === "casualty") {
-        data.forEach((person) => {
-          this.form.ehsAccidentCasualtiesVOList.push({
-            userId: person.id || "",
-            userName: person.name || "",
-            userDeptId: person.groupId || "",
-            userDeptName: person.groupName || "",
-            injuryDegree: "",
-            lostWorkDays: undefined,
-            accidentId: this.form.id || "",
-          });
-        });
-      }
-    },
-
-    // 伤亡人员受伤程度
-    injuryDegreeIndex(val) {
-      return this.injuryDegreeOptions.findIndex((i) => i.value == val);
-    },
-    getInjuryLabel(val) {
-      const item = this.injuryDegreeOptions.find((i) => i.value == val);
-      return item ? item.label : "";
-    },
-    onInjuryChange(e, idx) {
-      const val = this.injuryDegreeOptions[e.detail.value]?.value;
-      this.$set(
-        this.form.ehsAccidentCasualtiesVOList[idx],
-        "injuryDegree",
-        val,
-      );
-    },
-    removeCasualty(idx) {
-      this.form.ehsAccidentCasualtiesVOList.splice(idx, 1);
-    },
-
-    // 保存
-    async save() {
-      try {
-        await this.$refs.formRef.validate();
-        // 填充分类名称
-        this.form.acdntLevelName = this.getDictValue(
-          "事故级别",
-          this.form.acdntLevelId,
-        );
-        this.form.acdntTypeName = this.getDictValue(
-          "事故事件类型",
-          this.form.acdntTypeId,
-        );
-        this.loading = true;
-        await save(this.form);
-        this.$refs.uToast.show({ type: "success", message: "保存成功" });
-        this.cancel();
-        this.$emit("reload");
-      } catch (e) {
-        if (e && e.message)
-          this.$refs.uToast.show({ type: "error", message: e.message });
-      } finally {
-        this.loading = false;
-      }
-    },
-  },
-};
+	import drillOrderSelect from "./drillOrderSelect.vue";
+	import selectUserDialog from "@/components/selectUserDialog.vue";
+	import {
+		save,
+		getById
+	} from "@/api/accidentReport/index.js";
+	import dictMixins from "@/mixins/dictMixins";
+	import DictSelection from "@/components/Dict/DictSelection.vue";
+
+	const defForm = {
+		acdntName: "",
+		occurrenceTime: "",
+		acdntPlace: "",
+		acdntPass: "",
+		sourceType: "",
+		sourceName: "",
+		sourceId: "",
+		reportPersonName: "",
+		reportPersonUserId: "",
+		reportDeptName: "",
+		reportDeptId: "",
+		reportTime: "",
+		acdntLevelId: "",
+		acdntTypeId: "",
+		acdntCauselText: "",
+		dutyUnitId: "",
+		dutyUnitName: "",
+		dutyPersonName: "",
+		dutyPersonId: "",
+		indirectEconomicLoss: undefined,
+		directEconomicLoss: undefined,
+		ehsAccidentCasualtiesVOList: [],
+	};
+
+	export default {
+		components: {
+			selectUserDialog,
+			drillOrderSelect,
+			DictSelection
+		},
+		mixins: [dictMixins],
+		data() {
+			return {
+				visible: false,
+				loading: false,
+				dialogType: "add",
+				userKey: "",
+				form: JSON.parse(JSON.stringify(defForm)),
+
+				// 受伤程度选项
+				injuryDegreeOptions: [{
+						value: "1",
+						label: "轻微伤"
+					},
+					{
+						value: "2",
+						label: "轻伤二级"
+					},
+					{
+						value: "3",
+						label: "轻微一级"
+					},
+					{
+						value: "4",
+						label: "重伤二级"
+					},
+					{
+						value: "5",
+						label: "重伤一级"
+					},
+				],
+
+				// 受伤程度选择器
+				showInjuryPicker: false,
+				injuryActions: [],
+				currentInjuryIndex: -1,
+
+				// 字典选择器
+				showDictPopup: false,
+				dictActions: [],
+				dictField: "",
+
+				// 日期时间选择器
+				showDateTimePopup: false,
+				datetimeValue: 0,
+				dateField: "",
+
+				// 表单校验规则
+				rules: {
+					acdntName: {
+						required: true,
+						message: "请输入事故事件名称"
+					},
+					occurrenceTime: {
+						required: true,
+						message: "请选择发生时间"
+					},
+					acdntPlace: {
+						required: true,
+						message: "请输入事故发生地点"
+					},
+					acdntPass: {
+						required: true,
+						message: "请输入事故事件经过"
+					},
+					reportTime: {
+						required: true,
+						message: "请选择上报时间"
+					},
+					acdntLevelId: {
+						required: true,
+						message: "请选择事故级别"
+					},
+					acdntTypeId: {
+						required: true,
+						message: "请选择事故事件类型"
+					},
+				},
+			};
+		},
+		computed: {
+			dialogTitle() {
+				const map = {
+					add: "新增事故上报",
+					edit: "编辑事故上报",
+					view: "查看事故上报"
+				};
+				return map[this.dialogType] || "事故上报";
+			},
+			isView() {
+				return this.dialogType === "view";
+			},
+		},
+		methods: {
+			// ===== 打开弹窗 =====
+			async open(row, type = "add") {
+				this.visible = true;
+				this.dialogType = type;
+				
+				if (row && row.id) {
+					const data = await getById(row.id);
+					this.form = {
+						...JSON.parse(JSON.stringify(defForm)),
+						...data
+					};
+					if (!this.form.ehsAccidentCasualtiesVOList)
+						this.form.ehsAccidentCasualtiesVOList = [];
+				} else {
+					this.form = JSON.parse(JSON.stringify(defForm));
+					const userInfo = uni.getStorageSync("userInfo") || {};
+					this.form.reportPersonName = userInfo.name || "";
+					this.form.reportPersonUserId = userInfo.userId || "";
+					this.form.reportDeptName = userInfo.groupName || "";
+					this.form.reportDeptId = userInfo.groupId || "";
+				}
+				this.$nextTick(() => {
+					if (this.$refs.formRef) this.$refs.formRef.setRules(this.rules);
+				});
+			},
+
+			// ===== 关闭弹窗 =====
+			cancel() {
+				this.visible = false;
+				this.form = JSON.parse(JSON.stringify(defForm));
+				this.showInjuryPicker = false;
+				this.showDictPopup = false;
+				this.showDateTimePopup = false;
+			},
+
+			// ===== 日期时间选择器 =====
+			showDateTimePicker(field) {
+				if (this.isView) return;
+				this.dateField = field;
+				this.datetimeValue = this.form[field] ?
+					new Date(this.form[field]).getTime() :
+					Date.now();
+				this.showDateTimePopup = true;
+			},
+			onDateTimeConfirm(e) {
+				this.showDateTimePopup = false;
+				this.form[this.dateField] = this.$u.timeFormat(
+					e.value,
+					"yyyy-mm-dd hh:MM:ss",
+				);
+			},
+
+			// ===== 字典选择器 =====
+			onDictSelect(e) {
+				this.showDictPopup = false;
+				this.form[this.dictField] = e.value;
+				if (this.$refs.formRef) this.$refs.formRef.validateField(this.dictField);
+			},
+
+			// ===== 来源类型 =====
+			getSourceTypeLabel(val) {
+				const map = {
+					1: "应急演练工单"
+				};
+				return map[val] || "";
+			},
+			showSourceTypePicker() {
+				if (this.isView) return;
+				this.dictField = "sourceType";
+				this.dictActions = [{
+					name: "应急演练工单",
+					value: "1"
+				}];
+				this.showDictPopup = true;
+			},
+
+			// ===== 来源单据 =====
+			addSource() {
+				if (this.isView) return;
+				if (!this.form.sourceType) {
+					this.$refs.uToast.show({
+						type: "warning",
+						message: "请先选择来源类型",
+					});
+					return;
+				}
+				if (this.form.sourceType == "1") this.$refs.drillOrderSelectRef.open();
+			},
+			onDrillOrderConfirm(data) {
+				this.form.sourceName = data.name || "";
+				this.form.sourceId = data.id || "";
+				this.form.acdntPlace = data.planLocation || "";
+			},
+
+			// ===== 人员选择 =====
+			userOpen(key) {
+				if (this.isView || this.loading) return;
+				this.userKey = key;
+				if (key === "report" || key === "duty") {
+					this.$refs.userSelectRef.open(2); // 单选
+				}
+				if (key === "casualty") {
+					this.$refs.userSelectRef.open(1); // 多选
+				}
+			},
+
+			changePersonel(data) {
+				if (!data || data.length === 0) return;
+
+				if (this.userKey === "report") {
+					const person = data[0];
+					this.form.reportPersonName = person.name || "";
+					this.form.reportPersonUserId = person.id || "";
+					this.form.reportDeptName = person.groupName || "";
+					this.form.reportDeptId = person.groupId || "";
+				} else if (this.userKey === "duty") {
+					const person = data[0];
+					this.form.dutyPersonName = person.name || "";
+					this.form.dutyPersonId = person.id || "";
+					this.form.dutyUnitName = person.groupName || "";
+					this.form.dutyUnitId = person.groupId || "";
+				} else if (this.userKey === "casualty") {
+					data.forEach((person) => {
+						this.form.ehsAccidentCasualtiesVOList.push({
+							userId: person.id || "",
+							userName: person.name || "",
+							userDeptId: person.groupId || "",
+							userDeptName: person.groupName || "",
+							injuryDegree: "",
+							lostWorkDays: undefined,
+							accidentId: this.form.id || "",
+						});
+					});
+				}
+			},
+
+			// ===== 伤亡人员 - 受伤程度(u-action-sheet) =====
+			showInjuryPickerFn(index) {
+				if (this.isView) return;
+				this.currentInjuryIndex = index;
+				this.injuryActions = this.injuryDegreeOptions.map((item) => ({
+					name: item.label,
+					value: item.value,
+				}));
+				this.showInjuryPicker = true;
+			},
+
+			onInjurySelect(e) {
+				this.showInjuryPicker = false;
+				if (this.currentInjuryIndex >= 0) {
+					this.$set(
+						this.form.ehsAccidentCasualtiesVOList[this.currentInjuryIndex],
+						"injuryDegree",
+						e.value,
+					);
+				}
+				this.currentInjuryIndex = -1;
+			},
+
+			// ===== 伤亡人员 - 辅助方法 =====
+			getInjuryLabel(val) {
+				const item = this.injuryDegreeOptions.find((i) => i.value == val);
+				return item ? item.label : "";
+			},
+
+			// ===== 伤亡人员 - 删除 =====
+			removeCasualty(idx) {
+				this.form.ehsAccidentCasualtiesVOList.splice(idx, 1);
+			},
+
+			// ===== 保存 =====
+			async save() {
+				try {
+					await this.$refs.formRef.validate();
+					// 填充分类名称
+					this.form.acdntLevelName = this.getDictValue(
+						"事故级别",
+						this.form.acdntLevelId,
+					);
+					this.form.acdntTypeName = this.getDictValue(
+						"事故事件类型",
+						this.form.acdntTypeId,
+					);
+					this.loading = true;
+					await save(this.form);
+					this.$refs.uToast.show({
+						type: "success",
+						message: "保存成功"
+					});
+					this.cancel();
+					this.$emit("reload");
+				} catch (e) {
+					if (e && e.message)
+						this.$refs.uToast.show({
+							type: "error",
+							message: e.message
+						});
+				} finally {
+					this.loading = false;
+				}
+			},
+		},
+	};
 </script>
 
 <style lang="scss" scoped>
-.accident-popup {
-  /deep/ .u-popup__content {
-    border-radius: 32rpx 32rpx 0 0;
-    overflow: hidden;
-  }
-}
-.popup-content {
-  height: 80vh;
-  display: flex;
-  flex-direction: column;
-  background: #eff2f7;
-}
-.popup-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: 30rpx 32rpx;
-  background: #fff;
-  border-bottom: 2rpx solid #eef2f6;
-  flex-shrink: 0;
-  .popup-title {
-    font-size: 36rpx;
-    font-weight: bold;
-    color: #1f2b3c;
-  }
-  .close-btn {
-    width: 60rpx;
-    height: 60rpx;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    font-size: 52rpx;
-    color: #8e9aae;
-  }
-}
-.popup-body {
-  flex: 1;
-  overflow-y: auto;
-  padding: 24rpx;
-}
-.card-a {
-  background: #fff;
-  border-radius: 48rpx;
-  box-shadow: 0 12rpx 40rpx rgba(0, 0, 0, 0.05);
-  overflow: hidden;
-}
-.card-section {
-  padding: 30rpx 32rpx;
-  &:not(:last-child) {
-    border-bottom: 2rpx solid #f0f2f5;
-  }
-}
-.section-title {
-  font-size: 30rpx;
-  font-weight: 700;
-  color: #1f2a44;
-  margin-bottom: 24rpx;
-  padding-left: 16rpx;
-  border-left: 6rpx solid #4caf50;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  .add-btn {
-    font-size: 26rpx;
-    color: #2979ff;
-    font-weight: normal;
-    padding: 4rpx 16rpx;
-    background: #e8f0fe;
-    border-radius: 30rpx;
-  }
-}
-/deep/ .u-form-item {
-  padding: 12rpx 0;
-  .u-form-item__body__left__label {
-    font-size: 26rpx !important;
-    color: #6c7a91 !important;
-  }
-  .u-input__content__field-wrapper__field {
-    font-size: 26rpx !important;
-    text-align: right;
-  }
-}
-.picker-value {
-  font-size: 26rpx;
-  color: #1e2a3a;
-  text-align: right;
-  flex: 1;
-  min-height: 44rpx;
-  padding: 4rpx 0;
-}
-.person-item {
-  background: #f5f7fb;
-  border-radius: 16rpx;
-  padding: 16rpx;
-  margin-bottom: 12rpx;
-  .person-info {
-    display: flex;
-    gap: 20rpx;
-    .name {
-      font-weight: 600;
-      font-size: 28rpx;
-    }
-    .dept {
-      color: #8e9aae;
-      font-size: 24rpx;
-    }
-  }
-  .person-extra {
-    display: flex;
-    align-items: center;
-    gap: 12rpx;
-    margin-top: 8rpx;
-    .tag {
-      background: #e8edf4;
-      padding: 4rpx 16rpx;
-      border-radius: 30rpx;
-      font-size: 24rpx;
-      color: #2979ff;
-    }
-    .days-input {
-      flex: 1;
-      background: #fff;
-      border-radius: 30rpx;
-      padding: 0 16rpx;
-      height: 50rpx;
-      font-size: 24rpx;
-    }
-    .delete {
-      color: #f56c6c;
-      font-size: 28rpx;
-      padding: 0 8rpx;
-    }
-  }
-}
-.empty-tip {
-  text-align: center;
-  font-size: 26rpx;
-  color: #aaa;
-  padding: 30rpx 0;
-}
-.popup-footer {
-  display: flex;
-  padding: 16rpx 24rpx;
-  background: #fff;
-  border-top: 2rpx solid #eef2f6;
-  gap: 16rpx;
-  flex-shrink: 0;
-  /deep/ .u-button {
-    flex: 1;
-    border-radius: 48rpx;
-    height: 72rpx;
-  }
-}
-</style>
+	.accident-popup {
+		/deep/ .u-popup__content {
+			border-radius: 32rpx 32rpx 0 0;
+			overflow: hidden;
+		}
+	}
+
+	.popup-content {
+		height: calc(100vh - 100px);
+		display: flex;
+		flex-direction: column;
+		background: #eff2f7;
+	}
+
+	.popup-header {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 30rpx 32rpx;
+		background: #fff;
+		border-bottom: 2rpx solid #eef2f6;
+		flex-shrink: 0;
+
+		.popup-title {
+			font-size: 36rpx;
+			font-weight: bold;
+			color: #1f2b3c;
+		}
+
+		.close-btn {
+			width: 60rpx;
+			height: 60rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-size: 52rpx;
+			color: #8e9aae;
+		}
+	}
+
+	.popup-body {
+		flex: 1;
+		overflow-y: auto;
+		padding: 24rpx;
+	}
+
+	.card-a {
+		background: #fff;
+		border-radius: 48rpx;
+		box-shadow: 0 12rpx 40rpx rgba(0, 0, 0, 0.05);
+		overflow: hidden;
+	}
+
+	.card-section {
+		padding: 30rpx 32rpx;
+
+		&:not(:last-child) {
+			border-bottom: 2rpx solid #f0f2f5;
+		}
+	}
+
+	.section-title {
+		font-size: 30rpx;
+		font-weight: 700;
+		color: #1f2a44;
+		margin-bottom: 24rpx;
+		padding-left: 16rpx;
+		border-left: 6rpx solid #4caf50;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+
+		.add-btn {
+			font-size: 26rpx;
+			color: #2979ff;
+			font-weight: normal;
+			padding: 4rpx 16rpx;
+			background: #e8f0fe;
+			border-radius: 30rpx;
+		}
+	}
+
+	// ===== u--form 样式 =====
+	/deep/ .u-form-item {
+		padding: 12rpx 0;
+
+		.u-form-item__body__left__label {
+			font-size: 26rpx !important;
+			color: #6c7a91 !important;
+		}
+
+		.u-input__content__field-wrapper__field {
+			font-size: 26rpx !important;
+			text-align: right;
+		}
+	}
+
+	.picker-value {
+		font-size: 26rpx;
+		color: #1e2a3a;
+		text-align: right;
+		flex: 1;
+		min-height: 44rpx;
+		padding: 4rpx 0;
+	}
+
+	// ===== 伤亡人员卡片(新增样式) =====
+	.person-card {
+		background: #f5f7fb;
+		border-radius: 16rpx;
+		padding: 16rpx 20rpx;
+		margin-bottom: 16rpx;
+
+		&:last-child {
+			margin-bottom: 0;
+		}
+
+		// 第一行:姓名 + 部门 + 删除
+		.person-header {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 16rpx;
+
+			.person-info {
+				display: flex;
+				align-items: center;
+				gap: 20rpx;
+				flex: 1;
+				min-width: 0;
+
+				.name {
+					font-size: 28rpx;
+					font-weight: 600;
+					color: #1f2b3c;
+				}
+
+				.dept {
+					font-size: 24rpx;
+					color: #8e9aae;
+				}
+			}
+
+			.delete-btn {
+				color: #f56c6c;
+				font-size: 32rpx;
+				padding: 0 8rpx;
+				flex-shrink: 0;
+			}
+		}
+
+		// 字段行:受伤程度 / 损失工作日(各独占一行)
+		.field-row {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding: 8rpx 0;
+
+			.field-label {
+				font-size: 26rpx;
+				color: #6c7a91;
+				flex-shrink: 0;
+				width: 140rpx;
+			}
+
+			.field-value-wrapper {
+				flex: 1;
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+				gap: 8rpx;
+				min-width: 0;
+
+				.field-value {
+					font-size: 26rpx;
+					color: #1e2a3a;
+
+					&.placeholder {
+						color: #bbb;
+					}
+				}
+
+				.days-input {
+					width: 100%;
+					background: #fff;
+					border-radius: 30rpx;
+					padding: 0 16rpx;
+					height: 50rpx;
+					font-size: 24rpx;
+					border: 2rpx solid #e9edf2;
+					text-align: right;
+
+					&:disabled {
+						background: #f5f5f5;
+						color: #999;
+					}
+				}
+			}
+		}
+	}
+
+	.empty-tip {
+		text-align: center;
+		font-size: 26rpx;
+		color: #aaa;
+		padding: 30rpx 0;
+	}
+
+	.popup-footer {
+		display: flex;
+		padding: 16rpx 24rpx;
+		background: #fff;
+		border-top: 2rpx solid #eef2f6;
+		gap: 16rpx;
+		flex-shrink: 0;
+
+		/deep/ .u-button {
+			flex: 1;
+			border-radius: 48rpx;
+			height: 72rpx;
+		}
+	}
+</style>

+ 275 - 260
pages/ehs/accidentReport/process.vue

@@ -1,270 +1,285 @@
 <template>
-  <view class="process-list">
-    <view class="search-row">
-      <input
-        class="search-input"
-        v-model="searchName"
-        placeholder="事故事件名称"
-      />
-      <view class="dept-btn" @click="showDeptPicker"
-        ><text>{{ deptName || "责任单位" }}</text
-        ><text class="arrow">▾</text></view
-      >
-      <button class="search-btn" @click="handleSearch">搜索</button>
-    </view>
+	<view class="process-list">
+		<view class="search-row">
+			<input class="search-input" v-model="searchName" placeholder="事故事件名称" />
 
-    <u-list @scrolltolower="loadMore" class="list-content">
-      <view v-for="(item, idx) in listData" :key="item.id" class="card-wrapper">
-        <myCard
-          :item="item"
-          :index="idx + 1"
-          :btnList="getBtnList(item)"
-          :columns="processColumns"
-          :title="item.acdntName"
-          :status="getStatusLabel(item.approvalStatus)"
-          @goDetail="goDetail"
-          @handleProcess="handleProcess"
-        />
-      </view>
-      <view style="height: 20rpx"></view>
-      <view v-if="loading" class="load-more">加载中...</view>
-      <view v-if="isEnd && listData.length > 0" class="load-more"
-        >没有更多了</view
-      >
-      <u-empty v-if="!loading && listData.length === 0" text="暂无待处理事故" />
-    </u-list>
+			<button class="search-btn" @click="handleSearch">搜索</button>
+		</view>
 
-    <!-- 弹窗 -->
-    <processDialog ref="processDialogRef" @reload="reloadList" />
-    <accidentDialog ref="dialogRef" @reload="reloadList" />
-    <ba-tree-picker
-      ref="treePicker"
-      key="dept"
-      :multiple="false"
-      @select-change="onDeptConfirm"
-      title="选择部门"
-      :localdata="deptList"
-      valueKey="id"
-      textKey="name"
-    />
-    <u-toast ref="uToast" />
-  </view>
+		<u-list @scrolltolower="loadMore" class="list-content">
+			<view v-for="(item, idx) in listData" :key="item.id" class="card-wrapper">
+				<myCard :item="item" :index="idx + 1" :btnList="getBtnList(item)" :columns="processColumns"
+					:title="item.acdntName" :status="getStatusLabel(item.approvalStatus)" @goDetail="goDetail"
+					@handleProcess="handleProcess(item)" />
+			</view>
+			<view style="height: 20rpx"></view>
+			<view v-if="loading" class="load-more">加载中...</view>
+			<view v-if="isEnd && listData.length > 0" class="load-more">没有更多了</view>
+			<u-empty v-if="!loading && listData.length === 0" text="暂无待处理事故" />
+		</u-list>
+
+		<!-- 弹窗 -->
+		<processDialog ref="processDialogRef" @reload="reloadList" />
+		<accidentDialog ref="dialogRef" @reload="reloadList" />
+		<ba-tree-picker ref="treePicker" key="dept" :multiple="false" @select-change="onDeptConfirm" title="选择部门"
+			:localdata="deptList" valueKey="id" textKey="name" />
+		<u-toast ref="uToast" />
+	</view>
 </template>
 
 <script>
-import myCard from "@/components/myCard.vue";
-import processDialog from "./processDialog.vue";
-import accidentDialog from "./accidentDialog.vue";
-import baTreePicker from "@/components/ba-tree-picker/ba-tree-picker.vue";
-import { pageApproved } from "@/api/accidentReport/index.js";
-import { listOrganizations } from "@/api/common.js";
+	import myCard from "@/components/myCard.vue";
+	import processDialog from "./processDialog.vue";
+	import accidentDialog from "./accidentDialog.vue";
+	import baTreePicker from "@/components/ba-tree-picker/ba-tree-picker.vue";
+	import {
+		pageApproved
+	} from "@/api/accidentReport/index.js";
+	import {
+		listOrganizations
+	} from "@/api/common.js";
+	import {
+		reviewStatusEnum
+	} from "@/enum/dict";
+	export default {
+		components: {
+			myCard,
+			processDialog,
+			accidentDialog,
+			baTreePicker
+		},
+		data() {
+			return {
+				searchName: "",
+				deptId: null,
+				deptName: "责任单位",
+				deptList: [],
+				listData: [],
+				page: 1,
+				size: 10,
+				isEnd: false,
+				loading: false,
+				processColumns: [
+					[{
+						prop: "acdntCode",
+						label: "编码",
+						className: "perce100"
+					}],
+					[{
+							prop: "dutyUnitName",
+							label: "责任单位",
+							className: "perce50"
+						},
+						{
+							prop: "acdntPlace",
+							label: "地点",
+							className: "perce50"
+						},
+					],
+					[{
+						prop: "occurrenceTime",
+						label: "发生时间",
+						className: "perce100"
+					}],
+					[{
+							prop: "ascertainedStatus",
+							label: "事故原因",
+							className: "perce50",
+							formatter: (row) =>
+								row.ascertainedStatus == 1 ? "已查清" : "未查清",
+						},
+						{
+							prop: "responsibilityStatus",
+							label: "责任人员",
+							className: "perce50",
+							formatter: (row) =>
+								row.responsibilityStatus == 1 ? "已处理" : "未处理",
+						},
+
+					],
+					[{
+							prop: "correctiveMeasuresStatus",
+							label: "整改措施",
+							className: "perce33",
+							formatter: (row) =>
+								row.correctiveMeasuresStatus == 1 ? "已落实" : "未落实",
+						},
+						{
+							prop: "personnelEducationStatus",
+							label: "人员教育",
+							className: "perce50",
+							formatter: (row) =>
+								row.personnelEducationStatus == 1 ? "已教育" : "未教育",
+						},
+
+					],
 
-export default {
-  components: { myCard, processDialog, accidentDialog, baTreePicker },
-  data() {
-    return {
-      searchName: "",
-      deptId: null,
-      deptName: "责任单位",
-      deptList: [],
-      listData: [],
-      page: 1,
-      size: 10,
-      isEnd: false,
-      loading: false,
-      processColumns: [
-        [{ prop: "acdntCode", label: "编码", className: "perce100" }],
-        [
-          { prop: "dutyUnitName", label: "责任单位", className: "perce50" },
-          { prop: "acdntPlace", label: "地点", className: "perce50" },
-        ],
-        [{ prop: "occurrenceTime", label: "发生时间", className: "perce100" }],
-        [
-          {
-            prop: "ascertainedStatus",
-            label: "事故原因",
-            className: "perce33",
-            formatter: (row) =>
-              row.ascertainedStatus == 1 ? "已查清" : "未查清",
-          },
-          {
-            prop: "responsibilityStatus",
-            label: "责任人员",
-            className: "perce33",
-            formatter: (row) =>
-              row.responsibilityStatus == 1 ? "已处理" : "未处理",
-          },
-          {
-            prop: "correctiveMeasuresStatus",
-            label: "整改措施",
-            className: "perce33",
-            formatter: (row) =>
-              row.correctiveMeasuresStatus == 1 ? "已落实" : "未落实",
-          },
-        ],
-        [
-          {
-            label: "操作",
-            prop: "action",
-            type: "action",
-            className: "perce100",
-          },
-        ],
-      ],
-    };
-  },
-  mounted() {
-    this.loadDeptList();
-    this.getList();
-  },
-  methods: {
-    async loadDeptList() {
-      try {
-        const res = await listOrganizations({});
-        this.deptList = res || [];
-      } catch (e) {}
-    },
-    showDeptPicker() {
-      this.$refs.treePicker._show();
-    },
-    onDeptConfirm(data) {
-      const id = data[0];
-      this.deptId = id;
-      const find = (list) => {
-        for (const item of list) {
-          if (item.id === id) return item.name;
-          if (item.children) {
-            const f = find(item.children);
-            if (f) return f;
-          }
-        }
-        return null;
-      };
-      this.deptName = find(this.deptList) || "责任单位";
-      this.page = 1;
-      this.isEnd = false;
-      this.getList();
-    },
-    getStatusLabel(status) {
-      return (
-        { 0: "待提交", 1: "审批中", 2: "已通过", 3: "已驳回" }[status] || status
-      );
-    },
-    getBtnList(item) {
-      return [
-        {
-          name: "查看",
-          apiName: "goDetail",
-          btnType: "info",
-          judge: [{ fn: () => true }],
-        },
-        {
-          name: "处理",
-          apiName: "handleProcess",
-          btnType: "primary",
-          judge: [{ fn: () => true }],
-        },
-      ];
-    },
-    goDetail(item) {
-      this.$refs.dialogRef.open(item, "view");
-    },
-    handleProcess(item) {
-      this.$refs.processDialogRef.open(item);
-    },
-    handleSearch() {
-      this.page = 1;
-      this.isEnd = false;
-      this.getList();
-    },
-    reloadList() {
-      this.page = 1;
-      this.isEnd = false;
-      this.getList();
-    },
-    async getList() {
-      if (this.loading || this.isEnd) return;
-      this.loading = true;
-      try {
-        const params = {
-          pageNum: this.page,
-          size: this.size,
-          acdntName: this.searchName || undefined,
-          dutyUnitId: this.deptId || undefined,
-        };
-        const res = await pageApproved(params);
-        const list = res.list || [];
-        if (this.page === 1) this.listData = list;
-        else this.listData = this.listData.concat(list);
-        this.isEnd =
-          list.length < this.size || this.listData.length >= res.count;
-        this.page += 1;
-      } catch (e) {
-        this.$refs.uToast.show({ type: "error", message: e.message });
-      } finally {
-        this.loading = false;
-      }
-    },
-    loadMore() {
-      if (!this.isEnd && !this.loading) this.getList();
-    },
-  },
-};
+					[{
+						label: "操作",
+						prop: "action",
+						type: "action",
+						className: "perce100",
+					}, ],
+				],
+			};
+		},
+		mounted() {
+			this.loadDeptList();
+			this.getList();
+		},
+		methods: {
+			async loadDeptList() {
+				try {
+					const res = await listOrganizations({});
+					this.deptList = res || [];
+				} catch (e) {}
+			},
+			showDeptPicker() {
+				this.$refs.treePicker._show();
+			},
+			onDeptConfirm(data) {
+				const id = data[0];
+				this.deptId = id;
+				const find = (list) => {
+					for (const item of list) {
+						if (item.id === id) return item.name;
+						if (item.children) {
+							const f = find(item.children);
+							if (f) return f;
+						}
+					}
+					return null;
+				};
+				this.deptName = find(this.deptList) || "责任单位";
+				this.page = 1;
+				this.isEnd = false;
+				this.getList();
+			},
+			getStatusLabel(status) {
+				return reviewStatusEnum.find(item => item.value == status).label
+			},
+			getBtnList(item) {
+				return [
+
+					{
+						name: "处理",
+						apiName: "handleProcess",
+						btnType: "primary",
+						judge: [{
+							fn: () => true
+						}],
+					},
+				];
+			},
+			goDetail(item) {
+				this.$refs.dialogRef.open(item, "view");
+			},
+			handleProcess(item) {
+				this.$refs.processDialogRef.open(item);
+			},
+			handleSearch() {
+				this.page = 1;
+				this.isEnd = false;
+				this.getList();
+			},
+			reloadList() {
+				this.page = 1;
+				this.isEnd = false;
+				this.getList();
+			},
+			async getList() {
+				if (this.loading || this.isEnd) return;
+				this.loading = true;
+				try {
+					const params = {
+						pageNum: this.page,
+						size: this.size,
+						acdntName: this.searchName || undefined,
+						dutyUnitId: this.deptId || undefined,
+					};
+					const res = await pageApproved(params);
+					const list = res.list || [];
+					if (this.page === 1) this.listData = list;
+					else this.listData = this.listData.concat(list);
+					this.isEnd =
+						list.length < this.size || this.listData.length >= res.count;
+					this.page += 1;
+				} catch (e) {
+					this.$refs.uToast.show({
+						type: "error",
+						message: e.message
+					});
+				} finally {
+					this.loading = false;
+				}
+			},
+			loadMore() {
+				if (!this.isEnd && !this.loading) this.getList();
+			},
+		},
+	};
 </script>
 
 <style lang="scss" scoped>
-.process-list {
-  .search-row {
-    display: flex;
-    align-items: center;
-    gap: 12rpx;
-    padding: 16rpx 20rpx;
-    background: #fff;
-    border-radius: 24rpx;
-    margin-bottom: 16rpx;
-    .search-input {
-      flex: 1;
-      height: 60rpx;
-      background: #f5f7fb;
-      border-radius: 48rpx;
-      padding: 0 20rpx;
-      font-size: 26rpx;
-    }
-    .dept-btn {
-      display: flex;
-      align-items: center;
-      height: 60rpx;
-      padding: 0 20rpx;
-      background: #e8edf4;
-      border-radius: 48rpx;
-      color: #2979ff;
-      font-size: 24rpx;
-      gap: 4rpx;
-      .arrow {
-        font-size: 18rpx;
-      }
-    }
-    .search-btn {
-      height: 60rpx;
-      padding: 0 28rpx;
-      background: $theme-color;
-      border-radius: 48rpx;
-      color: #fff;
-      font-size: 26rpx;
-      line-height: 60rpx;
-    }
-  }
-  .list-content {
-    height: calc(100vh - 300rpx);
-  }
-  .card-wrapper {
-    margin-top: 16rpx;
-  }
-  .load-more {
-    text-align: center;
-    font-size: 26rpx;
-    color: #aaa;
-    padding: 20rpx 0;
-  }
-}
-</style>
+	.process-list {
+		.search-row {
+			display: flex;
+			align-items: center;
+			gap: 12rpx;
+			padding: 16rpx 20rpx;
+			background: #fff;
+			border-radius: 24rpx;
+			margin-bottom: 16rpx;
+
+			.search-input {
+				flex: 1;
+				height: 60rpx;
+				background: #f5f7fb;
+				border-radius: 48rpx;
+				padding: 0 20rpx;
+				font-size: 26rpx;
+			}
+
+			.dept-btn {
+				display: flex;
+				align-items: center;
+				height: 60rpx;
+				padding: 0 20rpx;
+				background: #e8edf4;
+				border-radius: 48rpx;
+				color: #2979ff;
+				font-size: 24rpx;
+				gap: 4rpx;
+
+				.arrow {
+					font-size: 18rpx;
+				}
+			}
+
+			.search-btn {
+				height: 60rpx;
+				padding: 0 28rpx;
+				background: $theme-color;
+				border-radius: 48rpx;
+				color: #fff;
+				font-size: 26rpx;
+				line-height: 60rpx;
+			}
+		}
+
+		.list-content {
+			height: calc(100vh - 300rpx);
+		}
+
+		.card-wrapper {
+			margin-top: 16rpx;
+		}
+
+		.load-more {
+			text-align: center;
+			font-size: 26rpx;
+			color: #aaa;
+			padding: 20rpx 0;
+		}
+	}
+</style>

+ 5 - 6
pages/ehs/accidentReport/processDialog.vue

@@ -64,15 +64,14 @@
                   >
                 </u-radio-group>
               </u-form-item>
-              <u-form-item :label="section.noteLabel" borderBottom>
+              <u-form-item label="备注" borderBottom>
                 <u--textarea
                   v-model="form[section.noteKey]"
                   placeholder="请输入"
-                  border="none"
                   height="100rpx"
                 />
               </u-form-item>
-              <u-form-item :label="section.materialLabel" borderBottom>
+              <u-form-item label="相关材料" borderBottom>
                 <fileMain v-model="form[section.materialKey]" type="add" />
               </u-form-item>
             </u--form>
@@ -124,6 +123,7 @@ export default {
           key: "ascertained",
           title: "事故查明情况",
           statusLabel: "是否查清",
+	
           statusKey: "ascertainedStatus",
           noteKey: "ascertainedNote",
           materialKey: "ascertainedMaterials",
@@ -147,7 +147,7 @@ export default {
         {
           key: "education",
           title: "相关人员教育",
-          statusLabel: "是否教育",
+          statusLabel: "是否教育",
           statusKey: "personnelEducationStatus",
           noteKey: "personnelEducationNote",
           materialKey: "personnelEducationMaterials",
@@ -190,7 +190,7 @@ export default {
   }
 }
 .popup-content {
-  height: 80vh;
+  height: calc(100vh - 100px);
   display: flex;
   flex-direction: column;
   background: #eff2f7;
@@ -244,7 +244,6 @@ export default {
   border-left: 6rpx solid #4caf50;
 }
 /deep/ .u-form-item {
-  padding: 12rpx 0;
   .u-form-item__body__left__label {
     font-size: 26rpx !important;
     color: #6c7a91 !important;