From 4ddfa807643c73ff90840b0b65a5118741e12b48 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期六, 09 五月 2026 18:06:13 +0800
Subject: [PATCH] 移动端维护
---
pages/case/transferinfo.vue | 361 ++++++++++++++++++++++++++++++++------------------
1 files changed, 229 insertions(+), 132 deletions(-)
diff --git a/pages/case/transferinfo.vue b/pages/case/transferinfo.vue
index 83713e6..54ffe7e 100644
--- a/pages/case/transferinfo.vue
+++ b/pages/case/transferinfo.vue
@@ -4,7 +4,7 @@
<scroll-view scroll-y class="form-scroll" :show-scrollbar="false">
<view class="form-content">
<!-- 妗堜緥淇℃伅鍗$墖 -->
- <view class="form-section" v-if="transportData.caseNo">
+ <view class="form-section" v-if="transportData.reportId">
<view class="section-header">
<view class="section-icon">馃搵</view>
<text class="section-title">鍏宠仈妗堜緥淇℃伅</text>
@@ -54,7 +54,7 @@
</view>
<view class="form-grid">
- <view class="form-item">
+ <!-- <view class="form-item">
<text class="item-label">杞繍鍗曞彿</text>
<u-input
v-model="transportData.reportId"
@@ -63,7 +63,7 @@
:disabledColor="disabledColor"
border="none"
/>
- </view>
+ </view> -->
<view class="form-item">
<text class="item-label required">鍑哄彂鍦扮偣</text>
@@ -95,29 +95,21 @@
<view class="form-item">
<text class="item-label">杞繍鐘舵��</text>
- <u-select
- v-model="statusSelectVisible"
- :list="statusOptions"
- :default-value="[statusIndex]"
- :confirm-text="'纭畾'"
- :cancel-text="'鍙栨秷'"
- @confirm="onStatusConfirm"
- :disabled="!isEdit"
+ <view
+ class="picker-trigger"
+ @click="isEdit && handleStatusClick()"
+ :class="{ disabled: !isEdit }"
>
- <template #default>
- <view class="picker-trigger">
- <text>{{
- getTransportStatusText(transportData.transitStatus)
- }}</text>
- <u-icon
- v-if="isEdit"
- name="arrow-down"
- size="16"
- color="#999"
- ></u-icon>
- </view>
- </template>
- </u-select>
+ <text>{{
+ getTransportStatusText(transportData.transitStatus)
+ }}</text>
+ <u-icon
+ v-if="isEdit"
+ name="arrow-down"
+ size="16"
+ color="#999"
+ ></u-icon>
+ </view>
</view>
<view class="form-item">
@@ -249,47 +241,6 @@
</view>
</view>
- <!-- 闄勪欢淇℃伅 -->
- <view
- class="form-section"
- v-if="
- transportData.annexfilesList &&
- transportData.annexfilesList.length > 0
- "
- >
- <view class="section-header">
- <view class="section-icon">馃搸</view>
- <text class="section-title"
- >闄勪欢淇℃伅 ({{ transportData.annexfilesList.length }})</text
- >
- </view>
-
- <view class="attachment-list">
- <view
- v-for="(file, index) in transportData.annexfilesList"
- :key="index"
- class="attachment-item"
- @click="previewFile(file)"
- >
- <view class="file-info">
- <u-icon
- name="file-text"
- color="#409EFF"
- size="20"
- class="file-icon"
- ></u-icon>
- <view class="file-details">
- <text class="file-name">{{ file.fileName }}</text>
- <text class="file-time">{{
- formatTime(file.createTime)
- }}</text>
- </view>
- </view>
- <u-icon name="arrow-right" color="#999" size="16"></u-icon>
- </view>
- </view>
- </view>
-
<!-- 澶囨敞淇℃伅 -->
<view class="form-section">
<view class="section-header">
@@ -334,9 +285,9 @@
>
瀹屾垚杞繍
</u-button>
- <u-button v-if="canDelete" class="btn error" @click="handleDelete">
+ <!-- <u-button v-if="canDelete" class="btn error" @click="handleDelete">
鍒犻櫎
- </u-button>
+ </u-button> -->
</template>
<!-- 缂栬緫妯″紡 -->
@@ -354,7 +305,15 @@
</view>
</view>
</scroll-view>
-
+ <attachment-upload
+ ref="attachment"
+ :files="attachments"
+ :readonly="isReadonly"
+ :maxCount="5"
+ @update:files="handleFilesUpdate"
+ @upload-base="handleBaseUpload"
+ @preview="handlePreview"
+ />
<!-- 鏃堕棿閫夋嫨鍣� -->
<u-datetime-picker
:show="showTimePicker"
@@ -364,28 +323,46 @@
@cancel="showTimePicker = false"
title="閫夋嫨鍑哄彂鏃堕棿"
></u-datetime-picker>
-
+ <!-- 鐘舵�侀�夋嫨鍣� -->
+ <u-picker
+ :show="statusPickerVisible"
+ :columns="[statusLabels]"
+ :defaultIndex="[statusCurrentIndex]"
+ keyName="label"
+ @confirm="onStatusPickerConfirm"
+ @cancel="statusPickerVisible = false"
+ title="璇烽�夋嫨杞繍鐘舵��"
+ ></u-picker>
<!-- 鍔犺浇鐘舵�� -->
<u-loading-icon :show="loading" :text="loadingText"></u-loading-icon>
</view>
</template>
<script setup>
-import { ref, computed, onMounted } from "vue";
+import { ref, computed, onMounted,watch } from "vue";
+import attachmentUpload from "@/components/attachment";
+import { useUserStore } from "@/stores/user";
+
import { onLoad } from "@dcloudio/uni-app";
// 瀛楀吀鏁版嵁
const dict = ref({});
// 鏁版嵁
-const transportData = ref({});
+const transportData = ref({
+ annexfilesList: [], // 闄勪欢鏂囦欢鍦板潃闆嗗悎
+});
const loading = ref(false);
const saving = ref(false);
const isEdit = ref(false);
+const statusPickerVisible = ref(false);
+const statusCurrentIndex = ref(0);
const transportId = ref(null);
const showTimePicker = ref(false);
const departureTimeValue = ref(0);
const statusSelectVisible = ref(false);
+const isReadonly = ref(false);
+const attachments = ref([]);
// 瀛楀吀閫夐」
const statusOptions = ref([
@@ -436,14 +413,35 @@
return true; // 鏍规嵁瀹為檯鏉冮檺鎺у埗
});
-// 璁$畻绱㈠紩
-const statusIndex = computed(() => {
- if (!transportData.value.transitStatus) return 0;
- return statusOptions.value.findIndex(
- (item) => item.value === transportData.value.transitStatus,
- );
+// 淇敼鎴栨坊鍔犺绠楀睘鎬�
+const statusLabels = computed(() => {
+ return statusOptions.value.map((item) => item.label);
});
+// 淇敼 statusIndex 璁$畻灞炴��
+const statusIndex = computed(() => {
+ if (!transportData.value.transitStatus) return 0;
+ const index = statusOptions.value.findIndex(
+ (item) => item.value == transportData.value.transitStatus,
+ );
+ return index >= 0 ? index : 0;
+});
+
+// 娣诲姞鐩戝惉锛屽綋杞繍鐘舵�佸彉鍖栨椂鏇存柊褰撳墠绱㈠紩
+watch(
+ () => transportData.value.transitStatus,
+ (newVal) => {
+ if (newVal !== undefined && newVal !== null) {
+ const index = statusOptions.value.findIndex(
+ (item) => item.value == newVal,
+ );
+ if (index >= 0) {
+ statusCurrentIndex.value = index;
+ }
+ }
+ },
+ { immediate: true },
+);
onLoad(async (options) => {
if (options.id) {
transportId.value = options.id;
@@ -453,16 +451,39 @@
isEdit.value = true;
await initNewTransport(options.caseId, options.caseNo);
}
+
+ // 纭繚鐘舵�佺储寮曟纭垵濮嬪寲
+ if (transportData.value.transitStatus !== undefined) {
+ const index = statusOptions.value.findIndex(
+ (item) => item.value == transportData.value.transitStatus,
+ );
+ statusCurrentIndex.value = index >= 0 ? index : 0;
+ }
});
// 鍔犺浇杞繍鍗曟暟鎹�
const loadTransportData = async (id) => {
loading.value = true;
try {
- const res = await uni.$uapi.post(`/project/transport/list`, { id: id });
+ const res = await uni.$uapi.get(`/project/transport/getInfo/${id}`);
- if (res) {
- transportData.value = res[0];
+ if (res.data) {
+ transportData.value = res.data;
+
+ if (res.data.annexfilesList) {
+ attachments.value = res.data.annexfilesList;
+ attachments.value.forEach((item) => {
+ (item.url = item.opath), (item.name = item.fileName);
+ });
+ }
+
+ // 鏇存柊鐘舵�佺储寮�
+ if (transportData.value.transitStatus !== undefined) {
+ const index = statusOptions.value.findIndex(
+ (item) => item.value == transportData.value.transitStatus,
+ );
+ statusCurrentIndex.value = index >= 0 ? index : 0;
+ }
} else {
throw new Error(res.msg || "鏁版嵁鍔犺浇澶辫触");
}
@@ -482,26 +503,28 @@
try {
// 濡傛灉鏈夋渚婭D锛屽姞杞芥渚嬩俊鎭�
if (caseId) {
- const res = await uni.$uapi.post(
- `/project/transport/list`,
- { id: caseId },
+ const res = await uni.$uapi.get(
+ `/project/donatebaseinforeport/getInfo/${caseId}`,
);
- if (res) {
- const caseData = res[0];
+ if (res.data) {
+ const caseData = res.data;
+ console.log(caseData);
+
transportData.value = {
...transportData.value,
- caseNo: caseNo || caseData.caseNo,
- patName: caseData.patName,
- sex: caseData.sex,
- age: caseData.age,
- diagnosisname: caseData.diagnosisname,
- treatmentHospitalName: caseData.treatmenthospitalname,
- transitStatus: 1, // 寰呰浆杩�
- createTime: new Date()
- .toISOString()
- .replace("T", " ")
- .substring(0, 19),
+ caseNo: caseData.caseNo || "",
+ patName: caseData.name || "",
+ sex: caseData.sex || "",
+ age: caseData.age || "",
+ reportId: caseData.id || null,
+ diagnosisname: caseData.diagnosisname || "",
+ treatmentHospitalName: caseData.treatmenthospitalname || "",
+ treatmentDeptName: caseData.treatmentdeptname || "",
+ // 鍙互璁剧疆涓�浜涢粯璁ゅ��
+ transportStartPlace: caseData.treatmenthospitalname || "",
+ contactPerson: caseData.coordinatorName || "",
};
+ console.log(transportData.value, "transportData.value");
}
} else {
transportData.value = {
@@ -560,6 +583,7 @@
// 鏃堕棿纭
const onTimeConfirm = (e) => {
const date = new Date(e.value);
+ // 娣诲姞绉掔殑閮ㄥ垎
transportData.value.transportStartTime = `${date.getFullYear()}-${(
date.getMonth() + 1
)
@@ -567,16 +591,26 @@
.padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")} ${date
.getHours()
.toString()
- .padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}`;
+ .padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${date
+ .getSeconds()
+ .toString()
+ .padStart(2, "0")}`; // 娣诲姞绉�
+
showTimePicker.value = false;
};
-// 鐘舵�佺‘璁�
-const onStatusConfirm = (e) => {
- if (e[0]) {
- transportData.value.transitStatus = e[0].value;
+// 鍒犻櫎鍘熸潵鐨� onStatusConfirm 鍑芥暟锛屾坊鍔犳柊鐨勫嚱鏁�
+const handleStatusClick = () => {
+ if (!isEdit.value) return;
+ statusPickerVisible.value = true;
+};
+
+const onStatusPickerConfirm = (e) => {
+ const index = e.indexs[0];
+ if (statusOptions.value[index]) {
+ transportData.value.transitStatus = statusOptions.value[index].value;
}
- statusSelectVisible.value = false;
+ statusPickerVisible.value = false;
};
// 棰勮鏂囦欢
@@ -641,10 +675,18 @@
saving.value = true;
try {
+ // const submitData = {
+ // ...transportData.value,
+
+ // };
const submitData = {
...transportData.value,
+ annexfilesList: attachments.value.map((file) => ({
+ path: file.url,
+ fileName: file.name,
+ type: file.type,
+ })),
};
-
let res;
if (transportId.value) {
// 淇敼
@@ -737,9 +779,15 @@
const updateData = {
id: transportId.value,
transitStatus: newStatus,
+ ...transportData.value,
+ annexfilesList: attachments.value.map((file) => ({
+ path: file.url,
+ fileName: file.name,
+ type: file.type,
+ })),
};
- const res = await uni.$uapi.post("/system/transport/edit", updateData);
+ const res = await uni.$uapi.post("/project/transport/edit", updateData);
if (res.code === 200) {
uni.showToast({ title: `${actionName}鎴愬姛`, icon: "success" });
@@ -753,32 +801,61 @@
}
};
-// 鍒犻櫎杞繍鍗�
-const handleDelete = () => {
- uni.showModal({
- title: "纭鍒犻櫎",
- content: `纭畾瑕佸垹闄よ浆杩愬崟 ${transportData.value.reportId} 鍚楋紵`,
- success: async (res) => {
- if (res.confirm) {
- try {
- const result = await uni.$uapi.delete(
- `/system/transport/${transportId.value}`,
- );
- if (result.code === 200) {
- uni.showToast({ title: "鍒犻櫎鎴愬姛", icon: "success" });
- setTimeout(() => {
- uni.navigateBack();
- }, 1500);
- } else {
- uni.showToast({ title: result.msg || "鍒犻櫎澶辫触", icon: "none" });
- }
- } catch (error) {
- console.error("鍒犻櫎澶辫触:", error);
- uni.showToast({ title: "鍒犻櫎澶辫触", icon: "none" });
- }
- }
- },
- });
+// 澶勭悊鍩虹闄勪欢涓婁紶
+const handleBaseUpload = (file) => {
+ console.log("鍩虹闄勪欢涓婁紶鎴愬姛:", file);
+ attachments.value.push(file);
+};
+
+// 澶勭悊鍏朵粬闄勪欢涓婁紶
+const handleFilesUpdate = (files) => {
+ console.log(files, "files");
+
+ attachments.value = files.map((file) => ({
+ ...file,
+ // 纭繚鍙瓨鍌ㄥ崐璺緞
+ // url: file.url.startsWith("http")
+ // ? file.url.replace(baseUrlHt, "")
+ // : file.url,
+ }));
+ console.log(attachments.value);
+};
+
+// 棰勮鏂囦欢 - 淇敼涓轰娇鐢ㄥ畬鏁碪RL
+const handlePreview = (file) => {
+ const fullUrl = file.url.startsWith("http")
+ ? file.url
+ : baseUrlHt + (file.url.startsWith("/") ? "" : "/") + file.url;
+
+ if (file.type.includes("image")) {
+ uni.previewImage({
+ urls: attachments.value
+ .filter((f) => f.type.includes("image"))
+ .map((f) =>
+ f.url.startsWith("http")
+ ? f.url
+ : baseUrlHt + (f.url.startsWith("/") ? "" : "/") + f.url,
+ ),
+ current: fullUrl,
+ });
+ } else if (file.type.includes("pdf")) {
+ uni.downloadFile({
+ url: fullUrl,
+ success: (res) => {
+ uni.openDocument({
+ filePath: res.tempFilePath,
+ fileType: "pdf",
+ showMenu: true,
+ });
+ },
+ fail: (err) => {
+ console.error("鎵撳紑鏂囨。澶辫触:", err);
+ uni.showToast({ title: "鎵撳紑鏂囦欢澶辫触", icon: "none" });
+ },
+ });
+ } else {
+ uni.showToast({ title: "鏆備笉鏀寔姝ゆ枃浠剁被鍨嬮瑙�", icon: "none" });
+ }
};
</script>
@@ -796,7 +873,27 @@
.form-content {
padding: 30rpx;
}
+.picker-trigger {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 88rpx;
+ padding: 0 20rpx;
+ background: #f5f5f5;
+ border-radius: 8rpx;
+ border: 1rpx solid #dcdfe6;
+ font-size: 28rpx;
+ color: #303133;
+ &.disabled {
+ background: #f8f9fa;
+ color: #909399;
+ }
+
+ text {
+ font-size: 28rpx;
+ }
+}
.form-section {
background: #fff;
border-radius: 20rpx;
@@ -1006,7 +1103,7 @@
padding: 20rpx 30rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
box-shadow: 0 -2rpx 20rpx rgba(0, 0, 0, 0.08);
- z-index: 100;
+ z-index: 9;
}
.btn {
--
Gitblit v1.9.3