整理oms菜单及前端项目文件

This commit is contained in:
Richie 2024-05-19 18:46:57 +08:00
parent 331a0cc9b0
commit e5acb4bd11
18 changed files with 2973 additions and 27 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.qihang</groupId>
<artifactId>qihangec-oms</artifactId>
<artifactId>qihangerp-oms</artifactId>
<version>2.0.6</version>
</parent>

View File

@ -30,10 +30,10 @@ spring:
# # mybatis 日志
# mybatis-plus:
# configuration:
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启sql日志
# mybatis 日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启sql日志
# minio配置

141
docs/sys_menu.sql Normal file
View File

@ -0,0 +1,141 @@
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 80200
Source Host : localhost:3306
Source Schema : qihang-erp
Target Server Type : MySQL
Target Server Version : 80200
File Encoding : 65001
Date: 19/05/2024 18:46:07
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`menu_id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
`menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称',
`system_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '系统idoms用在oms系统',
`parent_id` bigint NULL DEFAULT 0 COMMENT '父菜单ID',
`order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
`path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '路由地址',
`component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件路径',
`query` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由参数',
`is_frame` int NULL DEFAULT 1 COMMENT '是否为外链0是 1否',
`is_cache` int NULL DEFAULT 0 COMMENT '是否缓存0缓存 1不缓存',
`menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单类型M目录 C菜单 F按钮',
`visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态0显示 1隐藏',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态0正常 1停用',
`perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识',
`icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#' COMMENT '菜单图标',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
PRIMARY KEY (`menu_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2086 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
INSERT INTO `sys_menu` VALUES (1, '系统管理', 'oms', 0, 99, '/system', '', '', 1, 0, 'M', '0', '0', '', 'system', 'admin', '2023-12-27 15:00:27', 'admin', '2023-12-29 09:07:42.856856', '系统管理目录');
INSERT INTO `sys_menu` VALUES (2, '商品管理', '', 0, 9, 'goods', '', '', 1, 0, 'M', '0', '0', '', 'theme', 'admin', '2023-12-29 13:29:44', '', '', '');
INSERT INTO `sys_menu` VALUES (4, '采购管理', NULL, 0, 1, 'purchase', '', '', 1, 0, 'M', '0', '0', '', 'server', 'admin', '2023-12-27 15:00:27', 'admin', '2024-04-24 17:06:13', '至简官网地址');
INSERT INTO `sys_menu` VALUES (5, '销售管理', 'oms', 0, 2, '/sale', '', '', 1, 0, 'M', '0', '0', '', 'shopping', 'admin', '2023-12-29 16:53:03', 'admin', '2024-05-11 09:16:33', '');
INSERT INTO `sys_menu` VALUES (6, '发货管理', 'oms', 0, 3, '/ship', '', '', 1, 0, 'M', '0', '0', '', 'excel', 'admin', '2024-01-01 14:08:04', 'admin', '2024-01-03 14:07:29', '');
INSERT INTO `sys_menu` VALUES (7, '售后管理', 'oms', 0, 4, '/saleafter', NULL, NULL, 1, 0, 'M', '0', '0', '', 'clipboard', 'admin', '2024-01-03 14:23:55', 'admin', '2024-01-12 19:47:33', '');
INSERT INTO `sys_menu` VALUES (8, '店铺管理', 'oms', 0, 7, '/shop', NULL, NULL, 1, 0, 'M', '0', '0', '', 'server', 'admin', '2024-04-12 16:46:19', 'admin', '2024-04-24 11:17:09', '');
INSERT INTO `sys_menu` VALUES (9, '库存管理', '', 0, 5, 'wms', '', '', 1, 0, 'M', '0', '0', '', 'dict', 'admin', '2023-12-31 12:14:33', 'admin', '2024-04-23 15:43:32', '');
INSERT INTO `sys_menu` VALUES (100, '用户管理', 'oms', 1, 1, 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', '2023-12-27 15:00:27', '', '', '用户管理菜单');
INSERT INTO `sys_menu` VALUES (101, '角色管理', 'oms', 1, 2, 'role', 'system/role/index', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', '2023-12-27 15:00:27', '', '', '角色管理菜单');
INSERT INTO `sys_menu` VALUES (102, '菜单管理', '', 1, 3, 'menu', 'system/menu/index', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', '2023-12-27 15:00:27', '', '', '菜单管理菜单');
INSERT INTO `sys_menu` VALUES (103, '部门管理', 'oms', 1, 4, 'dept', 'system/dept/index', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', '2023-12-27 15:00:27', '', '', '部门管理菜单');
INSERT INTO `sys_menu` VALUES (104, '岗位管理', 'oms', 1, 5, 'post', 'system/post/index', '', 1, 0, 'C', '1', '0', 'system:post:list', 'post', 'admin', '2023-12-27 15:00:27', 'admin', '2024-04-12 16:44:52', '岗位管理菜单');
INSERT INTO `sys_menu` VALUES (105, '字典管理', 'oms', 1, 6, 'dict', 'system/dict/index', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', '2023-12-27 15:00:27', '', '', '字典管理菜单');
INSERT INTO `sys_menu` VALUES (108, '日志管理', 'oms', 1, 9, 'log', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', '2023-12-27 15:00:27', '', '', '日志管理菜单');
INSERT INTO `sys_menu` VALUES (500, '操作日志', 'oms', 108, 1, 'operlog', 'monitor/operlog/index', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 'admin', '2023-12-27 15:00:27', '', '', '操作日志菜单');
INSERT INTO `sys_menu` VALUES (501, '登录日志', 'oms', 108, 2, 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 'admin', '2023-12-27 15:00:27', '', '', '登录日志菜单');
INSERT INTO `sys_menu` VALUES (1000, '用户查询', NULL, 100, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1001, '用户新增', NULL, 100, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1002, '用户修改', NULL, 100, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1003, '用户删除', NULL, 100, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1004, '用户导出', NULL, 100, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1005, '用户导入', NULL, 100, 6, '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1006, '重置密码', NULL, 100, 7, '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1007, '角色查询', NULL, 101, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1008, '角色新增', NULL, 101, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1009, '角色修改', NULL, 101, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1010, '角色删除', NULL, 101, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1011, '角色导出', NULL, 101, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1012, '菜单查询', NULL, 102, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1013, '菜单新增', NULL, 102, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1014, '菜单修改', NULL, 102, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1015, '菜单删除', NULL, 102, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1016, '部门查询', NULL, 103, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1017, '部门新增', NULL, 103, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1018, '部门修改', NULL, 103, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1019, '部门删除', NULL, 103, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1020, '岗位查询', NULL, 104, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1021, '岗位新增', NULL, 104, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1022, '岗位修改', NULL, 104, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1023, '岗位删除', NULL, 104, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1024, '岗位导出', NULL, 104, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1025, '字典查询', NULL, 105, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1026, '字典新增', NULL, 105, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1027, '字典修改', NULL, 105, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1028, '字典删除', NULL, 105, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1029, '字典导出', NULL, 105, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1039, '操作查询', NULL, 500, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1040, '操作删除', NULL, 500, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1041, '日志导出', NULL, 500, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1042, '登录查询', NULL, 501, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1043, '登录删除', NULL, 501, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1044, '日志导出', NULL, 501, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (1045, '账户解锁', NULL, 501, 4, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 'admin', '2023-12-27 15:00:27', '', '', '');
INSERT INTO `sys_menu` VALUES (2005, '供应商管理', NULL, 4, 9, 'supplier/list', 'scm/supplier/index', '', 1, 0, 'C', '0', '0', 'scm:supplier', 'qq', 'admin', '2023-12-29 09:14:02', 'admin', '2023-12-29 09:17:27.514466', '');
INSERT INTO `sys_menu` VALUES (2007, '商品管理', NULL, 2, 1, 'goods_list', 'goods/index', '', 1, 0, 'C', '0', '0', 'goods:list', 'theme', 'admin', '2023-12-29 13:31:01', 'admin', '2023-12-29 15:02:40.869685', '');
INSERT INTO `sys_menu` VALUES (2008, '商品分类', NULL, 2, 88, 'goods_category', 'goods/category/index', '', 1, 0, 'C', '0', '0', 'goods:category', 'tree-table', 'admin', '2023-12-29 13:32:41', 'admin', '2023-12-29 15:02:22.220534', '');
INSERT INTO `sys_menu` VALUES (2009, '品牌管理', NULL, 2, 99, 'goods/brand', 'goods/brand/index', '', 1, 0, 'C', '0', '1', 'goods:brand', 'clipboard', 'admin', '2023-12-29 13:34:49', 'admin', '2024-04-14 18:51:23', '');
INSERT INTO `sys_menu` VALUES (2010, '采购单管理', NULL, 4, 1, 'order', 'scm/purchase/order', '', 1, 0, 'C', '0', '0', 'scm:purchase:order', 'button', 'admin', '2023-12-29 16:35:55', 'admin', '2024-04-24 17:06:32', '');
INSERT INTO `sys_menu` VALUES (2012, '采购物流管理', NULL, 4, 2, 'ship', 'scm/purchase/ship', '', 1, 0, 'C', '0', '0', 'scm:purchase:ship', 'component', 'admin', '2023-12-29 16:45:42', 'admin', '2024-04-24 17:10:48', '');
INSERT INTO `sys_menu` VALUES (2015, '店铺管理', 'oms', 8, 10, 'shop_list', 'shop/shop_index', '', 1, 0, 'C', '0', '0', 'shop:list', 'example', 'admin', '2023-12-29 16:54:02', 'admin', '2024-04-25 11:15:07', '');
INSERT INTO `sys_menu` VALUES (2017, '店铺数据统计', 'oms', 5, 8, 'data', 'shop/data', '', 1, 0, 'C', '0', '1', 'shop:data', 'chart', 'admin', '2023-12-29 17:04:08', 'admin', '2023-12-31 19:04:58.785609', '');
INSERT INTO `sys_menu` VALUES (2019, '采购账单管理1', NULL, 4, 2, 'purchase', 'scm/purchase/cost', '', 1, 0, 'C', '0', '1', '', 'money', 'admin', '2023-12-29 17:09:32', 'admin', '2024-04-24 17:05:06', '');
INSERT INTO `sys_menu` VALUES (2021, '创建采购单', NULL, 4, 0, 'order/create', 'scm/purchase/order/create', '', 1, 0, 'C', '1', '0', '', 'edit', 'admin', '2023-12-29 21:23:45', 'admin', '2024-04-24 17:11:38', '');
INSERT INTO `sys_menu` VALUES (2025, '采购单详情', NULL, 4, 1, 'order/detail', 'scm/purchase/order/detail', '', 1, 0, 'C', '1', '0', '', 'button', 'admin', '2023-12-30 17:08:01', 'admin', '2024-04-24 17:15:00', '');
INSERT INTO `sys_menu` VALUES (2027, '入库管理', NULL, 9, 0, 'stock_in_entry/list', 'wms/stockInEntry', '', 1, 0, 'C', '0', '0', 'wms:stock_in_entry:list', 'stockin', 'admin', '2023-12-31 12:27:37', 'admin', '2024-01-14 15:12:48', '');
INSERT INTO `sys_menu` VALUES (2028, '生成采购入库单', NULL, 4, 3, 'ship/create_stock_in_entry', 'scm/purchase/ship/create_stock_in_entry', '', 1, 0, 'C', '1', '0', '', 'button', 'admin', '2023-12-31 12:31:32', 'admin', '2024-04-24 17:12:38', '');
INSERT INTO `sys_menu` VALUES (2029, '店铺退款管理', 'oms', 7, 2, 'shop_refund', 'shop/refund/index', '', 1, 0, 'C', '0', '0', '', 'clipboard', 'admin', '2023-12-31 17:29:03', 'admin', '2024-05-04 18:57:32', '');
INSERT INTO `sys_menu` VALUES (2030, '手动创建订单', 'oms', 5, 1, 'order/create', 'sale/order/create', '', 1, 0, 'C', '1', '0', '', 'documentation', 'admin', '2023-12-31 20:01:22', 'admin', '2024-03-24 19:32:32', '');
INSERT INTO `sys_menu` VALUES (2032, '订单拉取日志', 'oms', 5, 3, 'order/pull_log', 'shop/order_pull_log', '', 1, 0, 'C', '0', '1', '', 'upload', 'admin', '2023-12-31 20:04:12', 'admin', '2024-05-04 18:56:46', '');
INSERT INTO `sys_menu` VALUES (2033, '订单管理', 'oms', 5, 1, 'order_list', 'sale/order/index', '', 1, 0, 'C', '0', '0', '', 'list', 'admin', '2023-12-31 20:05:05', 'admin', '2024-05-05 18:07:27', '');
INSERT INTO `sys_menu` VALUES (2036, '店铺订单管理', 'oms', 5, 2, 'shop_order', 'shop/order_index', '', 1, 0, 'C', '0', '0', '', 'excel', 'admin', '2024-01-01 14:14:42', 'admin', '2024-05-04 18:55:37', '');
INSERT INTO `sys_menu` VALUES (2046, '出库管理', NULL, 9, 5, 'stockOut', 'wms/stockOutEntry', NULL, 1, 0, 'C', '0', '0', '', 'link', 'admin', '2024-01-03 11:00:53', 'admin', '2024-01-12 15:52:19', '');
INSERT INTO `sys_menu` VALUES (2047, '库存查询', NULL, 9, 6, 'goodsInventory', 'goods/goodsInventory', NULL, 1, 0, 'C', '0', '0', '', 'monitor', 'admin', '2024-01-03 11:01:14', 'admin', '2024-01-09 17:55:33', '');
INSERT INTO `sys_menu` VALUES (2048, '库存盘点', NULL, 9, 9, 'pan', NULL, NULL, 1, 0, 'C', '0', '1', '', 'bug', 'admin', '2024-01-03 11:01:43', 'admin', '2024-01-09 19:57:08', '');
INSERT INTO `sys_menu` VALUES (2049, '打包发货', 'oms', 6, 3, 'ship_order', 'shipping/shipOrder/index', NULL, 1, 0, 'C', '0', '0', '', 'guide', 'admin', '2024-01-03 14:09:18', 'admin', '2024-05-02 10:47:38', '');
INSERT INTO `sys_menu` VALUES (2051, '物流跟踪', 'oms', 6, 4, 'ship_logistics', 'shipping/shipOrder/logistics', NULL, 1, 0, 'C', '0', '0', '', 'email', 'admin', '2024-01-03 14:13:12', 'admin', '2024-05-02 10:50:34', '');
INSERT INTO `sys_menu` VALUES (2052, '物流公司管理', 'oms', 6, 9, 'logistics_company', 'shipping/logistics/company', NULL, 1, 0, 'C', '0', '0', '', 'checkbox', 'admin', '2024-01-03 14:14:09', 'admin', '2024-04-24 13:53:14', '');
INSERT INTO `sys_menu` VALUES (2054, '退款管理', 'oms', 7, 1, 'refund_list', 'sale/refund', NULL, 1, 0, 'C', '0', '0', '', 'size', 'admin', '2024-01-03 14:24:36', 'admin', '2024-05-05 20:14:23', '');
INSERT INTO `sys_menu` VALUES (2059, '备货清单', 'oms', 6, 1, 'stocking', 'shipping/stocking', '', 1, 0, 'C', '0', '0', '', 'component', 'admin', '2024-01-09 11:51:52', 'admin', '2024-05-01 21:34:33', '');
INSERT INTO `sys_menu` VALUES (2060, '拣货出库', '', 6, 2, 'stockout', 'shipping/stockOut', NULL, 1, 0, 'C', '0', '0', '', 'bug', 'admin', '2024-01-09 13:39:00', 'admin', '2024-04-26 13:51:21', '');
INSERT INTO `sys_menu` VALUES (2061, '库位管理', NULL, 9, 99, 'stock_location', 'wms/location', NULL, 1, 0, 'C', '0', '0', '', 'education', 'admin', '2024-01-09 13:54:30', 'admin', '2024-01-09 14:50:33', '');
INSERT INTO `sys_menu` VALUES (2063, '发货费用', '', 6, 5, 'ship_fee', 'shipping/shipFee', NULL, 1, 0, 'C', '0', '0', '', 'money', 'admin', '2024-01-12 18:35:31', 'admin', '2024-05-02 10:50:58', '');
INSERT INTO `sys_menu` VALUES (2066, '添加商品', NULL, 2, 2, 'create', 'goods/create', NULL, 1, 0, 'C', '1', '0', '', 'component', 'admin', '2024-01-14 19:42:11', 'admin', '2024-04-14 18:50:36', '');
INSERT INTO `sys_menu` VALUES (2067, '商品SKU管理', NULL, 2, 3, 'spec_list', 'goods/spec', NULL, 1, 0, 'C', '0', '0', '', 'theme', 'admin', '2024-01-16 14:17:39', 'admin', '2024-04-14 18:51:13', '');
INSERT INTO `sys_menu` VALUES (2079, '平台设置', 'oms', 8, 20, 'platform', 'shop/platform', NULL, 1, 0, 'C', '0', '0', NULL, 'date-range', 'admin', '2024-04-12 16:58:07', '', NULL, '');
INSERT INTO `sys_menu` VALUES (2080, '售后处理查询', 'oms', 7, 3, 'result_list', 'afterSale/index', NULL, 1, 0, 'C', '0', '0', '', 'time', 'admin', '2024-04-15 14:23:40', 'admin', '2024-05-05 20:27:37', '');
INSERT INTO `sys_menu` VALUES (2084, '店铺商品管理', 'oms', 8, 1, 'goods_list', 'shop/goods/', NULL, 1, 0, 'C', '0', '0', '', 'shopping', 'admin', '2024-04-15 14:52:16', 'admin', '2024-04-15 14:52:27', '');
INSERT INTO `sys_menu` VALUES (2085, '采购账单管理', NULL, 4, 4, 'bill', 'scm/purchase/bill', NULL, 1, 0, 'C', '0', '0', '', 'money', 'admin', '2024-04-24 17:03:07', 'admin', '2024-05-02 10:59:08', '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.qihang</groupId>
<artifactId>qihangec-oms</artifactId>
<artifactId>qihangerp-oms</artifactId>
<version>2.0.6</version>
<packaging>pom</packaging>

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询物流公司列表
export function listLogistics(query) {
return request({
url: '/api/logistics/list',
method: 'get',
params: query
})
}
// 查询物流公司详细
export function getLogistics(id) {
return request({
url: '/api/logistics/' + id,
method: 'get'
})
}
// 新增物流公司
export function addLogistics(data) {
return request({
url: '/api/logistics',
method: 'post',
data: data
})
}
// 修改物流公司
export function updateLogistics(data) {
return request({
url: '/api/logistics',
method: 'put',
data: data
})
}
// 删除物流公司
export function delLogistics(id) {
return request({
url: '/api/logistics/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,34 @@
import request from '@/utils/request'
// 查询打包发货列表
export function listShipOrder(query) {
return request({
url: '/shipping/ship_order',
method: 'get',
params: query
})
}
export function getShipOrderItemList(id) {
return request({
url: '/shipping/ship_order/' + id,
method: 'get'
})
}
export function supplierShipOrder(data) {
return request({
url: '/shipping/ship_order/supplier_ship',
method: 'post',
data: data
})
}
export function wmsShipOrder(data) {
return request({
url: '/shipping/ship_order/wms_ship',
method: 'post',
data: data
})
}

45
vue/src/api/wei/goods.js Normal file
View File

@ -0,0 +1,45 @@
import request from '@/utils/request'
// 查询列表
export function listGoods(query) {
return request({
url: '/wei-api/goods/list',
method: 'get',
params: query
})
}
// 查询详细
export function getGoods(id) {
return request({
url: '/wei-api/goods/' + id,
method: 'get'
})
}
// 查询列表
export function listGoodsSku(query) {
return request({
url: '/wei-api/goods/skuList',
method: 'get',
params: query
})
}
export function getGoodsSku(id) {
return request({
url: '/wei-api/goods/sku/'+id,
method: 'get',
})
}
// 接口拉取订单
export function pullGoodsList(data) {
return request({
url: '/wei-api/goods/pull_goods_list',
method: 'post',
data: data
})
}

46
vue/src/api/wei/order.js Normal file
View File

@ -0,0 +1,46 @@
import request from '@/utils/request'
// 查询淘宝订单列表
export function listOrder(query) {
return request({
url: '/wei-api/order/list',
method: 'get',
params: query
})
}
// 查询订单详细
export function getOrder(id) {
return request({
url: '/wei-api/order/' + id,
method: 'get'
})
}
// 接口拉取订单
export function pullOrder(data) {
return request({
url: '/wei-api/order/pull_order',
method: 'post',
data: data
})
}
export function pullOrderDetail(data) {
return request({
url: '/wei-api/order/pull_order_detail',
method: 'post',
data: data
})
}
export function confirmOrder(data) {
return request({
url: '/wei-api/order/confirmOrder',
method: 'post',
data: data
})
}

30
vue/src/api/wei/refund.js Normal file
View File

@ -0,0 +1,30 @@
import request from '@/utils/request'
// 查询店铺订单列表
export function listShopRefund(query) {
return request({
url: '/wei-api/refund/list',
method: 'get',
params: query
})
}
// 接口拉取订单
export function pullRefund(data) {
return request({
url: '/wei-api/refund/pull_list',
method: 'post',
data: data
})
}
// 拉取订单详情
export function pullOrderDetail(data) {
return request({
url: '/wei-api/refund/pull_detail',
method: 'post',
data: data
})
}

View File

@ -3,27 +3,27 @@
<panel-group @handleSetLineChartData="handleSetLineChartData" />
<el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
<line-chart :chart-data="lineChartData" />
</el-row>
<!-- <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">-->
<!-- <line-chart :chart-data="lineChartData" />-->
<!-- </el-row>-->
<el-row :gutter="32">
<el-col :xs="24" :sm="24" :lg="8">
<div class="chart-wrapper">
<raddar-chart />
</div>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<div class="chart-wrapper">
<pie-chart />
</div>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<div class="chart-wrapper">
<bar-chart />
</div>
</el-col>
</el-row>
<!-- <el-row :gutter="32">-->
<!-- <el-col :xs="24" :sm="24" :lg="8">-->
<!-- <div class="chart-wrapper">-->
<!-- <raddar-chart />-->
<!-- </div>-->
<!-- </el-col>-->
<!-- <el-col :xs="24" :sm="24" :lg="8">-->
<!-- <div class="chart-wrapper">-->
<!-- <pie-chart />-->
<!-- </div>-->
<!-- </el-col>-->
<!-- <el-col :xs="24" :sm="24" :lg="8">-->
<!-- <div class="chart-wrapper">-->
<!-- <bar-chart />-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
</div>

View File

@ -0,0 +1,466 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
<el-form-item label="退货单号" prop="refundNum">
<el-input
v-model="queryParams.refundNum"
placeholder="请输入退货单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="原始订单号" prop="orderNum">
<el-input
v-model="queryParams.orderNum"
placeholder="请输入原始订单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" placeholder="请选择店铺" clearable @change="handleQuery">
<el-option
v-for="item in shopList"
:key="item.id"
:label="item.name"
:value="item.id">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 1">1688</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 2">视频号小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 3">京东</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 4">淘宝天猫</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 5">拼多多</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 6">抖店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 7">小红书</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 8">快手小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 99">其他</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable @change="handleQuery">
<el-option label="待审核" value="10001" ></el-option>
<el-option label="等待买家退货" value="10002"></el-option>
<el-option label="等待卖家收货" value="10005"> </el-option>
<el-option label="拒绝退款" value="14000"></el-option>
<el-option label="退款关闭" value="10011"></el-option>
<el-option label="退款完成" value="10010"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handlePull"
v-hasPermi="['api:returned:add']"
>拉取店铺售后</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['api:returned:edit']"
>订单拦截</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['api:returned:edit']"
>订单补发</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['api:returned:remove']"
>删除</el-button>
</el-col> -->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['api:returned:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="returnedList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="ID" align="center" prop="id" />-->
<el-table-column label="退款单号" align="center" prop="refundNum" />
<el-table-column label="类型" align="center" prop="refundType" >
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.refundType === 10"> 退货</el-tag>
<el-tag size="small" v-if="scope.row.refundType === 20"> 换货</el-tag>
<el-tag size="small" v-if="scope.row.refundType === 30"> 维修</el-tag>
<el-tag size="small" v-if="scope.row.refundType === 11"> 仅退款</el-tag>
</template>
</el-table-column>
<el-table-column label="原始订单号" align="center" prop="originalOrderId" />
<!-- <el-table-column label="店铺id" align="center" prop="shopId" /> -->
<!-- <el-table-column label="店铺类型" align="center" prop="shopType" /> -->
<!-- <el-table-column label="订单id" align="center" prop="orderId" /> -->
<!-- <el-table-column label="子订单id" align="center" prop="orderItemId" /> -->
<!-- <el-table-column label="商品id" align="center" prop="goodsId" /> -->
<!-- <el-table-column label="规格id" align="center" prop="specId" /> -->
<!-- <el-table-column label="商品编码" align="center" prop="goodsNum" /> -->
<el-table-column label="sku编码" align="center" prop="specNum" />
<el-table-column label="商品名称" align="center" prop="goodsName" />
<el-table-column label="SKU" align="center" prop="goodsSku" />
<!-- <el-table-column label="商品图片" align="center" prop="goodsImage" width="100">-->
<!-- <template slot-scope="scope">-->
<!-- <image-preview :src="scope.row.goodsImage" :width="50" :height="50"/>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="买家是否需要退货" align="center" prop="hasGoodReturn" >
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.hasGoodReturn === 1"></el-tag>
<el-tag size="small" v-else></el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="物流公司" align="center" prop="logisticsCompany" /> -->
<!-- <el-table-column label="物流单号" align="center" prop="logisticsCode" />-->
<!-- <el-table-column label="收货时间" align="center" prop="receiveTime" width="180">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.receiveTime, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="状态" align="center" prop="status" >
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.status === 10001"> 待审核</el-tag>
<el-tag size="small" v-if="scope.row.status === 10002"> 等待买家退货</el-tag>
<el-tag size="small" v-if="scope.row.status === 10005"> 等待卖家收货</el-tag>
<el-tag size="small" v-if="scope.row.status === 14000"> 拒绝退款</el-tag>
<el-tag size="small" v-if="scope.row.status === 10011"> 退款关闭</el-tag>
<el-tag size="small" v-if="scope.row.status === 10010"> 退款关闭</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-if="scope.row.status === 1"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['api:returned:edit']"
>确认收货</el-button>
<el-button
v-if="scope.row.status === 2"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['api:returned:edit']"
>入库</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改退换货对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="退货单号" prop="returnedNum">
<el-input v-model="form.returnedNum" placeholder="请输入退货单号" />
</el-form-item>
<el-form-item label="源订单号" prop="orderNum">
<el-input v-model="form.orderNum" placeholder="请输入源订单号" />
</el-form-item>
<el-form-item label="店铺id" prop="shopId">
<el-input v-model="form.shopId" placeholder="请输入店铺id" />
</el-form-item>
<el-form-item label="订单id" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="子订单id" prop="orderTimeId">
<el-input v-model="form.orderTimeId" placeholder="请输入子订单id" />
</el-form-item>
<el-form-item label="商品id" prop="goodsId">
<el-input v-model="form.goodsId" placeholder="请输入商品id" />
</el-form-item>
<el-form-item label="规格id" prop="specId">
<el-input v-model="form.specId" placeholder="请输入规格id" />
</el-form-item>
<el-form-item label="商品编码" prop="goodsNum">
<el-input v-model="form.goodsNum" placeholder="请输入商品编码" />
</el-form-item>
<el-form-item label="规格编码" prop="specNum">
<el-input v-model="form.specNum" placeholder="请输入规格编码" />
</el-form-item>
<el-form-item label="商品名称" prop="goodsName">
<el-input v-model="form.goodsName" placeholder="请输入商品名称" />
</el-form-item>
<el-form-item label="商品规格" prop="goodsSpec">
<el-input v-model="form.goodsSpec" placeholder="请输入商品规格" />
</el-form-item>
<el-form-item label="商品图片" prop="goodsImage">
<image-upload v-model="form.goodsImage"/>
</el-form-item>
<el-form-item label="退货数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入退货数量" />
</el-form-item>
<el-form-item label="物流公司" prop="logisticsCompany">
<el-input v-model="form.logisticsCompany" placeholder="请输入物流公司" />
</el-form-item>
<el-form-item label="物流单号" prop="logisticsCode">
<el-input v-model="form.logisticsCode" placeholder="请输入物流单号" />
</el-form-item>
<el-form-item label="收货时间" prop="receiveTime">
<el-date-picker clearable
v-model="form.receiveTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择收货时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="发货人" prop="contactPerson">
<el-input v-model="form.contactPerson" placeholder="请输入发货人" />
</el-form-item>
<el-form-item label="发货人手机号" prop="mobile">
<el-input v-model="form.mobile" placeholder="请输入发货人手机号" />
</el-form-item>
<el-form-item label="发货地址" prop="address">
<el-input v-model="form.address" placeholder="请输入发货地址" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listReturned, getReturned, delReturned, addReturned, updateReturned } from "@/api/api/returned";
import {listShop} from "@/api/shop/shop";
export default {
name: "Returned",
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 退
returnedList: [],
shopList:[],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
returnedNum: null,
returnedType: null,
orderNum: null,
shopId: null,
shopType: null,
orderId: null,
orderTimeId: null,
goodsId: null,
specId: null,
goodsNum: null,
specNum: null,
goodsName: null,
goodsSpec: null,
goodsImage: null,
quantity: null,
logisticsCompany: null,
logisticsCode: null,
receiveTime: null,
contactPerson: null,
mobile: null,
address: null,
status: null,
},
//
form: {},
//
rules: {
returnedNum: [
{ required: true, message: "退货单号不能为空", trigger: "blur" }
],
orderNum: [
{ required: true, message: "源订单号不能为空", trigger: "blur" }
],
orderId: [
{ required: true, message: "订单id不能为空", trigger: "blur" }
],
orderTimeId: [
{ required: true, message: "子订单id不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "状态不能为空", trigger: "change" }
],
createTime: [
{ required: true, message: "订单创建时间不能为空", trigger: "blur" }
],
}
};
},
created() {
listShop({}).then(response => {
this.shopList = response.rows;
});
this.getList();
},
methods: {
/** 查询退换货列表 */
getList() {
this.loading = true;
listReturned(this.queryParams).then(response => {
this.returnedList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
returnedNum: null,
returnedType: null,
orderNum: null,
shopId: null,
shopType: null,
orderId: null,
orderTimeId: null,
goodsId: null,
specId: null,
goodsNum: null,
specNum: null,
goodsName: null,
goodsSpec: null,
goodsImage: null,
quantity: null,
logisticsCompany: null,
logisticsCode: null,
receiveTime: null,
remark: null,
contactPerson: null,
mobile: null,
address: null,
status: null,
createTime: null,
createBy: null,
updateTime: null,
updateBy: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
handlePull(){
this.$router.push('/saleafter/shop_refund');
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getReturned(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改退换货";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateReturned(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addReturned(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 导出按钮操作 */
handleExport() {
this.download('api/returned/export', {
...this.queryParams
}, `returned_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -0,0 +1,40 @@
<template>
<div class="app-container">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="仓库发货" name="stockShip">
<wms-ship></wms-ship>
</el-tab-pane>
<el-tab-pane label="供应商代发货" name="supplierShip" lazy>
<supplier-ship></supplier-ship>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import supplierShip from "@/views/shipping/shipOrder/supplierShip.vue";
import wmsShip from "@/views/shipping/shipOrder/wmsShip.vue";
export default {
name: "stocking",
components:{supplierShip,wmsShip},
data() {
return {
activeName: 'stockShip'
};
},
created() {
},
mounted() {
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
}
}
};
</script>

View File

@ -0,0 +1,308 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="订单编号" prop="orderNum">
<el-input
v-model="queryParams.orderNum"
placeholder="请输入订单编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" placeholder="请选择店铺" clearable @change="handleQuery">
<el-option
v-for="item in shopList"
:key="item.id"
:label="item.name"
:value="item.id">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 4">淘宝天猫</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 5">拼多多</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 6">抖店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 7">小红书</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 13">快手小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 99">其他</span>
</el-option>
</el-select>
</el-form-item>
<!--
<el-form-item label="标签" prop="tag">
<el-input
v-model="queryParams.tag"
placeholder="请输入标签"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
-->
<el-form-item label="收件人" prop="receiverName">
<el-input
v-model="queryParams.receiverName"
placeholder="请输入收件人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="手机号" prop="receiverPhone">
<el-input
v-model="queryParams.receiverPhone"
placeholder="请输入手机号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="城市" prop="city">
<el-input
v-model="queryParams.city"
placeholder="请输入城市"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="省份" prop="province">
<el-input
v-model="queryParams.province"
placeholder="请输入省份"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> -->
<el-form-item label="快递单号" prop="shippingNumber">
<el-input
v-model="queryParams.shippingNumber"
placeholder="请输入快递单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['shop:order:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="orderList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- <el-table-column label="订单ID" align="center" prop="id" />-->
<el-table-column label="订单号" align="center" prop="orderNum" />
<el-table-column label="物流公司" align="center" prop="logisticsCompany" />
<el-table-column label="物流单号" align="center" prop="logisticsCode" />
<el-table-column label="发货时间" align="center" prop="shipTime" />
<el-table-column label="运费" align="center" prop="logisticsFee" />
<el-table-column label="发货人" align="center" prop="shippingMan" />
<el-table-column label="收件信息" align="center" prop="receiverName" >
<template slot-scope="scope">
{{scope.row.receiverName}} {{scope.row.receiverPhone}}<br />
{{scope.row.address}}
</template>
</el-table-column>
<!-- <el-table-column label="手机号" align="center" prop="receiverPhone" /> -->
<!-- <el-table-column label="${comment}" align="center" prop="address" /> -->
<!-- <el-table-column label="${comment}" align="center" prop="town" /> -->
<!-- <el-table-column label="省" align="center" prop="province" /> -->
<!-- <el-table-column label="市" align="center" prop="city" /> -->
<el-table-column label="包裹信息" align="center" >
<template slot-scope="scope">
{{scope.row.length}}mm {{scope.row.width}}mm {{scope.row.height}}mm<br />
重量{{scope.row.weight}}g
</template>
</el-table-column>
<!-- <el-table-column label="快递单号" align="center" prop="shippingNumber" />-->
<!-- <el-table-column label="物流公司" align="center" prop="shippingCompany" /> -->
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template slot-scope="scope">-->
<!-- <el-col :span="24">-->
<!-- <el-button-->
<!-- size="mini" style="width: 80px;"-->
<!-- type="success"-->
<!-- icon="el-icon-s-promotion"-->
<!-- @click="handleShip(scope.row)"-->
<!-- v-hasPermi="['shop:order:edit']"-->
<!-- >打包发货</el-button>-->
<!-- </el-col>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-view"-->
<!-- @click="handleDetail(scope.row)"-->
<!-- v-hasPermi="['shop:order:edit']"-->
<!-- >详情</el-button>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-view"-->
<!-- @click="handleDetail(scope.row)"-->
<!-- v-hasPermi="['shop:order:edit']"-->
<!-- >打印发货单</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import {listShipOrder} from "@/api/shipping/shipOrder";
import { listShop } from "@/api/shop/shop";
import { listLogistics } from "@/api/shipping/logistics";
export default {
name: "Order",
data() {
return {
//
loading: true,
//
ids: [],
//
checkedSShopOrderItem: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
orderList: [],
// ${subTable.functionName}
sShopOrderItemList: [],
shopList:[],
//
detailTitle:'订单详情',
detailOpen:false,
isAudit:false,
shipOpen:false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
shipStatus: 3
},
logisticsList:[],
//
form: {},
//
rules: {
height: [{ required: true, message: '不能为空' }],
weight: [{ required: true, message: '不能为空' }],
shippingNumber: [{ required: true, message: '不能为空' }],
shippingCompany: [{ required: true, message: '不能为空' }],
shippingMan: [{ required: true, message: '不能为空' }],
}
};
},
created() {
listShop({}).then(response => {
this.shopList = response.rows;
});
listLogistics({}).then(resp=>{
this.logisticsList = resp.rows
})
this.getList();
},
methods: {
/** 查询店铺订单列表 */
getList() {
this.loading = true;
listShipOrder(this.queryParams).then(response => {
this.orderList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
cancel(){
this.shipOpen = false
},
/** 导出按钮操作 */
handleExport() {
this.download('api/order/export', {
...this.queryParams
}, `order_${new Date().getTime()}.xlsx`)
},
reset(){
},
/** 删除按钮操作 */
handleDetail(row) {
this.reset();
const id = row.id || this.ids
getOrder(id).then(response => {
this.form = response.data;
// this.$nextTick(()=>{
// this.form.shipType = response.data.shipType
// })
this.detailOpen = true;
this.detailTitle = "订单详情";
});
this.isAudit = false
},
/** 打包发货 **/
handleShip(row){
this.reset();
getOrder(row.id).then(response => {
this.form = response.data;
this.shipOpen = true;
// this.detailTitle = "";
});
},
submitShipForm(){
this.$refs["form"].validate(valid => {
if (valid) {
shipOrder(this.form).then(resp =>{
this.$modal.msgSuccess("发货成功");
})
}
})
}
}
};
</script>

View File

@ -0,0 +1,392 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" filterable placeholder="搜索店铺" >
<el-option v-for="item in shopList" :key="item.id" :label="item.name" :value="item.id">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 1">1688</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 2">视频号小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 3">京东</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 4">淘宝天猫</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 5">拼多多</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 6">抖店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 7">小红书</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 8">快手小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 99">其他</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="供应商" prop="supplierId">
<el-select
v-model="queryParams.supplierId"
filterable
placeholder="请选择供应商">
<el-option
v-for="item in supplierList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="订单编号" prop="orderNum">
<el-input
v-model="queryParams.orderNum"
placeholder="请输入订单编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="规格编码" prop="specNum">
<el-input
v-model="queryParams.specNum"
placeholder="请输入商品规格编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="el-icon-document-checked"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- >批量付款确认</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['scm:agentShipping:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="agentShippingList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="订单编号" align="center" prop="orderNum" />
<!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
<el-table-column label="供应商" align="center" prop="supplierId" >
<template slot-scope="scope">
<span>{{ supplierList.find(x=>x.id === scope.row.supplierId)?supplierList.find(x=>x.id === scope.row.supplierId).name:'' }}</span>
</template>
</el-table-column>
<el-table-column label="店铺" align="center" prop="shopId" >
<template slot-scope="scope">
<span>{{ shopList.find(x=>x.id === scope.row.shopId)?shopList.find(x=>x.id === scope.row.shopId).name:'' }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="店铺平台" align="center" prop="shopType" >
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.shopType === 4">淘宝</el-tag>
<el-tag size="small" v-if="scope.row.shopType === 5">拼多多</el-tag>
<el-tag size="small" v-if="scope.row.shopType === 6">抖店</el-tag>
<el-tag size="small" v-if="scope.row.shopType === 7">小红书</el-tag>
</template>
</el-table-column> -->
<!-- <el-table-column label="子订单编号" align="center" prop="subOrderNum" />-->
<!-- <el-table-column label="下单日期" align="center" prop="orderDate" width="180">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.orderDate, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="商品图片" >-->
<!-- <template slot-scope="scope">-->
<!-- <el-image style="width: 70px; height: 70px;" :src="scope.row.goodsImg"></el-image>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="商品ID" align="center" prop="goodsId" />
<el-table-column label="SkuId" align="center" prop="specId" />
<el-table-column label="Sku编码" align="center" prop="specNum" />
<el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="SKU编码" align="center" prop="specNum" />
<el-table-column label="操作" align="center" >
<template slot-scope="scope">
<el-button
v-if="scope.row.shipStatus !== 3"
size="mini"
type="primary"
icon="el-icon-s-promotion"
@click="handleShip(scope.row)"
v-hasPermi="['scm:agentShipping:edit']"
>发货</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改供应商代发货对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px" inline>
<el-form-item label="订单编号" prop="orderNum">
<el-input v-model="form.orderNum" placeholder="请输入订单编号" disabled/>
</el-form-item>
<el-form-item label="订单日期" prop="orderDate">
<el-date-picker clearable
v-model="form.orderTime" disabled
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择订单日期">
</el-date-picker>
</el-form-item>
<el-divider content-position="center">订单商品</el-divider>
<el-table :data="itemList" style="margin-bottom: 10px;">
<!-- <el-table-column type="selection" width="50" align="center" /> -->
<el-table-column label="序号" align="center" type="index" width="50"/>
<el-table-column label="供应商" prop="supplierId">
<template slot-scope="scope">
<span>{{ supplierList.find(x=>x.id === scope.row.supplierId)?supplierList.find(x=>x.id === scope.row.supplierId).name:'' }}</span>
</template>
</el-table-column>
<el-table-column label="商品ID" prop="goodsId"/>
<el-table-column label="SkuId" prop="specId"/>
<el-table-column label="Sku编码" prop="specNum"/>
<el-table-column label="数量" prop="quantity"/>
<el-table-column label="采购金额" prop="purAmount">
<template slot-scope="scope">
<el-input v-model="scope.row.purAmount" placeholder="请输入采购金额" />
</template>
</el-table-column>
</el-table>
<el-form-item label="物流公司" prop="logisticsCompany">
<el-select v-model="form.logisticsCompany" filterable r placeholder="选择快递公司" >
<el-option v-for="item in logisticsList" :key="item.id" :label="item.name" :value="item.name">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px" >{{item.number}}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="物流单号" prop="logisticsCode">
<el-input v-model="form.logisticsCode" placeholder="请输入物流单号" />
</el-form-item>
<el-form-item label="运费" prop="logisticsFee">
<el-input type="number" v-model.number="form.logisticsFee" placeholder="请输入运费" />
</el-form-item>
<el-form-item label="发货时间" prop="shipTime">
<el-date-picker clearable
v-model="form.shipTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择发货时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
</el-form-item>
<!-- <el-form-item label="子订单金额" prop="itemAmount">-->
<!-- <el-input v-model="form.itemAmount" placeholder="请输入子订单金额" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {getShipOrderItemList, listShipOrder, supplierShipOrder} from "@/api/shipping/shipOrder";
import { listSupplier} from "@/api/scm/supplier";
import { listShop } from "@/api/shop/shop";
import {listLogistics} from "@/api/shipping/logistics";
export default {
name: "supplierShip",
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
agentShippingList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
shopId: null,
goodsId: null,
specId: null,
shipType: 1,
shipStatus: 1,
specNum: null
},
shopList: [],
logisticsList:[],
//
form: {},
itemList:[],
//
rules: {
logisticsCompany: [{ required: true, message: '不能为空' }],
logisticsCode: [{ required: true, message: '不能为空' }],
logisticsFee: [{ required: true, message: '不能为空' }],
shipTime: [{ required: true, message: '不能为空' }],
},
supplierLoading:false,
supplierList:[]
};
},
created() {
listShop({}).then(response => {
this.shopList = response.rows;
});
this.getList();
// listShop({}).then(response => {
// this.shopList = response.rows;
// });
listSupplier({}).then(response => {
this.supplierList = response.rows;
});
listLogistics({}).then(resp=>{
this.logisticsList = resp.rows
})
},
methods: {
searchSupplier(query){
this.supplierLoading = true;
const qw = {
name:query
}
listSupplier(qw).then(response => {
this.supplierList = response.rows;
this.supplierLoading = false;
});
},
/** 查询供应商代发货列表 */
getList() {
this.loading = true;
listShipOrder(this.queryParams).then(response => {
this.agentShippingList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form.erpOrderId = null
this.form.orderNum = null
this.form.orderTime = null
this.form.itemList = []
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 发货按钮操作 */
handleShip(row) {
this.reset();
const id = row.id || this.ids
getShipOrderItemList(id).then(response => {
if(response.rows){
this.itemList = response.rows
this.form.orderNum = response.rows[0].orderNum;
this.form.erpOrderId = response.rows[0].erpOrderId;
this.form.orderTime = response.rows[0].orderTime;
}
this.open = true;
this.title = "发货";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
let hasAmoutNull = false;
//
console.log("=======",this.itemList)
this.itemList.forEach(x=>{
if(!x.purAmount){
hasAmoutNull = true
return
}
})
if(hasAmoutNull){
this.$modal.msgError("请填写采购金额");
}else{
this.form.itemList = this.itemList
supplierShipOrder(this.form).then(response => {
this.$modal.msgSuccess("发货成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 导出按钮操作 */
handleExport() {
this.download('scm/agentShipping/export', {
...this.queryParams
}, `agentShipping_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -0,0 +1,393 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" filterable placeholder="搜索店铺" >
<el-option v-for="item in shopList" :key="item.id" :label="item.name" :value="item.id">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 1">1688</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 2">视频号小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 3">京东</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 4">淘宝天猫</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 5">拼多多</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 6">抖店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 7">小红书</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 8">快手小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 99">其他</span>
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="商品ID" prop="goodsId">-->
<!-- <el-input-->
<!-- v-model="queryParams.goodsId"-->
<!-- placeholder="请输入erp系统商品id"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="商品编码" prop="goodsNum">-->
<!-- <el-input-->
<!-- v-model="queryParams.goodsNum"-->
<!-- placeholder="请输入商品编码"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="规格ID" prop="specId">-->
<!-- <el-input-->
<!-- v-model="queryParams.specId"-->
<!-- placeholder="请输入erp系统商品规格id"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="规格编码" prop="specNum">
<el-input
v-model="queryParams.specNum"
placeholder="请输入商品规格编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="备货状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择">
<el-option
v-for="item in statusList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-data-analysis"
size="mini"
:disabled="single"
@click="handleShip"
>发货</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-data-analysis"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleStatistics"-->
<!-- v-hasPermi="['xhs:orderReceiver:remove']"-->
<!-- >统计</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['wms:shipping:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="shippingList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="主键" align="center" prop="id" /> -->
<el-table-column label="订单编号" align="center" prop="orderNum" />
<el-table-column label="店铺" align="center" prop="shopId" >
<template slot-scope="scope">
<span>{{ shopList.find(x=>x.id === scope.row.shopId).name }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="子订单编号" align="center" prop="orderItemId" /> -->
<!-- <el-table-column label="订单日期" align="center" prop="orderDate" width="180">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.orderDate, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="商品图片" >
<template slot-scope="scope">
<el-image style="width: 70px; height: 70px;" :src="scope.row.goodsImg"></el-image>
</template>
</el-table-column>
<el-table-column label="商品标题" align="center" prop="goodsTitle" />
<el-table-column label="规格" align="center" prop="goodsSpec" />
<el-table-column label="规格编码" align="center" prop="specNum" />
<el-table-column label="erp商品id" align="center" prop="goodsId" />
<el-table-column label="erp商品SkuId" align="center" prop="specId" />
<el-table-column label="商品Sku编码" align="center" prop="specNum" />
<el-table-column label="商品数量" align="center" prop="quantity" >
<template slot-scope="scope">
<el-tag size="small">{{scope.row.quantity}}</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="仓库库存" align="center" prop="inventory" />-->
<el-table-column label="状态" align="center" prop="status" >
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.shipStatus === 1">出库中</el-tag>
<el-tag size="small" v-if="scope.row.shipStatus === 2">已出库</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" >
<template slot-scope="scope">
<el-button
v-if="scope.row.shipStatus === 2"
size="mini"
type="primary"
icon="el-icon-s-promotion"
@click="handleShip(scope.row)"
v-hasPermi="['scm:agentShipping:edit']"
>发货</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px" inline>
<el-form-item label="订单编号" prop="orderNum">
<el-input v-model="form.orderNum" placeholder="请输入订单编号" disabled/>
</el-form-item>
<el-form-item label="订单日期" prop="orderDate">
<el-date-picker clearable
v-model="form.orderTime" disabled
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择订单日期">
</el-date-picker>
</el-form-item>
<el-divider content-position="center">订单商品</el-divider>
<el-table :data="itemList" style="margin-bottom: 10px;">
<!-- <el-table-column type="selection" width="50" align="center" /> -->
<el-table-column label="序号" align="center" type="index" width="50"/>
<el-table-column label="商品ID" prop="goodsId"/>
<el-table-column label="SkuId" prop="specId"/>
<el-table-column label="Sku编码" prop="specNum"/>
<el-table-column label="数量" prop="quantity"/>
</el-table>
<el-form-item label="物流公司" prop="logisticsCompany">
<el-select v-model="form.logisticsCompany" filterable r placeholder="选择快递公司" >
<el-option v-for="item in logisticsList" :key="item.id" :label="item.name" :value="item.name">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px" >{{item.number}}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="物流单号" prop="logisticsCode">
<el-input v-model="form.logisticsCode" placeholder="请输入物流单号" />
</el-form-item>
<el-form-item label="运费" prop="logisticsFee">
<el-input type="number" v-model.number="form.logisticsFee" placeholder="请输入运费" />
</el-form-item>
<el-form-item label="发货时间" prop="shipTime">
<el-date-picker clearable
v-model="form.shipTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择发货时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
</el-form-item>
<!-- <el-form-item label="子订单金额" prop="itemAmount">-->
<!-- <el-input v-model="form.itemAmount" placeholder="请输入子订单金额" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {listShipOrder, getShipOrderItemList, wmsShipOrder} from "@/api/shipping/shipOrder";
import { listShop } from "@/api/shop/shop";
import {listLogistics} from "@/api/shipping/logistics";
export default {
name: "wsmShipOrder",
computed: {
supplier() {
return supplier
}
},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
shippingList: [],
//
title: "",
//
open: false,
supplierShipOpen: false,
skuIdUpdateOpen: false,
isGen:true,
//
queryParams: {
pageNum: 1,
pageSize: 10,
shopId: null,
goodsId: null,
specId: null,
shipType: 0,
shipStatus: 2,
specNum: null
},
logisticsList:[],
//
form: {
},
shopList: [],
itemList:[],
supplierList:[],
statusList: [
{
value: '0',
label: '待备货'
}, {
value: '1',
label: '备货中'
}, {
value: '2',
label: '已出库'
}
],
//
//
rules: {
logisticsCompany: [{ required: true, message: '不能为空' }],
logisticsCode: [{ required: true, message: '不能为空' }],
logisticsFee: [{ required: true, message: '不能为空' }],
shipTime: [{ required: true, message: '不能为空' }],
},
};
},
mounted() {
},
created() {
listShop({}).then(response => {
this.shopList = response.rows;
});
listLogistics({}).then(resp=>{
this.logisticsList = resp.rows
})
this.getList();
},
methods: {
rowItemIndex({ row, rowIndex }) {
row.index = rowIndex + 1;
},
/** 查询仓库订单发货列表 */
getList() {
this.loading = true;
listShipOrder(this.queryParams).then(response => {
this.shippingList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form.erpOrderId = null
this.form.orderNum = null
this.form.orderTime = null
this.form.itemList = []
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 发货按钮操作 */
handleShip(row) {
this.reset();
const id = row.id || this.ids
getShipOrderItemList(id).then(response => {
if(response.rows){
this.itemList = response.rows
this.form.orderNum = response.rows[0].orderNum;
this.form.erpOrderId = response.rows[0].erpOrderId;
this.form.orderTime = response.rows[0].orderTime;
}
this.open = true;
this.title = "发货";
});
},
/** 提交按钮 */
submitForm() {
// console.log("================",this.ids)
this.$refs["form"].validate(valid => {
if (valid) {
this.form.itemList = this.itemList
wmsShipOrder(this.form).then(response => {
this.$modal.msgSuccess("发货成功");
this.open = false;
this.getList();
});
}
});
},
}
};
</script>

View File

@ -0,0 +1,578 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" filterable placeholder="搜索店铺" >
<el-option v-for="item in shopList" :key="item.id" :label="item.name" :value="item.id">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 1">1688</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 2">视频号小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 3">京东</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 4">淘宝天猫</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 5">拼多多</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 6">抖店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 7">小红书</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 8">快手小店</span>
<span style="float: right; color: #8492a6; font-size: 13px" v-if="item.type === 99">其他</span>
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="商品ID" prop="goodsId">-->
<!-- <el-input-->
<!-- v-model="queryParams.goodsId"-->
<!-- placeholder="请输入erp系统商品id"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="商品编码" prop="goodsNum">-->
<!-- <el-input-->
<!-- v-model="queryParams.goodsNum"-->
<!-- placeholder="请输入商品编码"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="规格ID" prop="specId">-->
<!-- <el-input-->
<!-- v-model="queryParams.specId"-->
<!-- placeholder="请输入erp系统商品规格id"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="规格编码" prop="specNum">
<el-input
v-model="queryParams.specNum"
placeholder="请输入商品规格编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="备货状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择">
<el-option
v-for="item in statusList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-document-copy"
size="mini"
:disabled="multiple"
@click="handleSelection"
v-hasPermi="['xhs:orderReceiver:remove']"
>仓库发货</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-data-analysis"
size="mini"
:disabled="multiple"
@click="handleSupplierShip"
>分配供应商发货</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-data-analysis"
size="mini"
:disabled="multiple"
@click="handleStatistics"
v-hasPermi="['xhs:orderReceiver:remove']"
>统计</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['wms:shipping:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="shippingList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" v-if="queryParams.status==='0'" align="center" />
<!-- <el-table-column label="主键" align="center" prop="id" /> -->
<el-table-column label="订单编号" align="center" prop="originalOrderId" />
<el-table-column label="店铺" align="center" prop="shopId" >
<template slot-scope="scope">
<span>{{ shopList.find(x=>x.id === scope.row.shopId).name }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="子订单编号" align="center" prop="orderItemId" /> -->
<!-- <el-table-column label="订单日期" align="center" prop="orderDate" width="180">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.orderDate, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="商品图片" >
<template slot-scope="scope">
<el-image style="width: 70px; height: 70px;" :src="scope.row.goodsImg"></el-image>
</template>
</el-table-column>
<el-table-column label="商品标题" align="center" prop="goodsTitle" />
<el-table-column label="规格" align="center" prop="goodsSpec" />
<el-table-column label="规格编码" align="center" prop="specNum" />
<el-table-column label="erp商品id" align="center" prop="goodsId" />
<el-table-column label="erp商品SkuId" align="center" prop="specId" />
<el-table-column label="商品Sku编码" align="center" prop="specNum" />
<el-table-column label="商品数量" align="center" prop="quantity" >
<template slot-scope="scope">
<el-tag size="small">{{scope.row.quantity}}</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="仓库库存" align="center" prop="inventory" />-->
<el-table-column label="状态" align="center" prop="status" >
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.shipStatus === 0">待备货</el-tag>
<el-tag size="small" v-if="scope.row.shipStatus === 1">备货中</el-tag>
<el-tag size="small" v-if="scope.row.shipStatus === 2">已出库</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" >
<template slot-scope="scope">
<el-button
v-if="!scope.row.specId||scope.row.specId === 0"
size="mini"
type="primary"
icon="el-icon-edit"
@click="handleUpdateLink(scope.row)"
>修改商品关联</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改仓库订单发货对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px" inline>
<el-form-item label="单号" prop="stockOutNum" v-if="isGen">
<el-input v-model="form.stockOutNum" disabled placeholder="请输入单号" />
</el-form-item>
<el-form-item label="生成时间" prop="createTime" v-if="isGen">
<el-date-picker clearable
v-model="form.createTime"
type="datetime" disabled
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择生成时间">
</el-date-picker>
</el-form-item>
<el-divider content-position="center" v-if="isGen">拣货商品</el-divider>
<el-table :data="skuList" :row-class-name="rowItemIndex" ref="skuItem">
<!-- <el-table-column type="selection" width="50" align="center" />-->
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="商品图片" prop="goodsImg" >
<template slot-scope="scope">
<el-image style="width: 70px; height: 70px" :src="scope.row.goodsImg"></el-image>
</template>
</el-table-column>
<el-table-column label="商品标题" prop="goodsTitle" ></el-table-column>
<el-table-column label="规格" prop="goodsSpec" ></el-table-column>
<el-table-column label="sku编码" prop="specNum" ></el-table-column>
<el-table-column label="数量" prop="quantity"></el-table-column>
<el-table-column label="仓库库存" prop="inventory"></el-table-column>
</el-table>
</el-form>
<div slot="footer" class="dialog-footer" v-if="isGen">
<el-button type="primary" @click="submitForm">生成拣货单</el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 分配供应商发货对话框 -->
<el-dialog title="分配供应商发货" :visible.sync="supplierShipOpen" width="800px" append-to-body>
<el-form ref="form1" :model="form1" :rules="rules1" label-width="80px" inline>
<!-- <el-form-item label="供应商" prop="supplierId" >-->
<!-- <el-select-->
<!-- v-model="form1.supplierId"-->
<!-- filterable-->
<!-- placeholder="请选择供应商">-->
<!-- <el-option-->
<!-- v-for="item in supplierList"-->
<!-- :key="item.id"-->
<!-- :label="item.name"-->
<!-- :value="item.id">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-divider content-position="center" >待发货商品清单</el-divider>
<el-table :data="skuList" :row-class-name="rowItemIndex" ref="skuItem">
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="商品图片" prop="goodsImg" >
<template slot-scope="scope">
<el-image style="width: 70px; height: 70px" :src="scope.row.goodsImg"></el-image>
</template>
</el-table-column>
<el-table-column label="商品标题" prop="goodsTitle" ></el-table-column>
<el-table-column label="规格" prop="goodsSpec" ></el-table-column>
<el-table-column label="sku编码" prop="specNum" ></el-table-column>
<el-table-column label="数量" prop="quantity"></el-table-column>
<el-table-column label="供应商" prop="supplierId">
<template slot-scope="scope">
<span v-if="scope.row.supplierId">{{ supplierList.find(x=>x.id === scope.row.supplierId).name }}</span>
</template>
</el-table-column>
</el-table>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitSupplierShipForm">分配供应商发货</el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 修改skuid对话框 -->
<el-dialog title="修改SkuId" :visible.sync="skuIdUpdateOpen" width="500px" append-to-body>
<el-form ref="form2" :model="form2" :rules="rules2" label-width="120px" inline>
<!-- <el-form-item label="ERP商品ID" prop="erpGoodsId" >-->
<!-- <el-input v-model="form2.erpGoodsId" disabled placeholder="请输入ERP商品ID" />-->
<!-- </el-form-item>-->
<el-form-item label="ERP商品SkuId" prop="erpGoodsSpecId" >
<el-input type="number" v-model="form2.erpGoodsSpecId" placeholder="请输入ERP商品SkuId" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitSkuIdUpdateForm">分配供应商发货</el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {listShipping, distributeSupplierShip, generateStockOutEntry, orderItemSpecIdUpdate} from "@/api/wms/shipping";
import { listShop } from "@/api/shop/shop";
import {listSupplier} from "@/api/scm/supplier";
export default {
name: "ShippingStocking",
computed: {
supplier() {
return supplier
}
},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
shippingList: [],
//
title: "",
//
open: false,
supplierShipOpen: false,
skuIdUpdateOpen: false,
isGen:true,
//
queryParams: {
pageNum: 1,
pageSize: 100,
shopId: null,
goodsId: null,
specId: null,
goodsNum: null,
goodsSpec: null,
specNum: null,
status: null,
},
//
form: {
orderItemIds:[]
},
form1: {
orderItemIds:[]
},
form2: {
orderItemId:null
},
shopList: [],
skuList:[],
supplierList:[],
statusList: [
{
value: '0',
label: '待备货'
}, {
value: '1',
label: '备货中'
}, {
value: '2',
label: '已出库'
}
],
//
rules: {
stockOutNum: [{ required: true, message: "单号不能为空", trigger: "blur" }],
createTime: [{ required: true, message: "生成时间不能为空", trigger: "blur" }],
goodsId: [{ required: true, message: "erp系统商品id不能为空", trigger: "blur" }],
specId: [{ required: true, message: "erp系统商品规格id不能为空", trigger: "blur" }],
quantity: [{ required: true, message: "商品数量不能为空", trigger: "blur" }],
},
rules1: {
supplierId: [{ required: true, message: "请选择供应商", trigger: "blur" }],
},
rules2: {
erpGoodsSpecId: [{ required: true, message: "请选择填写ERP商品SkuId", trigger: "blur" }],
}
};
},
mounted() {
},
created() {
listShop({}).then(response => {
this.shopList = response.rows;
});
if(this.$route.query.status){
this.queryParams.status = this.$route.query.status
}else {
this.queryParams.status = '0'
}
this.getList();
},
methods: {
rowItemIndex({ row, rowIndex }) {
row.index = rowIndex + 1;
},
/** 查询仓库订单发货列表 */
getList() {
this.loading = true;
listShipping(this.queryParams).then(response => {
this.shippingList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.skuList = []
this.open = false;
this.supplierShipOpen = false;
this.skuIdUpdateOpen = false;
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 提交按钮 */
submitForm() {
// console.log("================",this.ids)
this.$refs["form"].validate(valid => {
if (valid) {
if(!this.skuList || this.skuList.length === 0){
this.$modal.msgError("请选择备货商品");
}
this.form.orderItemIds = this.ids;
generateStockOutEntry(this.form).then(response => {
this.$modal.msgSuccess("拣货单生成成功");
this.open = false;
this.getList();
});
}
});
},
handleStatistics(row){
this.handleSelection(row,false)
},
/** 按钮操作 */
handleSelection(row,isGen) {
const ids = row.id || this.ids;
// console.log("==========",ids)
if(!ids && ids.length===0){
this.$modal.msgError("请选选择要备货的商品");
return
}
if(isGen===undefined) this.isGen = true
else this.isGen = isGen
if(this.isGen === false)this.title = "备货统计";
else this.title = "生成拣货单";
//
var date = new Date();
var year = date.getFullYear().toString(); //
var month = (date.getMonth() + 1).toString().padStart(2, '0'); //
var day = date.getDate().toString().padStart(2, '0'); //
var hours = date.getHours().toString().padStart(2, '0'); //
var minutes = date.getMinutes().toString().padStart(2, '0'); //
var seconds = date.getSeconds().toString().padStart(2, '0'); //
//
var randomNum = Math.floor((Math.random() * 9) + 1); // 19
//
var code = `${year}${month}${day}${hours}${minutes}${seconds}${randomNum}`;
// console.log("" + code);
this.form.stockOutNum = code
this.form.createTime = new Date()
this.skuList=[]
ids.forEach(id=>{
const obj = this.shippingList.find(y=>y.id === id)
const has = this.skuList.find(y=>y.specId === obj.specId)
if(has){
//
has.quantity = has.quantity + obj.quantity
has.ids.push(id)
}else{
//
const ids1 =[]
ids1.push(id);
this.skuList.push({
ids:ids1,
specId:obj.specId,
goodsImg:obj.goodsImg,
goodsNum:obj.goodsNum,
goodsTitle:obj.goodsTitle,
goodsSpec:obj.goodsSpec,
specNum:obj.specNum,
quantity:obj.quantity,
inventory:obj.inventory
})
}
})
this.open = true;
// this.$modal.confirm('"' + ids + '"').then(function() {
// return delShipping(ids);
// }).then(() => {
// this.getList();
// this.$modal.msgSuccess("");
// }).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('wms/shipping/export', {
...this.queryParams
}, `shipping_${new Date().getTime()}.xlsx`)
},
/** 分配供应商发货 */
handleSupplierShip(row){
const ids = row.id || this.ids;
// console.log("==========",ids)
if(!ids && ids.length===0){
this.$modal.msgError("请选选择发货的商品");
return
}else{
listSupplier({}).then(response => {
this.supplierList = response.rows;
ids.forEach(id=>{
const obj = this.shippingList.find(y=>y.id === id)
const has = this.skuList.find(y=>y.specId === obj.specId)
if(has){
//
has.quantity = has.quantity + obj.quantity
has.ids.push(id)
}else{
//
const ids1 =[]
ids1.push(id);
this.skuList.push({
ids:ids1,
specId:obj.specId,
goodsImg:obj.goodsImg,
goodsNum:obj.goodsNum,
goodsTitle:obj.goodsTitle,
goodsSpec:obj.goodsSpec,
specNum:obj.specNum,
quantity:obj.quantity,
inventory:obj.inventory
})
}
})
this.supplierShipOpen = true
});
}
},
submitSupplierShipForm() {
this.$refs["form1"].validate(valid => {
if (valid) {
if(!this.skuList || this.skuList.length === 0){
this.$modal.msgError("请选择代发货商品");
}
this.form.orderItemIds = this.ids;
distributeSupplierShip(this.form).then(response => {
this.$modal.msgSuccess("分配成功");
this.supplierShipOpen = false;
this.getList();
});
}
});
},
handleUpdateLink(row){
console.log("修改商品关联")
this.skuIdUpdateOpen = true
this.form2.orderItemId = row.id
// this.$modal.msgError("");
},
submitSkuIdUpdateForm(){
this.$refs["form2"].validate(valid => {
if (valid) {
orderItemSpecIdUpdate(this.form2).then(response => {
this.$modal.msgSuccess("SkuId修改成功");
this.skuIdUpdateOpen = false;
this.getList();
});
}
});
}
}
};
</script>

View File

@ -0,0 +1,51 @@
<template>
<div class="app-container">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="淘宝天猫" name="taoRefund">
<tao-refund></tao-refund>
</el-tab-pane>
<el-tab-pane label="京东" name="jdRefund" lazy>
<refund-jd></refund-jd>
</el-tab-pane>
<el-tab-pane label="视频号小店" name="weiRefund" lazy>
<refund-wei></refund-wei>
</el-tab-pane>
<!-- <el-tab-pane label="抖店" name="douOrder" lazy>-->
<!-- <dou-refund></dou-refund>-->
<!-- </el-tab-pane>-->
<!-- <el-tab-pane label="拼多多" name="pddOrder" lazy>-->
<!-- <pdd-refund></pdd-refund>-->
<!-- </el-tab-pane>-->
</el-tabs>
</div>
</template>
<script>
import TaoRefund from "@/views/tao/refund/index";
import RefundJd from "@/views/jd/refund/index";
import RefundWei from "@/views/wei/refund/index";
import DouRefund from "@/views/dou/refund/index.vue";
import PddRefund from "@/views/pdd/refund/index.vue";
export default {
name: "refund",
components:{PddRefund, DouRefund, TaoRefund,RefundJd,RefundWei},
data() {
return {
activeName: 'taoRefund'
};
},
created() {
},
mounted() {
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
}
}
};
</script>

View File

@ -0,0 +1,378 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="店铺" prop="shopId">
<el-select v-model="queryParams.shopId" placeholder="请选择店铺" clearable @change="handleQuery">
<el-option
v-for="item in shopList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="退款单号" prop="refundId">
<el-input
v-model="queryParams.refundId"
placeholder="请输入退款单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="订单号" prop="tid">
<el-input
v-model="queryParams.tid"
placeholder="请输入订单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="申请时间" prop="created">-->
<!-- <el-date-picker clearable-->
<!-- v-model="queryParams.created"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="请选择退款申请时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="物流单号" prop="logisticsCode">-->
<!-- <el-input-->
<!-- v-model="queryParams.logisticsCode"-->
<!-- placeholder="请输入物流单号"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
:loading="pullLoading"
type="danger"
plain
icon="el-icon-download"
size="mini"
@click="handlePull"
>API拉取新退款</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-refresh"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handlePushOms"-->
<!-- >同步到ERP</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="taoRefundList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="${comment}" align="center" prop="id" /> -->
<el-table-column label="退款单号" align="center" prop="afterSaleOrderId" />
<el-table-column label="店铺" align="center" prop="shopId" >
<template slot-scope="scope">
<span>{{ shopList.find(x=>x.id === scope.row.shopId).name }}</span>
</template>
</el-table-column>
<el-table-column label="类型" align="center" prop="type" >
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.type === 'REFUND'"> 退款</el-tag>
<el-tag size="small" v-if="scope.row.type === 'RETURN'"> 退货退款</el-tag>
</template>
</el-table-column>
<el-table-column label="订单号" align="center" prop="orderId" />
<el-table-column label="退货数量" align="center" prop="count" />
<el-table-column label="商品skuId" align="center" prop="skuId" />
<el-table-column label="退款金额" align="center" prop="refundAmount" >
<template slot-scope="scope">
<span>{{ scope.row.refundAmount/100 }}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{m}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="退款原因" align="center" prop="reasonText" />
<!-- <el-table-column label="说明" align="center" prop="details" />-->
<el-table-column label="退货物流" align="center" prop="returnWaybillId" />
<el-table-column label="状态" align="center" prop="status" >
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_RETURN_SUCCESS'"> 退货退款完成</el-tag>
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_REFUND_SUCCESS'"> 退款完成</el-tag>
<el-tag size="small" v-if="scope.row.status === 'USER_CANCELD'"> 用户取消申请</el-tag>
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_PROCESSING'"> 商家受理中</el-tag>
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_REJECT_REFUND'">商家拒绝退款</el-tag>
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_REJECT_RETURN'">商家拒绝退货退款</el-tag>
<el-tag size="small" v-if="scope.row.status === 'USER_WAIT_RETURN'">待买家退货</el-tag>
<el-tag size="small" v-if="scope.row.status === 'RETURN_CLOSED'">退货退款关闭</el-tag>
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_WAIT_RECEIPT'">待商家收货</el-tag>
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_OVERDUE_REFUND'">商家逾期未退款</el-tag>
<el-tag size="small" v-if="scope.row.status === 'PLATFORM_REFUNDING'">平台退款中</el-tag>
<el-tag size="small" v-if="scope.row.status === 'PLATFORM_REFUND_FAIL'">平台退款失败</el-tag>
<el-tag size="small" v-if="scope.row.status === 'USER_WAIT_CONFIRM'">待用户确认</el-tag>
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_REFUND_RETRY_FAIL'">商家打款失败客服关闭售后</el-tag>
<el-tag size="small" v-if="scope.row.status === 'MERCHANT_FAIL'">售后关闭</el-tag>
<el-tag size="small" v-if="scope.row.status === 'USER_WAIT_CONFIRM_UPDATE'">待用户处理商家协商</el-tag>
<el-tag size="small" v-if="scope.row.status === 'USER_WAIT_HANDLE_MERCHANT_AFTER_SALE'">待用户处理商家代发起的售后申请</el-tag>
<br/>
<el-tag size="small" style="margin-top: 5px" v-if="scope.row.type === 'RETURN' && scope.row.confirmStatus === 9">已签收</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
<template slot-scope="scope">
<el-button
v-if="scope.row.type === 'RETURN' && !scope.row.confirmStatus"
size="mini"
type="text"
icon="el-icon-document-checked"
@click="handleReturnedConfirm(scope.row) "
>退货签收</el-button>
<el-button
v-if="scope.row.type === 'REFUND' && !scope.row.confirmStatus"
size="mini"
type="text"
icon="el-icon-connection"
@click="handleOrderIntercept(scope.row) "
>订单拦截</el-button>
<el-row>
<el-button
size="mini"
type="text"
icon="el-icon-refresh"
@click="handleConfirm(scope.row)"
v-hasPermi="['tao:taoRefund:edit']"
>更新</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleDelete(scope.row)"
>详情</el-button>
</el-row>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改淘宝退款订单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="退款ID" prop="refundId">
<el-input v-model="form.refundId" placeholder="请输入退款id" disabled/>
</el-form-item>
<el-form-item label="订单单号" prop="tid">
<el-input v-model="form.tid" placeholder="请输入淘宝交易单号" disabled/>
</el-form-item>
<el-form-item label="退还金额" prop="refundFee">
<el-input v-model="form.refundFee" placeholder="请输入退还金额(退还给买家的金额)。精确到2位小数;单位:元。如:200.07,表示:200元7分" disabled/>
</el-form-item>
<el-form-item label="sku编号" prop="specNumber">
<el-input v-model="form.specNumber" placeholder="请输入sku编号" />
</el-form-item>
<el-form-item label="退货数量" prop="num">
<el-input v-model="form.num" placeholder="请输入退货数量" disabled/>
</el-form-item>
<el-form-item label="物流公司" prop="logisticsCompany">
<el-input v-model="form.logisticsCompany" placeholder="请输入物流公司" />
</el-form-item>
<el-form-item label="物流单号" prop="logisticsCode">
<el-input v-model="form.logisticsCode" placeholder="请输入物流单号" />
</el-form-item>
<el-form-item label="发货时间" prop="sendTime">
<el-date-picker clearable
v-model="form.sendTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择发货时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listShop } from "@/api/shop/shop";
import {MessageBox} from "element-ui";
import {isRelogin} from "@/utils/request";
import {listShopRefund, orderIntercept, pullRefund, returnedConfirm} from "@/api/wei/refund";
export default {
name: "RefundWei",
data() {
return {
//
loading: true,
pullLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 退
taoRefundList: [],
shopList:[],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
refundId: null,
afterSalesType: null,
tid: null,
oid: null
},
//
form: {},
//
rules: {
num: [
{ required: true, message: "退货数量不能为空", trigger: "blur" }
],
logisticsCompany: [
{ required: true, message: "不能为空", trigger: "change" }
],
logisticsCode: [
{ required: true, message: "不能为空", trigger: "blur" }
],
sendTime: [
{ required: true, message: "不能为空", trigger: "blur" }
],
}
};
},
created() {
listShop({type:2}).then(response => {
this.shopList = response.rows;
});
this.getList();
},
methods: {
/** 查询淘宝退款订单列表 */
getList() {
this.loading = true;
listShopRefund(this.queryParams).then(response => {
this.taoRefundList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
refundId: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.refundId)
this.single = selection.length!==1
this.multiple = !selection.length
},
handlePull() {
if(this.queryParams.shopId){
this.pullLoading = true
pullRefund({shopId:this.queryParams.shopId,updType:0}).then(response => {
console.log('拉取退款接口返回=====',response)
if(response.code === 1401) {
MessageBox.confirm('Token已过期需要重新授权', '系统提示', { confirmButtonText: '重新授权', cancelButtonText: '取消', type: 'warning' }).then(() => {
isRelogin.show = false;
// store.dispatch('LogOut').then(() => {
location.href = response.data.tokenRequestUrl+'?shopId='+this.queryParams.shopId
// })
}).catch(() => {
isRelogin.show = false;
});
// return Promise.reject('')
}else{
this.getList()
this.$modal.msgSuccess(JSON.stringify(response));
this.pullLoading = false
}
})
}else{
this.$modal.msgSuccess("请先选择店铺");
}
// this.$modal.msgSuccess("API");
},
handleReturnedConfirm(row){
returnedConfirm(row.id).then(response => {
this.$modal.msgSuccess("签收完成");
this.getList()
});
},
handleOrderIntercept(row){
orderIntercept(row.id).then(response => {
this.$modal.msgSuccess("拦截成功");
this.getList()
});
},
submitForm(){
}
}
};
</script>