index修改

This commit is contained in:
2025-12-25 13:36:53 +08:00
parent 78db3fc9e4
commit eb827a961c
4 changed files with 85 additions and 97 deletions

View File

@@ -413,26 +413,46 @@
}
}
// 显示工单创建器
function showCreator() {
showWorkcaseCreator.value = true
// 直接跳转到工单详情页的 create 模式(复用 workcaseDetail 页面)
async function showCreator() {
// 首页直接创建工单为了让工单和聊天室绑定这里先创建一个聊天室workcase类型再带 roomId 跳转
// 如果你希望“无聊天室也能创建工单”,后端 WorkcaseServiceImpl 也支持 roomId 为空时自动创建聊天室
uni.showLoading({ title: '正在创建工单...' })
try {
const res = await workcaseChatAPI.createChatRoom({
guestId: userInfo.value.userId || userInfo.value.wechatId,
guestName: userInfo.value.username || '访客',
roomName: `${userInfo.value.username || '访客'}的工单`,
roomType: 'workcase',
status: 'active',
aiSessionId: chatId.value || ''
})
uni.hideLoading()
if (res.success && res.data?.roomId) {
const roomId = res.data.roomId
uni.navigateTo({
url: `/pages/workcase/workcaseDetail/workcaseDetail?mode=create&roomId=${roomId}`
})
return
}
uni.showToast({ title: res.message || '创建工单失败', icon: 'none' })
} catch (e) {
uni.hideLoading()
console.error('首页创建工单失败:', e)
uni.showToast({ title: '创建工单失败,请稍后重试', icon: 'none' })
}
}
// 隐藏工单创建器
// 兼容旧逻辑:不再使用页面内工单创建器
function hideCreator() {
showWorkcaseCreator.value = false
}
// 工单创建成功
// 兼容旧逻辑:不再使用页面内工单创建
function onWorkcaseCreated(workcaseData : TbWorkcaseDTO) {
hideCreator()
uni.showToast({
title: '工单创建成功',
icon: 'success'
})
// 添加成功消息
addMessage('bot', `工单创建成功!\n类型${workcaseData.type || ''}\n设备${workcaseData.device || ''}\n我们会尽快处理您的问题。`, ['查看工单', '创建新工单'])
}

View File

@@ -254,72 +254,48 @@ onLoad((options: any) => {
// 处理 mode 参数
if (options.mode === 'create') {
mode.value = 'create'
// 从 storage 读取登录信息
// create 模式必须从上一页带入 roomId前端先建 room 的策略)
const roomId = options.roomId || ''
if (!roomId) {
uni.showToast({ title: '缺少roomId无法创建工单', icon: 'none' })
// 直接退出,避免后续提交失败
setTimeout(() => uni.navigateBack(), 800)
return
}
// 只使用 loginDomain没有就空
let username = ''
let phone = ''
let userId = ''
try {
let loginDomainRaw = uni.getStorageSync('loginDomain')
let username = ''
let phone = ''
let userId = ''
let roomId = options.roomId || ''
const loginDomainRaw = uni.getStorageSync('loginDomain')
if (loginDomainRaw) {
// 如果是字符串,需要先解析
let loginDomain = loginDomainRaw
if (typeof loginDomainRaw === 'string') {
loginDomain = JSON.parse(loginDomainRaw)
}
// 尝试多种可能的字段路径
username = loginDomain.userInfo?.username
phone = loginDomain.user?.phone
userId = loginDomain.userInfo?.userId
}
// 创建模式,初始化表单并填充用户信息
workcase.value = {
username: username,
phone: phone,
userId: userId,
device: '',
type: '',
address: '',
description: '',
emergency: 'normal',
imgs: []
}
// 如果有 roomId添加到工单数据中
if (roomId) {
workcase.value.roomId = roomId
}
} catch (error) {
console.error('读取用户信息失败:', error)
// 初始化空表单
workcase.value = {
username: '',
phone: '',
device: '',
type: '',
address: '',
description: '',
emergency: 'normal',
imgs: []
}
// 如果有 roomId添加到工单数据中
if (options.roomId) {
workcase.value.roomId = options.roomId
const loginDomain = typeof loginDomainRaw === 'string' ? JSON.parse(loginDomainRaw) : loginDomainRaw
username = loginDomain?.userInfo?.username || ''
phone = loginDomain?.user?.phone || ''
userId = loginDomain?.userInfo?.userId || ''
}
} catch (e) {
console.error('读取loginDomain失败:', e)
}
workcase.value = {
username,
phone,
userId,
roomId,
device: '',
type: '',
address: '',
description: '',
emergency: 'normal',
imgs: []
}
} else if (options.workcaseId) {
// 查看模式
workcaseId.value = options.workcaseId
mode.value = 'view'
loadWorkcaseDetail(workcaseId.value)
}
// 查看模式
workcaseId.value = options.workcaseId
mode.value = 'view'
loadWorkcaseDetail(workcaseId.value)
}
})
onMounted(() => {
@@ -413,8 +389,12 @@ function getTimelineDotClass(status: string): string {
// 查看对话
function handleViewChat() {
if (!workcase.value.roomId) {
uni.showToast({ title: '未关联聊天室', icon: 'none' })
return
}
uni.navigateTo({
url: `/pages/chatRoom/chatRoom/chatRoom?roomId=${workcase.value.workcaseId}`
url: `/pages/chatRoom/chatRoom/chatRoom?roomId=${workcase.value.roomId}`
})
}
@@ -616,9 +596,12 @@ async function submitWorkcase() {
title: '工单创建成功',
icon: 'success'
})
// 创建成功后直接回到该聊天室(闭环)
setTimeout(() => {
uni.navigateBack()
}, 1500)
uni.redirectTo({
url: `/pages/chatRoom/chatRoom/chatRoom?roomId=${workcase.value.roomId}&workcaseId=${res.data.workcaseId || ''}`
})
}, 600)
} else {
uni.showToast({
title: res.message || '创建失败',

View File

@@ -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\"}"}