From d27451a2c24fcc785d02619d5840378df7cfc939 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 22 四月 2026 18:12:05 +0800
Subject: [PATCH] 限制取消

---
 src/views/business/transfer/index.vue |  339 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 303 insertions(+), 36 deletions(-)

diff --git a/src/views/business/transfer/index.vue b/src/views/business/transfer/index.vue
index 9c33c9e..2a3dffe 100644
--- a/src/views/business/transfer/index.vue
+++ b/src/views/business/transfer/index.vue
@@ -148,12 +148,7 @@
     >
       <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="reportId"
-        width="140"
-      />
+
       <el-table-column
         label="妗堜緥缂栧彿"
         align="center"
@@ -281,11 +276,147 @@
         @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="鎮h�呭鍚�">
+              <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="鎮h�呭鍚�"
+              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"
@@ -300,7 +431,7 @@
       <div class="action-confirm">
         <p>
           纭畾瑕亄{ actionText }}杞繍鍗� "{{
-            currentTransport.reportId || currentTransport.id
+             currentTransport.id
           }}" 鍚楋紵
         </p>
       </div>
@@ -317,8 +448,9 @@
   transportList,
   transportAdd,
   transportEdit,
-  transportDelete,
-  transportInfo
+  transportDel,
+  transportInfo,
+  donateList
 } from "@/api/businessApi/index";
 import TransportDetail from "./transportDetail";
 import TransportEdit from "./TransportEdit";
@@ -341,10 +473,12 @@
       showSearch: true,
       // 鎬绘潯鏁�
       total: 0,
-      // 杞繍鍗曡〃鏍兼暟鎹� - 鐩存帴浣跨敤鍚庣杩斿洖鐨勬暟鎹粨鏋�
+      // 杞繍鍗曡〃鏍兼暟鎹�
       transportList: [],
       // 璇︽儏寮规鏄惁鏄剧ず
       detailOpen: false,
+      // 妗堜緥閫夋嫨寮规鏄惁鏄剧ず
+      selectCaseOpen: false,
       // 鎿嶄綔纭寮规鏄惁鏄剧ず
       actionOpen: false,
       // 鏂板锛氫慨鏀瑰脊妗嗙浉鍏虫暟鎹�
@@ -366,28 +500,42 @@
         pendingTransports: 0,
         completedTransports: 0
       },
-      // 鏌ヨ鍙傛暟锛堝畬鍏ㄩ�傞厤鍚庣鎺ュ彛锛�
+      // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        caseNo: undefined, // 妗堜緥缂栧彿
-        patName: undefined, // 鎮h�呭鍚�
-        transitStatus: undefined, // 杞繍鐘舵�侊細1寰呰浆杩� 2杞繍涓� 3杞繍瀹屾垚 4杞繍鍙栨秷 5鏆傚瓨
-        searchValue: undefined, // 鎼滅储鍊�
-        params: {} // 鍏朵粬鍙傛暟瀵硅薄
+        caseNo: 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" // 闇�瑕佽浆杩�
       }
     };
   },
   created() {
     this.getList();
+    this.checkAutoCreate();
   },
   methods: {
-    /** 鏌ヨ杞繍鍗曞垪琛� - 鐩存帴浣跨敤鍚庣鏁版嵁缁撴瀯 */
+    /** 鏌ヨ杞繍鍗曞垪琛� */
     async getList() {
       this.loading = true;
 
       try {
-        // 鏋勫缓绗﹀悎鍚庣鎺ュ彛鐨勮姹傚弬鏁� [1,2](@ref)
         const requestParams = {
           pageNum: this.queryParams.pageNum,
           pageSize: this.queryParams.pageSize,
@@ -397,20 +545,15 @@
           searchValue: this.queryParams.searchValue
         };
 
-        // 澶勭悊鏃堕棿鑼冨洿鍙傛暟 [5](@ref)
         if (this.dateRange && this.dateRange.length === 2) {
           requestParams.transportStartTime = this.dateRange.join(",");
         }
 
-        // 璋冪敤姝e紡鎺ュ彛 [3](@ref)
         const response = await transportList(requestParams);
 
         if (response.code === 200) {
-          // 鐩存帴浣跨敤鍚庣杩斿洖鐨勬暟鎹粨鏋勶紝涓嶈繘琛岃浆鎹� [8](@ref)
           this.transportList = response.rows || response.data || [];
           this.total = response.total || 0;
-
-          // 鏇存柊缁熻鏁版嵁
           this.updateStats();
         } else {
           this.$modal.msgError(response.msg || "鑾峰彇杞繍鍗曞垪琛ㄥけ璐�");
@@ -421,6 +564,115 @@
       } finally {
         this.loading = false;
       }
+    },
+    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);
+      console.log(this.currentTransport,'currentTransport');
+
+      this.isEditing = false;
+      this.editOpen = true;
+    },
+
+    /** 灏嗘渚嬩俊鎭浆鎹负杞繍鍗曟牸寮� */
+    convertCaseToTransport(caseData) {
+      console.log(caseData,'2');
+
+      return {
+        caseNo: caseData.caseNo,
+        patName: caseData.name,
+        sex: caseData.sex,
+        age: caseData.age,
+        diagnosisname: caseData.diagnosisname,
+        reportId: caseData.id,
+        treatmentHospitalName: caseData.treatmenthospitalname,
+        treatmentDeptName: caseData.treatmentdeptname,
+        // 鍏朵粬瀛楁鍙互鏍规嵁闇�瑕佷粠妗堜緥涓幏鍙�
+        transportStartPlace: caseData.treatmenthospitalname || "",
+        contactPerson: caseData.coordinatorName || "",
+        transitStatus: 1, // 榛樿寰呰浆杩�
+        // 娓呯┖鍏朵粬瀛楁
+        id: undefined,
+        transportStartTime: undefined,
+        doctor: undefined,
+        doctorPhone: undefined,
+        nurse: undefined,
+        nursePhone: undefined,
+        driver: undefined,
+        driverPhone: undefined,
+        icuDoctor: undefined,
+        icuDoctorPhone: undefined,
+        annexfilesList: [],
+        remark: undefined
+      };
     },
 
     /** 鑾峰彇鐘舵�佹爣绛剧被鍨� */
@@ -460,7 +712,7 @@
 
     // 澶氶�夋閫変腑鏁版嵁
     handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.reportId || item.id);
+      this.ids = selection.map(item =>  item.id);
       this.single = selection.length !== 1;
       this.multiple = !selection.length;
     },
@@ -488,7 +740,7 @@
     /** 璇︽儏鎸夐挳鎿嶄綔 */
     handleDetail(row) {
       this.currentTransport = row;
-      this.detailTitle = `杞繍鍗曡鎯� - ${row.reportId || row.id}`;
+      this.detailTitle = `杞繍鍗曡鎯� - ${ row.id}`;
       this.detailOpen = true;
     },
 
@@ -496,20 +748,24 @@
     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;
     },
 
     /** 淇濆瓨鎴愬姛澶勭悊 */
@@ -533,11 +789,11 @@
       this.actionOpen = true;
     },
 
-    /** 纭鎿嶄綔 - 浣跨敤鍚庣鍘熷鏁版嵁缁撴瀯 [4](@ref) */
+    /** 纭鎿嶄綔 */
     async confirmAction() {
       try {
         let requestData = {
-          id: this.currentTransport.id || this.currentTransport.reportId
+          id: this.currentTransport.id
         };
 
         if (this.actionText === "寮�濮�") {
@@ -546,12 +802,11 @@
           requestData.transitStatus = 3; // 璁剧疆涓鸿浆杩愬畬鎴�
         }
 
-        // 鐩存帴浼犻�掑悗绔渶瑕佺殑鍙傛暟 [8](@ref)
         const response = await transportEdit(requestData);
 
         if (response.code === 200) {
           this.$modal.msgSuccess(`${this.actionText}杞繍鎴愬姛`);
-          this.getList(); // 鍒锋柊鍒楄〃
+          this.getList();
         } else {
           this.$modal.msgError(response.msg || `${this.actionText}杞繍澶辫触`);
         }
@@ -562,7 +817,7 @@
       this.actionOpen = false;
     },
 
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 - 浣跨敤鍚庣鍘熷ID [1](@ref) */
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
     async handleDelete(row) {
       const ids = row.reportId || row.id || this.ids;
 
@@ -571,11 +826,11 @@
           '鏄惁纭鍒犻櫎杞繍鍗曠紪鍙蜂负"' + ids + '"鐨勬暟鎹」锛�'
         );
 
-        const response = await transportDelete(ids);
+        const response = await transportDel(ids);
 
         if (response.code === 200) {
           this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-          this.getList(); // 鍒锋柊鍒楄〃
+          this.getList();
         } else {
           this.$modal.msgError(response.msg || "鍒犻櫎澶辫触");
         }
@@ -589,7 +844,6 @@
 
     /** 瀵煎嚭鎸夐挳鎿嶄綔 */
     handleExport() {
-      // 鐩存帴浣跨敤鍚庣鍙傛暟缁撴瀯杩涜瀵煎嚭 [5](@ref)
       this.download(
         "system/transport/export",
         {
@@ -597,12 +851,25 @@
         },
         `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;
 }
@@ -663,7 +930,7 @@
 .donor-info {
   text-align: center;
   display: flex;
-  justify-content: center
+  justify-content: center;
 }
 
 .donor-name {

--
Gitblit v1.9.3