Files
WXProgram/miniprogram/pages/staff/warehouse-management.ts
2025-10-19 23:38:54 +08:00

324 lines
6.9 KiB
TypeScript

// 仓库管理页面 - 处理仓库的增删改查和库存管理
import { showToast } from '../../utils/helpers';
import { WarehouseInfo } from '../../types';
import warehouseService from '../../services/warehouseService';
Page({
data: {
// 仓库列表
warehouses: [] as WarehouseInfo[],
filteredWarehouses: [] as WarehouseInfo[],
// 页面状态
currentTab: 'list', // list: 列表页, add: 添加页
loading: false,
// 添加仓库表单数据
addForm: {
name: '',
address: '',
contact: '',
phone: '',
description: '',
capacity: 500,
longitude: 102.833722,
latitude: 24.880095
},
// 错误信息
errorMessage: '',
successMessage: '',
// 搜索关键词
searchKeyword: '',
// 用户信息
userInfo: null as any
},
onLoad() {
this.loadWarehouses();
},
onShow() {
// 页面显示时刷新数据
this.loadWarehouses();
},
// 加载仓库列表
async loadWarehouses() {
this.setData({
loading: true,
errorMessage: ''
});
try {
const warehouses = await warehouseService.getWarehouses();
this.setData({
warehouses,
filteredWarehouses: warehouses,
loading: false
});
} catch (error) {
console.error('加载仓库列表失败:', error);
this.setData({
loading: false,
errorMessage: '加载仓库列表失败,请重试'
});
}
},
// 切换标签页
switchTab(e: any) {
const tab = e.currentTarget.dataset.tab;
this.setData({
currentTab: tab
});
},
// 搜索仓库
onSearchInput(e: any) {
const keyword = e.detail.value.trim();
this.setData({
searchKeyword: keyword
});
this.filterWarehouses(keyword);
},
// 过滤仓库列表
filterWarehouses(keyword: string) {
const { warehouses } = this.data;
if (!keyword) {
this.setData({
filteredWarehouses: warehouses
});
return;
}
const filtered = warehouses.filter(warehouse =>
warehouse.name.includes(keyword) ||
warehouse.address.includes(keyword) ||
warehouse.contact?.includes(keyword) ||
warehouse.phone?.includes(keyword)
);
this.setData({
filteredWarehouses: filtered
});
},
// 表单输入处理
onNameInput(e: any) {
this.setData({
'addForm.name': e.detail.value
});
},
onAddressInput(e: any) {
this.setData({
'addForm.address': e.detail.value
});
},
onContactInput(e: any) {
this.setData({
'addForm.contact': e.detail.value
});
},
onPhoneInput(e: any) {
this.setData({
'addForm.phone': e.detail.value
});
},
onDescriptionInput(e: any) {
this.setData({
'addForm.description': e.detail.value
});
},
onCapacityInput(e: any) {
this.setData({
'addForm.capacity': parseInt(e.detail.value) || 500
});
},
// 验证表单
validateForm(): boolean {
const { name, address, contact, phone } = this.data.addForm;
if (!name.trim()) {
this.setData({
errorMessage: '请输入仓库名称'
});
return false;
}
if (!address.trim()) {
this.setData({
errorMessage: '请输入仓库地址'
});
return false;
}
if (!contact?.trim()) {
this.setData({
errorMessage: '请输入联系人'
});
return false;
}
if (!phone?.trim()) {
this.setData({
errorMessage: '请输入联系电话'
});
return false;
}
return true;
},
// 提交添加仓库表单
async submitAddForm() {
this.setData({
errorMessage: '',
successMessage: ''
});
if (!this.validateForm()) {
return;
}
this.setData({
loading: true
});
try {
await warehouseService.createWarehouse(this.data.addForm);
this.setData({
loading: false,
successMessage: '仓库添加成功',
currentTab: 'list'
});
// 重置表单
this.resetForm();
// 重新加载仓库列表
this.loadWarehouses();
showToast('仓库添加成功');
} catch (error) {
console.error('添加仓库失败:', error);
this.setData({
loading: false,
errorMessage: '添加仓库失败,请重试'
});
}
},
// 重置表单
resetForm() {
this.setData({
addForm: {
name: '',
address: '',
contact: '',
phone: '',
description: '',
capacity: 500,
longitude: 102.833722,
latitude: 24.880095
}
});
},
// 删除仓库
async deleteWarehouse(e: any) {
const warehouseId = e.currentTarget.dataset.id;
const warehouseName = e.currentTarget.dataset.name;
wx.showModal({
title: '确认删除',
content: `确定要删除仓库"${warehouseName}"吗?此操作不可恢复。`,
confirmText: '删除',
confirmColor: '#ff4757',
cancelText: '取消',
success: async (res) => {
if (res.confirm) {
try {
await warehouseService.deleteWarehouse(warehouseId);
showToast('仓库删除成功');
// 重新加载仓库列表
this.loadWarehouses();
} catch (error) {
console.error('删除仓库失败:', error);
showToast('删除仓库失败');
}
}
}
});
},
// 获取仓库状态文本
getWarehouseStatusText(status: 'open' | 'closed' | 'maintenance' | undefined): string {
const statusMap: Record<string, string> = {
'open': '营业中',
'closed': '已关闭',
'maintenance': '维护中'
};
return statusMap[status || 'open'] || '未知状态';
},
// 获取仓库库存状态
getWarehouseInventoryStatus(currentStock: number, capacity: number): string {
const percentage = (currentStock / capacity) * 100;
if (percentage >= 90) return '库存充足';
if (percentage >= 60) return '库存正常';
if (percentage >= 30) return '库存偏低';
return '库存不足';
},
// 获取库存状态对应的颜色
getInventoryStatusColor(currentStock: number, capacity: number): string {
const percentage = (currentStock / capacity) * 100;
if (percentage >= 90) return '#52c41a'; // 绿色
if (percentage >= 60) return '#1890ff'; // 蓝色
if (percentage >= 30) return '#faad14'; // 橙色
return '#f5222d'; // 红色
},
// 下拉刷新
onPullDownRefresh() {
this.loadWarehouses().finally(() => {
wx.stopPullDownRefresh();
});
},
// 清除错误信息
clearError() {
this.setData({
errorMessage: ''
});
},
// 清除成功信息
clearSuccess() {
this.setData({
successMessage: ''
});
},
/**
* 返回上一页
*/
goBack() {
wx.navigateBack();
}
});