| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- import { getMyOrders } from '@/api/fulfiller'
- import { getServiceList } from '@/api/service'
- export default {
- data() {
- return {
- currentTab: 0,
- tabs: ['待接送/服务', '配送/服务中', '已完成', '已拒绝'],
- typeFilterOptions: ['全部类型'],
- currentTypeFilterIdx: 0,
- activeDropdown: 0,
- hasTimeFilter: false,
- currentMonth: '2026年2月',
- weekDays: ['日', '一', '二', '三', '四', '五', '六'],
- calendarDays: [],
- selectedDateRange: [],
- allOrderList: [],
- serviceList: [],
- searchContent: '',
- startServiceTime: '',
- endServiceTime: '',
- showPetModal: false,
- currentPetInfo: {},
- showNavModal: false,
- navTargetItem: null,
- navTargetPointType: '',
- activeCallItem: null,
- showRemarkInput: false,
- remarkText: ''
- }
- },
- created() {
- this.initCalendar();
- },
- async onLoad() {
- await this.loadServiceList()
- await this.loadOrders()
- },
- onShow() {
- this.loadOrders()
- },
- watch: {
- currentTab() {
- this.loadOrders()
- },
- currentTypeFilterIdx() {
- this.loadOrders()
- }
- },
- computed: {
- orderList() {
- return this.allOrderList;
- }
- },
- methods: {
- async loadServiceList() {
- try {
- const res = await getServiceList()
- this.serviceList = res.data || []
- this.typeFilterOptions = ['全部类型', ...this.serviceList.map(s => s.name)]
- } catch (err) {
- console.error('获取服务类型失败:', err)
- }
- },
- async loadOrders() {
- try {
- const statusMap = { 0: 2, 1: 3, 2: 5, 3: null }
- const serviceId = this.currentTypeFilterIdx > 0 ? this.serviceList[this.currentTypeFilterIdx - 1]?.id : undefined
- const params = {
- status: statusMap[this.currentTab],
- content: this.searchContent || undefined,
- service: serviceId,
- startServiceTime: this.startServiceTime || undefined,
- endServiceTime: this.endServiceTime || undefined
- }
- console.log('订单列表请求参数:', params)
- const res = await getMyOrders(params)
- console.log('订单列表响应:', res)
- const orders = res.rows || []
- console.log('订单数量:', orders.length)
- this.allOrderList = orders.map(order => this.transformOrder(order, this.currentTab))
- } catch (err) {
- console.error('获取订单列表失败:', err)
- this.allOrderList = []
- }
- },
- transformOrder(order, tabIndex) {
- const service = this.serviceList.find(s => s.id === order.service)
- const serviceText = service?.name || '未知'
- const serviceIcon = service?.icon || '/static/icons/car.svg'
- const mode = service?.mode || 0
- const isRoundTrip = mode === 1
- // 根据 Tab 索引强制指定状态文字,忽略后端缺失的 status 字段
- let statusText = '接单'
- if (tabIndex === 0) {
- statusText = '接单' // 待接送/服务
- } else if (tabIndex === 1) {
- statusText = isRoundTrip ? '出发' : '开始' // 配送/服务中
- } else if (tabIndex === 2) {
- statusText = '已完成' // 已完成
- } else if (tabIndex === 3) {
- statusText = '已拒绝' // 已拒绝
- }
- return {
- id: order.id,
- type: isRoundTrip ? 1 : 2,
- typeText: serviceText,
- typeIcon: serviceIcon,
- statusText: statusText,
- price: (order.price / 100).toFixed(2),
- timeLabel: isRoundTrip ? '取货时间' : '服务时间',
- time: order.serviceTime || '',
- petAvatar: '/static/dog.png',
- petName: order.petName || '',
- petBreed: order.breed || '',
- startLocation: order.fromAddress || '',
- startAddress: order.fromAddress || '',
- startDistance: '0km',
- endLocation: (order.customerName || '') + ' ' + (order.customerPhone || ''),
- endAddress: order.toAddress || '',
- endDistance: '0km',
- serviceContent: order.remark || '',
- remark: order.remark || ''
- }
- },
- getDisplayStatus(item) {
- if (item.statusText === '已完成') return '已完成';
- if (item.statusText === '已拒绝') return '已拒绝';
- if (item.statusText === '接单') {
- return item.type === 1 ? '待接送' : '待服务';
- }
- return item.type === 1 ? '配送中' : '服务中';
- },
- getStatusClass(item) {
- let display = this.getDisplayStatus(item);
- if (display === '已完成') return 'finish';
- if (display === '已拒绝') return 'reject';
- if (display === '配送中' || display === '服务中') return 'processing';
- return 'highlight';
- },
- goToDetail(item) {
- uni.navigateTo({ url: `/pages/orders/detail?id=${item.id}` });
- },
- showPetProfile(item) {
- this.currentPetInfo = {
- ...item,
- petGender: 'M',
- petAge: '2岁',
- petWeight: '15kg',
- petPersonality: '活泼亲人,精力旺盛',
- petHobby: '喜欢追飞盘,爱吃肉干',
- petRemark: '肠胃较弱,不能乱喂零食;出门易爆冲,请拉紧牵引绳。',
- petTags: ['拉响警报', '不能吃鸡肉', '精力旺盛'],
- petLogs: [
- { date: '2026-02-09 14:00', content: '今天遛弯拉了两次粑粑,精神状态很好。', recorder: '王阿姨' },
- { date: '2026-02-08 10:30', content: '有些挑食,剩了小半碗狗粮。', recorder: '李师傅' },
- { date: '2026-02-05 09:00', content: '建档。', recorder: '系统记录' }
- ]
- };
- this.showPetModal = true;
- },
- closePetProfile() {
- this.showPetModal = false;
- },
- openNavigation(item, pointType) {
- this.navTargetItem = item;
- this.navTargetPointType = pointType;
- this.showNavModal = true;
- },
- closeNavModal() {
- this.showNavModal = false;
- },
- chooseMap(mapType) {
- let item = this.navTargetItem;
- let pointType = this.navTargetPointType;
- let name = pointType === 'start' ? item.startLocation : item.endLocation;
- let address = pointType === 'start' ? item.startAddress : item.endAddress;
- this.showNavModal = false;
- uni.openLocation({
- latitude: 30.52,
- longitude: 114.31,
- name: name || '目的地',
- address: address || '默认地址',
- success: function () {
- console.log('打开导航成功: ' + mapType);
- }
- });
- },
- toggleCallMenu(item) {
- if (this.activeCallItem === item) {
- this.activeCallItem = null;
- } else {
- this.activeCallItem = item;
- }
- },
- closeCallMenu() {
- this.activeCallItem = null;
- },
- doCall(type) {
- let phoneNum = ''
- if (type === 'merchant') {
- phoneNum = '18900008451'
- } else if (type === 'customer') {
- phoneNum = '13800000001'
- }
- if (phoneNum) {
- uni.makePhoneCall({ phoneNumber: phoneNum })
- }
- this.activeCallItem = null;
- },
- reportAbnormal(item) {
- uni.navigateTo({ url: '/pages/orders/anomaly?orderId=' + (item.id || '') });
- },
- toggleDropdown(idx) {
- if (this.activeDropdown === idx) {
- this.activeDropdown = 0;
- } else {
- this.activeDropdown = idx;
- }
- },
- closeDropdown() {
- this.activeDropdown = 0;
- },
- selectType(index) {
- this.currentTypeFilterIdx = index;
- this.closeDropdown();
- },
- initCalendar() {
- let days = [];
- for (let i = 1; i <= 28; i++) {
- days.push(i);
- }
- this.calendarDays = days;
- this.selectedDateRange = [2, 4];
- },
- prevMonth() { uni.showToast({ title: '上个月', icon: 'none' }); },
- nextMonth() { uni.showToast({ title: '下个月', icon: 'none' }); },
- selectDateItem(day) {
- if (this.selectedDateRange.length === 2) {
- this.selectedDateRange = [day];
- } else if (this.selectedDateRange.length === 1) {
- let start = this.selectedDateRange[0];
- if (day > start) {
- this.selectedDateRange = [start, day];
- } else if (day < start) {
- this.selectedDateRange = [day, start];
- } else {
- this.selectedDateRange = [];
- }
- } else {
- this.selectedDateRange = [day];
- }
- },
- getDateClass(day) {
- if (this.selectedDateRange.length === 0) return '';
- if (this.selectedDateRange.length === 1) {
- return day === this.selectedDateRange[0] ? 'is-start' : '';
- }
- let start = this.selectedDateRange[0];
- let end = this.selectedDateRange[1];
- if (day === start) return 'is-start';
- if (day === end) return 'is-end';
- if (day > start && day < end) return 'is-between';
- return '';
- },
- resetTimeFilter() {
- this.hasTimeFilter = false;
- this.selectedDateRange = [];
- uni.showToast({ title: '已重置服务时间', icon: 'none' });
- this.closeDropdown();
- },
- confirmTimeFilter() {
- if (this.selectedDateRange.length === 0) {
- uni.showToast({ title: '请先选择日期', icon: 'none' });
- return;
- }
- let text = this.selectedDateRange.length === 2 ?
- `${this.selectedDateRange[0]}日-${this.selectedDateRange[1]}日` :
- `${this.selectedDateRange[0]}日`;
- uni.showToast({ title: '已应用: ' + text, icon: 'none' });
- this.hasTimeFilter = true;
- this.closeDropdown();
- },
- getMainActionText(item) {
- return '查看详情';
- },
- mainAction(item) {
- uni.navigateTo({ url: `/pages/orders/detail?id=${item.id}` });
- },
- openRemarkInput() {
- this.remarkText = '';
- this.showRemarkInput = true;
- },
- closeRemarkInput() {
- this.showRemarkInput = false;
- this.remarkText = '';
- },
- submitRemark() {
- const text = this.remarkText.trim();
- if (!text) {
- uni.showToast({ title: '备注内容不能为空', icon: 'none' });
- return;
- }
- const now = new Date();
- const dateStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}`;
- if (!this.currentPetInfo.petLogs) {
- this.$set(this.currentPetInfo, 'petLogs', []);
- }
- this.currentPetInfo.petLogs.unshift({
- date: dateStr,
- content: text,
- recorder: '我'
- });
- uni.showToast({ title: '备注已添加', icon: 'success' });
- this.closeRemarkInput();
- }
- }
- }
|