From 7c6fbc5ebe9760baf368de6632e3963be06d211e Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Sat, 27 Dec 2025 13:23:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E5=AE=A4=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E4=BC=9A=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/workcase_wechat/manifest.json | 24 +- .../packages/workcase_wechat/pages.json | 18 +- .../pages/chatRoom/chatRoom/chatRoom.uvue | 28 +- .../pages/meeting/Meeting.scss | 182 +++++++++++ .../pages/meeting/Meeting.uvue | 290 ++++++++++++++++-- .../meeting/meetingCard/MeetingCard.uvue | 14 +- .../workcase_wechat/static/jitsi-wrapper.html | 171 +++++++++++ .../982fcc4a48fc71aa877e0c038d3a664db035cc81 | 1 - .../1963ba1c3eb91672419b93f12a438ab8a720aa52 | 0 .../6d76150b48a4cde130e96c0c4eac62d2aa7598ec | 0 .../a83754b56a42fedff55fe70ff80086976b3673dc | 0 .../af0401d73d55cfca960e669c6ba7a0ddd53d8d61 | 0 .../ca02eb8e2adac71455fd697ef3fbc8ba962f8ae9 | 0 .../ccddf5085bf891484ed021b218161d9d93614f13 | 0 14 files changed, 685 insertions(+), 43 deletions(-) create mode 100644 urbanLifelineWeb/packages/workcase_wechat/static/jitsi-wrapper.html delete mode 100644 urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/code/cache/982fcc4a48fc71aa877e0c038d3a664db035cc81 delete mode 100644 urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/1963ba1c3eb91672419b93f12a438ab8a720aa52 delete mode 100644 urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/6d76150b48a4cde130e96c0c4eac62d2aa7598ec delete mode 100644 urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/a83754b56a42fedff55fe70ff80086976b3673dc delete mode 100644 urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/af0401d73d55cfca960e669c6ba7a0ddd53d8d61 delete mode 100644 urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/ca02eb8e2adac71455fd697ef3fbc8ba962f8ae9 delete mode 100644 urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/ccddf5085bf891484ed021b218161d9d93614f13 diff --git a/urbanLifelineWeb/packages/workcase_wechat/manifest.json b/urbanLifelineWeb/packages/workcase_wechat/manifest.json index 7164838a..e03c5d9d 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/manifest.json +++ b/urbanLifelineWeb/packages/workcase_wechat/manifest.json @@ -11,7 +11,16 @@ "setting" : { "urlCheck" : false }, - "usingComponents" : true + "usingComponents" : true, + "permission" : { + "scope.camera" : { + "desc" : "用于视频会议时开启摄像头" + }, + "scope.record" : { + "desc" : "用于视频会议时开启麦克风" + } + }, + "requiredPrivateInfos" : [] }, "mp-alipay" : { "usingComponents" : true @@ -35,6 +44,19 @@ "xxhdpi" : "", "xxxhdpi" : "" } + }, + "android" : { + "permissions" : [ + "", + "", + "" + ] + }, + "ios" : { + "privacyDescription" : { + "NSCameraUsageDescription" : "用于视频会议时开启摄像头", + "NSMicrophoneUsageDescription" : "用于视频会议时开启麦克风" + } } } } diff --git a/urbanLifelineWeb/packages/workcase_wechat/pages.json b/urbanLifelineWeb/packages/workcase_wechat/pages.json index f472024a..8a0711bf 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/pages.json +++ b/urbanLifelineWeb/packages/workcase_wechat/pages.json @@ -36,10 +36,26 @@ { "path": "pages/meeting/Meeting", "style": { - "navigationStyle": "custom" + "navigationStyle": "custom", + "disableScroll": true + } + }, + { + "path": "pages/meeting/MeetingCreate", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "创建会议" } } ], + "permission": { + "scope.camera": { + "desc": "用于拍摄/视频通话等功能" + }, + "scope.record": { + "desc": "用于录制音频/语音通话等功能" + } + }, "globalStyle": { "navigationBarTextStyle": "white", "navigationBarTitleText": "泰豪小电", diff --git a/urbanLifelineWeb/packages/workcase_wechat/pages/chatRoom/chatRoom/chatRoom.uvue b/urbanLifelineWeb/packages/workcase_wechat/pages/chatRoom/chatRoom/chatRoom.uvue index 054c0bbc..b3087103 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/pages/chatRoom/chatRoom/chatRoom.uvue +++ b/urbanLifelineWeb/packages/workcase_wechat/pages/chatRoom/chatRoom/chatRoom.uvue @@ -561,8 +561,9 @@ async function startMeeting() { // 已有活跃会议,直接加入 const meetingUrl = res.data.iframeUrl const meetingId = res.data.meetingId + const meetingName = res.data.meetingName || '视频会议' uni.navigateTo({ - url: `/pages/meeting/Meeting?meetingUrl=${encodeURIComponent(meetingUrl)}&meetingId=${meetingId}`, + url: `/pages/meeting/Meeting?meetingUrl=${encodeURIComponent(meetingUrl)}&meetingId=${meetingId}&meetingName=${encodeURIComponent(meetingName)}`, fail: (err) => { console.error('[chatRoom] 跳转会议页面失败:', err) uni.showToast({ title: '打开会议失败', icon: 'none' }) @@ -586,27 +587,40 @@ async function startMeeting() { // 加入会议(从MeetingCard点击加入) async function handleJoinMeeting(meetingId: string) { + console.log('[handleJoinMeeting] 开始加入会议, meetingId:', meetingId) try { // 调用加入会议接口获取iframe URL const joinRes = await workcaseChatAPI.joinMeeting(meetingId) - if (joinRes.success && joinRes.data?.iframeUrl) { - const meetingUrl = joinRes.data.iframeUrl + console.log('[handleJoinMeeting] API响应:', JSON.stringify(joinRes)) + + // 兼容两种判断方式:success 字段或 code === 200 + const isSuccess = joinRes.success || joinRes.code === 200 || joinRes.code === 0 + const meetingData = joinRes.data + + if (isSuccess && meetingData && meetingData.iframeUrl) { + const meetingUrl = meetingData.iframeUrl + const meetingName = meetingData.meetingName || '视频会议' + console.log('[handleJoinMeeting] 获取到会议URL:', meetingUrl, '会议名称:', meetingName) // 跳转到会议页面 uni.navigateTo({ - url: `/pages/meeting/Meeting?meetingUrl=${encodeURIComponent(meetingUrl)}&meetingId=${meetingId}`, + url: `/pages/meeting/Meeting?meetingUrl=${encodeURIComponent(meetingUrl)}&meetingId=${meetingId}&meetingName=${encodeURIComponent(meetingName)}`, + success: () => { + console.log('[handleJoinMeeting] 跳转成功') + }, fail: (err) => { - console.error('[chatRoom] 跳转会议页面失败:', err) + console.error('[handleJoinMeeting] 跳转会议页面失败:', err) uni.showToast({ title: '打开会议失败', icon: 'none' }) } }) } else { + console.error('[handleJoinMeeting] 加入会议失败, isSuccess:', isSuccess, 'data:', meetingData) uni.showToast({ - title: joinRes.message || '加入会议失败', + title: joinRes.message || '加入会议失败:未获取到会议地址', icon: 'none' }) } } catch (error) { - console.error('[chatRoom] 加入会议失败:', error) + console.error('[handleJoinMeeting] 加入会议异常:', error) uni.showToast({ title: '加入会议失败', icon: 'none' diff --git a/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/Meeting.scss b/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/Meeting.scss index 86741a01..651cccea 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/Meeting.scss +++ b/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/Meeting.scss @@ -40,4 +40,186 @@ color: #ff4444; font-size: 14px; font-weight: 500; +} + +/* 弹窗模式样式 */ +.meeting-modal { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100vw; + height: 100vh; + z-index: 9999; +} + +.modal-mask { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + z-index: 1; +} + +.modal-content { + position: fixed; + left: 0; + right: 0; + bottom: 0; + width: 100%; + background: #fff; + border-radius: 16px 16px 0 0; + animation: slideUp 0.3s ease-out; + max-height: 70vh; + overflow-y: auto; + z-index: 2; +} + +@keyframes slideUp { + from { + transform: translateY(100%); + } + to { + transform: translateY(0); + } +} + +.modal-header { + position: relative; + padding: 20px 20px 16px; + border-bottom: 1px solid #f0f0f0; +} + +.modal-title { + font-size: 18px; + font-weight: 600; + color: #333; + padding-right: 40px; +} + +.close-btn { + position: absolute; + right: 16px; + top: 16px; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; +} + +.close-icon { + font-size: 28px; + color: #999; + line-height: 1; +} + +.modal-body { + padding: 20px; +} + +.meeting-info { + margin-bottom: 20px; +} + +.info-item { + display: flex; + align-items: flex-start; + margin-bottom: 12px; +} + +.info-label { + font-size: 14px; + color: #666; + flex-shrink: 0; +} + +.info-value { + font-size: 14px; + color: #333; + flex: 1; +} + +.tips-box { + background: #fff7e6; + border: 1px solid #ffd591; + border-radius: 8px; + padding: 12px; + display: flex; + align-items: center; + margin-bottom: 20px; +} + +.tips-icon { + font-size: 20px; + margin-right: 8px; +} + +.tips-text { + font-size: 13px; + color: #d48806; + flex: 1; + line-height: 1.5; +} + +.url-preview { + background: #f5f5f5; + border-radius: 8px; + padding: 12px; + margin-bottom: 20px; +} + +.url-label { + font-size: 12px; + color: #999; + display: block; + margin-bottom: 8px; +} + +.url-text { + font-size: 12px; + color: #666; + word-break: break-all; + line-height: 1.6; +} + +.modal-footer { + padding: 0 20px 32px; + display: flex; + flex-direction: column; + gap: 12px; +} + +.action-btn { + width: 100%; + height: 48px; + border-radius: 8px; + font-size: 16px; + border: none; + display: flex; + align-items: center; + justify-content: center; +} + +.copy-btn { + background: #667eea; + color: #fff; +} + +.browser-btn { + background: #fff; + color: #667eea; + border: 1px solid #667eea; +} + +/* 全屏页面样式(非小程序环境) */ +.meeting-page-full { + width: 100%; + height: 100vh; + background: #000; } \ No newline at end of file diff --git a/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/Meeting.uvue b/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/Meeting.uvue index e89b6798..6c355880 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/Meeting.uvue +++ b/urbanLifelineWeb/packages/workcase_wechat/pages/meeting/Meeting.uvue @@ -1,23 +1,73 @@ @@ -29,6 +79,8 @@ const statusBarHeight = ref(44) const navBarHeight = ref(88) const meetingUrl = ref('') const meetingId = ref('') +const meetingName = ref('') +const meetingEnded = ref(false) // 会议是否已结束 const webviewStyles = ref({ progress: { @@ -45,28 +97,72 @@ onMounted(() => { // 获取页面参数 const pages = getCurrentPages() const currentPage = pages[pages.length - 1] as any + console.log('[MeetingView] currentPage.options:', currentPage?.options) + if (currentPage && currentPage.options) { - meetingUrl.value = decodeURIComponent(currentPage.options.meetingUrl || '') + const originalMeetingUrl = decodeURIComponent(currentPage.options.meetingUrl || '') meetingId.value = currentPage.options.meetingId || '' + meetingName.value = decodeURIComponent(currentPage.options.meetingName || '') + + // 检测是否为微信小程序环境 + // #ifdef MP-WEIXIN + // 小程序环境:直接使用原始URL(显示提示弹窗) + meetingUrl.value = originalMeetingUrl + console.log('[MeetingView] 微信小程序环境,显示提示弹窗') + // #endif + + // #ifndef MP-WEIXIN + // 非小程序环境:使用HTML包装页面加载Jitsi(支持事件监听) + const wrapperPath = '/static/jitsi-wrapper.html' + meetingUrl.value = `${wrapperPath}?url=${encodeURIComponent(originalMeetingUrl)}` + console.log('[MeetingView] 使用包装页面:', meetingUrl.value) + // #endif } console.log('[MeetingView] 会议页面加载:', { meetingId: meetingId.value, - meetingUrl: meetingUrl.value + meetingName: meetingName.value, + meetingUrl: meetingUrl.value, + urlLength: meetingUrl.value.length }) + + // 检查URL是否有效 + if (!meetingUrl.value) { + console.error('[MeetingView] 会议URL为空!') + uni.showToast({ + title: '会议URL为空', + icon: 'none' + }) + } }) -// 确认退出 +// 确认退出(小程序环境) function confirmExit() { - uni.showModal({ - title: '提示', - content: '确定要退出会议吗?', - success: (res) => { - if (res.confirm) { - uni.navigateBack() + uni.navigateBack() +} + +// 导航栏返回按钮(Web环境) +function handleNavBack() { + if (meetingEnded.value) { + // 会议已结束,直接返回 + uni.navigateBack() + } else { + // 会议进行中,提示用户 + uni.showModal({ + title: '提示', + content: '会议正在进行中,确定要离开吗?', + success: (res) => { + if (res.confirm) { + uni.navigateBack() + } } - } - }) + }) + } +} + +// 点击遮罩关闭 +function handleMaskClick() { + uni.navigateBack() } // 结束会议 @@ -85,24 +181,98 @@ async function endMeeting() { uni.showLoading({ title: '结束会议中...' }) await workcaseChatAPI.endVideoMeeting(meetingId.value) uni.hideLoading() - uni.showToast({ title: '会议已结束', icon: 'success' }) - setTimeout(() => uni.navigateBack(), 1500) + + meetingEnded.value = true + + uni.showToast({ + title: '会议已结束', + icon: 'success', + duration: 2000 + }) + + // 2秒后自动返回 + setTimeout(() => uni.navigateBack(), 2000) } catch (e) { uni.hideLoading() console.error('[MeetingView] 结束会议失败:', e) uni.showToast({ title: '结束会议失败', icon: 'none' }) - uni.navigateBack() } } } }) } -// 处理webview消息 +// 处理webview消息(监听Jitsi事件) function handleWebViewMessage(e: any) { console.log('[MeetingView] webview消息:', e) - // 可以在这里处理Jitsi Meet发送的消息 - // 例如:会议结束、参与者加入/离开等事件 + + const { data } = e.detail + if (!data || !Array.isArray(data) || data.length === 0) { + return + } + + // 解析消息 + const message = data[0] + console.log('[MeetingView] 解析消息:', message) + + // 处理不同的Jitsi事件 + if (message.event) { + switch (message.event) { + case 'videoConferenceLeft': + // 用户离开会议 + console.log('[MeetingView] 用户离开会议') + handleUserLeftMeeting() + break + case 'videoConferenceJoined': + // 用户加入会议 + console.log('[MeetingView] 用户加入会议') + break + case 'participantLeft': + // 参与者离开 + console.log('[MeetingView] 参与者离开:', message.data) + break + case 'readyToClose': + // 会议准备关闭 + console.log('[MeetingView] 会议准备关闭') + handleMeetingEnded() + break + } + } +} + +// 处理用户离开会议 +function handleUserLeftMeeting() { + // 用户主动离开会议,直接返回 + uni.navigateBack() +} + +// 处理会议结束 +async function handleMeetingEnded() { + if (meetingEnded.value) { + return + } + + meetingEnded.value = true + console.log('[MeetingView] 会议已结束,同步到数据库') + + // 调用后端API标记会议结束 + if (meetingId.value) { + try { + await workcaseChatAPI.endVideoMeeting(meetingId.value) + console.log('[MeetingView] 会议结束状态已同步到数据库') + } catch (e) { + console.error('[MeetingView] 同步会议结束状态失败:', e) + } + } + + // 提示用户并返回 + uni.showToast({ + title: '会议已结束', + icon: 'success', + duration: 2000 + }) + + setTimeout(() => uni.navigateBack(), 2000) } // 处理webview错误 @@ -110,6 +280,62 @@ function handleWebViewError(e: any) { console.error('[MeetingView] webview错误:', e) uni.showToast({ title: '会议加载失败', icon: 'none' }) } + +// 复制会议链接 +function copyUrl() { + if (!meetingUrl.value) { + uni.showToast({ title: '会议链接为空', icon: 'none' }) + return + } + + uni.setClipboardData({ + data: meetingUrl.value, + success: () => { + uni.showToast({ title: '链接已复制', icon: 'success' }) + }, + fail: () => { + uni.showToast({ title: '复制失败', icon: 'none' }) + } + }) +} + +// 在浏览器中打开 +function openInBrowser() { + if (!meetingUrl.value) { + uni.showToast({ title: '会议链接为空', icon: 'none' }) + return + } + + // #ifdef MP-WEIXIN + // 微信小程序:先复制链接,然后提示用户通过右上角菜单在浏览器中打开 + uni.setClipboardData({ + data: meetingUrl.value, + success: () => { + uni.showModal({ + title: '链接已复制', + content: '请按以下步骤在浏览器中打开会议:\n\n1. 点击右上角【···】菜单\n2. 选择【在浏览器中打开】\n3. 在浏览器中粘贴会议链接\n\n或直接在任意浏览器中粘贴打开', + showCancel: false, + confirmText: '知道了' + }) + }, + fail: () => { + uni.showToast({ title: '复制失败', icon: 'none' }) + } + }) + // #endif + + // #ifndef MP-WEIXIN + // 非微信小程序:直接打开链接 + // @ts-ignore + if (typeof plus !== 'undefined') { + // App环境:使用plus打开系统浏览器 + plus.runtime.openURL(meetingUrl.value) + } else { + // H5环境:新窗口打开 + window.open(meetingUrl.value, '_blank') + } + // #endif +} + + +
+ + + + diff --git a/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/code/cache/982fcc4a48fc71aa877e0c038d3a664db035cc81 b/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/code/cache/982fcc4a48fc71aa877e0c038d3a664db035cc81 deleted file mode 100644 index f6ab1c15..00000000 --- a/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/code/cache/982fcc4a48fc71aa877e0c038d3a664db035cc81 +++ /dev/null @@ -1 +0,0 @@ -{"code":"import {} from \"vue\";\nexport default defineComponent({\n onLaunch: function () {\n uni.__f__('log', 'at App.uvue:7', 'App Launch');\n // 检查是否已选择模式\n this.checkModeSelection();\n },\n onShow: function () {\n uni.__f__('log', 'at App.uvue:12', 'App Show');\n },\n onHide: function () {\n uni.__f__('log', 'at App.uvue:15', 'App Hide');\n },\n onExit: function () {\n uni.__f__('log', 'at App.uvue:36', 'App Exit');\n },\n methods: {\n // 检查并选择模式\n checkModeSelection() {\n const mode = uni.getStorageSync('userMode');\n if (!mode) {\n this.showModeSelector();\n }\n },\n // 显示模式选择器\n showModeSelector() {\n uni.showActionSheet({\n itemList: ['员工模式 (17857100375)', '访客模式 (17857100376)'],\n success: (res) => {\n let wechatId = '';\n let userMode = '';\n let phone = '';\n if (res.tapIndex === 0) {\n wechatId = '17857100375';\n phone = '17857100375';\n userMode = 'staff';\n }\n else {\n wechatId = '17857100376';\n phone = '17857100376';\n userMode = 'guest';\n }\n // 存储选择\n uni.setStorageSync('userMode', userMode);\n uni.setStorageSync('wechatId', wechatId);\n uni.setStorageSync('phone', phone);\n uni.__f__('log', 'at App.uvue:67', '已选择模式:', userMode, 'wechatId:', wechatId);\n uni.showToast({\n title: userMode === 'staff' ? '员工模式' : '访客模式',\n icon: 'success'\n });\n },\n fail: () => {\n // 用户取消,默认使用访客模式\n uni.setStorageSync('userMode', 'guest');\n uni.setStorageSync('wechatId', '17857100376');\n uni.__f__('log', 'at App.uvue:77', '默认使用访客模式');\n }\n });\n }\n }\n});\n//# sourceMappingURL=F:/Project/urbanLifeline/urbanLifelineWeb/packages/workcase_wechat/App.uvue?vue&type=script&lang.uts.js.map","references":[],"uniExtApis":["uni.__f__","uni.getStorageSync","uni.setStorageSync","uni.showToast","uni.showActionSheet"],"map":"{\"version\":3,\"file\":\"App.uvue?vue&type=script&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"App.uvue?vue&type=script&lang.uts\"],\"names\":[],\"mappings\":\";AAIC,+BAAe;IACd,QAAQ,EAAE;QACT,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,eAAe,EAAC,YAAY,CAAC,CAAA;QAC7C,YAAY;QACZ,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC1B,CAAC;IACD,MAAM,EAAE;QACP,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IACD,MAAM,EAAE;QACP,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IAmBD,MAAM,EAAE;QACP,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,EAAE;QACR,UAAU;QACV,kBAAkB;YACjB,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;YAC3C,IAAI,CAAC,IAAI,EAAE;gBACV,IAAI,CAAC,gBAAgB,EAAE,CAAA;aACvB;QACF,CAAC;QACD,UAAU;QACV,gBAAgB;YACf,GAAG,CAAC,eAAe,CAAC;gBACnB,QAAQ,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;gBACtD,OAAO,EAAE,CAAC,GAAG;oBACZ,IAAI,QAAQ,GAAG,EAAE,CAAA;oBACjB,IAAI,QAAQ,GAAG,EAAE,CAAA;oBACjB,IAAI,KAAK,GAAG,EAAE,CAAA;oBACd,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;wBACvB,QAAQ,GAAG,aAAa,CAAA;wBACxB,KAAK,GAAG,aAAa,CAAA;wBACrB,QAAQ,GAAG,OAAO,CAAA;qBAClB;yBAAM;wBACN,QAAQ,GAAG,aAAa,CAAA;wBACxB,KAAK,GAAG,aAAa,CAAA;wBACrB,QAAQ,GAAG,OAAO,CAAA;qBAClB;oBACD,OAAO;oBACP,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;oBACxC,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;oBACxC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;oBAClC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;oBAC3E,GAAG,CAAC,SAAS,CAAC;wBACb,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;wBAC7C,IAAI,EAAE,SAAS;qBACf,CAAC,CAAA;gBACH,CAAC;gBACD,IAAI,EAAE;oBACL,gBAAgB;oBAChB,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;oBACvC,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;oBAC7C,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;gBAC7C,CAAC;aACD,CAAC,CAAA;QACH,CAAC;KACD;CACD,EAAA\"}"} diff --git a/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/1963ba1c3eb91672419b93f12a438ab8a720aa52 b/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/1963ba1c3eb91672419b93f12a438ab8a720aa52 deleted file mode 100644 index e69de29b..00000000 diff --git a/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/6d76150b48a4cde130e96c0c4eac62d2aa7598ec b/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/6d76150b48a4cde130e96c0c4eac62d2aa7598ec deleted file mode 100644 index e69de29b..00000000 diff --git a/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/a83754b56a42fedff55fe70ff80086976b3673dc b/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/a83754b56a42fedff55fe70ff80086976b3673dc deleted file mode 100644 index e69de29b..00000000 diff --git a/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/af0401d73d55cfca960e669c6ba7a0ddd53d8d61 b/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/af0401d73d55cfca960e669c6ba7a0ddd53d8d61 deleted file mode 100644 index e69de29b..00000000 diff --git a/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/ca02eb8e2adac71455fd697ef3fbc8ba962f8ae9 b/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/ca02eb8e2adac71455fd697ef3fbc8ba962f8ae9 deleted file mode 100644 index e69de29b..00000000 diff --git a/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/ccddf5085bf891484ed021b218161d9d93614f13 b/urbanLifelineWeb/packages/workcase_wechat/unpackage/cache/.mp-weixin/.uts2js/cache/uts_601c3a05cc232ee487c6924d81c2b4b5dbd72e3f/types/cache/ccddf5085bf891484ed021b218161d9d93614f13 deleted file mode 100644 index e69de29b..00000000