Showing
17 changed files
with
972 additions
and
160 deletions
| ... | @@ -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 | ... | ... |
-
Please register or login to post a comment