|
@@ -6,7 +6,12 @@
|
|
|
<view class="status-banner-container" :class="order.statusType" id="nav-header">
|
|
<view class="status-banner-container" :class="order.statusType" id="nav-header">
|
|
|
<view class="status-banner-content">
|
|
<view class="status-banner-content">
|
|
|
<view class="header-main">
|
|
<view class="header-main">
|
|
|
- <text class="status-title">{{ order.statusName }}</text>
|
|
|
|
|
|
|
+ <view class="header-title-row">
|
|
|
|
|
+ <text class="status-title">{{ order.statusName }}</text>
|
|
|
|
|
+ <view class="urgent-badge" v-if="order.isUrgent">
|
|
|
|
|
+ <text>加急</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
<text class="status-sub">{{ statusSubText }}</text>
|
|
<text class="status-sub">{{ statusSubText }}</text>
|
|
|
</view>
|
|
</view>
|
|
|
<view class="header-icon-wrap">
|
|
<view class="header-icon-wrap">
|
|
@@ -26,8 +31,10 @@
|
|
|
</view>
|
|
</view>
|
|
|
<view class="data-item"><text class="l">型号名称</text><text class="v">{{ model.typeName ||
|
|
<view class="data-item"><text class="l">型号名称</text><text class="v">{{ model.typeName ||
|
|
|
'铝型材主料' }}</text></view>
|
|
'铝型材主料' }}</text></view>
|
|
|
- <view class="data-item"><text class="l">单据编号</text><text class="v">{{ model.docCode || '-' }}</text></view>
|
|
|
|
|
- <view class="data-item"><text class="l">项目号</text><text class="v">{{ model.itemNo || '-' }}</text></view>
|
|
|
|
|
|
|
+ <view class="data-item"><text class="l">单据编号</text><text class="v">{{ model.docCode || '-'
|
|
|
|
|
+ }}</text></view>
|
|
|
|
|
+ <view class="data-item"><text class="l">项目号</text><text class="v">{{ model.itemNo || '-'
|
|
|
|
|
+ }}</text></view>
|
|
|
<view class="data-item"><text class="l">型材材质</text><text class="v">{{ model.material ||
|
|
<view class="data-item"><text class="l">型材材质</text><text class="v">{{ model.material ||
|
|
|
'6063-T5' }}</text></view>
|
|
'6063-T5' }}</text></view>
|
|
|
<view class="line-split"></view>
|
|
<view class="line-split"></view>
|
|
@@ -42,6 +49,11 @@
|
|
|
'1.2' }} mm</text></view>
|
|
'1.2' }} mm</text></view>
|
|
|
<view class="data-item"><text class="l">需求支数</text><text class="v highlight">{{ model.count }}
|
|
<view class="data-item"><text class="l">需求支数</text><text class="v highlight">{{ model.count }}
|
|
|
支</text></view>
|
|
支</text></view>
|
|
|
|
|
+ <view class="line-split"></view>
|
|
|
|
|
+ <view class="data-item"><text class="l">挤压入库数</text><text class="v">{{ model.semiInQty != null ?
|
|
|
|
|
+ model.semiInQty : '-' }}</text></view>
|
|
|
|
|
+ <view class="data-item"><text class="l">成品入库数</text><text class="v">{{ model.goodsInQty != null
|
|
|
|
|
+ ? model.goodsInQty : '-' }}</text></view>
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
@@ -49,8 +61,9 @@
|
|
|
<view class="data-group-card shadow-less">
|
|
<view class="data-group-card shadow-less">
|
|
|
<view class="card-head">订单详情</view>
|
|
<view class="card-head">订单详情</view>
|
|
|
<view class="data-item"><text class="l">订单单号</text><text class="v selectable">{{ order.orderNo
|
|
<view class="data-item"><text class="l">订单单号</text><text class="v selectable">{{ order.orderNo
|
|
|
- }}</text></view>
|
|
|
|
|
- <view class="data-item"><text class="l">单据编号</text><text class="v selectable">{{ order.docCode || '-' }}</text></view>
|
|
|
|
|
|
|
+ }}</text></view>
|
|
|
|
|
+ <view class="data-item"><text class="l">单据编号</text><text class="v selectable">{{ order.docCode ||
|
|
|
|
|
+ '-' }}</text></view>
|
|
|
<view class="data-item"><text class="l">下单日期</text><text class="v">{{ order.time }}</text></view>
|
|
<view class="data-item"><text class="l">下单日期</text><text class="v">{{ order.time }}</text></view>
|
|
|
<view class="data-item"><text class="l">支付方式</text><text class="v">月结扣款</text></view>
|
|
<view class="data-item"><text class="l">支付方式</text><text class="v">月结扣款</text></view>
|
|
|
</view>
|
|
</view>
|
|
@@ -62,6 +75,9 @@
|
|
|
|
|
|
|
|
<!-- 3. 底部固定操作栏 -->
|
|
<!-- 3. 底部固定操作栏 -->
|
|
|
<view class="detail-action-bar-fixed" id="footer-bar">
|
|
<view class="detail-action-bar-fixed" id="footer-bar">
|
|
|
|
|
+ <view class="action-btn-wrap" v-if="!order.isUrgent && order.isConfirmed !== null">
|
|
|
|
|
+ <button class="action-btn urgency" @click="doMarkUrgent">加急订单</button>
|
|
|
|
|
+ </view>
|
|
|
<view class="action-btn-wrap single" v-if="order.isConfirmed === 0">
|
|
<view class="action-btn-wrap single" v-if="order.isConfirmed === 0">
|
|
|
<button class="action-btn primary" @click="callSales">呼叫业务员</button>
|
|
<button class="action-btn primary" @click="callSales">呼叫业务员</button>
|
|
|
</view>
|
|
</view>
|
|
@@ -75,7 +91,7 @@
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
import ErpNavBar from '@/components/erp-nav-bar.vue';
|
|
import ErpNavBar from '@/components/erp-nav-bar.vue';
|
|
|
-import { getOrderDetail } from '@/api/erp/order.js';
|
|
|
|
|
|
|
+import { getOrderDetail, markUrgent } from '@/api/erp/order.js';
|
|
|
import { getPhone } from '@/api/system/phone.js';
|
|
import { getPhone } from '@/api/system/phone.js';
|
|
|
export default {
|
|
export default {
|
|
|
components: { ErpNavBar },
|
|
components: { ErpNavBar },
|
|
@@ -89,7 +105,9 @@ export default {
|
|
|
order: {
|
|
order: {
|
|
|
orderNo: '-',
|
|
orderNo: '-',
|
|
|
docCode: '',
|
|
docCode: '',
|
|
|
- isConfirmed: 1,
|
|
|
|
|
|
|
+ isConfirmed: null,
|
|
|
|
|
+ isUrgent: false,
|
|
|
|
|
+ status: null,
|
|
|
statusName: '加载中',
|
|
statusName: '加载中',
|
|
|
statusType: 'pending',
|
|
statusType: 'pending',
|
|
|
models: [],
|
|
models: [],
|
|
@@ -103,11 +121,8 @@ export default {
|
|
|
const map = {
|
|
const map = {
|
|
|
pending: '您的订单已提交,正在等待管理端同步确认中...',
|
|
pending: '您的订单已提交,正在等待管理端同步确认中...',
|
|
|
finish: '订单已确认,并已成功同步到 ERP 系统中。',
|
|
finish: '订单已确认,并已成功同步到 ERP 系统中。',
|
|
|
- approved: '订单已在 ERP 系统中审核通过。',
|
|
|
|
|
- reviewed: '订单已由相关负责人签批。',
|
|
|
|
|
exFinished: '订单关联的产品型材已挤压完成。',
|
|
exFinished: '订单关联的产品型材已挤压完成。',
|
|
|
- productionFinish: '订单所含产品型材已全部生产完成!',
|
|
|
|
|
- cancelled: '该订单已被撤销。'
|
|
|
|
|
|
|
+ productionFinish: '订单所含产品型材已全部生产完成!'
|
|
|
};
|
|
};
|
|
|
return map[this.order.statusType] || '订单状态更新中';
|
|
return map[this.order.statusType] || '订单状态更新中';
|
|
|
},
|
|
},
|
|
@@ -141,11 +156,8 @@ export default {
|
|
|
const statusMap = {
|
|
const statusMap = {
|
|
|
0: { name: '待确认', type: 'pending' },
|
|
0: { name: '待确认', type: 'pending' },
|
|
|
1: { name: '已确认', type: 'finish' },
|
|
1: { name: '已确认', type: 'finish' },
|
|
|
- 2: { name: '已审核', type: 'approved' },
|
|
|
|
|
- 3: { name: '已签批', type: 'reviewed' },
|
|
|
|
|
- 4: { name: '挤压完成', type: 'exFinished' },
|
|
|
|
|
- 5: { name: '生产完成', type: 'productionFinish' },
|
|
|
|
|
- 6: { name: '已取消', type: 'cancelled' }
|
|
|
|
|
|
|
+ 2: { name: '挤压完成', type: 'exFinished' },
|
|
|
|
|
+ 3: { name: '生产完成', type: 'productionFinish' }
|
|
|
};
|
|
};
|
|
|
const s = statusMap[data.status] || { name: '待确认', type: 'pending' };
|
|
const s = statusMap[data.status] || { name: '待确认', type: 'pending' };
|
|
|
|
|
|
|
@@ -154,6 +166,8 @@ export default {
|
|
|
docCode: data.docCode || '',
|
|
docCode: data.docCode || '',
|
|
|
rowId: data.rowId,
|
|
rowId: data.rowId,
|
|
|
isConfirmed: data.isConfirmed,
|
|
isConfirmed: data.isConfirmed,
|
|
|
|
|
+ isUrgent: data.urgentFlag === 1,
|
|
|
|
|
+ status: data.status,
|
|
|
statusName: s.name,
|
|
statusName: s.name,
|
|
|
statusType: s.type,
|
|
statusType: s.type,
|
|
|
time: data.createTime || '-',
|
|
time: data.createTime || '-',
|
|
@@ -168,7 +182,9 @@ export default {
|
|
|
package: d.packName || '普通包装',
|
|
package: d.packName || '普通包装',
|
|
|
length: d.length ? Number(d.length).toFixed(4) : '0',
|
|
length: d.length ? Number(d.length).toFixed(4) : '0',
|
|
|
wallThickness: d.wallThickness ? Number(d.wallThickness).toFixed(4) : '1.2',
|
|
wallThickness: d.wallThickness ? Number(d.wallThickness).toFixed(4) : '1.2',
|
|
|
- count: d.count || 0
|
|
|
|
|
|
|
+ count: d.count || 0,
|
|
|
|
|
+ goodsInQty: d.goodsInQty,
|
|
|
|
|
+ semiInQty: d.semiInQty
|
|
|
}))
|
|
}))
|
|
|
};
|
|
};
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
@@ -182,6 +198,26 @@ export default {
|
|
|
|
|
|
|
|
callSales() { uni.makePhoneCall({ phoneNumber: this.salesPhone }); },
|
|
callSales() { uni.makePhoneCall({ phoneNumber: this.salesPhone }); },
|
|
|
goHome() { uni.reLaunch({ url: '/pages/order/index' }); },
|
|
goHome() { uni.reLaunch({ url: '/pages/order/index' }); },
|
|
|
|
|
+ doMarkUrgent() {
|
|
|
|
|
+ uni.showModal({
|
|
|
|
|
+ title: '加急确认',
|
|
|
|
|
+ content: '确认将该订单标记为加急吗?',
|
|
|
|
|
+ confirmColor: '#FF6600',
|
|
|
|
|
+ success: async (res) => {
|
|
|
|
|
+ if (!res.confirm) return;
|
|
|
|
|
+ try {
|
|
|
|
|
+ uni.showLoading({ title: '处理中' });
|
|
|
|
|
+ await markUrgent(this.order.rowId);
|
|
|
|
|
+ uni.hideLoading();
|
|
|
|
|
+ this.order.isUrgent = true;
|
|
|
|
|
+ uni.showToast({ title: '已标记为加急订单', icon: 'success' });
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ uni.hideLoading();
|
|
|
|
|
+ uni.showToast({ title: e || '操作失败', icon: 'none' });
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
async loadPhone() {
|
|
async loadPhone() {
|
|
|
try {
|
|
try {
|
|
|
const res = await getPhone();
|
|
const res = await getPhone();
|
|
@@ -228,14 +264,6 @@ export default {
|
|
|
background: linear-gradient(135deg, #1890FF 0%, #69C0FF 100%);
|
|
background: linear-gradient(135deg, #1890FF 0%, #69C0FF 100%);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.status-banner-container.approved {
|
|
|
|
|
- background: linear-gradient(135deg, #52C41A 0%, #95DE64 100%);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-.status-banner-container.reviewed {
|
|
|
|
|
- background: linear-gradient(135deg, #722ED1 0%, #B37FEB 100%);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
.status-banner-container.exFinished {
|
|
.status-banner-container.exFinished {
|
|
|
background: linear-gradient(135deg, #13C2C2 0%, #5CDBD3 100%);
|
|
background: linear-gradient(135deg, #13C2C2 0%, #5CDBD3 100%);
|
|
|
}
|
|
}
|
|
@@ -244,10 +272,6 @@ export default {
|
|
|
background: linear-gradient(135deg, #2F54EB 0%, #85A5FF 100%);
|
|
background: linear-gradient(135deg, #2F54EB 0%, #85A5FF 100%);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.status-banner-container.cancelled {
|
|
|
|
|
- background: linear-gradient(135deg, #F5222D 0%, #FF7875 100%);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
/* 状态横幅内容 */
|
|
/* 状态横幅内容 */
|
|
|
.status-banner-content {
|
|
.status-banner-content {
|
|
|
padding: 40rpx;
|
|
padding: 40rpx;
|
|
@@ -268,6 +292,46 @@ export default {
|
|
|
margin-bottom: 12rpx;
|
|
margin-bottom: 12rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+.header-title-row {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 16rpx;
|
|
|
|
|
+ margin-bottom: 12rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.header-title-row .status-title {
|
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.urgent-badge {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ padding: 6rpx 18rpx;
|
|
|
|
|
+ background: rgba(255, 255, 255, 0.25);
|
|
|
|
|
+ border: 2rpx solid rgba(255, 255, 255, 0.6);
|
|
|
|
|
+ border-radius: 8rpx;
|
|
|
|
|
+ animation: urgent-pulse 1.5s ease-in-out infinite;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.urgent-badge text {
|
|
|
|
|
+ font-size: 22rpx;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ letter-spacing: 2rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@keyframes urgent-pulse {
|
|
|
|
|
+
|
|
|
|
|
+ 0%,
|
|
|
|
|
+ 100% {
|
|
|
|
|
+ opacity: 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 50% {
|
|
|
|
|
+ opacity: 0.6;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
.status-sub {
|
|
.status-sub {
|
|
|
font-size: 26rpx;
|
|
font-size: 26rpx;
|
|
|
opacity: 0.9;
|
|
opacity: 0.9;
|
|
@@ -398,6 +462,13 @@ export default {
|
|
|
font-weight: normal;
|
|
font-weight: normal;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+.action-btn.urgency {
|
|
|
|
|
+ background: #C1001C;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ border: none;
|
|
|
|
|
+ margin-bottom: 16rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
.safe-area-bottom-support {
|
|
.safe-area-bottom-support {
|
|
|
height: constant(safe-area-inset-bottom);
|
|
height: constant(safe-area-inset-bottom);
|
|
|
height: env(safe-area-inset-bottom);
|
|
height: env(safe-area-inset-bottom);
|