diff --git a/superMarket-backend/.gitignore b/superMarket-backend/.gitignore new file mode 100644 index 0000000..24062a7 --- /dev/null +++ b/superMarket-backend/.gitignore @@ -0,0 +1,37 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target +/.mvn/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +*.log +*.jar + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + + +### VS Code ### +.vscode/ diff --git a/superMarket-backend/doc/db_market.sql b/superMarket-backend/doc/db_market.sql new file mode 100644 index 0000000..0ed766a --- /dev/null +++ b/superMarket-backend/doc/db_market.sql @@ -0,0 +1,554 @@ +/* + Navicat Premium Data Transfer + + Source Server : local + Source Server Type : MySQL + Source Server Version : 80029 (8.0.29) + Source Host : localhost:3306 + Source Schema : db_market + + Target Server Type : MySQL + Target Server Version : 80029 (8.0.29) + File Encoding : 65001 + + Date: 09/09/2024 08:11:51 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for department +-- ---------------------------- +DROP TABLE IF EXISTS `department`; +CREATE TABLE `department` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '部门名称', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of department +-- ---------------------------- +BEGIN; +INSERT INTO `department` (`id`, `name`, `info`, `state`) VALUES (8, '销售部', '销售部门', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for detail_sale_records +-- ---------------------------- +DROP TABLE IF EXISTS `detail_sale_records`; +CREATE TABLE `detail_sale_records` ( + `sell_cn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '销售订单号', + `goods_id` bigint NOT NULL COMMENT '商品编号', + `goods_num` bigint NOT NULL COMMENT '商品数量', + `goods_price` double(10,2) NOT NULL COMMENT '销售单价', + `goods_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '商品名' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of detail_sale_records +-- ---------------------------- +BEGIN; +INSERT INTO `detail_sale_records` (`sell_cn`, `goods_id`, `goods_num`, `goods_price`, `goods_name`) VALUES ('1701213155180429314', 7, 1, 120.00, '运动鞋'); +INSERT INTO `detail_sale_records` (`sell_cn`, `goods_id`, `goods_num`, `goods_price`, `goods_name`) VALUES ('1701220094014722049', 9, 1, 350.00, '桌椅套装'); +COMMIT; + +-- ---------------------------- +-- Table structure for employee +-- ---------------------------- +DROP TABLE IF EXISTS `employee`; +CREATE TABLE `employee` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `phone` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '用户名', + `email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '邮箱', + `address` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '住址', + `sex` char(1) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '性别', + `password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '密码', + `nick_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '昵称', + `head_img` longtext CHARACTER SET utf8mb3 COLLATE utf8_bin COMMENT '头像', + `state` varchar(1) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态 0:在职 1:离职', + `isAdmin` bit(1) DEFAULT NULL COMMENT '是否是超管 1:是 0不是', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `createby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `age` int DEFAULT NULL COMMENT '年龄', + `deptId` bigint DEFAULT NULL COMMENT '部门主键', + `id_card` varchar(18) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '身份证号', + `leave_time` datetime DEFAULT NULL COMMENT '离职时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of employee +-- ---------------------------- +BEGIN; +INSERT INTO `employee` (`id`, `phone`, `email`, `address`, `sex`, `password`, `nick_name`, `head_img`, `state`, `isAdmin`, `info`, `createby`, `create_time`, `age`, `deptId`, `id_card`, `leave_time`) VALUES (1, '13333333333', '123@qq.com', '杭州市余杭区水果摊', '1', '123456', '杭州水果捞', '/files/1725801956845_1.jpg', '0', b'1', '系统管理员', '张三', '2024-09-08 13:26:31', 29, NULL, '411111199905089999', NULL); +INSERT INTO `employee` (`id`, `phone`, `email`, `address`, `sex`, `password`, `nick_name`, `head_img`, `state`, `isAdmin`, `info`, `createby`, `create_time`, `age`, `deptId`, `id_card`, `leave_time`) VALUES (15, '14788888888', NULL, '北京市海淀区', '1', '123456', '李四', '/files/1694434162457_07.jpg', '0', b'0', '销售人员', '杭州水果捞', '2024-09-09 00:06:51', 18, 8, '411111199501019999', NULL); +INSERT INTO `employee` (`id`, `phone`, `email`, `address`, `sex`, `password`, `nick_name`, `head_img`, `state`, `isAdmin`, `info`, `createby`, `create_time`, `age`, `deptId`, `id_card`, `leave_time`) VALUES (16, '15455555555', NULL, NULL, '1', '123456', '叶子', '/files/1694434162457_07.jpg', '0', b'0', '仓库管理员', '张三', '2023-09-11 13:06:52', 18, 8, '511111199501015555', NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for exchange_point_products_records +-- ---------------------------- +DROP TABLE IF EXISTS `exchange_point_products_records`; +CREATE TABLE `exchange_point_products_records` ( + `cn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '订单号', + `goods_id` bigint DEFAULT NULL COMMENT '商品编号', + `member_id` bigint DEFAULT NULL COMMENT '会员编号', + `integral` bigint DEFAULT NULL COMMENT '积分', + `update_time` datetime DEFAULT NULL COMMENT '最近操作时间', + `updateby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '操作者', + `update_id` bigint DEFAULT NULL COMMENT '操作者编号', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态', + PRIMARY KEY (`cn`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of exchange_point_products_records +-- ---------------------------- +BEGIN; +INSERT INTO `exchange_point_products_records` (`cn`, `goods_id`, `member_id`, `integral`, `update_time`, `updateby`, `update_id`, `state`) VALUES ('1701220420541288450', 10, 5, 60, '2023-09-11 13:05:30', '张三', 1, '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for goods +-- ---------------------------- +DROP TABLE IF EXISTS `goods`; +CREATE TABLE `goods` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '商品名', + `createby` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `category_id` bigint DEFAULT NULL COMMENT '商品分类id', + `sell_price` double(10,2) DEFAULT NULL COMMENT '销售价格', + `purchash_price` double(10,2) DEFAULT NULL COMMENT '进货价格', + `update_time` datetime DEFAULT NULL COMMENT '更改时间', + `updateby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '更改者', + `category_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_czech_ci DEFAULT NULL COMMENT '分类名', + `cover_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '商品封面', + `state` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '状态', + `residue_num` bigint DEFAULT NULL COMMENT '剩余数量', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `sales_volume` bigint DEFAULT NULL COMMENT '销量', + `inventory` bigint DEFAULT NULL COMMENT '需库存量', + `shelves` bigint DEFAULT NULL COMMENT '货架上需摆放的数量', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of goods +-- ---------------------------- +BEGIN; +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (7, '运动鞋', '张三', '2023-09-11 12:20:02', 9, 150.00, 120.00, '2023-09-11 12:20:02', '张三', '服装', '/files/1694434783850_04.jpg', '0', 19, '适合打球跑步的运动鞋', 1, 100, 10); +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (8, '《PASLMS》英文版', '张三', '2023-09-11 12:21:11', 11, 55.00, 50.00, '2023-09-11 12:21:11', '张三', '书籍', '/files/1694434840737_05.jpg', '0', 60, '著名书籍《PASLMS》英文版', NULL, 200, 50); +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (9, '桌椅套装', '张三', '2023-09-11 12:21:43', 13, 400.00, 350.00, '2023-09-11 12:22:00', '张三', '办公用具', '/files/1694434883855_03.jpg', '0', 9, '桌子加椅子', 1, 300, 20); +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (10, '短袖', '张三', '2023-09-11 12:22:50', 9, 60.00, 40.00, '2023-09-11 12:22:50', '张三', '服装', '/files/1694434945440_02.jpg', '0', 60, '夏季短袖', NULL, NULL, NULL); +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (11, '变形金刚玩具套装', '张三', '2023-09-11 12:30:45', 13, 165.00, 140.00, '2023-09-11 12:30:45', '张三', '办公用具', '/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg', '0', 20, '变形金刚玩具套装', NULL, NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for goods_category +-- ---------------------------- +DROP TABLE IF EXISTS `goods_category`; +CREATE TABLE `goods_category` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '分类名', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of goods_category +-- ---------------------------- +BEGIN; +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (9, '服装', '衣服鞋袜', '0'); +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (10, '零食', '饭后零食', '0'); +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (11, '书籍', NULL, '0'); +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (12, '饮料酒水', '饮料酒水类别', '0'); +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (13, '办公用具', '办公用具', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for point_products +-- ---------------------------- +DROP TABLE IF EXISTS `point_products`; +CREATE TABLE `point_products` ( + `goods_id` bigint DEFAULT NULL, + `goods_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `integral` bigint DEFAULT NULL, + `updateby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + `update_id` bigint DEFAULT NULL, + `cover_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of point_products +-- ---------------------------- +BEGIN; +INSERT INTO `point_products` (`goods_id`, `goods_name`, `integral`, `updateby`, `update_time`, `update_id`, `cover_url`, `state`) VALUES (11, '变形金刚玩具套装', 50, '张三', '2023-09-11 12:59:48', 1, '/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg', '0'); +INSERT INTO `point_products` (`goods_id`, `goods_name`, `integral`, `updateby`, `update_time`, `update_id`, `cover_url`, `state`) VALUES (10, '短袖', 60, '张三', '2023-09-11 12:59:57', 1, '/files/1694434945440_02.jpg', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for store +-- ---------------------------- +DROP TABLE IF EXISTS `store`; +CREATE TABLE `store` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '仓库名称', + `address` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '仓库地址', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '状态', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of store +-- ---------------------------- +BEGIN; +INSERT INTO `store` (`id`, `name`, `address`, `state`, `info`) VALUES (5, '一号仓库', '北京市海淀区', '0', '超市一号仓库'); +COMMIT; + +-- ---------------------------- +-- Table structure for supplier +-- ---------------------------- +DROP TABLE IF EXISTS `supplier`; +CREATE TABLE `supplier` ( + `cn` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '名称', + `address` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '地址', + `tel` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '联系电话', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`cn`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of supplier +-- ---------------------------- +BEGIN; +INSERT INTO `supplier` (`cn`, `name`, `address`, `tel`, `info`, `state`) VALUES (7, '阿里巴巴', '浙江省杭州市', '19955555555', '1688商家供货商', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for t_detail_store_goods +-- ---------------------------- +DROP TABLE IF EXISTS `t_detail_store_goods`; +CREATE TABLE `t_detail_store_goods` ( + `cn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `goods_id` bigint NOT NULL, + `goods_num` int DEFAULT NULL, + `goods_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `goods_price` double DEFAULT NULL COMMENT '0:入库 1:出库', + `type` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `createid` bigint NOT NULL, + `create_time` datetime NOT NULL, + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '0:正常 1:过期 2:下架', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `expiry_time` datetime DEFAULT NULL COMMENT '过期时间', + `createby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `birth_time` datetime DEFAULT NULL COMMENT '生产时间', + `state1` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '0:正常 1:删除 2:待处理', + `store_id` bigint DEFAULT NULL, + `supplier_id` bigint DEFAULT NULL COMMENT '供货商编号', + `supplier_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '供货商名称', + `untreated_num` bigint DEFAULT NULL COMMENT '待处理数量', + PRIMARY KEY (`cn`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_detail_store_goods +-- ---------------------------- +BEGIN; +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212006578667522', 7, 200, '运动鞋', 120, '0', 1, '2023-09-11 12:32:04', '0', '运动鞋入库', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212043736006658', 8, 200, '《PASLMS》英文版', 50, '0', 1, '2023-09-11 12:32:13', '0', '', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212067161194498', 9, 200, '桌椅套装', 350, '0', 1, '2023-09-11 12:32:18', '0', '', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212086803120129', 10, 200, '短袖', 40, '0', 1, '2023-09-11 12:32:23', '0', '', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212102829555713', 11, 200, '变形金刚玩具套装', 140, '0', 1, '2023-09-11 12:32:27', '0', '', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212176804495361', 7, 20, '运动鞋', NULL, '1', 1, '2023-09-11 12:32:45', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701218295690104833', 8, 50, '《PASLMS》英文版', NULL, '1', 1, '2023-09-11 12:57:03', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701218352346763266', 9, 10, '桌椅套装', NULL, '1', 1, '2023-09-11 12:57:17', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701218386224156674', 10, 60, '短袖', NULL, '1', 1, '2023-09-11 12:57:25', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701218444214603778', 11, 20, '变形金刚玩具套装', NULL, '1', 1, '2023-09-11 12:57:39', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701219991275245570', 8, 10, '《PASLMS》英文版', NULL, '1', 1, '2023-09-11 13:03:48', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for t_emp_role +-- ---------------------------- +DROP TABLE IF EXISTS `t_emp_role`; +CREATE TABLE `t_emp_role` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `eid` bigint NOT NULL COMMENT '用户id', + `rid` bigint NOT NULL COMMENT '角色id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_emp_role +-- ---------------------------- +BEGIN; +INSERT INTO `t_emp_role` (`id`, `eid`, `rid`) VALUES (1, 1, 2); +INSERT INTO `t_emp_role` (`id`, `eid`, `rid`) VALUES (20, 15, 3); +INSERT INTO `t_emp_role` (`id`, `eid`, `rid`) VALUES (21, 16, 4); +INSERT INTO `t_emp_role` (`id`, `eid`, `rid`) VALUES (22, 16, 5); +COMMIT; + +-- ---------------------------- +-- Table structure for t_goods_store +-- ---------------------------- +DROP TABLE IF EXISTS `t_goods_store`; +CREATE TABLE `t_goods_store` ( + `goods_id` bigint NOT NULL COMMENT '商品编号', + `store_id` bigint NOT NULL COMMENT '仓库编号', + `in_num` bigint NOT NULL COMMENT '入库数数量', + `residue_num` bigint NOT NULL COMMENT '剩余数量', + `store_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '仓库名' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_goods_store +-- ---------------------------- +BEGIN; +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (7, 5, 200, 180, '一号仓库'); +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (8, 5, 200, 140, '一号仓库'); +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (9, 5, 200, 190, '一号仓库'); +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (10, 5, 200, 140, '一号仓库'); +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (11, 5, 200, 180, '一号仓库'); +COMMIT; + +-- ---------------------------- +-- Table structure for t_member +-- ---------------------------- +DROP TABLE IF EXISTS `t_member`; +CREATE TABLE `t_member` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '姓名', + `phone` varchar(11) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '手机号', + `password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '密码', + `email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '邮箱', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '状态', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `integral` bigint DEFAULT NULL COMMENT '会员积分', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_member +-- ---------------------------- +BEGIN; +INSERT INTO `t_member` (`id`, `name`, `phone`, `password`, `email`, `state`, `info`, `integral`) VALUES (5, '陈小明', '19955555555', '123456', '123@qq.com', '0', '新会员', 2622); +COMMIT; + +-- ---------------------------- +-- Table structure for t_menu +-- ---------------------------- +DROP TABLE IF EXISTS `t_menu`; +CREATE TABLE `t_menu` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `label` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '名称', + `purl` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '地址', + `type` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '类型 0:目录 1 菜单 2 按钮', + `parent_id` bigint DEFAULT NULL COMMENT '父id', + `parent_label` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '父名称', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `state` varchar(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '状态', + `flag` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '权限的唯一标识', + `icon` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '图标', + `component` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '组件路径', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_menu +-- ---------------------------- +BEGIN; +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (1, '销售管理', NULL, '0', NULL, NULL, NULL, '0', 'sale_management', 'iconfont icon-r-shield', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (2, '人事管理', NULL, '0', NULL, NULL, NULL, '0', 'personnel_management', 'iconfont icon-r-team', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (3, '个人中心', NULL, '0', NULL, NULL, NULL, '0', 'personal', 'iconfont icon-r-user2', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (4, '库存管理', NULL, '0', NULL, NULL, NULL, '0', 'inventory_management', 'iconfont icon-r-building', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (5, '会员管理', NULL, '0', NULL, NULL, NULL, '0', 'member_management', 'iconfont icon-r-mark1', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (6, '系统管理', NULL, '0', NULL, NULL, NULL, '0', 'system', 'iconfont icon-r-setting', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (7, '密码修改', '/personal/edit_pwd', '1', 3, '个人中心', NULL, '0', 'personal:edit_pwd', 'iconfont icon-r-lock', 'views/personal/Edit_pwd'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (8, '角色管理', '/system/role/list', '1', 6, '系统管理', NULL, '0', 'system:role:list', 'iconfont icon-r-user3', 'views/system/role/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (9, '创建角色', NULL, '2', 8, '角色管理', NULL, '0', 'system:role:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (10, '修改角色', NULL, '2', 8, '角色管理', NULL, '0', 'system:role:edit_role', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (11, '停用角色', NULL, '2', 8, '角色管理', NULL, '0', 'system:role:forbiddenRole', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (12, '角色授权', NULL, '2', 8, '角色管理', NULL, '0', 'system:role:saveRolePermissons', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (14, '菜单管理', '/system/menu/list', '1', 6, '系统管理', NULL, '0', 'system:menu:list', 'iconfont icon-r-list', 'views/system/menu/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (15, '仓库管理', '/inventory_management/store/list', '1', 4, '库存管理', NULL, '0', 'inventory_management:store:list', 'iconfont icon-r-building', 'views/inventory_management/store/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (16, '新创仓库', '', '2', 15, '仓库管理', NULL, '0', 'inventory_management:store:save', NULL, ''); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (17, '修改仓库', '', '2', 15, '仓库管理', NULL, '0', 'inventory_management:store:update', NULL, ''); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (18, '停用仓库', '', '2', 15, '仓库管理', NULL, '0', 'inventory_management:store:deactivate', NULL, ''); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (19, '商品管理', NULL, '0', NULL, NULL, NULL, '0', 'goods_management:goods_category', 'iconfont icon-r-mark2', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (20, '分类管理', '/goods_management/goods_category/list', '1', 19, '商品管理', NULL, '0', 'goods_management:goods_category:list', 'iconfont icon-r-list', 'views/goods_management/goods_category/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (21, '创建商品分类', '', '2', 20, '商品分类管理', NULL, '0', 'goods_management:goods_category:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (22, '修改商品分类', '', '2', 20, '商品分类管理', NULL, '0', 'goods_management:goods_category:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (23, '停用商品分类', '', '2', 20, '商品分类管理', NULL, '0', 'goods_management:goods_category:deactivate', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (24, '部门管理', '/personnel_management/dept/list', '1', 2, '人事管理', NULL, '0', 'personnel_management:dept:list', 'iconfont icon-r-team', 'views/personnel_management/dept/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (25, '创建部门', NULL, '2', 24, '部门管理', NULL, '0', 'personnel_management:dept:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (26, '修改部门', NULL, '2', 24, '部门管理', NULL, '0', 'personnel_management:dept:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (27, '停用部门', NULL, '2', 24, '部门管理', NULL, '0', 'personnel_management:dept:deactivate', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (28, '员工管理', '/personnel_management/employee/list', '1', 2, '人事管理', NULL, '0', 'personnel_management:employee:list', 'iconfont icon-r-user2', 'views/personnel_management/employee/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (29, '商品信息', '/goods_management/goods/list', '1', 19, '商品管理', NULL, '0', 'goods_management:goods:list', 'iconfont icon-r-shield', 'views/goods_management/goods/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (31, '会员信息', '/member_management/member/list', '1', 5, '会员管理', NULL, '0', 'member_management:member:list', 'iconfont icon-r-mark1', 'views/member_management/member/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (32, '个人资料', '/personal/information', '1', 3, '个人中心', NULL, '0', 'personnel_management:employee:update', 'iconfont icon-r-paper', 'views/personal/Information'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (33, '出库明细', '/inventory_management/detail_store_goods_out/list', '1', 4, '库存管理', NULL, '0', 'inventory_management:detail_store_goods_out:list', 'iconfont icon-r-left', 'views/inventory_management/detail_store_goods_out/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (34, '入库明细', '/inventory_management/detail_store_goods_in/list', '1', 4, '库存管理', NULL, '0', 'inventory_management:detail_store_goods_in:list', 'iconfont icon-r-right', 'views/inventory_management/detail_store_goods_in/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (35, '销售主页', '/sale_management/sale_cmd/list', '1', 1, '销售管理', NULL, '0', 'sale_management:sale_cmd:list', 'iconfont icon-r-home', 'views/sale_management/sale_cmd/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (36, '销售记录', '/sale_management/sale_records/list', '1', 1, '销售管理', NULL, '0', 'sale_management:sale_records:list', 'iconfont icon-r-paper', 'views/sale_management/sale_records/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (37, '供货商信息', '/inventory_management/supplier/list', '1', 4, '库存管理', NULL, '0', 'inventory_management:supplier:list', 'iconfont icon-r-mark3', 'views/inventory_management/supplier/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (41, '积分商品', '/goods_management/point_products/list', '1', 19, '商品管理', NULL, '0', 'goods_management:point_products:list', 'iconfont icon-r-mark1', 'views/goods_management/point_products/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (42, '销售统计', '/goods_management/statistic_sale/list', '1', 19, '商品管理', NULL, '0', 'goods_management:statistic_sale:list', 'iconfont icon-r-add', 'views/goods_management/statistic_sale/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (43, '库存统计', '/inventory_management/store/storage_situation', '1', 4, '库存管理', NULL, '0', 'inventory_management:store:storage_situation', 'iconfont icon-r-add', 'views/inventory_management/store/StorageSituation'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (44, '积分兑换记录', '/sale_management/exchange_point_products_records/list', '1', 1, '销售管理', NULL, '0', 'sale_management:exchange_point_products_records:list', 'iconfont icon-r-paper', 'views//sale_management/exchange_point_products_records/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (45, '员工创建', NULL, '2', 28, '员工管理', NULL, '0', 'personnel_management:employee:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (46, '员工修改', NULL, '2', 28, '员工管理', NULL, '0', 'personnel_management:employee:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (47, '员工分配职务', NULL, '2', 28, '员工管理', NULL, '0', 'personnel_management:employee:queryRoleIdsByEid', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (48, '重置员工密码', NULL, '2', 28, '员工管理', NULL, '0', 'personnel_management:employee:resetPwd', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (49, '商品入库', NULL, '2', 34, '入库明细', NULL, '0', 'inventory_management:detail_store_goods_in:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (50, '入库记录删除', NULL, '2', 34, '入库明细', NULL, '0', 'inventory_management:detail_store_goods_in:delIn', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (51, '商品出库', NULL, '2', 33, '出库明细', NULL, '0', 'inventory_management:detail_store_goods_out:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (52, '出库记录删除', NULL, '2', 33, '出库明细', NULL, '0', 'inventory_management:detail_store_goods_out:delOut', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (53, '创建', NULL, '2', 37, '供货商信息', NULL, '0', 'inventory_management:supplier:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (54, '修改', NULL, '2', 37, '供货商信息', NULL, '0', 'inventory_management:supplier:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (55, '删除', NULL, '2', 37, '供货商信息', NULL, '0', 'inventory_management:supplier:deactivate', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (56, '商品上架处理', NULL, '2', 40, '出库通知', NULL, '0', 'inventory_management:detail_store_goods_out:notice:saveOut_shelves', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (57, '商品过期/下架处理', NULL, '2', 40, '出库通知', NULL, '0', 'inventory_management:detail_store_goods_out:notice:resolveOutUntreatedForm', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (58, '创建', NULL, '2', 31, '会员信息管理', NULL, '0', 'member_management:member:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (59, '兑换商品', NULL, '2', 31, '会员信息管理', NULL, '0', 'sale_management:exchange_point_products_records:saveExchangePointProductRecords', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (60, '修改', NULL, '2', 31, '会员信息管理', NULL, '0', 'member_management:member:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (61, '删除', NULL, '2', 31, '会员信息管理', NULL, '0', 'member_management:member:delMember', NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for t_role +-- ---------------------------- +DROP TABLE IF EXISTS `t_role`; +CREATE TABLE `t_role` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '角色名', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态 0: 正常 -1:停用', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_role +-- ---------------------------- +BEGIN; +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (1, '系统管理员', '系统拥有者', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (2, '超级系统拥有者', '超级系统拥有者', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (3, '收银员', '负责销售收钱', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (4, '仓库管理员', '负责管理库存', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (5, '商品管理员', '负责商品货架的商品数量、通知仓库管理员入库和出库', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (6, '人事主管', '负责管理部门信息和员工信息', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (7, '员工', '超市工作人员', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for t_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `t_role_menu`; +CREATE TABLE `t_role_menu` ( + `id` int NOT NULL AUTO_INCREMENT, + `rid` bigint NOT NULL COMMENT '角色id', + `mid` bigint NOT NULL COMMENT '菜单id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=134 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_role_menu +-- ---------------------------- +BEGIN; +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (64, 4, 32); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (65, 4, 33); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (66, 4, 34); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (67, 4, 3); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (68, 4, 4); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (69, 4, 37); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (70, 4, 7); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (73, 4, 43); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (74, 4, 15); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (75, 4, 16); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (76, 4, 17); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (77, 4, 49); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (78, 4, 18); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (79, 4, 50); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (80, 4, 51); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (81, 4, 52); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (82, 4, 53); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (83, 4, 54); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (84, 4, 55); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (85, 4, 56); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (86, 4, 57); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (87, 5, 19); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (88, 5, 20); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (89, 5, 21); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (90, 5, 22); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (92, 5, 23); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (93, 5, 41); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (94, 5, 42); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (95, 5, 29); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (96, 6, 48); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (97, 6, 2); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (98, 6, 24); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (99, 6, 25); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (100, 6, 26); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (101, 6, 27); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (102, 6, 28); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (103, 6, 45); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (104, 6, 46); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (105, 6, 47); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (109, 7, 32); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (110, 7, 3); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (111, 7, 7); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (121, 3, 32); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (122, 3, 1); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (123, 3, 3); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (124, 3, 35); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (125, 3, 36); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (126, 3, 5); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (127, 3, 7); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (128, 3, 44); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (129, 3, 58); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (130, 3, 59); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (131, 3, 60); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (132, 3, 61); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (133, 3, 31); +COMMIT; + +-- ---------------------------- +-- Table structure for t_sale_records +-- ---------------------------- +DROP TABLE IF EXISTS `t_sale_records`; +CREATE TABLE `t_sale_records` ( + `cn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `eid` bigint NOT NULL, + `sellway` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `sell_time` datetime NOT NULL, + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '0:正常 1:删除', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `sellby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `sell_total` bigint NOT NULL COMMENT '销售总数量', + `sell_totalmoney` double NOT NULL COMMENT '销售总金额', + `type` char(1) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '0:非会员消费 1:会员消费', + `member_phone` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '顾客会员号码', + PRIMARY KEY (`cn`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_sale_records +-- ---------------------------- +BEGIN; +INSERT INTO `t_sale_records` (`cn`, `eid`, `sellway`, `sell_time`, `state`, `info`, `sellby`, `sell_total`, `sell_totalmoney`, `type`, `member_phone`) VALUES ('1701213155180429314', 15, '0', '2023-09-11 12:37:16', '0', '', '李四', 1, 120, '0', NULL); +INSERT INTO `t_sale_records` (`cn`, `eid`, `sellway`, `sell_time`, `state`, `info`, `sellby`, `sell_total`, `sell_totalmoney`, `type`, `member_phone`) VALUES ('1701220094014722049', 1, '1', '2023-09-11 13:04:45', '0', '', '张三', 1, 315, '1', '19955555555'); +COMMIT; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/superMarket-backend/pom.xml b/superMarket-backend/pom.xml new file mode 100644 index 0000000..60613fe --- /dev/null +++ b/superMarket-backend/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + com.shasnzhu + superMarket-backend + 1.0.0 + + + + org.springframework.boot + spring-boot-starter-parent + 2.3.2.RELEASE + + + + + + mysql + mysql-connector-java + + + + com.alibaba + druid-spring-boot-starter + 1.2.11 + + + + com.baomidou + mybatis-plus-boot-starter + 3.5.2 + + + + org.springframework.boot + spring-boot-starter-web + + + + com.alibaba + fastjson + 1.2.71 + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.mindrot + jbcrypt + 0.4 + + + commons-io + commons-io + 2.6 + + + + org.projectlombok + lombok + 1.18.10 + provided + + + \ No newline at end of file diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/BackendApplication.java b/superMarket-backend/src/main/java/com/shanzhu/market/BackendApplication.java new file mode 100644 index 0000000..f87776b --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/BackendApplication.java @@ -0,0 +1,28 @@ +package com.shanzhu.market; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * SpringBoot 启动类 + * 项目启动入口(点击右键 选择 "run BackendApplication" 启动项目) + * + * 什么是SpringBoot?(https://www.php.cn/faq/498384.html) + * + * @author: ShanZhu + * @date: 2024-08-16 + */ +@Slf4j +@SpringBootApplication +public class BackendApplication { + + public static void main(String[] args) { + + //SpringBoot 执行启动 + SpringApplication.run(BackendApplication.class, args); + + log.info("=====================项目后端启动成功============================"); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/advice/ExceptionControllerAdvice.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/advice/ExceptionControllerAdvice.java new file mode 100644 index 0000000..6752740 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/advice/ExceptionControllerAdvice.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.common.advice; + + +import com.shanzhu.market.common.constants.HttpStatus; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.web.response.JsonResult; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * 统一异常处理类的基类 + */ +@RestControllerAdvice +public class ExceptionControllerAdvice { + @ExceptionHandler(RuntimeException.class) + public JsonResult commonExceptionHandler(RuntimeException ex){ + ex.printStackTrace(); + return JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR,ex.getMessage()); + } + @ExceptionHandler(BusinessException.class) + public JsonResult businessHanler(BusinessException ex){ + return JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR,ex.getMessage()); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/config/BaseWebConfig.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/config/BaseWebConfig.java new file mode 100644 index 0000000..6cc7315 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/config/BaseWebConfig.java @@ -0,0 +1,62 @@ +package com.shanzhu.market.common.config; + +import com.shanzhu.market.common.sercurity.interceptor.EmpLoginInterceptor; +import com.shanzhu.market.common.util.PathUtils; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 解决:1.跨域问题 + */ +@Configuration +public class BaseWebConfig implements WebMvcConfigurer{ + @Bean + public EmpLoginInterceptor empLoginInterceptor(){ + return new EmpLoginInterceptor(); + } + @Override + public void addInterceptors(InterceptorRegistry registry) { +// registry.addInterceptor(empLoginInterceptor()) +// .addPathPatterns("/**") +// .excludePathPatterns("/","/login") +// .excludePathPatterns("/files/**") +// .excludePathPatterns("/static/**"); + } + + //跨域访问配置 + @Bean + public WebMvcConfigurer corsConfigurer() { + return new WebMvcConfigurer() { + @Override + //重写父类提供的跨域请求处理的接口 + public void addCorsMappings(CorsRegistry registry) { + //添加映射路径 + registry.addMapping("/**") + //放行哪些原始域 + .allowedOrigins("*") + //是否发送Cookie信息 + .allowCredentials(true) + //放行哪些原始域(请求方式) + .allowedMethods("GET", "POST", "PUT", "DELETE","OPTIONS") + //放行哪些原始域(头部信息) + .allowedHeaders("*") + //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息) + .exposedHeaders("Header1", "Header2"); + } + }; + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + String winPath = PathUtils.getClassLoadRootPath() + "/src/main/resources/static/files/"; + + //第一个方法设置访问路径前缀,第二个方法设置资源路径 + registry.addResourceHandler("/files/**"). + addResourceLocations("file:" + winPath); + WebMvcConfigurer.super.addResourceHandlers(registry); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/config/MpConfig.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/config/MpConfig.java new file mode 100644 index 0000000..7666872 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/config/MpConfig.java @@ -0,0 +1,20 @@ +package com.shanzhu.market.common.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MpConfig { + /*mybatis plus分页插件生效*/ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); + paginationInnerInterceptor.setOverflow(true); //合理化 + interceptor.addInnerInterceptor(paginationInnerInterceptor); + return interceptor; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/constants/HttpStatus.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/constants/HttpStatus.java new file mode 100644 index 0000000..220724c --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/constants/HttpStatus.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.common.constants; + +public interface HttpStatus { + /** + * 操作成功 + */ + Integer CODE_SUCCESS = 200; + /** + * 请先登录 + */ + Integer CODE_NOLOGIN = 401; + /** + * 系统异常,请联系管理员 + */ + Integer CODE_ERROR = 500; + /** + * 参数异常 + */ + Integer CODE_ERROR_PARAM = 400; + + /**业务异常*/ + Integer CODE_BUSINESS_ERROR=50000; + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/BusinessException.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/BusinessException.java new file mode 100644 index 0000000..31555a4 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/BusinessException.java @@ -0,0 +1,13 @@ +package com.shanzhu.market.common.exception; + +import com.shanzhu.market.common.constants.HttpStatus; + +public class BusinessException extends SysException { + public BusinessException(String message, Integer code) { + super(message, code); + } + + public BusinessException(String msg) { + super(msg, HttpStatus.CODE_BUSINESS_ERROR); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/SysException.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/SysException.java new file mode 100644 index 0000000..1e6df9f --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/SysException.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.common.exception; + +import com.shanzhu.market.common.constants.HttpStatus; + +public class SysException extends RuntimeException { + private Integer code; + + public SysException(String message, Integer code) { + super(message); + this.code = code; + } + public SysException(String msg){ + super(msg); + this.code= HttpStatus.CODE_ERROR; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/config/RedisConfig.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/config/RedisConfig.java new file mode 100644 index 0000000..eab3ba8 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/config/RedisConfig.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.common.redis.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class RedisConfig { + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + template.setKeySerializer(new StringRedisSerializer()); //设置redis key 的序列化方式为String + template.setValueSerializer(new GenericJackson2JsonRedisSerializer());//设置value的序列化方式为jackson方式,默认的序列化方式是jdk的序列化 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer() );//设置hash类型的value序列化方式 + return template; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/constants/RedisKeys.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/constants/RedisKeys.java new file mode 100644 index 0000000..3996483 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/constants/RedisKeys.java @@ -0,0 +1,72 @@ +package com.shanzhu.market.common.redis.constants; + + +import java.util.concurrent.TimeUnit; + +public enum RedisKeys { + //用户注册 + LOGIN_USER("LOGIN_USER",1440L,TimeUnit.MINUTES), + //登录密码错误次数 + LOGIN_ERRO_PWDNUM("LOGIN_ERRO_PWDNUM",1L,TimeUnit.DAYS), + //商品分类信息的缓存 + GOODS_CATEGORY("GOODS_CATEGORY",24L,TimeUnit.HOURS), + //账户冻结6小时 + DISABLEUSER("DISABLEUSER",6L,TimeUnit.HOURS); + + private String prefix; //前缀 + private Long timeout; //失效时间 + private TimeUnit timeUnit; //时间单位 + + private final String SEP=":";//key分隔符 + + RedisKeys(String prefix, Long timeout, TimeUnit timeUnit) { + this.prefix = prefix; + this.timeout = timeout; + this.timeUnit = timeUnit; + } + + RedisKeys(String prefix, Long timeout) { + this(prefix, timeout, TimeUnit.MINUTES); + } + RedisKeys(String prefix){ + this(prefix,30L,TimeUnit.MINUTES); + } + + public String join(String ...suffix){ + + StringBuilder sb = new StringBuilder(80); + sb.append(this.prefix); + for (String s : suffix) { + sb.append(getSEP()).append(s); + } + return sb.toString(); + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public Long getTimeout() { + return timeout; + } + + public void setTimeout(Long timeout) { + this.timeout = timeout; + } + + public TimeUnit getTimeUnit() { + return timeUnit; + } + + public void setTimeUnit(TimeUnit timeUnit) { + this.timeUnit = timeUnit; + } + + public String getSEP() { + return SEP; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/service/RedisTemplateService.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/service/RedisTemplateService.java new file mode 100644 index 0000000..d24454e --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/service/RedisTemplateService.java @@ -0,0 +1,322 @@ +package com.shanzhu.market.common.redis.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +@Service +public class RedisTemplateService { + @Autowired + public RedisTemplate redisTemplate; + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * 如果key不存在,缓存, 如果存在不做任何操作 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setnxCacheObject(final String key, final T value) { + redisTemplate.opsForValue().setIfAbsent(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * 如果key不存在,缓存, 如果存在不做任何操作 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setnxCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) { + redisTemplate.opsForValue().setIfAbsent(key, value, timeout, timeUnit); + } + + + /** + * 给指定key值减delta + * @param key + * @param delta + */ + public Long decrementCacheObjectValue(final String key,final long delta){ + return redisTemplate.opsForValue().decrement(key, delta); + } + + /** + * 给指定key值减一 + * @param key + */ + public Long decrementCacheObjectValue(final String key){ + return redisTemplate.opsForValue().decrement(key); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获取有效时间 + * + * @param key Redis键 + * @return 有效时间 + */ + public long getExpire(final String key) { + return redisTemplate.getExpire(key); + } + + /** + * 判断 key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public Boolean hasKey(String key) { + return redisTemplate.hasKey(key); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject(final String key) { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return + */ + public boolean deleteObject(final Collection collection) { + return redisTemplate.delete(collection) > 0; + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long setCacheList(final String key, final List dataList) { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public List getCacheList(final String key) { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 获得缓存的set + * + * @param key + * @return + */ + public Set getCacheSet(final String key) { + return redisTemplate.opsForSet().members(key); + } + + /** + * 指定的value是否包含在缓存set中 + * @param key + * @param value + * @param + * @return + */ + public boolean isCacheSetContains(final String key, final T value){ + return redisTemplate.opsForSet().isMember(key, value); + } + + /** + * 从缓存set 中删除value值 + * @param key + * @param value + * @param + * @return + */ + public Long deleteCacheSetValue(final String key, final T value){ + return redisTemplate.opsForSet().remove(key, value); + } + + /** + * 往缓存set中添加value值 + * @param key + * @param value + * @param + * @return + */ + public Long addCacheSetValue(final String key, final T value){ + return redisTemplate.opsForSet().add(key, value); + } + + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * @return + */ + public Map getCacheMap(final String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 删除Hash中的某条数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return 是否成功 + */ + public boolean deleteCacheMapValue(final String key, final String hKey) { + return redisTemplate.opsForHash().delete(key, hKey) > 0; + } + + /** + * 给hash中hk 值 + increment + * @param key + * @param hk + * @param increment + */ + public Long incrementCacheMapValue(final String key,final Object hk, final long increment){ + return redisTemplate.opsForHash().increment(key, hk, increment); + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) { + return redisTemplate.keys(pattern); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/HasPermisson.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/HasPermisson.java new file mode 100644 index 0000000..b6b9205 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/HasPermisson.java @@ -0,0 +1,15 @@ +package com.shanzhu.market.common.sercurity.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 判断是否有权限 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface HasPermisson { + String value(); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/NoRequireLogin.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/NoRequireLogin.java new file mode 100644 index 0000000..b7ec134 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/NoRequireLogin.java @@ -0,0 +1,15 @@ +package com.shanzhu.market.common.sercurity.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 登录检查注解: + * 贴有该注解接口方法必须进行登录检查 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface NoRequireLogin { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/interceptor/EmpLoginInterceptor.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/interceptor/EmpLoginInterceptor.java new file mode 100644 index 0000000..8a75048 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/interceptor/EmpLoginInterceptor.java @@ -0,0 +1,95 @@ +package com.shanzhu.market.common.sercurity.interceptor; + + +import com.alibaba.fastjson.JSONObject; +import com.shanzhu.market.common.constants.HttpStatus; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.sercurity.annotation.NoRequireLogin; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Employee; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class EmpLoginInterceptor implements HandlerInterceptor { + @Autowired + private RedisTemplateService redisTemplateService; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (!(handler instanceof HandlerMethod)) { + //optinos请求 + return true; + } + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Cache-Control", "no-cache"); + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json"); + //获取token + String token = request.getHeader("token"); + //是否贴有不必登录的注解 + HandlerMethod handler1 = (HandlerMethod) handler; + NoRequireLogin noRequireLogin = handler1.getMethodAnnotation(NoRequireLogin.class); + if (noRequireLogin != null) { + //贴有注解 + return true; + + } else { + if (StringUtils.hasText(token)) { + String value2 = redisTemplateService.getCacheObject(token); + if (!StringUtils.hasText(value2)) { + JsonResult res = JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, "请先登录"); + String result = JSONObject.toJSONString(res); + response.getWriter().println(result); + response.getWriter().flush(); + return false; + } else { + //缓存有值,延长存储时间 + redisTemplateService.expire(token, RedisKeys.LOGIN_USER.getTimeout(), RedisKeys.LOGIN_USER.getTimeUnit()); + } + } else { + //没有token + JsonResult res = JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, "请先登录"); + String result = JSONObject.toJSONString(res); + response.getWriter().println(result); + response.getWriter().flush(); + return false; + } + } + //是否贴有HasPermisson注解 + HasPermisson hasPermisson = handler1.getMethodAnnotation(HasPermisson.class); + if (hasPermisson != null) { + if (!StringUtils.hasText(token)) { + //没有token + JsonResult res = JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, "请先登录"); + String result = JSONObject.toJSONString(res); + response.getWriter().println(result); + response.getWriter().flush(); + return false; + } + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + //判断是否是系统管理员 + if (employee.getIsAdmin()) { + return true; + } + String value = hasPermisson.value(); + boolean contains = employee.getFlags().contains(value); + if (!contains) { + JsonResult res = JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, "您没有权限操作"); + String result = JSONObject.toJSONString(res); + response.getWriter().println(result); + response.getWriter().flush(); + return false; + } + } + + return true; + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserInfoArgumentResolver.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserInfoArgumentResolver.java new file mode 100644 index 0000000..c924880 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserInfoArgumentResolver.java @@ -0,0 +1,47 @@ +package com.shanzhu.market.common.sercurity.resolver; + + +import com.alibaba.fastjson.JSON; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Employee; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.MethodParameter; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import javax.servlet.http.HttpServletRequest; + +/** + * 自定义参数解析器 + * 作用:将请求映射方法(接口)中声明UserInfo类型的参数解析成当前登录用户对象 + */ +public class UserInfoArgumentResolver implements HandlerMethodArgumentResolver { + @Autowired + private RedisTemplateService redisService; + //当前解析器能解析类型--表示当前解析器要解析的参数类型-UserInfo + @Override + public boolean supportsParameter(MethodParameter methodParameter) { + return + methodParameter.getParameterType() == Employee.class + && methodParameter.hasParameterAnnotation(UserParam.class); + } + //怎么解析支持的参数--怎么讲UserInfo参数解析成当前登录用户对象 + //必须保证supportsParameter 返回true 才会执行 + @Override + public Object resolveArgument(MethodParameter methodParameter, + ModelAndViewContainer modelAndViewContainer, + NativeWebRequest nativeWebRequest, + WebDataBinderFactory webDataBinderFactory) throws Exception { + //token--request-- + HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class); + String token = request.getHeader("token"); + String userStr = redisService.getCacheObject(token); + if(!StringUtils.hasText(userStr)){ + return null; + } + return JSON.parseObject(userStr, Employee.class); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserParam.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserParam.java new file mode 100644 index 0000000..2af399b --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserParam.java @@ -0,0 +1,15 @@ +package com.shanzhu.market.common.sercurity.resolver; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 定义userInfo 参数注入注解 + * 贴有该注解UserInfo类型的参数使用自定义参数数解析 + */ +@Target({ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface UserParam { +} \ No newline at end of file diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/util/DateUtil.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/util/DateUtil.java new file mode 100644 index 0000000..896b392 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/util/DateUtil.java @@ -0,0 +1,29 @@ +package com.shanzhu.market.common.util; + +import java.util.Calendar; +import java.util.Date; + +public class DateUtil { + /** + * 获取两个时间的间隔(秒) + * @param d1 + * @param d2 + * @return + */ + public static long getDateBetween(Date d1, Date d2){ + return Math.abs((d1.getTime()-d2.getTime())/1000);//取绝对值 + } + + public static Date getEndDate(Date date) { + if (date == null) { + return null; + } + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.set(Calendar.HOUR_OF_DAY,23); + c.set(Calendar.MINUTE,59); + c.set(Calendar.SECOND,59); + return c.getTime(); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/util/PathUtils.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/util/PathUtils.java new file mode 100644 index 0000000..c5b0806 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/util/PathUtils.java @@ -0,0 +1,66 @@ +package com.shanzhu.market.common.util; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; + +public class PathUtils { + public static String getClassLoadRootPath() { + String path = ""; + try { + String prePath = URLDecoder.decode(PathUtils.class.getClassLoader().getResource("").getPath(),"utf-8").replace("/target/classes", ""); + String osName = System.getProperty("os.name"); + if (osName.toLowerCase().startsWith("mac")) { + // 苹果 + path = prePath.substring(0, prePath.length() - 1); + } else if (osName.toLowerCase().startsWith("windows")) { + // windows + path = prePath.substring(1, prePath.length() - 1); + } else if(osName.toLowerCase().startsWith("linux") || osName.toLowerCase().startsWith("unix")) { + // unix or linux + path = prePath.substring(0, prePath.length() - 1); + } else { + path = prePath.substring(1, prePath.length() - 1); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return path; + } + + public static String upload(MultipartFile multipartFile) { + String res = null; // 返回网络路径 + try { + String staticDir = PathUtils.getClassLoadRootPath() + "/src/main/resources/static/files/"; + // 如果结果目录不存在,则创建目录 + File resDirFile = new File(staticDir); + if(!resDirFile.exists()) { + boolean flag = resDirFile.mkdirs(); + if(!flag) throw new RuntimeException("创建结果目录失败"); + } + // 获取MultipartFile的字节数组 + byte[] fileBytes = multipartFile.getBytes(); + + // 创建文件对象 + + // 加个时间戳防止重名 + String newFileName = System.currentTimeMillis() + "_" + multipartFile.getOriginalFilename(); + res = "/files/" + newFileName; + // 写文件 + File file = new File(staticDir + newFileName); + + // 将字节数组写入文件 + FileOutputStream fos = new FileOutputStream(file); + fos.write(fileBytes); + fos.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + return res; + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/util/UploadUtil.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/util/UploadUtil.java new file mode 100644 index 0000000..4a85625 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/util/UploadUtil.java @@ -0,0 +1,55 @@ +package com.shanzhu.market.common.util; + +/** + * 文件上传工具 + */ +public class UploadUtil { + //阿里域名 + private static final String ALI_DOMAIN = "https://zyl-9.oss-cn-chengdu.aliyuncs.com/"; + private static final String ENDPOINT = "http://oss-cn-chengdu.aliyuncs.com"; + private static final String BUCKET_NAME = "zyl-9"; + + private static final String ACCESS_KEY_ID = "LTAI5tGxrbz4oXKzQ63LZzQn"; + private static final String ACCESS_KEY_SECRET = "Do4mpXNQ4bOTzpNqrUhTeQSSwrXfHe"; + private static final String path = "wolf2w-70"; + //MultipartFile 对象 +// public static String uploadAli(MultipartFile file,String path_suffix) throws Exception { +// //生成文件名称 +// String uuid = UUID.randomUUID().toString(); +// String orgFileName =file.getOriginalFilename();//获取真实文件名称 xxx.jpg +// String ext= "." + FilenameUtils.getExtension(orgFileName);//获取拓展名字.jpg +// String fileName =path+path_suffix+"/"+uuid + ext;//xxxxxsfsasa.jpg +// // 创建OSSClient实例。 +// OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID,ACCESS_KEY_SECRET); +// // 上传文件流。 +// ossClient.putObject(BUCKET_NAME, fileName, file.getInputStream()); +// // 关闭OSSClient。 +// ossClient.shutdown(); +// return ALI_DOMAIN + fileName; +// } + +} + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/common/web/response/JsonResult.java b/superMarket-backend/src/main/java/com/shanzhu/market/common/web/response/JsonResult.java new file mode 100644 index 0000000..e66dad0 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/common/web/response/JsonResult.java @@ -0,0 +1,79 @@ +package com.shanzhu.market.common.web.response; + +import com.shanzhu.market.common.constants.HttpStatus; + +public class JsonResult { + public static final int CODE_SUCCESS = HttpStatus.CODE_SUCCESS; + public static final String MSG_SUCCESS = "操作成功"; + public static final int CODE_NOLOGIN = HttpStatus.CODE_NOLOGIN; + public static final String MSG_NOLOGIN = "请先登录"; + public static final int CODE_ERROR = HttpStatus.CODE_ERROR; + public static final String MSG_ERROR = "系统异常,请联系管理员"; + public static final int CODE_ERROR_PARAM = HttpStatus.CODE_ERROR_PARAM; //参数异常 + + private int code; //区分不同结果, 而不再是true或者false + private String msg; + private T data; //除了操作结果之后, 还行携带数据返回 + public JsonResult(int code, String msg, T data){ + this.code = code; + this.msg = msg; + this.data = data; + } + + public JsonResult() { + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + public static JsonResult success(T data){ + return new JsonResult(CODE_SUCCESS, MSG_SUCCESS, data); + } + + public static JsonResult success(){ + return new JsonResult(CODE_SUCCESS, MSG_SUCCESS, null); + } + + public static JsonResult error(int code, String msg, T data){ + return new JsonResult(code, msg, data); + } + public static JsonResult error(int code, String msg){ + return new JsonResult(code, msg, null); + } + public static JsonResult defaultError(){ + return new JsonResult(CODE_ERROR, MSG_ERROR, null); + } + + + public static JsonResult noLogin() { + return new JsonResult(CODE_NOLOGIN, MSG_NOLOGIN, null); + } + + public static JsonResult noPermission() { + return new JsonResult(403, "非法访问", null); + } + + + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/DeptController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/DeptController.java new file mode 100644 index 0000000..33f851f --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/DeptController.java @@ -0,0 +1,52 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Dept; +import com.shanzhu.market.entity.query.QueryDept; +import com.shanzhu.market.service.IDeptService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@Validated +@RequestMapping("/personnel_management/dept") +public class DeptController { + + @Resource + private IDeptService deptService; + + /*保存信息接口*/ + @HasPermisson("personnel_management:dept:save") + @PostMapping("/save") + public JsonResult saveDept(Dept dept){ + deptService.saveDept(dept); + return JsonResult.success(); + } + + /*修改接口*/ + @HasPermisson("personnel_management:dept:update") + @PostMapping("/update") + public JsonResult updateDept(Dept dept){ + deptService.updateDept(dept); + return JsonResult.success(); + } + + /*停用*/ + @HasPermisson("personnel_management:dept:deactivate") + @PostMapping("/deactivate") + public JsonResult deactivate(Long id){ + deptService.forbiddenRole(id); + return JsonResult.success(); + } + /*查询信息*/ + @GetMapping("/list") + public JsonResult listByQo(QueryDept qo){ + return JsonResult.success(deptService.listByQo(qo)); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/EmployeeController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/EmployeeController.java new file mode 100644 index 0000000..636a573 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/EmployeeController.java @@ -0,0 +1,113 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.sercurity.annotation.NoRequireLogin; +import com.shanzhu.market.common.util.PathUtils; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.query.QueryEmp; +import com.shanzhu.market.entity.vo.DetailEmpVo; +import com.shanzhu.market.entity.vo.EditEmpVo; +import com.shanzhu.market.service.IEmployeeService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/personnel_management/employee") +public class EmployeeController { + + @Resource + private IEmployeeService employeeService; + + @HasPermisson("personnel_management:employee:list") + @PostMapping("/list") + public JsonResult pageByQo(QueryEmp qo) { + Page page = employeeService.pageByQo(qo); + return JsonResult.success(page); + } + + @HasPermisson("personnel_management:employee:list") + @GetMapping("/detail") + public JsonResult detail(Long uid) { + DetailEmpVo vo = employeeService.detail(uid); + return JsonResult.success(vo); + } + + /** + * 上传图片到阿里云oss + * 返回网络图片地址,uploaded:1:成功 0:失败 + */ + @NoRequireLogin + @PostMapping("/uploadImg") + public Map uploadImg(@RequestParam("file") MultipartFile upload) { + Map map = new HashMap<>(); + if (upload != null && upload.getSize() > 0) { + String path; + try { + path = PathUtils.upload(upload); + map.put("uploaded", 1); //成功 + map.put("url", path); //成功 + } catch (Exception e) { + e.printStackTrace(); + map.put("uploaded", 0); //失败 + Map errorMap = new HashMap<>(); + errorMap.put("message", e.getMessage()); + map.put("error", errorMap); + } + } else { + map.put("uploaded", 0); //失败 + Map errorMap = new HashMap<>(); + errorMap.put("message", "上传失败,图片文件异常"); + map.put("error", errorMap); + } + return map; + } + + /*保存*/ + @HasPermisson("personnel_management:employee:save") + @PostMapping("/save") + public JsonResult saveEmp(Employee employee, HttpServletRequest request) { + employeeService.saveEmp(employee, (String) request.getHeader("token")); + return JsonResult.success(); + } + + /*修改按钮*/ + @HasPermisson("personnel_management:employee:update") + @GetMapping("/editbtn") + public JsonResult editbtn(Long uid) { + EditEmpVo vo = employeeService.editbtn(uid); + return JsonResult.success(vo); + } + + /*修改员工业务*/ + @HasPermisson("personnel_management:employee:update") + @PostMapping("/update") + public JsonResult updateEmp(Employee employee, HttpServletRequest request) { + employeeService.updateEmp(employee, (String) request.getHeader("token")); + return JsonResult.success(); + } + + /*离职业务*/ + @HasPermisson("personnel_management:employee:update") + @PostMapping("/deactivate") + public JsonResult deactivate(Long id) { + employeeService.deactivate(id); + return JsonResult.success(); + } + + /*更改密码*/ + @HasPermisson("personnel_management:employee:resetPwd") + @PostMapping("/resetPwd") + public JsonResult resetPwd(Long eid, String code) { + employeeService.resetPwd(eid, code); + return JsonResult.success(); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/ExchangePointProductsRecordsController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/ExchangePointProductsRecordsController.java new file mode 100644 index 0000000..3137704 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/ExchangePointProductsRecordsController.java @@ -0,0 +1,87 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.ExchangePointProducts; +import com.shanzhu.market.entity.domain.PointProducts; +import com.shanzhu.market.entity.query.QueryExchangePointProductsRecords; +import com.shanzhu.market.service.IExchangePointProductsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/sale_management/exchange_point_products_records") +public class ExchangePointProductsRecordsController { + + @Resource + private IExchangePointProductsService exchangePointProductsService; + + + @GetMapping("/queryPointProductBymemberId") + public JsonResult queryPointProductBymemberId(Long memberId) { + List> list = exchangePointProductsService.queryPointProductBymemberId(memberId); + return JsonResult.success(list); + } + + + @GetMapping("/queryMemberByGoodsId") + public JsonResult queryMemberByGoodsId(Long goodsId) { + List> list = exchangePointProductsService.queryMemberByGoodsId(goodsId); + return JsonResult.success(list); + } + + @GetMapping("/queryPointProductByGoodsId") + public JsonResult queryPointProductByGoodsId(Long goodsId) { + PointProducts pointProducts = exchangePointProductsService.queryPointProductByGoodsId(goodsId); + return JsonResult.success(pointProducts); + } + + @PostMapping("/saveExchangePointProductRecords") + public JsonResult saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, HttpServletRequest request) { + exchangePointProductsService.saveExchangePointProductRecords(exchangePointProducts, (String) request.getHeader("token")); + return JsonResult.success(); + } + + @GetMapping("/queryOptionsMemberPhone") + public JsonResult queryOptionsMemberPhone() { + List> list = exchangePointProductsService.queryOptionsMemberPhone(); + return JsonResult.success(list); + } + + @GetMapping("/delExchangePointProducts") + public JsonResult delExchangePointProducts(String cn) { + exchangePointProductsService.delExchangePointProducts(cn); + return JsonResult.success(); + } + + @HasPermisson("sale_management:exchange_point_products_records:list") + @PostMapping("/queryPageByQoExchangePointProducts") + public JsonResult queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo) { + Page page = exchangePointProductsService.queryPageByQoExchangePointProducts(qo); + + return JsonResult.success(page); + } + + @GetMapping("/queryOptionsPointProducts") + public JsonResult queryOptionsPointProducts() { + List> list = exchangePointProductsService.queryOptionsPointProducts(); + return JsonResult.success(list); + } + + @GetMapping("/queryOptionsMember") + public JsonResult queryOptionsMember() { + List> list = exchangePointProductsService.queryOptionsMember(); + return JsonResult.success(list); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsCategoryController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsCategoryController.java new file mode 100644 index 0000000..e911ee3 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsCategoryController.java @@ -0,0 +1,62 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.GoodsCategory; +import com.shanzhu.market.entity.query.QueryGoodsCategory; +import com.shanzhu.market.service.IGoodsCategoryService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/goods_management/goods_category") +public class GoodsCategoryController { + + @Resource + private IGoodsCategoryService goodsCategoryService; + + /*保存信息接口*/ + @HasPermisson("goods_management:goods_category:save") + @PostMapping("/save") + public JsonResult saveGoodsCategory(GoodsCategory category){ + goodsCategoryService.saveGoodsCategory(category); + return JsonResult.success(); + } + + /*修改接口*/ + @HasPermisson("goods_management:goods_category:update") + @PostMapping("/update") + public JsonResult updateGoodsCategory(GoodsCategory category){ + goodsCategoryService.updateGoodsCategory(category); + return JsonResult.success(); + } + /*停用*/ + @HasPermisson("goods_management:goods_category:deactivate") + @PostMapping("/deactivate") + public JsonResult deactivate(Long cid){ + goodsCategoryService.deactivate(cid); + return JsonResult.success(); + } + /*查询信息*/ + @HasPermisson("goods_management:goods_category:list") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QueryGoodsCategory qo) { + Page page = goodsCategoryService.queryPageByQo(qo); + return JsonResult.success(page); + } + + @GetMapping("/normalCategoryAll") + public JsonResult getNormalCategoryAll(){ + List> list=goodsCategoryService.getNormalCategoryAll(); + return JsonResult.success(list); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsController.java new file mode 100644 index 0000000..3434c37 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsController.java @@ -0,0 +1,109 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.NoRequireLogin; +import com.shanzhu.market.common.util.PathUtils; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.query.QueryGoods; +import com.shanzhu.market.entity.vo.GoodsListVo; +import com.shanzhu.market.service.IGoodsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotNull; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/goods_management/goods") +public class GoodsController { + + @Resource + private IGoodsService goodsService; + + /*查询信息*/ + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QueryGoods qo) { + Page page = goodsService.queryPageByQo(qo); + return JsonResult.success(page); + } + /** + * 上传图片到阿里云oss + * 返回网络图片地址,uploaded:1:成功 0:失败 + */ + @NoRequireLogin + @PostMapping("/uploadImg") + public Map uploadImg(@RequestParam("file") MultipartFile upload) { + Map map = new HashMap<>(); + if (upload != null && upload.getSize() > 0) { + String path = ""; + try { + path = PathUtils.upload(upload); + map.put("uploaded", 1); //成功 + map.put("url", path); //成功 + } catch (Exception e) { + e.printStackTrace(); + map.put("uploaded", 0); //失败 + Map errorMap = new HashMap<>(); + errorMap.put("message", e.getMessage()); + map.put("error", errorMap); + } + } else { + map.put("uploaded", 0); //失败 + Map errorMap = new HashMap<>(); + errorMap.put("message", "上传失败,图片文件异常"); + map.put("error", errorMap); + } + return map; + } + /*保存*/ + @PostMapping("/save") + public JsonResult saveGoods(Goods goods, HttpServletRequest request){ + goodsService.saveGoods(goods,(String) request.getHeader("token")); + return JsonResult.success(); + } + + /*上/下架*/ + @PostMapping("/upOrdown") + public JsonResult upOrdown(@NotNull(message = "商品编号不能为空") Long gid, String state,HttpServletRequest request){ + goodsService.upOrdown(gid,state,(String) request.getHeader("token")); + return JsonResult.success(); + } + @GetMapping("/queryGoodsById") + public JsonResult queryGoodsById(@NotNull(message = "商品编号不能为空") Long id){ + return JsonResult.success(goodsService.getById(id)); + } + + @PostMapping("/update") + public JsonResult update(Goods goods, HttpServletRequest request){ + goodsService.updateGoods(goods,(String)request.getHeader("token")); + return JsonResult.success(); + } + + @GetMapping("/selected_goodsAll") + public JsonResult selected_goodsAll(){ + List> list=goodsService.selected_goodsAll(); + return JsonResult.success(list); + } + + @GetMapping("/selected_storeAll") + public JsonResult selected_storeAll(){ + List> list=goodsService.selected_storeAll(); + return JsonResult.success(list); + } + + /*退还商品入库*/ + @PostMapping("/returnGoods") + public JsonResult returnGoods(DetailStoreGoods detailStoreGoods, HttpServletRequest request){ + goodsService.returnGoods(detailStoreGoods,(String) request.getHeader("token")); + return JsonResult.success(); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsStoreController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsStoreController.java new file mode 100644 index 0000000..146083a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsStoreController.java @@ -0,0 +1,45 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.query.QueryGoodsStore; +import com.shanzhu.market.entity.vo.GoodsStoreVo; +import com.shanzhu.market.service.IGoodsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@Validated +@RequestMapping("/goods_management/goods_store") +public class GoodsStoreController { + + @Resource + private IGoodsService goodsService; + + /*查询信息*/ + @HasPermisson("goods_management:goods_store:list") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QueryGoodsStore qo) { + Page page = goodsService.queryPageGoodsStore(qo); + return JsonResult.success(page); + } + + @GetMapping("/queryGoodsStoreById") + public JsonResult queryGoodsStoreById(Long id) { + GoodsStoreVo vo= goodsService.queryGoodsStoreById(id); + return JsonResult.success(vo); + } + + @PostMapping("/updateInventory") + public JsonResult updateInventory(GoodsStoreVo vo) { + goodsService.updateInventory(vo); + return JsonResult.success(); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/LoginEmpController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/LoginEmpController.java new file mode 100644 index 0000000..e466ab5 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/LoginEmpController.java @@ -0,0 +1,75 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.NoRequireLogin; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.service.ILoginService; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotEmpty; +import java.util.List; +import java.util.Map; + + +@RestController +@Validated +public class LoginEmpController { + + @Resource + private ILoginService loginService; + + /** + * 登录功能 + */ + @NoRequireLogin + @PostMapping("/login") + public JsonResult login(@NotEmpty(message = "账号不能为空") String username, @NotEmpty(message = "密码不能为空") String password) { + Map map = loginService.login(username, password); + return JsonResult.success(map); + + } + + /** + * 退出功能 + */ + @NoRequireLogin + @GetMapping("/exit") + public JsonResult exit(HttpServletRequest request) { + String token = request.getHeader("token"); + if (StringUtils.hasLength(token)){ + loginService.exit(token); + } + return JsonResult.success(); + } + + @PostMapping("/logout") + public JsonResult logout(@NotEmpty(message = "内容不能为空") String content,HttpServletRequest request) { + + loginService.logout(request.getHeader("token"), content); + + return JsonResult.success(); + } + + /** + * 查询登录者的拥有的菜单 + */ + @GetMapping("/empMenu") + public JsonResult empMenu(HttpServletRequest request){ + List menus=loginService.empMenu((String)request.getHeader("token")); + return JsonResult.success(menus); + } + + @NoRequireLogin + @GetMapping("/checkedToken") + public JsonResult checkedToken(String token){ + Map map=loginService.checkedToken(token); + return JsonResult.success(map); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/MemberController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/MemberController.java new file mode 100644 index 0000000..1d4042f --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/MemberController.java @@ -0,0 +1,66 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Member; +import com.shanzhu.market.entity.query.QueryMember; +import com.shanzhu.market.service.IMemberService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@Validated +@RequestMapping("/member_management/member") +public class MemberController { + + @Resource + private IMemberService memberService; + + /*查询信息*/ + @HasPermisson("member_management:member:list") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QueryMember qo) { + Page page = memberService.queryPageByQo(qo); + return JsonResult.success(page); + } + + @HasPermisson("member_management:member:delMember") + @PostMapping("/delMember") + public JsonResult delMember(Long id) { + memberService.delMember(id); + return JsonResult.success(); + } + + @HasPermisson("member_management:member:save") + @PostMapping("/save") + public JsonResult save(Member member) { + memberService.saveMember(member); + return JsonResult.success(); + } + + + @GetMapping("/queryMemberById") + public JsonResult queryMemberById(Long id) { + Member member = memberService.queryMemberById(id); + return JsonResult.success(member); + } + + @HasPermisson("member_management:member:update") + @PostMapping("/update") + public JsonResult updateMember(Member member) { + memberService.updateMember(member); + return JsonResult.success(); + } + + @GetMapping("/queryMemberByPhone") + public JsonResult queryMemberByPhone(String phone) { + Member member = memberService.queryMemberByPhone(phone); + return JsonResult.success(member); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/MenuController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/MenuController.java new file mode 100644 index 0000000..48f7a30 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/MenuController.java @@ -0,0 +1,32 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.query.MenuQuery; +import com.shanzhu.market.service.IMenuService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/system/menu") +public class MenuController { + + @Resource + private IMenuService menuService; + + /** + * 条件分页查询菜单的信息 + */ + @HasPermisson("system:menu:list") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(MenuQuery qo) { + Page page = menuService.queryPageByQo(qo); + return JsonResult.success(page); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/NoticeController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/NoticeController.java new file mode 100644 index 0000000..2cca708 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/NoticeController.java @@ -0,0 +1,64 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.domain.NoticeIn; +import com.shanzhu.market.entity.domain.NoticeOut; +import com.shanzhu.market.entity.query.QueryNoticeIn; +import com.shanzhu.market.entity.query.QueryNoticeOut; +import com.shanzhu.market.entity.vo.NoticeInNotNormalVo; +import com.shanzhu.market.service.IGoodsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +@RestController +@Validated +@RequestMapping("/inventory_management/detail_store_goods/notice") +public class NoticeController { + + @Resource + private IGoodsService goodsService; + + @HasPermisson("inventory_management:detail_store_goods_in:notice:list") + @PostMapping("/queryPageNoticeIn") + public JsonResult queryPageNoticeIn(QueryNoticeIn qo) { + Page page = goodsService.queryPageNoticeIn(qo); + return JsonResult.success(page); + } + + @HasPermisson("inventory_management:detail_store_goods_out:notice:list") + @PostMapping("/queryPageNoticeOut_shelves") + public JsonResult queryPageNoticeOut_shelves(QueryNoticeOut qo) { + Page page = goodsService.queryPageNoticeOut_shelves(qo); + return JsonResult.success(page); + } + + @HasPermisson("inventory_management:detail_store_goods_out:notice:saveOut_shelves") + @PostMapping("/saveOut_shelves") + public JsonResult saveOut_shelves(DetailStoreGoods detailStoreGoods, HttpServletRequest request) { + goodsService.saveOut_shelves(detailStoreGoods, (String) request.getHeader("token")); + return JsonResult.success(); + } + + @HasPermisson("inventory_management:detail_store_goods_out:notice:list") + @PostMapping("/queryPageNoticeOut_untreated") + public JsonResult queryPageNoticeOut_untreated(QueryNoticeOut qo) { + Page page = goodsService.queryPageNoticeOut_untreated(qo); + return JsonResult.success(page); + } + + @HasPermisson("inventory_management:detail_store_goods_out:notice:resolveOutUntreatedForm") + @PostMapping("/resolveOutUntreatedForm") + public JsonResult resolveOutUntreatedForm(NoticeInNotNormalVo vo, HttpServletRequest request) { + goodsService.resolveOutUntreatedForm(vo, (String) request.getHeader("token")); + return JsonResult.success(); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/PersonalController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/PersonalController.java new file mode 100644 index 0000000..1696486 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/PersonalController.java @@ -0,0 +1,43 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.query.QueryEditPwd; +import com.shanzhu.market.entity.vo.InformationVo; +import com.shanzhu.market.service.IEmployeeService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +@RestController +@Validated +@RequestMapping("/personal") +public class PersonalController { + + @Resource + private IEmployeeService employeeService; + + /** + * 修改个人的密码 + */ + @HasPermisson("personal:edit_pwd") + @PostMapping("/edit_pwd") + public JsonResult edit_pwd(HttpServletRequest request, QueryEditPwd editPwd){ + String token = request.getHeader("token"); + employeeService.edit_pwd(editPwd,token); + return JsonResult.success(); + } + + @HasPermisson("personnel_management:employee:update") + @GetMapping("/information") + public JsonResult information(HttpServletRequest request){ + String token = request.getHeader("token"); + InformationVo vo=employeeService.information(token); + return JsonResult.success(vo); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/PointProductController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/PointProductController.java new file mode 100644 index 0000000..a4c78cc --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/PointProductController.java @@ -0,0 +1,65 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.PointProducts; +import com.shanzhu.market.entity.query.QueryPointProducts; +import com.shanzhu.market.service.IPointProductsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/goods_management/point_products") +public class PointProductController { + + @Resource + private IPointProductsService pointProductsService; + + /*查询信息*/ + @HasPermisson("goods_management:point_products:list") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QueryPointProducts qo) { + Page page = pointProductsService.queryPageByQo(qo); + return JsonResult.success(page); + } + + @GetMapping("/del") + public JsonResult del(Long id) { + pointProductsService.del(id); + return JsonResult.success(); + } + @GetMapping("/queryOptionGoods") + public JsonResult queryOptionGoods() { + List> list=pointProductsService.queryOptionGoods(); + return JsonResult.success(list); + } + + @PostMapping("/savePointGoods") + public JsonResult savePointGoods(PointProducts pointProducts, HttpServletRequest request) { + pointProductsService.savePointGoods(pointProducts,(String) request.getHeader("token")); + return JsonResult.success(); + } + @GetMapping("/queryPointGoodsById") + public JsonResult queryPointGoodsById(Long goodsId) { + PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper().eq("goods_id", goodsId)); + return JsonResult.success(pointProducts); + } + + @PostMapping("/updatePointGoods") + public JsonResult updatePointGoods(PointProducts pointProducts, HttpServletRequest request) { + pointProductsService.updatePointGoods(pointProducts,(String) request.getHeader("token")); + return JsonResult.success(); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/RoleController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/RoleController.java new file mode 100644 index 0000000..c6d2969 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/RoleController.java @@ -0,0 +1,117 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.entity.query.RoleQuery; +import com.shanzhu.market.entity.vo.RolePermissonVo; +import com.shanzhu.market.service.IRoleService; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/system/role") +public class RoleController { + + @Resource + private IRoleService roleService; + + /** + * 查询角色所有的信息 + * + * @return + */ + @HasPermisson("system:role:list") + @PostMapping("/list") + public JsonResult list(RoleQuery qo) { + List roles = roleService.listByQo(qo); + return JsonResult.success(roles); + } + + /** + * 停用角色 + */ + @HasPermisson("system:role:forbiddenRole") + @PostMapping("/forbiddenRole") + public JsonResult forbiddenRole(Long rid) { + roleService.forbiddenRole(rid); + return JsonResult.success(); + } + + /** + * 修改角色信息 + */ + @HasPermisson("system:role:edit_role") + @PostMapping("/edit_role") + public JsonResult edit_role(Role role) { + if (Role.SYS_ID == role.getId() || 2L == role.getId()) { + throw new BusinessException("不能停用系统拥有者"); + } + if (role != null && StringUtils.hasText(role.getInfo())) { + roleService.updateById(role); + } + return JsonResult.success(); + } + + /** + * 保存角色信息 + */ + @HasPermisson("system:role:save") + @PostMapping("/save") + public JsonResult save(Role role) { + roleService.saveRole(role); + return JsonResult.success(); + } + + /** + * 查询角色拥有的权限 + */ + @HasPermisson("system:role:saveRolePermissons") + @GetMapping("/checkPermissons") + public JsonResult checkPermissons(@NotNull(message = "角色不能为空") Long rid) { + RolePermissonVo vo = roleService.checkPermissons(rid); + return JsonResult.success(vo); + } + + /** + * 保存角色-菜单的关系 + */ + @HasPermisson("system:role:saveRolePermissons") + @PostMapping("/saveRolePermissons") + public JsonResult saveRolePermissons(@NotNull(message = "角色不能为空") @RequestParam("rid") Long rid, @RequestParam("menuIds") Long[] menuIds) { + roleService.saveRolePermissons(rid, menuIds); + return JsonResult.success(); + } + + @GetMapping("/all") + public JsonResult getRoleAll() { + List> list = roleService.getRoleAll(); + return JsonResult.success(list); + } + + @HasPermisson("personnel_management:employee:queryRoleIdsByEid") + @GetMapping("/queryRoleIdsByEid") + public JsonResult queryRoleIdsByEid(Long eid) { + + List list = roleService.queryRoleIdsByEid(eid); + return JsonResult.success(list); + } + + @HasPermisson("personnel_management:employee:queryRoleIdsByEid") + @PostMapping("/saveRoleEmp") + public JsonResult saveRoleEmp(Long eid, Long[] empRoleIds, HttpServletRequest request) { + String token = request.getHeader("token"); + roleService.saveRoleEmp(eid, empRoleIds, token); + return JsonResult.success(); + + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/SaleRecordController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/SaleRecordController.java new file mode 100644 index 0000000..f925d47 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/SaleRecordController.java @@ -0,0 +1,58 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.SaleRecords; +import com.shanzhu.market.entity.query.QuerySaleRecords; +import com.shanzhu.market.service.ISaleRecordsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/sale_management/sale_record") +public class SaleRecordController { + + @Resource + private ISaleRecordsService saleRecordsService; + + @GetMapping("/getCn") + public JsonResult getCn(){ + return JsonResult.success(IdWorker.getIdStr()); + } + + @GetMapping("/getOptionSaleRecordsGoods") + public JsonResult getOptionSaleRecordsGoods(){ + List> list=saleRecordsService.getOptionSaleRecordsGoods(); + return JsonResult.success(list); + } + + @PostMapping("/saveSaleRecords") + public JsonResult saveSaleRecords(@RequestBody SaleRecords saleRecords, HttpServletRequest request){ + saleRecords=saleRecordsService.saveSaleRecords(saleRecords,(String) request.getHeader("token")); + return JsonResult.success(saleRecords); + } + + @HasPermisson("sale_management:sale_records:list") + @PostMapping("/queryPageByQoSaleRecords") + public JsonResult queryPageByQoSaleRecords(QuerySaleRecords qo){ + Page page=saleRecordsService.queryPageByQoSaleRecords(qo); + return JsonResult.success(page); + } + + @GetMapping("/delSaleRecords") + public JsonResult delSaleRecords(String cn){ + saleRecordsService.delSaleRecords(cn); + return JsonResult.success(); + } + +} + + diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/StatisticSaleController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StatisticSaleController.java new file mode 100644 index 0000000..f2b77f2 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StatisticSaleController.java @@ -0,0 +1,30 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.query.QueryStatisticSale; +import com.shanzhu.market.entity.vo.SalesStatisticsVo; +import com.shanzhu.market.service.IGoodsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@Validated +@RequestMapping("/goods_management/statistic_sale") +public class StatisticSaleController { + + @Resource + private IGoodsService goodsService; + + @HasPermisson("goods_management:statistic_sale:list") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QueryStatisticSale qo) { + SalesStatisticsVo vo = goodsService.queryPageStatisticSaleByQo(qo); + return JsonResult.success(vo); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/StorageSituationController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StorageSituationController.java new file mode 100644 index 0000000..773d4ac --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StorageSituationController.java @@ -0,0 +1,39 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.query.QueryDetailStorageSituation; +import com.shanzhu.market.entity.query.QueryStorageSituation; +import com.shanzhu.market.service.IGoodsStoreService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/inventory_management/store/storage_situation") +public class StorageSituationController { + + @Resource + private IGoodsStoreService goodsStoreService; + + @HasPermisson("inventory_management:store:storage_situation") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QueryStorageSituation qo) { + Map map = goodsStoreService.queryPageStorageSituationByQo(qo); + return JsonResult.success(map); + + } + @HasPermisson("inventory_management:store:storage_situation") + @PostMapping("/queryStoreGoodsByStoreId") + public JsonResult queryStoreGoodsByStoreId(QueryDetailStorageSituation qo) { + Map map = goodsStoreService.queryStoreGoodsByStoreId(qo); + return JsonResult.success(map); + + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreController.java new file mode 100644 index 0000000..1f4bfce --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreController.java @@ -0,0 +1,56 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Store; +import com.shanzhu.market.entity.query.QueryStore; +import com.shanzhu.market.service.IStoreService; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@Validated +@RequestMapping("/inventory_management/store") +public class StoreController { + + @Resource + private IStoreService storeService; + + /*保存仓库信息接口*/ + @HasPermisson("inventory_management:store:save") + @PostMapping("/save") + public JsonResult saveStore(Store store){ + storeService.saveStore(store); + return JsonResult.success(); + } + /*修改仓库接口*/ + @HasPermisson("inventory_management:store:update") + @PostMapping("/update") + public JsonResult updateStore(Store store){ + storeService.updateStore(store); + return JsonResult.success(); + } + /*停用仓库*/ + @HasPermisson("inventory_management:store:deactivate") + @PostMapping("/deactivate") + public JsonResult deactivate(Long sid){ + storeService.deactivate(sid); + return JsonResult.success(); + } + /*查询仓库信息*/ + @HasPermisson("inventory_management:store:list") + @PostMapping("/list") + public JsonResult list(QueryStore qo){ + return JsonResult.success(storeService.list( new QueryWrapper() + .like(StringUtils.hasText(qo.getName()),"name",qo.getName()) + .eq(StringUtils.hasText(qo.getState()),"state",qo.getState()) + )); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreInController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreInController.java new file mode 100644 index 0000000..245efcd --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreInController.java @@ -0,0 +1,60 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.query.QueryDetailStoreGoods; +import com.shanzhu.market.entity.vo.DetailStoreGoodsVo; +import com.shanzhu.market.service.IDetailStoreGoodsService; +import com.shanzhu.market.service.ISupplierService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotEmpty; +import java.util.List; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/inventory_management/detail_store_goods_in") +public class StoreInController { + + @Resource + private IDetailStoreGoodsService detailStoreGoodsService; + + @Resource + private ISupplierService supplierService; + + @HasPermisson("inventory_management:detail_store_goods_in:save") + @PostMapping("/save") + public JsonResult saveIn(DetailStoreGoods detailStoreGoods, HttpServletRequest request) { + detailStoreGoodsService.saveIn(detailStoreGoods, (String) request.getHeader("token")); + return JsonResult.success(); + } + + @HasPermisson("inventory_management:detail_store_goods_in:list") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QueryDetailStoreGoods qo) { + Page page = detailStoreGoodsService.queryPageByQoIn(qo); + return JsonResult.success(page); + } + + @HasPermisson("inventory_management:detail_store_goods_in:delIn") + @PostMapping("/delIn") + public JsonResult delIn(@NotEmpty(message = "系统编号不能为空") String cn) { + detailStoreGoodsService.delIn(cn); + return JsonResult.success(); + } + @HasPermisson("inventory_management:detail_store_goods_in:save") + @GetMapping("/queryOptionsSuppliers") + public JsonResult queryOptionsSuppliers() { + List> list = supplierService.queryOptionsSuppliers(); + return JsonResult.success(list); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreOutController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreOutController.java new file mode 100644 index 0000000..9717d5a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreOutController.java @@ -0,0 +1,73 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.query.QueryDetailStoreGoodsOut; +import com.shanzhu.market.entity.vo.DetailStoreGoodsOutVo; +import com.shanzhu.market.service.IDetailStoreGoodsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotEmpty; +import java.util.Map; + +@RestController +@Validated +@RequestMapping("/inventory_management/detail_store_goods_out") +public class StoreOutController { + + @Resource + private IDetailStoreGoodsService detailStoreGoodsService; + + @HasPermisson("inventory_management:detail_store_goods_out:list") + @PostMapping("/queryPageByQoOut") + public JsonResult queryPageByQoOut(QueryDetailStoreGoodsOut qo){ + Page page=detailStoreGoodsService.queryPageByQoOut(qo); + return JsonResult.success(page); + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") + @GetMapping("/initOutOptions") + public JsonResult> initOutOptions(){ + return JsonResult.success(detailStoreGoodsService.initOutOptions()); + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") + @GetMapping("/changeOutGoods") + public JsonResult changeOutGoods(Long gid){ + return JsonResult.success(detailStoreGoodsService.changeOutGoods(gid)); + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") + @GetMapping("/changeOutStore") + public JsonResult changeOutStore(Long storeId){ + return JsonResult.success(detailStoreGoodsService.changeOutStore(storeId)); + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") + @PostMapping("/queryOutGoods") + public JsonResult queryOutGoods(@RequestParam("goodsId") Long goodsId, + @RequestParam("storeId") Long storeId){ + DetailStoreGoodsOutVo vo=detailStoreGoodsService.queryOutGoods(goodsId,storeId); + return JsonResult.success(vo); + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") + @PostMapping("/save") + public JsonResult saveOut(DetailStoreGoods detailStoreGoods,HttpServletRequest request){ + detailStoreGoodsService.saveOut(detailStoreGoods,(String) request.getHeader("token")); + return JsonResult.success(); + } + + @HasPermisson("inventory_management:detail_store_goods_out:delOut") + @PostMapping("/delOut") + public JsonResult delOut(@NotEmpty(message = "系统编号不能为空") String cn) { + detailStoreGoodsService.delIn(cn); + return JsonResult.success(); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/controller/SupplierController.java b/superMarket-backend/src/main/java/com/shanzhu/market/controller/SupplierController.java new file mode 100644 index 0000000..a4927b7 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/controller/SupplierController.java @@ -0,0 +1,60 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; +import com.shanzhu.market.common.web.response.JsonResult; +import com.shanzhu.market.entity.domain.Supplier; +import com.shanzhu.market.entity.query.QuerySupplier; +import com.shanzhu.market.service.ISupplierService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@Validated +@RequestMapping("/inventory_management/supplier") +public class SupplierController { + + @Resource + private ISupplierService supplierService; + + @HasPermisson("inventory_management:supplier:list") + @PostMapping("/queryPageByQo") + public JsonResult queryPageByQo(QuerySupplier qo) { + Page page = supplierService.queryPageByQo(qo); + return JsonResult.success(page); + } + + @HasPermisson("inventory_management:supplier:save") + @PostMapping("/save") + public JsonResult saveSupplier(Supplier supplier){ + supplierService.saveSupplier(supplier); + return JsonResult.success(); + } + + /*修改接口*/ + @HasPermisson("inventory_management:supplier:update") + @PostMapping("/update") + public JsonResult updateSupplier(Supplier supplier){ + supplierService.updateSupplier(supplier); + return JsonResult.success(); + } + + @HasPermisson("inventory_management:supplier:update") + @GetMapping("/queryByCn") + public JsonResult queryByCn(Long cn){ + return JsonResult.success(supplierService.getById(cn)); + } + + @HasPermisson("inventory_management:supplier:deactivate") + @PostMapping("/deactivate") + public JsonResult deactivate(Long cn){ + supplierService.deactivate(cn); + return JsonResult.success(); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Dept.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Dept.java new file mode 100644 index 0000000..2a1cb4b --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Dept.java @@ -0,0 +1,65 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; + +/** + * 部门实体 + */ +@TableName("department") +public class Dept implements Serializable { + //正常 + public static final String STATE_NORMAL="0"; + //禁用 + public static final String STATE_BAN="-1"; + @TableId(type = IdType.AUTO) + private Long id; + private String name; + private String info; + private String state; + + public Dept() { + } + + public Dept(Long id, String name, String info, String state) { + this.id = id; + this.name = name; + this.info = info; + this.state = state; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailSaleRecords.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailSaleRecords.java new file mode 100644 index 0000000..1f05b27 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailSaleRecords.java @@ -0,0 +1,71 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; + +@TableName("detail_sale_records") +public class DetailSaleRecords implements Serializable { + @TableField("sell_cn") + private String sellCn; + @TableField("goods_id") + private Long goodsId; + @TableField("goods_num") + private Long goodsNum; + @TableField("goods_price") + private Double goodsPrice; + @TableField("goods_name") + private String goodsName; + + public DetailSaleRecords() { + } + + public DetailSaleRecords(String sellCn, Long goodsId, Long goodsNum, Double goodsPrice, String goodsName) { + this.sellCn = sellCn; + this.goodsId = goodsId; + this.goodsNum = goodsNum; + this.goodsPrice = goodsPrice; + this.goodsName = goodsName; + } + + public String getSellCn() { + return sellCn; + } + + public void setSellCn(String sellCn) { + this.sellCn = sellCn; + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public Long getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; + } + + public Double getGoodsPrice() { + return goodsPrice; + } + + public void setGoodsPrice(Double goodsPrice) { + this.goodsPrice = goodsPrice; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailStoreGoods.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailStoreGoods.java new file mode 100644 index 0000000..0d18a98 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailStoreGoods.java @@ -0,0 +1,224 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +@TableName("t_detail_store_goods") +public class DetailStoreGoods implements Serializable { + public static final String STATE_NORMAL="0"; //正常 + public static final String STATE_EXPIRY="1"; //过期 + public static final String STATE_DOWN="2"; //下架 + public static final String STATE1_DEL="1"; //删除 + public static final String STATE1_NORMAL="0"; //正常 + public static final String STATE1_UNTREATED="2"; //待处理 + public static final String TYPE_IN="0"; + public static final String TYPE_OUT="1"; + private String cn; + @TableField("goods_id") + private Long goodsId; + @TableField("goods_num") + private Long goodsNum; + @TableField("goods_name") + private String goodsName; + @TableField("goods_price") + private Double goodsPrice; + private String type; + private Long createid; + private String createby; + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern ="yyyy-MM-dd" ) + @TableField("create_time") + private Date createTime; + private String state; + private String info; + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern ="yyyy-MM-dd" ) + @TableField("expiry_time") + private Date expiryTime; + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern ="yyyy-MM-dd" ) + @TableField("birth_time") + private Date birthTime; + @TableField("store_id") + private Long storeId; + private String state1; + @TableField("supplier_id") + private Long supplierId; + @TableField("supplier_name") + private String supplierName; + @TableField("untreated_num") + private Long untreatedNum; + + public DetailStoreGoods() { + } + + public DetailStoreGoods(String cn, Long goodsId, Long goodsNum, String goodsName, Double goodsPrice, String type, Long createid, String createby, Date createTime, String state, String info, Date expiryTime, Date birthTime, Long storeId, String state1, Long supplierId, String supplierName, Long untreatedNum) { + this.cn = cn; + this.goodsId = goodsId; + this.goodsNum = goodsNum; + this.goodsName = goodsName; + this.goodsPrice = goodsPrice; + this.type = type; + this.createid = createid; + this.createby = createby; + this.createTime = createTime; + this.state = state; + this.info = info; + this.expiryTime = expiryTime; + this.birthTime = birthTime; + this.storeId = storeId; + this.state1 = state1; + this.supplierId = supplierId; + this.supplierName = supplierName; + this.untreatedNum = untreatedNum; + } + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public Long getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public Double getGoodsPrice() { + return goodsPrice; + } + + public void setGoodsPrice(Double goodsPrice) { + this.goodsPrice = goodsPrice; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Long getCreateid() { + return createid; + } + + public void setCreateid(Long createid) { + this.createid = createid; + } + + public String getCreateby() { + return createby; + } + + public void setCreateby(String createby) { + this.createby = createby; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public Date getExpiryTime() { + return expiryTime; + } + + public void setExpiryTime(Date expiryTime) { + this.expiryTime = expiryTime; + } + + public Date getBirthTime() { + return birthTime; + } + + public void setBirthTime(Date birthTime) { + this.birthTime = birthTime; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getState1() { + return state1; + } + + public void setState1(String state1) { + this.state1 = state1; + } + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public Long getUntreatedNum() { + return untreatedNum; + } + + public void setUntreatedNum(Long untreatedNum) { + this.untreatedNum = untreatedNum; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Employee.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Employee.java new file mode 100644 index 0000000..0093a7f --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Employee.java @@ -0,0 +1,305 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 员工实体类 + */ +@TableName("employee") +public class Employee implements Serializable { + public static final String STATE_NORMAL = "0"; + public static final String STATE_DEL = "1"; + public static final String DEFAULT_PWD = "123456"; + public static final String SEX_MEN = "1"; + public static final String SEX_WOWEN = "0"; + public static final String DEFAULT_HEAD_IMG="/files/1694434162457_07.jpg"; + @TableId(type = IdType.AUTO) + private Long id; + private String sex; + @TableField("isAdmin") + private Boolean isAdmin; + @TableField("phone") + private String username; + @TableField("nick_name") + private String nickName; + private String password; + @TableField("head_img") + private String headImg=DEFAULT_HEAD_IMG; + private String state = STATE_NORMAL; + private String info; + private String createby; + @TableField("create_time") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date createTime; + @JsonFormat(pattern = "yyyy-MM-dd") + @TableField("leave_time") + private Date leaveTime; + private String address; + private String email; + private Integer age; + @TableField("deptId") + private Long deptId; + + @TableField(value = "dept_name",exist = false) + private String deptName; + //角色集合 + @TableField(exist = false) + @JsonIgnore + private Set roles; + + //权限集合 + @TableField(exist = false) + @JsonIgnore + private List menus; + @TableField(exist = false) + @JsonIgnore + private Set flags; + + @TableField("id_card") + private String idCard; + + public Employee() { + } + + public Employee(Long id, String sex, Boolean isAdmin, String username, String nickName, String password, String headImg, String state, String info, String createby, Date createTime, Date leaveTime, String address, String email, Integer age, Long deptId, String deptName, Set roles, List menus, Set flags, String idCard) { + this.id = id; + this.sex = sex; + this.isAdmin = isAdmin; + this.username = username; + this.nickName = nickName; + this.password = password; + this.headImg = headImg; + this.state = state; + this.info = info; + this.createby = createby; + this.createTime = createTime; + this.leaveTime = leaveTime; + this.address = address; + this.email = email; + this.age = age; + this.deptId = deptId; + this.deptName = deptName; + this.roles = roles; + this.menus = menus; + this.flags = flags; + this.idCard = idCard; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public Boolean getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(Boolean admin) { + isAdmin = admin; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getCreateby() { + return createby; + } + + public void setCreateby(String createby) { + this.createby = createby; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getLeaveTime() { + return leaveTime; + } + + public void setLeaveTime(Date leaveTime) { + this.leaveTime = leaveTime; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public Set getRoles() { + return roles; + } + + public void setRoles(Set roles) { + this.roles = roles; + } + + public List getMenus() { + return menus; + } + + public Set getFlags() { + return flags; + } + + public void setFlags(Set flags) { + this.flags = flags; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public void setMenus(List menus) { + this.menus = menus; + if (menus!=null) { + this.flags = getFlags(this.menus); + } + } + + /** + * 获取权限标识符集合 + * + * @param menus + * @return + */ + private Set getFlags(List menus) { + Set flags = new HashSet<>(); + for (Menu menu : menus) { + //目录遍历 + if (menu.getFlag() != null) { + flags.add(menu.getFlag()); + //如果没有子集 + if (menu.getChildren() == null) { + continue; + } + for (Menu child : menu.getChildren()) { + //菜单遍历 + if (child.getFlag() != null) { + flags.add(child.getFlag()); + } + //如果没有子集 + if (child.getChildren() == null) { + continue; + } + for (Menu childChild : child.getChildren()) { + if (childChild.getFlag() != null) { + flags.add(childChild.getFlag()); + } + } + } + } + } + return flags; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/ExchangePointProducts.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/ExchangePointProducts.java new file mode 100644 index 0000000..82fd5d4 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/ExchangePointProducts.java @@ -0,0 +1,121 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; + +@TableName("exchange_point_products_records") +public class ExchangePointProducts implements Serializable { + public static final String STATE_NORMAL="0"; + public static final String STATE_DEL="1"; + private String cn; + @TableField("goods_id") + private Long goodsId; + @TableField("member_id") + private Long memberId; + private Long integral; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("update_time") + private Date updateTime; + private String updateby; + @TableField("update_id") + private Long updateId; + private String state; + @TableField(exist = false) + private String memberPhone;//会员账号 + @TableField(exist = false) + private String goodsName; + @TableField(exist = false) + private String goodsCoverUrl; + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public Long getMemberId() { + return memberId; + } + + public void setMemberId(Long memberId) { + this.memberId = memberId; + } + + public Long getIntegral() { + return integral; + } + + public void setIntegral(Long integral) { + this.integral = integral; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getUpdateby() { + return updateby; + } + + public void setUpdateby(String updateby) { + this.updateby = updateby; + } + + public Long getUpdateId() { + return updateId; + } + + public void setUpdateId(Long updateId) { + this.updateId = updateId; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getMemberPhone() { + return memberPhone; + } + + public void setMemberPhone(String memberPhone) { + this.memberPhone = memberPhone; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public String getGoodsCoverUrl() { + return goodsCoverUrl; + } + + public void setGoodsCoverUrl(String goodsCoverUrl) { + this.goodsCoverUrl = goodsCoverUrl; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Goods.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Goods.java new file mode 100644 index 0000000..a6608cb --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Goods.java @@ -0,0 +1,218 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * 商品 + */ +@TableName("goods") +public class Goods implements Serializable { + public static final String STATE_UP="0"; + public static final String STATE_DOWN="1"; + @TableId(type = IdType.AUTO) + private Long id; + private String name; //商品名 + private String info; + @TableField("category_name") + private String categoryName; //商品分类名 + @TableField("category_id") + private Long categoryId; //商品分类id + private String createby; //创建者 + @JsonFormat(pattern = "yyyy-MM-dd") + @TableField("create_time") + private Date createTime; //创建时间 + private String updateby; //更新者 + @JsonFormat(pattern = "yyyy-MM-dd") + @TableField("update_time") + private Date updateTime; //更新时间 + @TableField("sell_price") + private Double sellPrice; // 销售价格 + @TableField("purchash_price") + private Double purchashPrice; //进货价格 + @TableField("residue_num") + private Long residueNum; //剩余数量 + @TableField(exist = false) + private Long residueStoreNum;//剩余库存数量 + @TableField("cover_url") + private String coverUrl; //商品封面 + private String state=STATE_UP; + @TableField("sales_volume") + private Long salesVolume;//销售量 + private Long inventory;//需库存量 + private Long shelves;//货架商品数量 + + public Goods() { + } + + public Goods(Long id, String name, String info, String categoryName, Long categoryId, String createby, Date createTime, String updateby, Date updateTime, Double sellPrice, Double purchashPrice, Long residueNum, Long residueStoreNum, String coverUrl, String state, Long salesVolume, Long inventory, Long shelves) { + this.id = id; + this.name = name; + this.info = info; + this.categoryName = categoryName; + this.categoryId = categoryId; + this.createby = createby; + this.createTime = createTime; + this.updateby = updateby; + this.updateTime = updateTime; + this.sellPrice = sellPrice; + this.purchashPrice = purchashPrice; + this.residueNum = residueNum; + this.residueStoreNum = residueStoreNum; + this.coverUrl = coverUrl; + this.state = state; + this.salesVolume = salesVolume; + this.inventory = inventory; + this.shelves = shelves; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public Long getCategoryId() { + return categoryId; + } + + public void setCategoryId(Long categoryId) { + this.categoryId = categoryId; + } + + public String getCreateby() { + return createby; + } + + public void setCreateby(String createby) { + this.createby = createby; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateby() { + return updateby; + } + + public void setUpdateby(String updateby) { + this.updateby = updateby; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Double getSellPrice() { + return sellPrice; + } + + public void setSellPrice(Double sellPrice) { + this.sellPrice = sellPrice; + } + + public Double getPurchashPrice() { + return purchashPrice; + } + + public void setPurchashPrice(Double purchashPrice) { + this.purchashPrice = purchashPrice; + } + + public Long getResidueNum() { + return residueNum; + } + + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; + } + + public Long getResidueStoreNum() { + return residueStoreNum; + } + + public void setResidueStoreNum(Long residueStoreNum) { + this.residueStoreNum = residueStoreNum; + } + + public String getCoverUrl() { + return coverUrl; + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public Long getSalesVolume() { + return salesVolume; + } + + public void setSalesVolume(Long salesVolume) { + this.salesVolume = salesVolume; + } + + public Long getInventory() { + return inventory; + } + + public void setInventory(Long inventory) { + this.inventory = inventory; + } + + public Long getShelves() { + return shelves; + } + + public void setShelves(Long shelves) { + this.shelves = shelves; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsCategory.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsCategory.java new file mode 100644 index 0000000..51c95d0 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsCategory.java @@ -0,0 +1,63 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; + +/** + * 商品分类 + */ +@TableName("goods_category") +public class GoodsCategory implements Serializable { + public static final String STATE_NORMAL="0"; + public static final String STATE_BAN="-1"; + @TableId(type = IdType.AUTO) + private Long id; + private String name; + private String info; + private String state; + + public GoodsCategory() { + } + + public GoodsCategory(Long id, String name, String info, String state) { + this.id = id; + this.name = name; + this.info = info; + this.state = state; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} \ No newline at end of file diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsStore.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsStore.java new file mode 100644 index 0000000..680e087 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsStore.java @@ -0,0 +1,71 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; + +@TableName("t_goods_store") +public class GoodsStore implements Serializable { + @TableField("goods_id") + private Long goodsId; + @TableField("store_id") + private Long storeId; + @TableField("in_num") + private Long inNum; + @TableField("residue_num") + private Long residueNum; + @TableField("store_name") + private String storeName; + + public GoodsStore() { + } + + public GoodsStore(Long goodsId, Long storeId, Long inNum, Long residueNum, String storeName) { + this.goodsId = goodsId; + this.storeId = storeId; + this.inNum = inNum; + this.residueNum = residueNum; + this.storeName = storeName; + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getInNum() { + return inNum; + } + + public void setInNum(Long inNum) { + this.inNum = inNum; + } + + public Long getResidueNum() { + return residueNum; + } + + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Member.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Member.java new file mode 100644 index 0000000..b81ee6e --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Member.java @@ -0,0 +1,104 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonIgnore; + +import java.io.Serializable; + +@TableName("t_member") +public class Member implements Serializable { + public static final String STATE_NORMAL = "0"; + public static final String STATE_BAN = "1"; + public static final String DEFAULT_PWD="123456"; + + @TableId(type = IdType.AUTO) + private Long id; + private String name; + private String phone; + @JsonIgnore + private String password; + private String email; + private Long integral; + private String state; + private String info; + + public Member() { + } + + public Member(Long id, String name, String phone, String password, String email, Long integral, String state, String info) { + this.id = id; + this.name = name; + this.phone = phone; + this.password = password; + this.email = email; + this.integral = integral; + this.state = state; + this.info = info; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Long getIntegral() { + return integral; + } + + public void setIntegral(Long integral) { + this.integral = integral; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Menu.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Menu.java new file mode 100644 index 0000000..bc05830 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Menu.java @@ -0,0 +1,154 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.util.List; +import java.util.Objects; + +@TableName("t_menu") +public class Menu implements Serializable { + public static final String TYPE_CATALOGUE="0";//目录 + public static final String TYPE_MENU="1"; //菜单 + public static final String TYPE_BUTTON="2";//按钮 + public static final String STATE_NORMAL="0";//正常 + public static final String STATE_DEL="-1";//禁用 + @TableId(type = IdType.AUTO) + private Long id; + private String label; + private String purl; + private String type; + @TableField("parent_id") + private Long parentId; + @TableField("parent_label") + private String parentLabel; + private String info; + private String state; + private String flag; + private String icon; + private String component; + @TableField(exist = false) + private List children; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Menu menu = (Menu) o; + return Objects.equals(id, menu.id) && + Objects.equals(label, menu.label) && + Objects.equals(purl, menu.purl) && + Objects.equals(type, menu.type) && + Objects.equals(parentId, menu.parentId) && + Objects.equals(parentLabel, menu.parentLabel) && + Objects.equals(info, menu.info) && + Objects.equals(state, menu.state) && + Objects.equals(flag, menu.flag) && + Objects.equals(component, menu.component) && + Objects.equals(children, menu.children); + } + + @Override + public int hashCode() { + return Objects.hash(id, label, purl, type, parentId, parentLabel, info, state, flag, children); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getPurl() { + return purl; + } + + public void setPurl(String purl) { + this.purl = purl; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + public String getParentLabel() { + return parentLabel; + } + + public void setParentLabel(String parentLabel) { + this.parentLabel = parentLabel; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getFlag() { + return flag; + } + + public void setFlag(String flag) { + this.flag = flag; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getComponent() { + return component; + } + + public void setComponent(String component) { + this.component = component; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeIn.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeIn.java new file mode 100644 index 0000000..0509efc --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeIn.java @@ -0,0 +1,63 @@ +package com.shanzhu.market.entity.domain; + + +import java.io.Serializable; + +public class NoticeIn implements Serializable { + private Long id; + private String name; //商品名 + private Double purchashPrice; //进货价格 + private Long goodsNum; + private String coverUrl; //商品封面 + + public NoticeIn() { + } + + public NoticeIn(Long id, String name, Double purchashPrice, Long goodsNum, String coverUrl) { + this.id = id; + this.name = name; + this.purchashPrice = purchashPrice; + this.goodsNum = goodsNum; + this.coverUrl = coverUrl; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getPurchashPrice() { + return purchashPrice; + } + + public void setPurchashPrice(Double purchashPrice) { + this.purchashPrice = purchashPrice; + } + + public Long getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; + } + + public String getCoverUrl() { + return coverUrl; + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeOut.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeOut.java new file mode 100644 index 0000000..ede6424 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeOut.java @@ -0,0 +1,62 @@ +package com.shanzhu.market.entity.domain; + +import java.io.Serializable; + +public class NoticeOut implements Serializable { + private Long id; + private String name; //商品名 + private Long goodsNum; + private String coverUrl; //商品封面 + private String state; + + public NoticeOut() { + } + + public NoticeOut(Long id, String name, Long goodsNum, String coverUrl, String state) { + this.id = id; + this.name = name; + this.goodsNum = goodsNum; + this.coverUrl = coverUrl; + this.state = state; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; + } + + public String getCoverUrl() { + return coverUrl; + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/PointProducts.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/PointProducts.java new file mode 100644 index 0000000..ce07e40 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/PointProducts.java @@ -0,0 +1,103 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.util.Date; +@TableName("point_products") +public class PointProducts implements Serializable { + public static final String STATE_NORMAL="0"; + public static final String STATE_DEL="1"; + @TableField("goods_id") + private Long goodsId; + @TableField("goods_name") + private String goodsName; + private Long integral; + private String updateby; + @TableField("update_time") + private Date updateTime; + @TableField("cover_url") + private String coverUrl; + @TableField("update_id") + private Long updateId; + private String state; + + public PointProducts() { + } + + public PointProducts(Long goodsId, String goodsName, Long integral, String updateby, Date updateTime, String coverUrl, Long updateId, String state) { + this.goodsId = goodsId; + this.goodsName = goodsName; + this.integral = integral; + this.updateby = updateby; + this.updateTime = updateTime; + this.coverUrl = coverUrl; + this.updateId = updateId; + this.state = state; + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public Long getIntegral() { + return integral; + } + + public void setIntegral(Long integral) { + this.integral = integral; + } + + public String getUpdateby() { + return updateby; + } + + public void setUpdateby(String updateby) { + this.updateby = updateby; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getCoverUrl() { + return coverUrl; + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + public Long getUpdateId() { + return updateId; + } + + public void setUpdateId(Long updateId) { + this.updateId = updateId; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Role.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Role.java new file mode 100644 index 0000000..7a8c694 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Role.java @@ -0,0 +1,66 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; + +/** + * 权限实体类 + */ +@TableName("t_role") +public class Role implements Serializable { + public static final Long SYS_ID=1L; + //正常 + public static final String STATE_NORMAL="0"; + //禁用 + public static final String STATE_BAN="-1"; + @TableId(type = IdType.AUTO) + private Long id; + private String name; + private String info; + private String state; + + public Role() { + } + + public Role(Long id, String name, String info, String state) { + this.id = id; + this.name = name; + this.info = info; + this.state = state; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/SaleRecords.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/SaleRecords.java new file mode 100644 index 0000000..eb078f1 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/SaleRecords.java @@ -0,0 +1,158 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@TableName("t_sale_records") +public class SaleRecords implements Serializable { + public static final String STATE_NORMAL="0"; + public static final String STATE_DEL="1"; + private static final String TYPE_MEMBER="1"; + private static final String TYPE_NOMEMBER="0"; + private static final String SELLWAY_ALIPAY="0"; + private static final String SELLWAY_WECHAT="1"; + private static final String SELLWAY_CASH="2"; + private static final String SELLWAY_CREDIT="3"; + private static final Double DISCOUNT=0.9; + @TableField("cn") + private String cn; + private Long eid; + private String sellway; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("sell_time") + private Date sellTime; + private String state; + private String info; + private String sellby; + @TableField("sell_total") + private Long sellTotal; + @TableField("sell_totalmoney") + private Double sellTotalmoney; + private String type; + @TableField(exist = false) + private List detailSaleRecords=new ArrayList<>(); + @TableField("member_phone") + private String memberPhone;//会员账号 + + public SaleRecords() { + } + + public SaleRecords(String cn, Long eid, String sellway, Date sellTime, String state, String info, String sellby, Long sellTotal, Double sellTotalmoney, String type, List detailSaleRecords, String memberPhone) { + this.cn = cn; + this.eid = eid; + this.sellway = sellway; + this.sellTime = sellTime; + this.state = state; + this.info = info; + this.sellby = sellby; + this.sellTotal = sellTotal; + this.sellTotalmoney = sellTotalmoney; + this.type = type; + this.detailSaleRecords = detailSaleRecords; + this.memberPhone = memberPhone; + } + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public Long getEid() { + return eid; + } + + public void setEid(Long eid) { + this.eid = eid; + } + + public String getSellway() { + return sellway; + } + + public void setSellway(String sellway) { + this.sellway = sellway; + } + + public Date getSellTime() { + return sellTime; + } + + public void setSellTime(Date sellTime) { + this.sellTime = sellTime; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getSellby() { + return sellby; + } + + public void setSellby(String sellby) { + this.sellby = sellby; + } + + public Long getSellTotal() { + return sellTotal; + } + + public void setSellTotal(Long sellTotal) { + this.sellTotal = sellTotal; + } + + public Double getSellTotalmoney() { + return sellTotalmoney; + } + + public void setSellTotalmoney(Double sellTotalmoney) { + this.sellTotalmoney = sellTotalmoney; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public List getDetailSaleRecords() { + return detailSaleRecords; + } + + public void setDetailSaleRecords(List detailSaleRecords) { + this.detailSaleRecords = detailSaleRecords; + } + + public String getMemberPhone() { + return memberPhone; + } + + public void setMemberPhone(String memberPhone) { + this.memberPhone = memberPhone; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Store.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Store.java new file mode 100644 index 0000000..4278f8e --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Store.java @@ -0,0 +1,73 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; + +/** + * 仓库实体 + */ +@TableName("store") +public class Store implements Serializable { + public static final String STATE_NORMAL="0"; + public static final String STATE_BAN="-1"; + @TableId(type = IdType.AUTO) + private Long id; + private String name; + private String address; + private String info; + private String state; + + public Store() { + } + + public Store(Long id, String name, String address, String info, String state) { + this.id = id; + this.name = name; + this.address = address; + this.info = info; + this.state = state; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Supplier.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Supplier.java new file mode 100644 index 0000000..dc674e1 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Supplier.java @@ -0,0 +1,80 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; + +@TableName("supplier") +public class Supplier implements Serializable { + public static final String STATE_NORMAL="0"; + public static final String STATE_BAN="-1"; + @TableId(type = IdType.AUTO) + private Long cn; + private String name; + private String address; + private String tel; + private String info; + private String state; + + public Supplier() { + } + + public Supplier(Long cn, String name, String address, String tel, String info, String state) { + this.cn = cn; + this.name = name; + this.address = address; + this.tel = tel; + this.info = info; + this.state = state; + } + + public Long getCn() { + return cn; + } + + public void setCn(Long cn) { + this.cn = cn; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/BaseQuery.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/BaseQuery.java new file mode 100644 index 0000000..3509e88 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/BaseQuery.java @@ -0,0 +1,38 @@ +package com.shanzhu.market.entity.query; + + +import java.io.Serializable; +import java.util.Map; + +public class BaseQuery implements Serializable { + private Integer currentPage=1; + private Integer pageSize=3; + private Map params;//其他请求参数 + public Integer getStart(){ + return (currentPage-1)*pageSize; + } + + public Integer getCurrentPage() { + return currentPage; + } + + public void setCurrentPage(Integer currentPage) { + this.currentPage = currentPage; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public Map getParams() { + return params; + } + + public void setParams(Map params) { + this.params = params; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/MenuQuery.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/MenuQuery.java new file mode 100644 index 0000000..d2c0257 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/MenuQuery.java @@ -0,0 +1,13 @@ +package com.shanzhu.market.entity.query; + +public class MenuQuery extends BaseQuery { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDept.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDept.java new file mode 100644 index 0000000..fd3696a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDept.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.entity.query; + +public class QueryDept { + private String name; + private String state; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} + + diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStorageSituation.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStorageSituation.java new file mode 100644 index 0000000..a73fd14 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStorageSituation.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.entity.query; + +public class QueryDetailStorageSituation extends BaseQuery { + private Long id; + private Long storeId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoods.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoods.java new file mode 100644 index 0000000..e44a56c --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoods.java @@ -0,0 +1,49 @@ +package com.shanzhu.market.entity.query; + +public class QueryDetailStoreGoods extends BaseQuery { + private String cn; + private String goodsName; + private String state1; + private String startCreateTime; + private String endCreateTime; + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public String getState1() { + return state1; + } + + public void setState1(String state1) { + this.state1 = state1; + } + + public String getStartCreateTime() { + return startCreateTime; + } + + public void setStartCreateTime(String startCreateTime) { + this.startCreateTime = startCreateTime; + } + + public String getEndCreateTime() { + return endCreateTime; + } + + public void setEndCreateTime(String endCreateTime) { + this.endCreateTime = endCreateTime; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoodsOut.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoodsOut.java new file mode 100644 index 0000000..ad7f00e --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoodsOut.java @@ -0,0 +1,58 @@ +package com.shanzhu.market.entity.query; + +public class QueryDetailStoreGoodsOut extends BaseQuery { + private String cn; + private String goodsName; + private String state1; + private String state; + private String startCreateTime; + private String endCreateTime; + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public String getState1() { + return state1; + } + + public void setState1(String state1) { + this.state1 = state1; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getStartCreateTime() { + return startCreateTime; + } + + public void setStartCreateTime(String startCreateTime) { + this.startCreateTime = startCreateTime; + } + + public String getEndCreateTime() { + return endCreateTime; + } + + public void setEndCreateTime(String endCreateTime) { + this.endCreateTime = endCreateTime; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEditPwd.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEditPwd.java new file mode 100644 index 0000000..681934e --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEditPwd.java @@ -0,0 +1,33 @@ +package com.shanzhu.market.entity.query; + +import java.io.Serializable; + +public class QueryEditPwd implements Serializable { + private String username; + private String oldPwd; + private String newPwd; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getOldPwd() { + return oldPwd; + } + + public void setOldPwd(String oldPwd) { + this.oldPwd = oldPwd; + } + + public String getNewPwd() { + return newPwd; + } + + public void setNewPwd(String newPwd) { + this.newPwd = newPwd; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEmp.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEmp.java new file mode 100644 index 0000000..599f5fe --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEmp.java @@ -0,0 +1,58 @@ +package com.shanzhu.market.entity.query; + +public class QueryEmp extends BaseQuery { + private String username; + private String nickName; + private String age; + private String address; + private String sex; + private Long deptId; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getAge() { + return age; + } + + public void setAge(String age) { + this.age = age; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryExchangePointProductsRecords.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryExchangePointProductsRecords.java new file mode 100644 index 0000000..b64dbe8 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryExchangePointProductsRecords.java @@ -0,0 +1,40 @@ +package com.shanzhu.market.entity.query; + +public class QueryExchangePointProductsRecords extends BaseQuery { + private String cn; + private Long memberId; + private String startTime; + private String endTime; + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public Long getMemberId() { + return memberId; + } + + public void setMemberId(Long memberId) { + this.memberId = memberId; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoods.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoods.java new file mode 100644 index 0000000..7d3ce6a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoods.java @@ -0,0 +1,67 @@ +package com.shanzhu.market.entity.query; + +public class QueryGoods extends BaseQuery { + private Long id; + private String name; + private Double sellPrice; + private Long categoryId; + private String state; + private String operateStartTime; + private String operateEndTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getSellPrice() { + return sellPrice; + } + + public void setSellPrice(Double sellPrice) { + this.sellPrice = sellPrice; + } + + public Long getCategoryId() { + return categoryId; + } + + public void setCategoryId(Long categoryId) { + this.categoryId = categoryId; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getOperateStartTime() { + return operateStartTime; + } + + public void setOperateStartTime(String operateStartTime) { + this.operateStartTime = operateStartTime; + } + + public String getOperateEndTime() { + return operateEndTime; + } + + public void setOperateEndTime(String operateEndTime) { + this.operateEndTime = operateEndTime; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsCategory.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsCategory.java new file mode 100644 index 0000000..1d39de7 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsCategory.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.entity.query; + +public class QueryGoodsCategory extends BaseQuery { + private String name; + private String state; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} + + diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsStore.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsStore.java new file mode 100644 index 0000000..dd1a04e --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsStore.java @@ -0,0 +1,13 @@ +package com.shanzhu.market.entity.query; + +public class QueryGoodsStore extends BaseQuery { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryMember.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryMember.java new file mode 100644 index 0000000..d1f7514 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryMember.java @@ -0,0 +1,31 @@ +package com.shanzhu.market.entity.query; + +public class QueryMember extends BaseQuery { + private String phone; + private String state; + private String name; + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeIn.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeIn.java new file mode 100644 index 0000000..448b8c7 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeIn.java @@ -0,0 +1,13 @@ +package com.shanzhu.market.entity.query; + +public class QueryNoticeIn extends BaseQuery { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeOut.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeOut.java new file mode 100644 index 0000000..6edfa1a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeOut.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.entity.query; + +public class QueryNoticeOut extends BaseQuery { + private String name; + private String state; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryPointProducts.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryPointProducts.java new file mode 100644 index 0000000..c456d82 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryPointProducts.java @@ -0,0 +1,13 @@ +package com.shanzhu.market.entity.query; + +public class QueryPointProducts extends BaseQuery { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySaleRecords.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySaleRecords.java new file mode 100644 index 0000000..a792f99 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySaleRecords.java @@ -0,0 +1,49 @@ +package com.shanzhu.market.entity.query; + +public class QuerySaleRecords extends BaseQuery { + private String cn; + private String startSellTime; + private String endSellTime; + private String type; + private String sellway; + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public String getStartSellTime() { + return startSellTime; + } + + public void setStartSellTime(String startSellTime) { + this.startSellTime = startSellTime; + } + + public String getEndSellTime() { + return endSellTime; + } + + public void setEndSellTime(String endSellTime) { + this.endSellTime = endSellTime; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getSellway() { + return sellway; + } + + public void setSellway(String sellway) { + this.sellway = sellway; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStatisticSale.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStatisticSale.java new file mode 100644 index 0000000..c8fc6c2 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStatisticSale.java @@ -0,0 +1,13 @@ +package com.shanzhu.market.entity.query; + +public class QueryStatisticSale extends BaseQuery { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStorageSituation.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStorageSituation.java new file mode 100644 index 0000000..e705b1a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStorageSituation.java @@ -0,0 +1,13 @@ +package com.shanzhu.market.entity.query; + +public class QueryStorageSituation extends BaseQuery { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStore.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStore.java new file mode 100644 index 0000000..86b464b --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStore.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.entity.query; + +import java.io.Serializable; + +public class QueryStore implements Serializable { + private String name; + private String state; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySupplier.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySupplier.java new file mode 100644 index 0000000..36ae329 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySupplier.java @@ -0,0 +1,31 @@ +package com.shanzhu.market.entity.query; + +public class QuerySupplier extends BaseQuery { + private String name; + private String address; + private String info; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/RoleQuery.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/RoleQuery.java new file mode 100644 index 0000000..cece5ce --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/RoleQuery.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.entity.query; + +public class RoleQuery{ + private String name; + private String state; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailEmpVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailEmpVo.java new file mode 100644 index 0000000..4b30307 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailEmpVo.java @@ -0,0 +1,184 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.Set; + +public class DetailEmpVo implements Serializable { + private Long id; + private String sex; + private Boolean isAdmin; + private String username; + private String nickName; + private String password; + private String headImg; + private String state; + private String info; + private String createby; + private String idCard; + @JsonFormat(pattern = "yyyy-MM-dd") + private Date createTime; + @JsonFormat(pattern = "yyyy-MM-dd") + private Date leaveTime; + private String address; + private String email; + private Integer age; + private Long deptId; + private String deptName; + //角色集合 + private Set roleNames; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public Boolean getAdmin() { + return isAdmin; + } + + public void setAdmin(Boolean admin) { + isAdmin = admin; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getCreateby() { + return createby; + } + + public void setCreateby(String createby) { + this.createby = createby; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getLeaveTime() { + return leaveTime; + } + + public void setLeaveTime(Date leaveTime) { + this.leaveTime = leaveTime; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public Set getRoleNames() { + return roleNames; + } + + public void setRoleNames(Set roleNames) { + this.roleNames = roleNames; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStorageSituationVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStorageSituationVo.java new file mode 100644 index 0000000..69de76e --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStorageSituationVo.java @@ -0,0 +1,51 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +/** + * 仓库存储情况 + */ +public class DetailStorageSituationVo implements Serializable { + private Long goodsId; + private String goodsName; + private Long residueNum; //商品数量 + private Long percentage=0L; + public void setPercentage(Long total) { + if (total==null ||total==0){ + this.percentage=0L; + }else { + String num=((this.residueNum*100.0)/total)+""; + Long num1=Long.valueOf(num.split("\\.")[0]); + this.percentage =num1; + } + + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public Long getResidueNum() { + return residueNum; + } + + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; + } + + public Long getPercentage() { + return percentage; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsOutVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsOutVo.java new file mode 100644 index 0000000..48aa8cc --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsOutVo.java @@ -0,0 +1,120 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; +public class DetailStoreGoodsOutVo implements Serializable { + private String cn; + private Long goodsId; + private Long goodsNum; + private String goodsName; + private Long createid; + private String createby; + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern ="yyyy-MM-dd" ) + private Date createTime; + private String state; + private String info; + private Long storeId; + private String storeName; + private String state1; + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public Long getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public Long getCreateid() { + return createid; + } + + public void setCreateid(Long createid) { + this.createid = createid; + } + + public String getCreateby() { + return createby; + } + + public void setCreateby(String createby) { + this.createby = createby; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public String getState1() { + return state1; + } + + public void setState1(String state1) { + this.state1 = state1; + } +} + diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsVo.java new file mode 100644 index 0000000..fbde9da --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsVo.java @@ -0,0 +1,170 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +public class DetailStoreGoodsVo implements Serializable { + private String cn; + private Long goodsId; + private Long goodsNum; + private String goodsName; + private Double goodsPrice; + private String info; + private Long createid; + private String createby; + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern ="yyyy-MM-dd" ) + private Date createTime; + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern ="yyyy-MM-dd" ) + private Date expiryTime; + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern ="yyyy-MM-dd" ) + private Date birthTime; + private String state1; + private Long storeId; + private String storeName; + private String state; + private Long supplierId; + private String supplierName; + + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public Long getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public Double getGoodsPrice() { + return goodsPrice; + } + + public void setGoodsPrice(Double goodsPrice) { + this.goodsPrice = goodsPrice; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public Long getCreateid() { + return createid; + } + + public void setCreateid(Long createid) { + this.createid = createid; + } + + public String getCreateby() { + return createby; + } + + public void setCreateby(String createby) { + this.createby = createby; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getExpiryTime() { + return expiryTime; + } + + public void setExpiryTime(Date expiryTime) { + this.expiryTime = expiryTime; + } + + public Date getBirthTime() { + return birthTime; + } + + public void setBirthTime(Date birthTime) { + this.birthTime = birthTime; + } + + public String getState1() { + return state1; + } + + public void setState1(String state1) { + this.state1 = state1; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/EditEmpVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/EditEmpVo.java new file mode 100644 index 0000000..f5354a8 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/EditEmpVo.java @@ -0,0 +1,122 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; +public class EditEmpVo implements Serializable { + private Long id; + private String idCard; + private String username; + private String address; + private String sex; + private Integer age; + private String nickName; + private String headImg; + private String state; + private String info; + private Long deptId; + private String deptName; + private Boolean isAdmin; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public Boolean getAdmin() { + return isAdmin; + } + + public void setAdmin(Boolean admin) { + isAdmin = admin; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsListVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsListVo.java new file mode 100644 index 0000000..effa990 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsListVo.java @@ -0,0 +1,139 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; + +public class GoodsListVo implements Serializable { + + /*商品编码*/ + private Long id; + /*商品封面*/ + private String coverUrl; + /*商品名称*/ + private String name; + /*售价*/ + private Double sellPrice; + /*批发价*/ + private Double purchashPrice; + /*商品数量*/ + private Long residueNum; + /*可用库存*/ + private Long residueStoreNum; + /*商品类型*/ + private Long categoryId; + private String categoryName; + /*状态,下架、上架*/ + private String state; + /*操作者*/ + private String updateby; + private String info; + /*操作时间*/ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getCoverUrl() { + return coverUrl; + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getSellPrice() { + return sellPrice; + } + + public void setSellPrice(Double sellPrice) { + this.sellPrice = sellPrice; + } + + public Double getPurchashPrice() { + return purchashPrice; + } + + public void setPurchashPrice(Double purchashPrice) { + this.purchashPrice = purchashPrice; + } + + public Long getResidueNum() { + return residueNum; + } + + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; + } + + public Long getResidueStoreNum() { + return residueStoreNum; + } + + public void setResidueStoreNum(Long residueStoreNum) { + this.residueStoreNum = residueStoreNum; + } + + public Long getCategoryId() { + return categoryId; + } + + public void setCategoryId(Long categoryId) { + this.categoryId = categoryId; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getUpdateby() { + return updateby; + } + + public void setUpdateby(String updateby) { + this.updateby = updateby; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsStoreVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsStoreVo.java new file mode 100644 index 0000000..c2cc266 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsStoreVo.java @@ -0,0 +1,51 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +public class GoodsStoreVo implements Serializable { + private Long id; + private String name; //商品名 + private String coverUrl; //商品封面 + private Long inventory;//需库存量 + private Long shelves;//货架商品数量 + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCoverUrl() { + return coverUrl; + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + public Long getInventory() { + return inventory; + } + + public void setInventory(Long inventory) { + this.inventory = inventory; + } + + public Long getShelves() { + return shelves; + } + + public void setShelves(Long shelves) { + this.shelves = shelves; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/InformationVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/InformationVo.java new file mode 100644 index 0000000..1cb09b5 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/InformationVo.java @@ -0,0 +1,114 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +public class InformationVo implements Serializable { + private Long id; + private String sex; + private String username; + private String nickName; + private String headImg; + private String info; + private String address; + private String email; + private Integer age; + private Long deptId; + private String idCard; + private String deptName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/NoticeInNotNormalVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/NoticeInNotNormalVo.java new file mode 100644 index 0000000..91b0eaf --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/NoticeInNotNormalVo.java @@ -0,0 +1,93 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +public class NoticeInNotNormalVo implements Serializable { + private String cn; + private String coverUrl; + private Long goodsId; + private Long untreatedNum; + private String goodsName; + private String state; + private Long storeId; + private String storeName; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime;//通知时间 + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public String getCoverUrl() { + return coverUrl; + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public Long getUntreatedNum() { + return untreatedNum; + } + + public void setUntreatedNum(Long untreatedNum) { + this.untreatedNum = untreatedNum; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/RolePermissonVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/RolePermissonVo.java new file mode 100644 index 0000000..6f7f269 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/RolePermissonVo.java @@ -0,0 +1,71 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonIgnoreType; + +import java.io.Serializable; +import java.util.List; + +public class RolePermissonVo implements Serializable { + private List menuIds; + private List menus; + + /** + * 获取成员内部类的实例 + * + * @return + */ + public RoleMenu getRoleMenu() { + return new RoleMenu(); + } + + public List getMenuIds() { + return menuIds; + } + + public void setMenuIds(List menuIds) { + this.menuIds = menuIds; + } + + public List getMenus() { + return menus; + } + + public void setMenus(List menus) { + this.menus = menus; + } + + /** + * 成员内部类,供这个类使用 + */ + @JsonIgnoreType + public class RoleMenu { + private Long value; + private String label; + private List children; + + public Long getValue() { + return value; + } + + public void setValue(Long value) { + this.value = value; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SaleGoodsVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SaleGoodsVo.java new file mode 100644 index 0000000..116f733 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SaleGoodsVo.java @@ -0,0 +1,63 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +/** + * 单个商品销售信息 + */ +public class SaleGoodsVo implements Serializable { + private Long goodsId; + private String goodsName; + private String coverUrl; + private Long salesVolume;//销量 + private Long percentage=0L; + public void setPercentage(Long total) { + if (total==null || total==0){ + this.percentage=0L; + }else { + if (this.salesVolume==null){ + this.salesVolume=0L; + } + String num=((this.salesVolume*100.0)/total)+""; + Long num1=Long.valueOf(num.split("\\.")[0]); + this.percentage =num1; + } + + } + + public Long getGoodsId() { + return goodsId; + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public String getCoverUrl() { + return coverUrl; + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + public Long getSalesVolume() { + return salesVolume; + } + + public void setSalesVolume(Long salesVolume) { + this.salesVolume = salesVolume; + } + + public Long getPercentage() { + return percentage; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SalesStatisticsVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SalesStatisticsVo.java new file mode 100644 index 0000000..4c7416f --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SalesStatisticsVo.java @@ -0,0 +1,29 @@ +package com.shanzhu.market.entity.vo; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import java.io.Serializable; + +/** + * 商品销售量统计 + */ +public class SalesStatisticsVo implements Serializable { + private Long total; //所有商品总售卖量 + private Page vos; + + public Long getTotal() { + return total; + } + + public void setTotal(Long total) { + this.total = total; + } + + public Page getVos() { + return vos; + } + + public void setVos(Page vos) { + this.vos = vos; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/StorageSituationVo.java b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/StorageSituationVo.java new file mode 100644 index 0000000..53d3abc --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/StorageSituationVo.java @@ -0,0 +1,36 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +/** + * 仓库存储情况 + */ +public class StorageSituationVo implements Serializable { + private Long storeId; + private String storeName; + private Long residueNum; //该仓库存储商品数量 + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public Long getResidueNum() { + return residueNum; + } + + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/job/CacheDataJob.java b/superMarket-backend/src/main/java/com/shanzhu/market/job/CacheDataJob.java new file mode 100644 index 0000000..05c6360 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/job/CacheDataJob.java @@ -0,0 +1,37 @@ +package com.shanzhu.market.job; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.GoodsCategory; +import com.shanzhu.market.service.IGoodsCategoryService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +@Component +public class CacheDataJob { + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IGoodsCategoryService goodsCategoryService; + + @Scheduled(cron = "0 0 1 * * ?") //每天凌晨1点执行一次 + public void cache_category(){ + System.out.println("被执行。。。。"); + QueryWrapper wrapper = new QueryWrapper() + .eq("state", GoodsCategory.STATE_NORMAL); + List list = goodsCategoryService.list(wrapper); + if (list==null ||list.size()<=0){ + return; + } + String cacheKey = RedisKeys.GOODS_CATEGORY.join(); + for (GoodsCategory goodsCategory : list) { + redisTemplateService.setCacheMapValue(cacheKey,goodsCategory.getId().toString(),goodsCategory); + } + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DeptMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DeptMapper.java new file mode 100644 index 0000000..5bd142a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DeptMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Dept; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface DeptMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailSaleRecordsMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailSaleRecordsMapper.java new file mode 100644 index 0000000..a1d9aa0 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailSaleRecordsMapper.java @@ -0,0 +1,11 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.DetailSaleRecords; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface DetailSaleRecordsMapper extends BaseMapper { + + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailStoreGoodsMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailStoreGoodsMapper.java new file mode 100644 index 0000000..e4f1ddb --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailStoreGoodsMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface DetailStoreGoodsMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/EmployeeMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/EmployeeMapper.java new file mode 100644 index 0000000..003b304 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/EmployeeMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Employee; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EmployeeMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/ExchangePointProductsMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/ExchangePointProductsMapper.java new file mode 100644 index 0000000..a9e18e8 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/ExchangePointProductsMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.ExchangePointProducts; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ExchangePointProductsMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsCategoryMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsCategoryMapper.java new file mode 100644 index 0000000..243bc6d --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsCategoryMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.GoodsCategory; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface GoodsCategoryMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsMapper.java new file mode 100644 index 0000000..36736fc --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsMapper.java @@ -0,0 +1,23 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.NoticeIn; +import com.shanzhu.market.entity.domain.NoticeOut; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GoodsMapper extends BaseMapper { + + int getNoticeInTotalCount(Map map); + + List getNoticePageList(Map map); + + int getNoticeOutShelvesTotalCount(Map map); + + List getNoticeShelvesPageList(Map map); + Long queryPageStatisticSaleByQo(String name); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsStoreMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsStoreMapper.java new file mode 100644 index 0000000..b0b33b1 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsStoreMapper.java @@ -0,0 +1,20 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.GoodsStore; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface GoodsStoreMapper extends BaseMapper { + Long storeUsed(Long id); + Long getResidueNumByGoodsId(Long goodsId); + + void goodsInStore(@Param("goodsId") Long goodsId,@Param("goodsNum") Long goodsNum,@Param("storeId") Long storeId); + + void goodsOutStore(@Param("goodsId") Long goodsId,@Param("goodsNum") Long goodsNum,@Param("storeId") Long storeId); + + Long totalStoreNum(); + + Long getTotalStoreNum1(Long storeId); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MemberMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MemberMapper.java new file mode 100644 index 0000000..f9204e4 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MemberMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Member; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MemberMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MenuMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MenuMapper.java new file mode 100644 index 0000000..b1717ab --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MenuMapper.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Menu; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Set; + +@Mapper +public interface MenuMapper extends BaseMapper { + + + /** + * 根据角色id集合查询权限信息 + * @param rids + * @return + */ + List queryByRids(Set rids); + + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/PointProductsMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/PointProductsMapper.java new file mode 100644 index 0000000..52ab48d --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/PointProductsMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.PointProducts; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface PointProductsMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/RoleMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/RoleMapper.java new file mode 100644 index 0000000..74ecf0a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/RoleMapper.java @@ -0,0 +1,52 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Role; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Mapper +public interface RoleMapper extends BaseMapper { + /** + * 根据员工id查询角色信息 + * + * @param eid + * @return + */ + Set queryByEid(Long eid); + + /** + * 根据角色id查询菜单信息 + * + * @param rid + * @return + */ + List getMenuIdByRid(Long rid); + + /** + * 清除关系 + * + * @param rid + */ + void clearRecordsByRid(Long rid); + + + /** + * 保存关系 + * + * @param roleMenu + */ + void saveRolePermissons(List> roleMenu); + + List queryRoleIdsByEid(Long eid); + + void clearRelationByEid(Long eid); + + void reSaveRelation(List> list); + + List queryRoleIdsAll(); + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SaleRecordsMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SaleRecordsMapper.java new file mode 100644 index 0000000..1337a6d --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SaleRecordsMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.SaleRecords; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaleRecordsMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/StoreMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/StoreMapper.java new file mode 100644 index 0000000..ebc772e --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/StoreMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Store; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface StoreMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SupplierMapper.java b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SupplierMapper.java new file mode 100644 index 0000000..a506e33 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SupplierMapper.java @@ -0,0 +1,9 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Supplier; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SupplierMapper extends BaseMapper { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IDeptService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IDeptService.java new file mode 100644 index 0000000..f3df257 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IDeptService.java @@ -0,0 +1,35 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Dept; +import com.shanzhu.market.entity.query.QueryDept; + +import java.util.List; + +public interface IDeptService extends IService { + + /** + * 条件查询信息业务 + * @param qo + * @return + */ + List listByQo(QueryDept qo); + + /** + * 停用业务 + * @param id + */ + void forbiddenRole(Long id); + + /** + * 保存信息业务 + * @param dept + */ + void saveDept(Dept dept); + + /** + * 更改部门的信息业务 + * @param dept + */ + void updateDept(Dept dept); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailSaleRecordsService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailSaleRecordsService.java new file mode 100644 index 0000000..72cd7f1 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailSaleRecordsService.java @@ -0,0 +1,7 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.DetailSaleRecords; + +public interface IDetailSaleRecordsService extends IService { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailStoreGoodsService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailStoreGoodsService.java new file mode 100644 index 0000000..a4a5be0 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailStoreGoodsService.java @@ -0,0 +1,33 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.query.QueryDetailStoreGoods; +import com.shanzhu.market.entity.query.QueryDetailStoreGoodsOut; +import com.shanzhu.market.entity.vo.DetailStoreGoodsOutVo; +import com.shanzhu.market.entity.vo.DetailStoreGoodsVo; + +import java.util.List; +import java.util.Map; + +public interface IDetailStoreGoodsService extends IService { + + void saveIn(DetailStoreGoods detailStoreGoods, String token); + + Page queryPageByQoIn(QueryDetailStoreGoods qo); + + void delIn(String cn); + + Page queryPageByQoOut(QueryDetailStoreGoodsOut qo); + + Map initOutOptions(); + + List> changeOutGoods(Long gid); + + List> changeOutStore(Long storeId); + + DetailStoreGoodsOutVo queryOutGoods(Long goodsId, Long storeId); + + void saveOut(DetailStoreGoods detailStoreGoods, String token); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IEmployeeService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IEmployeeService.java new file mode 100644 index 0000000..0cee44c --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IEmployeeService.java @@ -0,0 +1,40 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.query.QueryEditPwd; +import com.shanzhu.market.entity.query.QueryEmp; +import com.shanzhu.market.entity.vo.DetailEmpVo; +import com.shanzhu.market.entity.vo.EditEmpVo; +import com.shanzhu.market.entity.vo.InformationVo; + +public interface IEmployeeService extends IService { + + /** + * 修改个人密码业务 + */ + void edit_pwd(QueryEditPwd editPwd, String token); + + /** + * 分页显示数据 + */ + Page pageByQo(QueryEmp qo); + + DetailEmpVo detail(Long uid); + + void saveEmp(Employee employee,String token); + + EditEmpVo editbtn(Long uid); + + void updateEmp(Employee employee,String token); + + void deactivate(Long id); + + /** + * 重置密码 + */ + void resetPwd(Long eid, String code); + + InformationVo information(String token); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IExchangePointProductsService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IExchangePointProductsService.java new file mode 100644 index 0000000..b8d89d4 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IExchangePointProductsService.java @@ -0,0 +1,30 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.ExchangePointProducts; +import com.shanzhu.market.entity.domain.PointProducts; +import com.shanzhu.market.entity.query.QueryExchangePointProductsRecords; + +import java.util.List; +import java.util.Map; + +public interface IExchangePointProductsService extends IService { + List> queryPointProductBymemberId(Long memberId); + + PointProducts queryPointProductByGoodsId(Long goodsId); + + void saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, String token); + + List> queryOptionsMemberPhone(); + + void delExchangePointProducts(String cn); + + Page queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo); + + List> queryOptionsPointProducts(); + + List> queryOptionsMember(); + + List> queryMemberByGoodsId(Long goodsId); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsCategoryService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsCategoryService.java new file mode 100644 index 0000000..b209e80 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsCategoryService.java @@ -0,0 +1,34 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.GoodsCategory; +import com.shanzhu.market.entity.query.QueryGoodsCategory; + +import java.util.List; +import java.util.Map; + +public interface IGoodsCategoryService extends IService { + + /** + * 更改业务 + */ + void updateGoodsCategory(GoodsCategory goodsCategory); + + /** + * 停用业务 + */ + void deactivate(Long cid); + + /** + * 条件查询 + */ + Page queryPageByQo(QueryGoodsCategory qo); + + /** + * 保存商品分类信息 + */ + void saveGoodsCategory(GoodsCategory category); + + List> getNormalCategoryAll(); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsService.java new file mode 100644 index 0000000..d6c0210 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsService.java @@ -0,0 +1,54 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.NoticeIn; +import com.shanzhu.market.entity.domain.NoticeOut; +import com.shanzhu.market.entity.query.*; +import com.shanzhu.market.entity.vo.GoodsListVo; +import com.shanzhu.market.entity.vo.GoodsStoreVo; +import com.shanzhu.market.entity.vo.NoticeInNotNormalVo; +import com.shanzhu.market.entity.vo.SalesStatisticsVo; + +import java.util.List; +import java.util.Map; + +public interface IGoodsService extends IService { + + /** + * 分页查询出数据 + */ + Page queryPageByQo(QueryGoods qo); + + void saveGoods(Goods goods, String token); + + void upOrdown(Long gid, String state,String token); + + void updateGoods(Goods goods, String token); + + List> selected_goodsAll(); + + List> selected_storeAll(); + + void returnGoods(DetailStoreGoods detailStoreGoods, String token); + + Page queryPageGoodsStore(QueryGoodsStore qo); + + GoodsStoreVo queryGoodsStoreById(Long id); + + void updateInventory(GoodsStoreVo vo); + + Page queryPageNoticeIn(QueryNoticeIn qo); + + Page queryPageNoticeOut_shelves(QueryNoticeOut qo); + + void saveOut_shelves(DetailStoreGoods detailStoreGoods,String token); + + SalesStatisticsVo queryPageStatisticSaleByQo(QueryStatisticSale qo); + + Page queryPageNoticeOut_untreated(QueryNoticeOut qo); + + void resolveOutUntreatedForm(NoticeInNotNormalVo vo, String token); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsStoreService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsStoreService.java new file mode 100644 index 0000000..3b80e57 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsStoreService.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.GoodsStore; +import com.shanzhu.market.entity.query.QueryDetailStorageSituation; +import com.shanzhu.market.entity.query.QueryStorageSituation; + +import java.util.Map; + +public interface IGoodsStoreService extends IService { + + + Long storeUsed(Long id); + + Long getResidueNumByGoodsId(Long id); + + void goodsInStore(Long goodsId, Long goodsNum,Long storeId); + + void goodsOutStore(Long goodsId, Long goodsNum, Long storeId); + + Map queryPageStorageSituationByQo(QueryStorageSituation qo); + + Map queryStoreGoodsByStoreId(QueryDetailStorageSituation qo); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/ILoginService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/ILoginService.java new file mode 100644 index 0000000..ece6437 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/ILoginService.java @@ -0,0 +1,36 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Menu; + +import java.util.List; +import java.util.Map; + +/** + * 员工登录业务接口 + */ +public interface ILoginService extends IService { + + /** + * 处理员工登录业务 + */ + Map login(String username, String password); + + /** + * 退出功能 + */ + void exit(String token); + + /** + * 注销账户功能 + */ + void logout(String token, String content); + + /** + * 登录者拥有的菜单信息 + */ + List empMenu(String token); + + Map checkedToken(String token); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IMemberService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IMemberService.java new file mode 100644 index 0000000..02ddb86 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IMemberService.java @@ -0,0 +1,20 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Member; +import com.shanzhu.market.entity.query.QueryMember; + +public interface IMemberService extends IService { + Page queryPageByQo(QueryMember qo); + + void delMember(Long id); + + void saveMember(Member member); + + Member queryMemberById(Long id); + + void updateMember(Member member); + + Member queryMemberByPhone(String phone); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IMenuService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IMenuService.java new file mode 100644 index 0000000..784d43d --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IMenuService.java @@ -0,0 +1,34 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.query.MenuQuery; + +import java.util.List; +import java.util.Set; + +public interface IMenuService extends IService { + + /** + * 查询所有的菜单 + */ + List findAll(); + + /** + * 根据角色id集合查询对应的菜单 + */ + List queryByRids(Set rids); + + /** + * 分页查询菜单的信息 + * 以目录进行分页 + */ + Page queryPageByQo(MenuQuery qo); + + /** + * 查询父菜单id + */ + List listParentByIds(List ids); + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IPointProductsService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IPointProductsService.java new file mode 100644 index 0000000..3c10c89 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IPointProductsService.java @@ -0,0 +1,21 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.PointProducts; +import com.shanzhu.market.entity.query.QueryPointProducts; + +import java.util.List; +import java.util.Map; + +public interface IPointProductsService extends IService { + Page queryPageByQo(QueryPointProducts qo); + + List> queryOptionGoods(); + + void savePointGoods(PointProducts pointProducts,String token); + + void updatePointGoods(PointProducts pointProducts, String token); + + void del(Long id); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IRoleService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IRoleService.java new file mode 100644 index 0000000..a4ff5d7 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IRoleService.java @@ -0,0 +1,51 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.entity.query.RoleQuery; +import com.shanzhu.market.entity.vo.RolePermissonVo; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public interface IRoleService extends IService { + + /** + * 查询该员工id的角色信息 + */ + Set queryByEid(Long eid); + + /** + * 条件查询角色信息 + */ + List listByQo(RoleQuery qo); + + /** + * 停用角色业务 + */ + void forbiddenRole(Long rid); + + /** + * 保存角色信息业务 + */ + void saveRole(Role role); + + /** + * 查看角色权限的业务 + */ + RolePermissonVo checkPermissons(Long rid); + + /** + * 保存角色-菜单的关系业务 + */ + void saveRolePermissons(Long rid, Long[] menuIds); + + List> getRoleAll(); + + List queryRoleIdsByEid(Long eid); + + void saveRoleEmp(Long eid, Long[] roleIds,String token); + + void clearEmpPermission(Long id); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/ISaleRecordsService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/ISaleRecordsService.java new file mode 100644 index 0000000..27d8735 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/ISaleRecordsService.java @@ -0,0 +1,19 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.SaleRecords; +import com.shanzhu.market.entity.query.QuerySaleRecords; + +import java.util.List; +import java.util.Map; + +public interface ISaleRecordsService extends IService { + List> getOptionSaleRecordsGoods(); + + SaleRecords saveSaleRecords(SaleRecords saleRecords, String token); + + Page queryPageByQoSaleRecords(QuerySaleRecords qo); + + void delSaleRecords(String cn); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/IStoreService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/IStoreService.java new file mode 100644 index 0000000..1b8e46a --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/IStoreService.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Store; + +public interface IStoreService extends IService { + + /** + * 更改仓库信息的业务 + */ + void updateStore(Store store); + + /** + * 停用仓库业务 + */ + void deactivate(Long sid); + + Long getResidueNumByGoodsId(Long id); + + void saveStore(Store store); + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/ISupplierService.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/ISupplierService.java new file mode 100644 index 0000000..6c1e172 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/ISupplierService.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Supplier; +import com.shanzhu.market.entity.query.QuerySupplier; + +import java.util.List; +import java.util.Map; + +public interface ISupplierService extends IService { + + void deactivate(Long cn); + + Page queryPageByQo(QuerySupplier qo); + + List> queryOptionsSuppliers(); + + void saveSupplier(Supplier supplier); + + void updateSupplier(Supplier supplier); +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DeptServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DeptServiceImpl.java new file mode 100644 index 0000000..cdb49da --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DeptServiceImpl.java @@ -0,0 +1,72 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Dept; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.query.QueryDept; +import com.shanzhu.market.mapper.DeptMapper; +import com.shanzhu.market.service.IDeptService; +import com.shanzhu.market.service.IEmployeeService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class DeptServiceImpl extends ServiceImpl implements IDeptService { + + @Resource + private IEmployeeService employeeService; + + @Override + public List listByQo(QueryDept qo) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .like(StringUtils.hasText(qo.getName()),Dept::getName, qo.getName()) + .eq(StringUtils.hasText(qo.getState()),Dept::getState, qo.getState()); + return super.list(wrapper); + } + + @Transactional + @Override + public void forbiddenRole(Long id) { + QueryWrapper empWrapper = new QueryWrapper().eq(id != null,"deptId", id); + List list = employeeService.list(empWrapper); + if (list!=null &&list.size()>0){ + throw new BusinessException("操作失败,该部门正在使用"); + } + UpdateWrapper wrapper = new UpdateWrapper().set("state", Dept.STATE_BAN).eq("id", id); + super.update(wrapper); + } + + @Transactional + @Override + public void saveDept(Dept dept) { + //判断是否有被创建 + QueryWrapper wrapper = new QueryWrapper().eq(StringUtils.hasText(dept.getName()), "name", dept.getName()); + if (super.getOne(wrapper)!=null){ + throw new BusinessException("操作失败,该部门已存在"); + } + dept.setState(Dept.STATE_NORMAL); + super.save(dept); + + } + + @Transactional + @Override + public void updateDept(Dept dept) { + if (Dept.STATE_BAN.equals(dept.getState())){ + QueryWrapper empWrapper = new QueryWrapper().eq(dept.getId() != null,"deptId", dept.getId()); + List list = employeeService.list(empWrapper); + if (list!=null &&list.size()>0){ + throw new BusinessException("操作失败,该部门正在使用"); + } + } + super.updateById(dept); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailSaleRecordsServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailSaleRecordsServiceImpl.java new file mode 100644 index 0000000..a96ba77 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailSaleRecordsServiceImpl.java @@ -0,0 +1,11 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.entity.domain.DetailSaleRecords; +import com.shanzhu.market.mapper.DetailSaleRecordsMapper; +import com.shanzhu.market.service.IDetailSaleRecordsService; +import org.springframework.stereotype.Service; + +@Service +public class DetailSaleRecordsServiceImpl extends ServiceImpl implements IDetailSaleRecordsService { +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailStoreGoodsServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailStoreGoodsServiceImpl.java new file mode 100644 index 0000000..e9d443c --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailStoreGoodsServiceImpl.java @@ -0,0 +1,270 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.*; +import com.shanzhu.market.entity.query.QueryDetailStoreGoods; +import com.shanzhu.market.entity.query.QueryDetailStoreGoodsOut; +import com.shanzhu.market.entity.vo.DetailStoreGoodsOutVo; +import com.shanzhu.market.entity.vo.DetailStoreGoodsVo; +import com.shanzhu.market.mapper.DetailStoreGoodsMapper; +import com.shanzhu.market.service.*; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class DetailStoreGoodsServiceImpl extends ServiceImpl implements IDetailStoreGoodsService { + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IGoodsStoreService goodsStoreService; + + @Resource + private IStoreService storeService; + + @Resource + private IGoodsService goodsService; + + @Resource + private ISupplierService supplierService; + + @Override + public void saveIn(DetailStoreGoods detailStoreGoods, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + detailStoreGoods.setType(DetailStoreGoods.TYPE_IN); + detailStoreGoods.setState(DetailStoreGoods.STATE_NORMAL); + detailStoreGoods.setCreateid(employee.getId()); + detailStoreGoods.setCreateby(employee.getNickName()); + detailStoreGoods.setCn(IdWorker.getIdStr()); + detailStoreGoods.setCreateTime(new Date()); + detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); + goodsStoreService.goodsInStore(detailStoreGoods.getGoodsId(), detailStoreGoods.getGoodsNum(), detailStoreGoods.getStoreId()); + Supplier supplier = supplierService.getById(detailStoreGoods.getSupplierId()); + detailStoreGoods.setSupplierName(supplier.getName()); + super.save(detailStoreGoods); + } + + @Override + public Page queryPageByQoIn(QueryDetailStoreGoods qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + Page page1 = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn()); + wrapper.like(StringUtils.hasText(qo.getGoodsName()), "goods_name", qo.getGoodsName()); + wrapper.eq(StringUtils.hasText(qo.getState1()), "state1", qo.getState1()); + wrapper.ge(StringUtils.hasText(qo.getStartCreateTime()), "create_time", qo.getStartCreateTime()); + wrapper.le(StringUtils.hasText(qo.getEndCreateTime()), "create_time", qo.getEndCreateTime()); + wrapper.eq("type", DetailStoreGoods.TYPE_IN); + super.page(page, wrapper); + List records = page.getRecords(); + if (records == null || records.size() <= 0) { + page1.setTotal(0L); + } + List list = new ArrayList<>(); + for (DetailStoreGoods record : records) { + DetailStoreGoodsVo vo = new DetailStoreGoodsVo(); + BeanUtils.copyProperties(record, vo); + Store store = storeService.getById(record.getStoreId()); + if (store != null) { + vo.setStoreName(store.getName()); + } + list.add(vo); + } + page1.setRecords(list); + page1.setTotal(page.getTotal()); + return page1; + } + + @Override + public void delIn(String cn) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.set("state1", DetailStoreGoods.STATE1_DEL); + wrapper.eq("cn", cn); + super.update(wrapper); + } + + @Override + public Page queryPageByQoOut(QueryDetailStoreGoodsOut qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + Page page1 = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn()); + wrapper.like(StringUtils.hasText(qo.getGoodsName()), "goods_name", qo.getGoodsName()); + wrapper.ge(StringUtils.hasText(qo.getStartCreateTime()), "create_time", qo.getStartCreateTime()); + wrapper.le(StringUtils.hasText(qo.getEndCreateTime()), "create_time", qo.getEndCreateTime()); + wrapper.eq("type", DetailStoreGoods.TYPE_OUT); + wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState()); + wrapper.eq(StringUtils.hasText(qo.getState1()), "state1", qo.getState1()); + super.page(page, wrapper); + List records = page.getRecords(); + if (records == null || records.size() <= 0) { + page1.setTotal(0L); + } + List list = new ArrayList<>(); + for (DetailStoreGoods record : records) { + DetailStoreGoodsOutVo vo = new DetailStoreGoodsOutVo(); + BeanUtils.copyProperties(record, vo); + Store store = storeService.getById(record.getStoreId()); + if (store != null) { + vo.setStoreName(store.getName()); + } + list.add(vo); + } + page1.setRecords(list); + page1.setTotal(page.getTotal()); + return page1; + } + + @Override + public Map initOutOptions() { + Set goodsIds = new HashSet<>(); + Set storeIds = new HashSet<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.gt("residue_num", 0L); + List list = goodsStoreService.list(wrapper); + if (list == null || list.size() == 0) { + throw new BusinessException("库存中没有存放商品"); + } + for (GoodsStore goodsStore : list) { + goodsIds.add(goodsStore.getGoodsId()); + storeIds.add(goodsStore.getStoreId()); + } + Map map = new HashMap<>(); + List> goodsList = new ArrayList<>(); + List> storeList = new ArrayList<>(); + List goods = goodsService.listByIds(goodsIds); + for (Goods good : goods) { + Map goodsMap = new HashMap<>(); + goodsMap.put("id", good.getId()); + goodsMap.put("name", good.getName()); + goodsList.add(goodsMap); + } + List stores = storeService.listByIds(storeIds); + for (Store store : stores) { + Map storeMap = new HashMap<>(); + storeMap.put("id", store.getId()); + storeMap.put("name", store.getName()); + storeList.add(storeMap); + } + map.put("goods", goodsList); + map.put("stores", storeList); + return map; + } + + @Override + public List> changeOutGoods(Long gid) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("goods_id", gid); + wrapper.gt("residue_num", 0L); + List list = goodsStoreService.list(wrapper); + Set storeIds = new HashSet<>(); + for (GoodsStore goodsStore : list) { + storeIds.add(goodsStore.getStoreId()); + } + List stores = storeService.listByIds(storeIds); + List> storeList = new ArrayList<>(); + for (Store store : stores) { + Map map = new HashMap<>(); + map.put("id", store.getId()); + map.put("name", store.getName()); + storeList.add(map); + } + return storeList; + } + + @Override + public List> changeOutStore(Long storeId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("store_id", storeId); + wrapper.gt("residue_num", 0L); + List list = goodsStoreService.list(wrapper); + Set goodsIds = new HashSet<>(); + for (GoodsStore goodsStore : list) { + goodsIds.add(goodsStore.getGoodsId()); + } + List goodsList = goodsService.listByIds(goodsIds); + List> goodsVo = new ArrayList<>(); + for (Goods goods : goodsList) { + Map map = new HashMap<>(); + map.put("id", goods.getId()); + map.put("name", goods.getName()); + goodsVo.add(map); + } + return goodsVo; + } + + @Override + public DetailStoreGoodsOutVo queryOutGoods(Long goodsId, Long storeId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("goods_id",goodsId); + wrapper.eq("store_id",storeId); + GoodsStore goodsStore = goodsStoreService.getOne(wrapper); + DetailStoreGoodsOutVo vo = new DetailStoreGoodsOutVo(); + BeanUtils.copyProperties(goodsStore,vo); + vo.setGoodsNum(goodsStore.getResidueNum()); + Goods goods = goodsService.getById(goodsId); + vo.setGoodsName(goods.getName()); + return vo; + } + + @Override + public void saveOut(DetailStoreGoods detailStoreGoods, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + detailStoreGoods.setType(DetailStoreGoods.TYPE_OUT); + detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); + detailStoreGoods.setCreateid(employee.getId()); + detailStoreGoods.setCreateby(employee.getNickName()); + detailStoreGoods.setCn(IdWorker.getIdStr()); + detailStoreGoods.setCreateTime(new Date()); + + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + + GoodsStore goodsStore = goodsStoreService.getOne(goodsStoreQueryWrapper); + long num = goodsStore.getResidueNum() - detailStoreGoods.getGoodsNum(); + + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + if (DetailStoreGoods.STATE_EXPIRY.equals(detailStoreGoods.getState())){ + //过期处理 + detailStoreGoods.setState(DetailStoreGoods.STATE_EXPIRY); + if (num>=0){ + goodsStoreUpdateWrapper.set("residue_num",num); + + }else { + goodsStoreUpdateWrapper.set("residue_num",0L); + detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); + } + }else { + //出库到货架上 + detailStoreGoods.setState(DetailStoreGoods.STATE_NORMAL); + Goods goods = goodsService.getById(detailStoreGoods.getGoodsId()); + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper().eq("id", goods.getId()); + if (num>=0){ + goodsStoreUpdateWrapper.set("residue_num",num); + goodsUpdateWrapper.set("residue_num",goods.getResidueNum()==null?detailStoreGoods.getGoodsNum():goods.getResidueNum()+detailStoreGoods.getGoodsNum()); + }else { + goodsStoreUpdateWrapper.set("residue_num",0L); + goodsUpdateWrapper.set("residue_num",goods.getResidueNum()==null?goodsStore.getResidueNum():goods.getResidueNum()+goodsStore.getResidueNum()); + detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); + } + goodsService.update(goodsUpdateWrapper); + } + goodsStoreService.update(goodsStoreUpdateWrapper); + super.save(detailStoreGoods); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/EmployeeServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/EmployeeServiceImpl.java new file mode 100644 index 0000000..d445323 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/EmployeeServiceImpl.java @@ -0,0 +1,250 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Dept; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.entity.query.QueryDept; +import com.shanzhu.market.entity.query.QueryEditPwd; +import com.shanzhu.market.entity.query.QueryEmp; +import com.shanzhu.market.entity.vo.DetailEmpVo; +import com.shanzhu.market.entity.vo.EditEmpVo; +import com.shanzhu.market.entity.vo.InformationVo; +import com.shanzhu.market.mapper.EmployeeMapper; +import com.shanzhu.market.service.IDeptService; +import com.shanzhu.market.service.IEmployeeService; +import com.shanzhu.market.service.IRoleService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Service +public class EmployeeServiceImpl extends ServiceImpl implements IEmployeeService { + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IDeptService deptService; + + @Resource + private IRoleService roleService; + + @Override + public void edit_pwd(QueryEditPwd editPwd, String token) { + //获取缓存中的登录员工信息 + String str = redisTemplateService.getCacheObject(token); + Employee employee = JSONObject.parseObject(str, Employee.class); + if (employee.getId() == 1L) { + throw new BusinessException("该账户不能被修改"); + } + //比对用户名是否一致 + if (!employee.getUsername().equals(editPwd.getUsername())) { + //不一致 + throw new BusinessException("没有权限修改其他人的密码"); + } + //比对旧密码是否输入正确 + if (!employee.getPassword().equals(editPwd.getOldPwd())) { + throw new BusinessException("原密码输入有误"); + } + //比对新密码和旧密码是否一致 + if (editPwd.getOldPwd().equals(editPwd.getNewPwd())) { + throw new BusinessException("新密码和旧密码一致"); + } + UpdateWrapper wrapper = new UpdateWrapper().set("password", editPwd.getNewPwd()) + .eq("phone", editPwd.getUsername()); + super.update(wrapper); + } + + @Transactional + @Override + public Page pageByQo(QueryEmp qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.hasText(qo.getUsername()), "phone", qo.getUsername()) + .eq(StringUtils.hasText(qo.getAge()), "age", qo.getAge()) + .like(StringUtils.hasText(qo.getNickName()), "nick_name", qo.getNickName()) + .like(StringUtils.hasText(qo.getAddress()), "address", qo.getAddress()) + .eq(StringUtils.hasText(qo.getSex()), "sex", qo.getSex()) + .ne("id", 1L) + .eq(qo.getDeptId() != null, "deptId", qo.getDeptId()); + super.page(page, wrapper); + //补全部门信息 + List depts = deptService.listByQo(new QueryDept()); + List records = page.getRecords(); + if (records != null) { + for (Employee record : records) { + if (depts != null) { + for (Dept dept : depts) { + if (dept.getId() == record.getDeptId()) { + record.setDeptName(dept.getName()); + break; + } + } + } + } + } + return page; + } + + @Override + public DetailEmpVo detail(Long uid) { + DetailEmpVo vo = new DetailEmpVo(); + //查询员工信息 + Employee employee = super.getById(uid); + BeanUtils.copyProperties(employee, vo); + + //补全角色信息 + Set roleNames = new HashSet<>(); + if (employee.getIsAdmin() == true) { + //查询所有角色 + List list = roleService.list(); + for (Role role : list) { + roleNames.add(role.getName()); + + } + } else { + Set roles = roleService.queryByEid(uid); + for (Role role : roles) { + roleNames.add(role.getName()); + } + } + vo.setRoleNames(roleNames); + return vo; + } + + @Override + public void saveEmp(Employee employee, String token) { + //校验参数是否有误 + if (!StringUtils.hasLength(employee.getPassword())) { + employee.setPassword(Employee.DEFAULT_PWD); + } + if (!StringUtils.hasLength(employee.getUsername())) { + throw new BusinessException("手机号不能为空"); + } + if (!StringUtils.hasLength(employee.getIdCard())) { + throw new BusinessException("身份证号不能为空"); + } + if (employee.getAge() == null) { + employee.setAge(18); + } else if (employee.getAge() < 0 || employee.getAge() > 120) { + throw new BusinessException("年龄值有误"); + } + //校验用户是否已注册 + QueryWrapper wrapper = new QueryWrapper().eq("phone", employee.getUsername()); + Employee one = super.getOne(wrapper); + if (one != null) { + throw new BusinessException("系统中已存在该账户"); + } + employee.setState(Employee.STATE_NORMAL); + if (!StringUtils.hasText(employee.getSex())) { + employee.setSex(Employee.SEX_MEN); + } + if (!StringUtils.hasText(employee.getHeadImg())) { + employee.setHeadImg(Employee.DEFAULT_HEAD_IMG); + } + employee.setCreateTime(new Date()); + employee.setIsAdmin(false); + String nickName = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class).getNickName(); + employee.setCreateby(nickName); + super.save(employee); + } + + @Override + public EditEmpVo editbtn(Long uid) { + EditEmpVo vo = new EditEmpVo(); + Employee employee = super.getById(uid); + BeanUtils.copyProperties(employee, vo); + return vo; + } + + @Override + public void updateEmp(Employee employee, String token) { + if (Employee.STATE_DEL.equals(employee.getState())) { + if (employee.getIsAdmin()) { + throw new BusinessException("不可以给系统管理者办理离职"); + } + } + QueryWrapper wrapper = new QueryWrapper().having("id!=" + employee.getId()) + .eq(StringUtils.hasText(employee.getUsername()), "phone", employee.getUsername()) + .or() + .eq(StringUtils.hasText(employee.getIdCard()), "id_card", employee.getIdCard()); + List list = super.list(wrapper); + if (list != null && list.size() > 0) { + throw new BusinessException("系统已存在相同的用户名或身份证号"); + } + + if (Employee.STATE_DEL.equals(employee.getState())) { + employee.setLeaveTime(new Date()); + } else { + employee.setCreateTime(new Date()); + String nickName = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class).getNickName(); + employee.setCreateby(nickName); + } + super.updateById(employee); + } + + @Override + public void deactivate(Long id) { + Employee employee = super.getById(id); + if (employee.getIsAdmin()) { + throw new BusinessException("不可以给系统管理者办理离职"); + } + if (Employee.STATE_DEL.equals(employee.getState())) { + throw new BusinessException("已是离职状态"); + } + UpdateWrapper wrapper = new UpdateWrapper().set("state", Employee.STATE_DEL).eq("id", id); + super.update(wrapper); + } + + @Transactional + @Override + public void resetPwd(Long eid, String code) { + Employee employee = super.getById(eid); + if (employee.getId() == 1L) { + throw new BusinessException("该账户不可被修改"); + } + if (employee.getIsAdmin()) { + if (code.equals("123456")) { + UpdateWrapper wrapper = new UpdateWrapper().set("password", Employee.DEFAULT_PWD).eq("id", eid); + super.update(wrapper); + } else { + throw new BusinessException("密钥错误"); + } + } else { + if (code.equals("456789")) { + UpdateWrapper wrapper = new UpdateWrapper().set("password", Employee.DEFAULT_PWD).eq("id", eid); + super.update(wrapper); + } else { + throw new BusinessException("密钥错误"); + } + } + redisTemplateService.deleteObject(RedisKeys.LOGIN_USER.join(employee.getUsername())); + redisTemplateService.deleteObject(RedisKeys.DISABLEUSER.join(employee.getUsername())); + redisTemplateService.deleteObject(RedisKeys.LOGIN_ERRO_PWDNUM.join(employee.getUsername())); + } + + @Override + public InformationVo information(String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + DetailEmpVo detail = detail(employee.getId()); + InformationVo vo = new InformationVo(); + BeanUtils.copyProperties(detail, vo); + return vo; + + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/ExchangePointProductsServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/ExchangePointProductsServiceImpl.java new file mode 100644 index 0000000..afd3033 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/ExchangePointProductsServiceImpl.java @@ -0,0 +1,190 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.*; +import com.shanzhu.market.entity.query.QueryExchangePointProductsRecords; +import com.shanzhu.market.mapper.ExchangePointProductsMapper; +import com.shanzhu.market.service.IExchangePointProductsService; +import com.shanzhu.market.service.IGoodsService; +import com.shanzhu.market.service.IMemberService; +import com.shanzhu.market.service.IPointProductsService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class ExchangePointProductsServiceImpl extends ServiceImpl implements IExchangePointProductsService { + + @Resource + private IMemberService memberService; + + @Resource + private IPointProductsService pointProductsService; + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IGoodsService goodsService; + + @Override + public List> queryPointProductBymemberId(Long memberId) { + Member member = memberService.getById(memberId); + + QueryWrapper pointProductsQueryWrapper = new QueryWrapper(); + if (memberId == null) { + pointProductsQueryWrapper.gt("integral", 0L); + } else { + pointProductsQueryWrapper.le("integral", member.getIntegral()); + } + + List list = pointProductsService.list(pointProductsQueryWrapper); + List> mapArrayList = new ArrayList<>(); + for (PointProducts pointProducts : list) { + Map map = new HashMap<>(); + map.put("id", pointProducts.getGoodsId()); + map.put("name", pointProducts.getGoodsName()); + mapArrayList.add(map); + } + return mapArrayList; + } + + @Override + public PointProducts queryPointProductByGoodsId(Long goodsId) { + PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper().eq(goodsId != null, "goods_id", goodsId)); + return pointProducts; + } + + @Override + public void saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + exchangePointProducts.setCn(IdWorker.getIdStr());//生成订单号 + exchangePointProducts.setUpdateby(employee.getNickName()); + exchangePointProducts.setUpdateId(employee.getId()); + exchangePointProducts.setUpdateTime(new Date()); + exchangePointProducts.setState(ExchangePointProducts.STATE_NORMAL); + /*修改会员的积分*/ + Member member = memberService.getById(exchangePointProducts.getMemberId()); + member.setIntegral(member.getIntegral() - exchangePointProducts.getIntegral()); + memberService.updateById(member); + super.save(exchangePointProducts); + + } + + @Override + public List> queryOptionsMemberPhone() { + QueryWrapper wrapper = new QueryWrapper() + .select("member_id") + .eq("state", ExchangePointProducts.STATE_NORMAL) + .groupBy("member_id"); + List list = super.list(wrapper); + List memberIds = new ArrayList<>(); + for (ExchangePointProducts exchangePointProducts : list) { + memberIds.add(exchangePointProducts.getMemberId()); + } + if (memberIds==null || memberIds.size()<=0){ + return null; + } + List members = memberService.listByIds(memberIds); + List> vos = new ArrayList<>(); + for (Member member : members) { + Map map = new HashMap<>(); + map.put("id", member.getId()); + map.put("name", member.getPhone()); + vos.add(map); + } + + return vos; + } + + @Override + public void delExchangePointProducts(String cn) { + UpdateWrapper wrapper = new UpdateWrapper() + .set("state", ExchangePointProducts.STATE_DEL) + .eq("cn", cn); + super.update(wrapper); + } + + @Override + public Page queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper queryWrapper = new QueryWrapper() + .eq("state", ExchangePointProducts.STATE_NORMAL) + .eq(qo.getMemberId() != null, "member_id", qo.getMemberId()) + .ge(StringUtils.hasText(qo.getStartTime()), "update_time", qo.getStartTime()) + .le(StringUtils.hasText(qo.getEndTime()), "update_time", qo.getEndTime()) + .likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn()); + super.page(page, queryWrapper); + for (ExchangePointProducts record : page.getRecords()) { + Member member = memberService.getById(record.getMemberId()); + record.setMemberPhone(member.getPhone()); + Goods goods = goodsService.getById(record.getGoodsId()); + record.setGoodsCoverUrl(goods.getCoverUrl()); + record.setGoodsName(goods.getName()); + } + return page; + } + + @Override + public List> queryOptionsPointProducts() { + QueryWrapper wrapper = new QueryWrapper() + .eq("state", PointProducts.STATE_NORMAL); + List list = pointProductsService.list(wrapper); + List> vos = new ArrayList<>(); + for (PointProducts pointProducts : list) { + Map map = new HashMap<>(); + map.put("id", pointProducts.getGoodsId()); + map.put("name", pointProducts.getGoodsName()); + vos.add(map); + } + return vos; + } + + @Override + public List> queryOptionsMember() { + List> vos = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper() + .groupBy("id") + .eq("state", Member.STATE_NORMAL); + List list = memberService.list(wrapper); + for (Member member : list) { + Map map = new HashMap<>(); + map.put("id", member.getId()); + map.put("name", member.getPhone()); + vos.add(map); + } + return vos; + } + + @Override + public List> queryMemberByGoodsId(Long goodsId) { + List members = new ArrayList<>(); + QueryWrapper memberQueryWrapper = new QueryWrapper(); + memberQueryWrapper.eq("state", Member.STATE_NORMAL); + if (goodsId != null) { + PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper() + .eq("goods_id", goodsId) + .eq("state", PointProducts.STATE_NORMAL)); + memberQueryWrapper.ge("integral", pointProducts.getIntegral()); + } else { + memberQueryWrapper.gt("integral", 0); + } + members = memberService.list(memberQueryWrapper); + List> vos = new ArrayList<>(); + for (Member member : members) { + Map map = new HashMap<>(); + map.put("id", member.getId()); + map.put("name", member.getPhone()); + vos.add(map); + } + return vos; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsCategoryServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsCategoryServiceImpl.java new file mode 100644 index 0000000..45fa256 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsCategoryServiceImpl.java @@ -0,0 +1,116 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.GoodsCategory; +import com.shanzhu.market.entity.query.QueryGoodsCategory; +import com.shanzhu.market.mapper.GoodsCategoryMapper; +import com.shanzhu.market.service.IGoodsCategoryService; +import com.shanzhu.market.service.IGoodsService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class GoodsCategoryServiceImpl extends ServiceImpl implements IGoodsCategoryService { + + @Resource + private IGoodsService goodsService; + + @Override + public void updateGoodsCategory(GoodsCategory goodsCategory) { + QueryWrapper queryWrapper = new QueryWrapper() + .ne("id",goodsCategory.getId()) + .eq("name", goodsCategory.getName()) + .eq("state", goodsCategory.getState()); + GoodsCategory category = super.getOne(queryWrapper); + if (GoodsCategory.STATE_BAN.equals(goodsCategory.getState())) { + //查看是否有上架商品正在使用 + QueryWrapper wrapper = new QueryWrapper().eq("category_id", goodsCategory.getId()).eq("state", Goods.STATE_UP); + List list = goodsService.list(wrapper); + if (list != null && list.size() > 0) { + throw new BusinessException("该分类正在被某个上架商品使用,请解除关系后,再操作"); + } + if (category != null) { + super.removeById(category); + } + } else { + if (category != null) { + throw new BusinessException("该分类已经存在"); + } + } + + super.updateById(goodsCategory); + } + + @Override + public void deactivate(Long cid) { + //查看是否有上架商品正在使用 + QueryWrapper wrapper = new QueryWrapper() + .eq("category_id", cid) + .eq("state", Goods.STATE_UP); + List list = goodsService.list(wrapper); + if (list != null && list.size() > 0) { + throw new BusinessException("该分类正在被某个上架商品使用,请解除关系后,再操作"); + } + /*查看删除中是否有*/ + GoodsCategory goodsCategory = super.getById(cid); + QueryWrapper queryWrapper = new QueryWrapper() + .ne("id",cid) + .eq("name", goodsCategory.getName()) + .eq("state", GoodsCategory.STATE_BAN); + GoodsCategory one = super.getOne(queryWrapper); + if (one != null) { + super.remove(new QueryWrapper() + .eq("name", goodsCategory.getName()) + .eq("state", GoodsCategory.STATE_BAN)); + } + super.update(new UpdateWrapper().eq("id", cid).set("state", GoodsCategory.STATE_BAN)); + } + + @Override + public Page queryPageByQo(QueryGoodsCategory qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState()); + return super.page(page, wrapper); + } + + @Override + public void saveGoodsCategory(GoodsCategory category) { + //判断数据库是否保存过这个分类信息 + QueryWrapper wrapper = new QueryWrapper() + .eq(StringUtils.hasText(category.getName()), "name", category.getName()) + .eq("state", GoodsCategory.STATE_NORMAL); + GoodsCategory category1 = super.getOne(wrapper); + if (category1 != null) { + throw new BusinessException("该分类已被创建"); + } + category.setState(GoodsCategory.STATE_NORMAL); + super.save(category); + + } + + @Override + public List> getNormalCategoryAll() { + List> list = new ArrayList<>(); + List categories = super.list(new QueryWrapper().eq("state", GoodsCategory.STATE_NORMAL)); + for (GoodsCategory category : categories) { + Map map = new HashMap<>(); + map.put("id", category.getId()); + map.put("name", category.getName()); + list.add(map); + } + return list; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsServiceImpl.java new file mode 100644 index 0000000..ddcc554 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsServiceImpl.java @@ -0,0 +1,502 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.*; +import com.shanzhu.market.entity.query.*; +import com.shanzhu.market.entity.vo.*; +import com.shanzhu.market.mapper.GoodsMapper; +import com.shanzhu.market.service.*; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class GoodsServiceImpl extends ServiceImpl implements IGoodsService { + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IGoodsCategoryService goodsCategoryService; + + @Resource + private IStoreService storeService; + + @Resource + private IDetailStoreGoodsService detailStoreGoodsService; + + @Resource + private IGoodsStoreService goodsStoreService; + + @Resource + private GoodsMapper goodsMapper; + + @Override + public Page queryPageByQo(QueryGoods qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + ArrayList volists = new ArrayList<>(); + Page goodsPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper() + .eq(qo.getId() != null, "id", qo.getId()) + .eq(qo.getSellPrice() != null, "sell_price", qo.getSellPrice()) + .like(StringUtils.hasText(qo.getName()), "name", qo.getName()) + .eq(qo.getCategoryId() != null, "category_id", qo.getCategoryId()) + .eq(StringUtils.hasText(qo.getState()), "state", qo.getState()) + .ge(StringUtils.hasText(qo.getOperateStartTime()), "update_time", qo.getOperateStartTime()) + .le(StringUtils.hasText(qo.getOperateEndTime()), "update_time", qo.getOperateEndTime()); + super.page(goodsPage, wrapper); + for (Goods record : goodsPage.getRecords()) { + GoodsListVo vo = new GoodsListVo(); + BeanUtils.copyProperties(record, vo); + Long residueNum=storeService.getResidueNumByGoodsId(record.getId()); + vo.setResidueStoreNum(residueNum); + volists.add(vo); + } + page.setRecords(volists); + page.setTotal(goodsPage.getTotal()); + return page; + } + + @Override + public void saveGoods(Goods goods, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + goods.setState(Goods.STATE_UP); + goods.setCreateby(employee.getNickName()); + goods.setUpdateby(employee.getNickName()); + goods.setCreateTime(new Date()); + goods.setUpdateTime(new Date()); + if (goods.getCategoryId() != null) { + /*从缓存中获取分类的信息*/ + if (redisTemplateService.hasKey(RedisKeys.GOODS_CATEGORY.join())) { + Map categoryCache = redisTemplateService.getCacheMap(RedisKeys.GOODS_CATEGORY.join()); + GoodsCategory category = (GoodsCategory) categoryCache.get(goods.getCategoryId().toString()); + if (category != null) { + goods.setCategoryName(category.getName()); + } + } else { + GoodsCategory category = goodsCategoryService.getById(goods.getCategoryId()); + if (category != null) { + goods.setCategoryName(category.getName()); + } + } + } + super.save(goods); + } + + @Transactional + @Override + public void upOrdown(Long gid, String state,String token) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("id", gid); + if (Goods.STATE_UP.equals(state)) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + wrapper.set("state", Goods.STATE_DOWN); + Goods goods = super.getById(gid); + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper().eq("goods_id", gid); + List list = goodsStoreService.list(goodsStoreQueryWrapper); + for (GoodsStore goodsStore : list) { + DetailStoreGoods detailStoreGoods = new DetailStoreGoods(); + detailStoreGoods.setCreateid(employee.getId()); + detailStoreGoods.setCreateby(employee.getNickName()); + detailStoreGoods.setCreateTime(new Date()); + detailStoreGoods.setGoodsId(gid); + detailStoreGoods.setGoodsName(goods.getName()); + detailStoreGoods.setType(DetailStoreGoods.TYPE_IN); + detailStoreGoods.setState1(DetailStoreGoods.STATE1_UNTREATED); + detailStoreGoods.setState(DetailStoreGoods.STATE_DOWN); + detailStoreGoods.setCn(IdWorker.getIdStr()); + detailStoreGoods.setInfo(goods.getName()+"下架处理"); + detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); + detailStoreGoods.setUntreatedNum(goodsStore.getResidueNum()); + detailStoreGoods.setStoreId(goodsStore.getStoreId()); + detailStoreGoodsService.save(detailStoreGoods); + } + } else { + wrapper.set("residue_num",0); + wrapper.set("state", Goods.STATE_UP); + QueryWrapper queryWrapper = new QueryWrapper().eq("goods_id", gid) + .eq("state", DetailStoreGoods.STATE_DOWN) + .eq("state1", DetailStoreGoods.STATE1_UNTREATED); + detailStoreGoodsService.remove(queryWrapper); + } + super.update(wrapper); + + } + + @Override + public void updateGoods(Goods goods, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + goods.setUpdateby(employee.getNickName()); + goods.setUpdateTime(new Date()); + if (goods.getCategoryId() != null) { + /*从缓存中获取分类的信息*/ + if (redisTemplateService.hasKey(RedisKeys.GOODS_CATEGORY.join())) { + Map categoryCache = redisTemplateService.getCacheMap(RedisKeys.GOODS_CATEGORY.join()); + GoodsCategory category = (GoodsCategory) categoryCache.get(goods.getCategoryId().toString()); + if (category != null) { + goods.setCategoryName(category.getName()); + } + } else { + GoodsCategory category = goodsCategoryService.getById(goods.getCategoryId()); + if (category != null) { + goods.setCategoryName(category.getName()); + } + } + } + super.updateById(goods); + } + + @Override + public List> selected_goodsAll() { + QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP); + List list = super.list(wrapper); + if (list==null&&list.size()==0){ + return null; + } + List> listVo = new ArrayList<>(); + for (Goods goods : list) { + Map map = new HashMap<>(); + map.put("id",goods.getId()); + map.put("name",goods.getName()); + listVo.add(map); + } + + return listVo; + } + + @Override + public List> selected_storeAll() { + List> list = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper().eq("state", Store.STATE_NORMAL); + List list1 = storeService.list(wrapper); + if (list1!=null &&list1.size()>0){ + for (Store store : list1) { + Map map = new HashMap<>(); + map.put("id",store.getId()); + map.put("name",store.getName()); + list.add(map); + } + } + return list; + } + + @Override + public void returnGoods(DetailStoreGoods detailStoreGoods, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + Goods goods = super.getById(detailStoreGoods.getGoodsId()); + + /*补全入库订单信息*/ + detailStoreGoods.setCn(IdWorker.getIdStr()); + detailStoreGoods.setCreateby(employee.getNickName()); + detailStoreGoods.setCreateid(employee.getId()); + detailStoreGoods.setType(DetailStoreGoods.TYPE_IN); + if (DetailStoreGoods.STATE_EXPIRY.equals(detailStoreGoods.getState())){ + //如果是过期,将入库订单的state1修改成2:待处理的状态 + detailStoreGoods.setState1(DetailStoreGoods.STATE1_UNTREATED); + }else { + detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); + } + + + /*获取仓库的信息*/ + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + GoodsStore goodsStore = goodsStoreService.getOne(goodsStoreQueryWrapper); + if (goodsStore==null){ + goodsStore = new GoodsStore(); + goodsStore.setGoodsId(detailStoreGoods.getGoodsId()); + goodsStore.setStoreId(detailStoreGoods.getStoreId()); + Store store = storeService.getById(detailStoreGoods.getStoreId()); + goodsStore.setStoreName(store.getName()); + goodsStore.setInNum(0L); + goodsStore.setResidueNum(0L); + goodsStoreService.save(goodsStore); + } + long num = goods.getResidueNum() - detailStoreGoods.getGoodsNum(); + if (num>=0){ + //货架还有商品数量 + /*更改商品信息*/ + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() + .set("residue_num", num) + .eq("id", detailStoreGoods.getGoodsId()); + super.update(goodsUpdateWrapper); + /*更改商品库存信息*/ + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .set("residue_num", goodsStore.getResidueNum() + detailStoreGoods.getGoodsNum()) + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + goodsStoreService.update(goodsStoreUpdateWrapper); + detailStoreGoods.setUntreatedNum(detailStoreGoods.getGoodsNum()); + + }else { + //货架没有商品数量 + /*更改商品信息*/ + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() + .set("residue_num", 0) + .eq("id", detailStoreGoods.getGoodsId()); + super.update(goodsUpdateWrapper); + /*更改商品库存信息*/ + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .set("residue_num", goodsStore.getResidueNum() + goods.getResidueNum()) + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + goodsStoreService.update(goodsStoreUpdateWrapper); + detailStoreGoods.setGoodsNum(goods.getResidueNum()); + detailStoreGoods.setUntreatedNum(goods.getResidueNum()); + } + detailStoreGoodsService.save(detailStoreGoods); + } + + @Override + public Page queryPageGoodsStore(QueryGoodsStore qo) { + Page page = new Page<>(qo.getCurrentPage(),qo.getPageSize()); + Page goodsPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP) + .like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + super.page(goodsPage,wrapper); + if (goodsPage.getTotal()<=0) { + page.setRecords(new ArrayList<>()); + page.setTotal(0); + return page; + } + List list = new ArrayList<>(); + for (Goods record : goodsPage.getRecords()) { + GoodsStoreVo vo = new GoodsStoreVo(); + BeanUtils.copyProperties(record,vo); + list.add(vo); + } + page.setTotal(goodsPage.getTotal()); + page.setRecords(list); + return page; + } + + @Override + public GoodsStoreVo queryGoodsStoreById(Long id) { + GoodsStoreVo vo = new GoodsStoreVo(); + Goods goods = super.getById(id); + BeanUtils.copyProperties(goods,vo); + return vo; + } + + @Override + public void updateInventory(GoodsStoreVo vo) { + if (vo.getInventory()==null){ + vo.setInventory(0L); + } + if(vo.getShelves()==null){ + vo.setShelves(0L); + } + UpdateWrapper updateWrapper = new UpdateWrapper() + .set("inventory",vo.getInventory()) + .set("shelves",vo.getShelves()) + .eq("id",vo.getId()); + super.update(updateWrapper); + + } + + @Override + public Page queryPageNoticeIn(QueryNoticeIn qo) { + Page noticeInPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + List list = new ArrayList<>(); + int start=(qo.getCurrentPage()-1)*qo.getPageSize(); + Map map = new HashMap<>(); + map.put("start",start); + map.put("size",qo.getPageSize()); + if (StringUtils.hasLength(qo.getName())){ + map.put("name",qo.getName()); + } + int totalCount=goodsMapper.getNoticeInTotalCount(map); + list=goodsMapper.getNoticePageList(map); + noticeInPage.setTotal(totalCount); + noticeInPage.setRecords(list); + return noticeInPage; + } + + @Override + public Page queryPageNoticeOut_shelves(QueryNoticeOut qo) { + Page noticeOutPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + List list = new ArrayList<>(); + int start=(qo.getCurrentPage()-1)*qo.getPageSize(); + Map map = new HashMap<>(); + map.put("start",start); + map.put("size",qo.getPageSize()); + if (StringUtils.hasLength(qo.getName())){ + map.put("name",qo.getName()); + } + int totalCount=goodsMapper.getNoticeOutShelvesTotalCount(map); + list=goodsMapper.getNoticeShelvesPageList(map); + noticeOutPage.setTotal(totalCount); + noticeOutPage.setRecords(list); + return noticeOutPage; + } + + @Override + public void saveOut_shelves(DetailStoreGoods detailStoreGoods,String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + QueryWrapper detailStoreGoodsQueryWrapper = new QueryWrapper().eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + GoodsStore goodsStore = goodsStoreService.getOne(detailStoreGoodsQueryWrapper); + if (goodsStore==null || goodsStore.getResidueNum()==null ||goodsStore.getResidueNum()==0){ + throw new BusinessException("出库失败,库存中没有该商品的库存"); + } + /*补全出库单的信息*/ + detailStoreGoods.setCn(IdWorker.getIdStr()); + detailStoreGoods.setCreateby(employee.getNickName()); + detailStoreGoods.setCreateid(employee.getId()); + detailStoreGoods.setType(DetailStoreGoods.TYPE_OUT); + detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); + long num = goodsStore.getResidueNum() - detailStoreGoods.getGoodsNum(); + Goods goods = super.getById(detailStoreGoods.getGoodsId()); + if (num>=0){ + /*修改货架商品数量*/ + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() + .set("residue_num", goods.getResidueNum() == null ? detailStoreGoods.getGoodsNum() : goods.getResidueNum() + detailStoreGoods.getGoodsNum()) + .eq("id",detailStoreGoods.getGoodsId()); + super.update(goodsUpdateWrapper); + /*修改商品库存数量*/ + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .set("residue_num", goodsStore.getResidueNum() - detailStoreGoods.getGoodsNum()) + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + goodsStoreService.update(goodsStoreUpdateWrapper); + /*添加出库记录*/ + detailStoreGoodsService.save(detailStoreGoods); + }else { + /*修改货架商品数量*/ + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() + .set("residue_num", goods.getResidueNum() == null ? goodsStore.getResidueNum() : goods.getResidueNum() + goodsStore.getResidueNum()) + .eq("id",detailStoreGoods.getGoodsId()); + super.update(goodsUpdateWrapper); + /*修改商品库存数量*/ + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .set("residue_num",0L) + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + goodsStoreService.update(goodsStoreUpdateWrapper); + /*添加出库记录*/ + detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); + detailStoreGoodsService.save(detailStoreGoods); + } + + + } + + @Override + public SalesStatisticsVo queryPageStatisticSaleByQo(QueryStatisticSale qo) { + Long total=goodsMapper.queryPageStatisticSaleByQo(qo.getName()); + SalesStatisticsVo vo = new SalesStatisticsVo(); + vo.setTotal(total); + QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP) + .like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + super.page(page,wrapper); + Page saleGoodsVoPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + saleGoodsVoPage.setTotal(page.getTotal()); + List saleGoodsVos = new ArrayList<>(); + for (Goods record : page.getRecords()) { + SaleGoodsVo goodsVo = new SaleGoodsVo(); + goodsVo.setGoodsId(record.getId()); + goodsVo.setGoodsName(record.getName()); + goodsVo.setSalesVolume(record.getSalesVolume()); + goodsVo.setPercentage(total); + goodsVo.setCoverUrl(record.getCoverUrl()); + saleGoodsVos.add(goodsVo); + } + saleGoodsVoPage.setRecords(saleGoodsVos); + vo.setVos(saleGoodsVoPage); + return vo; + } + + @Override + public Page queryPageNoticeOut_untreated(QueryNoticeOut qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + List vos = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper().eq("state1", DetailStoreGoods.STATE1_UNTREATED); + queryWrapper.eq(StringUtils.hasText(qo.getState()),"state",qo.getState()); + queryWrapper.like(StringUtils.hasText(qo.getName()),"goods_name",qo.getName()); + queryWrapper.eq("type",DetailStoreGoods.TYPE_IN); + queryWrapper.orderByDesc("create_time"); + List list = detailStoreGoodsService.list(queryWrapper); + for (DetailStoreGoods detailStoreGoods : list) { + NoticeInNotNormalVo vo = new NoticeInNotNormalVo(); + vo.setCn(detailStoreGoods.getCn()); + vo.setCreateTime(detailStoreGoods.getCreateTime()); + vo.setGoodsId(detailStoreGoods.getGoodsId()); + vo.setGoodsName(detailStoreGoods.getGoodsName()); + vo.setUntreatedNum(detailStoreGoods.getUntreatedNum()); + vo.setState(detailStoreGoods.getState()); + vo.setStoreId(detailStoreGoods.getStoreId()); + Store store = storeService.getById(detailStoreGoods.getStoreId()); + vo.setStoreName(store.getName()); + Goods goods = super.getById(detailStoreGoods.getGoodsId()); + vo.setCoverUrl(goods.getCoverUrl()); + vos.add(vo); + + } + page.setRecords(vos); + return page; + } + + @Override + public void resolveOutUntreatedForm(NoticeInNotNormalVo vo, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + QueryWrapper queryWrapper = new QueryWrapper() + .eq("cn", vo.getCn()) + .eq("state1", DetailStoreGoods.STATE1_UNTREATED); + DetailStoreGoods detailStoreGoods = detailStoreGoodsService.getOne(queryWrapper); + if (detailStoreGoods==null){ + throw new BusinessException("该订单已被处理"); + } + + long num = detailStoreGoods.getUntreatedNum() - vo.getUntreatedNum(); + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() + .eq("goods_id", vo.getGoodsId()) + .eq("store_id", vo.getStoreId()); + GoodsStore goodsStore = goodsStoreService.getOne(goodsStoreQueryWrapper); + if (num>0){ + //未处理完毕 + UpdateWrapper updateWrapper = new UpdateWrapper() + .eq("cn", detailStoreGoods.getCn()) + .set("untreated_num",num); + detailStoreGoodsService.update(updateWrapper); + //改变库存 + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .eq("goods_id", vo.getGoodsId()) + .eq("store_id", vo.getStoreId()) + .set("residue_num",goodsStore.getResidueNum()-vo.getUntreatedNum()); + goodsStoreService.update(goodsStoreUpdateWrapper); + }else { + //处理完毕 + UpdateWrapper updateWrapper = new UpdateWrapper() + .eq("cn", detailStoreGoods.getCn()) + .set("untreated_num",0L) + .set("state1",DetailStoreGoods.STATE1_NORMAL) + .set("createid",employee.getId()) + .set("createby",employee.getNickName()) + .set("create_time",new Date()) + .set("type",DetailStoreGoods.TYPE_OUT); + detailStoreGoodsService.update(updateWrapper); + //改变库存 + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .eq("goods_id", vo.getGoodsId()) + .eq("store_id", vo.getStoreId()) + .set("residue_num",0L); + goodsStoreService.update(goodsStoreUpdateWrapper); + } + + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsStoreServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsStoreServiceImpl.java new file mode 100644 index 0000000..3af8f04 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsStoreServiceImpl.java @@ -0,0 +1,144 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.GoodsStore; +import com.shanzhu.market.entity.domain.Store; +import com.shanzhu.market.entity.query.QueryDetailStorageSituation; +import com.shanzhu.market.entity.query.QueryStorageSituation; +import com.shanzhu.market.entity.vo.DetailStorageSituationVo; +import com.shanzhu.market.entity.vo.StorageSituationVo; +import com.shanzhu.market.mapper.GoodsStoreMapper; +import com.shanzhu.market.service.IGoodsService; +import com.shanzhu.market.service.IGoodsStoreService; +import com.shanzhu.market.service.IStoreService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +@Transactional +public class GoodsStoreServiceImpl extends ServiceImpl implements IGoodsStoreService { + + @Resource + private GoodsStoreMapper goodsStoreMapper; + + @Resource + private IGoodsService goodsService; + + @Resource + private IStoreService storeService; + + @Override + public Long storeUsed(Long id) { + return goodsStoreMapper.storeUsed(id); + } + + @Override + public Long getResidueNumByGoodsId(Long id) { + return goodsStoreMapper.getResidueNumByGoodsId(id); + } + + @Override + public void goodsInStore(Long goodsId, Long goodsNum, Long storeId) { + QueryWrapper wrapper = new QueryWrapper().eq("goods_id", goodsId).eq("store_id", storeId); + GoodsStore goodsStore1 = super.getOne(wrapper); + if (goodsStore1 != null) { + goodsStoreMapper.goodsInStore(goodsId, goodsNum, storeId); + } else { + GoodsStore goodsStore = new GoodsStore(); + goodsStore.setGoodsId(goodsId); + goodsStore.setInNum(goodsNum); + goodsStore.setResidueNum(goodsNum); + goodsStore.setStoreId(storeId); + Store one = storeService.getById(storeId); + goodsStore.setStoreName(one.getName()); + super.save(goodsStore); + } + } + + @Override + public void goodsOutStore(Long goodsId, Long goodsNum, Long storeId) { + goodsStoreMapper.goodsOutStore(goodsId, goodsNum, storeId); + } + + @Override + public Map queryPageStorageSituationByQo(QueryStorageSituation qo) { + HashMap map = new HashMap<>(); + Long totalStoreNum=goodsStoreMapper.totalStoreNum(); + map.put("totalStoreNum",totalStoreNum!=null?totalStoreNum:0L); + Page goodsStorePage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper().select("store_id,store_name,SUM(residue_num) residue_num") + .like(StringUtils.hasText(qo.getName()), "store_name", qo.getName()) + .groupBy("store_id", "store_name"); + super.page(goodsStorePage,goodsStoreQueryWrapper); + Page situationVoPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + List vos = new ArrayList<>(); + for (GoodsStore record : goodsStorePage.getRecords()) { + StorageSituationVo vo = new StorageSituationVo(); + vo.setStoreId(record.getStoreId()); + vo.setStoreName(record.getStoreName()); + vo.setResidueNum(record.getResidueNum()); + vos.add(vo); + } + situationVoPage.setRecords(vos); + situationVoPage.setTotal(goodsStorePage.getTotal()); + map.put("page",situationVoPage); + return map; + } + + @Override + public Map queryStoreGoodsByStoreId(QueryDetailStorageSituation qo) { + Map map = new HashMap<>(); + Long totalStoreNum1=goodsStoreMapper.getTotalStoreNum1(qo.getStoreId()); + map.put("totalStoreNum1",totalStoreNum1);//该仓库的存储量 + + QueryWrapper wrapper = new QueryWrapper() + .gt("residue_num",0) + .eq("store_id", qo.getStoreId()); + List list = super.list(wrapper); + Set goodsIds = new HashSet<>(); + for (GoodsStore goodsStore : list) { + goodsIds.add(goodsStore.getGoodsId()); + } + if (goodsIds.size()<=0){ + throw new BusinessException("该仓库没有存放任何的商品"); + } + List goodsList = goodsService.listByIds(goodsIds); + List> optionsStoreGoods = new ArrayList<>(); + for (Goods goods : goodsList) { + Map options = new HashMap<>(); + options.put("id",goods.getId()); + options.put("name",goods.getName()); + optionsStoreGoods.add(options); + } + map.put("optionsStoreGoods",optionsStoreGoods);//选择框 + Page goodsStorePage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() + .eq("store_id",qo.getStoreId()) + .gt("residue_num",0) + .eq(qo.getId()!=null,"goods_id", qo.getId()); + super.page(goodsStorePage,goodsStoreQueryWrapper); + + Page voPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + voPage.setTotal(goodsStorePage.getTotal()); + List detailStorageSituationVoList = new ArrayList<>(); + for (GoodsStore record : goodsStorePage.getRecords()) { + DetailStorageSituationVo vo = new DetailStorageSituationVo(); + vo.setGoodsId(record.getGoodsId()); + vo.setResidueNum(record.getResidueNum()); + vo.setPercentage(totalStoreNum1); + vo.setGoodsName(goodsService.getById(record.getGoodsId()).getName()); + detailStorageSituationVoList.add(vo); + } + voPage.setRecords(detailStorageSituationVoList); + map.put("vos",voPage);//表格数据 + return map; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/LoginServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..7425e66 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/LoginServiceImpl.java @@ -0,0 +1,142 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.mapper.EmployeeMapper; +import com.shanzhu.market.service.ILoginService; +import com.shanzhu.market.service.IMenuService; +import com.shanzhu.market.service.IRoleService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class LoginServiceImpl extends ServiceImpl implements ILoginService { + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IRoleService roleService; + + @Resource + private IMenuService menuService; + + @Override + public Map login(String username, String password) { + //根据电话号码查询用户 + QueryWrapper wrapper = new QueryWrapper().eq("phone", username).eq("state",Employee.STATE_NORMAL); + Employee employee = super.getOne(wrapper); + if (employee == null) { + throw new BusinessException("请先注册..."); + } + //判断账户是否被冻结 + RedisKeys disableuser = RedisKeys.DISABLEUSER; + + if (redisTemplateService.hasKey(disableuser.join(username))){ + throw new BusinessException("该账户已被冻结,请"+disableuser.getTimeout()+"小时后再来登录"); + } + //比对密码是否一致 + if (!password.equals(employee.getPassword())) { + //密码错误 + RedisKeys loginErroPwdnum = RedisKeys.LOGIN_ERRO_PWDNUM; + int errornum=redisTemplateService.hasKey(loginErroPwdnum.join(username))? (Integer) redisTemplateService.getCacheObject(loginErroPwdnum.join(username))+1:1; + if (errornum==6){ + redisTemplateService.setCacheObject(disableuser.join(username),true,disableuser.getTimeout(),disableuser.getTimeUnit()); + redisTemplateService.deleteObject(loginErroPwdnum.join(username)); + throw new BusinessException("账户被冻结6小时"); + }else{ + redisTemplateService.setCacheObject(loginErroPwdnum.join(username),errornum,loginErroPwdnum.getTimeout(),loginErroPwdnum.getTimeUnit()); + throw new BusinessException("账号或密码错误,错误剩余"+(6-errornum)+"次"); + } + } + //登录成功 + //删除密码错误次数缓存 + redisTemplateService.deleteObject(RedisKeys.LOGIN_ERRO_PWDNUM.join(username)); + if (employee.getIsAdmin()){ + //超级管理员处理方式 + List menus=menuService.findAll(); + employee.setMenus(menus); + }else { + //非超级管理员处理 + Set roles=roleService.queryByEid(employee.getId()); + if (roles!=null&&roles.size()!=0){ + employee.setRoles(roles); + Set rids=new HashSet<>(); + for (Role role : roles) { + rids.add(role.getId()); + } + List menus=menuService.queryByRids(rids); + employee.setMenus(menus); + } + } + //生成token的key和value + String key= RedisKeys.LOGIN_USER.join(username); + String value= JSONObject.toJSONString(employee); + //存入redis缓存中 + redisTemplateService.setCacheObject(key,value,RedisKeys.LOGIN_USER.getTimeout(),RedisKeys.LOGIN_USER.getTimeUnit()); + Map map = new HashMap(); + map.put("token",key); + map.put("employee",employee); + return map; + } + + @Override + public void exit(String token) { + if (redisTemplateService.hasKey(token)){ + String str = redisTemplateService.getCacheObject(token); + Employee employee = JSONObject.parseObject(str, Employee.class); + String login_error_pwdnum = RedisKeys.LOGIN_ERRO_PWDNUM.join(employee.getUsername()); + redisTemplateService.deleteObject(token); + redisTemplateService.deleteObject(login_error_pwdnum); + } + } + + @Override + public void logout(String token, String content) { + if ("本人确定注销".equals(content)){ + //判断是否是系统管理员 + String str = redisTemplateService.getCacheObject(token); + Employee employee = JSONObject.parseObject(str, Employee.class); + if (employee.getIsAdmin()){ + throw new BusinessException("系统管理员账户不可被注销"); + } + //清除角色员工关系 + roleService.clearEmpPermission(employee.getId()); + //清除缓存数据 + redisTemplateService.deleteObject(token); + super.remove(new QueryWrapper().eq("phone",employee.getUsername())); + + }else { + throw new BusinessException("内容输入有误"); + } + } + + @Override + public List empMenu(String token) { + String str = redisTemplateService.getCacheObject(token); + Employee employee = JSONObject.parseObject(str, Employee.class); + return employee.getMenus(); + } + + @Override + public Map checkedToken(String token) { + Map map = new HashMap<>(); + if (redisTemplateService.hasKey(token)){ + map.put("employee",JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class)); + }else { + map.put("employee",null); + } + map.put("token",token); + + return map; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MemberServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MemberServiceImpl.java new file mode 100644 index 0000000..77b4888 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MemberServiceImpl.java @@ -0,0 +1,79 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Member; +import com.shanzhu.market.entity.query.QueryMember; +import com.shanzhu.market.mapper.MemberMapper; +import com.shanzhu.market.service.IMemberService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +@Service +public class MemberServiceImpl extends ServiceImpl implements IMemberService { + + @Override + public Page queryPageByQo(QueryMember qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.hasText(qo.getPhone()), "phone", qo.getPhone()); + wrapper.like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState()); + super.page(page, wrapper); + return page; + } + + @Override + public void delMember(Long id) { + UpdateWrapper wrapper = new UpdateWrapper() + .set("state", Member.STATE_BAN) + .set("integral", 0L) + .eq("id", id); + super.update(wrapper); + } + + @Override + public void saveMember(Member member) { + QueryWrapper wrapper = new QueryWrapper().eq("phone", member.getPhone()).eq("state", Member.STATE_NORMAL); + Member one = super.getOne(wrapper); + if (one != null) { + throw new BusinessException("该用户已注册过"); + } + member.setPassword(Member.DEFAULT_PWD); + member.setState(Member.STATE_NORMAL); + member.setIntegral(0L); + super.save(member); + } + + @Override + public Member queryMemberById(Long id) { + return super.getById(id); + } + + @Override + public void updateMember(Member member) { + if (Member.STATE_NORMAL.equals(member.getState())) { + QueryWrapper wrapper = new QueryWrapper().eq("phone", member.getPhone()) + .ne("id",member.getId()) + .eq("state", Member.STATE_NORMAL); + Member one = super.getOne(wrapper); + if (one != null) { + throw new BusinessException("已被录入"); + } + } + super.updateById(member); + } + + @Override + public Member queryMemberByPhone(String phone) { + QueryWrapper wrapper = new QueryWrapper().eq("phone", phone).eq("state", Member.STATE_NORMAL); + Member one = super.getOne(wrapper); + if (one==null){ + throw new BusinessException("该会员不存在"); + } + return one; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MenuServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..d4945c2 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MenuServiceImpl.java @@ -0,0 +1,168 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.query.MenuQuery; +import com.shanzhu.market.mapper.MenuMapper; +import com.shanzhu.market.service.IMenuService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class MenuServiceImpl extends ServiceImpl implements IMenuService { + + @Resource + private MenuMapper menuMapper; + + @Override + public List findAll() { + + //查询目录菜单 + // select * from t_menu where type='0' and state='0' + QueryWrapper wrapper1 = new QueryWrapper().eq("type", Menu.TYPE_CATALOGUE).eq("state", Menu.STATE_NORMAL); + List catalogs = super.list(wrapper1); + if (catalogs.isEmpty()) { + return null; + } + //得到目录下的菜单信息 + for (Menu catalog : catalogs) { + //select * from t_menu where type='1' and parent_id=#{id} and state='0' + QueryWrapper wrapper2 = new QueryWrapper().eq("type", Menu.TYPE_MENU).eq("state", Menu.STATE_NORMAL) + .eq("parent_id", catalog.getId()); + List menus = super.list(wrapper2); + //获取菜单下的按钮 + for (Menu menu : menus) { + //select * from t_menu where type='2' and parent_id=#{id} and state='0' + QueryWrapper wrapper3 = new QueryWrapper().eq("type", Menu.TYPE_BUTTON).eq("state", Menu.STATE_NORMAL) + .eq("parent_id", menu.getId()); + List buttons = super.list(wrapper3); + if (!buttons.isEmpty()) { + menu.setChildren(buttons); + } + } + catalog.setChildren(menus); + } + return catalogs; + } + + @Override + public List queryByRids(Set rids) { + List result = menuMapper.queryByRids(rids); + if (result.isEmpty()) { + return null; + } + //目录 + Set catalogs = new HashSet<>(); + //菜单 + Set menus = new HashSet<>(); + //按钮 + Set buttons = new HashSet<>(); + + Iterator iterator1 = result.iterator(); + while (iterator1.hasNext()) { + Menu item = iterator1.next(); + switch (item.getType()) { + case Menu.TYPE_CATALOGUE: + catalogs.add(item); + break; + case Menu.TYPE_MENU: + menus.add(item); + break; + case Menu.TYPE_BUTTON: + buttons.add(item); + break; + } + iterator1.remove(); + } + + for (Menu catalog : catalogs) { + catalog.setChildren(new ArrayList<>()); + for (Menu menu : menus) { + menu.setChildren(new ArrayList<>()); + for (Menu button : buttons) { + //将按钮分配到对应的菜单下 + if (button.getParentId() == menu.getId()) { + menu.getChildren().add(button); + } + } + //将菜单分配到对应的目录下 + if (menu.getParentId() == catalog.getId()) { + catalog.getChildren().add(menu); + } + } + + } + List catalogues = new ArrayList<>(); + //去重 + for (Menu catalog : catalogs) { + catalogues.add(catalog); + } + return catalogues; + } + + @Override + public Page queryPageByQo(MenuQuery qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + //查询目录 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("type", Menu.TYPE_CATALOGUE); + wrapper.like(StringUtils.hasText(qo.getName()), "label", qo.getName()); + + Page page1 = super.page(page, wrapper); + //补全目录的子集 + List catalogs = page1.getRecords(); + if (catalogs == null || catalogs.isEmpty()) { + return page1; + } + /*补全目录下的菜单*/ + for (Menu catalog : catalogs) { + QueryWrapper wrapper_menu = new QueryWrapper() + .eq("type", Menu.TYPE_MENU) + .eq("parent_id", catalog.getId()); + List menus = super.list(wrapper_menu); + if (menus == null || menus.isEmpty()) { + continue; + } + /*补全菜单下的按钮*/ + for (Menu menu : menus) { + QueryWrapper wrapper_button = new QueryWrapper() + .eq("type", Menu.TYPE_BUTTON) + .eq("parent_id", menu.getId()); + List buttons = super.list(wrapper_button); + if (buttons == null || buttons.isEmpty()) { + continue; + } + menu.setChildren(buttons); + } + catalog.setChildren(menus); + } + return page1; + } + + @Override + public List listParentByIds(List ids) { + List parentIds = new ArrayList<>(); + ArrayList btnIds = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper().in("id", ids); + List list = super.list(wrapper); + if (list==null){ + return parentIds; + } + for (Menu menu : list) { + if (Menu.TYPE_MENU.equals(menu.getType())){ + //菜单 + parentIds.add(menu.getParentId()); + }else { + //按钮 + parentIds.add(menu.getParentId()); + btnIds.add(menu.getId()); + } + } + return parentIds; + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/PointProductsServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/PointProductsServiceImpl.java new file mode 100644 index 0000000..8239a41 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/PointProductsServiceImpl.java @@ -0,0 +1,95 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.PointProducts; +import com.shanzhu.market.entity.query.QueryPointProducts; +import com.shanzhu.market.mapper.PointProductsMapper; +import com.shanzhu.market.service.IGoodsService; +import com.shanzhu.market.service.IPointProductsService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class PointProductsServiceImpl extends ServiceImpl implements IPointProductsService { + + @Resource + private IGoodsService goodsService; + + @Resource + private RedisTemplateService redisTemplateService; + + @Override + public Page queryPageByQo(QueryPointProducts qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper().like(StringUtils.hasText(qo.getName()), "goods_name", qo.getName()); + super.page(page, wrapper); + return page; + } + + @Override + public List> queryOptionGoods() { + QueryWrapper pointProductsQueryWrapper = new QueryWrapper().select("goods_id"); + List list = super.list(); + Set productGoodsIds = new HashSet<>(); + list.forEach(item -> { + productGoodsIds.add(item.getGoodsId()); + }); + QueryWrapper goodsQueryWrapper = new QueryWrapper() + .notIn(productGoodsIds.size() > 0, "id", productGoodsIds) + .eq("state", Goods.STATE_UP); + List goods = goodsService.list(goodsQueryWrapper); + ArrayList> options = new ArrayList<>(); + goods.forEach(item->{ + Map map = new HashMap<>(); + map.put("id",item.getId()); + map.put("name",item.getName()); + options.add(map); + }); + + return options; + } + + @Override + public void savePointGoods(PointProducts pointProducts,String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + QueryWrapper wrapper = new QueryWrapper().eq("goods_id", pointProducts.getGoodsId()); + PointProducts one = super.getOne(wrapper); + if (one!=null){ + throw new BusinessException("该商品已经是积分商品"); + } + pointProducts.setUpdateby(employee.getNickName()); + pointProducts.setUpdateTime(new Date()); + pointProducts.setUpdateId(employee.getId()); + pointProducts.setState(PointProducts.STATE_NORMAL); + super.save(pointProducts); + } + + @Override + public void updatePointGoods(PointProducts pointProducts, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + pointProducts.setUpdateby(employee.getNickName()); + pointProducts.setUpdateTime(new Date()); + pointProducts.setUpdateId(employee.getId()); + UpdateWrapper updateWrapper = new UpdateWrapper().set("integral", pointProducts.getIntegral()).eq("goods_id", pointProducts.getGoodsId()); + super.update(updateWrapper); + } + + @Override + public void del(Long id) { + UpdateWrapper updateWrapper = new UpdateWrapper() + .set("state", PointProducts.STATE_DEL) + .eq("goods_id", id); + super.update(updateWrapper); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/RoleServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..b972514 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/RoleServiceImpl.java @@ -0,0 +1,274 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.entity.query.RoleQuery; +import com.shanzhu.market.entity.vo.RolePermissonVo; +import com.shanzhu.market.mapper.RoleMapper; +import com.shanzhu.market.service.IEmployeeService; +import com.shanzhu.market.service.IMenuService; +import com.shanzhu.market.service.IRoleService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class RoleServiceImpl extends ServiceImpl implements IRoleService { + + @Resource + private RoleMapper roleMapper; + + @Resource + private IMenuService menuService; + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IEmployeeService employeeService; + + @Override + public Set queryByEid(Long eid) { + Set roles = roleMapper.queryByEid(eid); + return roles; + } + + @Override + public List listByQo(RoleQuery qo) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState()); + wrapper.ne("id",Role.SYS_ID); + wrapper.ne("id",2L); + List list = super.list(wrapper); + return list; + } + + @Override + public void forbiddenRole(Long rid) { + Role role = super.getById(rid); + if (Role.SYS_ID==role.getId() || 2L==role.getId()) { + throw new BusinessException("不能停用系统拥有者"); + } + UpdateWrapper wrapper = new UpdateWrapper() + .set("state", Role.STATE_BAN) + .eq("id", rid); + super.update(wrapper); + } + + @Override + public void saveRole(Role role) { + if (role == null) { + throw new BusinessException("操作失败"); + } + if (StringUtils.hasText(role.getName())) { + //查询是否保存过 + Role role1 = super.getOne(new QueryWrapper().eq("name", role.getName())); + if (role1 != null) { + throw new BusinessException("操作失败,角色名重复"); + } else { + role.setState(Role.STATE_NORMAL); + super.save(role); + } + } else { + throw new BusinessException("角色名称格式有误"); + } + + } + + @Transactional + @Override + public RolePermissonVo checkPermissons(Long rid) { + RolePermissonVo vo = new RolePermissonVo(); + /*角色所拥有的菜单id集合*/ + List menuIds = new ArrayList<>(); + /*所有的菜单信息*/ + List menus1 = new ArrayList<>(); + //步骤1:查询所有的菜单信息 + List menus = menuService.findAll(); + if (menus == null) { + throw new BusinessException("授权功能还待上线..."); + } + //封装菜单信息 + for (Menu menu : menus) { + RolePermissonVo.RoleMenu roleMenu_catalogs = vo.getRoleMenu(); + roleMenu_catalogs.setValue(menu.getId()); + roleMenu_catalogs.setLabel(menu.getLabel()); + /*目录下的菜单*/ + List children = new ArrayList<>(); + //目录 + if (menu.getChildren() != null) { + for (Menu child : menu.getChildren()) { + //菜单 + RolePermissonVo.RoleMenu roleMenu_menu = vo.getRoleMenu(); + roleMenu_menu.setValue(child.getId()); + roleMenu_menu.setLabel(child.getLabel()); + List children1 = new ArrayList<>(); + if (child.getChildren() != null) { + for (Menu childChild : child.getChildren()) { + //按钮 + RolePermissonVo.RoleMenu roleMenu_button = vo.getRoleMenu(); + roleMenu_button.setValue(childChild.getId()); + roleMenu_button.setLabel(childChild.getLabel()); + children1.add(roleMenu_button); + } + roleMenu_menu.setChildren(children1); + } + children.add(roleMenu_menu); + } + roleMenu_catalogs.setChildren(children); + } + menus1.add(roleMenu_catalogs); + } + vo.setMenus(menus1); + + //步骤2:是否是系统管理员 + if (rid == Role.SYS_ID) { + //系统管理员 + //封装角色拥有的菜单id集合 + for (Menu menu : menus) { + menuIds.add(menu.getId()); + //目录 + if (menu.getChildren() != null) { + for (Menu child : menu.getChildren()) { + //菜单 + menuIds.add(child.getId()); + if (child.getChildren() != null) { + for (Menu childChild : child.getChildren()) { + //按钮 + menuIds.add(childChild.getId()); + } + } + + } + } + + } + vo.setMenuIds(menuIds); + } else { + //非系统管理员 + menuIds = roleMapper.getMenuIdByRid(rid); + vo.setMenuIds(menuIds); + } + return vo; + } + + @Transactional + @Override + public void saveRolePermissons(Long rid, Long[] menuIds) { + //判断是否是系统管理员 + if (rid == Role.SYS_ID || rid==2L) { + //系统管理员 + throw new BusinessException("系统管理员的权限不可操作"); + } else { + //非系统管理员 + //重新建立关系 + if (menuIds == null || menuIds.length == 0) { + return; + } else { + List ids = new ArrayList<>(); + for (Long menuId : menuIds) { + ids.add(menuId); + } + + Set totalIds = new HashSet<>(); + QueryWrapper qoWrapper = new QueryWrapper().in("id", ids); + List list1 = menuService.list(qoWrapper); + for (Menu menu : list1) { + //按钮 + if (menu.getParentId()!=null && Menu.TYPE_BUTTON.equals(menu.getType())){ + totalIds.add(menu.getId()); + QueryWrapper btnWrapper = new QueryWrapper().eq("id", menu.getParentId()) + .eq("type",Menu.TYPE_MENU); + Menu menu1 = menuService.getOne(btnWrapper); + totalIds.add(menu1.getId()); + totalIds.add(menu1.getParentId()); + } else if (menu.getParentId()!=null && Menu.TYPE_MENU.equals(menu.getType())){ + //菜单 + totalIds.add(menu.getId()); + totalIds.add(menu.getParentId()); + }else if (menu.getParentId()==null && Menu.TYPE_CATALOGUE.equals(menu.getType())){ + //目录 + totalIds.add(menu.getId()); + } + } + //清除关系 + roleMapper.clearRecordsByRid(rid); + List> list = new ArrayList<>(); + for (Long id : totalIds) { + Map map = new HashMap<>(); + map.put("rid", rid); + map.put("mid", id); + list.add(map); + } + roleMapper.saveRolePermissons(list); + } + } + + } + + @Override + public List> getRoleAll() { + List> list = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper().eq("state", Role.STATE_NORMAL).ne("id",Role.SYS_ID).ne("id",2L); + List roles = super.list(wrapper); + for (Role role : roles) { + Map map=new HashMap<>(); + map.put("id",role.getId()); + map.put("label",role.getName()); + list.add(map); + } + return list; + } + + @Override + public List queryRoleIdsByEid(Long eid) { + Employee emp = employeeService.getById(eid); + if (emp.getIsAdmin()){ + return roleMapper.queryRoleIdsAll(); + }else { + return roleMapper.queryRoleIdsByEid(eid); + } + } + + @Override + public void saveRoleEmp(Long eid, Long[] roleIds,String token) { + Employee emp = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + if (emp.getId()==eid){ + throw new BusinessException("无法为自己赋予职务"); + } + //查询用户的信息,判断是否是系统管理员 + Employee employee = employeeService.getById(eid); + if (employee.getIsAdmin()){ + throw new BusinessException("无法操作系统管理员的职务"); + } + /*根据员工编号清除关系*/ + roleMapper.clearRelationByEid(eid); + /*重新保存关系*/ + List> list=new ArrayList<>(); + for (Long roleId : roleIds) { + Map map = new HashMap<>(); + map.put("eid",eid); + map.put("rid",roleId); + list.add(map); + } + if (list.size()>0){ + roleMapper.reSaveRelation(list); + } + } + + @Override + public void clearEmpPermission(Long id) { + roleMapper.clearRelationByEid(id); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SaleRecordsServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SaleRecordsServiceImpl.java new file mode 100644 index 0000000..309bdf5 --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SaleRecordsServiceImpl.java @@ -0,0 +1,117 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.*; +import com.shanzhu.market.entity.query.QuerySaleRecords; +import com.shanzhu.market.mapper.SaleRecordsMapper; +import com.shanzhu.market.service.IDetailSaleRecordsService; +import com.shanzhu.market.service.IGoodsService; +import com.shanzhu.market.service.IMemberService; +import com.shanzhu.market.service.ISaleRecordsService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class SaleRecordsServiceImpl extends ServiceImpl implements ISaleRecordsService { + + @Resource + private IGoodsService goodsService; + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IDetailSaleRecordsService detailSaleRecordsService; + + @Resource + private IMemberService memberService; + + @Override + public List> getOptionSaleRecordsGoods() { + QueryWrapper wrapper = new QueryWrapper().gt("residue_num", 0L); + List list = goodsService.list(wrapper); + List> goodsList = new ArrayList<>(); + if (list != null && list.size() > 0) { + for (Goods goods : list) { + Map map = new HashMap<>(); + map.put("id", goods.getId()); + map.put("name", goods.getName()); + map.put("residueNum", goods.getResidueNum()); + goodsList.add(map); + } + } + return goodsList; + } + + @Override + public SaleRecords saveSaleRecords(SaleRecords saleRecords, String token) { + Employee employee = JSON.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + saleRecords.setEid(employee.getId()); + saleRecords.setSellTime(new Date()); + saleRecords.setSellby(employee.getNickName()); + saleRecords.setState(SaleRecords.STATE_NORMAL); + for (DetailSaleRecords detailSaleRecord : saleRecords.getDetailSaleRecords()) { + detailSaleRecord.setSellCn(saleRecords.getCn()); + Goods goods = goodsService.getById(detailSaleRecord.getGoodsId()); + UpdateWrapper wrapper = new UpdateWrapper() + .set("sales_volume", goods.getSalesVolume() != null ? goods.getSalesVolume() + detailSaleRecord.getGoodsNum() : detailSaleRecord.getGoodsNum()) + .set("residue_num", goods.getResidueNum() - detailSaleRecord.getGoodsNum()) + .eq("id", goods.getId()); + goodsService.update(wrapper); + } + detailSaleRecordsService.saveBatch(saleRecords.getDetailSaleRecords()); + super.save(saleRecords); + if ("1".equals(saleRecords.getType())) { + //为会员增加积分 积分规则:积分=总金额*5%取整 + String s = saleRecords.getSellTotalmoney() * 0.05 + ""; + long integral = Long.parseLong(s.split("\\.")[0]); + QueryWrapper memberQueryWrapper = new QueryWrapper().eq("phone", saleRecords.getMemberPhone()); + Member member = memberService.getOne(memberQueryWrapper); + UpdateWrapper memberUpdateWrapper = new UpdateWrapper() + .set("integral", member.getIntegral() != null ? member.getIntegral() + + integral : integral) + .eq("phone", saleRecords.getMemberPhone()); + memberService.update(memberUpdateWrapper); + } + return saleRecords; + } + + @Override + public Page queryPageByQoSaleRecords(QuerySaleRecords qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("state", SaleRecords.STATE_NORMAL); + queryWrapper.eq(StringUtils.hasText(qo.getType()), "type", qo.getType()); + queryWrapper.likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn()); + queryWrapper.ge(StringUtils.hasText(qo.getStartSellTime()), "sell_time", qo.getStartSellTime()); + queryWrapper.le(StringUtils.hasText(qo.getEndSellTime()), "sell_time", qo.getEndSellTime()); + queryWrapper.eq(StringUtils.hasText(qo.getSellway()), "sellway", qo.getSellway()); + super.page(page, queryWrapper); + List records = page.getRecords(); + if (records != null && records.size() > 0) { + for (SaleRecords record : records) { + QueryWrapper sellCnWrapper = new QueryWrapper().eq("sell_cn", record.getCn()); + List list = detailSaleRecordsService.list(sellCnWrapper); + record.setDetailSaleRecords(list); + } + } + return page; + } + + @Override + public void delSaleRecords(String cn) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("cn", cn); + wrapper.set("state", SaleRecords.STATE_DEL); + super.update(wrapper); + } + +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/StoreServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/StoreServiceImpl.java new file mode 100644 index 0000000..32fafee --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/StoreServiceImpl.java @@ -0,0 +1,74 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Store; +import com.shanzhu.market.mapper.StoreMapper; +import com.shanzhu.market.service.IGoodsStoreService; +import com.shanzhu.market.service.IStoreService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Service +public class StoreServiceImpl extends ServiceImpl implements IStoreService { + + @Resource + private IGoodsStoreService goodsStoreService; + + @Override + public void updateStore(Store store) { + //判断是否要将状态修改为停用状态 + QueryWrapper storeQueryWrapper = new QueryWrapper() + .eq("name", store.getName()) + .eq("address", store.getAddress()) + .eq("state",store.getState()); + Store one = super.getOne(storeQueryWrapper); + if (Store.STATE_BAN.equals(store.getState())) { + Long redisueNum = goodsStoreService.storeUsed(store.getId()); + //要修改为停用状态 + if (redisueNum != null && redisueNum != 0) { + throw new BusinessException("仓库中存在商品,不能停用仓库"); + } + if (one!=null){ + super.removeById(one); + } + } + super.updateById(store); + } + + @Transactional + @Override + public void deactivate(Long sid) { + Long redisueNum = goodsStoreService.storeUsed(sid); + if (redisueNum != null && redisueNum != 0) { + throw new BusinessException("仓库中存在商品,不能停用仓库"); + } else { + UpdateWrapper wrapper = new UpdateWrapper() + .set("state", Store.STATE_BAN) + .eq("id", sid); + super.update(wrapper); + } + } + + @Override + public Long getResidueNumByGoodsId(Long id) { + return goodsStoreService.getResidueNumByGoodsId(id); + } + + @Override + public void saveStore(Store store) { + store.setState(Store.STATE_NORMAL); + QueryWrapper queryWrapper = new QueryWrapper().eq("state", Store.STATE_NORMAL) + .eq("name", store.getName()) + .eq("address", store.getAddress()); + Store one = super.getOne(queryWrapper); + if (one != null) { + throw new BusinessException("创建失败,已有相同的仓库"); + } + super.save(store); + } +} diff --git a/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SupplierServiceImpl.java b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SupplierServiceImpl.java new file mode 100644 index 0000000..a11bb2d --- /dev/null +++ b/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SupplierServiceImpl.java @@ -0,0 +1,101 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.domain.Supplier; +import com.shanzhu.market.entity.query.QuerySupplier; +import com.shanzhu.market.mapper.SupplierMapper; +import com.shanzhu.market.service.IDetailStoreGoodsService; +import com.shanzhu.market.service.ISupplierService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class SupplierServiceImpl extends ServiceImpl implements ISupplierService { + + @Resource + private IDetailStoreGoodsService detailStoreGoodsService; + + @Override + public void deactivate(Long cn) { + QueryWrapper detailStoreGoodsQueryWrapper = new QueryWrapper() + .eq("state1", DetailStoreGoods.STATE1_NORMAL) + .eq("type", DetailStoreGoods.TYPE_IN) + .eq("state", DetailStoreGoods.STATE_NORMAL) + .eq("supplier_id", cn); + List list = detailStoreGoodsService.list(detailStoreGoodsQueryWrapper); + if (list!=null&&list.size()>0){ + throw new BusinessException("该供货商正在被入库订单使用,请解除关系之后在停用"); + } + UpdateWrapper updateWrapper = new UpdateWrapper().set("state", Supplier.STATE_BAN).eq("cn", cn); + super.update(updateWrapper); + } + + @Override + public Page queryPageByQo(QuerySupplier qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper() + .like(StringUtils.hasText(qo.getName()), "name", qo.getName()) + .like(StringUtils.hasText(qo.getAddress()), "address", qo.getAddress()) + .like(StringUtils.hasText(qo.getInfo()), "info", qo.getInfo()) + .eq("state",Supplier.STATE_NORMAL); + super.page(page,wrapper); + return page; + } + + @Override + public List> queryOptionsSuppliers() { + List> list = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper().eq("state", Supplier.STATE_NORMAL); + List suppliers = super.list(wrapper); + if (suppliers==null ||suppliers.size()<=0){ + return new ArrayList<>(); + } + for (Supplier supplier : suppliers) { + Map map = new HashMap<>(); + map.put("id",supplier.getCn()); + map.put("name",supplier.getName()); + list.add(map); + } + return list; + + } + + @Override + public void saveSupplier(Supplier supplier) { + supplier.setState(Supplier.STATE_NORMAL); + QueryWrapper queryWrapper = new QueryWrapper() + .eq("name", supplier.getName()) + .eq("state", Supplier.STATE_NORMAL); + Supplier one = super.getOne(queryWrapper); + if (one!=null){ + throw new BusinessException("已存在供货商的联系方式"); + } + super.save(supplier); + } + + @Override + public void updateSupplier(Supplier supplier) { + if (Supplier.STATE_NORMAL.equals(supplier.getState())){ + QueryWrapper queryWrapper = new QueryWrapper() + .eq("name", supplier.getName()) + .eq("state", Supplier.STATE_NORMAL) + .ne("cn", supplier.getCn()); + Supplier one = super.getOne(queryWrapper); + if (one!=null){ + throw new BusinessException("该供货商已存在"); + } + } + super.updateById(supplier); + } +} diff --git a/superMarket-backend/src/main/resources/application.yaml b/superMarket-backend/src/main/resources/application.yaml new file mode 100644 index 0000000..79ad7a2 --- /dev/null +++ b/superMarket-backend/src/main/resources/application.yaml @@ -0,0 +1,24 @@ +server: + port: 9291 +spring: + application: + name: market-server + datasource: + druid: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/db_market?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true + username: root + password: 123456 + redis: + host: localhost + port: 6379 + password: + mvc: + async: + request-timeout: 20000 +mybatis-plus: + mapper-locations: classpath:mapper/*Mapper.xml +logging: + level: + cn.dingli.market.mapper: debug + diff --git a/superMarket-backend/src/main/resources/mapper/GoodsMapper.xml b/superMarket-backend/src/main/resources/mapper/GoodsMapper.xml new file mode 100644 index 0000000..304cac5 --- /dev/null +++ b/superMarket-backend/src/main/resources/mapper/GoodsMapper.xml @@ -0,0 +1,53 @@ + + + + + + + + + + \ No newline at end of file diff --git a/superMarket-backend/src/main/resources/mapper/GoodsStoreMapper.xml b/superMarket-backend/src/main/resources/mapper/GoodsStoreMapper.xml new file mode 100644 index 0000000..8543151 --- /dev/null +++ b/superMarket-backend/src/main/resources/mapper/GoodsStoreMapper.xml @@ -0,0 +1,22 @@ + + + + + update t_goods_store set residue_num=residue_num+#{goodsNum},in_num=in_num+#{goodsNum} where goods_id=#{goodsId} and store_id=#{storeId} + + + update t_goods_store set residue_num=residue_num-#{goodsNum} where goods_id=#{goodsId} and store_id=#{storeId} + + + + + + \ No newline at end of file diff --git a/superMarket-backend/src/main/resources/mapper/MenuMapper.xml b/superMarket-backend/src/main/resources/mapper/MenuMapper.xml new file mode 100644 index 0000000..bb52103 --- /dev/null +++ b/superMarket-backend/src/main/resources/mapper/MenuMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/superMarket-backend/src/main/resources/mapper/RoleMapper.xml b/superMarket-backend/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..ab42a01 --- /dev/null +++ b/superMarket-backend/src/main/resources/mapper/RoleMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + insert into t_role_menu (rid,mid) values + + (#{item.rid},#{item.mid}) + + + + insert into t_emp_role (eid,rid) values + + (#{item.eid},#{item.rid}) + + + + delete from t_role_menu where rid=#{rid} + + + delete from t_emp_role where eid=#{eid} + + + + + + \ No newline at end of file diff --git a/superMarket-backend/src/main/resources/static/files/1694324278293_file.jpg b/superMarket-backend/src/main/resources/static/files/1694324278293_file.jpg new file mode 100644 index 0000000..a00a5ba Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1694324278293_file.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1694434162457_07.jpg b/superMarket-backend/src/main/resources/static/files/1694434162457_07.jpg new file mode 100644 index 0000000..985d64e Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1694434162457_07.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1694434783850_04.jpg b/superMarket-backend/src/main/resources/static/files/1694434783850_04.jpg new file mode 100644 index 0000000..17b4bf5 Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1694434783850_04.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1694434840737_05.jpg b/superMarket-backend/src/main/resources/static/files/1694434840737_05.jpg new file mode 100644 index 0000000..9ff2682 Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1694434840737_05.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1694434883855_03.jpg b/superMarket-backend/src/main/resources/static/files/1694434883855_03.jpg new file mode 100644 index 0000000..69fffd4 Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1694434883855_03.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1694434945440_02.jpg b/superMarket-backend/src/main/resources/static/files/1694434945440_02.jpg new file mode 100644 index 0000000..55ae8cb Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1694434945440_02.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg b/superMarket-backend/src/main/resources/static/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg new file mode 100644 index 0000000..40ec0d0 Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1725800498537_1.png b/superMarket-backend/src/main/resources/static/files/1725800498537_1.png new file mode 100644 index 0000000..c01fb4e Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1725800498537_1.png differ diff --git a/superMarket-backend/src/main/resources/static/files/1725801956845_1.jpg b/superMarket-backend/src/main/resources/static/files/1725801956845_1.jpg new file mode 100644 index 0000000..2d0fcae Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1725801956845_1.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1725840264635_1.jpg b/superMarket-backend/src/main/resources/static/files/1725840264635_1.jpg new file mode 100644 index 0000000..2d0fcae Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1725840264635_1.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1726318271296_R-C.jpg b/superMarket-backend/src/main/resources/static/files/1726318271296_R-C.jpg new file mode 100644 index 0000000..817ebc3 Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1726318271296_R-C.jpg differ diff --git a/superMarket-backend/src/main/resources/static/files/1726322332719_1.jpeg b/superMarket-backend/src/main/resources/static/files/1726322332719_1.jpeg new file mode 100644 index 0000000..33bb1e2 Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1726322332719_1.jpeg differ diff --git a/superMarket-backend/src/main/resources/static/files/1726328928308_R-C.jpg b/superMarket-backend/src/main/resources/static/files/1726328928308_R-C.jpg new file mode 100644 index 0000000..817ebc3 Binary files /dev/null and b/superMarket-backend/src/main/resources/static/files/1726328928308_R-C.jpg differ diff --git a/superMarket-frontend/.gitignore b/superMarket-frontend/.gitignore new file mode 100644 index 0000000..3dfac44 --- /dev/null +++ b/superMarket-frontend/.gitignore @@ -0,0 +1,25 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files` + ` + +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/superMarket-frontend/babel.config.js b/superMarket-frontend/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/superMarket-frontend/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/superMarket-frontend/jsconfig.json b/superMarket-frontend/jsconfig.json new file mode 100644 index 0000000..4aafc5f --- /dev/null +++ b/superMarket-frontend/jsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "esnext", + "baseUrl": "./", + "moduleResolution": "node", + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + } +} diff --git a/superMarket-frontend/package-lock.json b/superMarket-frontend/package-lock.json new file mode 100644 index 0000000..9e11ff9 --- /dev/null +++ b/superMarket-frontend/package-lock.json @@ -0,0 +1,7752 @@ +{ + "name": "supermarket-manager", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@achrinza/node-ipc": { + "version": "9.2.7", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", + "integrity": "sha512-/EvNkqB4HNxPWCZASmgrjqG8gIdPOolD67LGASvGMp/FY5ne0rbvpYg5o9x8RmgjAl8KdmNQ4YlV1et9DYiW8g==", + "dev": true, + "requires": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + } + }, + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + } + }, + "@babel/compat-data": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", + "dev": true + }, + "@babel/core": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.22.20.tgz", + "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.20", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.20", + "@babel/types": "^7.22.19", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", + "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + } + }, + "@babel/helpers": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.16", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.15.tgz", + "integrity": "sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.22.10" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", + "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz", + "integrity": "sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "semver": "^6.3.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.20.tgz", + "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.20", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.15", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.19", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.22.20.tgz", + "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.19", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.19", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.22.19.tgz", + "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.19", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "requires": { + "easy-stack": "1.0.1" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.23", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", + "dev": true + }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.3", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.3.tgz", + "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.11", + "resolved": "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.11.tgz", + "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", + "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.44.2", + "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.36", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/http-errors": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.2.tgz", + "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.12", + "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.12.tgz", + "integrity": "sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "20.6.3", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.6.3.tgz", + "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/qs": { + "version": "6.9.8", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", + "dev": true + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", + "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", + "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "@vue/babel-helper-vue-transform-on": "^1.1.5", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true + } + } + }, + "@vue/babel-preset-app": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", + "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@babel/helper-compilation-targets": "^7.12.16", + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/runtime": "^7.12.13", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.8.3", + "core-js-compat": "^3.8.3", + "semver": "^7.3.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@vue/babel-preset-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", + "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", + "@vue/babel-sugar-functional-vue": "^1.4.0", + "@vue/babel-sugar-inject-h": "^1.4.0", + "@vue/babel-sugar-v-model": "^1.4.0", + "@vue/babel-sugar-v-on": "^1.4.0" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true + } + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "@vue/cli-overlay": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", + "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", + "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@vue/babel-preset-app": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "babel-loader": "^8.2.2", + "thread-loader": "^3.0.0", + "webpack": "^5.54.0" + } + }, + "@vue/cli-plugin-router": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", + "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^5.0.8" + } + }, + "@vue/cli-plugin-vuex": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", + "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", + "dev": true + }, + "@vue/cli-service": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz", + "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@vue/cli-overlay": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.5.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^17.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + }, + "dependencies": { + "@vue/vue-loader-v15": { + "version": "npm:vue-loader@15.11.1", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + } + } + }, + "@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "requires": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "address": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "dev": true, + "requires": { + "babel-runtime": "6.x" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "dev": true, + "requires": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==", + "dev": true + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001538", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", + "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "dev": true + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "requires": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "core-js": { + "version": "3.32.2", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.32.2.tgz", + "integrity": "sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==" + }, + "core-js-compat": { + "version": "3.32.2", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.10" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true + }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.525", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.525.tgz", + "integrity": "sha512-GIZ620hDK4YmIqAWkscG4W6RwY6gOx1y5J6f4JUQwctiJrqH2oxZYU4mXHi35oV32tr630UcepBzSBGJ/WYcZA==", + "dev": true + }, + "element-ui": { + "version": "2.15.14", + "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.14.tgz", + "integrity": "sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA==", + "dev": true, + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.6.tgz", + "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, + "html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "requires": { + "read-pkg-up": "^7.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.10.2", + "resolved": "https://registry.npmmirror.com/joi/-/joi-17.10.2.tgz", + "integrity": "sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + }, + "js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==" + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "launch-editor-middleware": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz", + "integrity": "sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA==", + "dev": true, + "requires": { + "launch-editor": "^2.6.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "lodash.invokemap": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", + "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.pullall": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/lodash.pullall/-/lodash.pullall-4.2.0.tgz", + "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmmirror.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "requires": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "postcss": { + "version": "8.4.30", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.30.tgz", + "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress-webpack-plugin": { + "version": "1.0.16", + "resolved": "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", + "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, + "resolve": { + "version": "1.22.6", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.67.0", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.67.0.tgz", + "integrity": "sha512-SVrO9ZeX/QQyEGtuZYCVxoeAL5vGlYjJ9p4i4HFuekWl8y/LtJ7tJc10Z+ck1c8xOuoBm2MYzcLfTAffD0pl/A==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.15", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", + "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.19.4", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "requires": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vue": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "requires": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-loader": { + "version": "17.2.2", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.2.2.tgz", + "integrity": "sha512-aqNvKJvnz2A/6VWeJZodAo8XLoAlVwBv+2Z6dama+LHsAF+P/xijQ+OfWrxIs0wcGSJduvdzvTuATzXbNKkpiw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "vue-router": { + "version": "3.6.5", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz", + "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, + "vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==" + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "4.9.1", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", + "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "is-plain-object": "^5.0.0", + "lodash.debounce": "^4.0.8", + "lodash.escape": "^4.0.1", + "lodash.flatten": "^4.4.0", + "lodash.invokemap": "^4.6.0", + "lodash.pullall": "^4.2.0", + "lodash.uniqby": "^4.7.0", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "ws": { + "version": "8.14.2", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.19", + "resolved": "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } +} diff --git a/superMarket-frontend/package.json b/superMarket-frontend/package.json new file mode 100644 index 0000000..135986d --- /dev/null +++ b/superMarket-frontend/package.json @@ -0,0 +1,40 @@ +{ + "name": "supermarket-manager", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "vue-cli-service serve", + "serve": "vue-cli-service serve", + "build": "vue-cli-service build" + }, + "dependencies": { + "axios": "^1.3.4", + "core-js": "^3.8.3", + "jquery": "^3.6.4", + "js-cookie": "^3.0.1", + "qs": "^6.11.1", + "vue": "^2.6.14", + "vue-router": "^3.5.1", + "vuex": "^3.6.2" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~5.0.0", + "@vue/cli-plugin-router": "~5.0.0", + "@vue/cli-plugin-vuex": "~5.0.0", + "@vue/cli-service": "~5.0.0", + "element-ui": "^2.15.13", + "sass": "^1.32.7", + "sass-loader": "^12.0.0", + "vue-template-compiler": "^2.6.14", + "webpack": "^5.76.2" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ], + "description": "## Project setup ``` npm install ```", + "main": "babel.config.js", + "author": "", + "license": "ISC" +} diff --git a/superMarket-frontend/public/favicon.ico b/superMarket-frontend/public/favicon.ico new file mode 100644 index 0000000..41aa698 Binary files /dev/null and b/superMarket-frontend/public/favicon.ico differ diff --git a/superMarket-frontend/public/index.html b/superMarket-frontend/public/index.html new file mode 100644 index 0000000..4f3ea82 --- /dev/null +++ b/superMarket-frontend/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + 超市管理系统 + + + +
+ + + diff --git a/superMarket-frontend/src/App.vue b/superMarket-frontend/src/App.vue new file mode 100644 index 0000000..8bfa7e1 --- /dev/null +++ b/superMarket-frontend/src/App.vue @@ -0,0 +1,12 @@ + + + + diff --git a/superMarket-frontend/src/api/goods_management/goods/goodsApi.js b/superMarket-frontend/src/api/goods_management/goods/goodsApi.js new file mode 100644 index 0000000..bda3743 --- /dev/null +++ b/superMarket-frontend/src/api/goods_management/goods/goodsApi.js @@ -0,0 +1,37 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/goods_management/goods' + +/*列表显示*/ +export function queryPageByQo(data) { + return ajaxPost(apiPrefix + "/queryPageByQo", data) +} +/*保存*/ +export function save(data) { + return ajaxPost(apiPrefix + "/save", data) +} +/*上/下架业务*/ +export function upOrdown(data) { + return ajaxPost(apiPrefix + "/upOrdown", data) +} +//修改 +export function update(data) { + return ajaxPost(apiPrefix + "/update", data) +} +/*查询商品信息*/ +export function queryGoodsById(data) { + return ajaxGet(apiPrefix + "/queryGoodsById", data) +} + + +export function selected_goodsAll() { + return ajaxGet(apiPrefix + "/selected_goodsAll", {}) +} + +export function selected_storeAll() { + return ajaxGet(apiPrefix + "/selected_storeAll", {}) +} + +export function returnGoods(data) { + return ajaxPost(apiPrefix + "/returnGoods", data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/goods_management/goods_category/goodsCategoryApi.js b/superMarket-frontend/src/api/goods_management/goods_category/goodsCategoryApi.js new file mode 100644 index 0000000..4297c70 --- /dev/null +++ b/superMarket-frontend/src/api/goods_management/goods_category/goodsCategoryApi.js @@ -0,0 +1,23 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/goods_management/goods_category' +/*保存*/ +export function save(data) { + return ajaxPost(apiPrefix + "/save", data) +} +/*修改*/ +export function update(data) { + return ajaxPost(apiPrefix + "/update", data) +} +/*停用*/ +export function deactivate(sid) { + return ajaxPost(apiPrefix + "/deactivate", {cid:sid}) +} +/*列表显示*/ +export function queryPageByQo(data) { + return ajaxPost(apiPrefix + "/queryPageByQo", data) +} + +export function getNormalCategoryAll(){ + return ajaxGet(apiPrefix+"/normalCategoryAll") +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/goods_management/goods_store/goodsStoreApi.js b/superMarket-frontend/src/api/goods_management/goods_store/goodsStoreApi.js new file mode 100644 index 0000000..af6c4c4 --- /dev/null +++ b/superMarket-frontend/src/api/goods_management/goods_store/goodsStoreApi.js @@ -0,0 +1,16 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/goods_management/goods_store' + +/*列表显示*/ +export function queryPageByQo(data) { + return ajaxPost(apiPrefix + "/queryPageByQo", data) +} + +export function queryGoodsStoreById(data) { + return ajaxGet(apiPrefix + "/queryGoodsStoreById", data) +} + +export function updateInventory(data) { + return ajaxPost(apiPrefix + "/updateInventory", data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/goods_management/point_products/pointProductApi.js b/superMarket-frontend/src/api/goods_management/point_products/pointProductApi.js new file mode 100644 index 0000000..057924e --- /dev/null +++ b/superMarket-frontend/src/api/goods_management/point_products/pointProductApi.js @@ -0,0 +1,29 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/goods_management/point_products' + +/*列表显示*/ +export function queryPageByQo(data) { + return ajaxPost(apiPrefix + "/queryPageByQo", data) +} + +export function del(data) { + return ajaxGet(apiPrefix + "/del", data) +} + +export function queryOptionGoods() { + return ajaxGet(apiPrefix + "/queryOptionGoods", {}) +} + +export function savePointGoods(data) { + return ajaxPost(apiPrefix + "/savePointGoods", data) +} + + +export function queryPointGoodsById(data) { + return ajaxGet(apiPrefix + "/queryPointGoodsById", data) +} + +export function updatePointGoods(data) { + return ajaxPost(apiPrefix + "/updatePointGoods", data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/goods_management/statistic/statisticSaleApi.js b/superMarket-frontend/src/api/goods_management/statistic/statisticSaleApi.js new file mode 100644 index 0000000..415a16e --- /dev/null +++ b/superMarket-frontend/src/api/goods_management/statistic/statisticSaleApi.js @@ -0,0 +1,8 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/goods_management/statistic_sale' + +/*列表显示*/ +export function queryPageByQo(data) { + return ajaxPost(apiPrefix + "/queryPageByQo", data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/inventory_management/detail_store_goods/detail_store_goodsApi.js b/superMarket-frontend/src/api/inventory_management/detail_store_goods/detail_store_goodsApi.js new file mode 100644 index 0000000..1115893 --- /dev/null +++ b/superMarket-frontend/src/api/inventory_management/detail_store_goods/detail_store_goodsApi.js @@ -0,0 +1,54 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + + +const apiPrefix_in = '/inventory_management/detail_store_goods_in' +const apiPrefix_out = '/inventory_management/detail_store_goods_out' +/**入库模块**/ +/*入库保存*/ +export function saveIn(data) { + return ajaxPost(apiPrefix_in + "/save", data) +} +/*入库列表显示*/ +export function queryPageByQoIn(data) { + return ajaxPost(apiPrefix_in + "/queryPageByQo", data) +} +/*删除入库记录*/ +export function delIn(data) { + return ajaxPost(apiPrefix_in + "/delIn", data) +} +/*删除出库记录*/ +export function delOut(data) { + return ajaxPost(apiPrefix_out + "/delOut", data) +} + +export function queryOptionsSuppliers() { + return ajaxGet(apiPrefix_in + "/queryOptionsSuppliers", {}) +} + +/**出库模块**/ +/*出库列表显示*/ +export function queryPageByQoOut(data) { + return ajaxPost(apiPrefix_out + "/queryPageByQoOut", data) +} +/*初始化选择框*/ +export function initOutOptions() { + return ajaxGet(apiPrefix_out + "/initOutOptions",{}) +} +/*出库选择商品导致仓库改变*/ +export function changeOutGoods(data) { + return ajaxGet(apiPrefix_out + "/changeOutGoods",data) +} +/*出库选择仓库导致商品改变*/ +export function changeOutStore(data) { + return ajaxGet(apiPrefix_out + "/changeOutStore",data) +} + + +export function queryOutGoods(data) { + return ajaxPost(apiPrefix_out + "/queryOutGoods", data) +} + + +export function saveOut(data) { + return ajaxPost(apiPrefix_out + "/save", data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/inventory_management/notice/noticeApi.js b/superMarket-frontend/src/api/inventory_management/notice/noticeApi.js new file mode 100644 index 0000000..afd1a22 --- /dev/null +++ b/superMarket-frontend/src/api/inventory_management/notice/noticeApi.js @@ -0,0 +1,23 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + + +const apiPrefix = '/inventory_management/detail_store_goods/notice' + +export function queryPageNoticeIn(data) { + return ajaxPost(apiPrefix+ "/queryPageNoticeIn", data) +} +export function queryPageNoticeOut_shelves(data) { + return ajaxPost(apiPrefix+ "/queryPageNoticeOut_shelves", data) +} + +export function saveOut_shelves(data) { + return ajaxPost(apiPrefix+ "/saveOut_shelves", data) +} + +export function queryPageNoticeOut_untreated(data) { + return ajaxPost(apiPrefix+ "/queryPageNoticeOut_untreated", data) +} + +export function resolveOutUntreatedForm(data) { + return ajaxPost(apiPrefix+ "/resolveOutUntreatedForm", data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/inventory_management/storage_situation/storageSituationApi.js b/superMarket-frontend/src/api/inventory_management/storage_situation/storageSituationApi.js new file mode 100644 index 0000000..94552dd --- /dev/null +++ b/superMarket-frontend/src/api/inventory_management/storage_situation/storageSituationApi.js @@ -0,0 +1,10 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/inventory_management/store/storage_situation' +export function queryPageByQo(data) { + return ajaxPost(apiPrefix + "/queryPageByQo", data) +} + +export function queryStoreGoodsByStoreId(data) { + return ajaxPost(apiPrefix + "/queryStoreGoodsByStoreId", data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/inventory_management/store/storeApi.js b/superMarket-frontend/src/api/inventory_management/store/storeApi.js new file mode 100644 index 0000000..d42d208 --- /dev/null +++ b/superMarket-frontend/src/api/inventory_management/store/storeApi.js @@ -0,0 +1,21 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const storeApiPrefix = '/inventory_management/store' + +//获取仓库信息 +export function storeList(data) { + return ajaxPost(storeApiPrefix + "/list", data) +} +/*保存*/ +export function save(data) { + return ajaxPost(storeApiPrefix + "/save", data) +} +/*修改*/ +export function update(data) { + return ajaxPost(storeApiPrefix + "/update", data) +} +/*停用*/ +export function deactivate(sid) { + return ajaxPost(storeApiPrefix + "/deactivate", {sid:sid}) +} + diff --git a/superMarket-frontend/src/api/inventory_management/supplier/supplierApi.js b/superMarket-frontend/src/api/inventory_management/supplier/supplierApi.js new file mode 100644 index 0000000..e7fe506 --- /dev/null +++ b/superMarket-frontend/src/api/inventory_management/supplier/supplierApi.js @@ -0,0 +1,23 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/inventory_management/supplier' + +//获取供货商信息 +export function queryPageSupplier(data) { + return ajaxPost(apiPrefix + "/queryPageByQo", data) +} +export function saveSupplier(data) { + return ajaxPost(apiPrefix + "/save", data) +} + +export function updateSupplier(data) { + return ajaxPost(apiPrefix + "/update", data) +} + +export function queryByCn(data) { + return ajaxGet(apiPrefix + "/queryByCn", data) +} + +export function delSupplier(data) { + return ajaxPost(apiPrefix + "/deactivate", data) +} diff --git a/superMarket-frontend/src/api/login/loginApi.js b/superMarket-frontend/src/api/login/loginApi.js new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/superMarket-frontend/src/api/login/loginApi.js @@ -0,0 +1 @@ + diff --git a/superMarket-frontend/src/api/member_management/member/memberApi.js b/superMarket-frontend/src/api/member_management/member/memberApi.js new file mode 100644 index 0000000..bc8ee96 --- /dev/null +++ b/superMarket-frontend/src/api/member_management/member/memberApi.js @@ -0,0 +1,28 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/member_management/member' + +/*列表显示*/ +export function queryPageByQo(data) { + return ajaxPost(apiPrefix + "/queryPageByQo", data) +} +/*删除操作*/ +export function delMember(data) { + return ajaxPost(apiPrefix + "/delMember", data) +} +/*保存*/ +export function save(data) { + return ajaxPost(apiPrefix + "/save", data) +} + +//修改 +export function update(data) { + return ajaxPost(apiPrefix + "/update", data) +} +/*查询会员信息*/ +export function queryMemberById(data) { + return ajaxGet(apiPrefix + "/queryMemberById", data) +} +export function queryMemberByPhone(data) { + return ajaxGet(apiPrefix + "/queryMemberByPhone", data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/personal/personApi.js b/superMarket-frontend/src/api/personal/personApi.js new file mode 100644 index 0000000..ad87ae3 --- /dev/null +++ b/superMarket-frontend/src/api/personal/personApi.js @@ -0,0 +1,7 @@ +import {ajaxGet} from "@/assets/js/common"; + +const apiPrefix = '/personal' + +export function queryInformation() { + return ajaxGet(apiPrefix + "/information", {}) +} diff --git a/superMarket-frontend/src/api/personnel_management/department/deptApi.js b/superMarket-frontend/src/api/personnel_management/department/deptApi.js new file mode 100644 index 0000000..5227309 --- /dev/null +++ b/superMarket-frontend/src/api/personnel_management/department/deptApi.js @@ -0,0 +1,20 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/personnel_management/dept' + +//获取仓库信息 +export function listByQo(data) { + return ajaxGet(apiPrefix + "/list", data) +} +/*保存*/ +export function save(data) { + return ajaxPost(apiPrefix + "/save", data) +} +/*修改*/ +export function update(data) { + return ajaxPost(apiPrefix + "/update", data) +} +/*停用*/ +export function deactivate(id) { + return ajaxPost(apiPrefix + "/deactivate", {id:id}) +} diff --git a/superMarket-frontend/src/api/personnel_management/employee/empApi.js b/superMarket-frontend/src/api/personnel_management/employee/empApi.js new file mode 100644 index 0000000..0b70652 --- /dev/null +++ b/superMarket-frontend/src/api/personnel_management/employee/empApi.js @@ -0,0 +1,32 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/personnel_management/employee' + +//获取仓库信息 +export function pageByQo(data) { + return ajaxPost(apiPrefix + "/list", data) +} +/*保存*/ +export function save(data) { + return ajaxPost(apiPrefix + "/save", data) +} +/*修改*/ +export function update(data) { + return ajaxPost(apiPrefix + "/update", data) +} +/*离职*/ +export function deactivate(id) { + return ajaxPost(apiPrefix + "/deactivate", {id:id}) +} +/*详情*/ +export function detail(id) { + return ajaxGet(apiPrefix + "/detail", {uid:id}) +} +/*修改按钮*/ +export function editBtnClick(id) { + return ajaxGet(apiPrefix + "/editbtn", {uid:id}) +} +/*重置密码*/ +export function resetPwd(data){ + return ajaxPost(apiPrefix+"/resetPwd",data) +} \ No newline at end of file diff --git a/superMarket-frontend/src/api/sale_management/exchange_point_products/exchangePointProductsApi.js b/superMarket-frontend/src/api/sale_management/exchange_point_products/exchangePointProductsApi.js new file mode 100644 index 0000000..49952f8 --- /dev/null +++ b/superMarket-frontend/src/api/sale_management/exchange_point_products/exchangePointProductsApi.js @@ -0,0 +1,41 @@ +import {ajaxGet, ajaxJson, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/sale_management/exchange_point_products_records' + +export function queryPointProductBymemberId(data) { + return ajaxGet(apiPrefix + "/queryPointProductBymemberId", data) +} + +export function queryMemberByGoodsId(data) { + return ajaxGet(apiPrefix + "/queryMemberByGoodsId", data) +} +export function queryPointProductByGoodsId(data) { + return ajaxGet(apiPrefix + "/queryPointProductByGoodsId", data) +} + +export function saveExchangePointProductRecords(data) { + return ajaxPost(apiPrefix + "/saveExchangePointProductRecords", data) +} + + +export function queryOptionsMemberPhone() { + return ajaxGet(apiPrefix + "/queryOptionsMemberPhone", {}) +} + +export function queryPageByQoExchangePointProducts(data) { + return ajaxPost(apiPrefix + "/queryPageByQoExchangePointProducts", data) +} + + +export function delExchangePointProducts(data) { + return ajaxGet(apiPrefix + "/delExchangePointProducts", data) +} + + +export function queryOptionsPointProducts() { + return ajaxGet(apiPrefix + "/queryOptionsPointProducts", {}) +} +export function queryOptionsMember() { + return ajaxGet(apiPrefix + "/queryOptionsMember", {}) +} + diff --git a/superMarket-frontend/src/api/sale_management/saleRecordsApi.js b/superMarket-frontend/src/api/sale_management/saleRecordsApi.js new file mode 100644 index 0000000..5bf26ee --- /dev/null +++ b/superMarket-frontend/src/api/sale_management/saleRecordsApi.js @@ -0,0 +1,23 @@ +import {ajaxGet, ajaxJson, ajaxPost} from "@/assets/js/common"; + +const apiPrefix = '/sale_management/sale_record' +/*得到订单号*/ +export function getCn() { + return ajaxGet(apiPrefix + "/getCn", {}) +} + +export function getOptionSaleRecordsGoods() { + return ajaxGet(apiPrefix + "/getOptionSaleRecordsGoods", {}) +} + +export function saveSaleRecords(data) { + return ajaxJson(apiPrefix + "/saveSaleRecords", data) +} + +export function queryPageByQoSaleRecords(data) { + return ajaxPost(apiPrefix + "/queryPageByQoSaleRecords", data) +} + +export function delSaleRecords(data) { + return ajaxGet(apiPrefix + "/delSaleRecords", data) +} diff --git a/superMarket-frontend/src/api/system/menu/menuApi.js b/superMarket-frontend/src/api/system/menu/menuApi.js new file mode 100644 index 0000000..fa478a1 --- /dev/null +++ b/superMarket-frontend/src/api/system/menu/menuApi.js @@ -0,0 +1,8 @@ +import {ajaxPost} from "@/assets/js/common"; + +const menuApiPrefix = '/system/menu' + +//条件分页获取菜单的信息 +export function queryPageByQo(data) { + return ajaxPost(menuApiPrefix + "/queryPageByQo", data) +} diff --git a/superMarket-frontend/src/api/system/role/roleApi.js b/superMarket-frontend/src/api/system/role/roleApi.js new file mode 100644 index 0000000..adf667b --- /dev/null +++ b/superMarket-frontend/src/api/system/role/roleApi.js @@ -0,0 +1,45 @@ +import {ajaxGet, ajaxPost} from "@/assets/js/common"; + +const roleApiPrefix = '/system/role' + +//获取角色全部信息 +export function roleList(data) { + return ajaxPost(roleApiPrefix + "/list", data) +} + +//停用角色 +export function forbiddenRole(id) { + return ajaxPost(roleApiPrefix + "/forbiddenRole", {rid: id}) +} + +//修改角色信息 +export function edit_role(data) { + return ajaxPost(roleApiPrefix + "/edit_role", data) +} + +//创建角色 +export function save_role(data) { + return ajaxPost(roleApiPrefix + "/save", data) +} + +/*授权按钮*/ +export function checkPermissons(rid) { + return ajaxGet(roleApiPrefix + "/checkPermissons", {rid: rid}) +} + +/*保存角色-权限关系*/ +export function saveRolePermissons(data) { + return ajaxPost(roleApiPrefix + "/saveRolePermissons", data) +} +export function getAllRole(){ + return ajaxGet(roleApiPrefix +"/all",{}) +} +/*保存角色和员工的关系*/ +export function saveRoleEmp(data) { + return ajaxPost(roleApiPrefix + "/saveRoleEmp", data) +} + +export function queryRoleIdsByEid(eid) { + return ajaxGet(roleApiPrefix+"/queryRoleIdsByEid",{eid:eid}) + +} \ No newline at end of file diff --git a/superMarket-frontend/src/assets/1.png b/superMarket-frontend/src/assets/1.png new file mode 100644 index 0000000..68ee022 Binary files /dev/null and b/superMarket-frontend/src/assets/1.png differ diff --git a/superMarket-frontend/src/assets/11.png b/superMarket-frontend/src/assets/11.png new file mode 100644 index 0000000..682b471 Binary files /dev/null and b/superMarket-frontend/src/assets/11.png differ diff --git a/superMarket-frontend/src/assets/2.png b/superMarket-frontend/src/assets/2.png new file mode 100644 index 0000000..628f4ae Binary files /dev/null and b/superMarket-frontend/src/assets/2.png differ diff --git a/superMarket-frontend/src/assets/22.png b/superMarket-frontend/src/assets/22.png new file mode 100644 index 0000000..4d23904 Binary files /dev/null and b/superMarket-frontend/src/assets/22.png differ diff --git a/superMarket-frontend/src/assets/3.png b/superMarket-frontend/src/assets/3.png new file mode 100644 index 0000000..348a228 Binary files /dev/null and b/superMarket-frontend/src/assets/3.png differ diff --git a/superMarket-frontend/src/assets/33.png b/superMarket-frontend/src/assets/33.png new file mode 100644 index 0000000..009c679 Binary files /dev/null and b/superMarket-frontend/src/assets/33.png differ diff --git a/superMarket-frontend/src/assets/44.png b/superMarket-frontend/src/assets/44.png new file mode 100644 index 0000000..73ba72e Binary files /dev/null and b/superMarket-frontend/src/assets/44.png differ diff --git a/superMarket-frontend/src/assets/55.png b/superMarket-frontend/src/assets/55.png new file mode 100644 index 0000000..fcc76e9 Binary files /dev/null and b/superMarket-frontend/src/assets/55.png differ diff --git a/superMarket-frontend/src/assets/bg1.png b/superMarket-frontend/src/assets/bg1.png new file mode 100644 index 0000000..0c7b33f Binary files /dev/null and b/superMarket-frontend/src/assets/bg1.png differ diff --git a/superMarket-frontend/src/assets/bg2.png b/superMarket-frontend/src/assets/bg2.png new file mode 100644 index 0000000..7923ecb Binary files /dev/null and b/superMarket-frontend/src/assets/bg2.png differ diff --git a/superMarket-frontend/src/assets/bg3.png b/superMarket-frontend/src/assets/bg3.png new file mode 100644 index 0000000..89c5b66 Binary files /dev/null and b/superMarket-frontend/src/assets/bg3.png differ diff --git a/superMarket-frontend/src/assets/bg4.png b/superMarket-frontend/src/assets/bg4.png new file mode 100644 index 0000000..7d5c55e Binary files /dev/null and b/superMarket-frontend/src/assets/bg4.png differ diff --git a/superMarket-frontend/src/assets/css/globel.css b/superMarket-frontend/src/assets/css/globel.css new file mode 100644 index 0000000..6b0355a --- /dev/null +++ b/superMarket-frontend/src/assets/css/globel.css @@ -0,0 +1,27 @@ + +body{ + margin: 0; + padding: 0; + background-color: #E9EEF3; +} +#app{ + width: 100%; + height: 100%; +} + +.el-header { + background-color: #6495ED; + color: #333; + border-bottom: 1px black solid; + height: 150px; +} + +.el-aside { + background-color: #6495ED; +} + +.el-main { + background-color: #E9EEF3; + color: #333; + text-align: center; +} diff --git a/superMarket-frontend/src/assets/font/iconfont.css b/superMarket-frontend/src/assets/font/iconfont.css new file mode 100644 index 0000000..517c556 --- /dev/null +++ b/superMarket-frontend/src/assets/font/iconfont.css @@ -0,0 +1,123 @@ +@font-face { + font-family: "iconfont"; /* Project id 4616094 */ + src: url('iconfont.woff2?t=1725801323477') format('woff2'), + url('iconfont.woff?t=1725801323477') format('woff'), + url('iconfont.ttf?t=1725801323477') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-r-bottom:before { + content: "\e623"; +} + +.icon-r-left:before { + content: "\e619"; +} + +.icon-r-top:before { + content: "\e63b"; +} + +.icon-r-no:before { + content: "\e624"; +} + +.icon-r-refresh:before { + content: "\e631"; +} + +.icon-r-yes:before { + content: "\e633"; +} + +.icon-r-building:before { + content: "\e639"; +} + +.icon-r-team:before { + content: "\e622"; +} + +.icon-r-right:before { + content: "\e619"; +} + +.icon-r-find:before { + content: "\e63c"; +} + +.icon-r-add:before { + content: "\e621"; +} + +.icon-r-edit:before { + content: "\e625"; +} + +.icon-r-user2:before { + content: "\e62b"; +} + +.icon-r-delete:before { + content: "\e624"; +} + +.icon-r-lock:before { + content: "\e62a"; +} + +.icon-r-paper:before { + content: "\e61e"; +} + +.icon-r-setting:before { + content: "\e61a"; +} + +.icon-r-list:before { + content: "\e638"; +} + +.icon-r-home:before { + content: "\e61e"; +} + +.icon-r-shield:before { + content: "\e61a"; +} + +.icon-r-user3:before { + content: "\e62b"; +} + +.icon-r-mark1:before { + content: "\e62c"; +} + +.icon-r-user1:before { + content: "\e62b"; +} + +.icon-r-love:before { + content: "\e636"; +} + +.icon-r-mark2:before { + content: "\e62b"; +} + +.icon-r-mark3:before { + content: "\e62b"; +} + +.icon-r-mark4:before { + content: "\e62b"; +} + diff --git a/superMarket-frontend/src/assets/font/iconfont.js b/superMarket-frontend/src/assets/font/iconfont.js new file mode 100644 index 0000000..369c7e3 --- /dev/null +++ b/superMarket-frontend/src/assets/font/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_4616094='',(h=>{var a=(t=(t=document.getElementsByTagName("script"))[t.length-1]).getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var o,l,i,e,c,d=function(a,t){t.parentNode.insertBefore(a,t)};if(a&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}o=function(){var a,t=document.createElement("div");t.innerHTML=h._iconfont_svg_string_4616094,(t=t.getElementsByTagName("svg")[0])&&(t.setAttribute("aria-hidden","true"),t.style.position="absolute",t.style.width=0,t.style.height=0,t.style.overflow="hidden",t=t,(a=document.body).firstChild?d(t,a.firstChild):a.appendChild(t))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),o()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(i=o,e=h.document,c=!1,z(),e.onreadystatechange=function(){"complete"==e.readyState&&(e.onreadystatechange=null,p())})}function p(){c||(c=!0,i())}function z(){try{e.documentElement.doScroll("left")}catch(a){return void setTimeout(z,50)}p()}})(window); \ No newline at end of file diff --git a/superMarket-frontend/src/assets/font/iconfont.json b/superMarket-frontend/src/assets/font/iconfont.json new file mode 100644 index 0000000..58f645e --- /dev/null +++ b/superMarket-frontend/src/assets/font/iconfont.json @@ -0,0 +1,317 @@ +{ + "id": "4616094", + "name": "通用图标", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "40984195", + "name": "Account-Regular", + "font_class": "Account-Regular", + "unicode": "e616", + "unicode_decimal": 58902 + }, + { + "icon_id": "40984196", + "name": "active", + "font_class": "active", + "unicode": "e617", + "unicode_decimal": 58903 + }, + { + "icon_id": "40984197", + "name": "arrow left", + "font_class": "a-arrowleft", + "unicode": "e618", + "unicode_decimal": 58904 + }, + { + "icon_id": "40984198", + "name": "arrow right", + "font_class": "a-arrowright", + "unicode": "e619", + "unicode_decimal": 58905 + }, + { + "icon_id": "40984199", + "name": "arrow-list", + "font_class": "arrow-list", + "unicode": "e61a", + "unicode_decimal": 58906 + }, + { + "icon_id": "40984200", + "name": "column", + "font_class": "column", + "unicode": "e61b", + "unicode_decimal": 58907 + }, + { + "icon_id": "40984201", + "name": "close", + "font_class": "close", + "unicode": "e61c", + "unicode_decimal": 58908 + }, + { + "icon_id": "40984202", + "name": "back", + "font_class": "back", + "unicode": "e61d", + "unicode_decimal": 58909 + }, + { + "icon_id": "40984203", + "name": "copy", + "font_class": "copy", + "unicode": "e61e", + "unicode_decimal": 58910 + }, + { + "icon_id": "40984204", + "name": "corner-up-left", + "font_class": "corner-up-left", + "unicode": "e61f", + "unicode_decimal": 58911 + }, + { + "icon_id": "40984205", + "name": "direction-right", + "font_class": "direction-right", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "40984206", + "name": "create", + "font_class": "create", + "unicode": "e621", + "unicode_decimal": 58913 + }, + { + "icon_id": "40984207", + "name": "Ad Placement-Regular", + "font_class": "a-AdPlacement-Regular", + "unicode": "e622", + "unicode_decimal": 58914 + }, + { + "icon_id": "40984208", + "name": "direction-down", + "font_class": "direction-down", + "unicode": "e623", + "unicode_decimal": 58915 + }, + { + "icon_id": "40984209", + "name": "dustbin", + "font_class": "dustbin", + "unicode": "e624", + "unicode_decimal": 58916 + }, + { + "icon_id": "40984210", + "name": "edit", + "font_class": "edit", + "unicode": "e625", + "unicode_decimal": 58917 + }, + { + "icon_id": "40984211", + "name": "fastforward-circle-right", + "font_class": "fastforward-circle-right", + "unicode": "e626", + "unicode_decimal": 58918 + }, + { + "icon_id": "40984212", + "name": "fastforward-circle-left", + "font_class": "fastforward-circle-left", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "40984213", + "name": "Expand", + "font_class": "Expand", + "unicode": "e628", + "unicode_decimal": 58920 + }, + { + "icon_id": "40984214", + "name": "hold", + "font_class": "hold", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "40984215", + "name": "lock", + "font_class": "lock", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "40984216", + "name": "people", + "font_class": "people", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "40984217", + "name": "messageil", + "font_class": "messageil", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "40984218", + "name": "export", + "font_class": "export", + "unicode": "e62d", + "unicode_decimal": 58925 + }, + { + "icon_id": "40984219", + "name": "more", + "font_class": "more", + "unicode": "e62e", + "unicode_decimal": 58926 + }, + { + "icon_id": "40984220", + "name": "time", + "font_class": "time", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "40984221", + "name": "Management-Regular", + "font_class": "Management-Regular", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "40984222", + "name": "refresh", + "font_class": "refresh", + "unicode": "e631", + "unicode_decimal": 58929 + }, + { + "icon_id": "40984223", + "name": "report-Regular", + "font_class": "report-Regular", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "40984224", + "name": "对号", + "font_class": "duihao", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "40984225", + "name": "phone", + "font_class": "phone", + "unicode": "e634", + "unicode_decimal": 58932 + }, + { + "icon_id": "40984226", + "name": "感叹号", + "font_class": "gantanhao", + "unicode": "e635", + "unicode_decimal": 58933 + }, + { + "icon_id": "40984227", + "name": "成功", + "font_class": "chenggong", + "unicode": "e636", + "unicode_decimal": 58934 + }, + { + "icon_id": "40984228", + "name": "汉堡包-展开", + "font_class": "hanbaobao-zhankai", + "unicode": "e637", + "unicode_decimal": 58935 + }, + { + "icon_id": "40984229", + "name": "list-bule", + "font_class": "list-bule", + "unicode": "e638", + "unicode_decimal": 58936 + }, + { + "icon_id": "40984230", + "name": "time-1", + "font_class": "time-1", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "40984231", + "name": "双箭头", + "font_class": "shuangjiantou", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "40984232", + "name": "direction-up", + "font_class": "direction-up", + "unicode": "e63b", + "unicode_decimal": 58939 + }, + { + "icon_id": "40984233", + "name": "search", + "font_class": "search", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "40984234", + "name": "汉堡包-收缩", + "font_class": "hanbaobao-shousuo", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "40984235", + "name": "通知", + "font_class": "tongzhi", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "40984236", + "name": "tips", + "font_class": "tips", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "40984237", + "name": "问号", + "font_class": "wenhao", + "unicode": "e640", + "unicode_decimal": 58944 + }, + { + "icon_id": "40984238", + "name": "加号", + "font_class": "jiahao", + "unicode": "e641", + "unicode_decimal": 58945 + } + ] +} diff --git a/superMarket-frontend/src/assets/font/iconfont.ttf b/superMarket-frontend/src/assets/font/iconfont.ttf new file mode 100644 index 0000000..aeec587 Binary files /dev/null and b/superMarket-frontend/src/assets/font/iconfont.ttf differ diff --git a/superMarket-frontend/src/assets/font/iconfont.woff b/superMarket-frontend/src/assets/font/iconfont.woff new file mode 100644 index 0000000..55c82e4 Binary files /dev/null and b/superMarket-frontend/src/assets/font/iconfont.woff differ diff --git a/superMarket-frontend/src/assets/font/iconfont.woff2 b/superMarket-frontend/src/assets/font/iconfont.woff2 new file mode 100644 index 0000000..8c99c90 Binary files /dev/null and b/superMarket-frontend/src/assets/font/iconfont.woff2 differ diff --git a/superMarket-frontend/src/assets/img/01.jpg b/superMarket-frontend/src/assets/img/01.jpg new file mode 100644 index 0000000..7508de4 Binary files /dev/null and b/superMarket-frontend/src/assets/img/01.jpg differ diff --git a/superMarket-frontend/src/assets/img/03.jpg b/superMarket-frontend/src/assets/img/03.jpg new file mode 100644 index 0000000..7508de4 Binary files /dev/null and b/superMarket-frontend/src/assets/img/03.jpg differ diff --git a/superMarket-frontend/src/assets/img/13.jpg b/superMarket-frontend/src/assets/img/13.jpg new file mode 100644 index 0000000..7508de4 Binary files /dev/null and b/superMarket-frontend/src/assets/img/13.jpg differ diff --git a/superMarket-frontend/src/assets/img/logo.png b/superMarket-frontend/src/assets/img/logo.png new file mode 100644 index 0000000..c01fb4e Binary files /dev/null and b/superMarket-frontend/src/assets/img/logo.png differ diff --git a/superMarket-frontend/src/assets/js/auth.js b/superMarket-frontend/src/assets/js/auth.js new file mode 100644 index 0000000..ad08c48 --- /dev/null +++ b/superMarket-frontend/src/assets/js/auth.js @@ -0,0 +1,22 @@ +import Cookies from 'js-cookie' + +const TokenKey = 'token' + +export function getToken() { + return Cookies.get(TokenKey) +} + +export function setToken(token) { + return Cookies.set(TokenKey, token) +} + +export function removeToken() { + return Cookies.remove(TokenKey) +} +export function loginEmp() { + let str = Cookies.get("employee") + return JSON.parse(str) +} +export function clearCookie(name) { + Cookies.remove(name) +} \ No newline at end of file diff --git a/superMarket-frontend/src/assets/js/common.js b/superMarket-frontend/src/assets/js/common.js new file mode 100644 index 0000000..b29cb38 --- /dev/null +++ b/superMarket-frontend/src/assets/js/common.js @@ -0,0 +1,96 @@ + +import { getToken } from "@/assets/js/auth"; +import axios from "axios"; +import { Message } from "element-ui"; +import Cookies from "js-cookie"; +import qs from 'qs'; + +// const prefix_url = "http://localhost:9291" +const prefix_url = "http://127.0.0.1:9291" + +/*刷新Cooke的存活时间*/ +function refreshCookies() { + var token=getToken() + if (token){ + //刷新cookie + axios({ + url:prefix_url+"/checkedToken", + method:"GET", + params:{token:token} + }).then(res=>{ + res=res.data + + if (res.code==200){ + Cookies.set("token", res.data.token, {expires: 1/48}) + Cookies.set("employee", JSON.stringify(res.data.employee), {expires: 1/48}) + } + + }).catch(()=>{ + popup("系统正忙","error") + }) + } + return token; + +} + +/*post请求*/ +export function ajaxPost(url, param) { + return axios({ + url: prefix_url + url, + method: "POST", + headers:{ + 'token': refreshCookies() //设置token 其中K名要和后端协调好 + }, + data: qs.stringify(param) + }).catch(() => { + popup("系统正忙,请稍后访问....", "error") + + }) +} +/*json请求*/ +export function ajaxJson(url, param) { + return axios({ + url: prefix_url + url, + method: "POST", + headers:{ + 'Content-Type':'application/json', + 'token': refreshCookies() //设置token 其中K名要和后端协调好 + }, + data: param + }).catch(() => { + popup("系统正忙,请稍后访问....", "error") + + }) +} + +/*GET请求*/ +export function ajaxGet(url, param) { + return axios({ + url: prefix_url + url, + method: "GET", + headers: { + 'token': refreshCookies() //设置token 其中K名要和后端协调好 + }, + params:param + }).catch(() => { + popup("系统正忙,请稍后访问....", "error") + + }) +} +/*给用户弹出相应的提示*/ +export function popup(msg, type) { + switch (type) { + case "warning": + Message.warning(msg); + break; + case "error": + Message.error(msg); + break; + case "info": + Message.info(msg); + break; + default: + Message.success(msg); + } + +} diff --git a/superMarket-frontend/src/main.js b/superMarket-frontend/src/main.js new file mode 100644 index 0000000..acbbde8 --- /dev/null +++ b/superMarket-frontend/src/main.js @@ -0,0 +1,27 @@ + +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import store from './store' +//ElementUI相关 +import ElementUI from 'element-ui' +//ElementUI相关 +import 'element-ui/lib/theme-chalk/index.css' +import '@/assets/css/globel.css' +import qs from 'qs'; +import './assets/font/iconfont.css' +import axios from 'axios' +Vue.prototype.qs = qs; +Vue.prototype.$axios = axios + +//ElementUI相关 +Vue.use(ElementUI) + + +Vue.config.productionTip = false + +new Vue({ + router, + store, + render: h => h(App) +}).$mount('#app') diff --git a/superMarket-frontend/src/router/index.js b/superMarket-frontend/src/router/index.js new file mode 100644 index 0000000..1fe2c4c --- /dev/null +++ b/superMarket-frontend/src/router/index.js @@ -0,0 +1,151 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' + +Vue.use(VueRouter) +const routes = [ + { + path: '/', + name: 'login', + component: () => import('../views/Login.vue'), + }, + { + path: '/index', + name: 'index', + redirect:'/home', + component: () => import('../views/index.vue'), + children: [ + { + path: '/home', + name: '/home', + component: () => import('../views/Home.vue') + }, + { + path: '/personal/edit_pwd', + name: '/personal/edit_pwd', + component: () => import('../views/personal/Edit_pwd.vue') + }, + + { + path: '/personal/information', + name: '/personal/information', + component: () => import('../views/personal/Information.vue') + }, + { + path: '/system/role/list', + name: '/system/role/list', + component: () => import('../views/system/role/List.vue') + }, + { + path: '/system/menu/list', + name: '/system/menu/list', + component: () => import('../views/system/menu/List.vue') + }, + + { + path: '/inventory_management/store/list', + name: '/inventory_management/store/list', + component: () => import('../views/inventory_management/store/List.vue') + }, + + { + path: '/inventory_management/detail_store_goods_in/list', + name: '/inventory_management/detail_store_goods_in/list', + component: () => import('../views/inventory_management/detail_store_goods_in/List.vue') + }, + { + path: '/inventory_management/detail_store_goods_out/list', + name: '/inventory_management/detail_store_goods_out/list', + component: () => import('../views/inventory_management/detail_store_goods_out/List.vue') + }, + + { + path: '/inventory_management/supplier/list', + name: '/inventory_management/supplier/list', + component: () => import('../views/inventory_management/supplier/List.vue') + }, + { + path: '/inventory_management/detail_store_goods_in/notice/list', + name: '/inventory_management/detail_store_goods_in/notice/list', + component: () => import('../views/inventory_management/detail_store_goods_in/notice/List.vue') + }, + { + path: '/inventory_management/detail_store_goods_out/notice/list', + name: '/inventory_management/detail_store_goods_out/notice/list', + component: () => import('../views/inventory_management/detail_store_goods_out/notice/List.vue') + }, + + { + path: '/inventory_management/store/storage_situation', + name: '/inventory_management/store/storage_situation', + component: () => import('../views/inventory_management/store/StorageSituation.vue') + }, + { + path: '/goods_management/goods_category/list', + name: '/goods_management/goods_category/list', + component: () => import('../views/goods_management/goods_category/List.vue') + }, + { + path: '/goods_management/goods/list', + name: '/goods_management/goods/list', + component: () => import('../views/goods_management/goods/List.vue') + }, + { + path: '/goods_management/goods_store/list', + name: '/goods_management/goods_store/list', + component: () => import('../views/goods_management/goods_store/List.vue') + }, + + { + path: '/goods_management/statistic_sale/list', + name: '/goods_management/statistic_sale/list', + component: () => import('../views/goods_management/statistic_sale/List.vue') + }, + { + path: '/goods_management/point_products/list', + name: '/goods_management/point_products/list', + component: () => import('../views/goods_management/point_products/List.vue') + }, + { + path: '/personnel_management/dept/list', + name: '/personnel_management/dept/list', + component: () => import('../views/personnel_management/dept/List.vue') + }, + { + path: '/personnel_management/employee/list', + name: '/personnel_management/employee/list', + component: () => import('../views/personnel_management/employee/List.vue') + }, + { + path: '/member_management/member/list', + name: '/member_management/member/list', + component: () => import('../views/member_management/member/List.vue') + }, + + { + path: '/sale_management/sale_cmd/list', + name: '/sale_management/sale_cmd/list', + component: () => import('../views/sale_management/sale_cmd/List.vue') + }, + + { + path: '/sale_management/sale_records/list', + name: '/sale_management/sale_records/list', + component: () => import('../views/sale_management/sale_records/List.vue') + }, + + { + path: '/sale_management/exchange_point_products_records/list', + name: '/sale_management/exchange_point_products_records/list', + component: () => import('../views/sale_management/exchange_point_products_records/List.vue') + }, + + ] + }, +] + +const router = new VueRouter({ + mode: "history", + routes +}) + +export default router diff --git a/superMarket-frontend/src/store/index.js b/superMarket-frontend/src/store/index.js new file mode 100644 index 0000000..129cadb --- /dev/null +++ b/superMarket-frontend/src/store/index.js @@ -0,0 +1,18 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +export default new Vuex.Store({ + state: { + BaseApi: "http://localhost:9291" + }, + getters: { + }, + mutations: { + }, + actions: { + }, + modules: { + } +}) diff --git a/superMarket-frontend/src/views/Home.vue b/superMarket-frontend/src/views/Home.vue new file mode 100644 index 0000000..dfac023 --- /dev/null +++ b/superMarket-frontend/src/views/Home.vue @@ -0,0 +1,38 @@ + + + + diff --git a/superMarket-frontend/src/views/Login.vue b/superMarket-frontend/src/views/Login.vue new file mode 100644 index 0000000..c4467e8 --- /dev/null +++ b/superMarket-frontend/src/views/Login.vue @@ -0,0 +1,185 @@ + + + diff --git a/superMarket-frontend/src/views/goods_management/goods/List.vue b/superMarket-frontend/src/views/goods_management/goods/List.vue new file mode 100644 index 0000000..b62065e --- /dev/null +++ b/superMarket-frontend/src/views/goods_management/goods/List.vue @@ -0,0 +1,886 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/goods_management/goods_category/List.vue b/superMarket-frontend/src/views/goods_management/goods_category/List.vue new file mode 100644 index 0000000..175f12d --- /dev/null +++ b/superMarket-frontend/src/views/goods_management/goods_category/List.vue @@ -0,0 +1,376 @@ +z + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/goods_management/goods_store/List.vue b/superMarket-frontend/src/views/goods_management/goods_store/List.vue new file mode 100644 index 0000000..4b3315d --- /dev/null +++ b/superMarket-frontend/src/views/goods_management/goods_store/List.vue @@ -0,0 +1,292 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/goods_management/point_products/List.vue b/superMarket-frontend/src/views/goods_management/point_products/List.vue new file mode 100644 index 0000000..a0fd236 --- /dev/null +++ b/superMarket-frontend/src/views/goods_management/point_products/List.vue @@ -0,0 +1,544 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/goods_management/statistic_sale/List.vue b/superMarket-frontend/src/views/goods_management/statistic_sale/List.vue new file mode 100644 index 0000000..4dbec53 --- /dev/null +++ b/superMarket-frontend/src/views/goods_management/statistic_sale/List.vue @@ -0,0 +1,183 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/index.vue b/superMarket-frontend/src/views/index.vue new file mode 100644 index 0000000..40f9c3e --- /dev/null +++ b/superMarket-frontend/src/views/index.vue @@ -0,0 +1,248 @@ + + + diff --git a/superMarket-frontend/src/views/inventory_management/detail_store_goods_in/List.vue b/superMarket-frontend/src/views/inventory_management/detail_store_goods_in/List.vue new file mode 100644 index 0000000..e2b69df --- /dev/null +++ b/superMarket-frontend/src/views/inventory_management/detail_store_goods_in/List.vue @@ -0,0 +1,601 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/inventory_management/detail_store_goods_in/notice/List.vue b/superMarket-frontend/src/views/inventory_management/detail_store_goods_in/notice/List.vue new file mode 100644 index 0000000..101f808 --- /dev/null +++ b/superMarket-frontend/src/views/inventory_management/detail_store_goods_in/notice/List.vue @@ -0,0 +1,410 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/inventory_management/detail_store_goods_out/List.vue b/superMarket-frontend/src/views/inventory_management/detail_store_goods_out/List.vue new file mode 100644 index 0000000..120a6ad --- /dev/null +++ b/superMarket-frontend/src/views/inventory_management/detail_store_goods_out/List.vue @@ -0,0 +1,656 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/inventory_management/detail_store_goods_out/notice/List.vue b/superMarket-frontend/src/views/inventory_management/detail_store_goods_out/notice/List.vue new file mode 100644 index 0000000..2a1b0d3 --- /dev/null +++ b/superMarket-frontend/src/views/inventory_management/detail_store_goods_out/notice/List.vue @@ -0,0 +1,676 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/inventory_management/store/List.vue b/superMarket-frontend/src/views/inventory_management/store/List.vue new file mode 100644 index 0000000..29502b5 --- /dev/null +++ b/superMarket-frontend/src/views/inventory_management/store/List.vue @@ -0,0 +1,268 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/inventory_management/store/StorageSituation.vue b/superMarket-frontend/src/views/inventory_management/store/StorageSituation.vue new file mode 100644 index 0000000..017c290 --- /dev/null +++ b/superMarket-frontend/src/views/inventory_management/store/StorageSituation.vue @@ -0,0 +1,324 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/inventory_management/supplier/List.vue b/superMarket-frontend/src/views/inventory_management/supplier/List.vue new file mode 100644 index 0000000..9a67f2b --- /dev/null +++ b/superMarket-frontend/src/views/inventory_management/supplier/List.vue @@ -0,0 +1,424 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/member_management/member/List.vue b/superMarket-frontend/src/views/member_management/member/List.vue new file mode 100644 index 0000000..15df181 --- /dev/null +++ b/superMarket-frontend/src/views/member_management/member/List.vue @@ -0,0 +1,659 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/personal/Edit_pwd.vue b/superMarket-frontend/src/views/personal/Edit_pwd.vue new file mode 100644 index 0000000..4233e5f --- /dev/null +++ b/superMarket-frontend/src/views/personal/Edit_pwd.vue @@ -0,0 +1,158 @@ + + + + diff --git a/superMarket-frontend/src/views/personal/Information.vue b/superMarket-frontend/src/views/personal/Information.vue new file mode 100644 index 0000000..0e7a289 --- /dev/null +++ b/superMarket-frontend/src/views/personal/Information.vue @@ -0,0 +1,280 @@ + + diff --git a/superMarket-frontend/src/views/personnel_management/dept/List.vue b/superMarket-frontend/src/views/personnel_management/dept/List.vue new file mode 100644 index 0000000..fdc56e2 --- /dev/null +++ b/superMarket-frontend/src/views/personnel_management/dept/List.vue @@ -0,0 +1,257 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/personnel_management/employee/List.vue b/superMarket-frontend/src/views/personnel_management/employee/List.vue new file mode 100644 index 0000000..7d4505c --- /dev/null +++ b/superMarket-frontend/src/views/personnel_management/employee/List.vue @@ -0,0 +1,1062 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/sale_management/exchange_point_products_records/List.vue b/superMarket-frontend/src/views/sale_management/exchange_point_products_records/List.vue new file mode 100644 index 0000000..0811281 --- /dev/null +++ b/superMarket-frontend/src/views/sale_management/exchange_point_products_records/List.vue @@ -0,0 +1,249 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/sale_management/sale_cmd/List.vue b/superMarket-frontend/src/views/sale_management/sale_cmd/List.vue new file mode 100644 index 0000000..6d4de9c --- /dev/null +++ b/superMarket-frontend/src/views/sale_management/sale_cmd/List.vue @@ -0,0 +1,1187 @@ + + + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/sale_management/sale_records/List.vue b/superMarket-frontend/src/views/sale_management/sale_records/List.vue new file mode 100644 index 0000000..39dd9a3 --- /dev/null +++ b/superMarket-frontend/src/views/sale_management/sale_records/List.vue @@ -0,0 +1,485 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/system/menu/List.vue b/superMarket-frontend/src/views/system/menu/List.vue new file mode 100644 index 0000000..c129c01 --- /dev/null +++ b/superMarket-frontend/src/views/system/menu/List.vue @@ -0,0 +1,214 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/src/views/system/role/List.vue b/superMarket-frontend/src/views/system/role/List.vue new file mode 100644 index 0000000..eca677f --- /dev/null +++ b/superMarket-frontend/src/views/system/role/List.vue @@ -0,0 +1,452 @@ + + + \ No newline at end of file diff --git a/superMarket-frontend/superMarket-frontend.iml b/superMarket-frontend/superMarket-frontend.iml new file mode 100644 index 0000000..8021953 --- /dev/null +++ b/superMarket-frontend/superMarket-frontend.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/superMarket-frontend/vue.config.js b/superMarket-frontend/vue.config.js new file mode 100644 index 0000000..d2d4399 --- /dev/null +++ b/superMarket-frontend/vue.config.js @@ -0,0 +1,13 @@ + +const { defineConfig } = require('@vue/cli-service') +module.exports = defineConfig({ + transpileDependencies: true +}) + +module.exports={ + devServer:{ + host:"localhost", + port: 9292 + }, +} +