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 @@
- 选择新负责团队
-
- {{ team ? team.name : '请选择团队' }}
-
-
-
-
- 选择责任人
-
- {{ userLabel || '请选择责任人' }}
-
-
-
-
- 客户将与本团队解除服务关系,本团队成员将没有权限查询到客户档案。
-
-
-
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 = () => {