From 057bcf202227150ca64c615751c5ea8c79687b18 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 26 Feb 2026 11:11:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/equipmentResourceApi.js |    0 
 applications/task-work-order/src/views/orderView/organizational/userMange/index.vue                         |    0 
 uniapps/work-app/src/pages/map/index.vue                                                                    |   37 ---
 applications/task-work-order/src/views/orderView/organizational/roleMange/index.vue                         |    0 
 applications/task-work-order/src/views/orderView/organizational/roleMange/RolePermissionDialog.vue          |   22 +-
 uniapps/work-app/src/hooks/useGlobalWS.js                                                                   |   90 ++++----
 uniapps/work-app/src/subPackages/voiceCallDetail/index.vue                                                  |    7 
 applications/task-work-order/src/views/orderView/deviceInvocation/deviceCallRecord/FormDiaLog.vue           |  142 ++++++++++++++
 applications/task-work-order/src/views/orderView/organizational/roleMange/FormDiaLog.vue                    |    0 
 applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/index.vue               |    0 
 applications/task-work-order/src/views/orderView/organizational/userMange/FormDiaLog.vue                    |    0 
 uniapps/work-app/src/utils/common/index.js                                                                  |    8 
 applications/mobile-web-view/src/appPages/voiceCallDetail/index.vue                                         |   12 
 applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue               |   44 ++--
 applications/task-work-order/src/views/orderView/deviceInvocation/deviceCallRecord/index.vue                |  211 +++++++++++++++++++++
 applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/FormDiaLog.vue          |    0 
 16 files changed, 447 insertions(+), 126 deletions(-)

diff --git a/applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue b/applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue
index 37c6736..b76bfe3 100644
--- a/applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionRole/RolePermissionDialog.vue
@@ -20,28 +20,28 @@
 					:props="treeProps"
 				/>
 			</el-tab-pane>
-			<el-tab-pane label="任务工单">
-				<el-tree
-					class="command-tree"
-					ref="workRef"
-					:data="menuGrantListWord"
-					show-checkbox
-					node-key="id"
-					:default-checked-keys="menuTreeObjWork"
-					:props="treeProps"
-				/>
-			</el-tab-pane>
-			<el-tab-pane label="移动app">
-				<el-tree
-					class="command-tree"
-					ref="treeMenuApp"
-					:data="menuGrantListApp"
-					show-checkbox
-					node-key="id"
-					:default-checked-keys="menuTreeObjApp"
-					:props="treeProps"
-				/>
-			</el-tab-pane>
+<!--			<el-tab-pane label="任务工单">-->
+<!--				<el-tree-->
+<!--					class="command-tree"-->
+<!--					ref="workRef"-->
+<!--					:data="menuGrantListWord"-->
+<!--					show-checkbox-->
+<!--					node-key="id"-->
+<!--					:default-checked-keys="menuTreeObjWork"-->
+<!--					:props="treeProps"-->
+<!--				/>-->
+<!--			</el-tab-pane>-->
+<!--			<el-tab-pane label="移动app">-->
+<!--				<el-tree-->
+<!--					class="command-tree"-->
+<!--					ref="treeMenuApp"-->
+<!--					:data="menuGrantListApp"-->
+<!--					show-checkbox-->
+<!--					node-key="id"-->
+<!--					:default-checked-keys="menuTreeObjApp"-->
+<!--					:props="treeProps"-->
+<!--				/>-->
+<!--			</el-tab-pane>-->
 		</el-tabs>
 		<template #footer>
 			<el-button color="#2B2B4C" @click="visible = false">取消</el-button>
diff --git a/applications/mobile-web-view/src/appPages/voiceCallDetail/index.vue b/applications/mobile-web-view/src/appPages/voiceCallDetail/index.vue
index 6da1880..23c2ea4 100644
--- a/applications/mobile-web-view/src/appPages/voiceCallDetail/index.vue
+++ b/applications/mobile-web-view/src/appPages/voiceCallDetail/index.vue
@@ -449,8 +449,8 @@
 	log('✅ 已点击接听,发送 accept 给', incomingFrom)
 
 	// 停止铃声
-	const transmitData = { data: { type: 'stopVoice' } }
-uni.postMessage(transmitData)
+// 	const transmitData = { data: { type: 'stopVoice' } }
+// uni.postMessage(transmitData)
 	state.value = 'calling'
 
 	// 如果 offer 已经提前到达(我们暂存了),立刻 answer
@@ -468,8 +468,8 @@
 	log('❌ 已拒绝来电,发送 busy 给', incomingFrom)
 
 	// 停止铃声
-	const transmitData = { data: { type: 'stopVoice' } }
-uni.postMessage(transmitData)
+// 	const transmitData = { data: { type: 'stopVoice' } }
+// uni.postMessage(transmitData)
 
 	incomingFrom = null
 	acceptedByMe = false
@@ -522,8 +522,8 @@
 
 function hangup() {
 	// 停止铃声
-	const transmitData = { data: { type: 'stopVoice' } }
-uni.postMessage(transmitData)
+// 	const transmitData = { data: { type: 'stopVoice' } }
+// uni.postMessage(transmitData)
 	cleanup(true)
 }
 
diff --git a/applications/task-work-order/src/views/orderView/deviceInvocation/deviceCallRecord/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/deviceInvocation/deviceCallRecord/FormDiaLog.vue
new file mode 100644
index 0000000..ddb6a4f
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/deviceInvocation/deviceCallRecord/FormDiaLog.vue
@@ -0,0 +1,142 @@
+<template>
+	<el-dialog class="gd-dialog" v-model="visible" :title="dialogTitle" @closed="handleClosed" destroy-on-close
+						 :close-on-click-modal="false">
+		<!--		<div class="detail-row-view" v-if="dialogReadonly">-->
+		<el-table :data="list" class="gd-dialog-table">
+			<el-table-column prop="resultCode" show-overflow-tooltip label="序号" />
+			<el-table-column prop="resultCode" show-overflow-tooltip label="设备状态" />
+			<el-table-column prop="shootTime" show-overflow-tooltip label="发生时间" />
+		</el-table>
+	</el-dialog>
+</template>
+
+<script setup>
+import { computed, onMounted, ref } from 'vue'
+import { ElMessage } from 'element-plus'
+import { add, getUser, update } from '@/api/system/user'
+import { getDeptTree } from '@/api/system/dept'
+import { getRoleTree } from '@/api/system/role'
+import func from '@/utils/func'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
+
+const list = ref([])
+
+const initForm = () => ({
+	account: '',
+	password: '',
+	password2: '',
+	realName: '',
+	phone: '',
+	email: '',
+	sex: null,
+	birthday: '',
+	code: '',
+	roleId: '',
+	deptId: '',
+	// sysType: 6
+})
+
+const treeProps = {
+	label: 'title',
+	children: 'children',
+}
+const deptTreeSelectProps = {
+	label: 'name',
+	value: 'id',
+	children: 'children',
+}
+
+const emit = defineEmits(['success'])
+const formRef = ref(null)
+const formData = ref(initForm())
+const visible = ref(false)
+const dialogMode = ref('add')
+const submitting = ref(false)
+const dialogReadonly = computed(() => dialogMode.value === 'view')
+const dialogTitle = computed(() => {
+	if (dialogMode.value === 'edit') return '编辑'
+	if (dialogMode.value === 'view') return '查看'
+	return '新增'
+})
+const roleTree = ref([])
+const deptTree = ref([])
+const route = useRoute()
+
+const validatePass = (rule, value, callback) => {
+	if (value === '') {
+		callback(new Error('请输入密码'))
+	} else {
+		callback()
+	}
+}
+const validatePass2 = (rule, value, callback) => {
+	if (value === '') {
+		callback(new Error('请再次输入密码'))
+	} else if (value !== formData.value.password) {
+		callback(new Error('两次输入密码不一致'))
+	} else {
+		callback()
+	}
+}
+
+async function getRoleTreeData() {
+	const res = await getRoleTree('000000')
+	roleTree.value = res.data.data
+}
+
+async function getDeptTreeData() {
+	const res = await getDeptTree('000000')
+	deptTree.value = res.data.data
+}
+
+function handleCancel() {
+	visible.value = false
+}
+
+async function loadDetail() {
+	if (!formData.value.id) return
+	const res = await getUser(formData.value.id)
+	const data = res?.data?.data ?? {}
+	if (data.roleId) {
+		data.roleId = func.split(data.roleId)[0] || data.roleId
+	}
+	formData.value = data
+}
+
+function handleClosed() {
+	formData.value = initForm()
+}
+
+async function open({ mode, row } = {}) {
+	dialogMode.value = mode || 'add'
+	visible.value = true
+	if (dialogMode.value === 'add') {
+		formData.value = initForm()
+		return
+	}
+	formData.value = { id: row.id }
+	await loadDetail()
+}
+
+onMounted(() => {
+	getRoleTreeData()
+	getDeptTreeData()
+})
+
+defineExpose({ open })
+</script>
+
+<style scoped lang="scss">
+:deep(.el-select) {
+	width: 100%;
+}
+
+:deep(.el-date-editor) {
+	width: 100%;
+}
+
+:deep(.el-tree-select) {
+	width: 100%;
+}
+</style>
diff --git a/applications/task-work-order/src/views/orderView/deviceInvocation/deviceCallRecord/index.vue b/applications/task-work-order/src/views/orderView/deviceInvocation/deviceCallRecord/index.vue
new file mode 100644
index 0000000..862a156
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/deviceInvocation/deviceCallRecord/index.vue
@@ -0,0 +1,211 @@
+<template>
+	<basic-container>
+		<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
+			<el-form-item label="登录账号" prop="account">
+				<el-input
+					class="gd-input gray"
+					v-model="searchParams.account"
+					placeholder="请输入"
+					clearable
+					@clear="handleSearch"
+				/>
+			</el-form-item>
+
+			<el-form-item label="用户姓名" prop="realName">
+				<el-input
+					class="gd-input gray"
+					v-model="searchParams.realName"
+					placeholder="请输入"
+					clearable
+					@clear="handleSearch"
+				/>
+			</el-form-item>
+
+			<el-form-item label="所属部门" prop="deptId">
+				<el-tree-select
+					class="gd-select gray"
+					popper-class="gd-select-popper"
+					v-model="searchParams.deptId"
+					:data="deptTree"
+					:props="treeProps"
+					node-key="id"
+					check-strictly
+					clearable
+					@change="handleSearch"
+				/>
+			</el-form-item>
+
+			<el-form-item class="gd-search-actions">
+				<el-button :icon="RefreshRight" @click="resetForm"></el-button>
+				<el-button class="search-btn" :icon="Search" @click="handleSearch"></el-button>
+			</el-form-item>
+		</el-form>
+
+		<div class="gd-table-toolbar">
+			<el-button v-if="permission.orderUser_add" :icon="Plus" color="#4C34FF" type="primary" @click="handleAdd">
+				新增
+			</el-button>
+			<el-button
+				v-if="permission.orderUser_remove"
+				:icon="Delete"
+				:disabled="!selectedIds.length"
+				@click="handleDelete()"
+			>
+				删除
+			</el-button>
+		</div>
+
+		<div class="gd-table-container" v-loading="loading">
+			<div class="gd-table-content gd-table-content-bg">
+				<el-table class="gd-table" :data="list" @selection-change="handleSelectionChange">
+					<el-table-column type="selection" width="46" />
+					<el-table-column type="index" show-overflow-tooltip width="64" label="序号" />
+					<el-table-column prop="account" show-overflow-tooltip label="任务名称" />
+					<el-table-column prop="realName" show-overflow-tooltip label="发起任务部门" />
+					<el-table-column prop="roleName" show-overflow-tooltip label="任务发起人" />
+					<el-table-column prop="deptName" show-overflow-tooltip label="飞行时长" />
+					<el-table-column prop="phone" show-overflow-tooltip label="飞行里程(m)" />
+					<el-table-column prop="phone" show-overflow-tooltip label="执行设备" />
+					<el-table-column prop="phone" show-overflow-tooltip label="计划执行时间" />
+					<el-table-column prop="phone" show-overflow-tooltip label="实际执行时间" />
+					<el-table-column label="操作" class-name="operation-btns" width="180">
+						<template v-slot="{ row }">
+							<el-link  @click="handleView(row)">查看</el-link>
+						</template>
+					</el-table-column>
+				</el-table>
+			</div>
+
+			<div class="gd-pagination-parent">
+				<el-pagination
+					popper-class="gd-select-popper"
+					v-model:current-page="searchParams.current"
+					v-model:page-size="searchParams.size"
+					layout="total, prev, pager, next, sizes"
+					:total="total"
+					@change="getList"
+				/>
+			</div>
+		</div>
+
+		<FormDiaLog ref="dialogRef" @success="getList" />
+	</basic-container>
+</template>
+
+<script setup>
+import { Delete, Plus, RefreshRight, Search } from '@element-plus/icons-vue'
+import { computed, onMounted, ref } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { getDeptTree } from '@/api/system/dept'
+import { getList as getUserList, remove } from '@/api/system/user'
+import { useStore } from 'vuex'
+import FormDiaLog from './FormDiaLog.vue'
+import { saveOperationLog } from '@ztzf/apis'
+import { useRoute } from 'vue-router'
+
+const initSearchParams = () => ({
+	account: '',
+	realName: '',
+	deptId: '',
+	current: 1,
+	size: 10,
+	// sysType: 6
+})
+
+const searchParams = ref(initSearchParams())
+const loading = ref(true)
+const list = ref([])
+const total = ref(0)
+const selectedIds = ref([])
+const queryParamsRef = ref(null)
+const dialogRef = ref(null)
+const deptTree = ref([])
+const treeProps = {
+	label: 'name',
+	children: 'children',
+}
+const store = useStore()
+const permission = computed(() => store.getters.permission || {})
+const route = useRoute()
+
+async function getList() {
+	loading.value = true
+	try {
+		const res = await getUserList(
+			searchParams.value.current,
+			searchParams.value.size,
+			// searchParams.value.sysType,
+			{
+				account: searchParams.value.account,
+				realName: searchParams.value.realName,
+			},
+			searchParams.value.deptId
+		)
+		list.value = res?.data?.data?.records ?? []
+		total.value = res?.data?.data?.total ?? 0
+	} finally {
+		loading.value = false
+	}
+}
+
+function handleSearch() {
+	searchParams.value.current = 1
+	getList()
+}
+
+function resetForm() {
+	queryParamsRef.value?.resetFields()
+	searchParams.value.current = 1
+	searchParams.value.deptId = ''
+	getList()
+}
+
+function handleAdd() {
+	dialogRef.value?.open({ mode: 'add' })
+}
+
+function handleView(row) {
+	dialogRef.value?.open({ mode: 'view', row: { ...row } })
+}
+
+function handleEdit(row) {
+	dialogRef.value?.open({ mode: 'edit', row: { ...row } })
+}
+
+async function handleDelete(row) {
+	const tips = row ? '该条' : '选中的项'
+	await ElMessageBox.confirm(`确认删除${tips}吗?`, '提示', {
+		type: 'warning',
+		customClass: 'command-page-view-message-box',
+		confirmButtonClass: 'command-message-box-confirm',
+		cancelButtonClass: 'command-message-box-cancel',
+	})
+	const ids = row ? row.id : selectedIds.value.join(',')
+	await remove(ids)
+	saveOperationLog({
+		requestUri: route.path,
+		title: `${route.name || '用户管理'}-删除`,
+		type: 1
+	})
+	ElMessage.success('删除成功')
+	selectedIds.value = []
+	getList()
+}
+
+function handleSelectionChange(rows) {
+	selectedIds.value = rows.map(item => item.id)
+}
+
+function getDeptTreeList() {
+	getDeptTree().then(res => {
+		deptTree.value = res?.data?.data ?? []
+	})
+}
+
+onMounted(() => {
+	getList()
+	getDeptTreeList()
+})
+</script>
+
+<style scoped lang="scss"></style>
diff --git a/applications/task-work-order/src/views/orderView/equipmentResource/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/FormDiaLog.vue
similarity index 100%
rename from applications/task-work-order/src/views/orderView/equipmentResource/FormDiaLog.vue
rename to applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/FormDiaLog.vue
diff --git a/applications/task-work-order/src/views/orderView/equipmentResource/equipmentResourceApi.js b/applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/equipmentResourceApi.js
similarity index 100%
rename from applications/task-work-order/src/views/orderView/equipmentResource/equipmentResourceApi.js
rename to applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/equipmentResourceApi.js
diff --git a/applications/task-work-order/src/views/orderView/equipmentResource/index.vue b/applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/index.vue
similarity index 100%
rename from applications/task-work-order/src/views/orderView/equipmentResource/index.vue
rename to applications/task-work-order/src/views/orderView/deviceInvocation/equipmentResource/index.vue
diff --git a/applications/task-work-order/src/views/orderView/systemMange/roleMange/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/organizational/roleMange/FormDiaLog.vue
similarity index 100%
rename from applications/task-work-order/src/views/orderView/systemMange/roleMange/FormDiaLog.vue
rename to applications/task-work-order/src/views/orderView/organizational/roleMange/FormDiaLog.vue
diff --git a/applications/task-work-order/src/views/orderView/systemMange/roleMange/RolePermissionDialog.vue b/applications/task-work-order/src/views/orderView/organizational/roleMange/RolePermissionDialog.vue
similarity index 90%
rename from applications/task-work-order/src/views/orderView/systemMange/roleMange/RolePermissionDialog.vue
rename to applications/task-work-order/src/views/orderView/organizational/roleMange/RolePermissionDialog.vue
index 3b14f65..e4312df 100644
--- a/applications/task-work-order/src/views/orderView/systemMange/roleMange/RolePermissionDialog.vue
+++ b/applications/task-work-order/src/views/orderView/organizational/roleMange/RolePermissionDialog.vue
@@ -31,17 +31,17 @@
 					:props="treeProps"
 				/>
 			</el-tab-pane>
-<!--			<el-tab-pane label="移动app">-->
-<!--				<el-tree-->
-<!--					class="command-tree"-->
-<!--					ref="treeMenuApp"-->
-<!--					:data="menuGrantListApp"-->
-<!--					show-checkbox-->
-<!--					node-key="id"-->
-<!--					:default-checked-keys="menuTreeObjApp"-->
-<!--					:props="treeProps"-->
-<!--				/>-->
-<!--			</el-tab-pane>-->
+			<el-tab-pane label="移动app">
+				<el-tree
+					class="command-tree"
+					ref="treeMenuApp"
+					:data="menuGrantListApp"
+					show-checkbox
+					node-key="id"
+					:default-checked-keys="menuTreeObjApp"
+					:props="treeProps"
+				/>
+			</el-tab-pane>
 		</el-tabs>
 		<template #footer>
 			<el-button color="#F2F3F5" @click="visible = false">取消</el-button>
diff --git a/applications/task-work-order/src/views/orderView/systemMange/roleMange/index.vue b/applications/task-work-order/src/views/orderView/organizational/roleMange/index.vue
similarity index 100%
rename from applications/task-work-order/src/views/orderView/systemMange/roleMange/index.vue
rename to applications/task-work-order/src/views/orderView/organizational/roleMange/index.vue
diff --git a/applications/task-work-order/src/views/orderView/systemMange/userMange/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/organizational/userMange/FormDiaLog.vue
similarity index 100%
rename from applications/task-work-order/src/views/orderView/systemMange/userMange/FormDiaLog.vue
rename to applications/task-work-order/src/views/orderView/organizational/userMange/FormDiaLog.vue
diff --git a/applications/task-work-order/src/views/orderView/systemMange/userMange/index.vue b/applications/task-work-order/src/views/orderView/organizational/userMange/index.vue
similarity index 100%
rename from applications/task-work-order/src/views/orderView/systemMange/userMange/index.vue
rename to applications/task-work-order/src/views/orderView/organizational/userMange/index.vue
diff --git a/uniapps/work-app/src/hooks/useGlobalWS.js b/uniapps/work-app/src/hooks/useGlobalWS.js
index 3173f88..36086d1 100644
--- a/uniapps/work-app/src/hooks/useGlobalWS.js
+++ b/uniapps/work-app/src/hooks/useGlobalWS.js
@@ -1,8 +1,9 @@
 import { useUserStore } from "@/store/index.js";
 import useAppStore from "../store/modules/app/index.js";
 import websocketService from "@/utils/websocket.js";
+// #ifdef APP-PLUS
 import { openDialog, allowFloat, getBatteryCapacity } from '@/uni_modules/lgh-dialog'
-
+// #endif
 export function useGlobalWS() {
 	const userStore = useUserStore();
   const appStore = useAppStore();
@@ -27,7 +28,7 @@
     if (t === 'call') {
       console.log('📞 全局收到来电 call,来自', payload.from)
       // 播放铃声
-      playRingtone();
+      // playRingtone();
       // 触发震动
       triggerVibration();
       // 构建来电参数
@@ -36,8 +37,9 @@
         from: payload.from,
         type: 'incoming'
       };
-
+// #ifdef APP-PLUS
 			openDialog()
+      // #endif
       // 转义参数以便在URL中传递
       const encodedParams = encodeURIComponent(JSON.stringify(callParams));
 
@@ -58,21 +60,21 @@
   }
 
   // 播放来电铃声 - 定义在 messageHandler 外部
-  function playRingtone() {
-    try {
-      if (typeof uni !== 'undefined' && uni.createInnerAudioContext) {
-        const ringtone = uni.createInnerAudioContext();
-        // 使用默认铃声,注意路径写法
-        ringtone.src = '/static/audio/ringtone.mp3';
-        ringtone.loop = true;
-        ringtone.volume = 0.8;
-        ringtone.play();
-        // 存储铃声实例
-        ringtoneInstance = ringtone; // 使用局部变量而不是window
-      }
-    } catch (error) {
-    }
-  }
+  // function playRingtone() {
+  //   try {
+  //     if (typeof uni !== 'undefined' && uni.createInnerAudioContext) {
+  //       const ringtone = uni.createInnerAudioContext();
+  //       // 使用默认铃声,注意路径写法
+  //       ringtone.src = '/static/audio/ringtone.mp3';
+  //       ringtone.loop = true;
+  //       ringtone.volume = 0.8;
+  //       ringtone.play();
+  //       // 存储铃声实例
+  //       ringtoneInstance = ringtone; // 使用局部变量而不是window
+  //     }
+  //   } catch (error) {
+  //   }
+  // }
 
   // 触发震动
   function triggerVibration() {
@@ -113,32 +115,32 @@
   }
 
   // 停止铃声
-  function stopRingtone() {
-    try {
-      if (ringtoneInstance) {
-        ringtoneInstance.stop();
-        ringtoneInstance.destroy();
-        ringtoneInstance = null;
-      }
-    } catch (error) {
-      // 即使出错也重置实例
-      ringtoneInstance = null;
-    }
-  }
-
-  // 监听停止铃声事件
-  if (typeof uni !== 'undefined' && uni.$on) {
-    uni.$on('stopRingtone', stopRingtone);
-    // 监听WebView消息事件
-    uni.$on('webViewMessage', (data) => {
-      // 检查是否是停止铃声消息
-      if (data?.type === 'stopVoice') {
-        stopRingtone();
-        console.log('📳 收到WebView停止铃声消息,已停止铃声');
-
-      }
-    });
-  }
+  // function stopRingtone() {
+  //   try {
+  //     if (ringtoneInstance) {
+  //       ringtoneInstance.stop();
+  //       ringtoneInstance.destroy();
+  //       ringtoneInstance = null;
+  //     }
+  //   } catch (error) {
+  //     // 即使出错也重置实例
+  //     ringtoneInstance = null;
+  //   }
+  // }
+  //
+  // // 监听停止铃声事件
+  // if (typeof uni !== 'undefined' && uni.$on) {
+  //   uni.$on('stopRingtone', stopRingtone);
+  //   // 监听WebView消息事件
+  //   uni.$on('webViewMessage', (data) => {
+  //     // 检查是否是停止铃声消息
+  //     if (data?.type === 'stopVoice') {
+  //       stopRingtone();
+  //       console.log('📳 收到WebView停止铃声消息,已停止铃声');
+  //
+  //     }
+  //   });
+  // }
 
   // 初始化WebSocket连接
   function initWS() {
diff --git a/uniapps/work-app/src/pages/map/index.vue b/uniapps/work-app/src/pages/map/index.vue
index 2ee54c8..45d5fb8 100644
--- a/uniapps/work-app/src/pages/map/index.vue
+++ b/uniapps/work-app/src/pages/map/index.vue
@@ -23,9 +23,6 @@
 const userParams = userStore?.userInfo ? JSON.stringify(userStore.userInfo) : '{}';
 
 const updateKey = ref(0);
-// const viewUrl = computed(() => {
-//   return `https://192.168.1.157:5176/mobile-web-view/#/webViewWrapper/defaultMap?params=${encodeURIComponent(userParams)}&isWeb=${envParam}&updateKey=${updateKey.value}`;
-// });
 const viewUrl = computed(() => {
   return getWebViewUrl("/defaultMap", {
     isWeb: envParam,
@@ -34,40 +31,6 @@
 });
 
 const onPostMessage = (data) => {
-  // #ifdef MP-WEIXIN
-  if (data.type === "scanCode") {
-  } else if (data.type === "jumpAddWork") {
-  } else if (data.type === "jumpMapNav") {
-    //事件导航
-  } else if (data.type === "workid") {
-    //事件详情
-  }
-  // #endif
-
-  // #ifndef MP-WEIXIN
-  if (data.type === "scanCode") {
-    uni.navigateTo({
-      url: "/subPackages/qrCode/index",
-    });
-  } else if (data.type === "jumpAddWork") {
-    //新建任务
-    const encodedData = encodeURIComponent(JSON.stringify(data.rowItem));
-    uni.setStorageSync("webview_params", encodedData);
-    uni.navigateTo({
-      url: `/subPackages/taskDetail/addTask/index`,
-    });
-  } else if (data.type === "jumpMapNav") {
-    //事件导航
-    uni.navigateTo({
-      url: `/subPackages/workDetail/mapWork/index?currentItem=${data.eventNum}`,
-    });
-  } else if (data.type === "workid") {
-    //事件详情
-    uni.navigateTo({
-      url: `/subPackages/workDetail/index?eventNum=${data.eventNum}`,
-    });
-  }
-  // #endif
 };
 
 onShow(() => {
diff --git a/uniapps/work-app/src/subPackages/voiceCallDetail/index.vue b/uniapps/work-app/src/subPackages/voiceCallDetail/index.vue
index c1bdf41..710e6b2 100644
--- a/uniapps/work-app/src/subPackages/voiceCallDetail/index.vue
+++ b/uniapps/work-app/src/subPackages/voiceCallDetail/index.vue
@@ -74,15 +74,14 @@
   const contact = options.contact ? JSON.parse(decodeURIComponent(options.contact)) : null;
   // 构建viewUrl,将contact参数拼接到URL中
   const contactParam = contact ? encodeURIComponent(JSON.stringify(contact)) : '';
-  // viewUrl.value = `https://192.168.1.157:5176/mobile-web-view/#/webViewWrapper/voiceCallDetail?params=${encodeURIComponent(userParams)}&contact=${contactParam}`;
   viewUrl.value = getWebViewUrl("/voiceCallDetail", { contact: options.contact ,voiceparams: options.voiceparams});
 });
 
 function onPostMessage(data) {
 	// 将WebView消息传递给全局WebSocket处理
-	if (typeof uni !== 'undefined' && uni.$emit) {
-		uni.$emit('webViewMessage', data);
-	}
+	// if (typeof uni !== 'undefined' && uni.$emit) {
+	// 	uni.$emit('webViewMessage', data);
+	// }
 }
 
 </script>
diff --git a/uniapps/work-app/src/utils/common/index.js b/uniapps/work-app/src/utils/common/index.js
index 605ed86..a7b4e6c 100644
--- a/uniapps/work-app/src/utils/common/index.js
+++ b/uniapps/work-app/src/utils/common/index.js
@@ -72,8 +72,12 @@
   // 1. 处理用户参数
   const userParams = userStore?.userInfo ? JSON.stringify(userStore.userInfo) : '{}'
   // 2. 构建查询参数字符串
-  let queryString = `params=${encodeURIComponent(userParams)}&topMargin=${statusBarHeight}&uniPlatform=${uniPlatform}`
-
+  let queryString = null
+  if(targetUrl === '/workDetail') {
+    queryString = `topMargin=${statusBarHeight}&uniPlatform=${uniPlatform}`
+  }else{
+    queryString = `params=${encodeURIComponent(userParams)}&topMargin=${statusBarHeight}&uniPlatform=${uniPlatform}`
+  }
   // 3. 处理 otherParams 对象
   if (otherParams && typeof otherParams === 'object') {
     Object.keys(otherParams).forEach(key => {

--
Gitblit v1.9.3