Jelajahi Sumber

GET请求的BUG修复;订单详情;审核历史记录;分页查询的BUG修复

Huanyi 2 minggu lalu
induk
melakukan
a19df09576
38 mengubah file dengan 1072 tambahan dan 424 penghapusan
  1. 1 13
      api/erp/colorKind.js
  2. 1 13
      api/erp/model.js
  3. 33 0
      api/erp/order.js
  4. 1 13
      api/erp/pack.js
  5. 147 34
      pages/order/add-model/index.vue
  6. 66 14
      pages/order/detail/index.vue
  7. 36 20
      pages/order/index.vue
  8. 235 87
      pages/order/list/index.vue
  9. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/colorKind.js.map
  10. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/model.js.map
  11. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/order.js.map
  12. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/pack.js.map
  13. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/add-model/index.js.map
  14. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/detail/index.js.map
  15. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/index.js.map
  16. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/list/index.js.map
  17. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/utils/assets.js.map
  18. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/utils/request.js.map
  19. 3 3
      unpackage/dist/dev/mp-weixin/api/erp/colorKind.js
  20. 3 3
      unpackage/dist/dev/mp-weixin/api/erp/model.js
  21. 21 0
      unpackage/dist/dev/mp-weixin/api/erp/order.js
  22. 3 3
      unpackage/dist/dev/mp-weixin/api/erp/pack.js
  23. 2 2
      unpackage/dist/dev/mp-weixin/common/vendor.js
  24. 175 72
      unpackage/dist/dev/mp-weixin/pages/order/add-model/index.js
  25. 0 0
      unpackage/dist/dev/mp-weixin/pages/order/add-model/index.wxml
  26. 8 0
      unpackage/dist/dev/mp-weixin/pages/order/add-model/index.wxss
  27. 61 13
      unpackage/dist/dev/mp-weixin/pages/order/detail/index.js
  28. 3 0
      unpackage/dist/dev/mp-weixin/pages/order/detail/index.wxss
  29. 13 13
      unpackage/dist/dev/mp-weixin/pages/order/index.js
  30. 0 0
      unpackage/dist/dev/mp-weixin/pages/order/index.wxml
  31. 13 5
      unpackage/dist/dev/mp-weixin/pages/order/index.wxss
  32. 81 98
      unpackage/dist/dev/mp-weixin/pages/order/list/index.js
  33. 0 0
      unpackage/dist/dev/mp-weixin/pages/order/list/index.wxml
  34. 128 7
      unpackage/dist/dev/mp-weixin/pages/order/list/index.wxss
  35. 1 0
      unpackage/dist/dev/mp-weixin/utils/assets.js
  36. 13 3
      unpackage/dist/dev/mp-weixin/utils/request.js
  37. 1 0
      utils/assets.js
  38. 18 3
      utils/request.js

+ 1 - 13
api/erp/colorKind.js

@@ -1,24 +1,12 @@
 import request from '@/utils/request';
 
-/**
- * 获取颜色种类列表(不分页)
- * @Author: Antigravity
- */
-export function listAllColorKind(query) {
-  return request({
-    url: '/erp/colorKind/all',
-    method: 'GET',
-    params: query
-  });
-}
-
 /**
  * 分页获取颜色种类列表
  * @Author: Antigravity
  */
 export function listPageColorKind(query) {
   return request({
-    url: '/erp/colorKind/list',
+    url: '/erp/colorKind/page',
     method: 'GET',
     params: query
   });

+ 1 - 13
api/erp/model.js

@@ -1,24 +1,12 @@
 import request from '@/utils/request';
 
-/**
- * 获取型材档案列表(不分页/前N条)
- * @Author: Antigravity
- */
-export function listAllModel(query) {
-  return request({
-    url: '/erp/model/all',
-    method: 'GET',
-    params: query
-  });
-}
-
 /**
  * 分页获取型材档案列表
  * @Author: Antigravity
  */
 export function listPageModel(query) {
   return request({
-    url: '/erp/model/list',
+    url: '/erp/model/page',
     method: 'GET',
     params: query
   });

+ 33 - 0
api/erp/order.js

@@ -12,6 +12,17 @@ export function listOrder(query) {
   })
 }
 
+/**
+ * 查询订单详情
+ * @Author: Antigravity
+ */
+export function getOrderDetail(rowId) {
+  return request({
+    url: '/erp/order/' + rowId,
+    method: 'get'
+  })
+}
+
 /**
  * 提交订单
  * @Author: Antigravity
@@ -23,3 +34,25 @@ export function addOrder(data) {
     data: data
   })
 }
+
+/**
+ * 撤销订单
+ * @Author: Antigravity
+ */
+export function cancelOrder(rowId) {
+  return request({
+    url: '/erp/order/cancel/' + rowId,
+    method: 'post'
+  })
+}
+
+/**
+ * 查询审核记录
+ * @Author: Antigravity
+ */
+export function getAuditHistory(orderId) {
+  return request({
+    url: '/erp/orderAudit/history/' + orderId,
+    method: 'get'
+  })
+}

+ 1 - 13
api/erp/pack.js

@@ -1,24 +1,12 @@
 import request from '@/utils/request';
 
-/**
- * 获取包装档案列表(不分页)
- * @Author: Antigravity
- */
-export function listAllPack(query) {
-  return request({
-    url: '/erp/pack/all',
-    method: 'GET',
-    params: query
-  });
-}
-
 /**
  * 分页获取包装档案列表
  * @Author: Antigravity
  */
 export function listPagePack(query) {
   return request({
-    url: '/erp/pack/list',
+    url: '/erp/pack/page',
     method: 'GET',
     params: query
   });

+ 147 - 34
pages/order/add-model/index.vue

@@ -2,7 +2,7 @@
 	<view class="order-container">
 		<erp-nav-bar title="添加型号" />
 		<scroll-view :scroll-y="!showTypePicker && !showSurfacePicker && !showPackagePicker" class="order-scroll"
-			:show-scrollbar="false" :enhanced="true">
+			:show-scrollbar="false" :enhanced="true" @scrolltolower="onScrollToLower">
 			<view class="form-content">
 
 				<!-- 模块 1:型材 -->
@@ -128,13 +128,19 @@
 					<text class="popup-title">选择产品型号</text>
 					<text class="confirm-text" @click="confirmTypeSelect">确定</text>
 				</view>
-				<scroll-view scroll-y class="item-list">
+				<scroll-view scroll-y class="item-list" @scrolltolower="loadMoreType">
 					<view class="option-item" v-for="(item, index) in typeList" :key="index"
 						:class="{ active: tempSelectedIndex === index }" @click="selectTypeItem(index)">
-						<text>{{ item.fnum }} - {{ item.fname }}</text>
+						<text>{{ item.num }} - {{ item.name }}</text>
 						<icon type="success_no_circle" size="16" color="#C1001C" v-if="tempSelectedIndex === index">
 						</icon>
 					</view>
+					<view class="loading-tip" v-if="typeLoading && typeHasMore">
+						<text class="loading-text">加载中...</text>
+					</view>
+					<view class="loading-tip" v-if="!typeHasMore && typeList.length > 0">
+						<text class="loading-text">已加载全部</text>
+					</view>
 				</scroll-view>
 			</view>
 		</view>
@@ -147,13 +153,19 @@
 					<text class="popup-title">选择表面处理</text>
 					<text class="confirm-text" @click="confirmSurfaceSelect">确定</text>
 				</view>
-				<scroll-view scroll-y class="item-list">
+				<scroll-view scroll-y class="item-list" @scrolltolower="loadMoreSurface">
 					<view class="option-item" v-for="(item, index) in surfaceList" :key="index"
 						:class="{ active: tempSurfaceIndex === index }" @click="selectSurfaceItem(index)">
-						<text>{{ item.fnum }} - {{ item.fname }}</text>
+						<text>{{ item.num }} - {{ item.name }}</text>
 						<icon type="success_no_circle" size="16" color="#C1001C" v-if="tempSurfaceIndex === index">
 						</icon>
 					</view>
+					<view class="loading-tip" v-if="surfaceLoading && surfaceHasMore">
+						<text class="loading-text">加载中...</text>
+					</view>
+					<view class="loading-tip" v-if="!surfaceHasMore && surfaceList.length > 0">
+						<text class="loading-text">已加载全部</text>
+					</view>
 				</scroll-view>
 			</view>
 		</view>
@@ -166,13 +178,19 @@
 					<text class="popup-title">选择包装方式</text>
 					<text class="confirm-text" @click="confirmPackageSelect">确定</text>
 				</view>
-				<scroll-view scroll-y class="item-list">
+				<scroll-view scroll-y class="item-list" @scrolltolower="loadMorePackage">
 					<view class="option-item" v-for="(item, index) in packageList" :key="index"
 						:class="{ active: tempPackageIndex === index }" @click="selectPackageItem(index)">
-						<text>{{ item.fnum }} - {{ item.fname }}</text>
+						<text>{{ item.num }} - {{ item.name }}</text>
 						<icon type="success_no_circle" size="16" color="#C1001C" v-if="tempPackageIndex === index">
 						</icon>
 					</view>
+					<view class="loading-tip" v-if="packageLoading && packageHasMore">
+						<text class="loading-text">加载中...</text>
+					</view>
+					<view class="loading-tip" v-if="!packageHasMore && packageList.length > 0">
+						<text class="loading-text">已加载全部</text>
+					</view>
 				</scroll-view>
 			</view>
 		</view>
@@ -182,9 +200,9 @@
 
 <script>
 import ErpNavBar from '@/components/erp-nav-bar.vue';
-import { listAllColorKind } from '@/api/erp/colorKind.js';
-import { listAllPack } from '@/api/erp/pack.js';
-import { listAllModel } from '@/api/erp/model.js';
+import { listPageColorKind } from '@/api/erp/colorKind.js';
+import { listPagePack } from '@/api/erp/pack.js';
+import { listPageModel } from '@/api/erp/model.js';
 import { addOrderDetail } from '@/api/erp/orderDetail.js';
 export default {
 	components: { ErpNavBar },
@@ -195,6 +213,10 @@ export default {
 			typeList: [],
 			surfaceList: [],
 			packageList: [],
+			// 分页参数
+			typePageNum: 1, typePageSize: 20, typeHasMore: true, typeLoading: false,
+			surfacePageNum: 1, surfacePageSize: 20, surfaceHasMore: true, surfaceLoading: false,
+			packagePageNum: 1, packagePageSize: 20, packageHasMore: true, packageLoading: false,
 			formData: {
 				type: '', modelId: '', name: '', material: '',
 				surfaceName: '', surfaceId: '', packageMethod: '', packageId: '', length: '',
@@ -210,62 +232,145 @@ export default {
 		]);
 	},
 	methods: {
-		async loadModels() {
+		async loadModels(pageNum = 1) {
+			if (this.typeLoading) return;
+			this.typeLoading = true;
 			try {
-				const res = await listAllModel();
-				this.typeList = res.data || [];
+				const res = await listPageModel({
+					pageNum: pageNum,
+					pageSize: this.typePageSize
+				});
+				const rows = res.rows || [];
+				const total = res.total || 0;
+				if (pageNum === 1) {
+					this.typeList = rows;
+				} else {
+					this.typeList = [...this.typeList, ...rows];
+				}
+				this.typeHasMore = this.typeList.length < total;
 			} catch (e) {
 				uni.showToast({ title: '加载型号失败', icon: 'none' });
+			} finally {
+				this.typeLoading = false;
 			}
 		},
-		async loadPackageMethods() {
+		async loadPackageMethods(pageNum = 1) {
+			if (this.packageLoading) return;
+			this.packageLoading = true;
 			try {
-				const res = await listAllPack();
-				this.packageList = res.data || [];
+				const res = await listPagePack({
+					pageNum: pageNum,
+					pageSize: this.packagePageSize
+				});
+				const rows = res.rows || [];
+				const total = res.total || 0;
+				if (pageNum === 1) {
+					this.packageList = rows;
+				} else {
+					this.packageList = [...this.packageList, ...rows];
+				}
+				this.packageHasMore = this.packageList.length < total;
 			} catch (e) {
 				uni.showToast({ title: '加载包装方式失败', icon: 'none' });
+			} finally {
+				this.packageLoading = false;
 			}
 		},
-		async loadSurfaceKinds() {
+		async loadSurfaceKinds(pageNum = 1) {
+			if (this.surfaceLoading) return;
+			this.surfaceLoading = true;
 			try {
-				const res = await listAllColorKind();
-				this.surfaceList = (res.data || []).filter(item => item.fname !== '所有类别');
+				const res = await listPageColorKind({
+					pageNum: pageNum,
+					pageSize: this.surfacePageSize
+				});
+				let rows = res.rows || [];
+				const total = res.total || 0;
+				rows = rows.filter(item => item.name !== '所有类别');
+				if (pageNum === 1) {
+					this.surfaceList = rows;
+				} else {
+					this.surfaceList = [...this.surfaceList, ...rows];
+				}
+				this.surfaceHasMore = this.surfaceList.length < total;
 			} catch (e) {
 				uni.showToast({ title: '加载表面处理失败', icon: 'none' });
+			} finally {
+				this.surfaceLoading = false;
+			}
+		},
+		loadMoreType() {
+			if (this.typeHasMore && !this.typeLoading) {
+				this.typePageNum++;
+				this.loadModels(this.typePageNum);
+			}
+		},
+		loadMoreSurface() {
+			if (this.surfaceHasMore && !this.surfaceLoading) {
+				this.surfacePageNum++;
+				this.loadSurfaceKinds(this.surfacePageNum);
+			}
+		},
+		loadMorePackage() {
+			if (this.packageHasMore && !this.packageLoading) {
+				this.packagePageNum++;
+				this.loadPackageMethods(this.packagePageNum);
+			}
+		},
+		onScrollToLower() {
+			// 主页面滚动触底,可根据需要添加更多逻辑
+		},
+		openTypePicker() {
+			if (this.formData.type) {
+				this.tempSelectedIndex = this.typeList.findIndex(item => item.num === this.formData.type);
+			} else {
+				this.tempSelectedIndex = -1;
 			}
+			this.showTypePicker = true;
 		},
-		openTypePicker() { if (this.formData.type) this.tempSelectedIndex = this.typeList.findIndex(item => item.fnum === this.formData.type); this.showTypePicker = true; },
 		closeTypePicker() { this.showTypePicker = false; },
 		selectTypeItem(index) { this.tempSelectedIndex = index; },
 		confirmTypeSelect() {
 			if (this.tempSelectedIndex === -1) return;
 			const item = this.typeList[this.tempSelectedIndex];
-			this.formData.type = item.fnum;
-			this.formData.modelId = item.frowId;
-			this.formData.name = item.fname;
-			this.formData.wallThickness = item.thick ? Number(item.thick).toFixed(4) : '';
-			// 材质目前默认为 6063-T5,后续如有材质表可对接
+			this.formData.type = item.num;
+			this.formData.modelId = item.rowId;
+			this.formData.name = item.name;
 			this.formData.material = '6063-T5';
 			this.closeTypePicker();
 		},
-		openSurfacePicker() { if (this.formData.surfaceName) this.tempSurfaceIndex = this.surfaceList.findIndex(item => item.fname === this.formData.surfaceName); this.showSurfacePicker = true; },
+		openSurfacePicker() {
+			if (this.formData.surfaceName) {
+				this.tempSurfaceIndex = this.surfaceList.findIndex(item => item.name === this.formData.surfaceName);
+			} else {
+				this.tempSurfaceIndex = -1;
+			}
+			this.showSurfacePicker = true;
+		},
 		closeSurfacePicker() { this.showSurfacePicker = false; },
 		selectSurfaceItem(index) { this.tempSurfaceIndex = index; },
 		confirmSurfaceSelect() {
 			if (this.tempSurfaceIndex === -1) return;
 			const item = this.surfaceList[this.tempSurfaceIndex];
-			this.formData.surfaceName = item.fname;
-			this.formData.surfaceId = item.frowId;
+			this.formData.surfaceName = item.name;
+			this.formData.surfaceId = item.rowId;
 			this.closeSurfacePicker();
 		},
-		openPackagePicker() { if (this.formData.packageMethod) this.tempPackageIndex = this.packageList.findIndex(item => item.fname === this.formData.packageMethod); this.showPackagePicker = true; },
+		openPackagePicker() {
+			if (this.formData.packageMethod) {
+				this.tempPackageIndex = this.packageList.findIndex(item => item.name === this.formData.packageMethod);
+			} else {
+				this.tempPackageIndex = -1;
+			}
+			this.showPackagePicker = true;
+		},
 		closePackagePicker() { this.showPackagePicker = false; },
 		selectPackageItem(index) { this.tempPackageIndex = index; },
 		confirmPackageSelect() {
 			if (this.tempPackageIndex === -1) return;
 			const item = this.packageList[this.tempPackageIndex];
-			this.formData.packageMethod = item.fname;
-			this.formData.packageId = item.frowId;
+			this.formData.packageMethod = item.name;
+			this.formData.packageId = item.rowId;
 			this.closePackagePicker();
 		},
 		async confirmAddModel() {
@@ -283,9 +388,8 @@ export default {
 					return;
 				}
 			}
-			// 数据处理:保留四位小数
 			const finalData = {
-				fOrderId: null,
+				orderId: null,
 				modelId: this.formData.modelId,
 				modelNum: this.formData.type,
 				modelName: this.formData.name,
@@ -310,7 +414,6 @@ export default {
 				}, 1000);
 			} catch (e) {
 				uni.hideLoading();
-				// 错误已由 request.js 拦截提示,若未拦截可在此处处理提示
 			}
 		}
 	}
@@ -588,6 +691,16 @@ export default {
 	font-weight: bold;
 }
 
+.loading-tip {
+	padding: 20rpx 0;
+	text-align: center;
+}
+
+.loading-text {
+	font-size: 26rpx;
+	color: #999;
+}
+
 .bottom-placeholder {
 	height: 60rpx;
 }

+ 66 - 14
pages/order/detail/index.vue

@@ -64,7 +64,7 @@
 
 		<!-- 3. 底部固定操作栏 -->
 		<view class="detail-action-bar-fixed" id="footer-bar">
-			<view class="action-btn-wrap" v-if="order.status === 1">
+			<view class="action-btn-wrap" v-if="order.status === 0">
 				<button class="action-btn cancel" @click="doCancel">撤销该订单</button>
 				<button class="action-btn primary" @click="callSales">呼叫业务员</button>
 			</view>
@@ -78,12 +78,15 @@
 
 <script>
 import ErpNavBar from '@/components/erp-nav-bar.vue';
+import { getOrderDetail } from '@/api/erp/order.js';
 export default {
 	components: { ErpNavBar },
 	data() {
 		return {
 			footerHeight: 80, // px
 			headerHeight: 120, // px
+			rowId: '',
+			loading: false,
 			order: {
 				orderNo: '-',
 				status: 1,
@@ -99,43 +102,88 @@ export default {
 		statusSubText() {
 			const map = {
 				pending: '您的订单已提交,正在排队等待审核...',
+				expired: '该订单已被驳回。',
+				cancelled: '该订单已被撤销。',
 				process: '审核已完成,正在由相关主管签批...',
 				making: '订单已入库排产,工厂正在全力生产中...',
-				finish: '该订单生产已完成并正式入库。',
-				expired: '该订单已由客户主动撤销。'
+				finish: '该订单生产已完成并正式入库。'
 			};
 			return map[this.order.statusType] || '订单状态更新中';
 		},
 		scrollHeight() {
-			// 获取系统安全区域
 			const info = uni.getSystemInfoSync();
 			const safeBottom = info.safeAreaInsets ? info.safeAreaInsets.bottom : 0;
-			// 动态计算滚动区高度:屏幕总高 - 顶部高(状态栏+导航栏+横幅) - 底部固定栏(内含安全区)
 			const statusBarHeight = uni.getSystemInfoSync().statusBarHeight || 20;
-			// 顶部高度估算:statusBarHeight + 44(nav) + 120(banner)
 			return `calc(100vh - ${statusBarHeight + 164}px - ${80 + safeBottom}px)`;
 		}
 	},
 	onLoad(options) {
-
-		if (options.data) {
-			try {
-				this.order = JSON.parse(decodeURIComponent(options.data));
-			} catch (e) { console.error('Data Error'); }
+		if (options.rowId) {
+			this.rowId = options.rowId;
+			this.loadOrderDetail();
 		}
 	},
 	methods: {
+		async loadOrderDetail() {
+			if (this.loading) return;
+			this.loading = true;
+			try {
+				const res = await getOrderDetail(this.rowId);
+				const data = res.data || res;
+				if (!data) {
+					uni.showToast({ title: '订单不存在', icon: 'none' });
+					return;
+				}
+
+				// 状态展示映射(与 ErpOrderStatus 枚举对齐)
+			const statusMap = {
+					'-1': { name: '已撤销', type: 'cancelled' },
+					0: { name: '待审核', type: 'pending' },
+					1: { name: '已驳回', type: 'expired' },
+					2: { name: '待签批', type: 'process' },
+					3: { name: '生产中', type: 'making' },
+					4: { name: '已完成', type: 'finish' }
+				};
+				const s = statusMap[data.status] || { name: '未知', type: 'expired' };
+
+				this.order = {
+					orderNo: data.code || '-',
+					rowId: data.rowId,
+					status: data.status,
+					statusName: s.name,
+					statusType: s.type,
+					time: data.createTime || '-',
+					totalCount: data.totalCount || 0,
+					erpNo: data.erpNo || '',
+					models: (data.details || []).map(d => ({
+						type: d.modelNum || '未知型号',
+						typeName: d.modelName || '铝型材主料',
+						material: d.material || '6063-T5',
+						surface: d.surfaceName || '无',
+						package: d.packName || '普通包装',
+						length: d.length ? Number(d.length).toFixed(4) : '0',
+						wallThickness: d.wallThickness ? Number(d.wallThickness).toFixed(4) : '1.2',
+						count: d.count || 0
+					}))
+				};
+			} catch (e) {
+				console.error('加载订单详情失败', e);
+				uni.showToast({ title: '加载失败', icon: 'none' });
+			} finally {
+				this.loading = false;
+			}
+		},
 		goBack() { uni.navigateBack(); },
 		doCancel() {
 			uni.showModal({
 				title: '确认撤销',
-				content: '订单撤销后将流转至已撤销状态,确定吗?',
+				content: '确定要撤销该订单吗?',
 				confirmColor: '#ff3b30',
 				success: (res) => {
 					if (res.confirm) {
-						this.order.status = 0;
+						this.order.status = -1;
 						this.order.statusName = '已撤销';
-						this.order.statusType = 'expired';
+						this.order.statusType = 'cancelled';
 						uni.showToast({ title: '撤销成功' });
 					}
 				}
@@ -192,6 +240,10 @@ export default {
 	background: linear-gradient(135deg, #868f96 0%, #596164 100%);
 }
 
+.status-banner-container.cancelled {
+	background: linear-gradient(135deg, #a0a0a0 0%, #666666 100%);
+}
+
 /* 状态横幅内容 */
 .status-banner-content {
 	padding: 40rpx;

+ 36 - 20
pages/order/index.vue

@@ -1,8 +1,20 @@
 <template>
 	<view class="order-container">
 		<erp-nav-bar title="ERP 下单" :show-back="false" />
+		<!-- 0. 全屏加载过渡 -->
+		<view class="loading-state-full" v-if="isLoading">
+			<view class="loading-anim-box">
+				<view class="dot-spinner">
+					<view class="dot"></view>
+					<view class="dot"></view>
+					<view class="dot"></view>
+				</view>
+				<text class="loading-text">正在同步 ERP 数据...</text>
+			</view>
+		</view>
+
 		<!-- 1. 未登录状态 -->
-		<view class="auth-waiting-full" v-if="!isLoggedIn">
+		<view class="auth-waiting-full" v-else-if="!isLoggedIn">
 			<view class="auth-card">
 				<image class="auth-icon" src="https://img.icons8.com/color/192/hourglass-sand-top.png" mode="aspectFit">
 				</image>
@@ -25,19 +37,7 @@
 
 		<!-- 3. 已登录且已分配授权客户:显示下单页面 -->
 		<template v-else>
-			<!-- 全屏加载过渡 -->
-			<view class="loading-state-full" v-if="isLoading">
-				<view class="loading-anim-box">
-					<view class="dot-spinner">
-						<view class="dot"></view>
-						<view class="dot"></view>
-						<view class="dot"></view>
-					</view>
-					<text class="loading-text">正在同步 ERP 数据...</text>
-				</view>
-			</view>
-
-			<scroll-view scroll-y class="order-scroll-list" :show-scrollbar="false" :enhanced="true" v-else>
+			<scroll-view scroll-y class="order-scroll-list" :show-scrollbar="false" :enhanced="true">
 				<view class="list-wrapper">
 					<!-- 列表头部:仅在有数据时显示 -->
 					<view class="list-header" v-if="selectedModels.length > 0">
@@ -150,7 +150,7 @@ export default {
 		async loadOrderItems(showFullLoading = true) {
 			if (showFullLoading) this.isLoading = true;
 			try {
-				const res = await listOrderDetail({ fOrderId: '' });
+				const res = await listOrderDetail({ orderId: '' });
 				this.selectedModels = res.data || [];
 			} catch (e) {
 				console.error('加载型号列表失败', e);
@@ -176,6 +176,7 @@ export default {
 				uni.removeStorageSync('isLogin');
 				this.isLoggedIn = false;
 				this.myInfo = {};
+				this.isLoading = false;
 			}
 		},
 		goToLogin() {
@@ -209,7 +210,7 @@ export default {
 
 			uni.showLoading({ title: '正在提交订单', mask: true });
 			try {
-				const detailIds = this.selectedModels.map(item => item.frowId);
+				const detailIds = this.selectedModels.map(item => item.rowId);
 				await addOrder({ detailIds });
 				uni.hideLoading();
 				uni.showToast({ title: '下单成功', icon: 'success' });
@@ -649,12 +650,27 @@ export default {
 	animation: dot-pulse 1.4s infinite ease-in-out both;
 }
 
-.dot:nth-child(1) { animation-delay: -0.32s; }
-.dot:nth-child(2) { animation-delay: -0.16s; }
+.dot:nth-child(1) {
+	animation-delay: -0.32s;
+}
+
+.dot:nth-child(2) {
+	animation-delay: -0.16s;
+}
 
 @keyframes dot-pulse {
-	0%, 80%, 100% { transform: scale(0); opacity: 0.3; }
-	40% { transform: scale(1); opacity: 1; }
+
+	0%,
+	80%,
+	100% {
+		transform: scale(0);
+		opacity: 0.3;
+	}
+
+	40% {
+		transform: scale(1);
+		opacity: 1;
+	}
 }
 
 .loading-text {

+ 235 - 87
pages/order/list/index.vue

@@ -46,13 +46,14 @@
 							<text class="summary-unit">支</text>
 						</view>
 					</view>
-					<view class="card-foot">
-						<text class="time">{{ item.time }}</text>
-						<view class="btns">
-							<view class="btn-cancel" v-if="item.status === 1" @click.stop="onCancel(item)">撤销</view>
-							<view class="btn-view primary" @click.stop="goDetail(item)">订单详情</view>
-						</view>
-					</view>
+			<view class="card-foot">
+				<text class="time">{{ item.time }}</text>
+				<view class="btns">
+					<view class="btn-audit" @click.stop="showAuditHistory(item)">审核记录</view>
+					<view class="btn-cancel" v-if="item.status === 0" @click.stop="onCancel(item)">撤销</view>
+					<view class="btn-view primary" @click.stop="goDetail(item)">订单详情</view>
+				</view>
+			</view>
 				</view>
 
 				<!-- 加载提示区 -->
@@ -79,13 +80,39 @@
 
 		<!-- 底部菜单栏 -->
 		<erp-tab-bar active="order"></erp-tab-bar>
+
+		<!-- 审核记录弹窗 -->
+		<view class="overlay" v-if="auditHistoryVisible" @click="auditHistoryVisible = false">
+			<view class="audit-history-modal" @click.stop>
+				<view class="modal-head">
+					<text class="modal-title">审核记录</text>
+					<text class="modal-close" @click="auditHistoryVisible = false">关闭</text>
+				</view>
+				<scroll-view scroll-y class="modal-body">
+					<view class="audit-item" v-for="(item, idx) in auditHistoryList" :key="idx">
+						<view class="audit-dot" :class="item.auditResult === 1 ? 'pass' : 'reject'"></view>
+						<view class="audit-content">
+							<view class="audit-row">
+								<text class="audit-result" :class="item.auditResult === 1 ? 'pass' : 'reject'">{{ item.auditResult === 1 ? '通过' : '驳回' }}</text>
+								<text class="audit-auditor">{{ item.auditorName || '未知' }}</text>
+							</view>
+							<text class="audit-reason" v-if="item.rejectReason">驳回理由:{{ item.rejectReason }}</text>
+							<text class="audit-time">{{ item.auditTime }}</text>
+						</view>
+					</view>
+					<view class="audit-empty" v-if="auditHistoryList.length === 0">
+						<text>暂无审核记录</text>
+					</view>
+				</scroll-view>
+			</view>
+		</view>
 	</view>
 </template>
 
 <script>
 import ErpTabBar from '@/components/erp-tab-bar.vue';
 import ErpNavBar from '@/components/erp-nav-bar.vue';
-import { listOrder } from '@/api/erp/order.js';
+import { listOrder, cancelOrder, getAuditHistory } from '@/api/erp/order.js';
 export default {
 	components: { ErpTabBar, ErpNavBar },
 	data() {
@@ -96,45 +123,11 @@ export default {
 			currentTab: 0,
 			loading: false,
 			noMore: false,
-			tabs: ['全部', '待审核', '待签批', '生产中', '已完成'],
-			allOrders: [
-				{
-					orderNo: 'ORD20240428001',
-					models: [
-						{ type: 'TY0019', length: '6000', surface: '阳极氧化', count: '100' },
-						{ type: 'TY0018', length: '6000', surface: 'PL坯料', count: '50' }
-					],
-					totalCount: 150,
-					status: 1, statusName: '待审核', statusType: 'pending', time: '2024-04-28 10:20'
-				},
-				{
-					orderNo: 'ORD20240428002',
-					models: [
-						{ type: 'TY0020', length: '5800', surface: '粉末喷涂', count: '80' }
-					],
-					totalCount: 80,
-					status: 2, statusName: '待签批', statusType: 'process', time: '2024-04-28 09:15'
-				},
-				{
-					orderNo: 'ORD20240427088',
-					models: [
-						{ type: 'TY0018', length: '6000', surface: 'PL坯料', count: '300' }
-					],
-					totalCount: 300,
-					status: 4, statusName: '已完成', statusType: 'finish', time: '2024-04-27 15:40'
-				},
-				{
-					orderNo: 'ORD20240427045',
-					models: [
-						{ type: 'TY0021', length: '3000', surface: '电泳涂漆', count: '50' },
-						{ type: 'TY0022', length: '4000', surface: '木纹转印', count: '40' },
-						{ type: 'TY0023', length: '5000', surface: '氟碳喷涂', count: '30' }
-					],
-					totalCount: 120,
-					status: 3, statusName: '生产中', statusType: 'making', time: '2024-04-27 11:05'
-				}
-			],
-			displayList: []
+			tabs: ['全部', '已撤销', '待审核', '已驳回', '待签批', '生产中', '已完成'],
+			allOrders: [],
+			displayList: [],
+			auditHistoryVisible: false,
+			auditHistoryList: []
 		}
 	},
 	computed: {
@@ -161,29 +154,36 @@ export default {
 			if (this.loading || this.noMore) return;
 			this.loading = true;
 			try {
-				const params = {};
-				// 状态映射:0全部,1待审核(后台0),2待签批(后台1) ... 仅做简单对应,视后端枚举而定
+				const params = {
+					pageNum: 1, // 简易处理,先加载第一页
+					pageSize: 50
+				};
+				// 状态映射
 				if (this.currentTab > 0) {
-					params.fStatus = this.currentTab - 1;
+					const tabToStatus = [undefined, -1, 0, 1, 2, 3, 4];
+					params.status = tabToStatus[this.currentTab];
 				}
 				const res = await listOrder(params);
-				const rows = res.data || [];
+				const rows = res.rows || [];
 				
 				const formattedRows = rows.map(item => {
-					// 状态展示映射
-					let sName = '待审核', sType = 'pending';
-					if (item.fStatus === 1) { sName = '已审核'; sType = 'process'; }
-					else if (item.fStatus === 2) { sName = '已驳回'; sType = 'expired'; }
-					else if (item.fStatus === 3) { sName = '生产中'; sType = 'making'; }
-					else if (item.fStatus === 4) { sName = '已完成'; sType = 'finish'; }
-					else if (item.fStatus === 0) { sName = '待审核'; sType = 'pending'; }
+					// 状态展示映射(与 ErpOrderStatus 枚举对齐)
+				const statusMap = {
+					'-1': { name: '已撤销', type: 'cancelled' },
+					0: { name: '待审核', type: 'pending' },
+					1: { name: '已驳回', type: 'expired' },
+					2: { name: '待签批', type: 'process' },
+					3: { name: '生产中', type: 'making' },
+					4: { name: '已完成', type: 'finish' }
+				};
+					const s = statusMap[item.status] || { name: '未知', type: 'expired' };
 
 					return {
-						orderNo: item.fCode,
-						fRowId: item.fRowId,
-						status: item.fStatus,
-						statusName: sName,
-						statusType: sType,
+						orderNo: item.code,
+						rowId: item.rowId,
+						status: item.status,
+						statusName: s.name,
+						statusType: s.type,
 						time: item.createTime,
 						totalCount: item.totalCount || 0,
 						models: (item.details || []).map(d => ({
@@ -196,43 +196,49 @@ export default {
 				});
 
 				this.displayList = [...this.displayList, ...formattedRows];
-				this.noMore = true; // 此处暂且假设一页加载完所有,如果需要分页请加上 pageNum 和 total 判断
+				this.noMore = this.displayList.length >= (res.total || 0);
 			} catch (e) {
 				console.error('加载订单列表失败', e);
 			} finally {
 				this.loading = false;
 			}
 		},
-		onCancel(item) {
+		async onCancel(item) {
 			uni.showModal({
 				title: '确认撤销',
 				content: `确认要撤销订单:${item.orderNo} 吗?`,
 				confirmColor: '#ff4d4f',
-				success: (res) => {
+				success: async (res) => {
 					if (res.confirm) {
 						uni.showLoading({ title: '撤销中' });
-						setTimeout(() => {
+						try {
+							await cancelOrder(item.rowId);
 							uni.hideLoading();
-							uni.showToast({ title: '已撤销' });
-
-							// 逻辑修复:修改状态而非移除
-							const target = this.allOrders.find(o => o.orderNo === item.orderNo);
-							if (target) {
-								target.status = 0;
-								target.statusName = '已撤销';
-								target.statusType = 'expired';
-							}
-							// 再次过滤刷新当前视图
+							uni.showToast({ title: '已撤销', icon: 'success' });
 							this.refresh();
-						}, 800);
+						} catch (e) {
+							uni.hideLoading();
+							uni.showToast({ title: '撤销失败', icon: 'none' });
+						}
 					}
 				}
 			});
 		},
+		async showAuditHistory(item) {
+			uni.showLoading({ title: '加载中' });
+			try {
+				const res = await getAuditHistory(item.rowId);
+				this.auditHistoryList = res.data || [];
+			} catch (e) {
+				this.auditHistoryList = [];
+			} finally {
+				uni.hideLoading();
+				this.auditHistoryVisible = true;
+			}
+		},
 		goDetail(item) {
-			const dataStr = encodeURIComponent(JSON.stringify(item));
 			uni.navigateTo({
-				url: `/pages/order/detail/index?data=${dataStr}`
+				url: `/pages/order/detail/index?rowId=${item.rowId}`
 			});
 		}
 	}
@@ -304,7 +310,7 @@ export default {
 }
 
 .indicator-bar {
-	width: 20%;
+	width: 14.285%;
 	height: 100%;
 	display: flex;
 	align-items: center;
@@ -366,6 +372,11 @@ export default {
 	color: #999;
 }
 
+.status-badge.cancelled {
+	background: #f0f0f0;
+	color: #666;
+}
+
 .status-badge.process {
 	background: #fff7e6;
 	color: #ffa940;
@@ -376,12 +387,6 @@ export default {
 	color: #36cfc9;
 }
 
-/* 已撤销样式 */
-.status-badge.expired {
-	background: #f5f5f5;
-	color: #999;
-}
-
 .status-badge.finish {
 	background: #f6ffed;
 	color: #52c41a;
@@ -499,6 +504,14 @@ export default {
 	color: #666;
 }
 
+.btn-audit {
+	border: 1rpx solid #ddd;
+	color: #C1001C;
+	padding: 12rpx 20rpx;
+	border-radius: 30rpx;
+	font-size: 24rpx;
+}
+
 .btn-view.primary {
 	background: #C1001C;
 	color: #fff;
@@ -569,4 +582,139 @@ export default {
 .safe-bottom {
 	height: 40rpx;
 }
+
+/* 审核记录弹窗 */
+.overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background: rgba(0, 0, 0, 0.45);
+	z-index: 1000;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.audit-history-modal {
+	width: 640rpx;
+	max-height: 70vh;
+	background: #fff;
+	border-radius: 24rpx;
+	overflow: hidden;
+	display: flex;
+	flex-direction: column;
+}
+
+.modal-head {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	padding: 30rpx 36rpx;
+	border-bottom: 1rpx solid #f0f0f0;
+	flex-shrink: 0;
+}
+
+.modal-title {
+	font-size: 32rpx;
+	font-weight: bold;
+	color: #1a1a1a;
+}
+
+.modal-close {
+	font-size: 26rpx;
+	color: #999;
+	padding: 8rpx;
+}
+
+.modal-body {
+	flex: 1;
+	padding: 20rpx 36rpx 36rpx;
+	max-height: 60vh;
+}
+
+.audit-item {
+	display: flex;
+	padding: 24rpx 0;
+	border-left: 2rpx solid #eee;
+	margin-left: 12rpx;
+	position: relative;
+}
+
+.audit-item:last-child {
+	border-left-color: transparent;
+}
+
+.audit-dot {
+	width: 16rpx;
+	height: 16rpx;
+	border-radius: 50%;
+	position: absolute;
+	left: -9rpx;
+	top: 28rpx;
+}
+
+.audit-dot.pass {
+	background: #52c41a;
+}
+
+.audit-dot.reject {
+	background: #ff4d4f;
+}
+
+.audit-content {
+	margin-left: 30rpx;
+	flex: 1;
+}
+
+.audit-row {
+	display: flex;
+	align-items: center;
+	gap: 16rpx;
+	margin-bottom: 8rpx;
+}
+
+.audit-result {
+	font-size: 26rpx;
+	font-weight: bold;
+}
+
+.audit-result.pass {
+	color: #52c41a;
+}
+
+.audit-result.reject {
+	color: #ff4d4f;
+}
+
+.audit-auditor {
+	font-size: 24rpx;
+	color: #666;
+}
+
+.audit-reason {
+	display: block;
+	font-size: 24rpx;
+	color: #ff4d4f;
+	background: #fff1f0;
+	padding: 12rpx 16rpx;
+	border-radius: 8rpx;
+	margin-bottom: 8rpx;
+	line-height: 1.5;
+}
+
+.audit-time {
+	display: block;
+	font-size: 22rpx;
+	color: #bbb;
+	margin-top: 4rpx;
+}
+
+.audit-empty {
+	text-align: center;
+	padding: 60rpx 0;
+	color: #bbb;
+	font-size: 28rpx;
+}
 </style>

+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/colorKind.js.map

@@ -1 +1 @@
-{"version":3,"file":"colorKind.js","sources":["api/erp/colorKind.js"],"sourcesContent":["import request from '@/utils/request';\n\n/**\n * 获取颜色种类列表(不分页)\n * @Author: Antigravity\n */\nexport function listAllColorKind(query) {\n  return request({\n    url: '/erp/colorKind/all',\n    method: 'GET',\n    params: query\n  });\n}\n\n/**\n * 分页获取颜色种类列表\n * @Author: Antigravity\n */\nexport function listPageColorKind(query) {\n  return request({\n    url: '/erp/colorKind/list',\n    method: 'GET',\n    params: query\n  });\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,iBAAiB,OAAO;AACtC,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;;"}
+{"version":3,"file":"colorKind.js","sources":["api/erp/colorKind.js"],"sourcesContent":["import request from '@/utils/request';\n\n/**\n * 分页获取颜色种类列表\n * @Author: Antigravity\n */\nexport function listPageColorKind(query) {\n  return request({\n    url: '/erp/colorKind/page',\n    method: 'GET',\n    params: query\n  });\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,kBAAkB,OAAO;AACvC,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;;"}

+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/model.js.map

@@ -1 +1 @@
-{"version":3,"file":"model.js","sources":["api/erp/model.js"],"sourcesContent":["import request from '@/utils/request';\n\n/**\n * 获取型材档案列表(不分页/前N条)\n * @Author: Antigravity\n */\nexport function listAllModel(query) {\n  return request({\n    url: '/erp/model/all',\n    method: 'GET',\n    params: query\n  });\n}\n\n/**\n * 分页获取型材档案列表\n * @Author: Antigravity\n */\nexport function listPageModel(query) {\n  return request({\n    url: '/erp/model/list',\n    method: 'GET',\n    params: query\n  });\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,aAAa,OAAO;AAClC,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;;"}
+{"version":3,"file":"model.js","sources":["api/erp/model.js"],"sourcesContent":["import request from '@/utils/request';\n\n/**\n * 分页获取型材档案列表\n * @Author: Antigravity\n */\nexport function listPageModel(query) {\n  return request({\n    url: '/erp/model/page',\n    method: 'GET',\n    params: query\n  });\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,cAAc,OAAO;AACnC,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;;"}

+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/order.js.map

@@ -1 +1 @@
-{"version":3,"file":"order.js","sources":["api/erp/order.js"],"sourcesContent":["import request from '@/utils/request'\n\n/**\n * 查询订单列表\n * @Author: Antigravity\n */\nexport function listOrder(query) {\n  return request({\n    url: '/erp/order/list',\n    method: 'get',\n    params: query\n  })\n}\n\n/**\n * 提交订单\n * @Author: Antigravity\n */\nexport function addOrder(data) {\n  return request({\n    url: '/erp/order/add',\n    method: 'post',\n    data: data\n  })\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,UAAU,OAAO;AAC/B,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;AAMO,SAAS,SAAS,MAAM;AAC7B,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACJ,CAAG;AACH;;;"}
+{"version":3,"file":"order.js","sources":["api/erp/order.js"],"sourcesContent":["import request from '@/utils/request'\n\n/**\n * 查询订单列表\n * @Author: Antigravity\n */\nexport function listOrder(query) {\n  return request({\n    url: '/erp/order/list',\n    method: 'get',\n    params: query\n  })\n}\n\n/**\n * 查询订单详情\n * @Author: Antigravity\n */\nexport function getOrderDetail(rowId) {\n  return request({\n    url: '/erp/order/' + rowId,\n    method: 'get'\n  })\n}\n\n/**\n * 提交订单\n * @Author: Antigravity\n */\nexport function addOrder(data) {\n  return request({\n    url: '/erp/order/add',\n    method: 'post',\n    data: data\n  })\n}\n\n/**\n * 撤销订单\n * @Author: Antigravity\n */\nexport function cancelOrder(rowId) {\n  return request({\n    url: '/erp/order/cancel/' + rowId,\n    method: 'post'\n  })\n}\n\n/**\n * 查询审核记录\n * @Author: Antigravity\n */\nexport function getAuditHistory(orderId) {\n  return request({\n    url: '/erp/orderAudit/history/' + orderId,\n    method: 'get'\n  })\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,UAAU,OAAO;AAC/B,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;AAMO,SAAS,eAAe,OAAO;AACpC,SAAOA,sBAAQ;AAAA,IACb,KAAK,gBAAgB;AAAA,IACrB,QAAQ;AAAA,EACZ,CAAG;AACH;AAMO,SAAS,SAAS,MAAM;AAC7B,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACJ,CAAG;AACH;AAMO,SAAS,YAAY,OAAO;AACjC,SAAOA,sBAAQ;AAAA,IACb,KAAK,uBAAuB;AAAA,IAC5B,QAAQ;AAAA,EACZ,CAAG;AACH;AAMO,SAAS,gBAAgB,SAAS;AACvC,SAAOA,sBAAQ;AAAA,IACb,KAAK,6BAA6B;AAAA,IAClC,QAAQ;AAAA,EACZ,CAAG;AACH;;;;;;"}

+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/pack.js.map

@@ -1 +1 @@
-{"version":3,"file":"pack.js","sources":["api/erp/pack.js"],"sourcesContent":["import request from '@/utils/request';\n\n/**\n * 获取包装档案列表(不分页)\n * @Author: Antigravity\n */\nexport function listAllPack(query) {\n  return request({\n    url: '/erp/pack/all',\n    method: 'GET',\n    params: query\n  });\n}\n\n/**\n * 分页获取包装档案列表\n * @Author: Antigravity\n */\nexport function listPagePack(query) {\n  return request({\n    url: '/erp/pack/list',\n    method: 'GET',\n    params: query\n  });\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,YAAY,OAAO;AACjC,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;;"}
+{"version":3,"file":"pack.js","sources":["api/erp/pack.js"],"sourcesContent":["import request from '@/utils/request';\n\n/**\n * 分页获取包装档案列表\n * @Author: Antigravity\n */\nexport function listPagePack(query) {\n  return request({\n    url: '/erp/pack/page',\n    method: 'GET',\n    params: query\n  });\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,aAAa,OAAO;AAClC,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;;"}

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/add-model/index.js.map


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/detail/index.js.map


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/index.js.map


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/list/index.js.map


+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/utils/assets.js.map

@@ -1 +1 @@
-{"version":3,"file":"assets.js","sources":["utils/assets.js"],"sourcesContent":["/**\n * 小程序全局图标库 (高清透明 SVG)\n */\nexport default {\n\t// ERP Logo\n\tlogo: '/static/erp_logo.png',\n\t\n\t// 微信图标 (已保存至本地静态目录)\n\twechat: '/static/wechat.png',\n\t\n\t// 状态图标\n\torder_all: '📋',\n\torder_pending: '📝',\n\torder_approving: '🖋️',\n\torder_producing: '⚙️',\n\torder_completed: '✅',\n\t\n\t// 底部导航栏 PNG 图标\n\ttabHome: '/static/tabs/home.png',\n\ttabHomeActive: '/static/tabs/home_active.png',\n\ttabOrder: '/static/tabs/order.png',\n\ttabOrderActive: '/static/tabs/order_active.png',\n\ttabMine: '/static/tabs/mine.png',\n\ttabMineActive: '/static/tabs/mine_active.png',\n\t\n\t// 我的页面 - 订单状态线性图标 (本地静态资源)\n\tminePendingReview: '/static/mine/pending_review.png',\n\tminePendingSign: '/static/mine/pending_sign.png',\n\tmineProducing: '/static/mine/producing.png',\n\tmineCompleted: '/static/mine/completed.png',\n\t\n\t// 我的页面 - 列表菜单线性图标 (本地静态资源)\n\tmineProtocol: '/static/mine/protocol.png',\n\tminePrivacy: '/static/mine/privacy.png',\n\tmineService: '/static/mine/service.png',\n\tmineArrow: '/static/mine/arrow.png',\n\tmineSettings: '/static/mine/settings.png',\n\tmineComplaint: '/static/mine/complaint.png',\n};\n"],"names":[],"mappings":";AAGA,MAAe,SAAA;AAAA;AAAA,EAEd,MAAM;AAAA;AAAA,EAGN,QAAQ;AAAA;AAAA,EAGR,WAAW;AAAA,EACX,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA;AAAA,EAGjB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,eAAe;AAAA;AAAA,EAGf,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,eAAe;AAAA;AAAA,EAGf,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,cAAc;AAAA,EACd,eAAe;AAChB;;"}
+{"version":3,"file":"assets.js","sources":["utils/assets.js"],"sourcesContent":["/**\n * 小程序全局图标库 (高清透明 SVG)\n */\nexport default {\n\t// ERP Logo\n\tlogo: '/static/erp_logo.png',\n\t\n\t// 微信图标 (已保存至本地静态目录)\n\twechat: '/static/wechat.png',\n\t\n\t// 状态图标\n\torder_all: '📋',\n\torder_cancelled: '🚫',\n\torder_pending: '📝',\n\torder_approving: '🖋️',\n\torder_producing: '⚙️',\n\torder_completed: '✅',\n\t\n\t// 底部导航栏 PNG 图标\n\ttabHome: '/static/tabs/home.png',\n\ttabHomeActive: '/static/tabs/home_active.png',\n\ttabOrder: '/static/tabs/order.png',\n\ttabOrderActive: '/static/tabs/order_active.png',\n\ttabMine: '/static/tabs/mine.png',\n\ttabMineActive: '/static/tabs/mine_active.png',\n\t\n\t// 我的页面 - 订单状态线性图标 (本地静态资源)\n\tminePendingReview: '/static/mine/pending_review.png',\n\tminePendingSign: '/static/mine/pending_sign.png',\n\tmineProducing: '/static/mine/producing.png',\n\tmineCompleted: '/static/mine/completed.png',\n\t\n\t// 我的页面 - 列表菜单线性图标 (本地静态资源)\n\tmineProtocol: '/static/mine/protocol.png',\n\tminePrivacy: '/static/mine/privacy.png',\n\tmineService: '/static/mine/service.png',\n\tmineArrow: '/static/mine/arrow.png',\n\tmineSettings: '/static/mine/settings.png',\n\tmineComplaint: '/static/mine/complaint.png',\n};\n"],"names":[],"mappings":";AAGA,MAAe,SAAA;AAAA;AAAA,EAEd,MAAM;AAAA;AAAA,EAGN,QAAQ;AAAA;AAAA,EAGR,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA;AAAA,EAGjB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,eAAe;AAAA;AAAA,EAGf,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,eAAe;AAAA;AAAA,EAGf,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,cAAc;AAAA,EACd,eAAe;AAChB;;"}

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/utils/request.js.map


+ 3 - 3
unpackage/dist/dev/mp-weixin/api/erp/colorKind.js

@@ -1,11 +1,11 @@
 "use strict";
 const utils_request = require("../../utils/request.js");
-function listAllColorKind(query) {
+function listPageColorKind(query) {
   return utils_request.request({
-    url: "/erp/colorKind/all",
+    url: "/erp/colorKind/page",
     method: "GET",
     params: query
   });
 }
-exports.listAllColorKind = listAllColorKind;
+exports.listPageColorKind = listPageColorKind;
 //# sourceMappingURL=../../../.sourcemap/mp-weixin/api/erp/colorKind.js.map

+ 3 - 3
unpackage/dist/dev/mp-weixin/api/erp/model.js

@@ -1,11 +1,11 @@
 "use strict";
 const utils_request = require("../../utils/request.js");
-function listAllModel(query) {
+function listPageModel(query) {
   return utils_request.request({
-    url: "/erp/model/all",
+    url: "/erp/model/page",
     method: "GET",
     params: query
   });
 }
-exports.listAllModel = listAllModel;
+exports.listPageModel = listPageModel;
 //# sourceMappingURL=../../../.sourcemap/mp-weixin/api/erp/model.js.map

+ 21 - 0
unpackage/dist/dev/mp-weixin/api/erp/order.js

@@ -7,6 +7,12 @@ function listOrder(query) {
     params: query
   });
 }
+function getOrderDetail(rowId) {
+  return utils_request.request({
+    url: "/erp/order/" + rowId,
+    method: "get"
+  });
+}
 function addOrder(data) {
   return utils_request.request({
     url: "/erp/order/add",
@@ -14,6 +20,21 @@ function addOrder(data) {
     data
   });
 }
+function cancelOrder(rowId) {
+  return utils_request.request({
+    url: "/erp/order/cancel/" + rowId,
+    method: "post"
+  });
+}
+function getAuditHistory(orderId) {
+  return utils_request.request({
+    url: "/erp/orderAudit/history/" + orderId,
+    method: "get"
+  });
+}
 exports.addOrder = addOrder;
+exports.cancelOrder = cancelOrder;
+exports.getAuditHistory = getAuditHistory;
+exports.getOrderDetail = getOrderDetail;
 exports.listOrder = listOrder;
 //# sourceMappingURL=../../../.sourcemap/mp-weixin/api/erp/order.js.map

+ 3 - 3
unpackage/dist/dev/mp-weixin/api/erp/pack.js

@@ -1,11 +1,11 @@
 "use strict";
 const utils_request = require("../../utils/request.js");
-function listAllPack(query) {
+function listPagePack(query) {
   return utils_request.request({
-    url: "/erp/pack/all",
+    url: "/erp/pack/page",
     method: "GET",
     params: query
   });
 }
-exports.listAllPack = listAllPack;
+exports.listPagePack = listPagePack;
 //# sourceMappingURL=../../../.sourcemap/mp-weixin/api/erp/pack.js.map

+ 2 - 2
unpackage/dist/dev/mp-weixin/common/vendor.js

@@ -7084,9 +7084,9 @@ function isConsoleWritable() {
   return isWritable;
 }
 function initRuntimeSocketService() {
-  const hosts = "198.18.0.1,192.168.1.205,10.0.0.254,127.0.0.1";
+  const hosts = "192.168.1.205,10.0.0.254,127.0.0.1";
   const port = "8090";
-  const id = "mp-weixin_kyI8gp";
+  const id = "mp-weixin_8vAO8l";
   const lazy = typeof swan !== "undefined";
   let restoreError = lazy ? () => {
   } : initOnError();

+ 175 - 72
unpackage/dist/dev/mp-weixin/pages/order/add-model/index.js

@@ -18,6 +18,19 @@ const _sfc_main = {
       typeList: [],
       surfaceList: [],
       packageList: [],
+      // 分页参数
+      typePageNum: 1,
+      typePageSize: 20,
+      typeHasMore: true,
+      typeLoading: false,
+      surfacePageNum: 1,
+      surfacePageSize: 20,
+      surfaceHasMore: true,
+      surfaceLoading: false,
+      packagePageNum: 1,
+      packagePageSize: 20,
+      packageHasMore: true,
+      packageLoading: false,
       formData: {
         type: "",
         modelId: "",
@@ -41,33 +54,102 @@ const _sfc_main = {
     ]);
   },
   methods: {
-    async loadModels() {
+    async loadModels(pageNum = 1) {
+      if (this.typeLoading)
+        return;
+      this.typeLoading = true;
       try {
-        const res = await api_erp_model.listAllModel();
-        this.typeList = res.data || [];
+        const res = await api_erp_model.listPageModel({
+          pageNum,
+          pageSize: this.typePageSize
+        });
+        const rows = res.rows || [];
+        const total = res.total || 0;
+        if (pageNum === 1) {
+          this.typeList = rows;
+        } else {
+          this.typeList = [...this.typeList, ...rows];
+        }
+        this.typeHasMore = this.typeList.length < total;
       } catch (e) {
         common_vendor.index.showToast({ title: "加载型号失败", icon: "none" });
+      } finally {
+        this.typeLoading = false;
       }
     },
-    async loadPackageMethods() {
+    async loadPackageMethods(pageNum = 1) {
+      if (this.packageLoading)
+        return;
+      this.packageLoading = true;
       try {
-        const res = await api_erp_pack.listAllPack();
-        this.packageList = res.data || [];
+        const res = await api_erp_pack.listPagePack({
+          pageNum,
+          pageSize: this.packagePageSize
+        });
+        const rows = res.rows || [];
+        const total = res.total || 0;
+        if (pageNum === 1) {
+          this.packageList = rows;
+        } else {
+          this.packageList = [...this.packageList, ...rows];
+        }
+        this.packageHasMore = this.packageList.length < total;
       } catch (e) {
         common_vendor.index.showToast({ title: "加载包装方式失败", icon: "none" });
+      } finally {
+        this.packageLoading = false;
       }
     },
-    async loadSurfaceKinds() {
+    async loadSurfaceKinds(pageNum = 1) {
+      if (this.surfaceLoading)
+        return;
+      this.surfaceLoading = true;
       try {
-        const res = await api_erp_colorKind.listAllColorKind();
-        this.surfaceList = (res.data || []).filter((item) => item.fname !== "所有类别");
+        const res = await api_erp_colorKind.listPageColorKind({
+          pageNum,
+          pageSize: this.surfacePageSize
+        });
+        let rows = res.rows || [];
+        const total = res.total || 0;
+        rows = rows.filter((item) => item.name !== "所有类别");
+        if (pageNum === 1) {
+          this.surfaceList = rows;
+        } else {
+          this.surfaceList = [...this.surfaceList, ...rows];
+        }
+        this.surfaceHasMore = this.surfaceList.length < total;
       } catch (e) {
         common_vendor.index.showToast({ title: "加载表面处理失败", icon: "none" });
+      } finally {
+        this.surfaceLoading = false;
+      }
+    },
+    loadMoreType() {
+      if (this.typeHasMore && !this.typeLoading) {
+        this.typePageNum++;
+        this.loadModels(this.typePageNum);
+      }
+    },
+    loadMoreSurface() {
+      if (this.surfaceHasMore && !this.surfaceLoading) {
+        this.surfacePageNum++;
+        this.loadSurfaceKinds(this.surfacePageNum);
       }
     },
+    loadMorePackage() {
+      if (this.packageHasMore && !this.packageLoading) {
+        this.packagePageNum++;
+        this.loadPackageMethods(this.packagePageNum);
+      }
+    },
+    onScrollToLower() {
+    },
     openTypePicker() {
-      if (this.formData.type)
-        this.tempSelectedIndex = this.typeList.findIndex((item) => item.fnum === this.formData.type);
+      if (this.formData.type) {
+        this.tempSelectedIndex = this.typeList.findIndex((item) => item.num === this.formData.type);
+      } else {
+        this.tempSelectedIndex = -1;
+      }
       this.showTypePicker = true;
     },
     closeTypePicker() {
@@ -80,16 +162,18 @@ const _sfc_main = {
       if (this.tempSelectedIndex === -1)
         return;
       const item = this.typeList[this.tempSelectedIndex];
-      this.formData.type = item.fnum;
-      this.formData.modelId = item.frowId;
-      this.formData.name = item.fname;
-      this.formData.wallThickness = item.thick ? Number(item.thick).toFixed(4) : "";
+      this.formData.type = item.num;
+      this.formData.modelId = item.rowId;
+      this.formData.name = item.name;
       this.formData.material = "6063-T5";
       this.closeTypePicker();
     },
     openSurfacePicker() {
-      if (this.formData.surfaceName)
-        this.tempSurfaceIndex = this.surfaceList.findIndex((item) => item.fname === this.formData.surfaceName);
+      if (this.formData.surfaceName) {
+        this.tempSurfaceIndex = this.surfaceList.findIndex((item) => item.name === this.formData.surfaceName);
+      } else {
+        this.tempSurfaceIndex = -1;
+      }
       this.showSurfacePicker = true;
     },
     closeSurfacePicker() {
@@ -102,13 +186,16 @@ const _sfc_main = {
       if (this.tempSurfaceIndex === -1)
         return;
       const item = this.surfaceList[this.tempSurfaceIndex];
-      this.formData.surfaceName = item.fname;
-      this.formData.surfaceId = item.frowId;
+      this.formData.surfaceName = item.name;
+      this.formData.surfaceId = item.rowId;
       this.closeSurfacePicker();
     },
     openPackagePicker() {
-      if (this.formData.packageMethod)
-        this.tempPackageIndex = this.packageList.findIndex((item) => item.fname === this.formData.packageMethod);
+      if (this.formData.packageMethod) {
+        this.tempPackageIndex = this.packageList.findIndex((item) => item.name === this.formData.packageMethod);
+      } else {
+        this.tempPackageIndex = -1;
+      }
       this.showPackagePicker = true;
     },
     closePackagePicker() {
@@ -121,8 +208,8 @@ const _sfc_main = {
       if (this.tempPackageIndex === -1)
         return;
       const item = this.packageList[this.tempPackageIndex];
-      this.formData.packageMethod = item.fname;
-      this.formData.packageId = item.frowId;
+      this.formData.packageMethod = item.name;
+      this.formData.packageId = item.rowId;
       this.closePackagePicker();
     },
     async confirmAddModel() {
@@ -141,7 +228,7 @@ const _sfc_main = {
         }
       }
       const finalData = {
-        fOrderId: null,
+        orderId: null,
         modelId: this.formData.modelId,
         modelNum: this.formData.type,
         modelName: this.formData.name,
@@ -180,33 +267,34 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     }),
     b: common_vendor.t($data.formData.type || "请选择型号"),
     c: !$data.formData.type ? 1 : "",
-    d: common_vendor.o((...args) => $options.openTypePicker && $options.openTypePicker(...args), "e7"),
+    d: common_vendor.o((...args) => $options.openTypePicker && $options.openTypePicker(...args), "d1"),
     e: $data.formData.name,
-    f: common_vendor.o(($event) => $data.formData.name = $event.detail.value, "cd"),
+    f: common_vendor.o(($event) => $data.formData.name = $event.detail.value, "ca"),
     g: $data.formData.material,
-    h: common_vendor.o(($event) => $data.formData.material = $event.detail.value, "65"),
+    h: common_vendor.o(($event) => $data.formData.material = $event.detail.value, "d1"),
     i: common_vendor.t($data.formData.surfaceName || "请选择表面名称"),
     j: !$data.formData.surfaceName ? 1 : "",
-    k: common_vendor.o((...args) => $options.openSurfacePicker && $options.openSurfacePicker(...args), "e5"),
+    k: common_vendor.o((...args) => $options.openSurfacePicker && $options.openSurfacePicker(...args), "8b"),
     l: common_vendor.t($data.formData.packageMethod || "请选择包装方式"),
     m: !$data.formData.packageMethod ? 1 : "",
-    n: common_vendor.o((...args) => $options.openPackagePicker && $options.openPackagePicker(...args), "64"),
+    n: common_vendor.o((...args) => $options.openPackagePicker && $options.openPackagePicker(...args), "e9"),
     o: $data.formData.length,
-    p: common_vendor.o(($event) => $data.formData.length = $event.detail.value, "01"),
+    p: common_vendor.o(($event) => $data.formData.length = $event.detail.value, "d7"),
     q: $data.formData.wallThickness,
-    r: common_vendor.o(($event) => $data.formData.wallThickness = $event.detail.value, "61"),
+    r: common_vendor.o(($event) => $data.formData.wallThickness = $event.detail.value, "ad"),
     s: $data.formData.count,
-    t: common_vendor.o(($event) => $data.formData.count = $event.detail.value, "47"),
+    t: common_vendor.o(($event) => $data.formData.count = $event.detail.value, "94"),
     v: !$data.showTypePicker && !$data.showSurfacePicker && !$data.showPackagePicker,
-    w: common_vendor.o((...args) => $options.confirmAddModel && $options.confirmAddModel(...args), "39"),
-    x: $data.showTypePicker
-  }, $data.showTypePicker ? {
-    y: common_vendor.o((...args) => $options.closeTypePicker && $options.closeTypePicker(...args), "b3"),
-    z: common_vendor.o((...args) => $options.confirmTypeSelect && $options.confirmTypeSelect(...args), "03"),
-    A: common_vendor.f($data.typeList, (item, index, i0) => {
+    w: common_vendor.o((...args) => $options.onScrollToLower && $options.onScrollToLower(...args), "39"),
+    x: common_vendor.o((...args) => $options.confirmAddModel && $options.confirmAddModel(...args), "5e"),
+    y: $data.showTypePicker
+  }, $data.showTypePicker ? common_vendor.e({
+    z: common_vendor.o((...args) => $options.closeTypePicker && $options.closeTypePicker(...args), "0e"),
+    A: common_vendor.o((...args) => $options.confirmTypeSelect && $options.confirmTypeSelect(...args), "23"),
+    B: common_vendor.f($data.typeList, (item, index, i0) => {
       return common_vendor.e({
-        a: common_vendor.t(item.fnum),
-        b: common_vendor.t(item.fname),
+        a: common_vendor.t(item.num),
+        b: common_vendor.t(item.name),
         c: $data.tempSelectedIndex === index
       }, $data.tempSelectedIndex === index ? {} : {}, {
         d: index,
@@ -214,20 +302,25 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
         f: common_vendor.o(($event) => $options.selectTypeItem(index), index)
       });
     }),
-    B: common_vendor.o(() => {
-    }, "4c"),
-    C: common_vendor.o((...args) => $options.closeTypePicker && $options.closeTypePicker(...args), "a9"),
-    D: common_vendor.o(() => {
-    }, "62")
-  } : {}, {
-    E: $data.showSurfacePicker
-  }, $data.showSurfacePicker ? {
-    F: common_vendor.o((...args) => $options.closeSurfacePicker && $options.closeSurfacePicker(...args), "cf"),
-    G: common_vendor.o((...args) => $options.confirmSurfaceSelect && $options.confirmSurfaceSelect(...args), "30"),
-    H: common_vendor.f($data.surfaceList, (item, index, i0) => {
+    C: $data.typeLoading && $data.typeHasMore
+  }, $data.typeLoading && $data.typeHasMore ? {} : {}, {
+    D: !$data.typeHasMore && $data.typeList.length > 0
+  }, !$data.typeHasMore && $data.typeList.length > 0 ? {} : {}, {
+    E: common_vendor.o((...args) => $options.loadMoreType && $options.loadMoreType(...args), "19"),
+    F: common_vendor.o(() => {
+    }, "f2"),
+    G: common_vendor.o((...args) => $options.closeTypePicker && $options.closeTypePicker(...args), "93"),
+    H: common_vendor.o(() => {
+    }, "9a")
+  }) : {}, {
+    I: $data.showSurfacePicker
+  }, $data.showSurfacePicker ? common_vendor.e({
+    J: common_vendor.o((...args) => $options.closeSurfacePicker && $options.closeSurfacePicker(...args), "02"),
+    K: common_vendor.o((...args) => $options.confirmSurfaceSelect && $options.confirmSurfaceSelect(...args), "05"),
+    L: common_vendor.f($data.surfaceList, (item, index, i0) => {
       return common_vendor.e({
-        a: common_vendor.t(item.fnum),
-        b: common_vendor.t(item.fname),
+        a: common_vendor.t(item.num),
+        b: common_vendor.t(item.name),
         c: $data.tempSurfaceIndex === index
       }, $data.tempSurfaceIndex === index ? {} : {}, {
         d: index,
@@ -235,20 +328,25 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
         f: common_vendor.o(($event) => $options.selectSurfaceItem(index), index)
       });
     }),
-    I: common_vendor.o(() => {
-    }, "c7"),
-    J: common_vendor.o((...args) => $options.closeSurfacePicker && $options.closeSurfacePicker(...args), "12"),
-    K: common_vendor.o(() => {
-    }, "b7")
-  } : {}, {
-    L: $data.showPackagePicker
-  }, $data.showPackagePicker ? {
-    M: common_vendor.o((...args) => $options.closePackagePicker && $options.closePackagePicker(...args), "21"),
-    N: common_vendor.o((...args) => $options.confirmPackageSelect && $options.confirmPackageSelect(...args), "42"),
-    O: common_vendor.f($data.packageList, (item, index, i0) => {
+    M: $data.surfaceLoading && $data.surfaceHasMore
+  }, $data.surfaceLoading && $data.surfaceHasMore ? {} : {}, {
+    N: !$data.surfaceHasMore && $data.surfaceList.length > 0
+  }, !$data.surfaceHasMore && $data.surfaceList.length > 0 ? {} : {}, {
+    O: common_vendor.o((...args) => $options.loadMoreSurface && $options.loadMoreSurface(...args), "4d"),
+    P: common_vendor.o(() => {
+    }, "2e"),
+    Q: common_vendor.o((...args) => $options.closeSurfacePicker && $options.closeSurfacePicker(...args), "51"),
+    R: common_vendor.o(() => {
+    }, "f0")
+  }) : {}, {
+    S: $data.showPackagePicker
+  }, $data.showPackagePicker ? common_vendor.e({
+    T: common_vendor.o((...args) => $options.closePackagePicker && $options.closePackagePicker(...args), "04"),
+    U: common_vendor.o((...args) => $options.confirmPackageSelect && $options.confirmPackageSelect(...args), "11"),
+    V: common_vendor.f($data.packageList, (item, index, i0) => {
       return common_vendor.e({
-        a: common_vendor.t(item.fnum),
-        b: common_vendor.t(item.fname),
+        a: common_vendor.t(item.num),
+        b: common_vendor.t(item.name),
         c: $data.tempPackageIndex === index
       }, $data.tempPackageIndex === index ? {} : {}, {
         d: index,
@@ -256,12 +354,17 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
         f: common_vendor.o(($event) => $options.selectPackageItem(index), index)
       });
     }),
-    P: common_vendor.o(() => {
-    }, "ec"),
-    Q: common_vendor.o((...args) => $options.closePackagePicker && $options.closePackagePicker(...args), "11"),
-    R: common_vendor.o(() => {
-    }, "a1")
-  } : {});
+    W: $data.packageLoading && $data.packageHasMore
+  }, $data.packageLoading && $data.packageHasMore ? {} : {}, {
+    X: !$data.packageHasMore && $data.packageList.length > 0
+  }, !$data.packageHasMore && $data.packageList.length > 0 ? {} : {}, {
+    Y: common_vendor.o((...args) => $options.loadMorePackage && $options.loadMorePackage(...args), "16"),
+    Z: common_vendor.o(() => {
+    }, "c3"),
+    aa: common_vendor.o((...args) => $options.closePackagePicker && $options.closePackagePicker(...args), "ca"),
+    ab: common_vendor.o(() => {
+    }, "a0")
+  }) : {});
 }
 const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-97855afd"]]);
 wx.createPage(MiniProgramPage);

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/order/add-model/index.wxml


+ 8 - 0
unpackage/dist/dev/mp-weixin/pages/order/add-model/index.wxss

@@ -230,6 +230,14 @@ to {
 	color: #C1001C;
 	font-weight: bold;
 }
+.loading-tip.data-v-97855afd {
+	padding: 20rpx 0;
+	text-align: center;
+}
+.loading-text.data-v-97855afd {
+	font-size: 26rpx;
+	color: #999;
+}
 .bottom-placeholder.data-v-97855afd {
 	height: 60rpx;
 }

+ 61 - 13
unpackage/dist/dev/mp-weixin/pages/order/detail/index.js

@@ -1,5 +1,6 @@
 "use strict";
 const common_vendor = require("../../../common/vendor.js");
+const api_erp_order = require("../../../api/erp/order.js");
 const ErpNavBar = () => "../../../components/erp-nav-bar.js";
 const _sfc_main = {
   components: { ErpNavBar },
@@ -9,6 +10,8 @@ const _sfc_main = {
       // px
       headerHeight: 120,
       // px
+      rowId: "",
+      loading: false,
       order: {
         orderNo: "-",
         status: 1,
@@ -24,10 +27,11 @@ const _sfc_main = {
     statusSubText() {
       const map = {
         pending: "您的订单已提交,正在排队等待审核...",
+        expired: "该订单已被驳回。",
+        cancelled: "该订单已被撤销。",
         process: "审核已完成,正在由相关主管签批...",
         making: "订单已入库排产,工厂正在全力生产中...",
-        finish: "该订单生产已完成并正式入库。",
-        expired: "该订单已由客户主动撤销。"
+        finish: "该订单生产已完成并正式入库。"
       };
       return map[this.order.statusType] || "订单状态更新中";
     },
@@ -39,28 +43,72 @@ const _sfc_main = {
     }
   },
   onLoad(options) {
-    if (options.data) {
-      try {
-        this.order = JSON.parse(decodeURIComponent(options.data));
-      } catch (e) {
-        common_vendor.index.__f__("error", "at pages/order/detail/index.vue:124", "Data Error");
-      }
+    if (options.rowId) {
+      this.rowId = options.rowId;
+      this.loadOrderDetail();
     }
   },
   methods: {
+    async loadOrderDetail() {
+      if (this.loading)
+        return;
+      this.loading = true;
+      try {
+        const res = await api_erp_order.getOrderDetail(this.rowId);
+        const data = res.data || res;
+        if (!data) {
+          common_vendor.index.showToast({ title: "订单不存在", icon: "none" });
+          return;
+        }
+        const statusMap = {
+          "-1": { name: "已撤销", type: "cancelled" },
+          0: { name: "待审核", type: "pending" },
+          1: { name: "已驳回", type: "expired" },
+          2: { name: "待签批", type: "process" },
+          3: { name: "生产中", type: "making" },
+          4: { name: "已完成", type: "finish" }
+        };
+        const s = statusMap[data.status] || { name: "未知", type: "expired" };
+        this.order = {
+          orderNo: data.code || "-",
+          rowId: data.rowId,
+          status: data.status,
+          statusName: s.name,
+          statusType: s.type,
+          time: data.createTime || "-",
+          totalCount: data.totalCount || 0,
+          erpNo: data.erpNo || "",
+          models: (data.details || []).map((d) => ({
+            type: d.modelNum || "未知型号",
+            typeName: d.modelName || "铝型材主料",
+            material: d.material || "6063-T5",
+            surface: d.surfaceName || "无",
+            package: d.packName || "普通包装",
+            length: d.length ? Number(d.length).toFixed(4) : "0",
+            wallThickness: d.wallThickness ? Number(d.wallThickness).toFixed(4) : "1.2",
+            count: d.count || 0
+          }))
+        };
+      } catch (e) {
+        common_vendor.index.__f__("error", "at pages/order/detail/index.vue:170", "加载订单详情失败", e);
+        common_vendor.index.showToast({ title: "加载失败", icon: "none" });
+      } finally {
+        this.loading = false;
+      }
+    },
     goBack() {
       common_vendor.index.navigateBack();
     },
     doCancel() {
       common_vendor.index.showModal({
         title: "确认撤销",
-        content: "订单撤销后将流转至已撤销状态,确定吗?",
+        content: "确定要撤销该订单吗?",
         confirmColor: "#ff3b30",
         success: (res) => {
           if (res.confirm) {
-            this.order.status = 0;
+            this.order.status = -1;
             this.order.statusName = "已撤销";
-            this.order.statusType = "expired";
+            this.order.statusType = "cancelled";
             common_vendor.index.showToast({ title: "撤销成功" });
           }
         }
@@ -108,8 +156,8 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
   } : {}, {
     i: common_vendor.t($data.order.time),
     j: $options.scrollHeight,
-    k: $data.order.status === 1
-  }, $data.order.status === 1 ? {
+    k: $data.order.status === 0
+  }, $data.order.status === 0 ? {
     l: common_vendor.o((...args) => $options.doCancel && $options.doCancel(...args), "8d"),
     m: common_vendor.o((...args) => $options.callSales && $options.callSales(...args), "49")
   } : {

+ 3 - 0
unpackage/dist/dev/mp-weixin/pages/order/detail/index.wxss

@@ -34,6 +34,9 @@
 .status-banner-container.expired.data-v-a8bbe39b {
 	background: linear-gradient(135deg, #868f96 0%, #596164 100%);
 }
+.status-banner-container.cancelled.data-v-a8bbe39b {
+	background: linear-gradient(135deg, #a0a0a0 0%, #666666 100%);
+}
 
 /* 状态横幅内容 */
 .status-banner-content.data-v-a8bbe39b {

+ 13 - 13
unpackage/dist/dev/mp-weixin/pages/order/index.js

@@ -45,7 +45,7 @@ const _sfc_main = {
       if (showFullLoading)
         this.isLoading = true;
       try {
-        const res = await api_erp_orderDetail.listOrderDetail({ fOrderId: "" });
+        const res = await api_erp_orderDetail.listOrderDetail({ orderId: "" });
         this.selectedModels = res.data || [];
       } catch (e) {
         common_vendor.index.__f__("error", "at pages/order/index.vue:156", "加载型号列表失败", e);
@@ -70,6 +70,7 @@ const _sfc_main = {
         common_vendor.index.removeStorageSync("isLogin");
         this.isLoggedIn = false;
         this.myInfo = {};
+        this.isLoading = false;
       }
     },
     goToLogin() {
@@ -105,7 +106,7 @@ const _sfc_main = {
         return;
       common_vendor.index.showLoading({ title: "正在提交订单", mask: true });
       try {
-        const detailIds = this.selectedModels.map((item) => item.frowId);
+        const detailIds = this.selectedModels.map((item) => item.rowId);
         await api_erp_order.addOrder({ detailIds });
         common_vendor.index.hideLoading();
         common_vendor.index.showToast({ title: "下单成功", icon: "success" });
@@ -131,14 +132,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
       title: "ERP 下单",
       ["show-back"]: false
     }),
-    b: !$data.isLoggedIn
-  }, !$data.isLoggedIn ? {
-    c: common_vendor.o((...args) => $options.goToLogin && $options.goToLogin(...args), "93")
+    b: $data.isLoading
+  }, $data.isLoading ? {} : !$data.isLoggedIn ? {
+    d: common_vendor.o((...args) => $options.goToLogin && $options.goToLogin(...args), "65")
   } : !$data.myInfo.authClientFRowID ? {
-    e: common_vendor.o((...args) => $options.contactAdmin && $options.contactAdmin(...args), "85")
+    f: common_vendor.o((...args) => $options.contactAdmin && $options.contactAdmin(...args), "b0")
   } : common_vendor.e({
-    f: $data.isLoading
-  }, $data.isLoading ? {} : common_vendor.e({
     g: $data.selectedModels.length > 0
   }, $data.selectedModels.length > 0 ? {} : {}, {
     h: $data.selectedModels.length > 0
@@ -154,20 +153,21 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
       };
     })
   } : {
-    j: common_vendor.o((...args) => $options.goToAddModel && $options.goToAddModel(...args), "17")
-  }), {
+    j: common_vendor.o((...args) => $options.goToAddModel && $options.goToAddModel(...args), "1f")
+  }, {
     k: $data.selectedModels.length > 0
   }, $data.selectedModels.length > 0 ? {
-    l: common_vendor.o((...args) => $options.goToAddModel && $options.goToAddModel(...args), "4c")
+    l: common_vendor.o((...args) => $options.goToAddModel && $options.goToAddModel(...args), "6e")
   } : {}, {
     m: $data.selectedModels.length > 0
   }, $data.selectedModels.length > 0 ? {
     n: common_vendor.t($data.selectedModels.length),
     o: common_vendor.t($options.totalCount),
     p: $data.selectedModels.length === 0,
-    q: common_vendor.o((...args) => $options.submitFinalOrder && $options.submitFinalOrder(...args), "63")
+    q: common_vendor.o((...args) => $options.submitFinalOrder && $options.submitFinalOrder(...args), "cb")
   } : {}), {
-    d: !$data.myInfo.authClientFRowID,
+    c: !$data.isLoggedIn,
+    e: !$data.myInfo.authClientFRowID,
     r: common_vendor.p({
       active: "order"
     })

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/order/index.wxml


+ 13 - 5
unpackage/dist/dev/mp-weixin/pages/order/index.wxss

@@ -376,14 +376,22 @@
 	margin: 0 8rpx;
 	animation: dot-pulse-17a44f9d 1.4s infinite ease-in-out both;
 }
-.dot.data-v-17a44f9d:nth-child(1) { animation-delay: -0.32s;
+.dot.data-v-17a44f9d:nth-child(1) {
+	animation-delay: -0.32s;
 }
-.dot.data-v-17a44f9d:nth-child(2) { animation-delay: -0.16s;
+.dot.data-v-17a44f9d:nth-child(2) {
+	animation-delay: -0.16s;
 }
 @keyframes dot-pulse-17a44f9d {
-0%, 80%, 100% { transform: scale(0); opacity: 0.3;
-}
-40% { transform: scale(1); opacity: 1;
+0%,
+	80%,
+	100% {
+		transform: scale(0);
+		opacity: 0.3;
+}
+40% {
+		transform: scale(1);
+		opacity: 1;
 }
 }
 .loading-text.data-v-17a44f9d {

+ 81 - 98
unpackage/dist/dev/mp-weixin/pages/order/list/index.js

@@ -14,57 +14,11 @@ const _sfc_main = {
       currentTab: 0,
       loading: false,
       noMore: false,
-      tabs: ["全部", "待审核", "待签批", "生产中", "已完成"],
-      allOrders: [
-        {
-          orderNo: "ORD20240428001",
-          models: [
-            { type: "TY0019", length: "6000", surface: "阳极氧化", count: "100" },
-            { type: "TY0018", length: "6000", surface: "PL坯料", count: "50" }
-          ],
-          totalCount: 150,
-          status: 1,
-          statusName: "待审核",
-          statusType: "pending",
-          time: "2024-04-28 10:20"
-        },
-        {
-          orderNo: "ORD20240428002",
-          models: [
-            { type: "TY0020", length: "5800", surface: "粉末喷涂", count: "80" }
-          ],
-          totalCount: 80,
-          status: 2,
-          statusName: "待签批",
-          statusType: "process",
-          time: "2024-04-28 09:15"
-        },
-        {
-          orderNo: "ORD20240427088",
-          models: [
-            { type: "TY0018", length: "6000", surface: "PL坯料", count: "300" }
-          ],
-          totalCount: 300,
-          status: 4,
-          statusName: "已完成",
-          statusType: "finish",
-          time: "2024-04-27 15:40"
-        },
-        {
-          orderNo: "ORD20240427045",
-          models: [
-            { type: "TY0021", length: "3000", surface: "电泳涂漆", count: "50" },
-            { type: "TY0022", length: "4000", surface: "木纹转印", count: "40" },
-            { type: "TY0023", length: "5000", surface: "氟碳喷涂", count: "30" }
-          ],
-          totalCount: 120,
-          status: 3,
-          statusName: "生产中",
-          statusType: "making",
-          time: "2024-04-27 11:05"
-        }
-      ],
-      displayList: []
+      tabs: ["全部", "已撤销", "待审核", "已驳回", "待签批", "生产中", "已完成"],
+      allOrders: [],
+      displayList: [],
+      auditHistoryVisible: false,
+      auditHistoryList: []
     };
   },
   computed: {
@@ -102,36 +56,33 @@ const _sfc_main = {
         return;
       this.loading = true;
       try {
-        const params = {};
+        const params = {
+          pageNum: 1,
+          // 简易处理,先加载第一页
+          pageSize: 50
+        };
         if (this.currentTab > 0) {
-          params.fStatus = this.currentTab - 1;
+          const tabToStatus = [void 0, -1, 0, 1, 2, 3, 4];
+          params.status = tabToStatus[this.currentTab];
         }
         const res = await api_erp_order.listOrder(params);
-        const rows = res.data || [];
+        const rows = res.rows || [];
         const formattedRows = rows.map((item) => {
-          let sName = "待审核", sType = "pending";
-          if (item.fStatus === 1) {
-            sName = "已审核";
-            sType = "process";
-          } else if (item.fStatus === 2) {
-            sName = "已驳回";
-            sType = "expired";
-          } else if (item.fStatus === 3) {
-            sName = "生产中";
-            sType = "making";
-          } else if (item.fStatus === 4) {
-            sName = "已完成";
-            sType = "finish";
-          } else if (item.fStatus === 0) {
-            sName = "待审核";
-            sType = "pending";
-          }
+          const statusMap = {
+            "-1": { name: "已撤销", type: "cancelled" },
+            0: { name: "待审核", type: "pending" },
+            1: { name: "已驳回", type: "expired" },
+            2: { name: "待签批", type: "process" },
+            3: { name: "生产中", type: "making" },
+            4: { name: "已完成", type: "finish" }
+          };
+          const s = statusMap[item.status] || { name: "未知", type: "expired" };
           return {
-            orderNo: item.fCode,
-            fRowId: item.fRowId,
-            status: item.fStatus,
-            statusName: sName,
-            statusType: sType,
+            orderNo: item.code,
+            rowId: item.rowId,
+            status: item.status,
+            statusName: s.name,
+            statusType: s.type,
             time: item.createTime,
             totalCount: item.totalCount || 0,
             models: (item.details || []).map((d) => ({
@@ -143,40 +94,49 @@ const _sfc_main = {
           };
         });
         this.displayList = [...this.displayList, ...formattedRows];
-        this.noMore = true;
+        this.noMore = this.displayList.length >= (res.total || 0);
       } catch (e) {
         common_vendor.index.__f__("error", "at pages/order/list/index.vue:201", "加载订单列表失败", e);
       } finally {
         this.loading = false;
       }
     },
-    onCancel(item) {
+    async onCancel(item) {
       common_vendor.index.showModal({
         title: "确认撤销",
         content: `确认要撤销订单:${item.orderNo} 吗?`,
         confirmColor: "#ff4d4f",
-        success: (res) => {
+        success: async (res) => {
           if (res.confirm) {
             common_vendor.index.showLoading({ title: "撤销中" });
-            setTimeout(() => {
+            try {
+              await api_erp_order.cancelOrder(item.rowId);
               common_vendor.index.hideLoading();
-              common_vendor.index.showToast({ title: "已撤销" });
-              const target = this.allOrders.find((o) => o.orderNo === item.orderNo);
-              if (target) {
-                target.status = 0;
-                target.statusName = "已撤销";
-                target.statusType = "expired";
-              }
+              common_vendor.index.showToast({ title: "已撤销", icon: "success" });
               this.refresh();
-            }, 800);
+            } catch (e) {
+              common_vendor.index.hideLoading();
+              common_vendor.index.showToast({ title: "撤销失败", icon: "none" });
+            }
           }
         }
       });
     },
+    async showAuditHistory(item) {
+      common_vendor.index.showLoading({ title: "加载中" });
+      try {
+        const res = await api_erp_order.getAuditHistory(item.rowId);
+        this.auditHistoryList = res.data || [];
+      } catch (e) {
+        this.auditHistoryList = [];
+      } finally {
+        common_vendor.index.hideLoading();
+        this.auditHistoryVisible = true;
+      }
+    },
     goDetail(item) {
-      const dataStr = encodeURIComponent(JSON.stringify(item));
       common_vendor.index.navigateTo({
-        url: `/pages/order/detail/index?data=${dataStr}`
+        url: `/pages/order/detail/index?rowId=${item.rowId}`
       });
     }
   }
@@ -221,13 +181,14 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
         g: common_vendor.t(item.models.length),
         h: common_vendor.t(item.totalCount),
         i: common_vendor.t(item.time),
-        j: item.status === 1
-      }, item.status === 1 ? {
-        k: common_vendor.o(($event) => $options.onCancel(item), index)
+        j: common_vendor.o(($event) => $options.showAuditHistory(item), index),
+        k: item.status === 0
+      }, item.status === 0 ? {
+        l: common_vendor.o(($event) => $options.onCancel(item), index)
       } : {}, {
-        l: common_vendor.o(($event) => $options.goDetail(item), index),
-        m: index,
-        n: common_vendor.o(($event) => $options.goDetail(item), index)
+        m: common_vendor.o(($event) => $options.goDetail(item), index),
+        n: index,
+        o: common_vendor.o(($event) => $options.goDetail(item), index)
       });
     }),
     e: $data.displayList.length > 0
@@ -242,8 +203,30 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     j: common_vendor.o((...args) => $options.onReachEnd && $options.onReachEnd(...args), "57"),
     k: common_vendor.p({
       active: "order"
-    })
-  });
+    }),
+    l: $data.auditHistoryVisible
+  }, $data.auditHistoryVisible ? common_vendor.e({
+    m: common_vendor.o(($event) => $data.auditHistoryVisible = false, "a0"),
+    n: common_vendor.f($data.auditHistoryList, (item, idx, i0) => {
+      return common_vendor.e({
+        a: common_vendor.n(item.auditResult === 1 ? "pass" : "reject"),
+        b: common_vendor.t(item.auditResult === 1 ? "通过" : "驳回"),
+        c: common_vendor.n(item.auditResult === 1 ? "pass" : "reject"),
+        d: common_vendor.t(item.auditorName || "未知"),
+        e: item.rejectReason
+      }, item.rejectReason ? {
+        f: common_vendor.t(item.rejectReason)
+      } : {}, {
+        g: common_vendor.t(item.auditTime),
+        h: idx
+      });
+    }),
+    o: $data.auditHistoryList.length === 0
+  }, $data.auditHistoryList.length === 0 ? {} : {}, {
+    p: common_vendor.o(() => {
+    }, "39"),
+    q: common_vendor.o(($event) => $data.auditHistoryVisible = false, "5d")
+  }) : {});
 }
 const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-8504eca3"]]);
 wx.createPage(MiniProgramPage);

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/order/list/index.wxml


+ 128 - 7
unpackage/dist/dev/mp-weixin/pages/order/list/index.wxss

@@ -57,7 +57,7 @@
 	display: flex;
 }
 .indicator-bar.data-v-8504eca3 {
-	width: 20%;
+	width: 14.285%;
 	height: 100%;
 	display: flex;
 	align-items: center;
@@ -110,6 +110,10 @@
 	background: #f5f5f5;
 	color: #999;
 }
+.status-badge.cancelled.data-v-8504eca3 {
+	background: #f0f0f0;
+	color: #666;
+}
 .status-badge.process.data-v-8504eca3 {
 	background: #fff7e6;
 	color: #ffa940;
@@ -118,12 +122,6 @@
 	background: #e6fffb;
 	color: #36cfc9;
 }
-
-/* 已撤销样式 */
-.status-badge.expired.data-v-8504eca3 {
-	background: #f5f5f5;
-	color: #999;
-}
 .status-badge.finish.data-v-8504eca3 {
 	background: #f6ffed;
 	color: #52c41a;
@@ -223,6 +221,13 @@
 	border: 1rpx solid #ddd;
 	color: #666;
 }
+.btn-audit.data-v-8504eca3 {
+	border: 1rpx solid #ddd;
+	color: #C1001C;
+	padding: 12rpx 20rpx;
+	border-radius: 30rpx;
+	font-size: 24rpx;
+}
 .btn-view.primary.data-v-8504eca3 {
 	background: #C1001C;
 	color: #fff;
@@ -283,3 +288,119 @@ to {
 .safe-bottom.data-v-8504eca3 {
 	height: 40rpx;
 }
+
+/* 审核记录弹窗 */
+.overlay.data-v-8504eca3 {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background: rgba(0, 0, 0, 0.45);
+	z-index: 1000;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+.audit-history-modal.data-v-8504eca3 {
+	width: 640rpx;
+	max-height: 70vh;
+	background: #fff;
+	border-radius: 24rpx;
+	overflow: hidden;
+	display: flex;
+	flex-direction: column;
+}
+.modal-head.data-v-8504eca3 {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	padding: 30rpx 36rpx;
+	border-bottom: 1rpx solid #f0f0f0;
+	flex-shrink: 0;
+}
+.modal-title.data-v-8504eca3 {
+	font-size: 32rpx;
+	font-weight: bold;
+	color: #1a1a1a;
+}
+.modal-close.data-v-8504eca3 {
+	font-size: 26rpx;
+	color: #999;
+	padding: 8rpx;
+}
+.modal-body.data-v-8504eca3 {
+	flex: 1;
+	padding: 20rpx 36rpx 36rpx;
+	max-height: 60vh;
+}
+.audit-item.data-v-8504eca3 {
+	display: flex;
+	padding: 24rpx 0;
+	border-left: 2rpx solid #eee;
+	margin-left: 12rpx;
+	position: relative;
+}
+.audit-item.data-v-8504eca3:last-child {
+	border-left-color: transparent;
+}
+.audit-dot.data-v-8504eca3 {
+	width: 16rpx;
+	height: 16rpx;
+	border-radius: 50%;
+	position: absolute;
+	left: -9rpx;
+	top: 28rpx;
+}
+.audit-dot.pass.data-v-8504eca3 {
+	background: #52c41a;
+}
+.audit-dot.reject.data-v-8504eca3 {
+	background: #ff4d4f;
+}
+.audit-content.data-v-8504eca3 {
+	margin-left: 30rpx;
+	flex: 1;
+}
+.audit-row.data-v-8504eca3 {
+	display: flex;
+	align-items: center;
+	gap: 16rpx;
+	margin-bottom: 8rpx;
+}
+.audit-result.data-v-8504eca3 {
+	font-size: 26rpx;
+	font-weight: bold;
+}
+.audit-result.pass.data-v-8504eca3 {
+	color: #52c41a;
+}
+.audit-result.reject.data-v-8504eca3 {
+	color: #ff4d4f;
+}
+.audit-auditor.data-v-8504eca3 {
+	font-size: 24rpx;
+	color: #666;
+}
+.audit-reason.data-v-8504eca3 {
+	display: block;
+	font-size: 24rpx;
+	color: #ff4d4f;
+	background: #fff1f0;
+	padding: 12rpx 16rpx;
+	border-radius: 8rpx;
+	margin-bottom: 8rpx;
+	line-height: 1.5;
+}
+.audit-time.data-v-8504eca3 {
+	display: block;
+	font-size: 22rpx;
+	color: #bbb;
+	margin-top: 4rpx;
+}
+.audit-empty.data-v-8504eca3 {
+	text-align: center;
+	padding: 60rpx 0;
+	color: #bbb;
+	font-size: 28rpx;
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/utils/assets.js

@@ -6,6 +6,7 @@ const assets = {
   wechat: "/static/wechat.png",
   // 状态图标
   order_all: "📋",
+  order_cancelled: "🚫",
   order_pending: "📝",
   order_approving: "🖋️",
   order_producing: "⚙️",

+ 13 - 3
unpackage/dist/dev/mp-weixin/utils/request.js

@@ -17,7 +17,7 @@ function redirectToLogin() {
   }, 1500);
 }
 function request(options = {}) {
-  const { url, method = "GET", data = {}, header = {} } = options;
+  const { url, method = "GET", data = {}, params = {}, header = {} } = options;
   const token = getToken();
   const headers = {
     "Content-Type": "application/json",
@@ -25,11 +25,21 @@ function request(options = {}) {
     "Authorization": "Bearer " + token,
     ...header
   };
+  let requestData = data;
+  let requestUrl = BASE_URL + url;
+  if (method.toUpperCase() === "GET") {
+    const allParams = { ...params, ...data };
+    const paramString = Object.keys(allParams).filter((key) => allParams[key] !== void 0 && allParams[key] !== null && allParams[key] !== "").map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(allParams[key])}`).join("&");
+    if (paramString) {
+      requestUrl += (requestUrl.includes("?") ? "&" : "?") + paramString;
+    }
+    requestData = {};
+  }
   return new Promise((resolve, reject) => {
     common_vendor.index.request({
-      url: BASE_URL + url,
+      url: requestUrl,
       method,
-      data,
+      data: requestData,
       header: headers,
       success(res) {
         const { code, msg, data: data2, total, rows } = res.data;

+ 1 - 0
utils/assets.js

@@ -10,6 +10,7 @@ export default {
 	
 	// 状态图标
 	order_all: '📋',
+	order_cancelled: '🚫',
 	order_pending: '📝',
 	order_approving: '🖋️',
 	order_producing: '⚙️',

+ 18 - 3
utils/request.js

@@ -19,7 +19,7 @@ function redirectToLogin() {
 }
 
 function request(options = {}) {
-	const { url, method = 'GET', data = {}, header = {} } = options;
+	const { url, method = 'GET', data = {}, params = {}, header = {} } = options;
 
 	const token = getToken();
 	const headers = {
@@ -29,11 +29,26 @@ function request(options = {}) {
 		...header
 	};
 
+	let requestData = data;
+	let requestUrl = BASE_URL + url;
+
+	if (method.toUpperCase() === 'GET') {
+		const allParams = { ...params, ...data };
+		const paramString = Object.keys(allParams)
+			.filter(key => allParams[key] !== undefined && allParams[key] !== null && allParams[key] !== '')
+			.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(allParams[key])}`)
+			.join('&');
+		if (paramString) {
+			requestUrl += (requestUrl.includes('?') ? '&' : '?') + paramString;
+		}
+		requestData = {};
+	}
+
 	return new Promise((resolve, reject) => {
 		uni.request({
-			url: BASE_URL + url,
+			url: requestUrl,
 			method,
-			data,
+			data: requestData,
 			header: headers,
 			success(res) {
 				const { code, msg, data, total, rows } = res.data;

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini