Kaynağa Gözat

登录功能完成;订单下单已完成

Huanyi 2 hafta önce
ebeveyn
işleme
b6f78198b2
34 değiştirilmiş dosya ile 735 ekleme ve 196 silme
  1. 25 0
      api/erp/colorKind.js
  2. 25 0
      api/erp/model.js
  3. 25 0
      api/erp/order.js
  4. 25 0
      api/erp/orderDetail.js
  5. 25 0
      api/erp/pack.js
  6. 3 3
      pages/mine/settings/index.vue
  7. 102 18
      pages/order/add-model/index.vue
  8. 106 34
      pages/order/index.vue
  9. 44 6
      pages/order/list/index.vue
  10. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/colorKind.js.map
  11. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/model.js.map
  12. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/order.js.map
  13. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/orderDetail.js.map
  14. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/api/erp/pack.js.map
  15. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/index.js.map
  16. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/settings/index.js.map
  17. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/add-model/index.js.map
  18. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/index.js.map
  19. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/list/index.js.map
  20. 11 0
      unpackage/dist/dev/mp-weixin/api/erp/colorKind.js
  21. 11 0
      unpackage/dist/dev/mp-weixin/api/erp/model.js
  22. 19 0
      unpackage/dist/dev/mp-weixin/api/erp/order.js
  23. 19 0
      unpackage/dist/dev/mp-weixin/api/erp/orderDetail.js
  24. 11 0
      unpackage/dist/dev/mp-weixin/api/erp/pack.js
  25. 0 35
      unpackage/dist/dev/mp-weixin/api/system/resource/oss.js
  26. 1 1
      unpackage/dist/dev/mp-weixin/common/vendor.js
  27. 1 1
      unpackage/dist/dev/mp-weixin/pages/mine/index.js
  28. 6 4
      unpackage/dist/dev/mp-weixin/pages/mine/settings/index.js
  29. 117 46
      unpackage/dist/dev/mp-weixin/pages/order/add-model/index.js
  30. 0 0
      unpackage/dist/dev/mp-weixin/pages/order/add-model/index.wxml
  31. 61 39
      unpackage/dist/dev/mp-weixin/pages/order/index.js
  32. 0 0
      unpackage/dist/dev/mp-weixin/pages/order/index.wxml
  33. 43 4
      unpackage/dist/dev/mp-weixin/pages/order/index.wxss
  34. 50 5
      unpackage/dist/dev/mp-weixin/pages/order/list/index.js

+ 25 - 0
api/erp/colorKind.js

@@ -0,0 +1,25 @@
+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',
+    method: 'GET',
+    params: query
+  });
+}

+ 25 - 0
api/erp/model.js

@@ -0,0 +1,25 @@
+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',
+    method: 'GET',
+    params: query
+  });
+}

+ 25 - 0
api/erp/order.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+/**
+ * 查询订单列表
+ * @Author: Antigravity
+ */
+export function listOrder(query) {
+  return request({
+    url: '/erp/order/list',
+    method: 'get',
+    params: query
+  })
+}
+
+/**
+ * 提交订单
+ * @Author: Antigravity
+ */
+export function addOrder(data) {
+  return request({
+    url: '/erp/order/add',
+    method: 'post',
+    data: data
+  })
+}

+ 25 - 0
api/erp/orderDetail.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+/**
+ * 查询订单详情列表
+ * @Author: Antigravity
+ */
+export function listOrderDetail(query) {
+  return request({
+    url: '/erp/orderDetail/list',
+    method: 'get',
+    params: query
+  })
+}
+
+/**
+ * 添加订单详情
+ * @Author: Antigravity
+ */
+export function addOrderDetail(data) {
+  return request({
+    url: '/erp/orderDetail/add',
+    method: 'post',
+    data: data
+  })
+}

+ 25 - 0
api/erp/pack.js

@@ -0,0 +1,25 @@
+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',
+    method: 'GET',
+    params: query
+  });
+}

+ 3 - 3
pages/mine/settings/index.vue

@@ -37,7 +37,7 @@
 			<view class="item-row no-tap">
 				<text class="item-label">授权客户</text>
 				<view class="item-right">
-					<text class="item-value readonly">{{ myInfo.authClientName || myInfo.authClientFNum || '无' }}</text>
+					<text class="item-value readonly">{{ myInfo.authClientName || myInfo.authClientFRowID || '无' }}</text>
 				</view>
 			</view>
 		</view>
@@ -63,7 +63,7 @@ export default {
 				userName: '',
 				phone: '',
 				avatar: null,
-				authClientFNum: '',
+				authClientFRowID: '',
 				authClientName: ''
 			}
 		}
@@ -83,7 +83,7 @@ export default {
 					userName: d.userName || '',
 					phone: d.phone || '',
 					avatar: d.avatar || null,
-					authClientFNum: d.authClientFNum || '',
+					authClientFRowID: d.authClientFRowID || '',
 					authClientName: d.authClientName || ''
 				};
 				this.pendingAvatarOssId = null;

+ 102 - 18
pages/order/add-model/index.vue

@@ -108,7 +108,7 @@
 					<view class="form-item no-margin-bottom">
 						<text class="label required">支数</text>
 						<input class="input-box full-width" type="number" v-model="formData.count"
-							placeholder="请输入支付支数" />
+							placeholder="请输入支数" />
 					</view>
 				</view>
 
@@ -131,7 +131,7 @@
 				<scroll-view scroll-y class="item-list">
 					<view class="option-item" v-for="(item, index) in typeList" :key="index"
 						:class="{ active: tempSelectedIndex === index }" @click="selectTypeItem(index)">
-						<text>{{ item }}</text>
+						<text>{{ item.fnum }} - {{ item.fname }}</text>
 						<icon type="success_no_circle" size="16" color="#C1001C" v-if="tempSelectedIndex === index">
 						</icon>
 					</view>
@@ -150,7 +150,7 @@
 				<scroll-view scroll-y class="item-list">
 					<view class="option-item" v-for="(item, index) in surfaceList" :key="index"
 						:class="{ active: tempSurfaceIndex === index }" @click="selectSurfaceItem(index)">
-						<text>{{ item }}</text>
+						<text>{{ item.fnum }} - {{ item.fname }}</text>
 						<icon type="success_no_circle" size="16" color="#C1001C" v-if="tempSurfaceIndex === index">
 						</icon>
 					</view>
@@ -169,7 +169,7 @@
 				<scroll-view scroll-y class="item-list">
 					<view class="option-item" v-for="(item, index) in packageList" :key="index"
 						:class="{ active: tempPackageIndex === index }" @click="selectPackageItem(index)">
-						<text>{{ item }}</text>
+						<text>{{ item.fnum }} - {{ item.fname }}</text>
 						<icon type="success_no_circle" size="16" color="#C1001C" v-if="tempPackageIndex === index">
 						</icon>
 					</view>
@@ -182,36 +182,93 @@
 
 <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 { addOrderDetail } from '@/api/erp/orderDetail.js';
 export default {
 	components: { ErpNavBar },
 	data() {
 		return {
 			showTypePicker: false, showSurfacePicker: false, showPackagePicker: false,
 			tempSelectedIndex: -1, tempSurfaceIndex: -1, tempPackageIndex: -1,
-			typeList: ['TY0018', 'TY0019', 'TY0020', 'TY0021', 'TY0022', 'TY0023', 'TY0024', 'TY0025', 'TY0026', 'TY0027', 'TY0028'],
-			surfaceList: ['PL坯料', '阳极氧化', '电泳涂漆', '粉末喷涂', '氟碳喷涂', '木纹转印'],
-			packageList: ['不贴膜+3点捆扎', '贴膜+纸箱', '气泡膜包装', '简易编织袋', '木托架包装'],
+			typeList: [],
+			surfaceList: [],
+			packageList: [],
 			formData: {
-				type: '', name: '', material: '',
-				surfaceName: '', packageMethod: '', length: '',
+				type: '', modelId: '', name: '', material: '',
+				surfaceName: '', surfaceId: '', packageMethod: '', packageId: '', length: '',
 				wallThickness: '', count: ''
 			}
 		}
 	},
+	async onLoad() {
+		await Promise.all([
+			this.loadModels(),
+			this.loadSurfaceKinds(),
+			this.loadPackageMethods()
+		]);
+	},
 	methods: {
-		openTypePicker() { if (this.formData.type) this.tempSelectedIndex = this.typeList.indexOf(this.formData.type); this.showTypePicker = true; },
+		async loadModels() {
+			try {
+				const res = await listAllModel();
+				this.typeList = res.data || [];
+			} catch (e) {
+				uni.showToast({ title: '加载型号失败', icon: 'none' });
+			}
+		},
+		async loadPackageMethods() {
+			try {
+				const res = await listAllPack();
+				this.packageList = res.data || [];
+			} catch (e) {
+				uni.showToast({ title: '加载包装方式失败', icon: 'none' });
+			}
+		},
+		async loadSurfaceKinds() {
+			try {
+				const res = await listAllColorKind();
+				this.surfaceList = (res.data || []).filter(item => item.fname !== '所有类别');
+			} catch (e) {
+				uni.showToast({ title: '加载表面处理失败', icon: 'none' });
+			}
+		},
+		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 val = this.typeList[this.tempSelectedIndex]; this.formData.type = val; this.formData.name = '工业铝材'; this.formData.material = (this.tempSelectedIndex % 2 === 0) ? '6063-T5' : '6061-T6'; this.closeTypePicker(); },
-		openSurfacePicker() { if (this.formData.surfaceName) this.tempSurfaceIndex = this.surfaceList.indexOf(this.formData.surfaceName); this.showSurfacePicker = true; },
+		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.material = '6063-T5';
+			this.closeTypePicker();
+		},
+		openSurfacePicker() { if (this.formData.surfaceName) this.tempSurfaceIndex = this.surfaceList.findIndex(item => item.fname === this.formData.surfaceName); this.showSurfacePicker = true; },
 		closeSurfacePicker() { this.showSurfacePicker = false; },
 		selectSurfaceItem(index) { this.tempSurfaceIndex = index; },
-		confirmSurfaceSelect() { if (this.tempSurfaceIndex === -1) return; this.formData.surfaceName = this.surfaceList[this.tempSurfaceIndex]; this.closeSurfacePicker(); },
-		openPackagePicker() { if (this.formData.packageMethod) this.tempPackageIndex = this.packageList.indexOf(this.formData.packageMethod); this.showPackagePicker = true; },
+		confirmSurfaceSelect() {
+			if (this.tempSurfaceIndex === -1) return;
+			const item = this.surfaceList[this.tempSurfaceIndex];
+			this.formData.surfaceName = item.fname;
+			this.formData.surfaceId = item.frowId;
+			this.closeSurfacePicker();
+		},
+		openPackagePicker() { if (this.formData.packageMethod) this.tempPackageIndex = this.packageList.findIndex(item => item.fname === this.formData.packageMethod); this.showPackagePicker = true; },
 		closePackagePicker() { this.showPackagePicker = false; },
 		selectPackageItem(index) { this.tempPackageIndex = index; },
-		confirmPackageSelect() { if (this.tempPackageIndex === -1) return; this.formData.packageMethod = this.packageList[this.tempPackageIndex]; this.closePackagePicker(); },
-		confirmAddModel() {
+		confirmPackageSelect() {
+			if (this.tempPackageIndex === -1) return;
+			const item = this.packageList[this.tempPackageIndex];
+			this.formData.packageMethod = item.fname;
+			this.formData.packageId = item.frowId;
+			this.closePackagePicker();
+		},
+		async confirmAddModel() {
 			const fields = [
 				{ key: 'type', label: '型号' },
 				{ key: 'surfaceName', label: '表面名称' },
@@ -226,8 +283,35 @@ export default {
 					return;
 				}
 			}
-			uni.$emit('add_order_item', JSON.parse(JSON.stringify(this.formData)));
-			uni.navigateBack();
+			// 数据处理:保留四位小数
+			const finalData = {
+				fOrderId: null,
+				modelId: this.formData.modelId,
+				modelNum: this.formData.type,
+				modelName: this.formData.name,
+				material: this.formData.material,
+				surfaceId: this.formData.surfaceId,
+				surfaceName: this.formData.surfaceName,
+				packId: this.formData.packageId,
+				packName: this.formData.packageMethod,
+				length: parseFloat(this.formData.length || 0).toFixed(4),
+				wallThickness: parseFloat(this.formData.wallThickness || 0).toFixed(4),
+				count: parseInt(this.formData.count || 0)
+			};
+
+			uni.showLoading({ title: '正在保存...' });
+			try {
+				await addOrderDetail(finalData);
+				uni.hideLoading();
+				uni.showToast({ title: '添加成功', icon: 'success' });
+				uni.$emit('add_order_item', finalData);
+				setTimeout(() => {
+					uni.navigateBack();
+				}, 1000);
+			} catch (e) {
+				uni.hideLoading();
+				// 错误已由 request.js 拦截提示,若未拦截可在此处处理提示
+			}
 		}
 	}
 }

+ 106 - 34
pages/order/index.vue

@@ -13,7 +13,7 @@
 		</view>
 
 		<!-- 2. 已登录但未分配授权客户 -->
-		<view class="auth-waiting-full" v-else-if="authorizedClients.length === 0">
+		<view class="auth-waiting-full" v-else-if="!myInfo.authClientFRowID">
 			<view class="auth-card">
 				<image class="auth-icon" src="https://img.icons8.com/color/192/hourglass-sand-top.png" mode="aspectFit">
 				</image>
@@ -25,7 +25,19 @@
 
 		<!-- 3. 已登录且已分配授权客户:显示下单页面 -->
 		<template v-else>
-			<scroll-view scroll-y class="order-scroll-list" :show-scrollbar="false" :enhanced="true">
+			<!-- 全屏加载过渡 -->
+			<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>
 				<view class="list-wrapper">
 					<!-- 列表头部:仅在有数据时显示 -->
 					<view class="list-header" v-if="selectedModels.length > 0">
@@ -39,7 +51,9 @@
 							<text class="x-icon">×</text>
 						</view>
 						<view class="card-line">
-							<text class="model-value">{{ item.type }}</text>
+							<view class="model-info">
+								<text class="model-value">{{ item.modelNum }}</text>
+							</view>
 							<view class="count-tag">
 								支数<text class="count-num">{{ item.count }}</text>
 							</view>
@@ -94,12 +108,15 @@
 import ErpTabBar from '@/components/erp-tab-bar.vue';
 import ErpNavBar from '@/components/erp-nav-bar.vue';
 import { getMyInfo } from '@/api/system/customer.js';
+import { listOrderDetail } from '@/api/erp/orderDetail.js';
+import { addOrder } from '@/api/erp/order.js';
 export default {
 	components: { ErpNavBar, ErpTabBar },
 	data() {
 		return {
 			isLoggedIn: false,
-			authorizedClients: [],
+			isLoading: true, // 初始为加载中
+			myInfo: {},
 			selectedModels: []
 		}
 	},
@@ -109,17 +126,13 @@ export default {
 		}
 	},
 	onLoad() {
-		// 监听添加型号的事件
+		// 监听添加型号的事件 - 重新从后端加载
 		uni.$on('add_order_item', (data) => {
-			this.selectedModels.push(data);
-			uni.showToast({ title: '添加成功', icon: 'success' });
+			this.loadOrderItems(false); // 添加时静默加载,不显示全屏动画
 		});
-		// 监听修改型号的事件
+		// 监听修改型号的事件 - 重新从后端加载
 		uni.$on('update_order_item', (res) => {
-			if (res.index > -1) {
-				this.$set(this.selectedModels, res.index, res.data);
-				uni.showToast({ title: '修改成功', icon: 'success' });
-			}
+			this.loadOrderItems(false);
 		});
 	},
 	onShow() {
@@ -130,28 +143,41 @@ export default {
 		uni.$off('update_order_item');
 	},
 	methods: {
+		/**
+		 * 加载已选型号列表(OrderID 为空的草稿)
+		 * @Author: Antigravity
+		 */
+		async loadOrderItems(showFullLoading = true) {
+			if (showFullLoading) this.isLoading = true;
+			try {
+				const res = await listOrderDetail({ fOrderId: '' });
+				this.selectedModels = res.data || [];
+			} catch (e) {
+				console.error('加载型号列表失败', e);
+			} finally {
+				this.isLoading = false;
+			}
+		},
 		async checkLoginStatus() {
 			const token = uni.getStorageSync('token');
 			if (!token) {
 				this.isLoggedIn = false;
-				this.authorizedClients = [];
+				this.myInfo = {};
 				return;
 			}
 			try {
-				await getMyInfo();
+				const res = await getMyInfo();
 				this.isLoggedIn = true;
-				this.loadAuthorizedClients();
+				this.myInfo = res.data || {};
+				// 登录成功后加载列表
+				this.loadOrderItems();
 			} catch (e) {
 				uni.removeStorageSync('token');
 				uni.removeStorageSync('isLogin');
 				this.isLoggedIn = false;
-				this.authorizedClients = [];
+				this.myInfo = {};
 			}
 		},
-		loadAuthorizedClients() {
-			const clients = uni.getStorageSync('authorizedClients');
-			this.authorizedClients = clients || [];
-		},
 		goToLogin() {
 			uni.reLaunch({ url: '/pages/login/index' });
 		},
@@ -178,18 +204,24 @@ export default {
 				}
 			});
 		},
-		submitFinalOrder() {
+		async submitFinalOrder() {
 			if (this.selectedModels.length === 0) return;
 
-			uni.showLoading({ title: '正在提交结果', mask: true });
-			setTimeout(() => {
+			uni.showLoading({ title: '正在提交订单', mask: true });
+			try {
+				const detailIds = this.selectedModels.map(item => item.frowId);
+				await addOrder({ detailIds });
 				uni.hideLoading();
-				uni.navigateTo({
-					url: '/pages/order/success/index'
-				});
-				// 注意:此处不再手动清空 selectedModels,防止跳转前页面出现“暂无数据”的闪现
-				// 并在 success 页面点击“再来一单”时通过 reLaunch 自动重置页面状态
-			}, 1500);
+				uni.showToast({ title: '下单成功', icon: 'success' });
+				setTimeout(() => {
+					uni.navigateTo({
+						url: '/pages/order/success/index'
+					});
+				}, 1500);
+			} catch (e) {
+				uni.hideLoading();
+				// request.js 会统一处理并提示异常信息
+			}
 		}
 	}
 }
@@ -367,11 +399,6 @@ export default {
 	border-top: 1rpx dashed #f0f0f0;
 }
 
-.model-label {
-	font-size: 26rpx;
-	color: #999;
-}
-
 .model-value {
 	font-size: 34rpx;
 	font-weight: bold;
@@ -590,4 +617,49 @@ export default {
 .bottom-safe-space {
 	height: 100rpx;
 }
+
+/* 加载动画样式 */
+.loading-state-full {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	padding-bottom: 200rpx;
+}
+
+.loading-anim-box {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+}
+
+.dot-spinner {
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	margin-bottom: 30rpx;
+}
+
+.dot {
+	width: 16rpx;
+	height: 16rpx;
+	background-color: #C1001C;
+	border-radius: 50%;
+	margin: 0 8rpx;
+	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; }
+
+@keyframes dot-pulse {
+	0%, 80%, 100% { transform: scale(0); opacity: 0.3; }
+	40% { transform: scale(1); opacity: 1; }
+}
+
+.loading-text {
+	font-size: 26rpx;
+	color: #999;
+	letter-spacing: 2rpx;
+}
 </style>

+ 44 - 6
pages/order/list/index.vue

@@ -85,6 +85,7 @@
 <script>
 import ErpTabBar from '@/components/erp-tab-bar.vue';
 import ErpNavBar from '@/components/erp-nav-bar.vue';
+import { listOrder } from '@/api/erp/order.js';
 export default {
 	components: { ErpTabBar, ErpNavBar },
 	data() {
@@ -156,14 +157,51 @@ export default {
 		switchTab(i) { this.currentTab = i; this.refresh(); },
 		refresh() { this.displayList = []; this.noMore = false; this.loadData(); },
 		onReachEnd() { if (!this.loading && !this.noMore) this.loadData(); },
-		loadData() {
+		async loadData() {
+			if (this.loading || this.noMore) return;
 			this.loading = true;
-			setTimeout(() => {
-				let raw = this.currentTab === 0 ? this.allOrders : this.allOrders.filter(o => o.status === this.currentTab);
-				this.displayList = [...this.displayList, ...raw];
-				this.noMore = true; // 模拟一次性加载完演示数据
+			try {
+				const params = {};
+				// 状态映射:0全部,1待审核(后台0),2待签批(后台1) ... 仅做简单对应,视后端枚举而定
+				if (this.currentTab > 0) {
+					params.fStatus = this.currentTab - 1;
+				}
+				const res = await listOrder(params);
+				const rows = res.data || [];
+				
+				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'; }
+
+					return {
+						orderNo: item.fCode,
+						fRowId: item.fRowId,
+						status: item.fStatus,
+						statusName: sName,
+						statusType: sType,
+						time: item.createTime,
+						totalCount: item.totalCount || 0,
+						models: (item.details || []).map(d => ({
+							type: d.modelNum || '未知型号',
+							length: Number(d.length || 0).toFixed(4),
+							surface: d.surfaceName || '无',
+							count: d.count || 0
+						}))
+					};
+				});
+
+				this.displayList = [...this.displayList, ...formattedRows];
+				this.noMore = true; // 此处暂且假设一页加载完所有,如果需要分页请加上 pageNum 和 total 判断
+			} catch (e) {
+				console.error('加载订单列表失败', e);
+			} finally {
 				this.loading = false;
-			}, 500);
+			}
 		},
 		onCancel(item) {
 			uni.showModal({

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

@@ -0,0 +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;;"}

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

@@ -0,0 +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;;"}

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

@@ -0,0 +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;;;"}

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

@@ -0,0 +1 @@
+{"version":3,"file":"orderDetail.js","sources":["api/erp/orderDetail.js"],"sourcesContent":["import request from '@/utils/request'\n\n/**\n * 查询订单详情列表\n * @Author: Antigravity\n */\nexport function listOrderDetail(query) {\n  return request({\n    url: '/erp/orderDetail/list',\n    method: 'get',\n    params: query\n  })\n}\n\n/**\n * 添加订单详情\n * @Author: Antigravity\n */\nexport function addOrderDetail(data) {\n  return request({\n    url: '/erp/orderDetail/add',\n    method: 'post',\n    data: data\n  })\n}\n"],"names":["request"],"mappings":";;AAMO,SAAS,gBAAgB,OAAO;AACrC,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACZ,CAAG;AACH;AAMO,SAAS,eAAe,MAAM;AACnC,SAAOA,sBAAQ;AAAA,IACb,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACJ,CAAG;AACH;;;"}

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

@@ -0,0 +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;;"}

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/index.js.map


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/mine/settings/index.js.map


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/add-model/index.js.map


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/index.js.map


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/list/index.js.map


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

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

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

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

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

@@ -0,0 +1,19 @@
+"use strict";
+const utils_request = require("../../utils/request.js");
+function listOrder(query) {
+  return utils_request.request({
+    url: "/erp/order/list",
+    method: "get",
+    params: query
+  });
+}
+function addOrder(data) {
+  return utils_request.request({
+    url: "/erp/order/add",
+    method: "post",
+    data
+  });
+}
+exports.addOrder = addOrder;
+exports.listOrder = listOrder;
+//# sourceMappingURL=../../../.sourcemap/mp-weixin/api/erp/order.js.map

+ 19 - 0
unpackage/dist/dev/mp-weixin/api/erp/orderDetail.js

@@ -0,0 +1,19 @@
+"use strict";
+const utils_request = require("../../utils/request.js");
+function listOrderDetail(query) {
+  return utils_request.request({
+    url: "/erp/orderDetail/list",
+    method: "get",
+    params: query
+  });
+}
+function addOrderDetail(data) {
+  return utils_request.request({
+    url: "/erp/orderDetail/add",
+    method: "post",
+    data
+  });
+}
+exports.addOrderDetail = addOrderDetail;
+exports.listOrderDetail = listOrderDetail;
+//# sourceMappingURL=../../../.sourcemap/mp-weixin/api/erp/orderDetail.js.map

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

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

+ 0 - 35
unpackage/dist/dev/mp-weixin/api/system/resource/oss.js

@@ -1,35 +0,0 @@
-"use strict";
-const common_vendor = require("../../../common/vendor.js");
-const BASE_URL = "http://127.0.0.1:8080";
-const CLIENT_ID = "e48ac397bff4f031b14d6e671eee49c3";
-function uploadFile(filePath) {
-  return new Promise((resolve, reject) => {
-    const token = common_vendor.index.getStorageSync("token") || "";
-    common_vendor.index.uploadFile({
-      url: BASE_URL + "/resource/oss/upload",
-      filePath,
-      name: "file",
-      header: {
-        clientid: CLIENT_ID,
-        ...token ? { Authorization: "Bearer " + token } : {}
-      },
-      success(res) {
-        try {
-          const result = JSON.parse(res.data);
-          if (result.code === 200) {
-            resolve(result.data);
-          } else {
-            reject(new Error(result.msg || "上传失败"));
-          }
-        } catch (e) {
-          reject(new Error("响应解析失败"));
-        }
-      },
-      fail(err) {
-        reject(new Error(err.errMsg || "上传失败"));
-      }
-    });
-  });
-}
-exports.uploadFile = uploadFile;
-//# sourceMappingURL=../../../../.sourcemap/mp-weixin/api/system/resource/oss.js.map

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

@@ -7086,7 +7086,7 @@ function isConsoleWritable() {
 function initRuntimeSocketService() {
   const hosts = "198.18.0.1,10.0.0.254,127.0.0.1,192.168.1.118";
   const port = "8090";
-  const id = "mp-weixin_Z_rbjH";
+  const id = "mp-weixin_LKBIrT";
   const lazy = typeof swan !== "undefined";
   let restoreError = lazy ? () => {
   } : initOnError();

+ 1 - 1
unpackage/dist/dev/mp-weixin/pages/mine/index.js

@@ -127,7 +127,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     d: common_vendor.t($data.customerInfo ? $data.customerInfo.userName : ""),
     e: $data.customerInfo
   }, $data.customerInfo ? {
-    f: common_vendor.t($data.customerInfo.authCustomerId || "无")
+    f: common_vendor.t($data.customerInfo.authClientName || "无")
   } : {}, {
     g: common_vendor.t($data.customerInfo ? $data.customerInfo.phone : ""),
     h: $data.assets.mineSettings,

+ 6 - 4
unpackage/dist/dev/mp-weixin/pages/mine/settings/index.js

@@ -14,7 +14,8 @@ const _sfc_main = {
         userName: "",
         phone: "",
         avatar: null,
-        authCustomerId: ""
+        authClientFRowID: "",
+        authClientName: ""
       }
     };
   },
@@ -33,7 +34,8 @@ const _sfc_main = {
           userName: d.userName || "",
           phone: d.phone || "",
           avatar: d.avatar || null,
-          authCustomerId: d.authCustomerId || ""
+          authClientFRowID: d.authClientFRowID || "",
+          authClientName: d.authClientName || ""
         };
         this.pendingAvatarOssId = null;
       } catch (e) {
@@ -127,8 +129,8 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     e: common_vendor.t($data.myInfo.userName),
     f: common_vendor.o((...args) => $options.doEditName && $options.doEditName(...args), "f1"),
     g: common_vendor.t($data.myInfo.phone),
-    h: common_vendor.t($data.myInfo.authCustomerId || "无"),
-    i: common_vendor.o((...args) => $options.saveProfile && $options.saveProfile(...args), "d6"),
+    h: common_vendor.t($data.myInfo.authClientName || $data.myInfo.authClientFRowID || "无"),
+    i: common_vendor.o((...args) => $options.saveProfile && $options.saveProfile(...args), "98"),
     j: $data.uploading
   });
 }

+ 117 - 46
unpackage/dist/dev/mp-weixin/pages/order/add-model/index.js

@@ -1,5 +1,9 @@
 "use strict";
 const common_vendor = require("../../../common/vendor.js");
+const api_erp_colorKind = require("../../../api/erp/colorKind.js");
+const api_erp_pack = require("../../../api/erp/pack.js");
+const api_erp_model = require("../../../api/erp/model.js");
+const api_erp_orderDetail = require("../../../api/erp/orderDetail.js");
 const ErpNavBar = () => "../../../components/erp-nav-bar.js";
 const _sfc_main = {
   components: { ErpNavBar },
@@ -11,25 +15,59 @@ const _sfc_main = {
       tempSelectedIndex: -1,
       tempSurfaceIndex: -1,
       tempPackageIndex: -1,
-      typeList: ["TY0018", "TY0019", "TY0020", "TY0021", "TY0022", "TY0023", "TY0024", "TY0025", "TY0026", "TY0027", "TY0028"],
-      surfaceList: ["PL坯料", "阳极氧化", "电泳涂漆", "粉末喷涂", "氟碳喷涂", "木纹转印"],
-      packageList: ["不贴膜+3点捆扎", "贴膜+纸箱", "气泡膜包装", "简易编织袋", "木托架包装"],
+      typeList: [],
+      surfaceList: [],
+      packageList: [],
       formData: {
         type: "",
+        modelId: "",
         name: "",
         material: "",
         surfaceName: "",
+        surfaceId: "",
         packageMethod: "",
+        packageId: "",
         length: "",
         wallThickness: "",
         count: ""
       }
     };
   },
+  async onLoad() {
+    await Promise.all([
+      this.loadModels(),
+      this.loadSurfaceKinds(),
+      this.loadPackageMethods()
+    ]);
+  },
   methods: {
+    async loadModels() {
+      try {
+        const res = await api_erp_model.listAllModel();
+        this.typeList = res.data || [];
+      } catch (e) {
+        common_vendor.index.showToast({ title: "加载型号失败", icon: "none" });
+      }
+    },
+    async loadPackageMethods() {
+      try {
+        const res = await api_erp_pack.listAllPack();
+        this.packageList = res.data || [];
+      } catch (e) {
+        common_vendor.index.showToast({ title: "加载包装方式失败", icon: "none" });
+      }
+    },
+    async loadSurfaceKinds() {
+      try {
+        const res = await api_erp_colorKind.listAllColorKind();
+        this.surfaceList = (res.data || []).filter((item) => item.fname !== "所有类别");
+      } catch (e) {
+        common_vendor.index.showToast({ title: "加载表面处理失败", icon: "none" });
+      }
+    },
     openTypePicker() {
       if (this.formData.type)
-        this.tempSelectedIndex = this.typeList.indexOf(this.formData.type);
+        this.tempSelectedIndex = this.typeList.findIndex((item) => item.fnum === this.formData.type);
       this.showTypePicker = true;
     },
     closeTypePicker() {
@@ -41,15 +79,17 @@ const _sfc_main = {
     confirmTypeSelect() {
       if (this.tempSelectedIndex === -1)
         return;
-      const val = this.typeList[this.tempSelectedIndex];
-      this.formData.type = val;
-      this.formData.name = "工业铝材";
-      this.formData.material = this.tempSelectedIndex % 2 === 0 ? "6063-T5" : "6061-T6";
+      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.material = "6063-T5";
       this.closeTypePicker();
     },
     openSurfacePicker() {
       if (this.formData.surfaceName)
-        this.tempSurfaceIndex = this.surfaceList.indexOf(this.formData.surfaceName);
+        this.tempSurfaceIndex = this.surfaceList.findIndex((item) => item.fname === this.formData.surfaceName);
       this.showSurfacePicker = true;
     },
     closeSurfacePicker() {
@@ -61,12 +101,14 @@ const _sfc_main = {
     confirmSurfaceSelect() {
       if (this.tempSurfaceIndex === -1)
         return;
-      this.formData.surfaceName = this.surfaceList[this.tempSurfaceIndex];
+      const item = this.surfaceList[this.tempSurfaceIndex];
+      this.formData.surfaceName = item.fname;
+      this.formData.surfaceId = item.frowId;
       this.closeSurfacePicker();
     },
     openPackagePicker() {
       if (this.formData.packageMethod)
-        this.tempPackageIndex = this.packageList.indexOf(this.formData.packageMethod);
+        this.tempPackageIndex = this.packageList.findIndex((item) => item.fname === this.formData.packageMethod);
       this.showPackagePicker = true;
     },
     closePackagePicker() {
@@ -78,10 +120,12 @@ const _sfc_main = {
     confirmPackageSelect() {
       if (this.tempPackageIndex === -1)
         return;
-      this.formData.packageMethod = this.packageList[this.tempPackageIndex];
+      const item = this.packageList[this.tempPackageIndex];
+      this.formData.packageMethod = item.fname;
+      this.formData.packageId = item.frowId;
       this.closePackagePicker();
     },
-    confirmAddModel() {
+    async confirmAddModel() {
       const fields = [
         { key: "type", label: "型号" },
         { key: "surfaceName", label: "表面名称" },
@@ -96,8 +140,32 @@ const _sfc_main = {
           return;
         }
       }
-      common_vendor.index.$emit("add_order_item", JSON.parse(JSON.stringify(this.formData)));
-      common_vendor.index.navigateBack();
+      const finalData = {
+        fOrderId: null,
+        modelId: this.formData.modelId,
+        modelNum: this.formData.type,
+        modelName: this.formData.name,
+        material: this.formData.material,
+        surfaceId: this.formData.surfaceId,
+        surfaceName: this.formData.surfaceName,
+        packId: this.formData.packageId,
+        packName: this.formData.packageMethod,
+        length: parseFloat(this.formData.length || 0).toFixed(4),
+        wallThickness: parseFloat(this.formData.wallThickness || 0).toFixed(4),
+        count: parseInt(this.formData.count || 0)
+      };
+      common_vendor.index.showLoading({ title: "正在保存..." });
+      try {
+        await api_erp_orderDetail.addOrderDetail(finalData);
+        common_vendor.index.hideLoading();
+        common_vendor.index.showToast({ title: "添加成功", icon: "success" });
+        common_vendor.index.$emit("add_order_item", finalData);
+        setTimeout(() => {
+          common_vendor.index.navigateBack();
+        }, 1e3);
+      } catch (e) {
+        common_vendor.index.hideLoading();
+      }
     }
   }
 };
@@ -130,66 +198,69 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     s: $data.formData.count,
     t: common_vendor.o(($event) => $data.formData.count = $event.detail.value, "47"),
     v: !$data.showTypePicker && !$data.showSurfacePicker && !$data.showPackagePicker,
-    w: common_vendor.o((...args) => $options.confirmAddModel && $options.confirmAddModel(...args), "d9"),
+    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), "0a"),
-    z: common_vendor.o((...args) => $options.confirmTypeSelect && $options.confirmTypeSelect(...args), "31"),
+    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) => {
       return common_vendor.e({
-        a: common_vendor.t(item),
-        b: $data.tempSelectedIndex === index
+        a: common_vendor.t(item.fnum),
+        b: common_vendor.t(item.fname),
+        c: $data.tempSelectedIndex === index
       }, $data.tempSelectedIndex === index ? {} : {}, {
-        c: index,
-        d: $data.tempSelectedIndex === index ? 1 : "",
-        e: common_vendor.o(($event) => $options.selectTypeItem(index), index)
+        d: index,
+        e: $data.tempSelectedIndex === index ? 1 : "",
+        f: common_vendor.o(($event) => $options.selectTypeItem(index), index)
       });
     }),
     B: common_vendor.o(() => {
-    }, "2f"),
-    C: common_vendor.o((...args) => $options.closeTypePicker && $options.closeTypePicker(...args), "f0"),
+    }, "4c"),
+    C: common_vendor.o((...args) => $options.closeTypePicker && $options.closeTypePicker(...args), "a9"),
     D: common_vendor.o(() => {
-    }, "d9")
+    }, "62")
   } : {}, {
     E: $data.showSurfacePicker
   }, $data.showSurfacePicker ? {
-    F: common_vendor.o((...args) => $options.closeSurfacePicker && $options.closeSurfacePicker(...args), "14"),
-    G: common_vendor.o((...args) => $options.confirmSurfaceSelect && $options.confirmSurfaceSelect(...args), "eb"),
+    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) => {
       return common_vendor.e({
-        a: common_vendor.t(item),
-        b: $data.tempSurfaceIndex === index
+        a: common_vendor.t(item.fnum),
+        b: common_vendor.t(item.fname),
+        c: $data.tempSurfaceIndex === index
       }, $data.tempSurfaceIndex === index ? {} : {}, {
-        c: index,
-        d: $data.tempSurfaceIndex === index ? 1 : "",
-        e: common_vendor.o(($event) => $options.selectSurfaceItem(index), index)
+        d: index,
+        e: $data.tempSurfaceIndex === index ? 1 : "",
+        f: common_vendor.o(($event) => $options.selectSurfaceItem(index), index)
       });
     }),
     I: common_vendor.o(() => {
-    }, "bd"),
-    J: common_vendor.o((...args) => $options.closeSurfacePicker && $options.closeSurfacePicker(...args), "0b"),
+    }, "c7"),
+    J: common_vendor.o((...args) => $options.closeSurfacePicker && $options.closeSurfacePicker(...args), "12"),
     K: common_vendor.o(() => {
-    }, "ff")
+    }, "b7")
   } : {}, {
     L: $data.showPackagePicker
   }, $data.showPackagePicker ? {
-    M: common_vendor.o((...args) => $options.closePackagePicker && $options.closePackagePicker(...args), "a7"),
-    N: common_vendor.o((...args) => $options.confirmPackageSelect && $options.confirmPackageSelect(...args), "f7"),
+    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) => {
       return common_vendor.e({
-        a: common_vendor.t(item),
-        b: $data.tempPackageIndex === index
+        a: common_vendor.t(item.fnum),
+        b: common_vendor.t(item.fname),
+        c: $data.tempPackageIndex === index
       }, $data.tempPackageIndex === index ? {} : {}, {
-        c: index,
-        d: $data.tempPackageIndex === index ? 1 : "",
-        e: common_vendor.o(($event) => $options.selectPackageItem(index), index)
+        d: index,
+        e: $data.tempPackageIndex === index ? 1 : "",
+        f: common_vendor.o(($event) => $options.selectPackageItem(index), index)
       });
     }),
     P: common_vendor.o(() => {
-    }, "54"),
-    Q: common_vendor.o((...args) => $options.closePackagePicker && $options.closePackagePicker(...args), "7e"),
+    }, "ec"),
+    Q: common_vendor.o((...args) => $options.closePackagePicker && $options.closePackagePicker(...args), "11"),
     R: common_vendor.o(() => {
-    }, "97")
+    }, "a1")
   } : {});
 }
 const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-97855afd"]]);

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/order/add-model/index.wxml


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

@@ -1,6 +1,8 @@
 "use strict";
 const common_vendor = require("../../common/vendor.js");
 const api_system_customer = require("../../api/system/customer.js");
+const api_erp_orderDetail = require("../../api/erp/orderDetail.js");
+const api_erp_order = require("../../api/erp/order.js");
 const ErpTabBar = () => "../../components/erp-tab-bar.js";
 const ErpNavBar = () => "../../components/erp-nav-bar.js";
 const _sfc_main = {
@@ -8,7 +10,9 @@ const _sfc_main = {
   data() {
     return {
       isLoggedIn: false,
-      authorizedClients: [],
+      isLoading: true,
+      // 初始为加载中
+      myInfo: {},
       selectedModels: []
     };
   },
@@ -19,14 +23,10 @@ const _sfc_main = {
   },
   onLoad() {
     common_vendor.index.$on("add_order_item", (data) => {
-      this.selectedModels.push(data);
-      common_vendor.index.showToast({ title: "添加成功", icon: "success" });
+      this.loadOrderItems(false);
     });
     common_vendor.index.$on("update_order_item", (res) => {
-      if (res.index > -1) {
-        this.$set(this.selectedModels, res.index, res.data);
-        common_vendor.index.showToast({ title: "修改成功", icon: "success" });
-      }
+      this.loadOrderItems(false);
     });
   },
   onShow() {
@@ -37,28 +37,41 @@ const _sfc_main = {
     common_vendor.index.$off("update_order_item");
   },
   methods: {
+    /**
+     * 加载已选型号列表(OrderID 为空的草稿)
+     * @Author: Antigravity
+     */
+    async loadOrderItems(showFullLoading = true) {
+      if (showFullLoading)
+        this.isLoading = true;
+      try {
+        const res = await api_erp_orderDetail.listOrderDetail({ fOrderId: "" });
+        this.selectedModels = res.data || [];
+      } catch (e) {
+        common_vendor.index.__f__("error", "at pages/order/index.vue:156", "加载型号列表失败", e);
+      } finally {
+        this.isLoading = false;
+      }
+    },
     async checkLoginStatus() {
       const token = common_vendor.index.getStorageSync("token");
       if (!token) {
         this.isLoggedIn = false;
-        this.authorizedClients = [];
+        this.myInfo = {};
         return;
       }
       try {
-        await api_system_customer.getMyInfo();
+        const res = await api_system_customer.getMyInfo();
         this.isLoggedIn = true;
-        this.loadAuthorizedClients();
+        this.myInfo = res.data || {};
+        this.loadOrderItems();
       } catch (e) {
         common_vendor.index.removeStorageSync("token");
         common_vendor.index.removeStorageSync("isLogin");
         this.isLoggedIn = false;
-        this.authorizedClients = [];
+        this.myInfo = {};
       }
     },
-    loadAuthorizedClients() {
-      const clients = common_vendor.index.getStorageSync("authorizedClients");
-      this.authorizedClients = clients || [];
-    },
     goToLogin() {
       common_vendor.index.reLaunch({ url: "/pages/login/index" });
     },
@@ -87,16 +100,23 @@ const _sfc_main = {
         }
       });
     },
-    submitFinalOrder() {
+    async submitFinalOrder() {
       if (this.selectedModels.length === 0)
         return;
-      common_vendor.index.showLoading({ title: "正在提交结果", mask: true });
-      setTimeout(() => {
+      common_vendor.index.showLoading({ title: "正在提交订单", mask: true });
+      try {
+        const detailIds = this.selectedModels.map((item) => item.frowId);
+        await api_erp_order.addOrder({ detailIds });
+        common_vendor.index.hideLoading();
+        common_vendor.index.showToast({ title: "下单成功", icon: "success" });
+        setTimeout(() => {
+          common_vendor.index.navigateTo({
+            url: "/pages/order/success/index"
+          });
+        }, 1500);
+      } catch (e) {
         common_vendor.index.hideLoading();
-        common_vendor.index.navigateTo({
-          url: "/pages/order/success/index"
-        });
-      }, 1500);
+      }
     }
   }
 };
@@ -114,17 +134,19 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     b: !$data.isLoggedIn
   }, !$data.isLoggedIn ? {
     c: common_vendor.o((...args) => $options.goToLogin && $options.goToLogin(...args), "93")
-  } : $data.authorizedClients.length === 0 ? {
-    e: common_vendor.o((...args) => $options.contactAdmin && $options.contactAdmin(...args), "e2")
+  } : !$data.myInfo.authClientFRowID ? {
+    e: common_vendor.o((...args) => $options.contactAdmin && $options.contactAdmin(...args), "85")
   } : common_vendor.e({
-    f: $data.selectedModels.length > 0
-  }, $data.selectedModels.length > 0 ? {} : {}, {
+    f: $data.isLoading
+  }, $data.isLoading ? {} : common_vendor.e({
     g: $data.selectedModels.length > 0
+  }, $data.selectedModels.length > 0 ? {} : {}, {
+    h: $data.selectedModels.length > 0
   }, $data.selectedModels.length > 0 ? {
-    h: common_vendor.f($data.selectedModels, (item, index, i0) => {
+    i: common_vendor.f($data.selectedModels, (item, index, i0) => {
       return {
         a: common_vendor.o(($event) => $options.removeItem(index), index),
-        b: common_vendor.t(item.type),
+        b: common_vendor.t(item.modelNum),
         c: common_vendor.t(item.count),
         d: common_vendor.t(item.surfaceName),
         e: index,
@@ -132,21 +154,21 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
       };
     })
   } : {
-    i: common_vendor.o((...args) => $options.goToAddModel && $options.goToAddModel(...args), "7a")
-  }, {
-    j: $data.selectedModels.length > 0
+    j: common_vendor.o((...args) => $options.goToAddModel && $options.goToAddModel(...args), "17")
+  }), {
+    k: $data.selectedModels.length > 0
   }, $data.selectedModels.length > 0 ? {
-    k: common_vendor.o((...args) => $options.goToAddModel && $options.goToAddModel(...args), "6d")
+    l: common_vendor.o((...args) => $options.goToAddModel && $options.goToAddModel(...args), "4c")
   } : {}, {
-    l: $data.selectedModels.length > 0
+    m: $data.selectedModels.length > 0
   }, $data.selectedModels.length > 0 ? {
-    m: common_vendor.t($data.selectedModels.length),
-    n: common_vendor.t($options.totalCount),
-    o: $data.selectedModels.length === 0,
-    p: common_vendor.o((...args) => $options.submitFinalOrder && $options.submitFinalOrder(...args), "7e")
+    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")
   } : {}), {
-    d: $data.authorizedClients.length === 0,
-    q: common_vendor.p({
+    d: !$data.myInfo.authClientFRowID,
+    r: common_vendor.p({
       active: "order"
     })
   });

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/order/index.wxml


+ 43 - 4
unpackage/dist/dev/mp-weixin/pages/order/index.wxss

@@ -153,10 +153,6 @@
 	padding-top: 20rpx;
 	border-top: 1rpx dashed #f0f0f0;
 }
-.model-label.data-v-17a44f9d {
-	font-size: 26rpx;
-	color: #999;
-}
 .model-value.data-v-17a44f9d {
 	font-size: 34rpx;
 	font-weight: bold;
@@ -352,3 +348,46 @@
 .bottom-safe-space.data-v-17a44f9d {
 	height: 100rpx;
 }
+
+/* 加载动画样式 */
+.loading-state-full.data-v-17a44f9d {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	padding-bottom: 200rpx;
+}
+.loading-anim-box.data-v-17a44f9d {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+}
+.dot-spinner.data-v-17a44f9d {
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	margin-bottom: 30rpx;
+}
+.dot.data-v-17a44f9d {
+	width: 16rpx;
+	height: 16rpx;
+	background-color: #C1001C;
+	border-radius: 50%;
+	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(2) { animation-delay: -0.16s;
+}
+@keyframes dot-pulse-17a44f9d {
+0%, 80%, 100% { transform: scale(0); opacity: 0.3;
+}
+40% { transform: scale(1); opacity: 1;
+}
+}
+.loading-text.data-v-17a44f9d {
+	font-size: 26rpx;
+	color: #999;
+	letter-spacing: 2rpx;
+}

+ 50 - 5
unpackage/dist/dev/mp-weixin/pages/order/list/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 ErpTabBar = () => "../../../components/erp-tab-bar.js";
 const ErpNavBar = () => "../../../components/erp-nav-bar.js";
 const _sfc_main = {
@@ -96,14 +97,58 @@ const _sfc_main = {
       if (!this.loading && !this.noMore)
         this.loadData();
     },
-    loadData() {
+    async loadData() {
+      if (this.loading || this.noMore)
+        return;
       this.loading = true;
-      setTimeout(() => {
-        let raw = this.currentTab === 0 ? this.allOrders : this.allOrders.filter((o) => o.status === this.currentTab);
-        this.displayList = [...this.displayList, ...raw];
+      try {
+        const params = {};
+        if (this.currentTab > 0) {
+          params.fStatus = this.currentTab - 1;
+        }
+        const res = await api_erp_order.listOrder(params);
+        const rows = res.data || [];
+        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";
+          }
+          return {
+            orderNo: item.fCode,
+            fRowId: item.fRowId,
+            status: item.fStatus,
+            statusName: sName,
+            statusType: sType,
+            time: item.createTime,
+            totalCount: item.totalCount || 0,
+            models: (item.details || []).map((d) => ({
+              type: d.modelNum || "未知型号",
+              length: Number(d.length || 0).toFixed(4),
+              surface: d.surfaceName || "无",
+              count: d.count || 0
+            }))
+          };
+        });
+        this.displayList = [...this.displayList, ...formattedRows];
         this.noMore = true;
+      } catch (e) {
+        common_vendor.index.__f__("error", "at pages/order/list/index.vue:201", "加载订单列表失败", e);
+      } finally {
         this.loading = false;
-      }, 500);
+      }
     },
     onCancel(item) {
       common_vendor.index.showModal({

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor