From 05e6b08007a86b5b10c680babc9c3bcc3a1a201b Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期六, 27 十二月 2025 10:49:00 +0800
Subject: [PATCH] 上报转运单部分数据接入
---
static/avatar/yisna.jpg | 0
pages/case/index.vue | 605 +++++++++----------
App.vue | 81 ++
.env.development | 4
uni_modules/uview-plus/libs/util/route.js | 4
static/avatar/logo1.jpg | 0
static/avatar/logo.png | 0
manifest.json | 2
pages/login/Login.vue | 4
index.html | 2
static/avatar/yisn.jpg | 0
pages/case/CaseDetails.vue | 915 +++++++++++++++++++++++++-----
pages/case/CaseInfo.vue | 2
components/op-select/index.vue | 137 ++++
14 files changed, 1,270 insertions(+), 486 deletions(-)
diff --git a/.env.development b/.env.development
index 0fd7111..3752d78 100644
--- a/.env.development
+++ b/.env.development
@@ -1,4 +1,4 @@
# 寮�鍙戠幆澧傾PI鍦板潃
-VITE_APP_BASE_API = 'http://192.168.100.10:8080'
-# VITE_APP_BASE_API = 'http://192.168.100.125:8080'
+# VITE_APP_BASE_API = 'http://192.168.100.10:8080'
+VITE_APP_BASE_API = 'http://localhost:8080'
VUE_APP_PLATFORM = 'h5'
\ No newline at end of file
diff --git a/App.vue b/App.vue
index 30b3f4a..b4187e8 100644
--- a/App.vue
+++ b/App.vue
@@ -1,35 +1,74 @@
<script setup>
-import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
-import { useI18n } from 'vue-i18n'
+import { onLaunch } from '@dcloudio/uni-app'
+import { getToken } from '@/utils/auth'
+import { useUserStore } from '@/stores/user'
-const { t } = useI18n()
+// 瀹氫箟椤甸潰鐧藉悕鍗� - 杩欎簺椤甸潰涓嶉渶瑕乼oken鏍¢獙
+const pageWhiteList = [
+ 'pages/login/Login',
+ 'pages/login/DingTalkLogin'
+]
-onLaunch(() => {
- console.log('App Launch')
- try {
- const currentLang = uni.getStorageSync('language')
- console.log('褰撳墠璇█:', currentLang)
- } catch (error) {
- console.error('璇█閰嶇疆閿欒:', error)
- }
-})
+// 鏀硅繘鐨勭櫧鍚嶅崟妫�鏌ユ柟娉�
+const isPageInWhiteList = (currentPage) => {
+ return pageWhiteList.some(path => currentPage.includes(path))
+}
-onShow(() => {
- console.log('App Show')
-})
-
-onHide(() => {
- console.log('App Hide')
+onLaunch(async () => {
+ console.log('App Launch')
+
+ const userStore = useUserStore()
+
+ try {
+ const token = getToken()
+ const launchOptions = uni.getLaunchOptionsSync()
+ const currentPage = launchOptions.path || ''
+ console.log(launchOptions);
+ console.log(launchOptions.path);
+
+ if (!token) {
+ if (!isPageInWhiteList(currentPage)) {
+ console.log('鏈�氳繃鐧藉悕鍗曡烦杞櫥褰曢〉')
+ return uni.redirectTo({ url: '/pages/login/Login' })
+ }
+ return
+ }
+
+ // 鏍¢獙token鏈夋晥鎬э細閫氳繃璋冪敤/current/user/current_roles鎺ュ彛
+ const current = await uni.$uapi.get("/system/user/profile");
+
+ // 濡傛灉鎺ュ彛杩斿洖鎴愬姛锛岃鏄巘oken鏈夋晥锛岀户缁幏鍙栫敤鎴蜂俊鎭�
+ if (current ) {
+ // const resuser = await uni.$uapi.get("/system/user/profile");
+ userStore.setUserInfo(current);
+ // userStore.setroleKey(current[0].roleKey);
+
+ // 濡傛灉褰撳墠鏄櫥褰曢〉锛岃烦杞椤�
+ if (isPageInWhiteList(currentPage)) {
+ uni.switchTab({ url: '/pages/index/index' })
+ }
+ } else {
+ // 鎺ュ彛杩斿洖浣嗚鑹蹭俊鎭负绌猴紝瑙嗕负token鏃犳晥
+ console.error('瑙掕壊淇℃伅鑾峰彇澶辫触锛宼oken鍙兘鏃犳晥')
+ userStore.clearUser() // 娓呴櫎鏈湴鐢ㄦ埛淇℃伅
+ uni.redirectTo({ url: '/pages/login/Login' })
+ }
+
+ } catch (error) {
+ console.error('鍒濆鍖栧け璐�:', error)
+ // token鏃犳晥鎴栧叾浠栭敊璇紝娓呴櫎鏈湴鐢ㄦ埛淇℃伅骞惰烦杞櫥褰曢〉
+ userStore.clearUser()
+ uni.redirectTo({ url: '/pages/login/Login' })
+ }
})
</script>
<style lang="scss">
@import "@/uni_modules/uview-plus/index.scss";
-
// 涓婚棰滆壊
-$primary-color: #0f95b0;
+$primary-color: #67AFAB;
$primary-light: rgba($primary-color, 0.1);
-$primary-gradient: linear-gradient(135deg, #0f95b0, #89C4C1);
+$primary-gradient: linear-gradient(135deg, #67AFAB, #89C4C1);
// 鏂囧瓧棰滆壊
$text-primary: #333333;
diff --git a/components/op-select/index.vue b/components/op-select/index.vue
new file mode 100644
index 0000000..9b0dd99
--- /dev/null
+++ b/components/op-select/index.vue
@@ -0,0 +1,137 @@
+<!-- components/fs-select/fs-select.vue -->
+<template>
+ <view style="width: 100%">
+ <u-input
+ :input-align="inputaling"
+ :placeholder="placeholderText"
+ v-model="valueLable"
+ type="select"
+ :select-open="show"
+ @click="show = true"
+ :border="border"
+ readonly
+ />
+ <u-select
+ v-model="show"
+ :mode="mode"
+ :list="list"
+ @confirm="confirm"
+ :value-name="valuename"
+ :label-name="labelname"
+ :safe-area-inset-bottom="true"
+ ></u-select>
+ </view>
+</template>
+
+<script>
+export default {
+ name: "fs-select",
+ props: {
+ placeholder: {
+ type: String,
+ default: ''
+ },
+ // 鏄剧ず鏂囨湰鐨勫瓧娈靛悕
+ labelname: {
+ type: String,
+ default: 'label'
+ },
+ // 鍊肩殑瀛楁鍚�
+ valuename: {
+ type: String,
+ default: 'value'
+ },
+ // 閫夋嫨鍣ㄦā寮�
+ mode: {
+ type: String,
+ default: 'single-column'
+ },
+ // 鏁版嵁鍒楄〃
+ list: {
+ type: Array,
+ default() {
+ return []
+ }
+ },
+ // 閫変腑鐨勫��
+ value: {
+ type: [String, Number],
+ required: true
+ },
+ // 鏄惁鏄剧ず杈规
+ border: {
+ type: Boolean,
+ default: false
+ },
+ // 鏂囨湰瀵归綈鏂瑰紡
+ inputaling: {
+ type: String,
+ default: 'right'
+ }
+ },
+ data() {
+ return {
+ show: false,
+ valueLable: ''
+ };
+ },
+ computed: {
+ placeholderText() {
+ return this.placeholder || `璇烽�夋嫨`;
+ }
+ },
+ watch: {
+ // 鐩戝惉value鍊煎彉鍖栵紝鏇存柊鏄剧ず鏂囨湰
+ value: {
+ handler(newValue) {
+ this.updateDisplayLabel(newValue);
+ },
+ immediate: true
+ },
+ // 鐩戝惉list鏁版嵁鍙樺寲锛屾洿鏂版樉绀烘枃鏈�
+ list: {
+ handler(newList) {
+ this.updateDisplayLabel(this.value);
+ },
+ deep: true
+ }
+ },
+ methods: {
+ // 鏇存柊鏄剧ず鏂囨湰
+ updateDisplayLabel(currentValue) {
+ if (!currentValue && currentValue !== 0) {
+ this.valueLable = '';
+ return;
+ }
+
+ const foundItem = this.list.find(item =>
+ String(item[this.valuename]) === String(currentValue)
+ );
+
+ if (foundItem) {
+ this.valueLable = foundItem[this.labelname];
+ } else {
+ this.valueLable = '';
+ }
+ },
+ // 纭閫夋嫨
+ confirm(e) {
+ if (e.length > 0) {
+ this.valueLable = e[0].label;
+ // 鎶涘嚭閫変腑鐨剉alue鍊�
+ this.$emit('input', e[0].value);
+ // 濡傛灉闇�瑕佹洿璇︾粏鐨勬暟鎹紝鍙互棰濆鎶涘嚭浜嬩欢
+ this.$emit('change', {
+ value: e[0].value,
+ label: e[0].label,
+ item: e[0]
+ });
+ }
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+// 鍙互鍦ㄨ繖閲屾坊鍔犺嚜瀹氫箟鏍峰紡
+</style>
\ No newline at end of file
diff --git a/index.html b/index.html
index 8bc338d..d873331 100644
--- a/index.html
+++ b/index.html
@@ -10,7 +10,7 @@
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title>闈掑矝OPO绠$悊绯荤粺</title>
- <link rel="icon" href="/static/avatar/logo.jpg"> <!-- 寮曠敤鏍圭洰褰曠殑鍥炬爣 -->
+ <link rel="icon" href="/static/avatar/logo.png"> <!-- 寮曠敤鏍圭洰褰曠殑鍥炬爣 -->
<!--preload-links-->
<!--app-context-->
</head>
diff --git a/manifest.json b/manifest.json
index 16cd148..cae0f2c 100644
--- a/manifest.json
+++ b/manifest.json
@@ -73,7 +73,7 @@
"disableHostCheck" : true,
"proxy" : {
"/api" : {
- "target" : "http://192.168.100.10:8080",
+ "target" : "http://localhost:8080",
"changeOrigin" : true
}
}
diff --git a/pages/case/CaseDetails.vue b/pages/case/CaseDetails.vue
index cac11a6..6577fb6 100644
--- a/pages/case/CaseDetails.vue
+++ b/pages/case/CaseDetails.vue
@@ -3,6 +3,11 @@
<!-- 琛ㄥ崟鍐呭 -->
<scroll-view scroll-y class="form-scroll" :show-scrollbar="false">
<view class="form-content">
+ <view class="page-header">
+ <text class="page-title">{{
+ isEditMode ? "淇敼妗堜緥" : "涓婃姤妗堜緥"
+ }}</text>
+ </view>
<!-- 鍩烘湰淇℃伅鍗$墖 -->
<view class="form-section">
<view class="section-header">
@@ -12,53 +17,56 @@
<view class="form-grid">
<view class="form-item">
- <text class="item-label">鎹愮尞缂栧彿</text>
+ <text class="item-label">妗堜緥缂栧彿</text>
<u-input
- v-model="form.donorno"
- placeholder="绯荤粺鑷姩鐢熸垚"
+ v-model="form.caseNo"
+ placeholder="涓婃姤鍚庤嚜鍔ㄧ敓鎴�"
disabled
:disabledColor="disabledColor"
border="none"
/>
</view>
+ <!-- 鏀归�犲悗鐨勫尰鐤楁満鏋勯�夋嫨 -->
<view class="form-item">
<text class="item-label">鍖荤枟鏈烘瀯</text>
- <u-input
- v-model="form.treatmenthospitalno"
- placeholder="璇烽�夋嫨鍖荤枟鏈烘瀯"
- readonly
- border="none"
- @click="showHospitalPicker = true"
+ <picker
+ mode="selector"
+ :range="hospitalLabels"
+ :value="hospitalIndex"
+ @change="onHospitalChange"
>
- <template #suffix>
- <u-icon name="arrow-down" color="#86868b"></u-icon>
- </template>
- </u-input>
+ <view class="picker">
+ <text>{{ currentHospital }}</text>
+ <text class="icon-arrow">鈥�</text>
+ </view>
+ </picker>
</view>
+ <!-- 鏀归�犲悗鐨勭瀹ら�夋嫨 -->
<view class="form-item">
<text class="item-label">绉戝</text>
- <u-input
- v-model="form.treatmentdeptname"
- placeholder="璇烽�夋嫨绉戝"
- readonly
- border="none"
- @click="selectShow = true"
+ <picker
+ mode="selector"
+ :range="deptLabels"
+ :value="deptIndex"
+ @change="onDeptChange"
>
- <template #suffix>
- <u-icon name="arrow-down" color="#86868b"></u-icon>
- </template>
- </u-input>
+ <view class="picker">
+ <text>{{ currentDept }}</text>
+ <text class="icon-arrow">鈥�</text>
+ </view>
+ </picker>
</view>
<view class="form-item">
<text class="item-label required">濮撳悕</text>
<u-input
+ type="text"
v-model="form.name"
placeholder="璇疯緭鍏ュ鍚�"
- border="none"
- :customStyle="inputStyle(!form.name)"
+ maxlength="20"
+ class="custom-input"
/>
</view>
</view>
@@ -72,93 +80,99 @@
</view>
<view class="form-grid">
+ <!-- 鏀归�犲悗鐨勬皯鏃忛�夋嫨 -->
<view class="form-item">
<text class="item-label">姘戞棌</text>
- <u-input
- v-model="form.nation"
- placeholder="璇烽�夋嫨姘戞棌"
- readonly
- border="none"
- @click="showNationPicker = true"
+ <picker
+ mode="selector"
+ :range="nationLabels"
+ :value="nationIndex"
+ @change="onNationChange"
>
- <template #suffix>
- <u-icon name="arrow-down" color="#86868b"></u-icon>
- </template>
- </u-input>
+ <view class="picker">
+ <text>{{ currentNation }}</text>
+ <text class="icon-arrow">鈥�</text>
+ </view>
+ </picker>
</view>
<view class="form-item">
<text class="item-label">鍥界睄</text>
<u-input
+ type="text"
v-model="form.nationality"
placeholder="璇疯緭鍏ュ浗绫�"
- border="none"
+ class="custom-input"
/>
</view>
+ <!-- 鏀归�犲悗鐨勮瘉浠剁被鍨嬮�夋嫨 -->
<view class="form-item">
<text class="item-label">璇佷欢绫诲瀷</text>
- <u-input
- v-model="form.idcardtype"
- placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
- readonly
- border="none"
- @click="showIdCardTypePicker = true"
+ <picker
+ mode="selector"
+ :range="idCardTypeLabels"
+ :value="idCardTypeIndex"
+ @change="onIdCardTypeChange"
>
- <template #suffix>
- <u-icon name="arrow-down" color="#86868b"></u-icon>
- </template>
- </u-input>
+ <view class="picker">
+ <text>{{ currentIdCardType }}</text>
+ <text class="icon-arrow">鈥�</text>
+ </view>
+ </picker>
</view>
<view class="form-item">
<text class="item-label required">璇佷欢鍙风爜</text>
<u-input
+ type="idcard"
v-model="form.idcardno"
placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
- border="none"
- :customStyle="inputStyle(!form.idcardno)"
+ maxlength="18"
+ class="custom-input"
@blur="validateIdCard"
/>
+ <text class="error-text" v-if="idCardError">{{
+ idCardError
+ }}</text>
</view>
+ <!-- 鏀归�犲悗鐨勬�у埆閫夋嫨 -->
<view class="form-item">
<text class="item-label">鎬у埆</text>
- <view class="radio-group">
+ <view class="radio-options">
<view
v-for="gender in genderOptions"
:key="gender.value"
- class="radio-item"
+ class="option-item"
+ :class="{ active: form.sex === gender.value }"
@click="form.sex = gender.value"
>
- <view
- class="radio-dot"
- :class="{ active: form.sex === gender.value }"
- ></view>
- <text class="radio-label">{{ gender.label }}</text>
+ <text class="radio-dot"></text>
+ <text class="option-label">{{ gender.label }}</text>
</view>
</view>
</view>
+ <!-- 鏀归�犲悗鐨勫嚭鐢熸棩鏈熼�夋嫨 -->
<view class="form-item">
<text class="item-label">鍑虹敓鏃ユ湡</text>
- <u-input
- v-model="form.birthday"
- placeholder="閫夋嫨鍑虹敓鏃ユ湡"
- readonly
- border="none"
- @click="showDatePicker = true"
+ <picker
+ mode="date"
+ :value="form.birthday"
+ @change="onBirthdayChange"
>
- <template #suffix>
- <u-icon name="arrow-down" color="#86868b"></u-icon>
- </template>
- </u-input>
+ <view class="picker">
+ <text>{{ form.birthday || "閫夋嫨鍑虹敓鏃ユ湡" }}</text>
+ <text class="icon-arrow">鈥�</text>
+ </view>
+ </picker>
</view>
<view class="form-item">
<text class="item-label">骞撮緞</text>
<u-input
- v-model="form.age"
+ v-model="ageDisplay"
placeholder="鑷姩璁$畻"
disabled
:disabledColor="disabledColor"
@@ -181,6 +195,14 @@
<u-input
v-model="form.inpatientno"
placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+ border="none"
+ />
+ </view>
+ <view class="form-item">
+ <text class="item-label">GCS璇勫垎</text>
+ <u-input
+ v-model="form.gscScore"
+ placeholder="璇疯緭鍏CS璇勫垎"
border="none"
/>
</view>
@@ -212,6 +234,31 @@
<text class="radio-label">{{ bloodType.label }}</text>
</view>
</view>
+ </view>
+ <view class="form-item">
+ <text class="item-label">浼犳煋鐥�</text>
+ <view class="radio-group horizontal">
+ <view
+ v-for="bloodType in infectiousDiseaselist"
+ :key="bloodType.value"
+ class="radio-item"
+ @click="form.infectious = bloodType.value"
+ >
+ <view
+ class="radio-dot"
+ :class="{ active: form.bloodtype === bloodType.value }"
+ ></view>
+ <text class="radio-label">{{ bloodType.label }}</text>
+ </view>
+ </view>
+ </view>
+ <view class="form-item">
+ <text class="item-label">鍏朵粬</text>
+ <u-input
+ v-model="form.infectiousOther"
+ placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+ border="none"
+ />
</view>
<view class="form-item">
@@ -261,7 +308,7 @@
/>
</view>
- <view class="form-item">
+ <!-- <view class="form-item">
<text class="item-label">鎶ュ憡浜�</text>
<u-input
v-model="form.reporterno"
@@ -274,7 +321,7 @@
<u-icon name="arrow-down" color="#86868b"></u-icon>
</template>
</u-input>
- </view>
+ </view> -->
<view class="form-item">
<text class="item-label">鎶ュ憡鏃堕棿</text>
@@ -290,13 +337,15 @@
<!-- 鎿嶄綔鎸夐挳 -->
<view class="action-buttons">
+ <u-button class="btn secondary" @click="handleCancel">鍙栨秷</u-button>
<u-button class="btn secondary" @click="resetForm">閲嶇疆琛ㄥ崟</u-button>
<u-button
class="btn primary"
- :disabled="!isFormValid"
- @click="submitForm"
- >鎻愪氦涓婃姤</u-button
+ :disabled="!isFormValid || loading"
+ @click="handleSubmit"
>
+ {{ loading ? "鎻愪氦涓�..." : isEditMode ? "淇濆瓨淇敼" : "鎻愪氦涓婃姤" }}
+ </u-button>
</view>
<attachment-upload
ref="attachment"
@@ -342,14 +391,14 @@
></u-picker>
<!-- 璇佷欢绫诲瀷閫夋嫨鍣� -->
- <u-picker
+ <!-- <u-picker
:show="showIdCardTypePicker"
:columns="[idCardTypeOptions]"
keyName="label"
@confirm="onIdCardTypeConfirm"
@cancel="showIdCardTypePicker = false"
title="璇烽�夋嫨璇佷欢绫诲瀷"
- ></u-picker>
+ ></u-picker> -->
<!-- 鏃ユ湡閫夋嫨鍣� -->
<u-datetime-picker
@@ -381,11 +430,16 @@
import { onLoad } from "@dcloudio/uni-app";
import attachmentUpload from "@/components/attachment";
import { useUserStore } from "@/stores/user";
+import { useDict } from "@/utils/dict";
+const dict = ref({});
+const userStore = useUserStore();
+const isEditMode = ref(false);
+const currentId = ref(null);
// 琛ㄥ崟鏁版嵁
const form = ref({
- donorno: "",
- treatmenthospitalno: "",
+ caseNo: "",
+ treatmenthospitalname: "",
treatmentdeptname: "",
name: "",
nation: "",
@@ -395,19 +449,52 @@
sex: "",
birthday: "",
age: "",
+ ageunit: "", // 鏂板锛氬勾榫勫崟浣�
inpatientno: "",
diagnosisname: "",
bloodtype: "",
rhyin: "",
infoname: "",
infophone: "",
- reporterno: "",
+ reportername: userStore.name || "",
+ reporterno: userStore.userId || "",
+ reporterphone: "", // 鎶ュ憡鑰呰仈绯荤數璇�
reporttime: "",
+ contactperson: "", // 鏂板锛氳仈绯讳汉锛堝崗璋冨憳锛�
+ education: "", // 鏂板锛氬鍘�
+ illnessoverview: "", // 鏂板锛氱梾鎯呮鍐�
+ infectious: "", // 浼犳煋鐥呮儏鍐�
+ infectiousOther: "", // 浼犳煋鐥呭叾浠�
+ isTransport: "1", // 鏂板锛氭槸鍚﹂渶瑕佽浆杩愶紝榛樿1涓嶉渶瑕�
+ nativeplace: "", // 鏂板锛氱睄璐�
+ occupation: "", // 鏂板锛氳亴涓�
+ patientstate: "", // 鏂板锛氱梾浜虹姸鍐�
+ phone: "", // 鏂板锛氳仈绯荤數璇�
+ registeraddress: "", // 鏂板锛氭埛绫嶅湴鍧�
+ registerprovince: "", // 鏂板锛氭埛绫嶅湴鍧�鐪佺紪鍙�
+ registerprovincename: "", // 鏂板锛氭埛绫嶅湴鍧�鐪佸悕绉�
+ registercityname: "", // 鏂板锛氬競鍚嶇О
+ registertownname: "", // 鏂板锛氭墍灞炶閬擄紙闀囷級鍚嶇О
+ registercommunityname: "", // 鏂板锛氱ぞ鍖猴紙鏉戯級鍚嶇О
+ residenceaddress: "", // 鏂板锛氱幇浣忓湴鍧�
+ residenceprovince: "", // 鏂板锛氱幇浣忓湴鍧�鐪佷唬鐮�
+ residenceprovincename: "", // 鏂板锛氱幇浣忓湴鍧�鐪佸悕绉�
+ residencecountycode: "", // 鏂板锛氭墍灞炲尯鍩熺紪鍙�
+ residencecountyname: "", // 鏂板锛氭墍灞炲尯鍩熷悕绉�
+ residencetownname: "", // 鏂板锛氭墍灞炶閬擄紙闀囷級鍚嶇О
+ residencecommunity: "", // 鏂板锛氱ぞ鍖猴紙鏉戯級缂栧彿
+ residencecommunityname: "", // 鏂板锛氱ぞ鍖猴紙鏉戯級鍚嶇О
+ remark: "", // 鏂板锛氬娉�
+ reportStatus: "1", // 鏂板锛氫笂鎶ョ姸鎬侊紝榛樿1宸蹭笂鎶�
+ terminationCase: 0, // 鏂板锛氭槸鍚︾粓姝㈡渚嬶紝榛樿0寮�鍚�
+ annexfilesList: [], // 闄勪欢鏂囦欢鍦板潃闆嗗悎
});
// 閫夋嫨鍣ㄧ姸鎬�
const attachments = ref([]);
+const infectiousDiseaselist = ref([]);
const isReadonly = ref(false);
+const id = ref(null);
const selectShow = ref(false);
const showHospitalPicker = ref(false);
const showNationPicker = ref(false);
@@ -481,7 +568,114 @@
const isFormValid = computed(() => {
return form.value.name && form.value.idcardno && form.value.diagnosisname;
});
+// 閫夋嫨鍣ㄧ储寮�
+const hospitalIndex = ref(-1);
+const deptIndex = ref(-1);
+const nationIndex = ref(-1);
+const idCardTypeIndex = ref(-1);
+// 璁$畻灞炴�� - 鏍囩鏁扮粍
+const hospitalLabels = computed(() =>
+ hospitalOptions.value.map((item) => item.label)
+);
+const ageDisplay = computed(() => {
+ if (!form.value.age || !form.value.ageunit) {
+ return '鑷姩璁$畻';
+ }
+ return `${form.value.age}${form.value.ageunit}`;
+});
+const deptLabels = computed(() => {
+ return pickerColumns.value[0].map((item) => item.label);
+});
+const nationLabels = computed(() =>
+ nationOptions.value.map((item) => item.label)
+);
+const idCardTypeLabels = computed(() =>
+ idCardTypeOptions.value.map((item) => item.label)
+);
+
+// 璁$畻灞炴�� - 褰撳墠閫変腑鏄剧ず鏂囨湰
+const currentHospital = computed(() => {
+ return hospitalIndex.value >= 0
+ ? hospitalLabels.value[hospitalIndex.value]
+ : "璇烽�夋嫨鍖荤枟鏈烘瀯";
+});
+
+const currentDept = computed(() => {
+ return deptIndex.value >= 0
+ ? deptLabels.value[deptIndex.value]
+ : "璇烽�夋嫨绉戝";
+});
+
+const currentNation = computed(() => {
+ return nationIndex.value >= 0
+ ? nationLabels.value[nationIndex.value]
+ : "璇烽�夋嫨姘戞棌";
+});
+
+const currentIdCardType = computed(() => {
+ return idCardTypeIndex.value >= 0
+ ? idCardTypeLabels.value[idCardTypeIndex.value]
+ : "璇烽�夋嫨璇佷欢绫诲瀷";
+});
+
+// 閫夋嫨鍣ㄥ彉鏇翠簨浠�
+const onHospitalChange = (e) => {
+ const index = parseInt(e.detail.value);
+ hospitalIndex.value = index;
+ form.value.treatmenthospitalname = hospitalOptions.value[index].label;
+};
+
+const onDeptChange = (e) => {
+ const index = parseInt(e.detail.value);
+ deptIndex.value = index;
+ form.value.treatmentdeptname = pickerColumns.value[0][index].label;
+};
+
+const onNationChange = (e) => {
+ const index = parseInt(e.detail.value);
+ nationIndex.value = index;
+ form.value.nation = nationOptions.value[index].label;
+};
+
+const onIdCardTypeChange = (e) => {
+ const index = parseInt(e.detail.value);
+ idCardTypeIndex.value = index;
+ form.value.idcardtype = idCardTypeOptions.value[index].value;
+};
+
+const onBirthdayChange = (e) => {
+ form.value.birthday = e.detail.value;
+ calculateAge();
+};
+const onDateConfirm = (e) => {
+ const date = new Date(e.value);
+
+ // 鏍煎紡鍖栨棩鏈熶负 YYYY-MM-DD
+ form.value.birthday = `${date.getFullYear()}-${(date.getMonth() + 1)
+ .toString()
+ .padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
+
+ calculateAge();
+ showDatePicker.value = false;
+};
+
+// 韬唤璇侀獙璇�
+const idCardError = ref("");
+const validateIdCard = () => {
+ if (!form.value.idcardno) {
+ idCardError.value = "璇疯緭鍏ヨ瘉浠跺彿鐮�";
+ return false;
+ }
+
+ if (form.value.idcardno.length !== 18) {
+ idCardError.value = "璇疯緭鍏�18浣嶈韩浠借瘉鍙风爜";
+ return false;
+ }
+
+ idCardError.value = "";
+ return true;
+};
// 鏍峰紡鏂规硶
const inputStyle = (isError) => {
return isError
@@ -497,62 +691,130 @@
// 鐢熷懡鍛ㄦ湡
onMounted(() => {
- updateCurrentTime();
- generateDonorNo();
+ // updateCurrentTime();
+ // generateDonorNo();
setInterval(updateCurrentTime, 1000);
});
-onLoad((options) => {
- if (options.edit && options.id) {
- loadCaseData(options.id);
+onLoad(async (options) => {
+ id.value = options.id;
+ if (options.id) {
+ currentId.value = options.id;
+ isEditMode.value = true;
+ await loadCaseData(options.id);
+ } else {
+ isEditMode.value = false;
+ generateDonorNo();
}
+ // 鑾峰彇瀛楀吀鏁版嵁
+ dict.value = await useDict(
+ "sys_IDType",
+ "sys_user_sex",
+ "sys_BloodType",
+ "sys_Infectious",
+ "sys_AgeUnit", // 鏂板骞撮緞鍗曚綅
+ "sys_education", // 鏂板瀛﹀巻
+ "sys_nation", // 鏂板姘戞棌
+ "sys_occupation" // 鏂板鑱屼笟
+ );
+ initOptions();
+ updateCurrentTime();
});
-
+// 鍒濆鍖栭�夐」鏁版嵁鐨勬柟娉�
+const initOptions = () => {
+ infectiousDiseaselist.value = dict.value.sys_Infectious || [];
+ idCardTypeOptions.value = dict.value.sys_IDType || [];
+};
// 鏂规硶瀹氫箟
const updateCurrentTime = () => {
const now = new Date();
- currentTime.value = now.toLocaleString("zh-CN", {
+ // 鍏堣幏鍙栨牸寮忓寲鐨勫瓧绗︿覆锛岀劧鍚庢浛鎹㈠垎闅旂鍜岃皟鏁撮『搴�
+ const localString = now.toLocaleString("zh-CN", {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
+ second: "2-digit",
+ hour12: false,
});
+ // 灏� "yyyy/mm/dd hh:mm:ss" 杞崲涓� "yyyy-mm-dd hh:mm:ss"
+ currentTime.value = localString.replace(/\//g, "-");
form.value.reporttime = currentTime.value;
};
const generateDonorNo = () => {
const date = new Date();
const timestamp = date.getTime().toString().slice(-6);
- form.value.donorno = `DON${date.getFullYear()}${(date.getMonth() + 1)
- .toString()
- .padStart(2, "0")}${timestamp}`;
+ // form.value.caseNo = `DON${date.getFullYear()}${(date.getMonth() + 1)
+ // .toString()
+ // .padStart(2, "0")}${timestamp}`;
};
const calculateAge = () => {
- if (!form.value.birthday) return;
+ if (!form.value.birthday) {
+ form.value.age = '';
+ form.value.ageunit = '';
+ return;
+ }
+
const birthDate = new Date(form.value.birthday);
const today = new Date();
- let age = today.getFullYear() - birthDate.getFullYear();
- const monthDiff = today.getMonth() - birthDate.getMonth();
-
- if (
- monthDiff < 0 ||
- (monthDiff === 0 && today.getDate() < birthDate.getDate())
- ) {
- age--;
+
+ // 妫�鏌ユ棩鏈熸湁鏁堟��
+ if (isNaN(birthDate.getTime())) {
+ form.value.age = '';
+ form.value.ageunit = '';
+ return;
}
- form.value.age = age.toString();
+
+ // 璁$畻鎬诲ぉ鏁板樊
+ const timeDiff = today.getTime() - birthDate.getTime();
+ const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
+
+ if (daysDiff < 0) {
+ // 鏈潵鏃ユ湡澶勭悊
+ form.value.age = '';
+ form.value.ageunit = '';
+ return;
+ }
+
+ // 璁$畻骞淬�佹湀銆佹棩
+ const years = today.getFullYear() - birthDate.getFullYear();
+ const months = today.getMonth() - birthDate.getMonth();
+ const days = today.getDate() - birthDate.getDate();
+
+ let ageValue, ageUnit;
+
+ if (years >= 1) {
+ // 澶т簬绛変簬1骞达細鏄剧ず骞�
+ let actualYears = years;
+
+ // 澶勭悊鏈堜唤鍜屾棩鏈熺殑杈圭晫鎯呭喌
+ if (months < 0 || (months === 0 && days < 0)) {
+ actualYears = years - 1;
+ }
+
+ ageValue = actualYears.toString();
+ ageUnit = '宀�';
+ } else if (daysDiff >= 30) {
+ // 澶т簬绛変簬30澶╋細鏄剧ず鏈�
+ let totalMonths = years * 12 + months;
+ if (days < 0) {
+ totalMonths--;
+ }
+ ageValue = Math.max(1, totalMonths).toString(); // 纭繚鑷冲皯1涓湀
+ ageUnit = '涓湀';
+ } else {
+ // 灏忎簬30澶╋細鏄剧ず澶�
+ ageValue = Math.max(1, daysDiff).toString(); // 纭繚鑷冲皯1澶�
+ ageUnit = '澶�';
+ }
+
+ form.value.age = ageValue;
+ form.value.ageunit = ageUnit;
};
-const validateIdCard = () => {
- if (form.value.idcardno && form.value.idcardno.length !== 18) {
- uni.showToast({
- title: "璇疯緭鍏�18浣嶈韩浠借瘉鍙风爜",
- icon: "none",
- });
- }
-};
// 澶勭悊鍩虹闄勪欢涓婁紶
const handleBaseUpload = (file) => {
console.log("鍩虹闄勪欢涓婁紶鎴愬姛:", file);
@@ -615,7 +877,7 @@
const onHospitalConfirm = (e) => {
if (e.value && e.value[0]) {
- form.value.treatmenthospitalno = e.value[0].label;
+ form.value.treatmenthospitalname = e.value[0].label;
}
showHospitalPicker.value = false;
};
@@ -629,19 +891,19 @@
const onIdCardTypeConfirm = (e) => {
if (e.value && e.value[0]) {
- form.value.idcardtype = e.value[0].label;
+ form.value.idcardtype = e.value[0].value;
}
showIdCardTypePicker.value = false;
};
-const onDateConfirm = (e) => {
- const date = new Date(e.value);
- form.value.birthday = `${date.getFullYear()}-${(date.getMonth() + 1)
- .toString()
- .padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
- calculateAge();
- showDatePicker.value = false;
-};
+// const onDateConfirm = (e) => {
+// const date = new Date(e.value);
+// form.value.birthday = `${date.getFullYear()}-${(date.getMonth() + 1)
+// .toString()
+// .padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
+// calculateAge();
+// showDatePicker.value = false;
+// };
const onReporterConfirm = (e) => {
if (e.value && e.value[0]) {
@@ -661,19 +923,33 @@
success: (res) => {
if (res.confirm) {
Object.keys(form.value).forEach((key) => {
- if (key !== "donorno") {
+ if (!["id", "caseNo"].includes(key)) {
form.value[key] = "";
}
});
+
+ // 閲嶇疆閫夋嫨鍣ㄧ储寮�
+ hospitalIndex.value = -1;
+ deptIndex.value = -1;
+ nationIndex.value = -1;
+ idCardTypeIndex.value = -1;
+ attachments.value = [];
form.value.nationality = "涓浗";
- generateDonorNo();
+ form.value.isTransport = "1";
+ form.value.terminationCase = 0;
+ form.value.reportStatus = "1";
+
+ if (!isEditMode.value) {
+ generateDonorNo();
+ }
+
uni.showToast({ title: "琛ㄥ崟宸查噸缃�", icon: "success" });
}
},
});
};
-const submitForm = async () => {
+const handleSubmit = async () => {
if (!isFormValid.value) {
uni.showToast({
title: "璇峰~鍐欏鍚嶃�佽瘉浠跺彿鐮佸拰鐤剧梾璇婃柇",
@@ -682,52 +958,162 @@
return;
}
- loading.value = true;
-
try {
- await new Promise((resolve) => setTimeout(resolve, 1500));
+ uni.showLoading({ title: isEditMode.value ? "淇敼涓�..." : "鎻愪氦涓�..." });
- uni.showToast({
- title: "涓婃姤鎴愬姛",
- icon: "success",
- });
+ // 鍑嗗鎻愪氦鏁版嵁
+ const submitData = {
+ ...form.value,
+ age: parseInt(form.value.age) || 0,
+ annexfilesList: attachments.value.map((file) => ({
+ url: file.url,
+ name: file.name,
+ type: file.type,
+ })),
+ phone: form.value.infophone,
+ isTransport: form.value.isTransport || "1",
+ terminationCase: form.value.terminationCase || 0,
+ reportStatus: form.value.reportStatus || "1",
+
+ };
- setTimeout(() => {
- uni.navigateBack();
- }, 1500);
+ let res;
+ if (isEditMode.value) {
+ // 淇敼鎺ュ彛
+ res = await uni.$uapi.post(
+ "/system/donatebaseinforeport/edit",
+ submitData
+ );
+ } else {
+ // 鏂板鎺ュ彛
+ res = await uni.$uapi.post(
+ "/system/donatebaseinforeport/add",
+ submitData
+ );
+ }
+
+ uni.hideLoading();
+
+ if (res.code === 200) {
+ uni.showToast({
+ title: isEditMode.value ? "淇敼鎴愬姛" : "涓婃姤鎴愬姛",
+ icon: "success",
+ });
+
+ // 娓呯┖鏈湴瀛樺偍鐨勮崏绋�
+ removeDraft();
+
+ setTimeout(() => {
+ uni.navigateBack();
+ }, 1500);
+ } else {
+ throw new Error(res.msg || "鎿嶄綔澶辫触");
+ }
} catch (error) {
+ console.error("鎿嶄綔澶辫触:", error);
uni.showToast({
- title: "涓婃姤澶辫触锛岃閲嶈瘯",
+ title: error.message || (isEditMode.value ? "淇敼澶辫触" : "涓婃姤澶辫触"),
icon: "none",
});
} finally {
loading.value = false;
}
};
+const removeDraft = () => {
+ localStorage.removeItem("caseReportDraft");
+};
+// 鍙栨秷澶勭悊
+const handleCancel = () => {
+ uni.navigateBack();
+};
-const loadCaseData = (id) => {
+const loadCaseData = async (id) => {
// 妯℃嫙鍔犺浇缂栬緫鏁版嵁
- form.value = {
- donorno: "DON20241216001",
- treatmenthospitalno: "闈掑矝闀滄箹鍖婚櫌",
- treatmentdeptname: "绁炵粡澶栫",
- name: "寮犱笁",
- nation: "姹夋棌",
- nationality: "涓浗",
- idcardtype: "灞呮皯韬唤璇�",
- idcardno: "370203198510123456",
- sex: "1",
- birthday: "1985-10-12",
- age: "38",
- inpatientno: "ZY20241216001",
- diagnosisname: "鑴戝浼ゅ鑷磋剳姝讳骸",
- bloodtype: "A",
- rhyin: "positive",
- infoname: "鏉庡尰鐢�",
- infophone: "13800138000",
- reporterno: "寮犲尰鐢�",
- reporttime: currentTime.value,
- };
+ // form.value = {
+ // caseNo: "DON20241216001",
+ // treatmenthospitalname: "闈掑矝闀滄箹鍖婚櫌",
+ // treatmentdeptname: "绁炵粡澶栫",
+ // name: "寮犱笁",
+ // nation: "姹夋棌",
+ // nationality: "涓浗",
+ // idcardtype: "灞呮皯韬唤璇�",
+ // idcardno: "370203198510123456",
+ // sex: "1",
+ // birthday: "1985-10-12",
+ // age: "38",
+ // inpatientno: "ZY20241216001",
+ // diagnosisname: "鑴戝浼ゅ鑷磋剳姝讳骸",
+ // bloodtype: "A",
+ // rhyin: "positive",
+ // infoname: "鏉庡尰鐢�",
+ // infophone: "13800138000",
+ // reporterno: "寮犲尰鐢�",
+ // reporttime: currentTime.value,
+ // };
+ try {
+ loading.value = true;
+ const res = await uni.$uapi.get(
+ `/system/donatebaseinforeport/getInfo/${id}`
+ );
+
+ if (res.code === 200 && res.data) {
+ // 濉厖琛ㄥ崟鏁版嵁
+ Object.keys(form.value).forEach((key) => {
+ if (res.data[key] !== undefined && res.data[key] !== null) {
+ form.value[key] = res.data[key];
+ }
+ });
+
+ // 澶勭悊閫夋嫨鍣ㄧ储寮�
+ updatePickerIndexes();
+
+ // 澶勭悊闄勪欢
+ if (res.data.annexfilesList) {
+ attachments.value = res.data.annexfilesList;
+ }
+
+ uni.showToast({
+ title: "鏁版嵁鍔犺浇鎴愬姛",
+ icon: "success",
+ });
+ } else {
+ throw new Error(res.msg || "鏁版嵁鍔犺浇澶辫触");
+ }
+ } catch (error) {
+ console.error("鍔犺浇妗堜緥鏁版嵁澶辫触:", error);
+ uni.showToast({
+ title: "鏁版嵁鍔犺浇澶辫触锛岃閲嶈瘯",
+ icon: "none",
+ });
+ } finally {
+ loading.value = false;
+ }
+};
+// 鏇存柊閫夋嫨鍣ㄧ储寮�
+const updatePickerIndexes = () => {
+ // 鍖荤枟鏈烘瀯绱㈠紩
+ const hospitalIndex = hospitalOptions.value.findIndex(
+ (item) => item.label === form.value.treatmenthospitalname
+ );
+ if (hospitalIndex !== -1) hospitalIndex.value = hospitalIndex;
+
+ // 绉戝绱㈠紩
+ const deptIndex = pickerColumns.value[0].findIndex(
+ (item) => item.label === form.value.treatmentdeptname
+ );
+ if (deptIndex !== -1) deptIndex.value = deptIndex;
+
+ // 姘戞棌绱㈠紩
+ const nationIndex = nationOptions.value.findIndex(
+ (item) => item.label === form.value.nation
+ );
+ if (nationIndex !== -1) nationIndex.value = nationIndex;
+
+ // 璇佷欢绫诲瀷绱㈠紩
+ const idCardTypeIndex = idCardTypeOptions.value.findIndex(
+ (item) => item.value === form.value.idcardtype
+ );
+ if (idCardTypeIndex !== -1) idCardTypeIndex.value = idCardTypeIndex;
};
</script>
<style lang="scss" scoped>
@@ -887,4 +1273,233 @@
}
}
}
+.case-report-container {
+ min-height: 100vh;
+ background: linear-gradient(135deg, #f8fdff 0%, #e8f7f6 100%);
+}
+
+.form-scroll {
+ height: 100vh;
+}
+
+.form-content {
+ padding: 30rpx;
+}
+
+.form-section {
+ background: #fff;
+ border-radius: 20rpx;
+ padding: 30rpx;
+ margin-bottom: 30rpx;
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.06);
+}
+
+.section-header {
+ display: flex;
+ align-items: center;
+ margin-bottom: 30rpx;
+ padding-bottom: 20rpx;
+ border-bottom: 2rpx solid #f0f0f0;
+}
+
+.section-icon {
+ font-size: 32rpx;
+ margin-right: 16rpx;
+}
+
+.section-title {
+ font-size: 32rpx;
+ font-weight: 600;
+ color: #1d1d1f;
+}
+
+.form-grid {
+ display: flex;
+ flex-direction: column;
+ gap: 24rpx;
+}
+
+.form-item {
+ display: flex;
+ flex-direction: column;
+}
+
+.item-label {
+ font-size: 28rpx;
+ color: #1d1d1f;
+ font-weight: 500;
+ margin-bottom: 12rpx;
+
+ &.required::after {
+ content: "*";
+ color: #ff4757;
+ margin-left: 4rpx;
+ }
+}
+
+/* 鏀归�犲悗鐨勯�夋嫨鍣ㄦ牱寮� */
+.picker {
+ height: 88rpx;
+ background: #f5f5f7;
+ border-radius: 12rpx;
+ padding: 0 24rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border: 2rpx solid #e5e5e7;
+
+ text {
+ font-size: 28rpx;
+ color: #1d1d1f;
+
+ &.icon-arrow {
+ font-size: 32rpx;
+ color: #86868b;
+ transform: rotate(90deg);
+ }
+ }
+}
+
+.page-header {
+ padding: 30rpx 0;
+ text-align: center;
+ margin-bottom: 20rpx;
+}
+
+.page-title {
+ font-size: 36rpx;
+ font-weight: 600;
+ color: #1d1d1f;
+}
+
+/* 鍦ㄥ師鏈夋牱寮忓熀纭�涓婃坊鍔� */
+.form-section {
+ position: relative;
+}
+
+.edit-badge {
+ position: absolute;
+ top: 30rpx;
+ right: 30rpx;
+ background: #ff6b35;
+ color: white;
+ padding: 8rpx 16rpx;
+ border-radius: 20rpx;
+ font-size: 24rpx;
+}
+
+/* 鍔犺浇鐘舵�佹牱寮� */
+.loading-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.5);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 9999;
+}
+
+/* 鍝嶅簲寮忚皟鏁� */
+@media (max-width: 768px) {
+ .form-content {
+ padding: 20rpx;
+ }
+
+ .form-section {
+ padding: 20rpx;
+ }
+}
+
+/* 鏀归�犲悗鐨勫崟閫夋寜閽牱寮� */
+.radio-options {
+ display: flex;
+ gap: 40rpx;
+}
+
+.option-item {
+ display: flex;
+ align-items: center;
+ gap: 16rpx;
+
+ .radio-dot {
+ width: 32rpx;
+ height: 32rpx;
+ border: 2rpx solid #e5e5e7;
+ border-radius: 50%;
+ position: relative;
+ }
+
+ .option-label {
+ font-size: 28rpx;
+ color: #1d1d1f;
+ }
+
+ &.active {
+ .radio-dot {
+ border-color: #0f95b0;
+
+ &::after {
+ content: "";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 16rpx;
+ height: 16rpx;
+ background: #0f95b0;
+ border-radius: 50%;
+ }
+ }
+
+ .option-label {
+ color: #0f95b0;
+ }
+ }
+}
+
+.error-text {
+ font-size: 24rpx;
+ color: #ff4757;
+ margin-top: 8rpx;
+}
+
+/* 鍘熸湁鏍峰紡璋冩暣 */
+:deep(.u-input) {
+ border: 2rpx solid #e5e5e7 !important;
+ border-radius: 12rpx !important;
+ padding: 20rpx 24rpx !important;
+ background: #fff !important;
+}
+
+.action-buttons {
+ display: flex;
+ gap: 20rpx;
+ margin-top: 40rpx;
+}
+
+.btn {
+ flex: 1;
+ height: 80rpx;
+ border-radius: 16rpx;
+ font-size: 32rpx;
+ font-weight: 500;
+
+ &.secondary {
+ background: #f5f5f7 !important;
+ color: #1d1d1f !important;
+ }
+
+ &.primary {
+ background: linear-gradient(135deg, #0f95b0, #89c4c1) !important;
+ color: #fff !important;
+
+ &:disabled {
+ background: #c0c0c0 !important;
+ opacity: 0.6;
+ }
+ }
+}
</style>
diff --git a/pages/case/CaseInfo.vue b/pages/case/CaseInfo.vue
index 8ef981e..f817e16 100644
--- a/pages/case/CaseInfo.vue
+++ b/pages/case/CaseInfo.vue
@@ -123,7 +123,7 @@
<text class="step-person" v-if="step.person">缁忓姙浜猴細{{ step.person }}</text>
</view>
</view>
- </view>
+ </view> +
</view>
</view>
diff --git a/pages/case/index.vue b/pages/case/index.vue
index 338f5ea..598f625 100644
--- a/pages/case/index.vue
+++ b/pages/case/index.vue
@@ -124,8 +124,8 @@
<text class="value">{{ caseItem.reviewerName }}</text>
</view>
</view>
- <!-- 鏄剧ず杞繍璇︽儏 -->
- <!-- 鍦� .detail-info 閮ㄥ垎涔嬪悗锛�.footer 閮ㄥ垎涔嬪墠娣诲姞杞繍淇℃伅鍖哄煙 -->
+
+ <!-- 杞繍淇℃伅鍖哄煙 -->
<view class="transport-section">
<view class="transport-info">
<text class="label">杞繍鐘舵��</text>
@@ -137,31 +137,80 @@
</text>
</view>
- <!-- 鏄剧ず杞繍璇︽儏 -->
+ <!-- 鏄剧ず杞繍璇︽儏锛氬彧瑕佹湁杞繍鍗曞彿灏辨樉绀� -->
<view
class="transport-details"
- v-if="caseItem.transportStatus !== 'not_transported'"
+ v-if="caseItem.transportOrderNo && caseItem.transportOrderNo !== ''"
>
<view class="detail-item">
<text class="detail-label">杞繍鍗曞彿</text>
<text class="detail-value">{{ caseItem.transportOrderNo }}</text>
</view>
- <view class="detail-item" v-if="caseItem.transportDetails">
+
+ <view class="detail-item" v-if="caseItem.transportTime">
+ <text class="detail-label">璁″垝杞繍鏃堕棿</text>
+ <text class="detail-value">{{ caseItem.transportTime }}</text>
+ </view>
+
+ <view class="detail-item" v-if="caseItem.transportDetails?.vehicle">
<text class="detail-label">杞繍杞﹁締</text>
<text class="detail-value">{{
caseItem.transportDetails.vehicle
}}</text>
</view>
+
+ <view class="detail-item" v-if="caseItem.transportDetails?.driver">
+ <text class="detail-label">椹鹃┒鍛�</text>
+ <text class="detail-value">{{
+ caseItem.transportDetails.driver
+ }}</text>
+ </view>
+
+ <view class="detail-item" v-if="caseItem.transportDetails?.phone">
+ <text class="detail-label">鑱旂郴鐢佃瘽</text>
+ <text class="detail-value">{{
+ caseItem.transportDetails.phone
+ }}</text>
+ </view>
+
+ <!-- 杞繍涓墠鏄剧ず鐨勫姩鎬佷俊鎭� -->
<view
class="detail-item"
v-if="
- caseItem.transportDetails &&
- caseItem.transportStatus === 'transporting'
+ caseItem.transportStatus === 'transporting' &&
+ caseItem.transportDetails?.currentLocation
"
>
<text class="detail-label">褰撳墠浣嶇疆</text>
<text class="detail-value">{{
caseItem.transportDetails.currentLocation
+ }}</text>
+ </view>
+
+ <view
+ class="detail-item"
+ v-if="
+ caseItem.transportStatus === 'transporting' &&
+ caseItem.transportDetails?.estimatedTime
+ "
+ >
+ <text class="detail-label">棰勮鍒拌揪</text>
+ <text class="detail-value">{{
+ caseItem.transportDetails.estimatedTime
+ }}</text>
+ </view>
+
+ <!-- 瀹屾垚鍚庢樉绀虹殑淇℃伅 -->
+ <view
+ class="detail-item"
+ v-if="
+ caseItem.transportStatus === 'completed' &&
+ caseItem.transportDetails?.completedTime
+ "
+ >
+ <text class="detail-label">瀹屾垚鏃堕棿</text>
+ <text class="detail-value">{{
+ caseItem.transportDetails.completedTime
}}</text>
</view>
</view>
@@ -170,7 +219,7 @@
<view class="transport-actions">
<button
v-if="
- caseItem.transportStatus === 'not_transported' &&
+ !caseItem.transportOrderNo &&
caseItem.status === 'agreed'
"
class="transport-btn primary"
@@ -190,8 +239,11 @@
闇�鍏堝悓鎰忔渚�
</button>
+ <!-- 鍙鏈夎浆杩愬崟鍙峰氨鍙互鏌ョ湅璇︽儏 -->
<button
- v-if="caseItem.transportStatus !== 'not_transported'"
+ v-if="
+ caseItem.transportOrderNo && caseItem.transportOrderNo !== ''
+ "
class="transport-btn secondary"
@tap.stop="viewTransportDetail(caseItem)"
>
@@ -207,6 +259,7 @@
</button>
</view>
</view>
+
<view class="footer">
<view class="action-info">
<text class="label">妗堜緥鐘舵��</text>
@@ -248,9 +301,14 @@
</view>
<!-- 绌虹姸鎬� -->
- <view class="empty-state" v-if="filteredCases.length === 0">
+ <view class="empty-state" v-if="!loading && filteredCases.length === 0">
<image src="/static/empty/no-case.png" mode="aspectFit" />
<text>鏆傛棤鍣ㄥ畼鎹愮尞妗堜緥璁板綍</text>
+ </view>
+
+ <!-- 鍔犺浇鐘舵�� -->
+ <view class="empty-state" v-if="loading">
+ <text>鏁版嵁鍔犺浇涓�...</text>
</view>
</scroll-view>
@@ -275,70 +333,31 @@
</template>
<script setup>
-import { ref, computed } from "vue";
+import { ref, computed, onMounted } from "vue";
import { onLoad, onShow } from "@dcloudio/uni-app";
import { useDict } from "@/utils/dict";
+// 鍝嶅簲寮忔暟鎹�
const dict = ref({});
-const genderOptions = ref([]);
-const educationOptions = ref([]);
+const loading = ref(false);
+const cases = ref([]);
const total = ref(0);
const pageNum = ref(1);
const pageSize = ref(10);
+const hasMore = ref(true);
+const refreshing = ref(false);
// 缁熻鏁版嵁
const stats = ref({
- totalCases: 8,
- readCases: 4,
- agreedCases: 2,
+ totalCases: 0,
+ readCases: 0,
+ agreedCases: 0,
});
// 鎾ゅ洖纭寮圭獥鐩稿叧
const showWithdrawModal = ref(false);
const currentCase = ref({});
-onLoad(async (options) => {
- // 鑾峰彇瀛楀吀鏁版嵁
- dict.value = await useDict(
- "sys_IDType",
- "sys_user_sex",
- "sys_BloodType",
- "sys_DiseaseType"
- );
-
- // 鍒濆鍖栭�夐」鏁版嵁
- initOptions();
- donatebaseinforeportList();
- donateTotal();
-});
-onShow(() => {
- // 杩欓噷鍙互娣诲姞浠庤浆杩愰〉闈㈣繑鍥炴椂鐨勬暟鎹埛鏂伴�昏緫
- // 渚嬪妫�鏌ユ湰鍦板瓨鍌ㄤ腑鏄惁鏈夐渶瑕佹洿鏂扮殑杞繍鐘舵��
- const transportUpdate = uni.getStorageSync("transportStatusUpdate");
- if (transportUpdate) {
- updateTransportStatus(transportUpdate.orderNo, transportUpdate.status);
- uni.removeStorageSync("transportStatusUpdate");
- }
-});
-
-// 鍒濆鍖栭�夐」鏁版嵁鐨勬柟娉�
-const initOptions = () => {
- genderOptions.value = dict.value.sys_IDType || [];
- educationOptions.value = dict.value.sys_user_sex || [];
-};
-const donatebaseinforeportList = async () => {
- const params = {
- pageNum: pageNum.value,
- pageSize: pageSize.value,
- };
- const res = await uni.$uapi.post("/system/donatebaseinforeport/list", params);
- total.value = res.total;
- console.log(res.records, "11");
-};
-const donateTotal = async () => {
- const res = await uni.$uapi.post("/system/donatebaseinforeport/getTotal");
- console.log(res);
-};
// 绛涢�夌浉鍏�
const caseTypes = [
{ label: "鍏ㄩ儴", value: "all" },
@@ -350,186 +369,7 @@
const currentType = ref("all");
const startDate = ref("");
const endDate = ref("");
-// 妗堜緥璁板綍鏁版嵁 - 澧炲姞鏇村鏁版嵁[1,4](@ref)
-const cases = ref([
- {
- id: 1,
- donorNo: "DON20240325001",
- hospitalName: "闈掑矝闀滄箹鍖婚櫌",
- hospitalLogo: "/static/hospital/kiang-wu.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "寮犱笁",
- idCardNo: "370203198510123456",
- gender: "鐢�",
- age: 38,
- bloodType: "A鍨�",
- diagnosis: "鑴戝浼ゅ鑷磋剳姝讳骸",
- reportTime: "2024-03-25 09:30",
- reporterName: "鏉庡尰鐢�",
- status: "agreed",
- statusText: "宸插悓鎰�",
- departmentName: "绁炵粡澶栫",
- contactPerson: "鐜嬫姢澹�",
- contactPhone: "13800138000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "not_transported", // 杞繍鐘舵�侊細not_transported-鏈浆杩�, transporting-杞繍涓�, completed-宸插畬鎴�
- transportOrderNo: "", // 杞繍鍗曞彿
- transportTime: "", // 杞繍鏃堕棿
- transportDetails: null, // 杞繍璇︽儏
- },
- {
- id: 2,
- donorNo: "DON20240320002",
- hospitalName: "闈掑矝绉戝ぇ鍖婚櫌",
- hospitalLogo: "/static/hospital/must.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "鏉庡洓",
- idCardNo: "370205197805207890",
- gender: "濂�",
- age: 45,
- bloodType: "O鍨�",
- diagnosis: "鎬ユ�у績鑲屾姝�",
- reportTime: "2024-03-20 15:00",
- reporterName: "寮犲尰鐢�",
- status: "read",
- statusText: "宸查槄璇�",
- reviewTime: "2024-03-21 10:15",
- reviewerName: "瀹℃牳涓撳憳A",
- departmentName: "蹇冨唴绉�",
- contactPerson: "璧垫姢澹�",
- contactPhone: "13900139000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "transporting", // 杞繍涓�
- transportOrderNo: "TR20240321001",
- transportTime: "2024-03-21 14:30",
- transportDetails: {
- driver: "寮犲笀鍌�",
- vehicle: "椴丅12345",
- phone: "13800138000",
- estimatedTime: "2灏忔椂",
- currentLocation: "闈掑矝甯傚崡鍖�",
- },
- },
- {
- id: 3,
- donorNo: "DON20240318003",
- hospitalName: "闈掑矝澶у闄勫睘鍖婚櫌",
- hospitalLogo: "/static/hospital/qingda.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "鐜嬩簲",
- idCardNo: "370211197212153214",
- gender: "鐢�",
- age: 51,
- bloodType: "B鍨�",
- diagnosis: "棰呭唴鍑鸿",
- reportTime: "2024-03-18 14:20",
- reporterName: "鍒樺尰鐢�",
- status: "agreed",
- statusText: "宸插悓鎰�",
- reviewTime: "2024-03-19 09:45",
- reviewerName: "瀹℃牳涓撳憳B",
- departmentName: "绁炵粡鍐呯",
- contactPerson: "閽辨姢澹�",
- contactPhone: "13600136000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "completed", // 宸插畬鎴�
- transportOrderNo: "TR20240319001",
- transportTime: "2024-03-19 11:20",
- transportDetails: {
- driver: "鏉庡笀鍌�",
- vehicle: "椴丅67890",
- phone: "13900139000",
- completedTime: "2024-03-19 13:45",
- distance: "156鍏噷",
- },
- },
- {
- id: 4,
- donorNo: "DON20240315004",
- hospitalName: "闈掑矝甯傜珛鍖婚櫌",
- hospitalLogo: "/static/hospital/shili.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "璧靛叚",
- idCardNo: "370205198803274561",
- gender: "濂�",
- age: 36,
- bloodType: "AB鍨�",
- diagnosis: "澶氬櫒瀹樺姛鑳借“绔�",
- reportTime: "2024-03-15 16:40",
- reporterName: "闄堝尰鐢�",
- status: "rejected",
- statusText: "宸查┏鍥�",
- reviewTime: "2024-03-16 11:20",
- reviewerName: "瀹℃牳涓撳憳C",
- rejectReason: "璧勬枡涓嶅畬鏁达紝闇�琛ュ厖瀹跺睘鍚屾剰涔�",
- departmentName: "ICU",
- contactPerson: "瀛欐姢澹�",
- contactPhone: "13700137000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "not_transported", // 杞繍鐘舵�侊細not_transported-鏈浆杩�, transporting-杞繍涓�, completed-宸插畬鎴�
- transportOrderNo: "", // 杞繍鍗曞彿
- transportTime: "", // 杞繍鏃堕棿
- transportDetails: null, // 杞繍璇︽儏
- },
- {
- id: 5,
- donorNo: "DON20240310005",
- hospitalName: "闈掑矝鐪肩鍖婚櫌",
- hospitalLogo: "/static/hospital/yanke.jpg",
- caseType: "瑙掕啘鎹愮尞妗堜緥",
- donorName: "瀛欎竷",
- idCardNo: "370203199205187896",
- gender: "鐢�",
- age: 32,
- bloodType: "O鍨�",
- diagnosis: "瑙嗙綉鑶滄瘝缁嗚優鐦�",
- reportTime: "2024-03-10 08:15",
- reporterName: "鐪肩寮犲尰鐢�",
- status: "read",
- statusText: "宸查槄璇�",
- reviewTime: "2024-03-11 14:30",
- reviewerName: "瀹℃牳涓撳憳A",
- departmentName: "鐪肩",
- contactPerson: "鍛ㄦ姢澹�",
- contactPhone: "13500135000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傜溂搴�",
- transportStatus: "not_transported", // 杞繍鐘舵�侊細not_transported-鏈浆杩�, transporting-杞繍涓�, completed-宸插畬鎴�
- transportOrderNo: "", // 杞繍鍗曞彿
- transportTime: "", // 杞繍鏃堕棿
- transportDetails: null, // 杞繍璇︽儏
- },
- {
- id: 6,
- donorNo: "DON20240305006",
- hospitalName: "闈掑矝鍎跨鍖婚櫌",
- hospitalLogo: "/static/hospital/children.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "鍛ㄥ叓",
- idCardNo: "370211201802153248",
- gender: "濂�",
- age: 6,
- bloodType: "A鍨�",
- diagnosis: "鍏堝ぉ鎬у績鑴忕梾",
- reportTime: "2024-03-05 11:25",
- reporterName: "鍎跨鏉庡尰鐢�",
- status: "reported",
- statusText: "宸蹭笂鎶�",
- departmentName: "鍎跨ICU",
- contactPerson: "鍚存姢澹�",
- contactPhone: "13400134000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "not_transported", // 杞繍鐘舵�侊細not_transported-鏈浆杩�, transporting-杞繍涓�, completed-宸插畬鎴�
- transportOrderNo: "", // 杞繍鍗曞彿
- transportTime: "", // 杞繍鏃堕棿
- transportDetails: null, // 杞繍璇︽儏
- },
-]);
+
// 杞繍鐘舵�佹槧灏�
const transportStatusMap = {
not_transported: {
@@ -541,16 +381,186 @@
completed: { text: "宸插畬鎴�", color: "success", class: "completed" },
};
-// 绛涢�夎褰昜3](@ref)
+// 鏁版嵁鏄犲皠鍑芥暟
+// 鏁版嵁鏄犲皠鍑芥暟
+const mapApiDataToCaseItem = (apiData) => {
+ const statusMap = {
+ 1: { status: "reported", statusText: "宸蹭笂鎶�" },
+ 2: { status: "read", statusText: "宸查槄璇�" },
+ 3: { status: "agreed", statusText: "宸插悓鎰�" },
+ 4: { status: "rejected", statusText: "宸查┏鍥�" },
+ };
+
+ const transportStatusMap = {
+ 1: "not_transported",
+ 2: "transporting",
+ 3: "completed",
+ 4: "not_transported",
+ 5: "not_transported",
+ };
+
+ const statusInfo = statusMap[apiData.reportStatus] || statusMap["1"];
+
+ // 澶勭悊杞繍淇℃伅 - 鏇村姞鍋ュ.鐨勫鐞�
+ let transportDetails = null;
+ let transportStatus = "not_transported";
+ let transportOrderNo = "";
+ let transportTime = "";
+
+ // 浼樺厛浠� serviceTransport 鑾峰彇杞繍淇℃伅
+ if (
+ apiData.serviceTransport &&
+ Array.isArray(apiData.serviceTransport) &&
+ apiData.serviceTransport.length > 0
+ ) {
+ const transport = apiData.serviceTransport[0];
+ transportDetails = {
+ driver: transport.driver || "",
+ vehicle: transport.vehicle || "",
+ phone: transport.driverPhone || "",
+ currentLocation: transport.transportStartPlace || "",
+ estimatedTime: transport.estimatedTime || "",
+ completedTime: transport.completedTime || "",
+ };
+ transportStatus =
+ transportStatusMap[transport.transitStatus] || "not_transported";
+ transportOrderNo = transport.id || "";
+ transportTime = transport.transportStartTime || "";
+ }
+
+ // 濡傛灉鐩存帴鏈夎浆杩愪俊鎭紝涔熻繘琛屽鐞�
+ if (apiData.transportOrderNo) {
+ transportOrderNo = apiData.transportOrderNo;
+ }
+ if (apiData.transportStartTime) {
+ transportTime = apiData.transportStartTime;
+ }
+ if (apiData.transitStatus) {
+ transportStatus =
+ transportStatusMap[apiData.transitStatus] || "not_transported";
+ }
+
+ return {
+ id: apiData.id || apiData.donatebaseinfoReportId,
+ donorNo: apiData.caseNo,
+ hospitalName: apiData.treatmenthospitalname,
+ hospitalLogo: "/static/hospital/default.jpg",
+ caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
+ donorName: apiData.name,
+ idCardNo: apiData.idcardno,
+ gender:
+ dict.value.sys_user_sex?.find((item) => item.dictValue === apiData.sex)
+ ?.dictLabel || apiData.sex,
+ age: apiData.age,
+ bloodType:
+ dict.value.sys_BloodType?.find(
+ (item) => item.dictValue === apiData.bloodType
+ )?.dictLabel || apiData.bloodType,
+ diagnosis: apiData.diagnosisname,
+ reportTime: apiData.reporttime,
+ reporterName: apiData.reportername,
+ reviewTime: apiData.reviewTime,
+ reviewerName: apiData.reviewerName,
+ departmentName: apiData.treatmentdeptname,
+ contactPerson: apiData.userName || apiData.contactPerson,
+ contactPhone: apiData.phone,
+ ...statusInfo,
+ transportStatus: transportStatus,
+ transportOrderNo: transportOrderNo,
+ transportTime: transportTime,
+ transportDetails: transportDetails,
+ };
+};
+
+// 鐢熷懡鍛ㄦ湡
+onLoad(async (options) => {
+ // 鑾峰彇瀛楀吀鏁版嵁
+ dict.value = await useDict(
+ "sys_IDType",
+ "sys_user_sex",
+ "sys_BloodType",
+ "sys_DiseaseType"
+ );
+
+ // 鍔犺浇鏁版嵁
+ await loadInitialData();
+});
+
+onShow(() => {
+ const transportUpdate = uni.getStorageSync("transportStatusUpdate");
+ if (transportUpdate) {
+ updateTransportStatus(transportUpdate.orderNo, transportUpdate.status);
+ uni.removeStorageSync("transportStatusUpdate");
+ }
+});
+
+// 鏁版嵁鍔犺浇鍑芥暟
+const loadInitialData = async () => {
+ loading.value = true;
+ try {
+ await Promise.all([donatebaseinforeportList(), donateTotal()]);
+ } catch (error) {
+ console.error("鍒濆鍖栨暟鎹け璐�:", error);
+ } finally {
+ loading.value = false;
+ }
+};
+
+// 鑾峰彇妗堜緥鍒楄〃
+const donatebaseinforeportList = async () => {
+ try {
+ const params = {
+ pageNum: pageNum.value,
+ pageSize: pageSize.value,
+ };
+
+ const res = await uni.$uapi.post(
+ "/system/donatebaseinforeport/list",
+ params
+ );
+ console.log(res, "res");
+
+ const mappedData = res.map((item) => mapApiDataToCaseItem(item));
+
+ if (pageNum.value === 1) {
+ cases.value = mappedData;
+ } else {
+ cases.value = [...cases.value, ...mappedData];
+ }
+
+ hasMore.value = pageNum.value * pageSize.value < res.total;
+ total.value = res.total;
+ } catch (error) {
+ console.error("鑾峰彇妗堜緥鍒楄〃澶辫触:", error);
+ uni.showToast({
+ title: "缃戠粶璇锋眰澶辫触",
+ icon: "none",
+ });
+ }
+};
+
+// 鑾峰彇缁熻鏁版嵁
+const donateTotal = async () => {
+ try {
+ const res = await uni.$uapi.post("/system/donatebaseinforeport/getTotal");
+ stats.value = {
+ totalCases: res["1"] || 0,
+ readCases: res["2"] || 0,
+ agreedCases: res["3"] || 0,
+ };
+ } catch (error) {
+ console.error("鑾峰彇缁熻鏁版嵁澶辫触:", error);
+ }
+};
+
+// 璁$畻灞炴�э細绛涢�夎褰�
const filteredCases = computed(() => {
let result = cases.value;
- // 鐘舵�佺瓫閫�
if (currentType.value !== "all") {
result = result.filter((caseItem) => caseItem.status === currentType.value);
}
- // 鏃ユ湡绛涢��
if (startDate.value && endDate.value) {
result = result.filter((caseItem) => {
const caseDate = caseItem.reportTime.split(" ")[0];
@@ -561,47 +571,11 @@
return result;
});
-// 鍒嗛〉鐩稿叧
-const hasMore = ref(true);
-const refreshing = ref(false);
-// 鍒涘缓杞繍鍗�
-const createTransportOrder = (caseItem) => {
- console.log(caseItem);
-
- uni.navigateTo({
- url: `/pages/case/transferinfo?caseId=${caseItem.id}&donorNo=${caseItem.donorNo}`,
- });
-};
-
-// 鏌ョ湅杞繍璇︽儏
-const viewTransportDetail = (caseItem) => {
- uni.navigateTo({
- url: `/pages/transport/detail?orderNo=${caseItem.transportOrderNo}`,
- });
-};
-
-// 瀹炴椂璺熻釜
-const trackTransport = (caseItem) => {
- uni.navigateTo({
- url: `/pages/transport/track?orderNo=${caseItem.transportOrderNo}`,
- });
-};
-
-// 鏇存柊杞繍鐘舵�侊紙鐢ㄤ簬浠庤浆杩愰〉闈㈣繑鍥炴椂鍒锋柊鏁版嵁锛�
-const updateTransportStatus = (orderNo, newStatus) => {
- const caseItem = cases.value.find(
- (item) => item.transportOrderNo === orderNo
- );
- if (caseItem) {
- caseItem.transportStatus = newStatus;
- }
-};
-// 閫夋嫨绫诲瀷
+// 浜嬩欢澶勭悊鍑芥暟
const selectType = (type) => {
currentType.value = type;
};
-// 鏃ユ湡閫夋嫨
const onStartDateChange = (e) => {
startDate.value = e.detail.value;
};
@@ -610,28 +584,67 @@
endDate.value = e.detail.value;
};
-// 鏌ョ湅璇︽儏
+// 鍒锋柊鍜屽姞杞芥洿澶�
+const onRefresh = async () => {
+ refreshing.value = true;
+ pageNum.value = 1;
+ await donatebaseinforeportList();
+ setTimeout(() => {
+ refreshing.value = false;
+ }, 1000);
+};
+
+const onLoadMore = async () => {
+ if (!hasMore.value || loading.value) return;
+ pageNum.value += 1;
+ await donatebaseinforeportList();
+};
+
+// 鍏朵粬鍔熻兘鍑芥暟锛堜繚鎸佸師鏈夐�昏緫锛�
+const createTransportOrder = (caseItem) => {
+ uni.navigateTo({
+ url: `/pages/case/transferinfo?caseId=${caseItem.id}&donorNo=${caseItem.donorNo}`,
+ });
+};
+
+const viewTransportDetail = (caseItem) => {
+ uni.navigateTo({
+ url: `/pages/transport/detail?orderNo=${caseItem.transportOrderNo}`,
+ });
+};
+
+const trackTransport = (caseItem) => {
+ uni.navigateTo({
+ url: `/pages/transport/track?orderNo=${caseItem.transportOrderNo}`,
+ });
+};
+
+const updateTransportStatus = (orderNo, newStatus) => {
+ const caseItem = cases.value.find(
+ (item) => item.transportOrderNo === orderNo
+ );
+ if (caseItem) {
+ caseItem.transportStatus = newStatus;
+ }
+};
+
const viewDetail = (caseItem) => {
uni.navigateTo({
url: `/pages/case/detail?id=${caseItem.id}`,
});
};
-// 鎾ゅ洖妗堜緥[7](@ref)
const withdrawCase = (caseItem) => {
currentCase.value = caseItem;
showWithdrawModal.value = true;
};
-// 纭鎾ゅ洖
const confirmWithdraw = () => {
const index = cases.value.findIndex(
(item) => item.id === currentCase.value.id
);
if (index !== -1) {
- // 浠庡垪琛ㄤ腑绉婚櫎宸叉挙鍥炵殑妗堜緥[4](@ref)
cases.value.splice(index, 1);
- // 鏇存柊缁熻鏁版嵁
stats.value.totalCases -= 1;
uni.showToast({
title: "鎾ゅ洖鎴愬姛",
@@ -641,46 +654,20 @@
showWithdrawModal.value = false;
};
-// 鍙栨秷鎾ゅ洖
const cancelWithdraw = () => {
showWithdrawModal.value = false;
};
-// 鏌ョ湅璇︽儏
const viewDetails = (caseItem) => {
uni.navigateTo({
url: `/pages/case/detail?id=${caseItem.id}`,
});
};
-// 缂栬緫妗堜緥
const editCase = (caseItem) => {
uni.navigateTo({
url: `/pages/case/edit?id=${caseItem.id}`,
});
-};
-
-// 涓嬫媺鍒锋柊
-const onRefresh = () => {
- refreshing.value = true;
- loadCases();
- setTimeout(() => {
- refreshing.value = false;
- }, 1000);
-};
-
-// 鍔犺浇鏇村
-const onLoadMore = () => {
- if (!hasMore.value) return;
- loadCases();
-};
-
-// 鍔犺浇璁板綍
-const loadCases = () => {
- // 杩欓噷璋冪敤API鍔犺浇鏁版嵁
- setTimeout(() => {
- hasMore.value = false;
- }, 1000);
};
</script>
diff --git a/pages/login/Login.vue b/pages/login/Login.vue
index 1ef8054..e4e1d59 100644
--- a/pages/login/Login.vue
+++ b/pages/login/Login.vue
@@ -1,7 +1,7 @@
<template>
<view class="login-container">
<view class="header">
- <image src="/static/avatar/logo.jpg" class="logo" />
+ <image src="/static/avatar/logo.png" class="logo" />
<text class="hospital-name">闈掑矝OPO</text>
</view>
@@ -110,8 +110,10 @@
// 鍒ゆ柇鏄惁涓簍abBar椤甸潰
const tabBarPages = ["/pages/index/index", "/pages/appointment/index", "/pages/consultation/index", "/pages/my/index"];
if (tabBarPages.includes(redirects)) {
+ console.log(redirects,'棰勮矾鐢�1');
uni.switchTab({ url: redirects });
} else {
+ console.log(redirects,'棰勮矾鐢�2');
uni.redirectTo({ url: redirects });
}
} catch (err) {
diff --git a/static/avatar/logo.png b/static/avatar/logo.png
new file mode 100644
index 0000000..3eeb31f
--- /dev/null
+++ b/static/avatar/logo.png
Binary files differ
diff --git a/static/avatar/logo.jpg b/static/avatar/logo1.jpg
similarity index 100%
rename from static/avatar/logo.jpg
rename to static/avatar/logo1.jpg
Binary files differ
diff --git a/static/avatar/yisn.jpg b/static/avatar/yisn.jpg
new file mode 100644
index 0000000..e684b30
--- /dev/null
+++ b/static/avatar/yisn.jpg
Binary files differ
diff --git a/static/avatar/yisna.jpg b/static/avatar/yisna.jpg
new file mode 100644
index 0000000..ac4c561
--- /dev/null
+++ b/static/avatar/yisna.jpg
Binary files differ
diff --git a/uni_modules/uview-plus/libs/util/route.js b/uni_modules/uview-plus/libs/util/route.js
index 4e474f5..c3ff750 100644
--- a/uni_modules/uview-plus/libs/util/route.js
+++ b/uni_modules/uview-plus/libs/util/route.js
@@ -99,11 +99,15 @@
})
}
if (config.type == 'redirectTo' || config.type == 'redirect') {
+ console.log(url,'杩涘叆璺敱');
+
uni.redirectTo({
url
})
}
if (config.type == 'switchTab' || config.type == 'tab') {
+ console.log(url,'杩涘叆璺敱');
+
uni.switchTab({
url
})
--
Gitblit v1.9.3