注册修改为绑定
This commit is contained in:
72
miniprogram/pages/index/modules/adminModule.ts
Normal file
72
miniprogram/pages/index/modules/adminModule.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
// 管理员模块 - 专门处理管理员相关功能
|
||||
import { showToast } from '../../utils/helpers';
|
||||
import { DataModule } from './dataModule';
|
||||
|
||||
export class AdminModule {
|
||||
private pageContext: any;
|
||||
private dataModule: DataModule;
|
||||
|
||||
constructor(pageContext: any, dataModule: DataModule) {
|
||||
this.pageContext = pageContext;
|
||||
this.dataModule = dataModule;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理管理员标记点点击
|
||||
*/
|
||||
onAdminMarkerClick(admin: any, position: { x: number, y: number }): void {
|
||||
console.log('管理员被点击:', admin);
|
||||
|
||||
// 显示管理员详情面板
|
||||
this.showAdminPanel(admin, position);
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示管理员详情面板
|
||||
*/
|
||||
private showAdminPanel(admin: any, position: { x: number, y: number }): void {
|
||||
console.log('显示管理员详情面板:', admin);
|
||||
|
||||
// 设置当前管理员
|
||||
this.dataModule.setCurrentDeliveryPerson(admin);
|
||||
|
||||
// 显示面板
|
||||
this.dataModule.toggleDeliveryPersonModal(true, 'bottom');
|
||||
}
|
||||
|
||||
/**
|
||||
* 隐藏管理员详情面板
|
||||
*/
|
||||
hideAdminPanel(): void {
|
||||
this.dataModule.toggleDeliveryPersonModal(false);
|
||||
this.dataModule.setCurrentDeliveryPerson(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 展开管理员详情面板
|
||||
*/
|
||||
expandAdminPanel(): void {
|
||||
this.dataModule.toggleDeliveryPersonModal(true, 'full');
|
||||
}
|
||||
|
||||
/**
|
||||
* 收起管理员详情面板
|
||||
*/
|
||||
collapseAdminPanel(): void {
|
||||
this.dataModule.toggleDeliveryPersonModal(true, 'bottom');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取管理员信息摘要
|
||||
*/
|
||||
getAdminSummary(admin: any): string {
|
||||
return `${admin.name || '管理员'} - ${admin.role || 'ADMIN'}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理资源
|
||||
*/
|
||||
cleanup(): void {
|
||||
console.log('清理管理员模块资源');
|
||||
}
|
||||
}
|
@@ -118,54 +118,6 @@ export class DataModule {
|
||||
latitude,
|
||||
longitude
|
||||
});
|
||||
|
||||
// 同时更新地图上的用户标记点
|
||||
this.updateUserMarkerPosition(longitude, latitude);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户标记点位置
|
||||
*/
|
||||
public updateUserMarkerPosition(longitude: number, latitude: number, userId?: number): void {
|
||||
const { markers } = this.pageContext.data;
|
||||
|
||||
// 如果没有指定用户ID,默认使用-1(当前用户)
|
||||
const targetUserId = userId !== undefined ? userId : -1;
|
||||
const markerTitle = targetUserId === -1 ? '用户位置' : `用户${targetUserId}`;
|
||||
|
||||
// 查找用户标记点
|
||||
const userMarkerIndex = markers.findIndex((marker: any) => marker.id === targetUserId);
|
||||
|
||||
if (userMarkerIndex !== -1) {
|
||||
// 更新用户标记点位置
|
||||
const updatedMarkers = [...markers];
|
||||
updatedMarkers[userMarkerIndex] = {
|
||||
...updatedMarkers[userMarkerIndex],
|
||||
latitude,
|
||||
longitude
|
||||
};
|
||||
|
||||
this.updateMarkers(updatedMarkers);
|
||||
} else {
|
||||
// 创建新的用户标记点
|
||||
const userInfo = this.pageContext.data.userInfo;
|
||||
const userRole = userInfo?.role || 'employee';
|
||||
const iconPath = userRole === 'ADMIN' ? '/images/crown.png' : '/images/truck.png';
|
||||
|
||||
const newUserMarker = {
|
||||
id: targetUserId,
|
||||
title: markerTitle,
|
||||
longitude: longitude,
|
||||
latitude: latitude,
|
||||
iconPath: iconPath,
|
||||
width: 40,
|
||||
height: 40,
|
||||
zIndex: targetUserId === -1 ? 99 : 98 // 当前用户层级更高
|
||||
};
|
||||
|
||||
const updatedMarkers = [...markers, newUserMarker];
|
||||
this.updateMarkers(updatedMarkers);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -1,12 +1,8 @@
|
||||
// 员工模块 - 处理所有员工(管理员和货运人员)管理、位置跟踪、交互
|
||||
import employeeService from '../../../services/employeeService';
|
||||
|
||||
// getApp是微信小程序全局函数,无需导入
|
||||
|
||||
import { showToast } from '../../../utils/helpers';
|
||||
// 货运人员模块 - 专门处理货运人员相关功能
|
||||
import { showToast } from '../../utils/helpers';
|
||||
import { DataModule } from './dataModule';
|
||||
|
||||
export class EmployeeModule {
|
||||
export class DeliveryPersonModule {
|
||||
private pageContext: any;
|
||||
private dataModule: DataModule;
|
||||
|
||||
@@ -16,31 +12,25 @@ export class EmployeeModule {
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载所有员工数据(包括管理员和货运人员)
|
||||
* 处理货运人员标记点点击
|
||||
*/
|
||||
async loadAllEmployees(): Promise<void> {
|
||||
try {
|
||||
// 获取所有员工数据
|
||||
const allEmployees = await employeeService.getEmployees();
|
||||
|
||||
console.log('所有员工数据加载完成,数量:', allEmployees.length);
|
||||
} catch (error) {
|
||||
console.error('加载员工数据失败:', error);
|
||||
showToast('加载员工数据失败');
|
||||
}
|
||||
onDeliveryPersonMarkerClick(deliveryPerson: any, position: { x: number, y: number }): void {
|
||||
console.log('货运人员被点击:', deliveryPerson);
|
||||
|
||||
// 显示货运人员详情面板(包含订单列表)
|
||||
this.showDeliveryPersonPanel(deliveryPerson, position);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 显示货运人员详情面板
|
||||
*/
|
||||
showDeliveryPersonPanel(person: any, position: { x: number, y: number }): void {
|
||||
// 关闭其他面板
|
||||
this.pageContext.hideAllPanels();
|
||||
private showDeliveryPersonPanel(deliveryPerson: any, position: { x: number, y: number }): void {
|
||||
console.log('显示货运人员详情面板:', deliveryPerson);
|
||||
|
||||
this.dataModule.setCurrentDeliveryPerson(person);
|
||||
this.dataModule.setPanelPosition(position);
|
||||
// 设置当前货运人员
|
||||
this.dataModule.setCurrentDeliveryPerson(deliveryPerson);
|
||||
|
||||
// 显示面板
|
||||
this.dataModule.toggleDeliveryPersonModal(true, 'bottom');
|
||||
}
|
||||
|
||||
@@ -67,13 +57,10 @@ export class EmployeeModule {
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理货运人员标记点点击
|
||||
* 获取货运人员信息摘要
|
||||
*/
|
||||
onDeliveryPersonMarkerClick(person: any, position: { x: number, y: number }): void {
|
||||
console.log('货运人员被点击:', person);
|
||||
|
||||
// 显示货运人员详情面板
|
||||
this.showDeliveryPersonPanel(person, position);
|
||||
getDeliveryPersonSummary(deliveryPerson: any): string {
|
||||
return `${deliveryPerson.name || '货运人员'} - ${deliveryPerson.role || 'DRIVER'}`;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -129,4 +116,11 @@ export class EmployeeModule {
|
||||
};
|
||||
return statusMap[status] || status;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理资源
|
||||
*/
|
||||
cleanup(): void {
|
||||
console.log('清理货运人员模块资源');
|
||||
}
|
||||
}
|
92
miniprogram/pages/index/modules/employeeModule.ts
Normal file
92
miniprogram/pages/index/modules/employeeModule.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
// 员工模块 - 处理所有员工(管理员和货运人员)的通用功能
|
||||
import { showToast } from '../../../utils/helpers';
|
||||
import { DataModule } from './dataModule';
|
||||
import employeeService from '../../../services/employeeService';
|
||||
|
||||
export class EmployeeModule {
|
||||
private pageContext: any;
|
||||
private dataModule: DataModule;
|
||||
|
||||
constructor(pageContext: any, dataModule: DataModule) {
|
||||
this.pageContext = pageContext;
|
||||
this.dataModule = dataModule;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理员工标记点点击 - 通用处理逻辑
|
||||
*/
|
||||
onEmployeeMarkerClick(employee: any, position: { x: number, y: number }): void {
|
||||
console.log('员工被点击:', employee);
|
||||
|
||||
// 设置当前员工
|
||||
this.dataModule.setCurrentDeliveryPerson(employee);
|
||||
|
||||
// 显示面板
|
||||
this.dataModule.toggleDeliveryPersonModal(true, 'bottom');
|
||||
}
|
||||
|
||||
/**
|
||||
* 隐藏员工详情面板
|
||||
*/
|
||||
hideEmployeePanel(): void {
|
||||
this.dataModule.toggleDeliveryPersonModal(false);
|
||||
this.dataModule.setCurrentDeliveryPerson(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 展开员工详情面板
|
||||
*/
|
||||
expandEmployeePanel(): void {
|
||||
this.dataModule.toggleDeliveryPersonModal(true, 'full');
|
||||
}
|
||||
|
||||
/**
|
||||
* 收起员工详情面板
|
||||
*/
|
||||
collapseEmployeePanel(): void {
|
||||
this.dataModule.toggleDeliveryPersonModal(true, 'bottom');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取员工信息摘要
|
||||
*/
|
||||
getEmployeeSummary(employee: any): string {
|
||||
return `${employee.name || '员工'} - ${employee.role || '未知角色'}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取员工状态文本
|
||||
*/
|
||||
getEmployeeStatusText(status: string): string {
|
||||
const statusMap: Record<string, string> = {
|
||||
'idle': '空闲',
|
||||
'busy': '忙碌',
|
||||
'offline': '离线'
|
||||
};
|
||||
return statusMap[status] || status;
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载所有员工数据
|
||||
*/
|
||||
async loadAllEmployees(): Promise<void> {
|
||||
try {
|
||||
console.log('开始加载所有员工数据');
|
||||
const employees = await employeeService.getEmployees();
|
||||
console.log('员工数据加载完成:', employees);
|
||||
|
||||
// 这里可以添加员工数据处理逻辑,比如更新到dataModule
|
||||
// this.dataModule.updateEmployees(employees);
|
||||
} catch (error) {
|
||||
console.error('加载员工数据失败:', error);
|
||||
throw error; // 重新抛出错误,让调用方处理
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理资源
|
||||
*/
|
||||
cleanup(): void {
|
||||
console.log('清理员工模块资源');
|
||||
}
|
||||
}
|
@@ -281,7 +281,7 @@ export class LocationModule {
|
||||
} else if (userRole === 'DRIVER') {
|
||||
return '/images/truck.png'; // 司机图标
|
||||
} else {
|
||||
return '👤'; // 普通员工图标(表情符号)
|
||||
return '/images/truck.png'; // 普通员工也使用货运图标
|
||||
}
|
||||
}
|
||||
}
|
@@ -99,7 +99,7 @@ export class LoginModule {
|
||||
|
||||
/**
|
||||
* 执行登录流程 - 调用userService的登录方法
|
||||
* 静默登录失败后,只专注于登录本身,不涉及注册、签到等复杂逻辑
|
||||
* 静默登录失败后,只专注于登录本身,不涉及绑定、签到等复杂逻辑
|
||||
*/
|
||||
private async performLogin(): Promise<boolean> {
|
||||
try {
|
||||
@@ -322,6 +322,34 @@ export class LoginModule {
|
||||
console.warn('启动位置追踪失败,但不影响签到:', trackingError);
|
||||
}
|
||||
|
||||
// 加载业务数据(所有登录用户)
|
||||
try {
|
||||
console.log('用户签到成功,开始加载业务数据');
|
||||
// 获取主页面模块并加载业务数据
|
||||
const mainPageModule = this.pageContext.data.mainPageModule;
|
||||
if (mainPageModule && mainPageModule.loadBusinessData) {
|
||||
await mainPageModule.loadBusinessData();
|
||||
console.log('业务数据加载完成');
|
||||
}
|
||||
} catch (businessError) {
|
||||
console.warn('加载业务数据失败,但不影响签到:', businessError);
|
||||
}
|
||||
|
||||
// 如果是管理员用户,加载员工数据
|
||||
if (signInResult.employeeInfo && signInResult.employeeInfo.role === 'ADMIN') {
|
||||
try {
|
||||
console.log('管理员用户签到成功,开始加载员工数据');
|
||||
// 获取主页面模块并加载员工数据
|
||||
const mainPageModule = this.pageContext.data.mainPageModule;
|
||||
if (mainPageModule && mainPageModule.loadEmployeeData) {
|
||||
await mainPageModule.loadEmployeeData();
|
||||
console.log('员工数据加载完成');
|
||||
}
|
||||
} catch (employeeError) {
|
||||
console.warn('加载员工数据失败,但不影响签到:', employeeError);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
} else {
|
||||
console.warn('签到失败:', signInResult.message);
|
||||
@@ -386,7 +414,7 @@ export class LoginModule {
|
||||
const authStatus = pageData.authStatus || {};
|
||||
const userInfo = pageData.userInfo;
|
||||
|
||||
// 显示条件:已获取微信code、用户状态不是已签到、且用户不是游客(已注册用户)
|
||||
// 显示条件:已获取微信code、用户状态不是已签到、且用户不是游客(已绑定用户)
|
||||
const result = (
|
||||
authStatus.hasWxCode &&
|
||||
(authStatus.userStatus === 'registered' || authStatus.userStatus === 'signed_out') &&
|
||||
@@ -406,7 +434,7 @@ export class LoginModule {
|
||||
const authStatus = pageData.authStatus || {};
|
||||
const userInfo = pageData.userInfo;
|
||||
|
||||
// 显示条件:已获取微信code、用户状态为未注册、且用户是游客
|
||||
// 显示条件:已获取微信code、用户状态为未绑定、且用户是游客
|
||||
const result = (
|
||||
authStatus.hasWxCode &&
|
||||
authStatus.userStatus === 'unregistered' &&
|
||||
|
@@ -3,7 +3,9 @@ import { LoginModule } from './loginModule';
|
||||
import { MapModule } from './mapModule';
|
||||
import { OrderModule } from './orderModule';
|
||||
import { WarehouseModule } from './warehouseModule';
|
||||
import { EmployeeModule } from './deliveryPersonModule';
|
||||
import { EmployeeModule } from './employeeModule';
|
||||
import { AdminModule } from './adminModule';
|
||||
import { DeliveryPersonModule } from './deliveryPersonModule';
|
||||
import { LocationModule } from './locationModule';
|
||||
import { DataModule } from './dataModule';
|
||||
import { showToast } from '../../../utils/helpers';
|
||||
@@ -29,6 +31,8 @@ export class MainPageModule {
|
||||
private orderModule: OrderModule;
|
||||
private warehouseModule: WarehouseModule;
|
||||
private employeeModule: EmployeeModule;
|
||||
private adminModule: AdminModule;
|
||||
private deliveryPersonModule: DeliveryPersonModule;
|
||||
private locationModule: LocationModule;
|
||||
|
||||
constructor(pageContext: any) {
|
||||
@@ -40,7 +44,9 @@ export class MainPageModule {
|
||||
this.mapModule = new MapModule(pageContext, this.dataModule);
|
||||
this.orderModule = new OrderModule(pageContext, this.dataModule);
|
||||
this.warehouseModule = new WarehouseModule(pageContext, this.dataModule);
|
||||
this.employeeModule = new EmployeeModule(pageContext, this.dataModule);
|
||||
this.employeeModule = new EmployeeModule(this.pageContext, this.dataModule);
|
||||
this.adminModule = new AdminModule(this.pageContext, this.dataModule);
|
||||
this.deliveryPersonModule = new DeliveryPersonModule(this.pageContext, this.dataModule);
|
||||
this.locationModule = new LocationModule(pageContext, this.dataModule);
|
||||
}
|
||||
|
||||
@@ -107,13 +113,8 @@ export class MainPageModule {
|
||||
// 加载公开数据(不需要登录)
|
||||
await this.loadPublicData();
|
||||
|
||||
// 检查是否已登录,只有已登录用户才能加载业务数据
|
||||
const app = getApp<any>();
|
||||
if (app.globalData.isLoggedIn) {
|
||||
await this.loadBusinessData();
|
||||
} else {
|
||||
console.log('用户未登录,不加载业务数据');
|
||||
}
|
||||
// 业务数据(订单和员工数据)在用户签到后单独加载
|
||||
console.log('公开数据加载完成,业务数据将在用户签到后加载');
|
||||
|
||||
} catch (error) {
|
||||
console.error('加载数据失败:', error);
|
||||
@@ -139,22 +140,44 @@ export class MainPageModule {
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载业务数据
|
||||
* 加载业务数据(仅在用户签到后调用)
|
||||
*/
|
||||
private async loadBusinessData(): Promise<void> {
|
||||
public async loadBusinessData(): Promise<void> {
|
||||
console.log('加载业务数据');
|
||||
|
||||
try {
|
||||
// 并行加载各种业务数据(需要登录)
|
||||
await Promise.all([
|
||||
this.orderModule.loadPendingOrders(),
|
||||
this.employeeModule.loadAllEmployees()
|
||||
]);
|
||||
// 加载待处理订单(所有登录用户都可以看到)
|
||||
await this.orderModule.loadPendingOrders();
|
||||
|
||||
console.log('所有业务数据加载完成');
|
||||
console.log('业务数据加载完成');
|
||||
} catch (error) {
|
||||
console.error('加载业务数据失败:', error);
|
||||
showToast('业务数据加载失败');
|
||||
throw error; // 重新抛出错误,让调用方处理
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载员工数据(仅在管理员签到后调用)
|
||||
*/
|
||||
public async loadEmployeeData(): Promise<void> {
|
||||
console.log('加载员工数据');
|
||||
|
||||
try {
|
||||
// 获取用户信息
|
||||
const app = getApp<any>();
|
||||
const userInfo = app.globalData.userInfo;
|
||||
|
||||
// 只有管理员才加载员工列表
|
||||
if (userInfo && userInfo.role === 'ADMIN') {
|
||||
console.log('管理员用户,加载员工列表');
|
||||
await this.employeeModule.loadAllEmployees();
|
||||
console.log('员工数据加载完成');
|
||||
} else {
|
||||
console.log('非管理员用户,跳过员工列表加载');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载员工数据失败:', error);
|
||||
throw error; // 重新抛出错误,让调用方处理
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,9 +283,16 @@ export class MainPageModule {
|
||||
case 'warehouse':
|
||||
this.warehouseModule.onWarehouseMarkerClick(marker.data, e);
|
||||
break;
|
||||
case 'delivery_person':
|
||||
this.employeeModule.onDeliveryPersonMarkerClick(marker.data, e);
|
||||
break;
|
||||
case 'employee':
|
||||
// 员工标记点点击 - 根据角色分发到不同模块
|
||||
if (marker.data.role === 'ADMIN') {
|
||||
// 管理员 - 由adminModule处理
|
||||
this.adminModule.onAdminMarkerClick(marker.data, e);
|
||||
} else {
|
||||
// 货运人员 - 由deliveryPersonModule处理(包含订单列表)
|
||||
this.deliveryPersonModule.onDeliveryPersonMarkerClick(marker.data, e);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this.mapModule.onMarkerTap(e);
|
||||
break;
|
||||
@@ -304,6 +334,13 @@ export class MainPageModule {
|
||||
return this.employeeModule;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取管理员模块
|
||||
*/
|
||||
getAdminModule(): AdminModule {
|
||||
return this.adminModule;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取位置模块
|
||||
*/
|
||||
@@ -345,6 +382,10 @@ export class MainPageModule {
|
||||
// 清理位置模块
|
||||
this.locationModule.cleanup();
|
||||
|
||||
// 清理员工和管理员模块
|
||||
this.employeeModule.cleanup();
|
||||
this.adminModule.cleanup();
|
||||
|
||||
// 这里可以添加其他需要清理的资源
|
||||
console.log('✅ 主页面模块清理完成');
|
||||
}
|
||||
|
Reference in New Issue
Block a user