From c098f1e3a3e052aa3d65584aae6dc003a70d75ad Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期二, 16 十二月 2025 00:09:14 +0800
Subject: [PATCH] feat: 停止轮询 uncount
---
app/pagesTask/create-emergency.vue | 356 +++++++++++++++++------------------------------------------
1 files changed, 102 insertions(+), 254 deletions(-)
diff --git a/app/pagesTask/create-emergency.vue b/app/pagesTask/create-emergency.vue
index 8fb53ae..146f013 100644
--- a/app/pagesTask/create-emergency.vue
+++ b/app/pagesTask/create-emergency.vue
@@ -23,6 +23,7 @@
</view>
<view class="form-item">
<OrganizationSelector
+ ref="organizationSelector"
v-model="selectedOrganizationId"
:required="true"
:auto-select-user-dept="true"
@@ -64,7 +65,8 @@
label="鎵ц浠诲姟浜哄憳"
:required="false"
:auto-add-current-user="true"
- :current-user-removable="false"
+ :current-user-removable="true"
+ :branch-dept-ids="allOrganizationIds"
@change="onStaffChange"
/>
@@ -142,28 +144,60 @@
label="鍖婚櫌鍚嶇О"
address-label="杞嚭鍦板潃"
:required="true"
- :department-required="true"
+ :show-department="false"
v-model="taskForm.hospitalOut"
:dept-id="selectedOrganizationId"
:region="selectedRegion"
- :department-options="departmentOptions"
@change="onHospitalOutChange"
@address-selected="onHospitalOutAddressSelected"
/>
+ <DepartmentSelector
+ label="杞嚭绉戝"
+ :required="true"
+ v-model="taskForm.hospitalOut.department"
+ :department-id="taskForm.hospitalOut.departmentId"
+ :is-home="taskForm.hospitalOut.name === '瀹朵腑'"
+ @change="onHospitalOutDepartmentChange"
+ />
+
+ <view class="form-item">
+ <view class="form-label">搴婂彿</view>
+ <input
+ class="form-input"
+ placeholder="璇疯緭鍏ュ簥鍙�"
+ v-model="taskForm.hospitalOut.bedNumber"
+ />
+ </view>
<view class="form-section-title">杞叆鍖婚櫌淇℃伅</view>
<HospitalSelector
label="鍖婚櫌鍚嶇О"
address-label="杞叆鍦板潃"
:required="true"
- :department-required="true"
+ :show-department="false"
v-model="taskForm.hospitalIn"
:dept-id="selectedOrganizationId"
:region="selectedRegion"
- :department-options="departmentOptions"
@change="onHospitalInChange"
@address-selected="onHospitalInAddressSelected"
/>
+ <DepartmentSelector
+ label="杞叆绉戝"
+ :required="true"
+ v-model="taskForm.hospitalIn.department"
+ :department-id="taskForm.hospitalIn.departmentId"
+ :is-home="taskForm.hospitalIn.name === '瀹朵腑'"
+ @change="onHospitalInDepartmentChange"
+ />
+
+ <view class="form-item">
+ <view class="form-label">搴婂彿</view>
+ <input
+ class="form-input"
+ placeholder="璇疯緭鍏ュ簥鍙�"
+ v-model="taskForm.hospitalIn.bedNumber"
+ />
+ </view>
<view class="form-item">
<view class="form-label required">杞繍鍏噷鏁�</view>
@@ -243,13 +277,14 @@
import { checkVehicleActiveTasks } from "@/api/task"
import { getDicts } from "@/api/dict"
-import { getServiceOrdAreaTypes, getServiceOrderTypes, getHospitalDepartments } from "@/api/dictionary"
+import { getServiceOrdAreaTypes, getServiceOrderTypes } from "@/api/dictionary"
import { listBranchCompany, getDept } from "@/api/system/dept"
import MapSelector from './components/map-selector.vue'
import OrganizationSelector from './components/OrganizationSelector.vue'
import HospitalSelector from './components/HospitalSelector.vue'
import DiseaseSelector from './components/DiseaseSelector.vue'
import StaffSelector from './components/StaffSelector.vue'
+import DepartmentSelector from './components/DepartmentSelector.vue'
export default {
components: {
@@ -260,13 +295,15 @@
HospitalSelector,
DiseaseSelector,
DepartureSelector,
- StaffSelector
+ StaffSelector,
+ DepartmentSelector
},
data() {
return {
selectedVehicle: '',
selectedVehicleId: null,
- selectedOrganizationId: null, // 褰掑睘鏈烘瀯ID锛堥儴闂↖D锛�
+ selectedOrganizationId: null, // 褰撳墠閫変腑鐨勫綊灞炴満鏋処D
+ allOrganizationIds: [], // 鎵�鏈夊彲閫夋満鏋処D鏁扮粍
selectedOrganizationServiceOrderClass: '', // 褰掑睘鏈烘瀯鐨勬湇鍔″崟缂栫爜
selectedRegion: '', // 浠庡綊灞炴満鏋勪腑鎻愬彇鐨勫湴鍩熶俊鎭紙濡傦細骞垮窞銆佹繁鍦崇瓑锛�
departureAddress: '', // 鍑哄彂鍦板湴鍧�
@@ -317,7 +354,6 @@
emergencyTaskTypeOptions: [], // 浠诲姟绫诲瀷閫夐」锛堢敤浜巔icker鏄剧ず锛�
documentTypes: [], // 鍗曟嵁绫诲瀷鍒楄〃
documentTypeOptions: [], // 鍗曟嵁绫诲瀷閫夐」锛堢敤浜巔icker鏄剧ず锛�
- departmentOptions: [], // 绉戝瀛楀吀鏁版嵁
loading: false,
// 鏅鸿兘璇嗗埆鐩稿叧
rawText: '',
@@ -354,12 +390,12 @@
this.getAvailableVehicles().then(() => {
this.getUserBoundVehicleInfo()
})
- // 鍔犺浇绉戝瀛楀吀鏁版嵁
- this.loadDepartments()
// 鍔犺浇浠诲姟绫诲瀷鏁版嵁
this.loadEmergencyTaskTypes()
// 鍔犺浇鍗曟嵁绫诲瀷鏁版嵁
this.loadDocumentTypes()
+ // 鍔犺浇鎵�鏈夋満鏋処D
+ this.loadAllOrganizationIds()
},
methods: {
// 鑾峰彇鐢ㄦ埛缁戝畾鐨勮溅杈嗕俊鎭�
@@ -446,20 +482,21 @@
return region.replace(/(鍒嗗叕鍙竱鎬诲叕鍙竱鎬婚儴)$/g, '').trim();
},
- // 鍔犺浇绉戝鏁版嵁锛堜粠 SQL Server 鍔ㄦ�佸姞杞斤級
- loadDepartments() {
- getHospitalDepartments().then(response => {
- const list = response.data || [];
- this.departmentOptions = list.map(item => ({
- id: item.vID,
- text: item.vtext,
- dictValue: item.vtext // 涓轰簡淇濇寔鍏煎鎬э紝淇濈暀dictValue瀛楁
- }));
- // console.log('绉戝鏁版嵁鍔犺浇鎴愬姛:', this.departmentOptions);
- }).catch(error => {
- console.error('鍔犺浇绉戝鏁版嵁澶辫触:', error)
- this.departmentOptions = []
- })
+ // 鍔犺浇鎵�鏈夋満鏋処D
+ loadAllOrganizationIds() {
+ // 閫氳繃 OrganizationSelector 缁勪欢鑾峰彇鎵�鏈夋満鏋�
+ const orgSelector = this.$refs.organizationSelector
+ if (orgSelector) {
+ orgSelector.reload().then(organizations => {
+ this.allOrganizationIds = organizations.map(org => org.deptId)
+ console.log('鎵�鏈夋満鏋処D:', this.allOrganizationIds)
+ })
+ } else {
+ // 濡傛灉缁勪欢杩樻湭鎸傝浇,绋嶅悗閲嶈瘯
+ setTimeout(() => {
+ this.loadAllOrganizationIds()
+ }, 100)
+ }
},
// 鍔犺浇浠诲姟绫诲瀷鏁版嵁锛堜粠 SQL Server锛�
@@ -530,6 +567,12 @@
console.log('杞嚭鍖婚櫌鍙樺寲:', hospitalData)
// 缁勪欢宸茬粡閫氳繃 v-model 鏇存柊浜� taskForm.hospitalOut
+ // 濡傛灉閫夋嫨鐨勬槸"瀹朵腑"锛岃嚜鍔ㄨ缃瀹や负"鍏跺畠"
+ if (hospitalData.name === '瀹朵腑') {
+ this.taskForm.hospitalOut.department = '鍏跺畠'
+ this.taskForm.hospitalOut.departmentId = null
+ }
+
// 濡傛灉杞叆鍦板潃宸插~鍐�,鑷姩璁$畻璺濈
if (this.taskForm.hospitalIn.address) {
// 濡傛灉涓や釜閮戒笉鏄�"瀹朵腑",浣跨敤鍖婚櫌璺濈璁$畻
@@ -554,6 +597,12 @@
console.log('杞叆鍖婚櫌鍙樺寲:', hospitalData)
// 缁勪欢宸茬粡閫氳繃 v-model 鏇存柊浜� taskForm.hospitalIn
+ // 濡傛灉閫夋嫨鐨勬槸"瀹朵腑"锛岃嚜鍔ㄨ缃瀹や负"鍏跺畠"
+ if (hospitalData.name === '瀹朵腑') {
+ this.taskForm.hospitalIn.department = '鍏跺畠'
+ this.taskForm.hospitalIn.departmentId = null
+ }
+
// 濡傛灉杞嚭鍦板潃宸插~鍐�,鑷姩璁$畻璺濈
if (this.taskForm.hospitalOut.address) {
// 濡傛灉涓や釜閮戒笉鏄�"瀹朵腑",浣跨敤鍖婚櫌璺濈璁$畻
@@ -570,6 +619,28 @@
onHospitalInAddressSelected(data) {
if (this.taskForm.hospitalOut.address) {
this.calculateDistanceByManualAddress()
+ }
+ },
+
+ // 杞嚭绉戝鍙樺寲
+ onHospitalOutDepartmentChange(data) {
+ if (data && typeof data === 'object') {
+ this.taskForm.hospitalOut.department = data.department
+ this.taskForm.hospitalOut.departmentId = data.departmentId
+ } else {
+ this.taskForm.hospitalOut.department = data
+ this.taskForm.hospitalOut.departmentId = null
+ }
+ },
+
+ // 杞叆绉戝鍙樺寲
+ onHospitalInDepartmentChange(data) {
+ if (data && typeof data === 'object') {
+ this.taskForm.hospitalIn.department = data.department
+ this.taskForm.hospitalIn.departmentId = data.departmentId
+ } else {
+ this.taskForm.hospitalIn.department = data
+ this.taskForm.hospitalIn.departmentId = null
}
},
@@ -980,20 +1051,14 @@
if (result.phone) this.taskForm.patient.phone = result.phone
if (result.price) this.taskForm.price = result.price
- // 搴旂敤绉戝淇℃伅锛堝尮閰� departmentOptions 涓殑鏁版嵁锛�
+ // 搴旂敤绉戝淇℃伅锛堥�氳繃 DepartmentSelector 缁勪欢澶勭悊锛�
if (result.departmentOut) {
- const deptOut = this.matchDepartment(result.departmentOut)
- if (deptOut) {
- this.taskForm.hospitalOut.department = deptOut.text
- this.taskForm.hospitalOut.departmentId = deptOut.id
- }
+ this.taskForm.hospitalOut.department = result.departmentOut
+ // 绉戝ID浼氬湪 DepartmentSelector 缁勪欢涓嚜鍔ㄥ尮閰�
}
if (result.departmentIn) {
- const deptIn = this.matchDepartment(result.departmentIn)
- if (deptIn) {
- this.taskForm.hospitalIn.department = deptIn.text
- this.taskForm.hospitalIn.departmentId = deptIn.id
- }
+ this.taskForm.hospitalIn.department = result.departmentIn
+ // 绉戝ID浼氬湪 DepartmentSelector 缁勪欢涓嚜鍔ㄥ尮閰�
}
// 澶勭悊鍖婚櫌鍚嶇О 鈫� 绮剧‘鍖归厤鍖婚櫌骞惰ˉ鍏ㄥ湴鍧�涓嶪D锛堜笉闄愬埗鍒嗗叕鍙稿尯鍩燂級
@@ -1139,40 +1204,6 @@
return ''
},
- // 鍖归厤绉戝锛堜紭鍏堜娇鐢� departmentOptions 涓殑鏁版嵁锛�
- matchDepartment(deptName) {
- if (!deptName || !this.departmentOptions || this.departmentOptions.length === 0) {
- return null
- }
-
- const normalized = deptName.trim().toUpperCase()
-
- // 1. 绮剧‘鍖归厤锛堜笉鍖哄垎澶у皬鍐欙級
- let matched = this.departmentOptions.find(d =>
- d.text.toUpperCase() === normalized
- )
- if (matched) return matched
-
- // 2. 鍖呭惈鍖归厤锛堢瀹ゅ悕鍖呭惈璇嗗埆鍒扮殑鍏抽敭璇嶏級
- matched = this.departmentOptions.find(d =>
- d.text.toUpperCase().includes(normalized) ||
- normalized.includes(d.text.toUpperCase())
- )
- if (matched) return matched
-
- // 3. 妯$硦鍖归厤锛堝幓闄�"绉�"銆�"瀹�"绛夊悗缂�鍐嶅尮閰嶏級
- const cleanedInput = normalized.replace(/[绉戝閮╙/g, '')
- matched = this.departmentOptions.find(d => {
- const cleanedDept = d.text.toUpperCase().replace(/[绉戝閮╙/g, '')
- return cleanedDept === cleanedInput ||
- cleanedDept.includes(cleanedInput) ||
- cleanedInput.includes(cleanedDept)
- })
- if (matched) return matched
-
- return null
- },
-
// 鎻愬彇绉戝淇℃伅
extractDepartment(text, type) {
// 甯歌绉戝鍏抽敭璇嶏紙浣滀负鍏滃簳鏂规锛�
@@ -1188,24 +1219,7 @@
'妫�楠岀', '鐥呯悊绉�', '鑽墏绉�', '钀ュ吇绉�'
]
- // 浼樺厛灏濊瘯浠� departmentOptions 涓尮閰�
- if (this.departmentOptions && this.departmentOptions.length > 0) {
- // 鏋勫缓 departmentOptions 鐨勫尮閰嶆ā寮忥紙鎸夐暱搴﹀�掑簭锛�
- const optionTexts = this.departmentOptions.map(d => d.text).sort((a, b) => b.length - a.length)
- const optionPattern = optionTexts.map(t => t.replace(/[()锛堬級]/g, '\\$&')).join('|')
-
- if (optionPattern) {
- const regex = new RegExp(`(${optionPattern})`, 'gi')
- const matches = text.match(regex)
-
- if (matches && matches.length > 0) {
- // 濡傛灉鏄浆鍑猴紝鍙栫涓�涓瀹わ紱濡傛灉鏄浆鍏ワ紝鍙栨渶鍚庝竴涓瀹�
- return type === 'out' ? matches[0] : matches[matches.length - 1]
- }
- }
- }
-
- // 鍏滃簳锛氫娇鐢ㄩ粯璁ょ瀹ゅ垪琛ㄥ尮閰�
+ // 浣跨敤榛樿绉戝鍒楄〃鍖归厤
const sortedDepts = departments.sort((a, b) => b.length - a.length)
const deptPattern = sortedDepts.join('|')
@@ -1686,172 +1700,6 @@
color: #999;
}
}
- }
- }
-}
-
-// 浜哄憳閫夋嫨寮圭獥鏍峰紡
-.staff-selector-popup {
- background-color: white;
- border-radius: 20rpx 20rpx 0 0;
- max-height: 80vh;
- display: flex;
- flex-direction: column;
-
- .popup-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 30rpx;
- border-bottom: 1rpx solid #f0f0f0;
- flex-shrink: 0;
-
- .popup-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
- }
-
- .popup-close {
- padding: 10rpx;
- }
- }
-
- .search-box {
- display: flex;
- align-items: center;
- margin: 20rpx 30rpx;
- padding: 15rpx 20rpx;
- background-color: #f5f5f5;
- border-radius: 10rpx;
- flex-shrink: 0;
-
- .search-input {
- flex: 1;
- margin-left: 10rpx;
- font-size: 28rpx;
- }
- }
-
- .staff-filter {
- display: flex;
- padding: 0 30rpx 20rpx;
- gap: 20rpx;
- flex-shrink: 0;
-
- .filter-item {
- flex: 1;
- text-align: center;
- padding: 15rpx 0;
- background-color: #f5f5f5;
- border-radius: 10rpx;
- font-size: 28rpx;
- color: #666;
-
- &.active {
- background-color: #007AFF;
- color: white;
- }
- }
- }
-
- .staff-list-popup {
- flex: 1;
- overflow-y: auto;
- padding: 0 30rpx;
-
- .staff-item-popup {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 25rpx 20rpx;
- border-bottom: 1rpx solid #f0f0f0;
-
- &:active {
- background-color: #f5f5f5;
- }
-
- .staff-info {
- flex: 1;
-
- .staff-name-row {
- display: flex;
- align-items: center;
- margin-bottom: 10rpx;
-
- .staff-name {
- font-size: 30rpx;
- font-weight: bold;
- color: #333;
- margin-right: 20rpx;
- }
-
- .staff-phone {
- font-size: 24rpx;
- color: #999;
- }
- }
-
- .staff-detail-row {
- display: flex;
- align-items: center;
-
- .staff-dept {
- font-size: 24rpx;
- color: #666;
- margin-right: 20rpx;
- }
-
- .staff-post {
- font-size: 24rpx;
- color: #007AFF;
- }
- }
- }
-
- .checkbox-empty {
- width: 40rpx;
- height: 40rpx;
- border: 2rpx solid #ddd;
- border-radius: 50%;
- }
- }
-
- .no-data {
- text-align: center;
- padding: 100rpx 0;
- color: #999;
-
- text {
- display: block;
- margin-top: 20rpx;
- font-size: 28rpx;
- }
- }
- }
-
- .popup-footer {
- display: flex;
- padding: 20rpx 30rpx;
- border-top: 1rpx solid #f0f0f0;
- gap: 20rpx;
- flex-shrink: 0;
-
- button {
- flex: 1;
- height: 80rpx;
- border-radius: 10rpx;
- font-size: 30rpx;
- }
-
- .cancel-btn {
- background-color: #f5f5f5;
- color: #666;
- }
-
- .confirm-btn {
- background-color: #007AFF;
- color: white;
}
}
}
--
Gitblit v1.9.1