diff --git a/pages/case/batch-transfer.vue b/pages/case/batch-transfer.vue index 0f9c7f9..31ea4aa 100644 --- a/pages/case/batch-transfer.vue +++ b/pages/case/batch-transfer.vue @@ -1,37 +1,18 @@  diff --git a/pages/home/case-home.vue b/pages/home/case-home.vue index 6b255a7..a2dfac4 100644 --- a/pages/home/case-home.vue +++ b/pages/home/case-home.vue @@ -131,7 +131,7 @@ import dayjs from 'dayjs'; import api from '@/utils/api'; import useAccountStore from '@/store/account'; -import { toast } from '@/utils/widget'; +import { confirm as uniConfirm, hideLoading, loading as showLoading, toast } from '@/utils/widget'; // State const teams = ref([]); @@ -767,14 +767,149 @@ const cancelBatch = () => { selectedItems.value = []; }; -const handleTransfer = () => { +function showActionSheet(itemList = [], title = '') { + return new Promise((resolve, reject) => { + if (!Array.isArray(itemList) || itemList.length === 0) { + reject(new Error('empty')); + return; + } + uni.showActionSheet({ + title, + itemList, + success: ({ tapIndex }) => resolve(tapIndex), + fail: () => reject(new Error('cancel')), + }); + }); +} + +async function fetchTeamMembersByTeamId(teamId) { + const corpId = getCorpId(); + if (!corpId || !teamId) return []; + const res = await api('getTeamData', { corpId, teamId }); + if (!res?.success) return []; + const t = res?.data && typeof res.data === 'object' ? res.data : {}; + return Array.isArray(t.memberList) ? t.memberList : []; +} + +async function transferToCustomerPool(customerIds) { + try { + await uniConfirm('客户将与本团队解除服务关系,本团队成员将没有权限查询到客户档案。'); + } catch (e) { + return; + } + + const corpId = getCorpId(); + const currentTeamId = getTeamId(); + const creatorUserId = getUserId(); + if (!corpId || !currentTeamId || !creatorUserId) return toast('缺少用户/团队信息'); + + showLoading('保存中...'); + try { + const res = await api('transferCustomers', { + corpId, + customerIds, + currentTeamId, + operationType: 'transferToCustomerPool', + creatorUserId, + }); + if (!res?.success) { + toast(res?.message || '操作失败'); + return; + } + toast('操作成功'); + cancelBatch(); + await reload(true); + } catch (e) { + toast('操作失败'); + } finally { + hideLoading(); + } +} + +async function transferToOtherTeam(customerIds) { + const corpId = getCorpId(); + const currentTeamId = getTeamId(); + const creatorUserId = getUserId(); + if (!corpId || !currentTeamId || !creatorUserId) return toast('缺少用户/团队信息'); + + if (!teams.value.length) await loadTeams(); + const candidates = teams.value.filter((t) => String(t?.teamId || '') !== String(currentTeamId)); + if (!candidates.length) return toast('暂无可选团队'); + + let teamIndex; + try { + teamIndex = await showActionSheet(candidates.map((t) => t.name || ''), '选择新负责团队'); + } catch (e) { + return; + } + const pickedTeam = candidates[teamIndex]; + if (!pickedTeam?.teamId) return toast('团队信息异常'); + + let members = []; + try { + members = await fetchTeamMembersByTeamId(pickedTeam.teamId); + } catch (e) { + members = []; + } + if (!members.length) return toast('当前团队暂无可选成员'); + + const labels = members.map((m) => String(m?.anotherName || m?.name || m?.userid || '')); + let userIndex; + try { + userIndex = await showActionSheet(labels, '选择责任人'); + } catch (e) { + return; + } + const pickedUser = members[userIndex] || null; + const targetUserId = String(pickedUser?.userid || '') || ''; + if (!targetUserId) return toast('责任人信息异常'); + + showLoading('保存中...'); + try { + const res = await api('transferCustomers', { + corpId, + customerIds, + currentTeamId, + targetTeamId: String(pickedTeam.teamId), + targetUserId, + operationType: 'transferToOtherTeam', + creatorUserId, + }); + if (!res?.success) { + toast(res?.message || '操作失败'); + return; + } + toast('操作成功'); + cancelBatch(); + await reload(true); + } catch (e) { + toast('操作失败'); + } finally { + hideLoading(); + } +} + +const handleTransfer = async () => { if (selectedItems.value.length === 0) { uni.showToast({ title: '请选择患者', icon: 'none' }); return; } - uni.setStorageSync(BATCH_CUSTOMER_IDS_KEY, selectedItems.value.slice()); - // Navigate to Transfer Page - uni.navigateTo({ url: '/pages/case/batch-transfer' }); + + let tapIndex; + try { + tapIndex = await showActionSheet(['转移给其他团队', '转移至客户公共池']); + } catch (e) { + return; + } + + const customerIds = selectedItems.value.slice().map(String).filter(Boolean); + if (!customerIds.length) return toast('请选择患者'); + + if (tapIndex === 0) { + await transferToOtherTeam(customerIds); + } else if (tapIndex === 1) { + await transferToCustomerPool(customerIds); + } }; const handleShare = () => {