From 3873d3c350c8c1edd7bfdc8afe08c9e78f56d968 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期四, 22 十月 2026 23:24:20 +0800
Subject: [PATCH] 调整费用申请模式

---
 src/views/project/register/index.vue |  351 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 351 insertions(+), 0 deletions(-)

diff --git a/src/views/project/register/index.vue b/src/views/project/register/index.vue
new file mode 100644
index 0000000..cfac46a
--- /dev/null
+++ b/src/views/project/register/index.vue
@@ -0,0 +1,351 @@
+<template>
+  <div class="app-container">
+    <!-- 鏌ヨ鏉′欢锛氭寜閽揣璺熸潯浠朵箣鍚庯紙涓庢渚嬭瘎浼伴〉椋庢牸涓�鑷达級 -->
+    <el-form
+      class="opo-query-form"
+      :model="queryParams"
+      ref="queryForm"
+      :inline="true"
+      v-show="showSearch"
+      label-width="82px"
+    >
+      <el-row>
+        <el-col :span="6">
+          <el-form-item label="鎹愮尞鑰�" prop="name">
+            <el-input
+              v-model="queryParams.name"
+              placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+            <el-input
+              v-model="queryParams.idcardno"
+              placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="鍣ㄥ畼绫诲埆" prop="organno">
+            <el-select
+              v-model="queryParams.organno"
+              placeholder="璇烽�夋嫨鍣ㄥ畼绫诲埆"
+              clearable
+              size="small"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="dict in dict.type.sys_Organ"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="鑾峰彇鐘舵��" prop="organstate">
+            <el-select
+              v-model="queryParams.organstate"
+              placeholder="璇烽�夋嫨鑾峰彇鐘舵��"
+              clearable
+              size="small"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="dict in dict.type.sys_organstate"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="6">
+          <el-form-item label="鍣ㄥ畼缂栧彿" prop="organnumber">
+            <el-input
+              v-model="queryParams.organnumber"
+              placeholder="璇疯緭鍏ュ櫒瀹樼紪鍙�"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="绉绘鏈烘瀯" prop="transplanthospitalname">
+            <el-input
+              v-model="queryParams.transplanthospitalname"
+              placeholder="璇疯緭鍏ョЩ妞嶆満鏋勫悕绉�"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="绉绘浜�" prop="acceptname">
+            <el-input
+              v-model="queryParams.acceptname"
+              placeholder="璇疯緭鍏ョЩ妞嶄汉濮撳悕"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label-width="10px">
+            <el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery">鎼滅储</el-button>
+            <el-button icon="el-icon-refresh" size="small" @click="resetQuery">閲嶇疆</el-button>
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-download"
+              size="small"
+              :loading="exportLoading"
+              @click="handleExport"
+              v-hasPermi="['project:register:export']"
+            >瀵煎嚭</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row class="mb8">
+        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      </el-row>
+    </el-form>
+
+    <el-table v-loading="loading" :data="registerList" :border="true">
+      <el-table-column label="鎹愮尞鑰呯紪鍙�" align="center" prop="donorno" width="200" show-overflow-tooltip />
+      <el-table-column label="濮撳悕" align="center" prop="name" width="90" show-overflow-tooltip />
+      <el-table-column label="鎬у埆" align="center" prop="sex" width="70">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.sex" />
+        </template>
+      </el-table-column>
+      <el-table-column label="骞撮緞" align="center" width="80">
+        <template slot-scope="scope">
+          <span v-if="scope.row.age">{{ scope.row.age }}{{ scope.row.ageunit }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鍣ㄥ畼绫诲埆" align="center" prop="organname" width="90" show-overflow-tooltip />
+      <el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber" width="130" show-overflow-tooltip />
+      <el-table-column label="鑾峰彇鐘舵��" align="center" prop="organstate" width="100">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_organstate" :value="scope.row.organstate" />
+        </template>
+      </el-table-column>
+      <el-table-column label="鑾峰彇鏃堕棿" align="center" prop="organgettime" width="150">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.organgettime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鑾峰彇鏈烘瀯" align="center" prop="gainhospitalname" min-width="180" show-overflow-tooltip />
+      <el-table-column label="绉绘鏈烘瀯" align="center" prop="transplanthospitalname" min-width="180" show-overflow-tooltip />
+      <el-table-column label="绉绘鍖荤敓" align="center" prop="transplantdoct" width="100" show-overflow-tooltip />
+      <el-table-column label="绉绘鏃堕棿" align="center" prop="transplanttime" width="150">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.transplanttime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" width="90" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-view"
+            @click="handleDetail(scope.row)"
+            v-hasPermi="['project:register:query']"
+          >璇︽儏</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 璇︽儏锛氬彧璇诲睍绀哄叏閮ㄥ瓧娈� -->
+    <el-dialog title="鍣ㄥ畼鍘诲璇︽儏" :visible.sync="open" width="900px" append-to-body>
+      <div v-loading="detailLoading" class="register-detail">
+        <el-divider content-position="left">鎹愮尞鑰呬俊鎭�</el-divider>
+        <el-descriptions :column="3" size="small" border>
+          <el-descriptions-item label="濮撳悕">{{ detail.name }}</el-descriptions-item>
+          <el-descriptions-item label="鎬у埆">{{ dictLabel("sys_user_sex", detail.sex) }}</el-descriptions-item>
+          <el-descriptions-item label="骞撮緞">
+            <span v-if="detail.age">{{ detail.age }}{{ detail.ageunit }}</span>
+          </el-descriptions-item>
+          <el-descriptions-item label="璇佷欢鍙风爜">{{ detail.idcardno }}</el-descriptions-item>
+          <el-descriptions-item label="鍑虹敓鏃ユ湡">{{ parseTime(detail.birthday, "{y}-{m}-{d}") }}</el-descriptions-item>
+          <el-descriptions-item label="鑱旂郴鐢佃瘽">{{ detail.phone }}</el-descriptions-item>
+          <el-descriptions-item label="鐜颁綇鍦板潃" :span="3">{{ detail.residenceaddress }}</el-descriptions-item>
+          <el-descriptions-item label="鎹愮尞鑰呯紪鍙�">{{ detail.donorno }}</el-descriptions-item>
+        </el-descriptions>
+
+        <el-divider content-position="left">鍣ㄥ畼淇℃伅</el-divider>
+        <el-descriptions :column="3" size="small" border>
+          <el-descriptions-item label="鍣ㄥ畼绫诲埆">{{ detail.organname }}</el-descriptions-item>
+          <el-descriptions-item label="鍣ㄥ畼缂栧彿">{{ detail.organnumber }}</el-descriptions-item>
+          <el-descriptions-item label="鑾峰彇鐘舵��">
+            {{ dictLabel("sys_organstate", detail.organstate) }}
+          </el-descriptions-item>
+          <el-descriptions-item label="鑾峰彇鏃堕棿">{{ parseTime(detail.organgettime) }}</el-descriptions-item>
+          <el-descriptions-item label="鑾峰彇鍖荤敓" :span="2">{{ detail.organgetdoct }}</el-descriptions-item>
+          <el-descriptions-item label="鑾峰彇鏈烘瀯" :span="2">{{ detail.gainhospitalname }}</el-descriptions-item>
+          <el-descriptions-item label="绉绘鏈烘瀯" :span="2">{{ detail.transplanthospitalname }}</el-descriptions-item>
+          <el-descriptions-item label="绉绘鍖荤敓">{{ detail.transplantdoct }}</el-descriptions-item>
+          <el-descriptions-item label="绉绘鏃堕棿" :span="2">{{ parseTime(detail.transplanttime) }}</el-descriptions-item>
+        </el-descriptions>
+
+        <el-divider content-position="left">鐢宠涓庡鏍�</el-divider>
+        <el-descriptions :column="3" size="small" border>
+          <el-descriptions-item label="鐢宠浜�">{{ detail.applicantusername }}</el-descriptions-item>
+          <el-descriptions-item label="鐢宠鏃堕棿" :span="2">{{ parseTime(detail.applicanttime) }}</el-descriptions-item>
+          <el-descriptions-item label="瀹℃牳浜�">{{ detail.checkusername }}</el-descriptions-item>
+          <el-descriptions-item label="瀹℃牳鏃堕棿" :span="2">{{ parseTime(detail.checktime) }}</el-descriptions-item>
+          <el-descriptions-item label="瀹℃牳鎰忚" :span="3">{{ detail.checksuggestion }}</el-descriptions-item>
+        </el-descriptions>
+
+        <el-divider content-position="left">绉绘浜轰俊鎭�</el-divider>
+        <el-descriptions :column="3" size="small" border>
+          <el-descriptions-item label="濮撳悕">{{ detail.acceptname }}</el-descriptions-item>
+          <el-descriptions-item label="鎬у埆">{{ dictLabel("sys_user_sex", detail.acceptsex) }}</el-descriptions-item>
+          <el-descriptions-item label="骞撮緞">
+            <span v-if="detail.acceptage">{{ detail.acceptage }}{{ detail.acceptageunit }}</span>
+          </el-descriptions-item>
+          <el-descriptions-item label="璇佷欢鍙风爜">{{ detail.acceptidcard }}</el-descriptions-item>
+          <el-descriptions-item label="鑱旂郴鐢佃瘽" :span="2">{{ detail.acceptphone }}</el-descriptions-item>
+          <el-descriptions-item label="鐜颁綇鍦板潃" :span="3">{{ detail.acceptresidenceaddress }}</el-descriptions-item>
+        </el-descriptions>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="open = false">鍏� 闂�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listRegister, getRegister, exportRegister } from "@/api/project/register";
+
+export default {
+  name: "Register",
+  dicts: ["sys_Organ", "sys_organstate", "sys_user_sex", "sys_AgeUnit"],
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 璇︽儏鍔犺浇
+      detailLoading: false,
+      // 瀵煎嚭閬僵灞�
+      exportLoading: false,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鍣ㄥ畼鍘诲鍒楄〃
+      registerList: [],
+      // 璇︽儏寮圭獥
+      open: false,
+      detail: {},
+      // 鏌ヨ鍙傛暟锛堝潎闇�涓庡悗绔� queryList / Mapper 鏀寔鐨勬潯浠朵竴鑷达級
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        idcardno: null,
+        organno: null,
+        organstate: null,
+        organnumber: null,
+        transplanthospitalname: null,
+        acceptname: null
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ鍣ㄥ畼鍘诲鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listRegister(this.queryParams).then(response => {
+        this.registerList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 璇︽儏鎸夐挳鎿嶄綔 */
+    handleDetail(row) {
+      this.detail = {};
+      this.open = true;
+      this.detailLoading = true;
+      getRegister(row.id).then(response => {
+        this.detail = response.data || {};
+        this.detailLoading = false;
+      }).catch(() => {
+        this.detailLoading = false;
+      });
+    },
+    /** 瀛楀吀缈昏瘧锛堟ā鏉块噷鐢紝閬垮厤澶氫釜 dict-tag 宓屽锛� */
+    dictLabel(type, value) {
+      const list = this.dict.type[type] || [];
+      const item = list.find(d => String(d.value) === String(value));
+      return item ? item.label : value;
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.$modal
+        .confirm("鏄惁纭瀵煎嚭鍣ㄥ畼鍘诲鏁版嵁锛�")
+        .then(() => {
+          this.exportLoading = true;
+          return exportRegister(this.queryParams);
+        })
+        .then(response => {
+          this.$download.name(response.msg);
+          this.exportLoading = false;
+        })
+        .catch(() => {
+          this.exportLoading = false;
+        });
+    }
+  }
+};
+</script>
+
+<style scoped>
+.register-detail >>> .el-divider--horizontal {
+  margin: 12px 0 14px;
+}
+.register-detail >>> .el-divider__text {
+  color: var(--opo-primary, #0e768f);
+  font-size: var(--opo-font-size-sm, 14px);
+}
+.register-detail >>> .el-descriptions-item__label {
+  color: var(--opo-text-secondary, #6b7280);
+  width: 90px;
+}
+</style>

--
Gitblit v1.9.3