jiaxing.zhou

Merge remote-tracking branch 'origin/master'

...@@ -1080,6 +1080,47 @@ Authorization: Bearer <JWT_TOKEN> ...@@ -1080,6 +1080,47 @@ Authorization: Bearer <JWT_TOKEN>
1080 } 1080 }
1081 ``` 1081 ```
1082 1082
1083 +### 7.9 获取所有产品
1084 +
1085 +**接口路径:** `GET /api/product/all`
1086 +
1087 +**功能描述:** 获取所有启用的产品信息,用于下拉选择
1088 +
1089 +**权限要求:**
1090 +
1091 +**请求参数:**
1092 +
1093 +**响应示例:**
1094 +```json
1095 +{
1096 + "code": 200,
1097 + "message": "操作成功",
1098 + "data": [
1099 + {
1100 + "productId": 1,
1101 + "productCode": "APL-IP15-128G-BK",
1102 + "productName": "iPhone 15|A2848|iPhone|黑色"
1103 + },
1104 + {
1105 + "productId": 2,
1106 + "productCode": "APL-IP15-256G-BK",
1107 + "productName": "iPhone 15|A2848|iPhone|黑色"
1108 + },
1109 + {
1110 + "productId": 3,
1111 + "productCode": "APL-IP15-128G-WH",
1112 + "productName": "iPhone 15|A2848|iPhone|白色"
1113 + }
1114 + ]
1115 +}
1116 +```
1117 +
1118 +**响应字段说明:**
1119 +- 只返回未删除且销售状态为在售的产品
1120 +- 按产品编码升序排列
1121 +- 产品名称格式:`产品名称|产品型号|产品类别|产品颜色`
1122 +- 主要用于订单管理等模块的下拉选择
1123 +
1083 ## 8. 经销商管理 (DealerInfoController) 1124 ## 8. 经销商管理 (DealerInfoController)
1084 1125
1085 ### 8.1 分页查询经销商列表 1126 ### 8.1 分页查询经销商列表
...@@ -1411,6 +1452,81 @@ Authorization: Bearer <JWT_TOKEN> ...@@ -1411,6 +1452,81 @@ Authorization: Bearer <JWT_TOKEN>
1411 } 1452 }
1412 ``` 1453 ```
1413 1454
1455 +### 8.9 获取所有经销商
1456 +
1457 +**接口路径:** `GET /api/dealer/all`
1458 +
1459 +**功能描述:** 获取所有启用的经销商信息,用于下拉选择
1460 +
1461 +**权限要求:**
1462 +
1463 +**请求参数:**
1464 +
1465 +**响应示例:**
1466 +```json
1467 +{
1468 + "code": 200,
1469 + "message": "操作成功",
1470 + "data": [
1471 + {
1472 + "dealerId": 1,
1473 + "dealerCode": "DL001",
1474 + "dealerName": "北京经销商",
1475 + "creditCode": "91110000123456789X",
1476 + "dealerLevel": 1,
1477 + "region": "北京",
1478 + "contactPerson": "张三",
1479 + "contactPhone": "13800138000",
1480 + "cooperateStartDate": "2024-01-01",
1481 + "cooperateStatus": 1,
1482 + "businessLicenseUrl": "https://example.com/license.jpg",
1483 + "cooperationAgreementUrl": "https://example.com/agreement.pdf",
1484 + "qualificationAuditStatus": 2,
1485 + "auditOpinion": "审核通过",
1486 + "totalRebateAmount": 10000.00,
1487 + "usedRebateAmount": 5000.00,
1488 + "pendingRebateAmount": 5000.00,
1489 + "lastRebateUpdateTime": "2024-01-01 10:00:00",
1490 + "createBy": "admin",
1491 + "createTime": "2024-01-01 10:00:00",
1492 + "updateBy": "admin",
1493 + "updateTime": "2024-01-01 10:00:00",
1494 + "delFlag": "0"
1495 + },
1496 + {
1497 + "dealerId": 2,
1498 + "dealerCode": "DL002",
1499 + "dealerName": "上海经销商",
1500 + "creditCode": "91310000123456789Y",
1501 + "dealerLevel": 2,
1502 + "region": "上海",
1503 + "contactPerson": "李四",
1504 + "contactPhone": "13900139000",
1505 + "cooperateStartDate": "2024-02-01",
1506 + "cooperateStatus": 1,
1507 + "businessLicenseUrl": "https://example.com/license2.jpg",
1508 + "cooperationAgreementUrl": "https://example.com/agreement2.pdf",
1509 + "qualificationAuditStatus": 2,
1510 + "auditOpinion": "审核通过",
1511 + "totalRebateAmount": 15000.00,
1512 + "usedRebateAmount": 8000.00,
1513 + "pendingRebateAmount": 7000.00,
1514 + "lastRebateUpdateTime": "2024-02-01 10:00:00",
1515 + "createBy": "admin",
1516 + "createTime": "2024-02-01 10:00:00",
1517 + "updateBy": "admin",
1518 + "updateTime": "2024-02-01 10:00:00",
1519 + "delFlag": "0"
1520 + }
1521 + ]
1522 +}
1523 +```
1524 +
1525 +**响应字段说明:**
1526 +- 只返回未删除且合作状态为正常的经销商
1527 +- 按经销商编码升序排列
1528 +- 主要用于订单管理等模块的下拉选择
1529 +
1414 ## 数据字典 1530 ## 数据字典
1415 1531
1416 ### 销售状态(saleStatus) 1532 ### 销售状态(saleStatus)
......
...@@ -33,6 +33,13 @@ public class DealerInfoController { ...@@ -33,6 +33,13 @@ public class DealerInfoController {
33 return ApiRes.success(page); 33 return ApiRes.success(page);
34 } 34 }
35 35
36 + @Operation(summary = "获取所有经销商", description = "获取所有启用的经销商信息,用于下拉选择")
37 + @GetMapping("/all")
38 + public ApiRes<List<DealerInfo>> getAllDealers() {
39 + List<DealerInfo> dealers = dealerInfoService.getAllDealers();
40 + return ApiRes.success(dealers);
41 + }
42 +
36 @Operation(summary = "获取经销商详情", description = "根据经销商ID获取经销商详细信息") 43 @Operation(summary = "获取经销商详情", description = "根据经销商ID获取经销商详细信息")
37 @GetMapping("/{dealerId}") 44 @GetMapping("/{dealerId}")
38 @PreAuthorize("hasAuthority('dealer:detail')") 45 @PreAuthorize("hasAuthority('dealer:detail')")
......
...@@ -3,6 +3,7 @@ package com.apple.erp.controller; ...@@ -3,6 +3,7 @@ package com.apple.erp.controller;
3 import com.apple.erp.dto.ProductAddReq; 3 import com.apple.erp.dto.ProductAddReq;
4 import com.apple.erp.dto.ProductQueryReq; 4 import com.apple.erp.dto.ProductQueryReq;
5 import com.apple.erp.dto.ProductUpdateReq; 5 import com.apple.erp.dto.ProductUpdateReq;
6 +import com.apple.erp.dto.ProductSimpleRes;
6 import com.apple.erp.entity.ProductInfo; 7 import com.apple.erp.entity.ProductInfo;
7 import com.apple.erp.service.ProductInfoService; 8 import com.apple.erp.service.ProductInfoService;
8 import com.apple.erp.dto.response.ApiRes; 9 import com.apple.erp.dto.response.ApiRes;
...@@ -174,4 +175,15 @@ public class ProductInfoController { ...@@ -174,4 +175,15 @@ public class ProductInfoController {
174 return ApiRes.error("修改返利标识失败:" + e.getMessage()); 175 return ApiRes.error("修改返利标识失败:" + e.getMessage());
175 } 176 }
176 } 177 }
178 +
179 + @Operation(summary = "获取所有产品", description = "获取所有启用的产品信息,用于下拉选择")
180 + @GetMapping("/all")
181 + public ApiRes<List<ProductSimpleRes>> getAllProducts() {
182 + try {
183 + List<ProductSimpleRes> products = productInfoService.getAllProducts();
184 + return ApiRes.success(products);
185 + } catch (Exception e) {
186 + return ApiRes.error("获取产品列表失败:" + e.getMessage());
187 + }
188 + }
177 } 189 }
......
1 +package com.apple.erp.dto;
2 +
3 +import io.swagger.v3.oas.annotations.media.Schema;
4 +import lombok.Data;
5 +
6 +/**
7 + * 产品简单信息响应DTO
8 + * 用于下拉选择等场景
9 + *
10 + * @author Apple ERP Team
11 + * @since 2025-01-27
12 + */
13 +@Data
14 +@Schema(description = "产品简单信息")
15 +public class ProductSimpleRes {
16 +
17 + @Schema(description = "产品ID")
18 + private Long productId;
19 +
20 + @Schema(description = "产品编码")
21 + private String productCode;
22 +
23 + @Schema(description = "产品名称")
24 + private String productName;
25 +}
...@@ -69,4 +69,10 @@ public interface DealerInfoService extends IService<DealerInfo> { ...@@ -69,4 +69,10 @@ public interface DealerInfoService extends IService<DealerInfo> {
69 * @return 是否成功 69 * @return 是否成功
70 */ 70 */
71 boolean updateDealerAuditStatus(Long dealerId, Integer qualificationAuditStatus, String auditOpinion); 71 boolean updateDealerAuditStatus(Long dealerId, Integer qualificationAuditStatus, String auditOpinion);
72 +
73 + /**
74 + * 获取所有启用的经销商
75 + * @return 经销商列表
76 + */
77 + List<DealerInfo> getAllDealers();
72 } 78 }
......
...@@ -3,6 +3,7 @@ package com.apple.erp.service; ...@@ -3,6 +3,7 @@ package com.apple.erp.service;
3 import com.apple.erp.dto.ProductAddReq; 3 import com.apple.erp.dto.ProductAddReq;
4 import com.apple.erp.dto.ProductQueryReq; 4 import com.apple.erp.dto.ProductQueryReq;
5 import com.apple.erp.dto.ProductUpdateReq; 5 import com.apple.erp.dto.ProductUpdateReq;
6 +import com.apple.erp.dto.ProductSimpleRes;
6 import com.apple.erp.entity.ProductInfo; 7 import com.apple.erp.entity.ProductInfo;
7 import com.baomidou.mybatisplus.core.metadata.IPage; 8 import com.baomidou.mybatisplus.core.metadata.IPage;
8 import com.baomidou.mybatisplus.extension.service.IService; 9 import com.baomidou.mybatisplus.extension.service.IService;
...@@ -91,4 +92,11 @@ public interface ProductInfoService extends IService<ProductInfo> { ...@@ -91,4 +92,11 @@ public interface ProductInfoService extends IService<ProductInfo> {
91 * @return 是否存在 92 * @return 是否存在
92 */ 93 */
93 boolean checkProductCodeExists(String productCode, Long productId); 94 boolean checkProductCodeExists(String productCode, Long productId);
95 +
96 + /**
97 + * 获取所有启用的产品简单信息
98 + *
99 + * @return 产品简单信息列表
100 + */
101 + List<ProductSimpleRes> getAllProducts();
94 } 102 }
......
...@@ -234,4 +234,13 @@ public class DealerInfoServiceImpl extends ServiceImpl<DealerInfoMapper, DealerI ...@@ -234,4 +234,13 @@ public class DealerInfoServiceImpl extends ServiceImpl<DealerInfoMapper, DealerI
234 } 234 }
235 return count(queryWrapper) > 0; 235 return count(queryWrapper) > 0;
236 } 236 }
237 +
238 + @Override
239 + public List<DealerInfo> getAllDealers() {
240 + LambdaQueryWrapper<DealerInfo> queryWrapper = new LambdaQueryWrapper<>();
241 + queryWrapper.eq(DealerInfo::getDelFlag, "0") // 未删除
242 + .eq(DealerInfo::getCooperateStatus, 1) // 正常合作状态
243 + .orderByAsc(DealerInfo::getDealerCode); // 按经销商编码排序
244 + return list(queryWrapper);
245 + }
237 } 246 }
......
...@@ -25,7 +25,7 @@ import java.util.stream.Collectors; ...@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
25 25
26 /** 26 /**
27 * 出库主表Service实现类 27 * 出库主表Service实现类
28 - * 28 + *
29 * @author Apple ERP System 29 * @author Apple ERP System
30 * @since 2025-01-01 30 * @since 2025-01-01
31 */ 31 */
......
...@@ -3,6 +3,7 @@ package com.apple.erp.service.impl; ...@@ -3,6 +3,7 @@ package com.apple.erp.service.impl;
3 import com.apple.erp.dto.ProductAddReq; 3 import com.apple.erp.dto.ProductAddReq;
4 import com.apple.erp.dto.ProductQueryReq; 4 import com.apple.erp.dto.ProductQueryReq;
5 import com.apple.erp.dto.ProductUpdateReq; 5 import com.apple.erp.dto.ProductUpdateReq;
6 +import com.apple.erp.dto.ProductSimpleRes;
6 import com.apple.erp.entity.ProductInfo; 7 import com.apple.erp.entity.ProductInfo;
7 import com.apple.erp.mapper.ProductInfoMapper; 8 import com.apple.erp.mapper.ProductInfoMapper;
8 import com.apple.erp.service.ProductInfoService; 9 import com.apple.erp.service.ProductInfoService;
...@@ -192,4 +193,40 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ ...@@ -192,4 +193,40 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
192 193
193 return queryWrapper; 194 return queryWrapper;
194 } 195 }
196 +
197 + @Override
198 + public List<ProductSimpleRes> getAllProducts() {
199 + LambdaQueryWrapper<ProductInfo> queryWrapper = new LambdaQueryWrapper<>();
200 + queryWrapper.eq(ProductInfo::getDelFlag, "0") // 未删除
201 + .eq(ProductInfo::getSaleStatus, 1) // 在售状态
202 + .orderByAsc(ProductInfo::getProductCode); // 按产品编码排序
203 +
204 + List<ProductInfo> products = list(queryWrapper);
205 + return products.stream()
206 + .map(product -> {
207 + ProductSimpleRes res = new ProductSimpleRes();
208 + res.setProductId(product.getProductId());
209 + res.setProductCode(product.getProductCode());
210 +
211 + // 拼接产品名称:产品名称|产品型号|产品类别|产品颜色
212 + StringBuilder productNameBuilder = new StringBuilder();
213 + productNameBuilder.append(product.getProductName() != null ? product.getProductName() : "");
214 +
215 + if (product.getProductModel() != null && !product.getProductModel().trim().isEmpty()) {
216 + productNameBuilder.append("|").append(product.getProductModel());
217 + }
218 +
219 + if (product.getProductType() != null && !product.getProductType().trim().isEmpty()) {
220 + productNameBuilder.append("|").append(product.getProductType());
221 + }
222 +
223 + if (product.getColor() != null && !product.getColor().trim().isEmpty()) {
224 + productNameBuilder.append("|").append(product.getColor());
225 + }
226 +
227 + res.setProductName(productNameBuilder.toString());
228 + return res;
229 + })
230 + .collect(java.util.stream.Collectors.toList());
231 + }
195 } 232 }
......
...@@ -17,8 +17,8 @@ spring: ...@@ -17,8 +17,8 @@ spring:
17 type: com.alibaba.druid.pool.DruidDataSource 17 type: com.alibaba.druid.pool.DruidDataSource
18 driver-class-name: com.mysql.cj.jdbc.Driver 18 driver-class-name: com.mysql.cj.jdbc.Driver
19 url: jdbc:mysql://localhost:3306/apple_erp?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true 19 url: jdbc:mysql://localhost:3306/apple_erp?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
20 - username: apple_erp_app 20 + username: root
21 - password: StrongPassw0rd! 21 + password: MySQL@123
22 druid: 22 druid:
23 # 初始连接数 23 # 初始连接数
24 initial-size: 5 24 initial-size: 5
...@@ -70,7 +70,7 @@ spring: ...@@ -70,7 +70,7 @@ spring:
70 redis: 70 redis:
71 host: localhost 71 host: localhost
72 port: 6379 72 port: 6379
73 - password: 123456 73 + password:
74 database: 0 74 database: 0
75 timeout: 10000ms 75 timeout: 10000ms
76 lettuce: 76 lettuce:
......
...@@ -8,32 +8,19 @@ export {} ...@@ -8,32 +8,19 @@ export {}
8 declare module 'vue' { 8 declare module 'vue' {
9 export interface GlobalComponents { 9 export interface GlobalComponents {
10 ElButton: typeof import('element-plus/es')['ElButton'] 10 ElButton: typeof import('element-plus/es')['ElButton']
11 - ElCard: typeof import('element-plus/es')['ElCard']
12 ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] 11 ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
13 - ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
14 - ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
15 ElDialog: typeof import('element-plus/es')['ElDialog'] 12 ElDialog: typeof import('element-plus/es')['ElDialog']
16 ElForm: typeof import('element-plus/es')['ElForm'] 13 ElForm: typeof import('element-plus/es')['ElForm']
17 ElFormItem: typeof import('element-plus/es')['ElFormItem'] 14 ElFormItem: typeof import('element-plus/es')['ElFormItem']
18 - ElIcon: typeof import('element-plus/es')['ElIcon']
19 ElInput: typeof import('element-plus/es')['ElInput'] 15 ElInput: typeof import('element-plus/es')['ElInput']
20 - ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
21 ElOption: typeof import('element-plus/es')['ElOption'] 16 ElOption: typeof import('element-plus/es')['ElOption']
22 - ElPagination: typeof import('element-plus/es')['ElPagination']
23 - ElRadio: typeof import('element-plus/es')['ElRadio']
24 - ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
25 ElSelect: typeof import('element-plus/es')['ElSelect'] 17 ElSelect: typeof import('element-plus/es')['ElSelect']
26 ElTable: typeof import('element-plus/es')['ElTable'] 18 ElTable: typeof import('element-plus/es')['ElTable']
27 ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] 19 ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
28 - ElTag: typeof import('element-plus/es')['ElTag']
29 - ElText: typeof import('element-plus/es')['ElText']
30 Header: typeof import('./src/components/layout/Header.vue')['default'] 20 Header: typeof import('./src/components/layout/Header.vue')['default']
31 RouterLink: typeof import('vue-router')['RouterLink'] 21 RouterLink: typeof import('vue-router')['RouterLink']
32 RouterView: typeof import('vue-router')['RouterView'] 22 RouterView: typeof import('vue-router')['RouterView']
33 Sidebar: typeof import('./src/components/layout/Sidebar.vue')['default'] 23 Sidebar: typeof import('./src/components/layout/Sidebar.vue')['default']
34 SidebarItem: typeof import('./src/components/layout/SidebarItem.vue')['default'] 24 SidebarItem: typeof import('./src/components/layout/SidebarItem.vue')['default']
35 } 25 }
36 - export interface ComponentCustomProperties {
37 - vLoading: typeof import('element-plus/es')['ElLoadingDirective']
38 - }
39 } 26 }
......
...@@ -162,5 +162,10 @@ export const dealerApi = { ...@@ -162,5 +162,10 @@ export const dealerApi = {
162 return api.post<ApiResponse>(`/dealer/${dealerId}/auditStatus`, null, { 162 return api.post<ApiResponse>(`/dealer/${dealerId}/auditStatus`, null, {
163 params: { qualificationAuditStatus, auditOpinion } 163 params: { qualificationAuditStatus, auditOpinion }
164 }) 164 })
165 + },
166 +
167 + // 获取所有经销商(用于下拉选择)
168 + getAllDealers: () => {
169 + return api.get<ApiResponse<DealerInfo[]>>('/dealer/all')
165 } 170 }
166 } 171 }
......
...@@ -55,6 +55,13 @@ export interface ProductInfo { ...@@ -55,6 +55,13 @@ export interface ProductInfo {
55 updateTime: string 55 updateTime: string
56 } 56 }
57 57
58 +// 产品简单信息接口(用于下拉选择)
59 +export interface ProductSimpleRes {
60 + productId: number
61 + productCode: string
62 + productName: string
63 +}
64 +
58 // 产品查询请求参数 65 // 产品查询请求参数
59 export interface ProductQueryReq { 66 export interface ProductQueryReq {
60 productCode?: string 67 productCode?: string
...@@ -157,5 +164,10 @@ export const productApi = { ...@@ -157,5 +164,10 @@ export const productApi = {
157 // 修改返利标识 164 // 修改返利标识
158 updateRebateFlag: (productId: number, rebateFlag: number) => { 165 updateRebateFlag: (productId: number, rebateFlag: number) => {
159 return api.post(`/product/${productId}/rebate`, null, { params: { rebateFlag } }) 166 return api.post(`/product/${productId}/rebate`, null, { params: { rebateFlag } })
167 + },
168 +
169 + // 获取所有产品(用于下拉选择)
170 + getAllProducts: () => {
171 + return api.get<ApiResponse<ProductSimpleRes[]>>('/product/all')
160 } 172 }
161 } 173 }
......
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
4 <div class="search-section"> 4 <div class="search-section">
5 <div class="search-row"> 5 <div class="search-row">
6 <div class="search-item"> 6 <div class="search-item">
7 - <label>单编号:</label> 7 + <label>出库单编号:</label>
8 <input 8 <input
9 - v-model="searchParams.orderNo" 9 + v-model="searchParams.deliveryNo"
10 class="search-input" 10 class="search-input"
11 - placeholder="请输入单编号" 11 + placeholder="请输入出库单编号"
12 /> 12 />
13 </div> 13 </div>
14 <div class="search-item"> 14 <div class="search-item">
...@@ -38,17 +38,17 @@ ...@@ -38,17 +38,17 @@
38 </div> 38 </div>
39 <div class="search-row"> 39 <div class="search-row">
40 <div class="search-item"> 40 <div class="search-item">
41 - <label>开始日期:</label> 41 + <label>出库开始日期:</label>
42 <input 42 <input
43 - v-model="searchParams.startDate" 43 + v-model="searchParams.deliveryStartDate"
44 class="search-input" 44 class="search-input"
45 type="date" 45 type="date"
46 /> 46 />
47 </div> 47 </div>
48 <div class="search-item"> 48 <div class="search-item">
49 - <label>结束日期:</label> 49 + <label>出库结束日期:</label>
50 <input 50 <input
51 - v-model="searchParams.endDate" 51 + v-model="searchParams.deliveryEndDate"
52 class="search-input" 52 class="search-input"
53 type="date" 53 type="date"
54 /> 54 />
...@@ -113,6 +113,7 @@ ...@@ -113,6 +113,7 @@
113 <td>{{ formatTime(delivery.createTime || '') }}</td> 113 <td>{{ formatTime(delivery.createTime || '') }}</td>
114 <td class="action-col"> 114 <td class="action-col">
115 <button @click="handleView(delivery)" class="view-btn">👁️ 查看</button> 115 <button @click="handleView(delivery)" class="view-btn">👁️ 查看</button>
116 + <button @click="handleEdit(delivery)" class="edit-btn">✏️ 编辑</button>
116 <button @click="handleDelete(delivery)" class="delete-btn">🗑️ 删除</button> 117 <button @click="handleDelete(delivery)" class="delete-btn">🗑️ 删除</button>
117 </td> 118 </td>
118 </tr> 119 </tr>
...@@ -230,13 +231,13 @@ ...@@ -230,13 +231,13 @@
230 </div> 231 </div>
231 </div> 232 </div>
232 233
233 - <div class="detail-section" v-if="deliveryDetail?.deliveryItems && deliveryDetail.deliveryItems.length > 0"> 234 + <div class="detail-section" v-if="deliveryDetail.deliveryItems && deliveryDetail.deliveryItems.length > 0">
234 <h4>出库明细</h4> 235 <h4>出库明细</h4>
235 <table class="detail-table"> 236 <table class="detail-table">
236 <thead> 237 <thead>
237 <tr> 238 <tr>
238 - <th>产品编码</th>
239 <th>产品名称</th> 239 <th>产品名称</th>
240 + <th>产品编码</th>
240 <th>出库数量</th> 241 <th>出库数量</th>
241 <th>出库单价</th> 242 <th>出库单价</th>
242 <th>出库金额</th> 243 <th>出库金额</th>
...@@ -244,8 +245,8 @@ ...@@ -244,8 +245,8 @@
244 </thead> 245 </thead>
245 <tbody> 246 <tbody>
246 <tr v-for="item in deliveryDetail.deliveryItems" :key="item.itemId || item.deliveryId"> 247 <tr v-for="item in deliveryDetail.deliveryItems" :key="item.itemId || item.deliveryId">
247 - <td>{{ item.productCode }}</td>
248 <td>{{ item.productName }}</td> 248 <td>{{ item.productName }}</td>
249 + <td>{{ item.productCode }}</td>
249 <td>{{ item.deliveryQty }}</td> 250 <td>{{ item.deliveryQty }}</td>
250 <td>{{ formatCurrency(item.deliveryPrice) }}</td> 251 <td>{{ formatCurrency(item.deliveryPrice) }}</td>
251 <td>{{ formatCurrency(item.deliveryAmount) }}</td> 252 <td>{{ formatCurrency(item.deliveryAmount) }}</td>
...@@ -258,15 +259,15 @@ ...@@ -258,15 +259,15 @@
258 </div> 259 </div>
259 </div> 260 </div>
260 261
261 - <!-- 新增出库对话框 --> 262 + <!-- 编辑出库对话框 -->
262 - <div v-if="showAddDialog" class="dialog-overlay" @click="closeAddDialog"> 263 + <div v-if="showEditDialog" class="dialog-overlay" @click="closeEditDialog">
263 <div class="dialog-content large-dialog" @click.stop> 264 <div class="dialog-content large-dialog" @click.stop>
264 <div class="dialog-header"> 265 <div class="dialog-header">
265 - <h3>新增出库</h3> 266 + <h3>编辑出库</h3>
266 - <button @click="closeAddDialog" class="close-btn">×</button> 267 + <button @click="closeEditDialog" class="close-btn">×</button>
267 </div> 268 </div>
268 <div class="dialog-body"> 269 <div class="dialog-body">
269 - <form @submit.prevent="handleSubmitAdd"> 270 + <form @submit.prevent="handleSubmitEdit">
270 <!-- 出库基本信息 --> 271 <!-- 出库基本信息 -->
271 <div class="form-section"> 272 <div class="form-section">
272 <h4>出库基本信息</h4> 273 <h4>出库基本信息</h4>
...@@ -274,33 +275,215 @@ ...@@ -274,33 +275,215 @@
274 <div class="form-item"> 275 <div class="form-item">
275 <label class="required">出库单编号:</label> 276 <label class="required">出库单编号:</label>
276 <input 277 <input
277 - v-model="addFormData.deliveryNo" 278 + v-model="editFormData.deliveryNo"
278 class="form-input" 279 class="form-input"
279 placeholder="请输入出库单编号" 280 placeholder="请输入出库单编号"
280 required 281 required
281 /> 282 />
282 </div> 283 </div>
283 <div class="form-item"> 284 <div class="form-item">
284 - <label class="required">经销商编码:</label> 285 + <label class="required">经销商名称:</label>
286 + <select
287 + v-model="editFormData.dealerName"
288 + class="form-input"
289 + @change="handleEditDealerChange"
290 + required
291 + >
292 + <option value="">请选择经销商</option>
293 + <option
294 + v-for="dealer in dealerList"
295 + :key="dealer.dealerId"
296 + :value="dealer.dealerName"
297 + >
298 + {{ dealer.dealerName }}
299 + </option>
300 + </select>
301 + </div>
302 + </div>
303 + <div class="form-row">
304 + <div class="form-item">
305 + <label class="required">关联订单编号:</label>
306 + <input
307 + v-model="editFormData.orderNo"
308 + class="form-input"
309 + placeholder="请输入关联订单编号"
310 + required
311 + />
312 + </div>
313 + <div class="form-item">
314 + <label class="required">出库日期:</label>
285 <input 315 <input
286 - v-model="addFormData.dealerCode" 316 + v-model="editFormData.deliveryDate"
287 class="form-input" 317 class="form-input"
288 - placeholder="请输入经销商编码" 318 + type="datetime-local"
319 + step="1"
289 required 320 required
290 /> 321 />
291 </div> 322 </div>
292 </div> 323 </div>
293 <div class="form-row"> 324 <div class="form-row">
294 <div class="form-item"> 325 <div class="form-item">
295 - <label class="required">经销商名称:</label> 326 + <label>仓库编码:</label>
296 <input 327 <input
297 - v-model="addFormData.dealerName" 328 + v-model="editFormData.warehouseCode"
329 + class="form-input"
330 + placeholder="请输入仓库编码"
331 + />
332 + </div>
333 + <div class="form-item">
334 + <label>仓库名称:</label>
335 + <input
336 + v-model="editFormData.warehouseName"
337 + class="form-input"
338 + placeholder="请输入仓库名称"
339 + />
340 + </div>
341 + </div>
342 + <div class="form-row">
343 + <div class="form-item">
344 + <label>数据来源:</label>
345 + <input
346 + v-model="editFormData.dataSource"
347 + class="form-input"
348 + placeholder="请输入数据来源"
349 + />
350 + </div>
351 + <!-- 经销商编码字段隐藏,通过选择经销商名称自动填充 -->
352 + <input
353 + v-model="editFormData.dealerCode"
354 + type="hidden"
355 + />
356 + </div>
357 + </div>
358 +
359 + <!-- 出库明细 -->
360 + <div class="form-section">
361 + <h4>出库明细</h4>
362 + <div class="order-items-header">
363 + <button type="button" @click="addEditDeliveryItem" class="add-item-btn">+ 添加明细</button>
364 + </div>
365 + <div class="order-items-container">
366 + <div v-for="(item, index) in editFormData.deliveryItems" :key="index" class="order-item">
367 + <div class="item-row-single">
368 + <div class="form-item">
369 + <label class="required">产品名称:</label>
370 + <select
371 + v-model="item.productName"
372 + class="form-input"
373 + @change="handleEditProductChange(index)"
374 + required
375 + >
376 + <option value="">请选择产品</option>
377 + <option
378 + v-for="product in productList"
379 + :key="product.productId"
380 + :value="product.productName"
381 + >
382 + {{ product.productName }}
383 + </option>
384 + </select>
385 + </div>
386 + <div class="form-item">
387 + <label class="required">产品编码:</label>
388 + <input
389 + v-model="item.productCode"
390 + class="form-input readonly"
391 + placeholder="自动填充"
392 + readonly
393 + required
394 + />
395 + </div>
396 + <div class="form-item">
397 + <label class="required">出库数量:</label>
398 + <input
399 + v-model.number="item.deliveryQty"
400 + class="form-input"
401 + type="number"
402 + placeholder="请输入出库数量"
403 + @input="calculateEditDeliveryItemTotal(index)"
404 + required
405 + />
406 + </div>
407 + <div class="form-item">
408 + <label class="required">出库单价:</label>
409 + <input
410 + v-model.number="item.deliveryPrice"
411 + class="form-input"
412 + type="number"
413 + step="0.01"
414 + placeholder="请输入出库单价"
415 + @input="calculateEditDeliveryItemTotal(index)"
416 + required
417 + />
418 + </div>
419 + <div class="form-item">
420 + <label>出库金额:</label>
421 + <input
422 + v-model.number="item.deliveryAmount"
423 + class="form-input"
424 + type="number"
425 + step="0.01"
426 + readonly
427 + />
428 + </div>
429 + <button type="button" @click="removeEditDeliveryItem(index)" class="remove-item-btn">删除</button>
430 + </div>
431 + </div>
432 + </div>
433 + </div>
434 +
435 + <div class="form-actions">
436 + <button type="button" @click="closeEditDialog" class="cancel-btn">取消</button>
437 + <button type="submit" class="submit-btn">确定</button>
438 + </div>
439 + </form>
440 + </div>
441 + </div>
442 + </div>
443 +
444 + <!-- 新增出库对话框 -->
445 + <div v-if="showAddDialog" class="dialog-overlay" @click="closeAddDialog">
446 + <div class="dialog-content large-dialog" @click.stop>
447 + <div class="dialog-header">
448 + <h3>新增出库</h3>
449 + <button @click="closeAddDialog" class="close-btn">×</button>
450 + </div>
451 + <div class="dialog-body">
452 + <form @submit.prevent="handleSubmitAdd">
453 + <!-- 出库基本信息 -->
454 + <div class="form-section">
455 + <h4>出库基本信息</h4>
456 + <div class="form-row">
457 + <div class="form-item">
458 + <label class="required">出库单编号:</label>
459 + <input
460 + v-model="addFormData.deliveryNo"
298 class="form-input" 461 class="form-input"
299 - placeholder="请输入经销商名称" 462 + placeholder="请输入出库单编号"
300 required 463 required
301 /> 464 />
302 </div> 465 </div>
303 <div class="form-item"> 466 <div class="form-item">
467 + <label class="required">经销商名称:</label>
468 + <select
469 + v-model="addFormData.dealerName"
470 + class="form-input"
471 + @change="handleAddDealerChange"
472 + required
473 + >
474 + <option value="">请选择经销商</option>
475 + <option
476 + v-for="dealer in dealerList"
477 + :key="dealer.dealerId"
478 + :value="dealer.dealerName"
479 + >
480 + {{ dealer.dealerName }}
481 + </option>
482 + </select>
483 + </div>
484 + </div>
485 + <div class="form-row">
486 + <div class="form-item">
304 <label class="required">关联订单编号:</label> 487 <label class="required">关联订单编号:</label>
305 <input 488 <input
306 v-model="addFormData.orderNo" 489 v-model="addFormData.orderNo"
...@@ -309,8 +492,6 @@ ...@@ -309,8 +492,6 @@
309 required 492 required
310 /> 493 />
311 </div> 494 </div>
312 - </div>
313 - <div class="form-row">
314 <div class="form-item"> 495 <div class="form-item">
315 <label class="required">出库日期:</label> 496 <label class="required">出库日期:</label>
316 <input 497 <input
...@@ -321,6 +502,8 @@ ...@@ -321,6 +502,8 @@
321 required 502 required
322 /> 503 />
323 </div> 504 </div>
505 + </div>
506 + <div class="form-row">
324 <div class="form-item"> 507 <div class="form-item">
325 <label>仓库编码:</label> 508 <label>仓库编码:</label>
326 <input 509 <input
...@@ -329,8 +512,6 @@ ...@@ -329,8 +512,6 @@
329 placeholder="请输入仓库编码" 512 placeholder="请输入仓库编码"
330 /> 513 />
331 </div> 514 </div>
332 - </div>
333 - <div class="form-row">
334 <div class="form-item"> 515 <div class="form-item">
335 <label>仓库名称:</label> 516 <label>仓库名称:</label>
336 <input 517 <input
...@@ -339,6 +520,8 @@ ...@@ -339,6 +520,8 @@
339 placeholder="请输入仓库名称" 520 placeholder="请输入仓库名称"
340 /> 521 />
341 </div> 522 </div>
523 + </div>
524 + <div class="form-row">
342 <div class="form-item"> 525 <div class="form-item">
343 <label>数据来源:</label> 526 <label>数据来源:</label>
344 <input 527 <input
...@@ -347,6 +530,11 @@ ...@@ -347,6 +530,11 @@
347 placeholder="请输入数据来源" 530 placeholder="请输入数据来源"
348 /> 531 />
349 </div> 532 </div>
533 + <!-- 经销商编码字段隐藏,通过选择经销商名称自动填充 -->
534 + <input
535 + v-model="addFormData.dealerCode"
536 + type="hidden"
537 + />
350 </div> 538 </div>
351 </div> 539 </div>
352 540
...@@ -360,20 +548,30 @@ ...@@ -360,20 +548,30 @@
360 <div v-for="(item, index) in addFormData.deliveryItems" :key="index" class="order-item"> 548 <div v-for="(item, index) in addFormData.deliveryItems" :key="index" class="order-item">
361 <div class="item-row-single"> 549 <div class="item-row-single">
362 <div class="form-item"> 550 <div class="form-item">
363 - <label class="required">产品编码:</label> 551 + <label class="required">产品名称:</label>
364 - <input 552 + <select
365 - v-model="item.productCode" 553 + v-model="item.productName"
366 class="form-input" 554 class="form-input"
367 - placeholder="请输入产品编码" 555 + @change="handleAddProductChange(index)"
368 required 556 required
369 - /> 557 + >
558 + <option value="">请选择产品</option>
559 + <option
560 + v-for="product in productList"
561 + :key="product.productId"
562 + :value="product.productName"
563 + >
564 + {{ product.productName }}
565 + </option>
566 + </select>
370 </div> 567 </div>
371 <div class="form-item"> 568 <div class="form-item">
372 - <label class="required">产品名称:</label> 569 + <label class="required">产品编码:</label>
373 <input 570 <input
374 - v-model="item.productName" 571 + v-model="item.productCode"
375 - class="form-input" 572 + class="form-input readonly"
376 - placeholder="请输入产品名称" 573 + placeholder="自动填充"
574 + readonly
377 required 575 required
378 /> 576 />
379 </div> 577 </div>
...@@ -431,12 +629,17 @@ ...@@ -431,12 +629,17 @@
431 import { ref, reactive, computed, onMounted } from 'vue' 629 import { ref, reactive, computed, onMounted } from 'vue'
432 import { ElMessage, ElMessageBox } from 'element-plus' 630 import { ElMessage, ElMessageBox } from 'element-plus'
433 import { deliveryApi, type DeliveryAddReq, type DeliveryInfo, type DeliveryQueryReq } from '../../api/delivery' 631 import { deliveryApi, type DeliveryAddReq, type DeliveryInfo, type DeliveryQueryReq } from '../../api/delivery'
632 +import { dealerApi, type DealerInfo } from '../../api/dealer'
633 +import { productApi } from '../../api/product'
634 +import type { ProductSimpleRes } from '../../api/product'
434 635
435 // 响应式数据 636 // 响应式数据
436 const loading = ref(false) 637 const loading = ref(false)
437 const deliveryList = ref<DeliveryInfo[]>([]) 638 const deliveryList = ref<DeliveryInfo[]>([])
438 const showDetailDialog = ref(false) 639 const showDetailDialog = ref(false)
439 const deliveryDetail = ref<DeliveryInfo | null>(null) 640 const deliveryDetail = ref<DeliveryInfo | null>(null)
641 +const dealerList = ref<DealerInfo[]>([])
642 +const productList = ref<ProductSimpleRes[]>([])
440 643
441 // 新增出库相关数据 644 // 新增出库相关数据
442 const showAddDialog = ref(false) 645 const showAddDialog = ref(false)
...@@ -452,9 +655,23 @@ const addFormData = reactive({ ...@@ -452,9 +655,23 @@ const addFormData = reactive({
452 deliveryItems: [] as any[] 655 deliveryItems: [] as any[]
453 }) 656 })
454 657
658 +// 编辑出库相关数据
659 +const showEditDialog = ref(false)
660 +const editFormData = reactive({
661 + deliveryId: 0,
662 + deliveryNo: '',
663 + dealerCode: '',
664 + dealerName: '',
665 + orderNo: '',
666 + deliveryDate: '',
667 + warehouseCode: '',
668 + warehouseName: '',
669 + dataSource: '',
670 + deliveryItems: [] as any[]
671 +})
672 +
455 // 搜索参数 673 // 搜索参数
456 const searchParams = reactive({ 674 const searchParams = reactive({
457 - orderNo: '',
458 deliveryNo: '', 675 deliveryNo: '',
459 dealerCode: '', 676 dealerCode: '',
460 dealerName: '', 677 dealerName: '',
...@@ -463,8 +680,6 @@ const searchParams = reactive({ ...@@ -463,8 +680,6 @@ const searchParams = reactive({
463 dataSource: '', 680 dataSource: '',
464 deliveryStartDate: '', 681 deliveryStartDate: '',
465 deliveryEndDate: '', 682 deliveryEndDate: '',
466 - startDate: '',
467 - endDate: '',
468 pageNum: 1, 683 pageNum: 1,
469 pageSize: 10 684 pageSize: 10
470 }) 685 })
...@@ -541,7 +756,16 @@ const getPageNumbers = () => { ...@@ -541,7 +756,16 @@ const getPageNumbers = () => {
541 const fetchDeliveries = async () => { 756 const fetchDeliveries = async () => {
542 try { 757 try {
543 loading.value = true 758 loading.value = true
544 - const params = { ...searchParams, pageNum: pagination.pageNum, pageSize: pagination.pageSize } 759 + // 处理日期格式,将日期转换为完整的日期时间格式
760 + const processedParams = { ...searchParams }
761 + if (processedParams.deliveryStartDate) {
762 + processedParams.deliveryStartDate = processedParams.deliveryStartDate + ' 00:00:00'
763 + }
764 + if (processedParams.deliveryEndDate) {
765 + processedParams.deliveryEndDate = processedParams.deliveryEndDate + ' 23:59:59'
766 + }
767 +
768 + const params = { ...processedParams, pageNum: pagination.pageNum, pageSize: pagination.pageSize }
545 const response = await deliveryApi.getDeliveryList(params) as any 769 const response = await deliveryApi.getDeliveryList(params) as any
546 console.log('出库查询API响应:', response) 770 console.log('出库查询API响应:', response)
547 771
...@@ -571,12 +795,12 @@ const handleSearch = () => { ...@@ -571,12 +795,12 @@ const handleSearch = () => {
571 795
572 const handleReset = () => { 796 const handleReset = () => {
573 Object.assign(searchParams, { 797 Object.assign(searchParams, {
574 - orderNo: '', 798 + deliveryNo: '',
575 dealerCode: '', 799 dealerCode: '',
576 dealerName: '', 800 dealerName: '',
577 deliveryStatus: undefined, 801 deliveryStatus: undefined,
578 - startDate: '', 802 + deliveryStartDate: '',
579 - endDate: '' 803 + deliveryEndDate: ''
580 }) 804 })
581 pagination.pageNum = 1 805 pagination.pageNum = 1
582 fetchDeliveries() 806 fetchDeliveries()
...@@ -600,6 +824,42 @@ const handleView = async (delivery: DeliveryInfo) => { ...@@ -600,6 +824,42 @@ const handleView = async (delivery: DeliveryInfo) => {
600 } 824 }
601 } 825 }
602 826
827 +const handleEdit = async (delivery: DeliveryInfo) => {
828 + try {
829 + // 调用后端接口获取完整的出库详情(包括出库明细)
830 + const response = await deliveryApi.getDeliveryDetail(delivery.deliveryId) as any
831 + console.log('编辑出库API响应:', response)
832 +
833 + if (response && response.deliveryId) {
834 + // 处理日期时间格式,将后端返回的日期时间格式转换为前端datetime-local格式
835 + let formattedDeliveryDate = response.deliveryDate
836 + if (formattedDeliveryDate && formattedDeliveryDate.includes(' ')) {
837 + // 将 YYYY-MM-DD HH:MM:SS 格式转换为 YYYY-MM-DDTHH:MM:SS 格式
838 + formattedDeliveryDate = formattedDeliveryDate.replace(' ', 'T')
839 + }
840 +
841 + Object.assign(editFormData, {
842 + deliveryId: response.deliveryId,
843 + deliveryNo: response.deliveryNo,
844 + dealerCode: response.dealerCode,
845 + dealerName: response.dealerName,
846 + orderNo: response.orderNo,
847 + deliveryDate: formattedDeliveryDate,
848 + warehouseCode: response.warehouseCode || '',
849 + warehouseName: response.warehouseName || '',
850 + dataSource: response.dataSource || '',
851 + deliveryItems: response.deliveryItems || []
852 + })
853 + showEditDialog.value = true
854 + } else {
855 + showMessage('获取出库详情失败', 'error')
856 + }
857 + } catch (error) {
858 + console.error('获取出库详情失败:', error)
859 + showMessage('获取出库详情失败, 请重试', 'error')
860 + }
861 +}
862 +
603 const handleDelete = async (delivery: DeliveryInfo) => { 863 const handleDelete = async (delivery: DeliveryInfo) => {
604 if (confirm(`确定要删除出库单"${delivery.deliveryNo}"吗?`)) { 864 if (confirm(`确定要删除出库单"${delivery.deliveryNo}"吗?`)) {
605 try { 865 try {
...@@ -709,6 +969,40 @@ const closeAddDialog = () => { ...@@ -709,6 +969,40 @@ const closeAddDialog = () => {
709 showAddDialog.value = false 969 showAddDialog.value = false
710 } 970 }
711 971
972 +const closeEditDialog = () => {
973 + showEditDialog.value = false
974 +}
975 +
976 +// 经销商选择处理
977 +const handleAddDealerChange = () => {
978 + const selectedDealer = dealerList.value.find(dealer => dealer.dealerName === addFormData.dealerName)
979 + if (selectedDealer) {
980 + addFormData.dealerCode = selectedDealer.dealerCode
981 + }
982 +}
983 +
984 +const handleEditDealerChange = () => {
985 + const selectedDealer = dealerList.value.find(dealer => dealer.dealerName === editFormData.dealerName)
986 + if (selectedDealer) {
987 + editFormData.dealerCode = selectedDealer.dealerCode
988 + }
989 +}
990 +
991 +// 产品选择处理
992 +const handleAddProductChange = (index: number) => {
993 + const selectedProduct = productList.value.find((product: ProductSimpleRes) => product.productName === addFormData.deliveryItems[index].productName)
994 + if (selectedProduct) {
995 + addFormData.deliveryItems[index].productCode = selectedProduct.productCode
996 + }
997 +}
998 +
999 +const handleEditProductChange = (index: number) => {
1000 + const selectedProduct = productList.value.find((product: ProductSimpleRes) => product.productName === editFormData.deliveryItems[index].productName)
1001 + if (selectedProduct) {
1002 + editFormData.deliveryItems[index].productCode = selectedProduct.productCode
1003 + }
1004 +}
1005 +
712 const addDeliveryItem = () => { 1006 const addDeliveryItem = () => {
713 addFormData.deliveryItems.push({ 1007 addFormData.deliveryItems.push({
714 productCode: '', 1008 productCode: '',
...@@ -723,6 +1017,20 @@ const removeDeliveryItem = (index: number) => { ...@@ -723,6 +1017,20 @@ const removeDeliveryItem = (index: number) => {
723 addFormData.deliveryItems.splice(index, 1) 1017 addFormData.deliveryItems.splice(index, 1)
724 } 1018 }
725 1019
1020 +const addEditDeliveryItem = () => {
1021 + editFormData.deliveryItems.push({
1022 + productCode: '',
1023 + productName: '',
1024 + deliveryQty: 1,
1025 + deliveryPrice: 0,
1026 + deliveryAmount: 0
1027 + })
1028 +}
1029 +
1030 +const removeEditDeliveryItem = (index: number) => {
1031 + editFormData.deliveryItems.splice(index, 1)
1032 +}
1033 +
726 const calculateDeliveryItemTotal = (index: number) => { 1034 const calculateDeliveryItemTotal = (index: number) => {
727 const item = addFormData.deliveryItems[index] 1035 const item = addFormData.deliveryItems[index]
728 if (item.deliveryQty && item.deliveryPrice) { 1036 if (item.deliveryQty && item.deliveryPrice) {
...@@ -730,6 +1038,13 @@ const calculateDeliveryItemTotal = (index: number) => { ...@@ -730,6 +1038,13 @@ const calculateDeliveryItemTotal = (index: number) => {
730 } 1038 }
731 } 1039 }
732 1040
1041 +const calculateEditDeliveryItemTotal = (index: number) => {
1042 + const item = editFormData.deliveryItems[index]
1043 + if (item.deliveryQty && item.deliveryPrice) {
1044 + item.deliveryAmount = item.deliveryQty * item.deliveryPrice
1045 + }
1046 +}
1047 +
733 const handleSubmitAdd = async () => { 1048 const handleSubmitAdd = async () => {
734 try { 1049 try {
735 // 处理日期时间格式,将datetime-local格式转换为后端需要的格式 1050 // 处理日期时间格式,将datetime-local格式转换为后端需要的格式
...@@ -768,6 +1083,44 @@ const handleSubmitAdd = async () => { ...@@ -768,6 +1083,44 @@ const handleSubmitAdd = async () => {
768 } 1083 }
769 } 1084 }
770 1085
1086 +const handleSubmitEdit = async () => {
1087 + try {
1088 + // 处理日期时间格式,将datetime-local格式转换为后端需要的格式
1089 + let formattedDeliveryDate = editFormData.deliveryDate
1090 + if (formattedDeliveryDate && formattedDeliveryDate.includes('T')) {
1091 + // 将 YYYY-MM-DDTHH:MM:SS 格式转换为 YYYY-MM-DD HH:MM:SS 格式
1092 + formattedDeliveryDate = formattedDeliveryDate.replace('T', ' ')
1093 + }
1094 +
1095 + // 构造编辑出库的请求数据
1096 + const deliveryData = {
1097 + deliveryId: editFormData.deliveryId,
1098 + deliveryNo: editFormData.deliveryNo,
1099 + dealerCode: editFormData.dealerCode,
1100 + dealerName: editFormData.dealerName,
1101 + orderNo: editFormData.orderNo,
1102 + deliveryDate: formattedDeliveryDate,
1103 + warehouseCode: editFormData.warehouseCode,
1104 + dataSource: editFormData.dataSource || '系统录入',
1105 + deliveryItems: editFormData.deliveryItems.map(item => ({
1106 + productCode: item.productCode,
1107 + productName: item.productName,
1108 + deliveryQty: item.deliveryQty,
1109 + deliveryPrice: item.deliveryPrice,
1110 + deliveryAmount: item.deliveryAmount
1111 + }))
1112 + }
1113 +
1114 + await deliveryApi.updateDelivery(deliveryData)
1115 + showMessage('编辑出库成功', 'success')
1116 + closeEditDialog()
1117 + fetchDeliveries() // 刷新列表
1118 + } catch (error) {
1119 + console.error('编辑出库失败:', error)
1120 + showMessage('编辑出库失败, 请重试', 'error')
1121 + }
1122 +}
1123 +
771 1124
772 1125
773 const handlePageChange = (page: number) => { 1126 const handlePageChange = (page: number) => {
...@@ -803,9 +1156,37 @@ const closeDetailDialog = () => { ...@@ -803,9 +1156,37 @@ const closeDetailDialog = () => {
803 deliveryDetail.value = null 1156 deliveryDetail.value = null
804 } 1157 }
805 1158
1159 +// 加载经销商列表
1160 +const loadDealers = async () => {
1161 + try {
1162 + const response = await dealerApi.getAllDealers() as any
1163 + if (response && response.data && Array.isArray(response.data)) {
1164 + dealerList.value = response.data
1165 + }
1166 + } catch (error) {
1167 + console.error('加载经销商列表失败:', error)
1168 + showMessage('加载经销商列表失败', 'error')
1169 + }
1170 +}
1171 +
1172 +// 加载产品列表
1173 +const loadProducts = async () => {
1174 + try {
1175 + const response = await productApi.getAllProducts() as any
1176 + if (response && response.data && Array.isArray(response.data)) {
1177 + productList.value = response.data
1178 + }
1179 + } catch (error) {
1180 + console.error('加载产品列表失败:', error)
1181 + showMessage('加载产品列表失败', 'error')
1182 + }
1183 +}
1184 +
806 // 生命周期 1185 // 生命周期
807 onMounted(() => { 1186 onMounted(() => {
808 fetchDeliveries() 1187 fetchDeliveries()
1188 + loadDealers()
1189 + loadProducts()
809 }) 1190 })
810 </script> 1191 </script>
811 1192
...@@ -1030,6 +1411,11 @@ onMounted(() => { ...@@ -1030,6 +1411,11 @@ onMounted(() => {
1030 color: white; 1411 color: white;
1031 } 1412 }
1032 1413
1414 +.edit-btn {
1415 + background: #ffc107;
1416 + color: #333;
1417 +}
1418 +
1033 .delete-btn { 1419 .delete-btn {
1034 background: #dc3545; 1420 background: #dc3545;
1035 color: white; 1421 color: white;
...@@ -1328,6 +1714,23 @@ onMounted(() => { ...@@ -1328,6 +1714,23 @@ onMounted(() => {
1328 box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.2); 1714 box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.2);
1329 } 1715 }
1330 1716
1717 +.form-select {
1718 + padding: 6px 8px;
1719 + border: 1px solid #ddd;
1720 + border-radius: 4px;
1721 + font-size: 12px;
1722 + width: 100%;
1723 + box-sizing: border-box;
1724 + background-color: #fff;
1725 + cursor: pointer;
1726 +}
1727 +
1728 +.form-select:focus {
1729 + outline: none;
1730 + border-color: #007bff;
1731 + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.2);
1732 +}
1733 +
1331 .form-actions { 1734 .form-actions {
1332 display: flex; 1735 display: flex;
1333 justify-content: flex-end; 1736 justify-content: flex-end;
...@@ -1409,13 +1812,16 @@ onMounted(() => { ...@@ -1409,13 +1812,16 @@ onMounted(() => {
1409 min-width: 0; 1812 min-width: 0;
1410 } 1813 }
1411 1814
1815 +/* 产品名称字段 - 占用最多空间(现在在第一位) */
1412 .order-item .form-item:nth-child(1) { 1816 .order-item .form-item:nth-child(1) {
1413 - flex: 0 0 120px; 1817 + flex: 1 1 180px !important;
1818 + min-width: 120px !important;
1819 + max-width: 200px;
1414 } 1820 }
1415 1821
1822 +/* 产品编码字段 - 固定宽度(现在在第二位) */
1416 .order-item .form-item:nth-child(2) { 1823 .order-item .form-item:nth-child(2) {
1417 - flex: 1 1 200px; 1824 + flex: 0 0 140px;
1418 - min-width: 150px;
1419 } 1825 }
1420 1826
1421 .order-item .form-item:nth-child(3) { 1827 .order-item .form-item:nth-child(3) {
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
5 <div class="search-row"> 5 <div class="search-row">
6 <div class="search-item"> 6 <div class="search-item">
7 <label>发票编号:</label> 7 <label>发票编号:</label>
8 - <input 8 + <input
9 - v-model="searchParams.invoiceNo" 9 + v-model="searchParams.invoiceNo"
10 - class="search-input" 10 + class="search-input"
11 placeholder="请输入发票编号" 11 placeholder="请输入发票编号"
12 /> 12 />
13 </div> 13 </div>
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
48 <div class="search-item"> 48 <div class="search-item">
49 <label>开票开始日期:</label> 49 <label>开票开始日期:</label>
50 <input 50 <input
51 - v-model="searchParams.invoiceStartDate" 51 + v-model="searchParams.invoiceStartDate"
52 class="search-input" 52 class="search-input"
53 type="date" 53 type="date"
54 /> 54 />
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
56 <div class="search-item"> 56 <div class="search-item">
57 <label>开票结束日期:</label> 57 <label>开票结束日期:</label>
58 <input 58 <input
59 - v-model="searchParams.invoiceEndDate" 59 + v-model="searchParams.invoiceEndDate"
60 class="search-input" 60 class="search-input"
61 type="date" 61 type="date"
62 /> 62 />
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
101 <th>开票日期</th> 101 <th>开票日期</th>
102 <th>发票金额</th> 102 <th>发票金额</th>
103 <th>开票状态</th> 103 <th>开票状态</th>
104 - <th>上传时间</th> 104 + <th>开票时间</th>
105 <th>关联订单编号</th> 105 <th>关联订单编号</th>
106 <th>操作</th> 106 <th>操作</th>
107 </tr> 107 </tr>
...@@ -187,20 +187,20 @@ ...@@ -187,20 +187,20 @@
187 <form @submit.prevent="handleSubmit"> 187 <form @submit.prevent="handleSubmit">
188 <div class="form-row"> 188 <div class="form-row">
189 <div class="form-item"> 189 <div class="form-item">
190 - <label class="required">订单编号:</label> 190 + <label class="required">发票号码:</label>
191 <input 191 <input
192 - v-model="formData.orderNo" 192 + v-model="formData.invoiceNo"
193 class="form-input" 193 class="form-input"
194 - placeholder="请输入订单编号" 194 + placeholder="请输入发票号码"
195 required 195 required
196 /> 196 />
197 </div> 197 </div>
198 <div class="form-item"> 198 <div class="form-item">
199 - <label class="required">发票号码:</label> 199 + <label class="required">订单编号:</label>
200 <input 200 <input
201 - v-model="formData.invoiceNo" 201 + v-model="formData.orderNo"
202 class="form-input" 202 class="form-input"
203 - placeholder="请输入发票号码" 203 + placeholder="请输入订单编号"
204 required 204 required
205 /> 205 />
206 </div> 206 </div>
...@@ -215,27 +215,28 @@ ...@@ -215,27 +215,28 @@
215 /> 215 />
216 </div> 216 </div>
217 <div class="form-item"> 217 <div class="form-item">
218 - <label class="required">经销商编码:</label>
219 - <input
220 - v-model="formData.dealerCode"
221 - class="form-input"
222 - placeholder="请输入经销商编码"
223 - required
224 - />
225 - </div>
226 - </div>
227 - <div class="form-row">
228 - <div class="form-item">
229 <label class="required">经销商名称:</label> 218 <label class="required">经销商名称:</label>
230 - <input 219 + <select
231 v-model="formData.dealerName" 220 v-model="formData.dealerName"
232 class="form-input" 221 class="form-input"
233 - placeholder="请输入经销商名称" 222 + @change="handleDealerChange"
234 required 223 required
235 - /> 224 + >
225 + <option value="">请选择经销商</option>
226 + <option
227 + v-for="dealer in dealerList"
228 + :key="dealer.dealerId"
229 + :value="dealer.dealerName"
230 + >
231 + {{ dealer.dealerName }}
232 + </option>
233 + </select>
236 </div> 234 </div>
237 </div> 235 </div>
238 <div class="form-row"> 236 <div class="form-row">
237 + <input v-model="formData.dealerCode" type="hidden"/>
238 + </div>
239 + <div class="form-row">
239 <div class="form-item"> 240 <div class="form-item">
240 <label class="required">开票日期:</label> 241 <label class="required">开票日期:</label>
241 <input 242 <input
...@@ -292,6 +293,23 @@ ...@@ -292,6 +293,23 @@
292 <div class="invoice-items-container"> 293 <div class="invoice-items-container">
293 <div v-for="(item, index) in formData.invoiceItems" :key="index" class="invoice-item"> 294 <div v-for="(item, index) in formData.invoiceItems" :key="index" class="invoice-item">
294 <div class="item-row-single"> 295 <div class="item-row-single">
296 + <div class="form-item" style="flex: 1 1 200px; min-width: 150px;">
297 + <label>产品名称:</label>
298 + <select
299 + v-model="item.productName"
300 + class="form-input"
301 + @change="handleProductChange(index)"
302 + >
303 + <option value="">请选择产品</option>
304 + <option
305 + v-for="product in productList"
306 + :key="product.productId"
307 + :value="product.productName"
308 + >
309 + {{ product.productName }}
310 + </option>
311 + </select>
312 + </div>
295 <div class="form-item" style="flex: 0 0 120px;"> 313 <div class="form-item" style="flex: 0 0 120px;">
296 <label>产品编码:</label> 314 <label>产品编码:</label>
297 <input 315 <input
...@@ -300,14 +318,6 @@ ...@@ -300,14 +318,6 @@
300 placeholder="产品编码" 318 placeholder="产品编码"
301 /> 319 />
302 </div> 320 </div>
303 - <div class="form-item" style="flex: 1 1 200px; min-width: 150px;">
304 - <label>产品名称:</label>
305 - <input
306 - v-model="item.productName"
307 - class="form-input"
308 - placeholder="产品名称"
309 - />
310 - </div>
311 <div class="form-item" style="flex: 0 0 80px;"> 321 <div class="form-item" style="flex: 0 0 80px;">
312 <label>数量:</label> 322 <label>数量:</label>
313 <input 323 <input
...@@ -460,8 +470,8 @@ ...@@ -460,8 +470,8 @@
460 <table class="detail-table"> 470 <table class="detail-table">
461 <thead> 471 <thead>
462 <tr> 472 <tr>
463 - <th>产品编码</th>
464 <th>产品名称</th> 473 <th>产品名称</th>
474 + <th>产品编码</th>
465 <th>数量</th> 475 <th>数量</th>
466 <th>单价</th> 476 <th>单价</th>
467 <th>金额</th> 477 <th>金额</th>
...@@ -471,8 +481,8 @@ ...@@ -471,8 +481,8 @@
471 </thead> 481 </thead>
472 <tbody> 482 <tbody>
473 <tr v-for="item in invoiceDetail.invoiceItems" :key="item.invoiceItemId"> 483 <tr v-for="item in invoiceDetail.invoiceItems" :key="item.invoiceItemId">
474 - <td>{{ item.productCode }}</td>
475 <td>{{ item.productName }}</td> 484 <td>{{ item.productName }}</td>
485 + <td>{{ item.productCode }}</td>
476 <td>{{ item.invoiceQty }}</td> 486 <td>{{ item.invoiceQty }}</td>
477 <td>{{ formatCurrency(item.unitPriceNoTax) }}</td> 487 <td>{{ formatCurrency(item.unitPriceNoTax) }}</td>
478 <td class="amount-text">{{ formatCurrency(item.amountNoTax) }}</td> 488 <td class="amount-text">{{ formatCurrency(item.amountNoTax) }}</td>
...@@ -509,6 +519,9 @@ ...@@ -509,6 +519,9 @@
509 import { ref, reactive, computed, onMounted } from 'vue' 519 import { ref, reactive, computed, onMounted } from 'vue'
510 import { ElMessage, ElMessageBox } from 'element-plus' 520 import { ElMessage, ElMessageBox } from 'element-plus'
511 import { invoiceApi, type InvoiceInfo, type InvoiceQueryReq } from '../../api/invoice' 521 import { invoiceApi, type InvoiceInfo, type InvoiceQueryReq } from '../../api/invoice'
522 +import { dealerApi, type DealerInfo } from '../../api/dealer'
523 +import { productApi } from '../../api/product'
524 +import type { ProductSimpleRes } from '../../api/product'
512 525
513 // 响应式数据 526 // 响应式数据
514 const loading = ref(false) 527 const loading = ref(false)
...@@ -517,6 +530,8 @@ const showDialog = ref(false) ...@@ -517,6 +530,8 @@ const showDialog = ref(false)
517 const showDetailDialog = ref(false) 530 const showDetailDialog = ref(false)
518 const isEdit = ref(false) 531 const isEdit = ref(false)
519 const invoiceDetail = ref<InvoiceInfo | null>(null) 532 const invoiceDetail = ref<InvoiceInfo | null>(null)
533 +const dealerList = ref<DealerInfo[]>([])
534 +const productList = ref<ProductSimpleRes[]>([])
520 535
521 // 搜索参数 536 // 搜索参数
522 const searchParams = reactive({ 537 const searchParams = reactive({
...@@ -1029,6 +1044,48 @@ const handleTableViewToggle = () => { ...@@ -1029,6 +1044,48 @@ const handleTableViewToggle = () => {
1029 showMessage('视图切换功能开发中...', 'warning') 1044 showMessage('视图切换功能开发中...', 'warning')
1030 } 1045 }
1031 1046
1047 +// 加载经销商列表
1048 +const loadDealers = async () => {
1049 + try {
1050 + const response = await dealerApi.getAllDealers() as any
1051 + if (response && response.data && Array.isArray(response.data)) {
1052 + dealerList.value = response.data
1053 + }
1054 + } catch (error) {
1055 + console.error('加载经销商列表失败:', error)
1056 + showMessage('加载经销商列表失败', 'error')
1057 + }
1058 +}
1059 +
1060 +// 经销商选择变化处理
1061 +const handleDealerChange = () => {
1062 + const selectedDealer = dealerList.value.find(dealer => dealer.dealerName === formData.dealerName)
1063 + if (selectedDealer) {
1064 + formData.dealerCode = selectedDealer.dealerCode
1065 + }
1066 +}
1067 +
1068 +// 加载产品列表
1069 +const loadProducts = async () => {
1070 + try {
1071 + const response = await productApi.getAllProducts() as any
1072 + if (response && response.data && Array.isArray(response.data)) {
1073 + productList.value = response.data
1074 + }
1075 + } catch (error) {
1076 + console.error('加载产品列表失败:', error)
1077 + showMessage('加载产品列表失败', 'error')
1078 + }
1079 +}
1080 +
1081 +// 产品选择变化处理
1082 +const handleProductChange = (index: number) => {
1083 + const selectedProduct = productList.value.find((product: ProductSimpleRes) => product.productName === formData.invoiceItems[index].productName)
1084 + if (selectedProduct) {
1085 + formData.invoiceItems[index].productCode = selectedProduct.productCode
1086 + }
1087 +}
1088 +
1032 const closeDialog = () => { 1089 const closeDialog = () => {
1033 showDialog.value = false 1090 showDialog.value = false
1034 } 1091 }
...@@ -1041,6 +1098,8 @@ const closeDetailDialog = () => { ...@@ -1041,6 +1098,8 @@ const closeDetailDialog = () => {
1041 // 生命周期 1098 // 生命周期
1042 onMounted(() => { 1099 onMounted(() => {
1043 fetchOrders() 1100 fetchOrders()
1101 + loadDealers()
1102 + loadProducts()
1044 }) 1103 })
1045 </script> 1104 </script>
1046 1105
......
...@@ -235,25 +235,25 @@ ...@@ -235,25 +235,25 @@
235 /> 235 />
236 </div> 236 </div>
237 <div class="form-item"> 237 <div class="form-item">
238 - <label class="required">经销商编码:</label>
239 - <input
240 - v-model="formData.dealerCode"
241 - class="form-input"
242 - placeholder="请输入经销商编码"
243 - required
244 - />
245 - </div>
246 - </div>
247 - <div class="form-row">
248 - <div class="form-item">
249 <label class="required">经销商名称:</label> 238 <label class="required">经销商名称:</label>
250 - <input 239 + <select
251 v-model="formData.dealerName" 240 v-model="formData.dealerName"
252 - class="form-input" 241 + class="form-select"
253 - placeholder="请输入经销商名称" 242 + @change="handleDealerChange"
254 required 243 required
255 - /> 244 + >
245 + <option value="">请选择经销商</option>
246 + <option
247 + v-for="dealer in dealerList"
248 + :key="dealer.dealerId"
249 + :value="dealer.dealerName"
250 + >
251 + {{ dealer.dealerName }}
252 + </option>
253 + </select>
256 </div> 254 </div>
255 + </div>
256 + <div class="form-row">
257 <div class="form-item"> 257 <div class="form-item">
258 <label class="required">订单日期:</label> 258 <label class="required">订单日期:</label>
259 <input 259 <input
...@@ -263,19 +263,19 @@ ...@@ -263,19 +263,19 @@
263 required 263 required
264 /> 264 />
265 </div> 265 </div>
266 - </div>
267 - <div class="form-row">
268 <div class="form-item"> 266 <div class="form-item">
269 - <label class="required">订单总金额:</label> 267 + <label>订单总金额:</label>
270 <input 268 <input
271 v-model.number="formData.totalAmount" 269 v-model.number="formData.totalAmount"
272 - class="form-input" 270 + class="form-input readonly"
273 type="number" 271 type="number"
274 step="0.01" 272 step="0.01"
275 - placeholder="请输入订单总金额" 273 + placeholder="自动计算"
276 - required 274 + readonly
277 /> 275 />
278 </div> 276 </div>
277 + </div>
278 + <div class="form-row">
279 <div class="form-item"> 279 <div class="form-item">
280 <label>返利金额:</label> 280 <label>返利金额:</label>
281 <input 281 <input
...@@ -286,6 +286,11 @@ ...@@ -286,6 +286,11 @@
286 placeholder="请输入返利金额" 286 placeholder="请输入返利金额"
287 /> 287 />
288 </div> 288 </div>
289 + <!-- 经销商编码字段隐藏,通过选择经销商名称自动填充 -->
290 + <input
291 + v-model="formData.dealerCode"
292 + type="hidden"
293 + />
289 </div> 294 </div>
290 </div> 295 </div>
291 296
...@@ -297,25 +302,34 @@ ...@@ -297,25 +302,34 @@
297 </div> 302 </div>
298 <div class="order-items-container"> 303 <div class="order-items-container">
299 <div v-for="(item, index) in formData.orderItems" :key="index" class="order-item"> 304 <div v-for="(item, index) in formData.orderItems" :key="index" class="order-item">
300 - <div class="item-row-single"> 305 + <div class="item-row-single">
301 - <div class="form-item"> 306 + <div class="form-item">
302 - <label class="required">产品编码:</label> 307 + <label class="required">产品名称:</label>
303 - <input 308 + <select
304 - v-model="item.productCode" 309 + v-model="item.productName"
305 - class="form-input" 310 + class="form-select"
306 - placeholder="请输入产品编码" 311 + @change="handleProductChange(index)"
307 - required 312 + required
308 - /> 313 + >
309 - </div> 314 + <option value="">请选择产品</option>
310 - <div class="form-item"> 315 + <option
311 - <label class="required">产品名称:</label> 316 + v-for="product in productList"
312 - <input 317 + :key="product.productId"
313 - v-model="item.productName" 318 + :value="product.productName"
314 - class="form-input" 319 + >
315 - placeholder="请输入产品名称" 320 + {{ product.productName }}
316 - required 321 + </option>
317 - /> 322 + </select>
318 - </div> 323 + </div>
324 + <div class="form-item">
325 + <label class="required">产品编码:</label>
326 + <input
327 + v-model="item.productCode"
328 + class="form-input readonly"
329 + placeholder="自动填充"
330 + readonly
331 + />
332 + </div>
319 <div class="form-item"> 333 <div class="form-item">
320 <label class="required">商品数量:</label> 334 <label class="required">商品数量:</label>
321 <input 335 <input
...@@ -343,9 +357,10 @@ ...@@ -343,9 +357,10 @@
343 <label>明细金额:</label> 357 <label>明细金额:</label>
344 <input 358 <input
345 v-model.number="item.itemAmount" 359 v-model.number="item.itemAmount"
346 - class="form-input" 360 + class="form-input readonly"
347 type="number" 361 type="number"
348 step="0.01" 362 step="0.01"
363 + placeholder="自动计算"
349 readonly 364 readonly
350 /> 365 />
351 </div> 366 </div>
...@@ -420,8 +435,8 @@ ...@@ -420,8 +435,8 @@
420 <table class="detail-table"> 435 <table class="detail-table">
421 <thead> 436 <thead>
422 <tr> 437 <tr>
423 - <th>产品编码</th>
424 <th>产品名称</th> 438 <th>产品名称</th>
439 + <th>产品编码</th>
425 <th>商品数量</th> 440 <th>商品数量</th>
426 <th>单价</th> 441 <th>单价</th>
427 <th>明细金额</th> 442 <th>明细金额</th>
...@@ -429,8 +444,8 @@ ...@@ -429,8 +444,8 @@
429 </thead> 444 </thead>
430 <tbody> 445 <tbody>
431 <tr v-for="item in orderDetail.orderItems" :key="item.itemId"> 446 <tr v-for="item in orderDetail.orderItems" :key="item.itemId">
432 - <td>{{ item.productCode }}</td>
433 <td>{{ item.productName }}</td> 447 <td>{{ item.productName }}</td>
448 + <td>{{ item.productCode }}</td>
434 <td>{{ item.productQty }}</td> 449 <td>{{ item.productQty }}</td>
435 <td>{{ formatCurrency(item.unitPrice) }}</td> 450 <td>{{ formatCurrency(item.unitPrice) }}</td>
436 <td>{{ formatCurrency(item.itemAmount) }}</td> 451 <td>{{ formatCurrency(item.itemAmount) }}</td>
...@@ -449,6 +464,9 @@ ...@@ -449,6 +464,9 @@
449 import { ref, reactive, computed, onMounted } from 'vue' 464 import { ref, reactive, computed, onMounted } from 'vue'
450 import { ElMessage, ElMessageBox } from 'element-plus' 465 import { ElMessage, ElMessageBox } from 'element-plus'
451 import { orderApi, type OrderInfo, type OrderQueryReq, type OrderAddReq, type OrderUpdateReq, type OrderItemAddReq } from '../../api/order' 466 import { orderApi, type OrderInfo, type OrderQueryReq, type OrderAddReq, type OrderUpdateReq, type OrderItemAddReq } from '../../api/order'
467 +import { dealerApi, type DealerInfo } from '../../api/dealer'
468 +import { productApi } from '../../api/product'
469 +import type { ProductSimpleRes } from '../../api/product'
452 470
453 // 响应式数据 471 // 响应式数据
454 const loading = ref(false) 472 const loading = ref(false)
...@@ -458,6 +476,8 @@ const showDialog = ref(false) ...@@ -458,6 +476,8 @@ const showDialog = ref(false)
458 const showDetailDialog = ref(false) 476 const showDetailDialog = ref(false)
459 const isEdit = ref(false) 477 const isEdit = ref(false)
460 const orderDetail = ref<OrderInfo | null>(null) 478 const orderDetail = ref<OrderInfo | null>(null)
479 +const dealerList = ref<DealerInfo[]>([])
480 +const productList = ref<ProductSimpleRes[]>([])
461 481
462 // 搜索参数 482 // 搜索参数
463 const searchParams = reactive<OrderQueryReq>({ 483 const searchParams = reactive<OrderQueryReq>({
...@@ -701,6 +721,15 @@ const handleEdit = async (order: OrderInfo) => { ...@@ -701,6 +721,15 @@ const handleEdit = async (order: OrderInfo) => {
701 verifyStatus: response.verifyStatus, 721 verifyStatus: response.verifyStatus,
702 orderItems: response.orderItems || [] 722 orderItems: response.orderItems || []
703 }) 723 })
724 + // 编辑时重新计算总金额,确保数据一致性
725 + calculateTotalAmount()
726 + // 编辑时设置经销商编码(如果经销商名称已选择)
727 + if (formData.dealerName) {
728 + const selectedDealer = dealerList.value.find(dealer => dealer.dealerName === formData.dealerName)
729 + if (selectedDealer) {
730 + formData.dealerCode = selectedDealer.dealerCode
731 + }
732 + }
704 showDialog.value = true 733 showDialog.value = true
705 } else { 734 } else {
706 showMessage('获取订单详情失败', 'error') 735 showMessage('获取订单详情失败', 'error')
...@@ -880,10 +909,14 @@ const addOrderItem = () => { ...@@ -880,10 +909,14 @@ const addOrderItem = () => {
880 unitPrice: 0, 909 unitPrice: 0,
881 itemAmount: 0 910 itemAmount: 0
882 }) 911 })
912 + // 重新计算总金额
913 + calculateTotalAmount()
883 } 914 }
884 915
885 const removeOrderItem = (index: number) => { 916 const removeOrderItem = (index: number) => {
886 formData.orderItems.splice(index, 1) 917 formData.orderItems.splice(index, 1)
918 + // 重新计算总金额
919 + calculateTotalAmount()
887 } 920 }
888 921
889 const calculateItemTotal = (index: number) => { 922 const calculateItemTotal = (index: number) => {
...@@ -891,6 +924,16 @@ const calculateItemTotal = (index: number) => { ...@@ -891,6 +924,16 @@ const calculateItemTotal = (index: number) => {
891 if (item.productQty && item.unitPrice) { 924 if (item.productQty && item.unitPrice) {
892 item.itemAmount = item.productQty * item.unitPrice 925 item.itemAmount = item.productQty * item.unitPrice
893 } 926 }
927 + // 重新计算订单总金额
928 + calculateTotalAmount()
929 +}
930 +
931 +// 计算订单总金额
932 +const calculateTotalAmount = () => {
933 + const total = formData.orderItems.reduce((sum, item) => {
934 + return sum + (item.itemAmount || 0)
935 + }, 0)
936 + formData.totalAmount = total
894 } 937 }
895 938
896 const handleSubmit = async () => { 939 const handleSubmit = async () => {
...@@ -952,6 +995,48 @@ const handleSubmit = async () => { ...@@ -952,6 +995,48 @@ const handleSubmit = async () => {
952 } 995 }
953 } 996 }
954 997
998 +// 经销商选择处理
999 +const handleDealerChange = () => {
1000 + const selectedDealer = dealerList.value.find(dealer => dealer.dealerName === formData.dealerName)
1001 + if (selectedDealer) {
1002 + formData.dealerCode = selectedDealer.dealerCode
1003 + }
1004 +}
1005 +
1006 +// 加载经销商列表
1007 +const loadDealers = async () => {
1008 + try {
1009 + const response = await dealerApi.getAllDealers() as any
1010 + if (response && response.data && Array.isArray(response.data)) {
1011 + dealerList.value = response.data
1012 + }
1013 + } catch (error) {
1014 + console.error('加载经销商列表失败:', error)
1015 + showMessage('加载经销商列表失败', 'error')
1016 + }
1017 +}
1018 +
1019 +// 产品选择处理
1020 +const handleProductChange = (index: number) => {
1021 + const selectedProduct = productList.value.find((product: ProductSimpleRes) => product.productName === formData.orderItems[index].productName)
1022 + if (selectedProduct) {
1023 + formData.orderItems[index].productCode = selectedProduct.productCode
1024 + }
1025 +}
1026 +
1027 +// 加载产品列表
1028 +const loadProducts = async () => {
1029 + try {
1030 + const response = await productApi.getAllProducts() as any
1031 + if (response && response.data && Array.isArray(response.data)) {
1032 + productList.value = response.data
1033 + }
1034 + } catch (error) {
1035 + console.error('加载产品列表失败:', error)
1036 + showMessage('加载产品列表失败', 'error')
1037 + }
1038 +}
1039 +
955 const closeDialog = () => { 1040 const closeDialog = () => {
956 showDialog.value = false 1041 showDialog.value = false
957 formData.orderItems = [] 1042 formData.orderItems = []
...@@ -965,6 +1050,8 @@ const closeDetailDialog = () => { ...@@ -965,6 +1050,8 @@ const closeDetailDialog = () => {
965 // 生命周期 1050 // 生命周期
966 onMounted(() => { 1051 onMounted(() => {
967 fetchOrders() 1052 fetchOrders()
1053 + loadDealers()
1054 + loadProducts()
968 }) 1055 })
969 </script> 1056 </script>
970 1057
...@@ -1438,7 +1525,26 @@ onMounted(() => { ...@@ -1438,7 +1525,26 @@ onMounted(() => {
1438 border: 1px solid #ddd; 1525 border: 1px solid #ddd;
1439 border-radius: 4px; 1526 border-radius: 4px;
1440 font-size: 12px; 1527 font-size: 12px;
1441 - width: 200px; 1528 + width: 250px;
1529 + height: 32px;
1530 + box-sizing: border-box;
1531 +}
1532 +
1533 +.form-select {
1534 + background-color: #fff;
1535 + cursor: pointer;
1536 +}
1537 +
1538 +.form-select:focus {
1539 + outline: none;
1540 + border-color: #007bff;
1541 + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
1542 +}
1543 +
1544 +.form-input.readonly {
1545 + background-color: #f5f5f5;
1546 + color: #666;
1547 + cursor: not-allowed;
1442 } 1548 }
1443 1549
1444 /* 订单明细中的输入框样式 - 优化空间利用 */ 1550 /* 订单明细中的输入框样式 - 优化空间利用 */
...@@ -1456,30 +1562,38 @@ onMounted(() => { ...@@ -1456,30 +1562,38 @@ onMounted(() => {
1456 min-width: 0; 1562 min-width: 0;
1457 } 1563 }
1458 1564
1459 -/* 产品编码字段 */ 1565 +/* 产品名称字段 - 占用最多空间,增加长度(现在在第一位) */
1460 .order-item .form-item:nth-child(1) { 1566 .order-item .form-item:nth-child(1) {
1461 - flex: 0 0 120px; 1567 + flex: 1.5 1 200px;
1568 + min-width: 150px;
1462 } 1569 }
1463 1570
1464 -/* 产品名称字段 - 占用更多空间 */ 1571 +/* 产品编码字段 - 固定宽度(现在在第二位),往左移动 */
1465 .order-item .form-item:nth-child(2) { 1572 .order-item .form-item:nth-child(2) {
1466 - flex: 1 1 200px; 1573 + flex: 0 0 180px;
1467 - min-width: 150px; 1574 + margin-left: -15px;
1468 } 1575 }
1469 1576
1470 -/* 数量字段 */ 1577 +/* 产品编码输入框宽度调整为90% */
1578 +.order-item .form-item:nth-child(2) .form-input {
1579 + width: 90%;
1580 +}
1581 +
1582 +/* 数量字段 - 较小宽度,往左移动 */
1471 .order-item .form-item:nth-child(3) { 1583 .order-item .form-item:nth-child(3) {
1472 flex: 0 0 80px; 1584 flex: 0 0 80px;
1585 + margin-left: -10px;
1473 } 1586 }
1474 1587
1475 -/* 单价字段 */ 1588 +/* 单价字段 - 中等宽度,往左移动 */
1476 .order-item .form-item:nth-child(4) { 1589 .order-item .form-item:nth-child(4) {
1477 - flex: 0 0 100px; 1590 + flex: 0 0 110px;
1591 + margin-left: -5px;
1478 } 1592 }
1479 1593
1480 -/* 明细金额字段 */ 1594 +/* 明细金额字段 - 中等宽度 */
1481 .order-item .form-item:nth-child(5) { 1595 .order-item .form-item:nth-child(5) {
1482 - flex: 0 0 100px; 1596 + flex: 0 0 110px;
1483 } 1597 }
1484 1598
1485 .order-item .form-item label { 1599 .order-item .form-item label {
...@@ -1509,16 +1623,19 @@ onMounted(() => { ...@@ -1509,16 +1623,19 @@ onMounted(() => {
1509 .order-items-container { 1623 .order-items-container {
1510 border: 1px solid #eee; 1624 border: 1px solid #eee;
1511 border-radius: 4px; 1625 border-radius: 4px;
1512 - padding: 6px; 1626 + padding: 8px;
1513 background: #f8f9fa; 1627 background: #f8f9fa;
1628 + width: 100%;
1514 } 1629 }
1515 1630
1516 .order-item { 1631 .order-item {
1517 background: white; 1632 background: white;
1518 border: 1px solid #ddd; 1633 border: 1px solid #ddd;
1519 border-radius: 4px; 1634 border-radius: 4px;
1520 - padding: 6px; 1635 + padding: 8px;
1521 - margin-bottom: 6px; 1636 + margin-bottom: 8px;
1637 + width: 100%;
1638 + box-sizing: border-box;
1522 } 1639 }
1523 1640
1524 .order-item:last-child { 1641 .order-item:last-child {
...@@ -1539,22 +1656,28 @@ onMounted(() => { ...@@ -1539,22 +1656,28 @@ onMounted(() => {
1539 /* 单行布局 - 所有字段在一行显示,优化空间利用 */ 1656 /* 单行布局 - 所有字段在一行显示,优化空间利用 */
1540 .item-row-single { 1657 .item-row-single {
1541 display: flex; 1658 display: flex;
1542 - gap: 4px; 1659 + gap: 8px;
1543 align-items: end; 1660 align-items: end;
1544 flex-wrap: nowrap; 1661 flex-wrap: nowrap;
1545 - justify-content: space-between; 1662 + width: 100%;
1546 } 1663 }
1547 1664
1548 .remove-item-btn { 1665 .remove-item-btn {
1549 - padding: 4px 8px; 1666 + padding: 6px 12px;
1550 background: #dc3545; 1667 background: #dc3545;
1551 color: white; 1668 color: white;
1552 border: none; 1669 border: none;
1553 border-radius: 4px; 1670 border-radius: 4px;
1554 cursor: pointer; 1671 cursor: pointer;
1555 font-size: 11px; 1672 font-size: 11px;
1556 - height: 28px; 1673 + height: 32px;
1557 align-self: end; 1674 align-self: end;
1675 + transition: background-color 0.2s;
1676 + flex-shrink: 0;
1677 +}
1678 +
1679 +.remove-item-btn:hover {
1680 + background: #c82333;
1558 } 1681 }
1559 1682
1560 .form-actions { 1683 .form-actions {
......
1 -{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@vue/shared/dist/shared.d.ts","./node_modules/@vue/reactivity/dist/reactivity.d.ts","./node_modules/@vue/runtime-core/dist/runtime-core.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","./node_modules/vue/jsx-runtime/index.d.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@vue/compiler-core/dist/compiler-core.d.ts","./node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","./node_modules/vue/dist/vue.d.mts","./src/app.vue.ts","./node_modules/element-plus/es/utils/vue3.3.polyfill.d.ts","./node_modules/dayjs/locale/types.d.ts","./node_modules/dayjs/locale/index.d.ts","./node_modules/dayjs/index.d.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./node_modules/async-validator/dist-types/interface.d.ts","./node_modules/async-validator/dist-types/index.d.ts","./node_modules/vue-demi/lib/index.d.ts","./node_modules/@vueuse/shared/index.d.ts","./node_modules/@vueuse/core/index.d.ts","./node_modules/memoize-one/dist/memoize-one.d.ts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/vue-router/dist/vue-router.d.ts","./node_modules/@ctrl/tinycolor/dist/interfaces.d.ts","./node_modules/@ctrl/tinycolor/dist/index.d.ts","./node_modules/@ctrl/tinycolor/dist/css-color-names.d.ts","./node_modules/@ctrl/tinycolor/dist/readability.d.ts","./node_modules/@ctrl/tinycolor/dist/to-ms-filter.d.ts","./node_modules/@ctrl/tinycolor/dist/from-ratio.d.ts","./node_modules/@ctrl/tinycolor/dist/format-input.d.ts","./node_modules/@ctrl/tinycolor/dist/random.d.ts","./node_modules/@ctrl/tinycolor/dist/conversion.d.ts","./node_modules/@ctrl/tinycolor/dist/public_api.d.ts","./node_modules/element-plus/es/index.d.ts","./node_modules/pinia/dist/pinia.d.ts","./src/types/index.ts","./node_modules/axios/index.d.ts","./src/views/test.vue.ts","./node_modules/@types/nprogress/index.d.ts","./src/router/index.ts","./src/utils/request.ts","./src/api/auth.ts","./node_modules/@types/js-cookie/index.d.ts","./node_modules/@types/js-cookie/index.d.mts","./src/utils/auth.ts","./src/stores/modules/user.ts","./src/stores/modules/app.ts","./src/components/layout/header.vue.ts","./src/api/menu.ts","./src/stores/modules/permission.ts","./src/components/layout/sidebaritem.vue.ts","./src/components/layout/sidebar.vue.ts","./src/layouts/index.vue.ts","./src/utils/index.ts","./src/views/dashboard/index.vue.ts","./src/views/error/404.vue.ts","./src/views/login/index.vue.ts","./src/views/sys/dict/index.vue.ts","./src/views/sys/log/index.vue.ts","./src/views/sys/menu/index.vue.ts","./src/views/sys/role/index.vue.ts","./src/views/sys/user/index.vue.ts","./__vls_types.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/importmeta.d.ts","./node_modules/vite/client.d.ts","./env.d.ts","./src/main.ts","./src/api/dict.ts","./src/api/log.ts","./src/api/role.ts","./src/api/user.ts","./auto-imports.d.ts","./components.d.ts","./node_modules/element-plus/global.d.ts","./src/components/layout/header.vue","./src/views/test.vue","./src/views/login/index.vue","./src/views/error/404.vue"],"fileInfos":[{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0"],"root":[57,98,100,[102,104],[107,125],[132,139]],"options":{"composite":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitThis":true,"skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true},"fileIdsList":[[48,50,51,56,58,85,97,139,140],[56,58,85,97,139,140],[56,58,85,97,110,113,114,140],[56,58,85,97,131,139,140],[52],[86],[87],[86,87,88,89,90,91,92,93,94],[81],[82,83],[105],[62,64,65,66,67,68,69,70,71,72,73,74],[62,63,65,66,67,68,69,70,71,72,73,74],[63,64,65,66,67,68,69,70,71,72,73,74],[62,63,64,66,67,68,69,70,71,72,73,74],[62,63,64,65,67,68,69,70,71,72,73,74],[62,63,64,65,66,68,69,70,71,72,73,74],[62,63,64,65,66,67,69,70,71,72,73,74],[62,63,64,65,66,67,68,70,71,72,73,74],[62,63,64,65,66,67,68,69,71,72,73,74],[62,63,64,65,66,67,68,69,70,72,73,74],[62,63,64,65,66,67,68,69,70,71,73,74],[62,63,64,65,66,67,68,69,70,71,72,74],[62,63,64,65,66,67,68,69,70,71,72,73],[46,52,53],[54],[46],[46,47,48,50],[47,48,49,50],[77,78],[77],[75],[60],[59],[49,56,58,61,74,76,79,80,82,84,85,95,97,139,140],[56,58,85,96,97,139],[56,58,77,85,139,140],[130],[126],[127],[128,129],[50,55],[50],[51,98,103],[51,56,58,85,97,139,140],[51,56,58,85,96,97,108,109,139,140],[51,56,58,85,97,98,109,112,113,139,140],[51,56,58,85,97,98,139,140],[51,56,58,85,97,98,109,110,114,139,140],[51,56,57,58,85,97,102,139,140],[51,85,100,101,131],[51,56,58,85,97,98,102,108,111,139,140],[51,56,58,85,96,97,98,104,107,139,140],[51],[51,106],[51,96,99,102,108],[51,56,58,85,97,108,116,139,140],[51,56,58,85,96,97,98,108,139,140],[51,56,58,85,96,97,98,139,140],[131],[49,56,58,61,74,76,79,80,82,84,85,95,97,141],[56,58,85,97,141],[56,58,77,85,141],[48,50,51,56,58,85,97,101,142],[48,50,51,56,58,85,97,140,142],[48,50,51,56,58,85,97,101,141],[48,50,51,56,58,85,97,141],[132,133],[134],[56,58,85,97,135,141],[51,56,58,85,97,102,141,143],[51,85,96,135,144],[51,56,58,85,97,98,141],[51,56,58,85,97,98,102,108,111,141],[51,56,58,85,96,97,98,104,107,141]],"referencedMap":[[125,1],[138,2],[139,3],[132,4],[53,5],[94,6],[92,6],[91,7],[87,6],[95,8],[93,7],[89,7],[90,7],[82,9],[84,10],[106,11],[63,12],[64,13],[62,14],[65,15],[66,16],[67,17],[68,18],[69,19],[70,20],[71,21],[72,22],[73,23],[74,24],[54,25],[55,26],[47,27],[48,28],[50,29],[79,30],[78,31],[76,32],[61,33],[60,34],[96,35],[58,2],[140,36],[97,37],[131,38],[127,39],[128,40],[130,41],[77,2],[85,2],[56,42],[51,43],[104,44],[134,44],[135,44],[111,44],[136,44],[137,44],[57,45],[110,46],[114,47],[113,48],[115,49],[133,50],[102,51],[109,48],[112,52],[108,53],[98,54],[107,55],[116,54],[103,56],[117,57],[118,45],[119,58],[120,59],[121,59],[122,59],[123,59],[124,59],[100,45]],"exportedModulesMap":[[125,1],[138,44],[139,44],[132,60],[53,5],[94,6],[92,6],[91,7],[87,6],[95,8],[93,7],[89,7],[90,7],[82,9],[84,10],[106,11],[63,12],[64,13],[62,14],[65,15],[66,16],[67,17],[68,18],[69,19],[70,20],[71,21],[72,22],[73,23],[74,24],[54,25],[55,26],[47,27],[48,28],[50,29],[79,30],[78,31],[76,32],[61,33],[60,34],[96,61],[58,62],[140,44],[97,63],[131,38],[127,64],[126,65],[128,66],[129,67],[77,62],[85,62],[56,42],[51,43],[104,44],[134,68],[135,69],[111,44],[136,70],[137,71],[57,45],[110,46],[114,47],[113,48],[115,49],[102,72],[109,73],[112,74],[108,75],[98,54],[107,55],[116,54],[103,56],[117,57],[118,45],[119,58],[120,59],[121,59],[122,59],[123,59],[124,59],[100,45]],"semanticDiagnosticsPerFile":[125,138,139,132,53,52,94,88,92,91,87,86,95,93,89,90,82,84,81,83,106,105,63,64,62,65,66,67,68,69,70,71,72,73,74,101,54,55,47,48,50,46,79,78,76,75,99,49,61,60,59,96,58,140,80,97,44,45,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,1,131,127,126,128,129,130,77,85,56,51,104,134,135,111,136,137,57,110,114,113,115,133,102,109,112,108,98,107,116,103,117,118,119,120,121,122,123,124,100],"affectedFilesPendingEmit":[104,134,135,111,136,137,57,110,114,113,115,133,102,109,112,108,98,107,116,103,117,118,119,120,121,122,123,124,100],"emitSignatures":[57,98,100,102,103,104,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,137]},"version":"5.2.2"}
...\ No newline at end of file ...\ No newline at end of file
1 +{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@vue/shared/dist/shared.d.ts","./node_modules/@vue/reactivity/dist/reactivity.d.ts","./node_modules/@vue/runtime-core/dist/runtime-core.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","./node_modules/vue/jsx-runtime/index.d.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@vue/compiler-core/dist/compiler-core.d.ts","./node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","./node_modules/vue/dist/vue.d.mts","./src/app.vue.ts","./node_modules/element-plus/es/utils/vue3.3.polyfill.d.ts","./node_modules/dayjs/locale/types.d.ts","./node_modules/dayjs/locale/index.d.ts","./node_modules/dayjs/index.d.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./node_modules/async-validator/dist-types/interface.d.ts","./node_modules/async-validator/dist-types/index.d.ts","./node_modules/vue-demi/lib/index.d.ts","./node_modules/@vueuse/shared/index.d.ts","./node_modules/@vueuse/core/index.d.ts","./node_modules/memoize-one/dist/memoize-one.d.ts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/vue-router/dist/vue-router.d.ts","./node_modules/@ctrl/tinycolor/dist/interfaces.d.ts","./node_modules/@ctrl/tinycolor/dist/index.d.ts","./node_modules/@ctrl/tinycolor/dist/css-color-names.d.ts","./node_modules/@ctrl/tinycolor/dist/readability.d.ts","./node_modules/@ctrl/tinycolor/dist/to-ms-filter.d.ts","./node_modules/@ctrl/tinycolor/dist/from-ratio.d.ts","./node_modules/@ctrl/tinycolor/dist/format-input.d.ts","./node_modules/@ctrl/tinycolor/dist/random.d.ts","./node_modules/@ctrl/tinycolor/dist/conversion.d.ts","./node_modules/@ctrl/tinycolor/dist/public_api.d.ts","./node_modules/element-plus/es/index.d.ts","./node_modules/pinia/dist/pinia.d.ts","./src/types/index.ts","./node_modules/axios/index.d.ts","./src/api/auth.ts","./node_modules/@types/js-cookie/index.d.ts","./node_modules/@types/js-cookie/index.d.mts","./src/utils/auth.ts","./src/stores/modules/user.ts","./src/stores/modules/app.ts","./src/components/layout/header.vue.ts","./src/api/menu.ts","./src/views/login/index.vue.ts","./src/utils/request.ts","./src/layouts/mainlayout.vue.ts","./src/views/dashboard/index.vue.ts","./src/api/user.ts","./src/api/role.ts","./src/views/users/index.vue.ts","./src/views/test.vue.ts","./node_modules/@types/nprogress/index.d.ts","./src/api/product.ts","./src/views/product/index.vue.ts","./src/views/sys/role/index.vue.ts","./src/views/sys/menu/index.vue.ts","./src/api/dict.ts","./src/views/sys/dict/index.vue.ts","./src/api/dictitem.ts","./src/views/sys/dict-item/index.vue.ts","./node_modules/@element-plus/icons-vue/dist/types/components/add-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/aim.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/alarm-clock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/apple.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-down-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-down.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-left-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-right-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-up-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/avatar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/back.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/baseball.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/basketball.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bell-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bell.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bicycle.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bowl.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/briefcase.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/brush-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/brush.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/burger.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/calendar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/camera-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/camera.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-bottom.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-top.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cellphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-dot-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-dot-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-line-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-line-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/check.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cherry.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chicken.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chrome-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-check-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-check.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-close-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-close.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-plus-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/clock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/close-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/close.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coffee-cup.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coffee.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coin.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cold-drink.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/collection-tag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/collection.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/comment.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/compass.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/connection.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coordinate.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/copy-document.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cpu.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/credit-card.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/crop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-arrow-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-arrow-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-caret.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-analysis.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-board.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-line.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dessert.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/discount.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dish-dot.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dish.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-add.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-copy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/download.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/drizzling.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/edit-pen.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/edit.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/eleme-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/eleme.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/element-plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/expand.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/failed.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/female.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/files.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/film.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/filter.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/finished.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/first-aid-kit.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/flag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-add.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-opened.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/food.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/football.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fork-spoon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fries.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/full-screen.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-square-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/gold-medal.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goods-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goods.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/grape.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/grid.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/guide.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/handbag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/headset.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/help-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/help.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/hide.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/histogram.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/home-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/hot-water.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/house.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-drink.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-tea.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/info-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/iphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/key.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/knife-fork.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lightning.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/link.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/list.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/loading.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location-information.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lollipop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/magic-stick.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/magnet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/male.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/management.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/map-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/medal.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/memo.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/menu.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/message-box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/message.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mic.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/microphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/milk-tea.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/minus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/money.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/monitor.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/moon-night.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/moon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/more-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/more.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mostly-cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mouse.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mug.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mute-notification.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mute.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/no-smoking.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/notebook.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/notification.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/odometer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/office-building.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/open.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/operation.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/opportunity.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/orange.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/paperclip.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/partly-cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pear.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/phone-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/phone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture-rounded.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pie-chart.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/place.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/platform.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pointer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/position.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/postcard.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pouring.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/present.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/price-tag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/printer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/promotion.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/quartz-watch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/question-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/rank.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/reading-lamp.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/reading.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refrigerator.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/remove-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/scale-to-original.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/school.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/scissor.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/search.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/select.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sell.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/semi-select.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/service.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/set-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/setting.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/share.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ship.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-bag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-cart-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-cart.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-trolley.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/smoking.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/soccer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sold-out.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort-down.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/stamp.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/star-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/star.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/stopwatch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/success-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sugar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/suitcase-line.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/suitcase.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunny.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunrise.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunset.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch-button.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/takeaway-box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ticket.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/tickets.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/timer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/toilet-paper.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/tools.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trend-charts.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trophy-base.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trophy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/turn-off.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/umbrella.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/unlock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/upload-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/upload.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/user-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/user.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/van.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-camera-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-camera.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-pause.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-play.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/view.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wallet-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wallet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warn-triangle-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warning-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warning.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/watch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/watermelon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wind-power.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/zoom-in.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/zoom-out.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/index.d.ts","./node_modules/@element-plus/icons-vue/dist/types/index.d.ts","./src/api/log.ts","./src/utils/index.ts","./src/views/sys/log/index.vue.ts","./src/api/dealer.ts","./src/views/dealer/index.vue.ts","./src/api/order.ts","./src/views/order/index.vue.ts","./src/api/delivery.ts","./src/views/delivery/index.vue.ts","./src/api/invoice.ts","./src/views/invoice/index.vue.ts","./node_modules/echarts/types/dist/echarts.d.ts","./node_modules/echarts/index.d.ts","./src/api/rebate.ts","./src/views/rebate/index.vue.ts","./src/api/exceptionworkorder.ts","./src/views/exceptionworkorder/index.vue.ts","./src/views/settings/index.vue.ts","./src/router/index.ts","./src/stores/modules/permission.ts","./src/components/layout/sidebaritem.vue.ts","./src/components/layout/sidebar.vue.ts","./src/layouts/index.vue.ts","./src/views/error/404.vue.ts","./__vls_types.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/importmeta.d.ts","./node_modules/vite/client.d.ts","./env.d.ts","./src/main.ts","./auto-imports.d.ts","./components.d.ts","./node_modules/element-plus/global.d.ts","./src/views/test.vue","./src/views/error/404.vue","./src/components/layout/header.vue","./src/views/login/index.vue"],"fileInfos":[{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0",{"version":"0","affectsGlobalScope":true},"0","0"],"root":[57,98,100,[103,115],[117,124],[420,430],[433,444],[451,454]],"options":{"composite":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitThis":true,"skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true},"fileIdsList":[[48,50,51,56,58,85,97,454,455],[96],[56,58,85,96,97,106,440,441,455],[56,58,85,97,450,454,455],[52],[86],[87],[86,87,88,89,90,91,92,93,94],[56,58,85,97,454,455],[125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417],[418],[81],[82,83],[101],[62,64,65,66,67,68,69,70,71,72,73,74],[62,63,65,66,67,68,69,70,71,72,73,74],[63,64,65,66,67,68,69,70,71,72,73,74],[62,63,64,66,67,68,69,70,71,72,73,74],[62,63,64,65,67,68,69,70,71,72,73,74],[62,63,64,65,66,68,69,70,71,72,73,74],[62,63,64,65,66,67,69,70,71,72,73,74],[62,63,64,65,66,67,68,70,71,72,73,74],[62,63,64,65,66,67,68,69,71,72,73,74],[62,63,64,65,66,67,68,69,70,72,73,74],[62,63,64,65,66,67,68,69,70,71,73,74],[62,63,64,65,66,67,68,69,70,71,72,74],[62,63,64,65,66,67,68,69,70,71,72,73],[46,52,53],[54],[46],[46,47,48,50],[47,48,49,50],[77,78],[77],[75],[60],[59],[431],[49,56,58,61,74,76,79,80,82,84,85,95,97,454,455],[56,58,85,96,97,454],[56,58,77,85,454,455],[449],[445],[446],[447,448],[50,55],[50],[51,98,99],[51,99],[51,109],[51,56,58,85,97,454,455],[51,56,58,85,96,97,104,105,454,455],[51,56,58,85,97,98,105,439,440,454,455],[51,56,58,85,97,98,454,455],[51,56,58,85,97,98,105,106,441,454,455],[51,56,58,85,97,100,109,454,455],[51,56,57,58,85,96,97,438,450,454,455],[51,85,108,110,111,114,115,116,118,119,120,122,124,422,424,426,428,430,434,436,437,450,451],[51,56,58,85,97,98,104,107,438,454,455],[51,56,58,85,96,97,98,100,103,454,455],[51],[51,102],[51,96,99,104,438],[51,56,58,85,97,109,454,455],[51,56,58,85,97,423,454,455],[51,56,58,85,96,97,117,423,427,454,455],[51,56,58,61,85,96,97,419,435,454,455],[51,56,58,85,96,97,117,423,429,454,455],[51,56,58,85,97,99,454,455],[51,56,58,85,96,97,117,423,425,454,455],[51,56,58,85,97,117,454,455],[51,56,58,85,96,97,419,421,432,433,454,455],[51,56,58,85,97,121,123,454,455],[51,56,58,85,97,121,454,455],[51,56,58,85,96,97,419,420,421,454,455],[51,56,58,85,97,107,454,455],[51,56,58,85,97,113,454,455],[51,56,58,85,97,112,113,454,455],[51,56,58,85,97,438,456,457],[51,98,109],[450],[49,56,58,61,74,76,79,80,82,84,85,95,97,456],[56,58,85,97,456],[56,58,77,85,456],[48,50,51,56,58,85,97,458,459],[48,50,51,56,58,85,97,455,458],[48,50,51,56,58,85,97,116,459],[48,50,51,56,58,85,97,116,456],[48,50,51,56,58,85,97,456],[121,452],[420],[56,58,85,97,113,456],[451],[51,85,96,113],[51,56,58,85,97,98,456],[51,56,58,85,97,98,104,107,438,456],[51,56,58,85,96,97,98,100,103,456]],"referencedMap":[[444,1],[453,2],[454,3],[451,4],[53,5],[94,6],[92,6],[91,7],[87,6],[95,8],[93,7],[89,7],[90,7],[125,9],[126,9],[127,9],[128,9],[129,9],[130,9],[131,9],[132,9],[133,9],[134,9],[135,9],[136,9],[137,9],[138,9],[139,9],[140,9],[141,9],[142,9],[143,9],[144,9],[145,9],[146,9],[147,9],[148,9],[149,9],[150,9],[151,9],[152,9],[153,9],[154,9],[155,9],[156,9],[157,9],[158,9],[159,9],[160,9],[161,9],[162,9],[163,9],[164,9],[165,9],[166,9],[167,9],[168,9],[169,9],[170,9],[171,9],[172,9],[173,9],[174,9],[175,9],[176,9],[177,9],[178,9],[179,9],[180,9],[181,9],[182,9],[183,9],[184,9],[185,9],[186,9],[187,9],[188,9],[189,9],[190,9],[191,9],[192,9],[193,9],[194,9],[195,9],[196,9],[197,9],[198,9],[199,9],[200,9],[201,9],[202,9],[203,9],[204,9],[205,9],[206,9],[207,9],[208,9],[209,9],[210,9],[211,9],[212,9],[213,9],[214,9],[215,9],[216,9],[217,9],[218,9],[219,9],[220,9],[221,9],[222,9],[223,9],[224,9],[225,9],[226,9],[227,9],[228,9],[229,9],[230,9],[231,9],[232,9],[233,9],[234,9],[235,9],[236,9],[237,9],[238,9],[239,9],[240,9],[241,9],[242,9],[243,9],[244,9],[245,9],[246,9],[247,9],[248,9],[249,9],[250,9],[251,9],[252,9],[253,9],[254,9],[255,9],[256,9],[257,9],[258,9],[259,9],[260,9],[261,9],[262,9],[263,9],[264,9],[265,9],[266,9],[418,10],[267,9],[268,9],[269,9],[270,9],[271,9],[272,9],[273,9],[274,9],[275,9],[276,9],[277,9],[278,9],[279,9],[280,9],[281,9],[282,9],[283,9],[284,9],[285,9],[286,9],[287,9],[288,9],[289,9],[290,9],[291,9],[292,9],[293,9],[294,9],[295,9],[296,9],[297,9],[298,9],[299,9],[300,9],[301,9],[302,9],[303,9],[304,9],[305,9],[306,9],[307,9],[308,9],[309,9],[310,9],[311,9],[312,9],[313,9],[314,9],[315,9],[316,9],[317,9],[318,9],[319,9],[320,9],[321,9],[322,9],[323,9],[324,9],[325,9],[326,9],[327,9],[328,9],[329,9],[330,9],[331,9],[332,9],[333,9],[334,9],[335,9],[336,9],[337,9],[338,9],[339,9],[340,9],[341,9],[342,9],[343,9],[344,9],[345,9],[346,9],[347,9],[348,9],[349,9],[350,9],[351,9],[352,9],[353,9],[354,9],[355,9],[356,9],[357,9],[358,9],[359,9],[360,9],[361,9],[362,9],[363,9],[364,9],[365,9],[366,9],[367,9],[368,9],[369,9],[370,9],[371,9],[372,9],[373,9],[374,9],[375,9],[376,9],[377,9],[378,9],[379,9],[380,9],[381,9],[382,9],[383,9],[384,9],[385,9],[386,9],[387,9],[388,9],[389,9],[390,9],[391,9],[392,9],[393,9],[394,9],[395,9],[396,9],[397,9],[398,9],[399,9],[400,9],[401,9],[402,9],[403,9],[404,9],[405,9],[406,9],[407,9],[408,9],[409,9],[410,9],[411,9],[412,9],[413,9],[414,9],[415,9],[416,9],[417,9],[419,11],[82,12],[84,13],[102,14],[63,15],[64,16],[62,17],[65,18],[66,19],[67,20],[68,21],[69,22],[70,23],[71,24],[72,25],[73,26],[74,27],[54,28],[55,29],[47,30],[48,31],[50,32],[79,33],[78,34],[76,35],[61,36],[60,37],[432,38],[96,39],[58,9],[455,40],[97,41],[450,42],[446,43],[447,44],[449,45],[77,9],[85,9],[56,46],[51,47],[100,48],[423,49],[427,50],[121,50],[123,49],[435,50],[429,50],[420,49],[107,49],[425,50],[117,49],[433,50],[113,49],[112,49],[57,51],[106,52],[441,53],[440,54],[442,55],[110,56],[452,57],[438,58],[105,54],[439,59],[104,60],[98,61],[103,62],[421,61],[109,63],[111,64],[424,65],[428,66],[443,51],[436,67],[430,68],[108,69],[426,70],[118,71],[434,72],[437,51],[124,73],[122,74],[422,75],[120,76],[119,77],[115,51],[114,78]],"exportedModulesMap":[[444,1],[453,79],[454,80],[451,81],[53,5],[94,6],[92,6],[91,7],[87,6],[95,8],[93,7],[89,7],[90,7],[125,9],[126,9],[127,9],[128,9],[129,9],[130,9],[131,9],[132,9],[133,9],[134,9],[135,9],[136,9],[137,9],[138,9],[139,9],[140,9],[141,9],[142,9],[143,9],[144,9],[145,9],[146,9],[147,9],[148,9],[149,9],[150,9],[151,9],[152,9],[153,9],[154,9],[155,9],[156,9],[157,9],[158,9],[159,9],[160,9],[161,9],[162,9],[163,9],[164,9],[165,9],[166,9],[167,9],[168,9],[169,9],[170,9],[171,9],[172,9],[173,9],[174,9],[175,9],[176,9],[177,9],[178,9],[179,9],[180,9],[181,9],[182,9],[183,9],[184,9],[185,9],[186,9],[187,9],[188,9],[189,9],[190,9],[191,9],[192,9],[193,9],[194,9],[195,9],[196,9],[197,9],[198,9],[199,9],[200,9],[201,9],[202,9],[203,9],[204,9],[205,9],[206,9],[207,9],[208,9],[209,9],[210,9],[211,9],[212,9],[213,9],[214,9],[215,9],[216,9],[217,9],[218,9],[219,9],[220,9],[221,9],[222,9],[223,9],[224,9],[225,9],[226,9],[227,9],[228,9],[229,9],[230,9],[231,9],[232,9],[233,9],[234,9],[235,9],[236,9],[237,9],[238,9],[239,9],[240,9],[241,9],[242,9],[243,9],[244,9],[245,9],[246,9],[247,9],[248,9],[249,9],[250,9],[251,9],[252,9],[253,9],[254,9],[255,9],[256,9],[257,9],[258,9],[259,9],[260,9],[261,9],[262,9],[263,9],[264,9],[265,9],[266,9],[418,10],[267,9],[268,9],[269,9],[270,9],[271,9],[272,9],[273,9],[274,9],[275,9],[276,9],[277,9],[278,9],[279,9],[280,9],[281,9],[282,9],[283,9],[284,9],[285,9],[286,9],[287,9],[288,9],[289,9],[290,9],[291,9],[292,9],[293,9],[294,9],[295,9],[296,9],[297,9],[298,9],[299,9],[300,9],[301,9],[302,9],[303,9],[304,9],[305,9],[306,9],[307,9],[308,9],[309,9],[310,9],[311,9],[312,9],[313,9],[314,9],[315,9],[316,9],[317,9],[318,9],[319,9],[320,9],[321,9],[322,9],[323,9],[324,9],[325,9],[326,9],[327,9],[328,9],[329,9],[330,9],[331,9],[332,9],[333,9],[334,9],[335,9],[336,9],[337,9],[338,9],[339,9],[340,9],[341,9],[342,9],[343,9],[344,9],[345,9],[346,9],[347,9],[348,9],[349,9],[350,9],[351,9],[352,9],[353,9],[354,9],[355,9],[356,9],[357,9],[358,9],[359,9],[360,9],[361,9],[362,9],[363,9],[364,9],[365,9],[366,9],[367,9],[368,9],[369,9],[370,9],[371,9],[372,9],[373,9],[374,9],[375,9],[376,9],[377,9],[378,9],[379,9],[380,9],[381,9],[382,9],[383,9],[384,9],[385,9],[386,9],[387,9],[388,9],[389,9],[390,9],[391,9],[392,9],[393,9],[394,9],[395,9],[396,9],[397,9],[398,9],[399,9],[400,9],[401,9],[402,9],[403,9],[404,9],[405,9],[406,9],[407,9],[408,9],[409,9],[410,9],[411,9],[412,9],[413,9],[414,9],[415,9],[416,9],[417,9],[419,11],[82,12],[84,13],[102,14],[63,15],[64,16],[62,17],[65,18],[66,19],[67,20],[68,21],[69,22],[70,23],[71,24],[72,25],[73,26],[74,27],[54,28],[55,29],[47,30],[48,31],[50,32],[79,33],[78,34],[76,35],[61,36],[60,37],[432,38],[96,82],[58,83],[455,80],[97,84],[446,85],[445,86],[447,87],[448,88],[449,89],[77,83],[85,83],[56,46],[51,47],[100,80],[423,49],[427,50],[123,49],[435,50],[429,50],[420,90],[107,80],[425,50],[117,49],[433,50],[113,91],[112,92],[57,51],[106,52],[441,53],[440,54],[442,55],[110,56],[452,93],[438,94],[105,95],[439,96],[104,97],[98,61],[103,62],[421,61],[109,63],[111,64],[424,65],[428,66],[443,51],[436,67],[430,68],[108,69],[426,70],[118,71],[434,72],[437,51],[124,73],[122,74],[422,75],[120,76],[119,77],[115,51],[114,78]],"semanticDiagnosticsPerFile":[444,453,454,451,53,52,94,88,92,91,87,86,95,93,89,90,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,418,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,419,82,84,81,83,102,101,63,64,62,65,66,67,68,69,70,71,72,73,74,116,54,55,47,48,50,46,79,78,76,75,99,49,61,60,59,432,431,96,58,455,80,97,44,45,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,1,450,446,445,447,448,449,77,85,56,51,100,423,427,121,123,435,429,420,107,425,117,433,113,112,57,106,441,440,442,110,452,438,105,[439,[{"file":"./src/stores/modules/permission.ts","start":123,"length":14,"messageText":"Module '\"@/api/menu\"' has no exported member 'getMenuListApi'. Did you mean to use 'import getMenuListApi from \"@/api/menu\"' instead?","category":1,"code":2614}]],104,98,103,421,109,111,[424,[{"file":"./src/views/dealer/index.vue","start":15719,"length":4,"code":2339,"category":1,"messageText":"Property 'code' does not exist on type 'AxiosResponse<ApiResponse<PageData<DealerInfo>>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":15775,"length":7,"code":2339,"category":1,"messageText":"Property 'records' does not exist on type 'ApiResponse<PageData<DealerInfo>>'."},{"file":"./src/views/dealer/index.vue","start":15823,"length":5,"code":2339,"category":1,"messageText":"Property 'total' does not exist on type 'ApiResponse<PageData<DealerInfo>>'."},{"file":"./src/views/dealer/index.vue","start":15871,"length":7,"code":2339,"category":1,"messageText":"Property 'current' does not exist on type 'ApiResponse<PageData<DealerInfo>>'."},{"file":"./src/views/dealer/index.vue","start":15922,"length":4,"code":2339,"category":1,"messageText":"Property 'size' does not exist on type 'ApiResponse<PageData<DealerInfo>>'."},{"file":"./src/views/dealer/index.vue","start":17692,"length":4,"code":2339,"category":1,"messageText":"Property 'code' does not exist on type 'AxiosResponse<ApiResponse<any>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":17795,"length":7,"code":2339,"category":1,"messageText":"Property 'message' does not exist on type 'AxiosResponse<ApiResponse<any>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":18836,"length":4,"code":2339,"category":1,"messageText":"Property 'code' does not exist on type 'AxiosResponse<ApiResponse<any>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":18977,"length":7,"code":2339,"category":1,"messageText":"Property 'message' does not exist on type 'AxiosResponse<ApiResponse<any>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":20376,"length":4,"code":2339,"category":1,"messageText":"Property 'code' does not exist on type 'AxiosResponse<ApiResponse<any>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":20559,"length":7,"code":2339,"category":1,"messageText":"Property 'message' does not exist on type 'AxiosResponse<ApiResponse<any>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":21847,"length":4,"code":2339,"category":1,"messageText":"Property 'code' does not exist on type 'AxiosResponse<ApiResponse<any>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":21982,"length":7,"code":2339,"category":1,"messageText":"Property 'message' does not exist on type 'AxiosResponse<ApiResponse<any>, any, {}>'."},{"file":"./src/views/dealer/index.vue","start":10908,"length":6,"code":2339,"category":1,"messageText":"Property 'remark' does not exist on type '{ dealerCode: string; dealerName: string; creditCode: string; dealerLevel: number; region: string; contactPerson?: string | undefined; contactPhone?: string | undefined; cooperateStartDate: string; ... 5 more ...; dealerId?: number | undefined; }'."}]],428,443,436,[430,[{"file":"./src/views/invoice/index.vue","start":29934,"length":9,"code":2339,"category":1,"messageText":"Property 'minAmount' does not exist on type '{ invoiceNo: string; orderNo: string; deliveryNo: string; dealerCode: string; dealerName: string; invoiceStatus: undefined; dataSource: string; invoiceStartDate: string; invoiceEndDate: string; pageNum: number; pageSize: number; }'."},{"file":"./src/views/invoice/index.vue","start":29978,"length":9,"code":2339,"category":1,"messageText":"Property 'maxAmount' does not exist on type '{ invoiceNo: string; orderNo: string; deliveryNo: string; dealerCode: string; dealerName: string; invoiceStatus: undefined; dataSource: string; invoiceStartDate: string; invoiceEndDate: string; pageNum: number; pageSize: number; }'."},{"file":"./src/views/invoice/index.vue","start":30078,"length":12,"code":2345,"category":1,"messageText":{"messageText":"Argument of type '{ invoiceNo: string; orderNo: string; deliveryNo: string; dealerCode: string; dealerName: string; invoiceStatus: undefined; dataSource: string; invoiceStartDate: string; invoiceEndDate: string; minAmount: any; maxAmount: any; }' is not assignable to parameter of type 'InvoiceQueryReq'.","category":1,"code":2345,"next":[{"messageText":"Type '{ invoiceNo: string; orderNo: string; deliveryNo: string; dealerCode: string; dealerName: string; invoiceStatus: undefined; dataSource: string; invoiceStartDate: string; invoiceEndDate: string; minAmount: any; maxAmount: any; }' is missing the following properties from type 'InvoiceQueryReq': pageNum, pageSize","category":1,"code":2739}]}},{"file":"./src/views/invoice/index.vue","start":32901,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type '{ invoiceId: number; invoiceNo: string; orderNo: string; deliveryNo: string; dealerCode: string; dealerName: string; totalAmount: number; invoiceDate: string; invoiceStatus: number; taxRate: number; dataSource: string; invoiceItems: { ...; }[]; }' is not assignable to parameter of type 'InvoiceUpdateReq'.","category":1,"code":2345,"next":[{"messageText":"Types of property 'invoiceItems' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type '{ itemId: any; productCode: any; productName: any; invoiceQty: any; unitPriceNoTax: any; amountNoTax: any; taxRate: any; taxAmount: any; }[]' is not assignable to type 'InvoiceItemUpdateReq[]'.","category":1,"code":2322,"next":[{"messageText":"Type '{ itemId: any; productCode: any; productName: any; invoiceQty: any; unitPriceNoTax: any; amountNoTax: any; taxRate: any; taxAmount: any; }' is missing the following properties from type 'InvoiceItemUpdateReq': productQty, unitPrice, itemAmount","category":1,"code":2739}]}]}]}},{"file":"./src/views/invoice/index.vue","start":33848,"length":7,"code":2345,"category":1,"messageText":{"messageText":"Argument of type '{ invoiceNo: string; orderNo: string; deliveryNo: string; dealerCode: string; dealerName: string; totalAmount: number; invoiceDate: string; invoiceStatus: number; taxRate: number; dataSource: string; invoiceItems: { ...; }[]; }' is not assignable to parameter of type 'InvoiceAddReq'.","category":1,"code":2345,"next":[{"messageText":"Types of property 'invoiceItems' are incompatible.","category":1,"code":2326,"next":[{"messageText":"Type '{ productCode: any; productName: any; invoiceQty: any; unitPriceNoTax: any; amountNoTax: any; taxRate: any; taxAmount: any; }[]' is not assignable to type 'InvoiceItemAddReq[]'.","category":1,"code":2322,"next":[{"messageText":"Type '{ productCode: any; productName: any; invoiceQty: any; unitPriceNoTax: any; amountNoTax: any; taxRate: any; taxAmount: any; }' is missing the following properties from type 'InvoiceItemAddReq': productQty, unitPrice, itemAmount","category":1,"code":2739}]}]}]}},{"file":"./src/views/invoice/index.vue","start":18437,"length":13,"code":2551,"category":1,"messageText":"Property 'invoiceItemId' does not exist on type '{ itemId: number; invoiceId: number; invoiceNo: string; productCode: string; productName: string; productQty: number; unitPrice: number; itemAmount: number; taxRate: number; taxAmount: number; createBy?: string | undefined; createTime?: string | undefined; updateBy?: string | undefined; updateTime?: string | undefin...'. Did you mean 'invoiceId'?"},{"file":"./src/views/invoice/index.vue","start":18598,"length":10,"code":2339,"category":1,"messageText":"Property 'invoiceQty' does not exist on type '{ itemId: number; invoiceId: number; invoiceNo: string; productCode: string; productName: string; productQty: number; unitPrice: number; itemAmount: number; taxRate: number; taxAmount: number; createBy?: string | undefined; createTime?: string | undefined; updateBy?: string | undefined; updateTime?: string | undefin...'."},{"file":"./src/views/invoice/index.vue","start":18667,"length":14,"code":2339,"category":1,"messageText":"Property 'unitPriceNoTax' does not exist on type '{ itemId: number; invoiceId: number; invoiceNo: string; productCode: string; productName: string; productQty: number; unitPrice: number; itemAmount: number; taxRate: number; taxAmount: number; createBy?: string | undefined; createTime?: string | undefined; updateBy?: string | undefined; updateTime?: string | undefin...'."},{"file":"./src/views/invoice/index.vue","start":18761,"length":11,"code":2339,"category":1,"messageText":"Property 'amountNoTax' does not exist on type '{ itemId: number; invoiceId: number; invoiceNo: string; productCode: string; productName: string; productQty: number; unitPrice: number; itemAmount: number; taxRate: number; taxAmount: number; createBy?: string | undefined; createTime?: string | undefined; updateBy?: string | undefined; updateTime?: string | undefin...'."},{"file":"./src/views/invoice/index.vue","start":19324,"length":11,"code":2339,"category":1,"messageText":"Property 'amountNoTax' does not exist on type '{ itemId: number; invoiceId: number; invoiceNo: string; productCode: string; productName: string; productQty: number; unitPrice: number; itemAmount: number; taxRate: number; taxAmount: number; createBy?: string | undefined; createTime?: string | undefined; updateBy?: string | undefined; updateTime?: string | undefin...'."}]],108,426,118,[434,[{"file":"./src/views/rebate/index.vue","start":18996,"length":12,"messageText":"Variable 'responseData' implicitly has type 'any' in some locations where its type cannot be determined.","category":1,"code":7034},{"file":"./src/views/rebate/index.vue","start":20763,"length":12,"messageText":"Variable 'responseData' implicitly has an 'any' type.","category":1,"code":7005}]],437,[124,[{"file":"./src/views/sys/dict-item/index.vue","start":8324,"length":7,"messageText":"Module '\"../../../api/dict\"' has no exported member 'dictApi'.","category":1,"code":2305},{"file":"./src/views/sys/dict-item/index.vue","start":8338,"length":8,"messageText":"Module '\"../../../api/dict\"' has no exported member 'DictType'.","category":1,"code":2305}]],[122,[{"file":"./src/views/sys/dict/index.vue","start":8205,"length":7,"messageText":"Module '\"../../../api/dict\"' has no exported member 'dictApi'.","category":1,"code":2305},{"file":"./src/views/sys/dict/index.vue","start":8219,"length":8,"messageText":"Module '\"../../../api/dict\"' has no exported member 'DictType'.","category":1,"code":2305},{"file":"./src/views/sys/dict/index.vue","start":8234,"length":20,"messageText":"Module '\"../../../api/dict\"' has no exported member 'DictTypeSearchParams'.","category":1,"code":2305}]],422,120,119,115,[114,[{"file":"./src/views/users/index.vue","start":16164,"length":5,"code":2322,"category":1,"messageText":"Type 'null' is not assignable to type 'Menu[] | { menuId: number; parentId?: number | undefined; menuName: string; menuType: string; menuTypeText: string; path?: string | undefined; icon?: string | undefined; sort: number; ... 5 more ...; children?: ...[] | undefined; }[] | undefined'.","relatedInformation":[{"file":"./src/api/role.ts","start":1554,"length":5,"messageText":"The expected type comes from property 'menus' which is declared here on type 'Role | { roleId: number; roleCode: string; roleName: string; status: number; statusText: string; remark: string; createTime: string; updateTime: string; menuIds?: number[] | undefined; menus?: { ...; }[] | undefined; }'","category":3,"code":6500}]},{"file":"./src/views/users/index.vue","start":16508,"length":5,"code":2322,"category":1,"messageText":"Type 'null' is not assignable to type 'Menu[] | { menuId: number; parentId?: number | undefined; menuName: string; menuType: string; menuTypeText: string; path?: string | undefined; icon?: string | undefined; sort: number; ... 5 more ...; children?: ...[] | undefined; }[] | undefined'.","relatedInformation":[{"file":"./src/api/role.ts","start":1554,"length":5,"messageText":"The expected type comes from property 'menus' which is declared here on type 'Role | { roleId: number; roleCode: string; roleName: string; status: number; statusText: string; remark: string; createTime: string; updateTime: string; menuIds?: number[] | undefined; menus?: { ...; }[] | undefined; }'","category":3,"code":6500}]},{"file":"./src/views/users/index.vue","start":16851,"length":5,"code":2322,"category":1,"messageText":"Type 'null' is not assignable to type 'Menu[] | { menuId: number; parentId?: number | undefined; menuName: string; menuType: string; menuTypeText: string; path?: string | undefined; icon?: string | undefined; sort: number; ... 5 more ...; children?: ...[] | undefined; }[] | undefined'.","relatedInformation":[{"file":"./src/api/role.ts","start":1554,"length":5,"messageText":"The expected type comes from property 'menus' which is declared here on type 'Role | { roleId: number; roleCode: string; roleName: string; status: number; statusText: string; remark: string; createTime: string; updateTime: string; menuIds?: number[] | undefined; menus?: { ...; }[] | undefined; }'","category":3,"code":6500}]}]]],"affectedFilesPendingEmit":[100,423,427,121,123,435,429,420,107,425,117,433,113,112,57,106,441,440,442,110,452,438,105,439,104,98,103,421,109,111,424,428,443,436,430,108,426,118,434,437,124,122,422,120,119,115,114],"emitSignatures":[57,98,100,103,104,105,106,107,108,109,110,111,114,115,117,118,119,120,122,123,124,421,422,423,424,425,426,427,428,429,430,433,434,435,436,437,438,439,440,441,442,443]},"version":"5.2.2"}
...\ No newline at end of file ...\ No newline at end of file
......