From 5319d5b95497b5b546947ac340c14c71e5b54ca6 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期三, 10 十二月 2025 09:57:58 +0800
Subject: [PATCH] 测试完成
---
src/views/patient/patient/profile/index.vue | 987 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 986 insertions(+), 1 deletions(-)
diff --git a/src/views/patient/patient/profile/index.vue b/src/views/patient/patient/profile/index.vue
index df9c840..73e600f 100644
--- a/src/views/patient/patient/profile/index.vue
+++ b/src/views/patient/patient/profile/index.vue
@@ -212,6 +212,316 @@
</el-form-item>
</el-col>
</el-row>
+ <!-- 绛涙煡鎽樿妯″潡 -->
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <div class="screening-summary">
+ <div class="summary-header">
+ <i class="el-icon-search"></i>
+ <span>绛涙煡鎽樿</span>
+ <div
+ style="
+ margin-left: auto;
+ display: flex;
+ align-items: center;
+ "
+ >
+ <el-button
+ type="primary"
+ size="mini"
+ @click="addScreening"
+ >
+ <i class="el-icon-plus"></i> 鏂板
+ </el-button>
+ <el-button
+ type="text"
+ size="mini"
+ @click="refreshScreeningData"
+ style="margin-left: 10px"
+ >
+ <i class="el-icon-refresh"></i> 鍒锋柊
+ </el-button>
+ </div>
+ </div>
+ <div class="summary-content">
+ <el-table
+ :data="screeningSummaryData"
+ border
+ size="mini"
+ height="200"
+ v-loading="screeningLoading"
+ >
+ <el-table-column
+ prop="screeningType"
+ label="绛涙煡绫诲瀷"
+ width="100"
+ >
+ <template slot-scope="scope">
+ <el-tag
+ :type="getScreeningTagType(scope.row.screeningType)"
+ >
+ {{ scope.row.screeningType }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="screeningDate"
+ label="绛涙煡鏃ユ湡"
+ width="100"
+ >
+ <template slot-scope="scope">
+ {{ formatTime(scope.row.screeningDate) }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="result" label="缁撴灉" width="80">
+ <template slot-scope="scope">
+ <el-tag
+ :type="
+ scope.row.result === '姝e父'
+ ? 'success'
+ : scope.row.result === '寮傚父'
+ ? 'danger'
+ : 'warning'
+ "
+ size="small"
+ >
+ {{ scope.row.result }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="details"
+ label="璇︾粏缁撴灉"
+ min-width="120"
+ >
+ <template slot-scope="scope">
+ <el-tooltip
+ :content="scope.row.details"
+ placement="top"
+ v-if="
+ scope.row.details && scope.row.details.length > 10
+ "
+ >
+ <span
+ >{{ scope.row.details.substring(0, 10) }}...</span
+ >
+ </el-tooltip>
+ <span v-else>{{ scope.row.details }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="150" fixed="right">
+ <template slot-scope="scope">
+ <el-button
+ type="primary"
+ size="mini"
+ @click="editScreening(scope.$index, scope.row)"
+ >
+ 缂栬緫
+ </el-button>
+ <el-button
+ type="danger"
+ size="mini"
+ @click="deleteScreening(scope.$index, scope.row)"
+ >
+ 鍒犻櫎
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <div class="summary-stats">
+ <el-row :gutter="10">
+ <el-col :span="8">
+ <div class="stat-item">
+ <div class="stat-value" style="color: #67c23a">
+ {{ screeningStats.normal }}
+ </div>
+ <div class="stat-label">姝e父</div>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="stat-item">
+ <div class="stat-value" style="color: #e6a23c">
+ {{ screeningStats.abnormal }}
+ </div>
+ <div class="stat-label">寮傚父</div>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="stat-item">
+ <div class="stat-value" style="color: #f56c6c">
+ {{ screeningStats.critical }}
+ </div>
+ <div class="stat-label">鍗辨��</div>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </div>
+ </div>
+ </el-col>
+
+ <!-- 鎱㈢梾鎽樿妯″潡 -->
+ <el-col :span="12">
+ <div class="chronic-disease-summary">
+ <div class="summary-header">
+ <i class="el-icon-document"></i>
+ <span>鎱㈢梾鎽樿</span>
+ <div
+ style="
+ margin-left: auto;
+ display: flex;
+ align-items: center;
+ "
+ >
+ <el-button
+ type="primary"
+ size="mini"
+ @click="addChronicDisease"
+ >
+ <i class="el-icon-plus"></i> 鏂板
+ </el-button>
+ <el-button
+ type="text"
+ size="mini"
+ @click="refreshChronicData"
+ style="margin-left: 10px"
+ >
+ <i class="el-icon-refresh"></i> 鍒锋柊
+ </el-button>
+ </div>
+ </div>
+ <div class="summary-content">
+ <el-table
+ :data="chronicDiseaseData"
+ border
+ size="mini"
+ height="200"
+ v-loading="chronicLoading"
+ >
+ <el-table-column
+ prop="diseaseName"
+ label="鐤剧梾鍚嶇О"
+ width="120"
+ >
+ <template slot-scope="scope">
+ <el-tag
+ :type="getDiseaseTagType(scope.row.diseaseName)"
+ >
+ {{ scope.row.diseaseName }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="diagnoseDate"
+ label="纭瘖鏃ユ湡"
+ width="100"
+ >
+ <template slot-scope="scope">
+ {{ formatTime(scope.row.diagnoseDate) }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="status" label="鐘舵��" width="80">
+ <template slot-scope="scope">
+ <el-tag
+ :type="
+ scope.row.status === '绋冲畾'
+ ? 'success'
+ : scope.row.status === '娲诲姩鏈�'
+ ? 'warning'
+ : 'danger'
+ "
+ size="small"
+ >
+ {{ scope.row.status }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="currentTreatment"
+ label="褰撳墠娌荤枟"
+ min-width="120"
+ >
+ <template slot-scope="scope">
+ <el-tooltip
+ :content="scope.row.currentTreatment"
+ placement="top"
+ v-if="
+ scope.row.currentTreatment &&
+ scope.row.currentTreatment.length > 10
+ "
+ >
+ <span
+ >{{
+ scope.row.currentTreatment.substring(0, 10)
+ }}...</span
+ >
+ </el-tooltip>
+ <span v-else>{{ scope.row.currentTreatment }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="150" fixed="right">
+ <template slot-scope="scope">
+ <el-button
+ type="primary"
+ size="mini"
+ @click="editChronicDisease(scope.$index, scope.row)"
+ >
+ 缂栬緫
+ </el-button>
+ <el-button
+ type="danger"
+ size="mini"
+ @click="
+ deleteChronicDisease(scope.$index, scope.row)
+ "
+ >
+ 鍒犻櫎
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <div class="summary-stats">
+ <el-row :gutter="10">
+ <el-col :span="6">
+ <div class="stat-item">
+ <div class="stat-value" style="color: #67c23a">
+ {{ chronicStats.stable }}
+ </div>
+ <div class="stat-label">绋冲畾</div>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="stat-item">
+ <div class="stat-value" style="color: #e6a23c">
+ {{ chronicStats.active }}
+ </div>
+ <div class="stat-label">娲诲姩鏈�</div>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="stat-item">
+ <div class="stat-value" style="color: #f56c6c">
+ {{ chronicStats.severe }}
+ </div>
+ <div class="stat-label">涓ラ噸</div>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="stat-item">
+ <div class="stat-value" style="color: #909399">
+ {{ chronicStats.total }}
+ </div>
+ <div class="stat-label">鎬绘暟</div>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </div>
+ </div>
+ </el-col>
+ </el-row>
</el-form>
</div>
</div>
@@ -923,7 +1233,147 @@
</div>
</div> -->
</div>
+ <!-- 绛涙煡鎽樿缂栬緫瀵硅瘽妗� -->
+ <el-dialog
+ :title="screeningEditing ? '缂栬緫绛涙煡璁板綍' : '鏂板绛涙煡璁板綍'"
+ :visible.sync="screeningDialogVisible"
+ width="600px"
+ >
+ <el-form :model="screeningForm" label-width="100px">
+ <el-form-item label="绛涙煡绫诲瀷" prop="screeningType" required>
+ <el-select
+ v-model="screeningForm.screeningType"
+ placeholder="璇烽�夋嫨绛涙煡绫诲瀷"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in screeningTypeOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="绛涙煡鏃ユ湡" prop="screeningDate" required>
+ <el-date-picker
+ v-model="screeningForm.screeningDate"
+ type="datetime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ placeholder="閫夋嫨绛涙煡鏃ユ湡"
+ style="width: 100%"
+ >
+ </el-date-picker>
+ </el-form-item>
+
+ <el-form-item label="绛涙煡缁撴灉" prop="result" required>
+ <el-select
+ v-model="screeningForm.result"
+ placeholder="璇烽�夋嫨缁撴灉"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in resultOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="璇︾粏缁撴灉" prop="details">
+ <el-input
+ type="textarea"
+ :rows="3"
+ v-model="screeningForm.details"
+ placeholder="璇疯緭鍏ヨ缁嗙粨鏋滀俊鎭�"
+ >
+ </el-input>
+ </el-form-item>
+ </el-form>
+
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="screeningDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="saveScreening">纭畾</el-button>
+ </div>
+ </el-dialog>
+
+ <!-- 鎱㈢梾鎽樿缂栬緫瀵硅瘽妗� -->
+ <el-dialog
+ :title="chronicEditing ? '缂栬緫鎱㈢梾璁板綍' : '鏂板鎱㈢梾璁板綍'"
+ :visible.sync="chronicDialogVisible"
+ width="600px"
+ >
+ <el-form :model="chronicForm" label-width="100px">
+ <el-form-item label="鐤剧梾鍚嶇О" prop="diseaseName" required>
+ <el-select
+ v-model="chronicForm.diseaseName"
+ placeholder="璇烽�夋嫨鐤剧梾鍚嶇О"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in diseaseOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="纭瘖鏃ユ湡" prop="diagnoseDate" required>
+ <el-date-picker
+ v-model="chronicForm.diagnoseDate"
+ type="date"
+ value-format="yyyy-MM-dd"
+ placeholder="閫夋嫨纭瘖鏃ユ湡"
+ style="width: 100%"
+ >
+ </el-date-picker>
+ </el-form-item>
+
+ <el-form-item label="褰撳墠鐘舵��" prop="status" required>
+ <el-select
+ v-model="chronicForm.status"
+ placeholder="璇烽�夋嫨鐘舵��"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in statusOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="褰撳墠娌荤枟" prop="currentTreatment">
+ <el-input
+ type="textarea"
+ :rows="2"
+ v-model="chronicForm.currentTreatment"
+ placeholder="璇疯緭鍏ュ綋鍓嶆不鐤楁柟妗�"
+ >
+ </el-input>
+ </el-form-item>
+
+ <el-form-item label="闅忚璁″垝" prop="followUpPlan">
+ <el-input
+ v-model="chronicForm.followUpPlan"
+ placeholder="璇疯緭鍏ラ殢璁胯鍒�"
+ >
+ </el-input>
+ </el-form-item>
+ </el-form>
+
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="chronicDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="saveChronicDisease">纭畾</el-button>
+ </div>
+ </el-dialog>
<el-dialog :title="titletb" :visible.sync="AddanumberVisible">
<el-form :model="numberform" label-width="100px">
<el-form-item label="濮撳悕">
@@ -984,7 +1434,7 @@
</el-date-picker> -->
<el-date-picker
v-model="borninfoform.generatedTime"
- value-format="yyyy-MM-dd HH:mm:ss"
+ value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="閫夋嫨鏃ユ湡鏃堕棿"
>
@@ -1065,6 +1515,24 @@
sonactiveName: "inhospital", //鍋ュ悍鐩戞祴瀵艰埅
sontwoactiveName: "weight", //鍖荤枟妗f瀵艰埅
dynamicTags: [],
+ // 绛涙煡鎽樿鐩稿叧鏁版嵁
+ screeningLoading: false,
+ screeningSummaryData: [],
+ screeningStats: {
+ normal: 0,
+ abnormal: 0,
+ critical: 0,
+ },
+
+ // 鎱㈢梾鎽樿鐩稿叧鏁版嵁
+ chronicLoading: false,
+ chronicDiseaseData: [],
+ chronicStats: {
+ stable: 0,
+ active: 0,
+ severe: 0,
+ total: 0,
+ },
borninforules: {
height: [
{ required: true, message: "韬暱涓嶈兘涓虹┖", trigger: "blur" },
@@ -1166,6 +1634,58 @@
xtechartdom: {},
tzechartdom: {},
tableData: [],
+ // 绛涙煡鎽樿缂栬緫鐩稿叧
+ screeningEditing: false,
+ screeningEditIndex: -1,
+ screeningEditTemp: {},
+ screeningDialogVisible: false,
+ screeningForm: {
+ screeningType: "",
+ screeningDate: "",
+ result: "姝e父",
+ details: "",
+ },
+
+ // 鎱㈢梾鎽樿缂栬緫鐩稿叧
+ chronicEditing: false,
+ chronicEditIndex: -1,
+ chronicEditTemp: {},
+ chronicDialogVisible: false,
+ chronicForm: {
+ diseaseName: "",
+ diagnoseDate: "",
+ status: "绋冲畾",
+ currentTreatment: "",
+ followUpPlan: "",
+ },
+
+ // 绛涢�夐�夐」
+ resultOptions: [
+ { label: "姝e父", value: "姝e父" },
+ { label: "寮傚父", value: "寮傚父" },
+ { label: "鍗辨��", value: "鍗辨��" },
+ ],
+
+ statusOptions: [
+ { label: "绋冲畾", value: "绋冲畾" },
+ { label: "娲诲姩鏈�", value: "娲诲姩鏈�" },
+ { label: "涓ラ噸", value: "涓ラ噸" },
+ ],
+
+ screeningTypeOptions: [
+ { label: "蹇冭绠�", value: "蹇冭绠�" },
+ { label: "绯栧翱鐥�", value: "绯栧翱鐥�" },
+ { label: "鑲跨槫鏍囧織", value: "鑲跨槫鏍囧織" },
+ { label: "鑲惧姛鑳�", value: "鑲惧姛鑳�" },
+ { label: "鍛煎惛绯荤粺", value: "鍛煎惛绯荤粺" },
+ ],
+
+ diseaseOptions: [
+ { label: "楂樿鍘�", value: "楂樿鍘�" },
+ { label: "2鍨嬬硸灏跨梾", value: "2鍨嬬硸灏跨梾" },
+ { label: "鍐犲績鐥�", value: "鍐犲績鐥�" },
+ { label: "鎱㈡�ц偩鐥�", value: "鎱㈡�ц偩鐥�" },
+ ],
tableDatalist: [
{
id: 12,
@@ -1277,6 +1797,9 @@
this.id = this.$route.query.id;
this.getuserinfo();
this.gettabList();
+ // 鍒濆鍖栫瓫鏌ュ拰鎱㈢梾鏁版嵁
+ this.initScreeningData();
+ this.initChronicDiseaseData();
},
methods: {
@@ -1306,6 +1829,147 @@
}
});
}
+ },
+ /** 绛涙煡鎽樿 - 鏂板 */
+ addScreening() {
+ this.screeningEditing = false;
+ this.screeningEditIndex = -1;
+ this.screeningForm = {
+ screeningType: "",
+ screeningDate: new Date().toISOString().split("T")[0] + " 09:00:00",
+ result: "姝e父",
+ details: "",
+ };
+ this.screeningDialogVisible = true;
+ },
+
+ /** 绛涙煡鎽樿 - 缂栬緫 */
+ editScreening(index, row) {
+ this.screeningEditing = true;
+ this.screeningEditIndex = index;
+ this.screeningForm = { ...row };
+ this.screeningDialogVisible = true;
+ },
+
+ /** 绛涙煡鎽樿 - 淇濆瓨 */
+ saveScreening() {
+ if (
+ !this.screeningForm.screeningType ||
+ !this.screeningForm.screeningDate
+ ) {
+ this.$message.error("璇峰~鍐欏繀濉瓧娈�");
+ return;
+ }
+
+ if (this.screeningEditing) {
+ // 缂栬緫鐜版湁璁板綍
+ this.screeningSummaryData.splice(this.screeningEditIndex, 1, {
+ ...this.screeningForm,
+ id: this.screeningSummaryData[this.screeningEditIndex].id,
+ });
+ this.$message.success("绛涙煡璁板綍淇敼鎴愬姛");
+ } else {
+ // 鏂板璁板綍
+ const newRecord = {
+ id: Date.now(), // 涓存椂ID
+ ...this.screeningForm,
+ riskLevel: this.getRiskLevelByResult(this.screeningForm.result),
+ };
+ this.screeningSummaryData.unshift(newRecord);
+ this.$message.success("绛涙煡璁板綍鏂板鎴愬姛");
+ }
+
+ this.calculateScreeningStats();
+ this.screeningDialogVisible = false;
+ },
+
+ /** 绛涙煡鎽樿 - 鍒犻櫎 */
+ deleteScreening(index, row) {
+ this.$confirm("纭畾瑕佸垹闄よ繖鏉$瓫鏌ヨ褰曞悧锛�", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ this.screeningSummaryData.splice(index, 1);
+ this.calculateScreeningStats();
+ this.$message.success("鍒犻櫎鎴愬姛");
+ })
+ .catch(() => {});
+ },
+
+ /** 鏍规嵁缁撴灉鑾峰彇椋庨櫓绛夌骇 */
+ getRiskLevelByResult(result) {
+ const riskMap = {
+ 姝e父: "low",
+ 寮傚父: "medium",
+ 鍗辨��: "critical",
+ };
+ return riskMap[result] || "low";
+ },
+ /** 鎱㈢梾鎽樿 - 鏂板 */
+ addChronicDisease() {
+ this.chronicEditing = false;
+ this.chronicEditIndex = -1;
+ this.chronicForm = {
+ diseaseName: "",
+ diagnoseDate: new Date().toISOString().split("T")[0],
+ status: "绋冲畾",
+ currentTreatment: "",
+ followUpPlan: "姣忔湀澶嶈瘖涓�娆�",
+ };
+ this.chronicDialogVisible = true;
+ },
+
+ /** 鎱㈢梾鎽樿 - 缂栬緫 */
+ editChronicDisease(index, row) {
+ this.chronicEditing = true;
+ this.chronicEditIndex = index;
+ this.chronicForm = { ...row };
+ this.chronicDialogVisible = true;
+ },
+
+ /** 鎱㈢梾鎽樿 - 淇濆瓨 */
+ saveChronicDisease() {
+ if (!this.chronicForm.diseaseName || !this.chronicForm.diagnoseDate) {
+ this.$message.error("璇峰~鍐欏繀濉瓧娈�");
+ return;
+ }
+
+ if (this.chronicEditing) {
+ // 缂栬緫鐜版湁璁板綍
+ this.chronicDiseaseData.splice(this.chronicEditIndex, 1, {
+ ...this.chronicForm,
+ id: this.chronicDiseaseData[this.chronicEditIndex].id,
+ });
+ this.$message.success("鎱㈢梾璁板綍淇敼鎴愬姛");
+ } else {
+ // 鏂板璁板綍
+ const newRecord = {
+ id: Date.now(), // 涓存椂ID
+ ...this.chronicForm,
+ };
+ this.chronicDiseaseData.unshift(newRecord);
+ this.$message.success("鎱㈢梾璁板綍鏂板鎴愬姛");
+ }
+
+ this.calculateChronicStats();
+ this.chronicDialogVisible = false;
+ },
+
+ /** 鎱㈢梾鎽樿 - 鍒犻櫎 */
+ deleteChronicDisease(index, row) {
+ this.$confirm("纭畾瑕佸垹闄よ繖鏉℃參鐥呰褰曞悧锛�", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ this.chronicDiseaseData.splice(index, 1);
+ this.calculateChronicStats();
+ this.$message.success("鍒犻櫎鎴愬姛");
+ })
+ .catch(() => {});
},
checkAgeExists(newAge) {
// 鍋囪宸叉湁鏁版嵁瀛樺偍鍦� this.existingData 涓�
@@ -1341,6 +2005,232 @@
});
// 鑱旂郴淇℃伅
this.getcontactlist();
+ },
+ /** 鍒濆鍖栫瓫鏌ユ憳瑕佹暟鎹� */
+ initScreeningData() {
+ // 妯℃嫙绛涙煡鎽樿鏁版嵁[1,4](@ref)
+ this.screeningSummaryData = [
+ {
+ id: 1,
+ screeningType: "蹇冭绠�",
+ screeningDate: "2024-11-15 09:00:00",
+ result: "寮傚父",
+ details: "蹇冪數鍥炬樉绀篠T娈靛帇浣庯紝寤鸿杩涗竴姝ユ鏌�",
+ riskLevel: "high",
+ },
+ {
+ id: 2,
+ screeningType: "绯栧翱鐥�",
+ screeningDate: "2024-11-10 14:30:00",
+ result: "姝e父",
+ details: "绌鸿吂琛�绯�5.6mmol/L锛岀硸鍖栬绾㈣泲鐧�5.8%",
+ riskLevel: "low",
+ },
+ {
+ id: 3,
+ screeningType: "鑲跨槫鏍囧織",
+ screeningDate: "2024-11-05 10:15:00",
+ result: "鍗辨��",
+ details: "CEA 15.2ng/mL锛屽缓璁珛鍗充笓绉戝氨璇�",
+ riskLevel: "critical",
+ },
+ {
+ id: 4,
+ screeningType: "鑲惧姛鑳�",
+ screeningDate: "2024-10-28 16:20:00",
+ result: "寮傚父",
+ details: "鑲岄厫娓呴櫎鐜囧亸浣庯紝eGFR 55mL/min",
+ riskLevel: "medium",
+ },
+ {
+ id: 5,
+ screeningType: "鍛煎惛绯荤粺",
+ screeningDate: "2024-10-20 11:00:00",
+ result: "姝e父",
+ details: "鑲哄姛鑳芥鏌ユ湭瑙佹槑鏄惧紓甯�",
+ riskLevel: "low",
+ },
+ ];
+
+ // 璁$畻缁熻淇℃伅
+ this.calculateScreeningStats();
+ },
+
+ /** 璁$畻绛涙煡缁熻淇℃伅 */
+ calculateScreeningStats() {
+ this.screeningStats = {
+ normal: this.screeningSummaryData.filter(
+ (item) => item.result === "姝e父"
+ ).length,
+ abnormal: this.screeningSummaryData.filter(
+ (item) => item.result === "寮傚父"
+ ).length,
+ critical: this.screeningSummaryData.filter(
+ (item) => item.result === "鍗辨��"
+ ).length,
+ };
+ },
+
+ /** 鍒濆鍖栨參鐥呮憳瑕佹暟鎹� */
+ initChronicDiseaseData() {
+ // 妯℃嫙鎱㈢梾鎽樿鏁版嵁[2,5](@ref)
+ this.chronicDiseaseData = [
+ {
+ id: 1,
+ diseaseName: "楂樿鍘�",
+ diagnoseDate: "2020-03-15",
+ status: "绋冲畾",
+ currentTreatment: "姘ㄦ隘鍦板钩 5mg qd锛屽畾鏈熺洃娴嬭鍘�",
+ followUpPlan: "姣忔湀澶嶈瘖涓�娆�",
+ },
+ {
+ id: 2,
+ diseaseName: "2鍨嬬硸灏跨梾",
+ diagnoseDate: "2019-08-20",
+ status: "娲诲姩鏈�",
+ currentTreatment: "浜岀敳鍙岃儘 500mg bid锛岃儼宀涚礌娉ㄥ皠",
+ followUpPlan: "姣忎袱鍛ㄥ璇婁竴娆�",
+ },
+ {
+ id: 3,
+ diseaseName: "鍐犲績鐥�",
+ diagnoseDate: "2021-05-10",
+ status: "绋冲畾",
+ currentTreatment: "闃垮徃鍖规灄 100mg qd锛岄樋鎵樹紣浠栨眬 20mg qd",
+ followUpPlan: "姣忓搴﹀璇婁竴娆�",
+ },
+ {
+ id: 4,
+ diseaseName: "鎱㈡�ц偩鐥�",
+ diagnoseDate: "2022-01-30",
+ status: "涓ラ噸",
+ currentTreatment: "鎺у埗琛�鍘嬨�佽绯栵紝浣庤泲鐧介ギ椋�",
+ followUpPlan: "姣忔湀涓撶闅忚",
+ },
+ ];
+
+ // 璁$畻缁熻淇℃伅
+ this.calculateChronicStats();
+ },
+
+ /** 璁$畻鎱㈢梾缁熻淇℃伅 */
+ calculateChronicStats() {
+ this.chronicStats = {
+ stable: this.chronicDiseaseData.filter((item) => item.status === "绋冲畾")
+ .length,
+ active: this.chronicDiseaseData.filter(
+ (item) => item.status === "娲诲姩鏈�"
+ ).length,
+ severe: this.chronicDiseaseData.filter((item) => item.status === "涓ラ噸")
+ .length,
+ total: this.chronicDiseaseData.length,
+ };
+ },
+
+ /** 鑾峰彇绛涙煡绫诲瀷鏍囩鏍峰紡 */
+ getScreeningTagType(type) {
+ const typeMap = {
+ 蹇冭绠�: "danger",
+ 绯栧翱鐥�: "warning",
+ 鑲跨槫鏍囧織: "danger",
+ 鑲惧姛鑳�: "warning",
+ 鍛煎惛绯荤粺: "success",
+ };
+ return typeMap[type] || "info";
+ },
+
+ /** 鑾峰彇鐤剧梾鍚嶇О鏍囩鏍峰紡 */
+ getDiseaseTagType(diseaseName) {
+ const diseaseMap = {
+ 楂樿鍘�: "warning",
+ "2鍨嬬硸灏跨梾": "danger",
+ 鍐犲績鐥�: "danger",
+ 鎱㈡�ц偩鐥�: "danger",
+ };
+ return diseaseMap[diseaseName] || "info";
+ },
+
+ /** 鏌ョ湅绛涙煡璇︽儏 */
+ viewScreeningDetail(row) {
+ this.$alert(
+ `<div>
+ <p><strong>绛涙煡绫诲瀷锛�</strong>${row.screeningType}</p>
+ <p><strong>绛涙煡鏃ユ湡锛�</strong>${this.formatTime(row.screeningDate)}</p>
+ <p><strong>绛涙煡缁撴灉锛�</strong><el-tag type="${
+ row.result === "姝e父"
+ ? "success"
+ : row.result === "寮傚父"
+ ? "danger"
+ : "warning"
+ }">${row.result}</el-tag></p>
+ <p><strong>璇︾粏缁撴灉锛�</strong>${row.details}</p>
+ <p><strong>椋庨櫓璇勪及锛�</strong>${this.getRiskLevelText(
+ row.riskLevel
+ )}</p>
+ </div>`,
+ "绛涙煡璇︽儏",
+ {
+ dangerouslyUseHTMLString: true,
+ customClass: "detail-dialog",
+ }
+ );
+ },
+
+ /** 鏌ョ湅鎱㈢梾璇︽儏 */
+ viewChronicDetail(row) {
+ this.$alert(
+ `<div>
+ <p><strong>鐤剧梾鍚嶇О锛�</strong>${row.diseaseName}</p>
+ <p><strong>纭瘖鏃ユ湡锛�</strong>${this.formatTime(row.diagnoseDate)}</p>
+ <p><strong>褰撳墠鐘舵�侊細</strong><el-tag type="${
+ row.status === "绋冲畾"
+ ? "success"
+ : row.status === "娲诲姩鏈�"
+ ? "warning"
+ : "danger"
+ }">${row.status}</el-tag></p>
+ <p><strong>褰撳墠娌荤枟锛�</strong>${row.currentTreatment}</p>
+ <p><strong>闅忚璁″垝锛�</strong>${row.followUpPlan}</p>
+ </div>`,
+ "鎱㈢梾璇︽儏",
+ {
+ dangerouslyUseHTMLString: true,
+ customClass: "detail-dialog",
+ }
+ );
+ },
+
+ /** 鑾峰彇椋庨櫓绛夌骇鏂囨湰 */
+ getRiskLevelText(level) {
+ const levelMap = {
+ low: "浣庨闄�",
+ medium: "涓闄�",
+ high: "楂橀闄�",
+ critical: "鍗辨��",
+ };
+ return levelMap[level] || "鏈煡";
+ },
+
+ /** 鍒锋柊绛涙煡鏁版嵁 */
+ refreshScreeningData() {
+ this.screeningLoading = true;
+ // 妯℃嫙寮傛鍔犺浇
+ setTimeout(() => {
+ this.initScreeningData();
+ this.screeningLoading = false;
+ this.$message.success("绛涙煡鏁版嵁宸插埛鏂�");
+ }, 1000);
+ },
+
+ /** 鍒锋柊鎱㈢梾鏁版嵁 */
+ refreshChronicData() {
+ this.chronicLoading = true;
+ // 妯℃嫙寮傛鍔犺浇
+ setTimeout(() => {
+ this.initChronicDiseaseData();
+ this.chronicLoading = false;
+ this.$message.success("鎱㈢梾鏁版嵁宸插埛鏂�");
+ }, 1000);
},
// 淇濆瓨鎮h�呮。妗�
savefile() {
@@ -2370,6 +3260,81 @@
}
}
}
+.screening-summary,
+.chronic-disease-summary {
+ background: #ffffff;
+ border: 1px solid #e6e6e6;
+ border-radius: 4px;
+ margin-bottom: 20px;
+
+ .summary-header {
+ display: flex;
+ align-items: center;
+ padding: 12px 15px;
+ background: #f5f7fa;
+ border-bottom: 1px solid #e6e6e6;
+ font-weight: 600;
+ color: #333;
+
+ i {
+ margin-right: 8px;
+ color: #409eff;
+ }
+ }
+
+ .summary-content {
+ padding: 15px;
+
+ .summary-stats {
+ margin-top: 15px;
+ padding-top: 15px;
+ border-top: 1px dashed #e6e6e6;
+
+ .stat-item {
+ text-align: center;
+
+ .stat-value {
+ font-size: 24px;
+ font-weight: bold;
+ margin-bottom: 5px;
+ }
+
+ .stat-label {
+ font-size: 12px;
+ color: #909399;
+ }
+ }
+ }
+ }
+}
+
+/* 璇︽儏瀵硅瘽妗嗘牱寮� */
+:deep(.detail-dialog) {
+ .el-message-box__message {
+ p {
+ margin: 10px 0;
+ line-height: 1.6;
+ }
+
+ strong {
+ color: #333;
+ min-width: 80px;
+ display: inline-block;
+ }
+ }
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 1200px) {
+ .screening-summary,
+ .chronic-disease-summary {
+ .summary-content {
+ .el-table {
+ font-size: 12px;
+ }
+ }
+ }
+}
.xinz-inf {
font-size: 18px;
// white-space: nowrap;
@@ -2470,4 +3435,24 @@
::v-deep.el-table .warning-row {
background: oldlace;
}
+/* 鎿嶄綔鎸夐挳缁勬牱寮� */
+.summary-header .el-button-group {
+ margin-left: auto;
+}
+
+/* 瀵硅瘽妗嗚〃鍗曟牱寮� */
+.el-dialog .el-form-item {
+ margin-bottom: 20px;
+}
+
+/* 缁熻鏁板瓧鏍峰紡浼樺寲 */
+.stat-item {
+ cursor: pointer;
+ transition: all 0.3s;
+}
+
+.stat-item:hover {
+ background-color: #f5f7fa;
+ border-radius: 4px;
+}
</style>
--
Gitblit v1.9.3