| | |
| | | :inline="true" |
| | | label-width="80px" |
| | | > |
| | | <el-form-item label="转运单号" prop="transportNo"> |
| | | <el-input |
| | | v-model="queryParams.transportNo" |
| | | placeholder="请输入转运单号" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="住院号" prop="caseNo"> |
| | | <el-form-item label="案例编号" prop="caseNo"> |
| | | <el-input |
| | | v-model="queryParams.caseNo" |
| | | placeholder="请输入住院号" |
| | | placeholder="请输入案例编号" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="捐献者姓名" prop="donorName"> |
| | | <el-form-item label="患者姓名" prop="patName"> |
| | | <el-input |
| | | v-model="queryParams.donorName" |
| | | placeholder="请输入捐献者姓名" |
| | | v-model="queryParams.patName" |
| | | placeholder="请输入患者姓名" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="转运状态" prop="status"> |
| | | <el-form-item label="转运状态" prop="transitStatus"> |
| | | <el-select |
| | | v-model="queryParams.status" |
| | | v-model="queryParams.transitStatus" |
| | | placeholder="转运状态" |
| | | clearable |
| | | style="width: 200px" |
| | | > |
| | | <el-option label="全部" value="" /> |
| | | <el-option label="待出发" value="pending" /> |
| | | <el-option label="转运中" value="transporting" /> |
| | | <el-option label="已完成" value="completed" /> |
| | | <el-option label="已取消" value="cancelled" /> |
| | | <el-option label="待转运" :value="1" /> |
| | | <el-option label="转运中" :value="2" /> |
| | | <el-option label="转运完成" :value="3" /> |
| | | <el-option label="转运取消" :value="4" /> |
| | | <el-option label="暂存" :value="5" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间"> |
| | |
| | | ></right-toolbar> |
| | | </el-row> |
| | | |
| | | <!-- 数据表格 --> |
| | | <!-- 数据表格 - 直接使用后端返回的数据结构 --> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="transportList" |
| | |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="序号" type="index" width="60" align="center" /> |
| | | <el-table-column label="转运单号" align="center" prop="id" width="140" /> |
| | | <el-table-column |
| | | label="住院号" |
| | | label="转运单号" |
| | | align="center" |
| | | prop="reportId" |
| | | width="140" |
| | | /> |
| | | <el-table-column |
| | | label="案例编号" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="140" |
| | | /> |
| | | <el-table-column label="捐献者信息" align="center" width="180"> |
| | | <el-table-column label="患者信息" align="center" width="260"> |
| | | <template slot-scope="scope"> |
| | | <div class="donor-info"> |
| | | <div class="donor-name">{{ scope.row.donorName }}</div> |
| | | <div class="donor-name">{{ scope.row.patName }}</div> |
| | | <div class="donor-details"> |
| | | {{ scope.row.gender }} | {{ scope.row.age }}岁 |
| | | <dict-tag |
| | | :options="dict.type.sys_user_sex" |
| | | :value="parseInt(scope.row.sex)" |
| | | /> |
| | | | {{ scope.row.age }}岁 |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | <el-table-column |
| | | label="疾病诊断" |
| | | align="center" |
| | | prop="diagnosis" |
| | | prop="diagnosisname" |
| | | min-width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="医疗机构" |
| | | label="治疗医院" |
| | | align="center" |
| | | prop="hospitalName" |
| | | prop="treatmentHospitalName" |
| | | width="150" |
| | | /> |
| | | <el-table-column |
| | | label="计划转运时间" |
| | | align="center" |
| | | prop="transportTime" |
| | | prop="transportStartTime" |
| | | width="160" |
| | | /> |
| | | <el-table-column |
| | | label="负责协调员" |
| | | align="center" |
| | | prop="coordinator" |
| | | prop="contactPerson" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="转运状态" |
| | | align="center" |
| | | prop="status" |
| | | prop="transitStatus" |
| | | width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="scope.row.status | statusFilter"> |
| | | {{ scope.row.statusText }} |
| | | <el-tag :type="getStatusTagType(scope.row.transitStatus)"> |
| | | {{ getStatusText(scope.row.transitStatus) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <el-table-column |
| | | label="操作" |
| | | align="center" |
| | | fixed="right" |
| | | class-name="small-padding fixed-width" |
| | | width="220" |
| | | > |
| | |
| | | type="text" |
| | | icon="el-icon-video-play" |
| | | @click="handleStartTransport(scope.row)" |
| | | v-if="scope.row.status === 'pending'" |
| | | v-if="scope.row.transitStatus === 1" |
| | | >开始转运</el-button |
| | | > |
| | | <el-button |
| | |
| | | type="text" |
| | | icon="el-icon-check" |
| | | @click="handleCompleteTransport(scope.row)" |
| | | v-if="scope.row.status === 'transporting'" |
| | | v-if="scope.row.transitStatus === 2" |
| | | >完成转运</el-button |
| | | > |
| | | </template> |
| | |
| | | @close="detailOpen = false" |
| | | /> |
| | | </el-dialog> |
| | | |
| | | <!-- 案例选择对话框 --> |
| | | <el-dialog |
| | | title="选择转运案例" |
| | | :visible.sync="selectCaseOpen" |
| | | width="900px" |
| | | append-to-body |
| | | :close-on-click-modal="false" |
| | | > |
| | | <div class="case-select-container"> |
| | | <el-card class="search-card"> |
| | | <el-form :model="caseQueryParams" inline> |
| | | <el-form-item label="案例编号"> |
| | | <el-input |
| | | v-model="caseQueryParams.caseNo" |
| | | placeholder="请输入案例编号" |
| | | clearable |
| | | style="width: 180px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="患者姓名"> |
| | | <el-input |
| | | v-model="caseQueryParams.patName" |
| | | placeholder="请输入患者姓名" |
| | | clearable |
| | | style="width: 150px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" @click="searchCaseList" |
| | | >搜索</el-button |
| | | > |
| | | <el-button icon="el-icon-refresh" @click="resetCaseSearch" |
| | | >重置</el-button |
| | | > |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-card> |
| | | |
| | | <el-card> |
| | | <el-table |
| | | v-loading="caseLoading" |
| | | :data="availableCaseList" |
| | | @row-click="handleCaseSelect" |
| | | highlight-current-row |
| | | style="width: 100%" |
| | | > |
| | | <el-table-column label="案例编号" prop="caseNo" width="150" align="center" /> |
| | | <el-table-column label="患者姓名" prop="name" width="120" align="center" /> |
| | | <el-table-column label="性别" width="80" align="center"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_user_sex" |
| | | :value="scope.row.sex" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="年龄" prop="age" width="80" align="center" /> |
| | | <el-table-column label="血型" width="80" align="center"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_BloodType" |
| | | :value="scope.row.bloodType" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="疾病诊断" prop="diagnosisname" min-width="200" show-overflow-tooltip /> |
| | | <el-table-column label="治疗医院" prop="treatmenthospitalname" width="150" /> |
| | | <el-table-column label="是否已转运" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | :type="hasTransport(scope.row) ? 'danger' : 'success'" |
| | | size="small" |
| | | > |
| | | {{ hasTransport(scope.row) ? '已转运' : '可转运' }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" width="80" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | type="text" |
| | | size="mini" |
| | | @click="selectCase(scope.row)" |
| | | :disabled="hasTransport(scope.row)" |
| | | > |
| | | 选择 |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <!-- 分页 --> |
| | | <pagination |
| | | v-show="caseTotal > 0" |
| | | :total="caseTotal" |
| | | :page.sync="caseQueryParams.pageNum" |
| | | :limit.sync="caseQueryParams.pageSize" |
| | | @pagination="searchCaseList" |
| | | /> |
| | | </el-card> |
| | | </div> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="selectCaseOpen = false">取消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 新增:修改弹框 --> |
| | | <transport-edit |
| | | :edit-open="editOpen" |
| | | :transport-data="currentTransport" |
| | | :is-edit="isEditing" |
| | | :selected-case="selectedCase" |
| | | @update:edit-open="editOpen = $event" |
| | | @close="handleEditClose" |
| | | @save-success="handleSaveSuccess" |
| | |
| | | append-to-body |
| | | > |
| | | <div class="action-confirm"> |
| | | <p>确定要{{ actionText }}转运单 "{{ currentTransport.id }}" 吗?</p> |
| | | <p> |
| | | 确定要{{ actionText }}转运单 "{{ |
| | | currentTransport.reportId || currentTransport.id |
| | | }}" 吗? |
| | | </p> |
| | | </div> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="actionOpen = false">取 消</el-button> |
| | |
| | | |
| | | <script> |
| | | import { |
| | | listTransport, |
| | | getTransport, |
| | | delTransport, |
| | | updateTransportStatus |
| | | } from "@/api/system/business"; |
| | | transportList, |
| | | transportAdd, |
| | | transportEdit, |
| | | transportDelete, |
| | | transportInfo, |
| | | donateList |
| | | } from "@/api/businessApi/index"; |
| | | import TransportDetail from "./transportDetail"; |
| | | import TransportEdit from "./TransportEdit"; |
| | | |
| | | export default { |
| | | name: "TransportList", |
| | | components: { TransportDetail, TransportEdit }, |
| | | dicts: ["sys_user_sex", "sys_BloodType"], |
| | | data() { |
| | | return { |
| | | |
| | | // 遮罩层 |
| | | loading: false, |
| | | // 选中数组 |
| | |
| | | transportList: [], |
| | | // 详情弹框是否显示 |
| | | detailOpen: false, |
| | | // 案例选择弹框是否显示 |
| | | selectCaseOpen: false, |
| | | // 操作确认弹框是否显示 |
| | | actionOpen: false, |
| | | // 新增:修改弹框相关数据 |
| | |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | transportNo: undefined, |
| | | caseNo: undefined, |
| | | donorName: undefined, |
| | | status: undefined |
| | | patName: undefined, |
| | | transitStatus: undefined, |
| | | searchValue: undefined, |
| | | params: {} |
| | | }, |
| | | // 案例选择相关 |
| | | caseLoading: false, |
| | | availableCaseList: [], |
| | | caseTotal: 0, |
| | | selectedCase: null, |
| | | caseQueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | caseNo: undefined, |
| | | patName: undefined, |
| | | // 只查询已同意且需要转运的案例 |
| | | // reportStatus: "3", // 已同意 |
| | | isTransport: "2" // 需要转运 |
| | | } |
| | | }; |
| | | }, |
| | | filters: { |
| | | statusFilter(status) { |
| | | const statusMap = { |
| | | pending: "warning", |
| | | transporting: "primary", |
| | | completed: "success", |
| | | cancelled: "danger" |
| | | }; |
| | | return statusMap[status]; |
| | | } |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | this.checkAutoCreate(); |
| | | }, |
| | | methods: { |
| | | /** 查询转运单列表 */ |
| | | getList() { |
| | | async getList() { |
| | | this.loading = true; |
| | | // 模拟API调用延迟 |
| | | setTimeout(() => { |
| | | // 测试数据 |
| | | this.transportList = [ |
| | | { |
| | | id: "T20241217001", |
| | | caseNo: "DON20241216001", |
| | | donorName: "张三", |
| | | gender: "男", |
| | | age: 38, |
| | | diagnosis: |
| | | "脑外伤导致脑死亡,经抢救无效宣布脑死亡。家属同意器官捐献。", |
| | | hospitalName: "青岛镜湖医院", |
| | | transportTime: "2024-12-17 14:30:00", |
| | | coordinator: "张医生", |
| | | createTime: "2024-12-16 09:30:00", |
| | | status: "pending", |
| | | statusText: "待出发", |
| | | departureLocation: "青岛市立医院急诊科", |
| | | destinationHospital: "青岛镜湖医院", |
| | | emergencyDoctor: "王医生", |
| | | nurse: "李护士", |
| | | driver: "刘师傅", |
| | | icuDoctor: "赵医生", |
| | | contacts: [ |
| | | { role: "协调员电话", phone: "13800138000" }, |
| | | { role: "急诊医生电话", phone: "13800138001" }, |
| | | { role: "护士电话", phone: "13800138002" }, |
| | | { role: "司机电话", phone: "13800138003" }, |
| | | { role: "ICU医生电话", phone: "13800138004" } |
| | | ], |
| | | remarks: "需要准备呼吸机等急救设备" |
| | | }, |
| | | { |
| | | id: "T20241217002", |
| | | caseNo: "DON20241216002", |
| | | donorName: "李四", |
| | | gender: "女", |
| | | age: 45, |
| | | diagnosis: "脑梗死,脑干功能丧失", |
| | | hospitalName: "青岛大学附属医院", |
| | | transportTime: "2024-12-17 16:00:00", |
| | | coordinator: "李医生", |
| | | createTime: "2024-12-16 11:20:00", |
| | | status: "transporting", |
| | | statusText: "转运中", |
| | | departureLocation: "青岛大学附属医院ICU", |
| | | destinationHospital: "青岛器官移植中心", |
| | | currentLocation: "青岛市南区香港中路", |
| | | estimatedTime: "30分钟" |
| | | }, |
| | | { |
| | | id: "T20241216003", |
| | | caseNo: "DON20241215001", |
| | | donorName: "王五", |
| | | gender: "男", |
| | | age: 52, |
| | | diagnosis: "心脏骤停,多器官功能衰竭", |
| | | hospitalName: "青岛市立医院", |
| | | transportTime: "2024-12-16 10:15:00", |
| | | coordinator: "王医生", |
| | | createTime: "2024-12-15 14:45:00", |
| | | status: "completed", |
| | | statusText: "已完成", |
| | | departureLocation: "青岛市立医院心内科", |
| | | destinationHospital: "青岛器官移植中心", |
| | | completedTime: "2024-12-16 12:30:00", |
| | | distance: "15公里", |
| | | duration: "2小时15分钟" |
| | | }, |
| | | { |
| | | id: "T20241216004", |
| | | caseNo: "DON20241214001", |
| | | donorName: "赵六", |
| | | gender: "女", |
| | | age: 29, |
| | | diagnosis: "急性肝衰竭", |
| | | hospitalName: "青岛科大医院", |
| | | transportTime: "2024-12-16 08:30:00", |
| | | coordinator: "赵医生", |
| | | createTime: "2024-12-14 16:20:00", |
| | | status: "cancelled", |
| | | statusText: "已取消", |
| | | cancelReason: "家属临时改变决定" |
| | | } |
| | | ]; |
| | | |
| | | // 更新统计数据 |
| | | this.updateStats(); |
| | | this.total = this.transportList.length; |
| | | try { |
| | | const requestParams = { |
| | | pageNum: this.queryParams.pageNum, |
| | | pageSize: this.queryParams.pageSize, |
| | | caseNo: this.queryParams.caseNo, |
| | | patName: this.queryParams.patName, |
| | | transitStatus: this.queryParams.transitStatus, |
| | | searchValue: this.queryParams.searchValue |
| | | }; |
| | | |
| | | if (this.dateRange && this.dateRange.length === 2) { |
| | | requestParams.transportStartTime = this.dateRange.join(","); |
| | | } |
| | | |
| | | const response = await transportList(requestParams); |
| | | |
| | | if (response.code === 200) { |
| | | this.transportList = response.rows || response.data || []; |
| | | this.total = response.total || 0; |
| | | this.updateStats(); |
| | | } else { |
| | | this.$modal.msgError(response.msg || "获取转运单列表失败"); |
| | | } |
| | | } catch (error) { |
| | | console.error("获取转运单列表失败:", error); |
| | | this.$modal.msgError("网络请求失败,请稍后重试"); |
| | | } finally { |
| | | this.loading = false; |
| | | }, 500); |
| | | } |
| | | }, |
| | | checkAutoCreate() { |
| | | const query = this.$route.query; |
| | | if (query.autoCreate === 'true') { |
| | | // 自动打开案例选择弹框 |
| | | this.selectCaseOpen = true; |
| | | this.resetCaseSearch(); |
| | | |
| | | // 如果有特定的案例编号,可以预先搜索 |
| | | if (query.caseNo) { |
| | | this.caseQueryParams.caseNo = query.caseNo; |
| | | this.searchCaseList(); |
| | | } |
| | | } |
| | | }, |
| | | /** 搜索可用案例 */ |
| | | async searchCaseList() { |
| | | this.caseLoading = true; |
| | | try { |
| | | const response = await donateList(this.caseQueryParams); |
| | | if (response.code === 200) { |
| | | this.availableCaseList = response.rows || response.data || []; |
| | | this.caseTotal = response.total || 0; |
| | | } else { |
| | | this.$modal.msgError(response.msg || "获取案例列表失败"); |
| | | } |
| | | } catch (error) { |
| | | console.error("获取案例列表失败:", error); |
| | | this.$modal.msgError("获取案例列表失败"); |
| | | } finally { |
| | | this.caseLoading = false; |
| | | } |
| | | }, |
| | | |
| | | /** 重置案例搜索 */ |
| | | resetCaseSearch() { |
| | | this.caseQueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | caseNo: undefined, |
| | | patName: undefined, |
| | | // reportStatus: "3", |
| | | isTransport: "2" |
| | | }; |
| | | this.searchCaseList(); |
| | | }, |
| | | |
| | | /** 判断案例是否已有转运单 */ |
| | | hasTransport(caseData) { |
| | | // 检查案例是否有转运信息 |
| | | if (caseData.serviceTransport && |
| | | Array.isArray(caseData.serviceTransport) && |
| | | caseData.serviceTransport.length > 0) { |
| | | return true; |
| | | } |
| | | return false; |
| | | }, |
| | | |
| | | /** 选择案例 */ |
| | | selectCase(caseData) { |
| | | if (this.hasTransport(caseData)) { |
| | | this.$message.warning("该案例已有转运单,请选择其他案例"); |
| | | return; |
| | | } |
| | | |
| | | this.selectedCase = caseData; |
| | | this.selectCaseOpen = false; |
| | | |
| | | // 打开转运单编辑页面,并传入选中的案例 |
| | | this.currentTransport = this.convertCaseToTransport(caseData); |
| | | this.isEditing = false; |
| | | this.editOpen = true; |
| | | }, |
| | | |
| | | /** 将案例信息转换为转运单格式 */ |
| | | convertCaseToTransport(caseData) { |
| | | return { |
| | | caseNo: caseData.caseNo, |
| | | patName: caseData.name, |
| | | sex: caseData.sex, |
| | | age: caseData.age, |
| | | diagnosisname: caseData.diagnosisname, |
| | | treatmentHospitalName: caseData.treatmenthospitalname, |
| | | treatmentDeptName: caseData.treatmentdeptname, |
| | | // 其他字段可以根据需要从案例中获取 |
| | | transportStartPlace: caseData.treatmenthospitalname || '', |
| | | contactPerson: caseData.coordinatorName || '', |
| | | transitStatus: 1, // 默认待转运 |
| | | // 清空其他字段 |
| | | id: undefined, |
| | | reportId: undefined, |
| | | transportStartTime: undefined, |
| | | doctor: undefined, |
| | | doctorPhone: undefined, |
| | | nurse: undefined, |
| | | nursePhone: undefined, |
| | | driver: undefined, |
| | | driverPhone: undefined, |
| | | icuDoctor: undefined, |
| | | icuDoctorPhone: undefined, |
| | | annexfilesList: [], |
| | | remark: undefined |
| | | }; |
| | | }, |
| | | |
| | | /** 获取状态标签类型 */ |
| | | getStatusTagType(transitStatus) { |
| | | const statusMap = { |
| | | 1: "warning", // 待转运 |
| | | 2: "primary", // 转运中 |
| | | 3: "success", // 转运完成 |
| | | 4: "danger", // 转运取消 |
| | | 5: "info" // 暂存 |
| | | }; |
| | | return statusMap[transitStatus] || "info"; |
| | | }, |
| | | |
| | | /** 获取状态文本 */ |
| | | getStatusText(transitStatus) { |
| | | const statusMap = { |
| | | 1: "待转运", |
| | | 2: "转运中", |
| | | 3: "转运完成", |
| | | 4: "转运取消", |
| | | 5: "暂存" |
| | | }; |
| | | return statusMap[transitStatus] || "未知状态"; |
| | | }, |
| | | |
| | | // 更新统计数据 |
| | | updateStats() { |
| | | this.stats.totalTransports = this.transportList.length; |
| | | this.stats.pendingTransports = this.transportList.filter( |
| | | item => item.status === "pending" |
| | | item => item.transitStatus === 1 |
| | | ).length; |
| | | this.stats.completedTransports = this.transportList.filter( |
| | | item => item.status === "completed" |
| | | item => item.transitStatus === 3 |
| | | ).length; |
| | | }, |
| | | |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.ids = selection.map(item => item.reportId || item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | caseNo: undefined, |
| | | patName: undefined, |
| | | transitStatus: undefined, |
| | | searchValue: undefined |
| | | }; |
| | | this.getList(); |
| | | }, |
| | | |
| | | /** 详情按钮操作 */ |
| | | handleDetail(row) { |
| | | this.currentTransport = row; |
| | | this.detailTitle = `转运单详情 - ${row.reportId || row.id}`; |
| | | this.detailOpen = true; |
| | | }, |
| | | |
| | | /** 修改按钮操作 */ |
| | | handleUpdate(row) { |
| | | this.currentTransport = row || {}; |
| | | this.isEditing = true; |
| | | this.selectedCase = null; // 编辑时不传入案例信息 |
| | | this.editOpen = true; |
| | | }, |
| | | |
| | | /** 新建转运单 */ |
| | | handleAdd() { |
| | | // 打开案例选择弹框 |
| | | this.selectCaseOpen = true; |
| | | this.selectedCase = null; |
| | | this.currentTransport = {}; |
| | | this.isEditing = false; |
| | | this.editOpen = true; |
| | | this.resetCaseSearch(); // 重置并搜索案例 |
| | | }, |
| | | |
| | | /** 修改弹框关闭处理 */ |
| | | handleEditClose() { |
| | | this.editOpen = false; |
| | | this.currentTransport = {}; |
| | | this.selectedCase = null; |
| | | }, |
| | | |
| | | /** 保存成功处理 */ |
| | | handleSaveSuccess() { |
| | | this.getList(); // 重新加载列表 |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | |
| | | /** 详情按钮操作 */ |
| | | handleDetail(row) { |
| | | this.currentTransport = row; |
| | | this.detailTitle = `转运单详情 - ${row.id}`; |
| | | this.detailOpen = true; |
| | | }, |
| | | |
| | | /** 开始转运操作 */ |
| | | handleStartTransport(row) { |
| | | async handleStartTransport(row) { |
| | | this.currentTransport = row; |
| | | this.actionTitle = "开始转运"; |
| | | this.actionText = "开始"; |
| | |
| | | }, |
| | | |
| | | /** 完成转运操作 */ |
| | | handleCompleteTransport(row) { |
| | | async handleCompleteTransport(row) { |
| | | this.currentTransport = row; |
| | | this.actionTitle = "完成转运"; |
| | | this.actionText = "完成"; |
| | |
| | | }, |
| | | |
| | | /** 确认操作 */ |
| | | confirmAction() { |
| | | const index = this.transportList.findIndex( |
| | | item => item.id === this.currentTransport.id |
| | | ); |
| | | if (index !== -1) { |
| | | async confirmAction() { |
| | | try { |
| | | let requestData = { |
| | | id: this.currentTransport.id || this.currentTransport.reportId |
| | | }; |
| | | |
| | | if (this.actionText === "开始") { |
| | | this.transportList[index].status = "transporting"; |
| | | this.transportList[index].statusText = "转运中"; |
| | | requestData.transitStatus = 2; // 设置为转运中 |
| | | } else if (this.actionText === "完成") { |
| | | this.transportList[index].status = "completed"; |
| | | this.transportList[index].statusText = "已完成"; |
| | | this.transportList[index].completedTime = new Date().toLocaleString(); |
| | | requestData.transitStatus = 3; // 设置为转运完成 |
| | | } |
| | | |
| | | // 更新统计数据 |
| | | this.updateStats(); |
| | | const response = await transportEdit(requestData); |
| | | |
| | | this.$modal.msgSuccess(`${this.actionText}成功`); |
| | | if (response.code === 200) { |
| | | this.$modal.msgSuccess(`${this.actionText}转运成功`); |
| | | this.getList(); |
| | | } else { |
| | | this.$modal.msgError(response.msg || `${this.actionText}转运失败`); |
| | | } |
| | | } catch (error) { |
| | | console.error(`${this.actionText}转运失败:`, error); |
| | | this.$modal.msgError("操作失败,请稍后重试"); |
| | | } |
| | | this.actionOpen = false; |
| | | }, |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const ids = row.id || this.ids; |
| | | this.$modal |
| | | .confirm('是否确认删除转运单编号为"' + ids + '"的数据项?') |
| | | .then(() => { |
| | | // 模拟删除操作 |
| | | this.transportList = this.transportList.filter( |
| | | item => !ids.includes(item.id) |
| | | ); |
| | | this.total = this.transportList.length; |
| | | this.updateStats(); |
| | | async handleDelete(row) { |
| | | const ids = row.reportId || row.id || this.ids; |
| | | |
| | | try { |
| | | await this.$modal.confirm( |
| | | '是否确认删除转运单编号为"' + ids + '"的数据项?' |
| | | ); |
| | | |
| | | const response = await transportDelete(ids); |
| | | |
| | | if (response.code === 200) { |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }) |
| | | .catch(() => {}); |
| | | this.getList(); |
| | | } else { |
| | | this.$modal.msgError(response.msg || "删除失败"); |
| | | } |
| | | } catch (error) { |
| | | if (error !== "cancel") { |
| | | console.error("删除失败:", error); |
| | | this.$modal.msgError("删除失败,请稍后重试"); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | /** 导出按钮操作 */ |
| | |
| | | }, |
| | | `transport_${new Date().getTime()}.xlsx` |
| | | ); |
| | | }, |
| | | |
| | | // 点击行选择案例 |
| | | handleCaseSelect(row) { |
| | | this.selectCase(row); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .case-select-container { |
| | | max-height: 600px; |
| | | overflow: auto; |
| | | } |
| | | |
| | | .search-card { |
| | | margin-bottom: 20px; |
| | | } |
| | | .filter-card { |
| | | margin-bottom: 20px; |
| | | } |
| | |
| | | } |
| | | |
| | | .donor-info { |
| | | text-align: left; |
| | | text-align: center; |
| | | display: flex; |
| | | justify-content: center |
| | | } |
| | | |
| | | .donor-name { |
| | |
| | | } |
| | | |
| | | .donor-details { |
| | | font-size: 12px; |
| | | color: #909399; |
| | | margin-left: 5px; |
| | | font-size: 16px; |
| | | color: #093ca4; |
| | | display: flex; |
| | | } |
| | | |
| | | .mb8 { |