├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── init_db_mysql ├── tempo_data_source.sql ├── tempo_page.sql ├── tempo_project.sql └── tempo_status.sql ├── package-lock.json ├── package.json └── src ├── app.js ├── assets ├── createTempo.png └── import.png ├── configs └── DB_mysql.js ├── controllers └── ProjectController.js ├── db └── mysql.js └── services ├── data_source.js ├── page_service.js ├── project_service.js └── project_status_service.js /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=JavaScript 2 | *.sql linguist-language=JavaScript 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 前端小菜鸟 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Web-editor-server 2 | 3 | 基于Koa.js开发的后端服务器,对[Web-Editor](https://github.com/bojue/Web-Editor)提供配套接口 4 | 5 | ### 1. 下载 6 | 7 | ```javascript 8 | git clone https://github.com/bojue/Web-editor-serve.git 9 | 10 | cd Web-editor-server 11 | 12 | npm install 13 | 14 | ``` 15 | 16 | ### 2. 初始化数据库 17 | 18 | 创建数据库(Database): ` tempo `,并且将 19 | 20 | ` Web-editor-server/init_db_mysql/ `目录下面数据库表导入数据库 ` tempo ` 21 | 22 | 1. 创建数据库:`tempo` 23 | 24 | ![创建数据库](/src/assets/createTempo.png) 25 | 26 | 2. 导入数据 27 | 28 | ![创建数据库](/src/assets/import.png) 29 | 30 | 31 | 32 | ### 3. 配置 33 | 34 | - 服务器 35 | 36 | 默认服务器地址localhost:3000 37 | 38 | 通过项目` src/app.js `文件配置自己需要的服务器: 39 | 40 | ```javascript 41 | const HOST_NAME = 'localhost'; 42 | const POST = 3000; 43 | ``` 44 | 45 | - 数据库 46 | 47 | 目录: ` src/configs/DB_mysql.js `配置服务器连接信息: 48 | 49 | ```javascript 50 | const config = { 51 | host : 'localhost', 52 | user : 'root', 53 | password : "admin123", 54 | database : 'tempo' 55 | } 56 | ``` 57 | ### 4. Run server 58 | 59 | ```javascript 60 | npm run start 61 | ``` 62 | -------------------------------------------------------------------------------- /init_db_mysql/tempo_data_source.sql: -------------------------------------------------------------------------------- 1 | -- MySQL dump 10.13 Distrib 8.0.12, for macos10.13 (x86_64) 2 | -- 3 | -- Host: localhost Database: tempo 4 | -- ------------------------------------------------------ 5 | -- Server version 8.0.18 6 | 7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 10 | SET NAMES utf8 ; 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 12 | /*!40103 SET TIME_ZONE='+00:00' */; 13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 17 | 18 | -- 19 | -- Table structure for table `data_source` 20 | -- 21 | 22 | DROP TABLE IF EXISTS `data_source`; 23 | /*!40101 SET @saved_cs_client = @@character_set_client */; 24 | SET character_set_client = utf8 ; 25 | CREATE TABLE `data_source` ( 26 | `id` int(11) NOT NULL AUTO_INCREMENT, 27 | `idustry` int(11) DEFAULT NULL, 28 | `idustry_name` varchar(200) NOT NULL, 29 | `idustry_sub` int(11) DEFAULT NULL, 30 | `idustry_sub_name` varchar(200) NOT NULL, 31 | `data_id` int(11) NOT NULL, 32 | `data_name` varchar(100) DEFAULT NULL, 33 | `value` decimal(10,0) DEFAULT NULL, 34 | `dataType` varchar(40) DEFAULT NULL, 35 | PRIMARY KEY (`id`) 36 | ) ENGINE=InnoDB AUTO_INCREMENT=1007 DEFAULT CHARSET=utf8; 37 | /*!40101 SET character_set_client = @saved_cs_client */; 38 | 39 | -- 40 | -- Dumping data for table `data_source` 41 | -- 42 | 43 | LOCK TABLES `data_source` WRITE; 44 | /*!40000 ALTER TABLE `data_source` DISABLE KEYS */; 45 | INSERT INTO `data_source` VALUES (1000,1,'互联网',1,'电商',1,'近7日交易额增长率',11,'gauge'),(1001,1,'互联网',1,'电商',2,'第一季度GVM增长率',44,'gauge'),(1002,1,'互联网',1,'电商',3,'2020东南亚交易额长率',33,'gauge'),(1003,1,'互联网',2,'游戏',4,'付费用户增长率',77,'gauge'),(1004,1,'互联网',2,'游戏',5,'用户时常增长率',34,'gauge'),(1005,2,'工业',1,'IDC监控管理',1,'一季度市场占有率增长',2,'gauge'),(1006,2,'工业',1,'人脸识别',2,'监控市场规模增长率',9,'gauge'); 46 | /*!40000 ALTER TABLE `data_source` ENABLE KEYS */; 47 | UNLOCK TABLES; 48 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 49 | 50 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 51 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 52 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 53 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 54 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 55 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 56 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 57 | 58 | -- Dump completed on 2020-04-16 23:07:55 59 | -------------------------------------------------------------------------------- /init_db_mysql/tempo_page.sql: -------------------------------------------------------------------------------- 1 | -- MySQL dump 10.13 Distrib 8.0.12, for macos10.13 (x86_64) 2 | -- 3 | -- Host: localhost Database: tempo 4 | -- ------------------------------------------------------ 5 | -- Server version 8.0.18 6 | 7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 10 | SET NAMES utf8 ; 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 12 | /*!40103 SET TIME_ZONE='+00:00' */; 13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 17 | 18 | -- 19 | -- Table structure for table `page` 20 | -- 21 | 22 | DROP TABLE IF EXISTS `page`; 23 | /*!40101 SET @saved_cs_client = @@character_set_client */; 24 | SET character_set_client = utf8 ; 25 | CREATE TABLE `page` ( 26 | `id` int(11) NOT NULL AUTO_INCREMENT, 27 | `projectId` int(20) DEFAULT NULL, 28 | `name` varchar(100) NOT NULL, 29 | `appendName` varchar(100) NOT NULL, 30 | `description` varchar(200) NOT NULL, 31 | `status` int(10) DEFAULT NULL, 32 | `creator_id` int(100) DEFAULT NULL, 33 | `create_time` datetime DEFAULT NULL, 34 | `update_time` datetime DEFAULT NULL, 35 | `type` varchar(50) DEFAULT NULL, 36 | `creator` int(20) DEFAULT NULL, 37 | `style` varchar(500) DEFAULT NULL, 38 | `componentList` varchar(5000) DEFAULT NULL, 39 | `vip_status` int(20) DEFAULT NULL, 40 | `width` int(225) DEFAULT '1200', 41 | `height` int(225) DEFAULT NULL, 42 | PRIMARY KEY (`id`) 43 | ) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; 44 | /*!40101 SET character_set_client = @saved_cs_client */; 45 | 46 | -- 47 | -- Dumping data for table `page` 48 | -- 49 | 50 | LOCK TABLES `page` WRITE; 51 | /*!40000 ALTER TABLE `page` DISABLE KEYS */; 52 | INSERT INTO `page` VALUES (1,1,'列表','列表','无',0,NULL,'2020-01-05 14:38:23','2020-01-09 15:27:56',NULL,1,'{\'width\':\'1000\',\'height\':\'800\',\'background\':\'#fff\'}','[{\"compIndex\":2,\"name\":\"图片\",\"type\":\"img\",\"data\":{\"img_url\":\"assets/imgs/es.jpeg\"},\"style\":{\"position\":\"absolute\",\"top\":68,\"left\":75,\"height\":80,\"width\":120,\"borderColor\":\"#FF0000\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\"},\"contentPageSize\":{\"top\":66,\"left\":227,\"rigth\":0,\"bottom\":0}},{\"compIndex\":2,\"name\":\"输入框\",\"type\":\"input\",\"data\":{\"input_val\":\"\",\"placeholder\":\"输入\"},\"style\":{\"position\":\"absolute\",\"top\":246,\"left\":68,\"height\":30,\"width\":220,\"borderColor\":\"#FF0000\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\"},\"contentPageSize\":{\"top\":66,\"left\":227,\"rigth\":0,\"bottom\":0}},{\"compIndex\":2,\"name\":\"图片\",\"type\":\"img\",\"data\":{\"img_url\":\"assets/imgs/es.jpeg\"},\"style\":{\"position\":\"absolute\",\"top\":223,\"left\":243,\"height\":80,\"width\":120,\"borderColor\":\"#FF0000\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\"},\"contentPageSize\":{\"top\":66,\"left\":227,\"rigth\":0,\"bottom\":0}},{\"compIndex\":2,\"name\":\"输入框\",\"type\":\"input\",\"data\":{\"input_val\":\"\",\"placeholder\":\"输入\"},\"style\":{\"position\":\"absolute\",\"top\":50,\"left\":254,\"height\":30,\"width\":220,\"borderColor\":\"#FF0000\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\"},\"contentPageSize\":{\"top\":66,\"left\":227,\"rigth\":0,\"bottom\":0}},{\"compIndex\":2,\"name\":\"图片\",\"type\":\"img\",\"data\":{\"img_url\":\"assets/imgs/es.jpeg\"},\"style\":{\"position\":\"absolute\",\"top\":120,\"left\":265,\"height\":80,\"width\":120,\"borderColor\":\"#FF0000\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\"},\"contentPageSize\":{\"top\":66,\"left\":227,\"rigth\":0,\"bottom\":0}},{\"compIndex\":3,\"name\":\"饼图\",\"type\":\"chart_pie\",\"data\":{},\"style\":{\"position\":\"absolute\",\"top\":293,\"left\":66,\"height\":300,\"width\":300,\"borderColor\":\"#FF0000\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\"},\"event\":{},\"contentPageSize\":{\"top\":66,\"left\":227,\"rigth\":0,\"bottom\":0}}]',NULL,1200,700),(21,1,'详情','0','0',NULL,NULL,'2020-03-27 00:38:44','2020-03-27 00:38:44','default',1,'0','[]',1,1200,700),(25,5,'页面','0','0',NULL,NULL,'2020-03-27 10:31:04','2020-03-27 10:35:06',NULL,1,'0','[{\"compIndex\":3,\"name\":\"按钮\",\"type\":\"button\",\"data\":{\"button_val\":\"确认\"},\"style\":{\"position\":\"absolute\",\"top\":102,\"left\":200,\"height\":30,\"width\":80,\"borderColor\":\"rgba(255,0,0,0.6)\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\",\"userDrag\":\"element\"},\"event\":{\"clickBool\":false,\"click\":{\"data\":null},\"routeBool\":true,\"route\":{\"route_link\":\"home\",\"data\":null}},\"contentPageSize\":{\"top\":65,\"left\":227,\"rigth\":0,\"bottom\":0}}]',1,1200,700),(26,9,'test','0','0',NULL,NULL,'2020-03-27 13:32:54','2020-03-27 16:01:59',NULL,1,'0','[]',1,1200,700),(46,6,'测试','0','0',NULL,NULL,'2020-04-04 21:56:15','2020-04-07 14:33:46',NULL,1,'0','[{\"compIndex\":3,\"name\":\"按钮\",\"type\":\"button\",\"data\":{\"button_val\":\"确认\"},\"style\":{\"position\":\"absolute\",\"top\":41,\"left\":234,\"height\":30,\"width\":80,\"borderColor\":\"rgba(255,0,0,0.6)\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\",\"userDrag\":\"element\"},\"event\":{\"routeBool\":false,\"route\":{\"route_url\":\"home\",\"data\":{\"param\":\"23\",\"pageId\":\"7\",\"projectId\":\"6\"}}},\"contentPageSize\":{\"top\":65,\"left\":227,\"rigth\":0,\"bottom\":0}}]',1,1200,700),(47,2,'3232','3232','0',NULL,NULL,'2020-04-04 22:47:27','2020-04-04 23:00:59',NULL,1,'null','[{\"compIndex\":3,\"name\":\"按钮\",\"type\":\"button\",\"data\":{\"button_val\":\"确认\"},\"style\":{\"position\":\"absolute\",\"top\":75,\"left\":317,\"height\":30,\"width\":80,\"borderColor\":\"rgba(255,0,0,0.6)\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\",\"userDrag\":\"element\"},\"event\":{\"clickBool\":false,\"click\":{\"data\":null},\"routeBool\":true,\"route\":{\"route_link\":\"home\",\"data\":null}},\"contentPageSize\":{\"top\":65,\"left\":227,\"rigth\":0,\"bottom\":0}},{\"compIndex\":2,\"name\":\"图片\",\"type\":\"img\",\"data\":{\"img_url\":\"assets/imgs/you.jpg\"},\"style\":{\"position\":\"absolute\",\"top\":0,\"left\":0,\"height\":225,\"width\":258,\"borderColor\":\"rgba(255,0,0,0.6)\",\"borderWidth\":1,\"borderStyle\":\"solid\",\"paddingTopBottom\":0,\"paddingLeftRight\":0,\"fontSize\":14,\"textAlign\":\"center\",\"userDrag\":\"element\"},\"contentPageSize\":{\"top\":65,\"left\":227,\"rigth\":0,\"bottom\":0}}]',1,1200,700); 53 | /*!40000 ALTER TABLE `page` ENABLE KEYS */; 54 | UNLOCK TABLES; 55 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 56 | 57 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 58 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 59 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 60 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 61 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 62 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 63 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 64 | 65 | -- Dump completed on 2020-04-16 23:07:56 66 | -------------------------------------------------------------------------------- /init_db_mysql/tempo_project.sql: -------------------------------------------------------------------------------- 1 | -- MySQL dump 10.13 Distrib 8.0.12, for macos10.13 (x86_64) 2 | -- 3 | -- Host: localhost Database: tempo 4 | -- ------------------------------------------------------ 5 | -- Server version 8.0.18 6 | 7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 10 | SET NAMES utf8 ; 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 12 | /*!40103 SET TIME_ZONE='+00:00' */; 13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 17 | 18 | -- 19 | -- Table structure for table `project` 20 | -- 21 | 22 | DROP TABLE IF EXISTS `project`; 23 | /*!40101 SET @saved_cs_client = @@character_set_client */; 24 | SET character_set_client = utf8 ; 25 | CREATE TABLE `project` ( 26 | `id` int(11) NOT NULL AUTO_INCREMENT, 27 | `name` varchar(100) NOT NULL, 28 | `appendName` varchar(100) NOT NULL, 29 | `description` varchar(200) NOT NULL, 30 | `status` int(10) DEFAULT NULL, 31 | `vip_staus` int(10) DEFAULT NULL, 32 | `creator` varchar(100) DEFAULT NULL, 33 | `create_time` datetime DEFAULT NULL, 34 | `update_time` datetime DEFAULT NULL, 35 | `type` varchar(50) DEFAULT NULL, 36 | PRIMARY KEY (`id`) 37 | ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; 38 | /*!40101 SET character_set_client = @saved_cs_client */; 39 | 40 | -- 41 | -- Dumping data for table `project` 42 | -- 43 | 44 | LOCK TABLES `project` WRITE; 45 | /*!40000 ALTER TABLE `project` DISABLE KEYS */; 46 | INSERT INTO `project` VALUES (1,'销售报表','销售报表','统计的销售Dashboard',0,0,'1','2020-01-05 10:38:41','2020-01-05 10:38:41',NULL),(2,'运营报表系统','运营报表系统','运营报表数据',0,0,'1','2020-01-05 11:02:58','2020-01-05 11:02:58','cutome'),(6,'新项目','新项','无',NULL,0,'1','2020-03-27 13:16:25','2020-03-27 13:16:25','0'); 47 | /*!40000 ALTER TABLE `project` ENABLE KEYS */; 48 | UNLOCK TABLES; 49 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 50 | 51 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 52 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 53 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 54 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 55 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 56 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 57 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 58 | 59 | -- Dump completed on 2020-04-16 23:07:55 60 | -------------------------------------------------------------------------------- /init_db_mysql/tempo_status.sql: -------------------------------------------------------------------------------- 1 | -- MySQL dump 10.13 Distrib 8.0.12, for macos10.13 (x86_64) 2 | -- 3 | -- Host: localhost Database: tempo 4 | -- ------------------------------------------------------ 5 | -- Server version 8.0.18 6 | 7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 10 | SET NAMES utf8 ; 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 12 | /*!40103 SET TIME_ZONE='+00:00' */; 13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 17 | 18 | -- 19 | -- Table structure for table `status` 20 | -- 21 | 22 | DROP TABLE IF EXISTS `status`; 23 | /*!40101 SET @saved_cs_client = @@character_set_client */; 24 | SET character_set_client = utf8 ; 25 | CREATE TABLE `status` ( 26 | `id` int(11) DEFAULT NULL, 27 | `name` varchar(100) NOT NULL, 28 | `src` varchar(100) NOT NULL, 29 | `description` varchar(200) NOT NULL 30 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; 31 | /*!40101 SET character_set_client = @saved_cs_client */; 32 | 33 | -- 34 | -- Dumping data for table `status` 35 | -- 36 | 37 | LOCK TABLES `status` WRITE; 38 | /*!40000 ALTER TABLE `status` DISABLE KEYS */; 39 | INSERT INTO `status` VALUES (2,'待发布','assets/icons/state_pres.svg','待发布'),(3,'未发布','assets/icons/state_pre.svg','未发布'),(1,'已发布','assets/icons/state_official.svg','已发布'); 40 | /*!40000 ALTER TABLE `status` ENABLE KEYS */; 41 | UNLOCK TABLES; 42 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 43 | 44 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 45 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 46 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 47 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 48 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 49 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 50 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 51 | 52 | -- Dump completed on 2020-04-16 23:07:55 53 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web-editor-node", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.7", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 11 | "dev": true, 12 | "requires": { 13 | "mime-types": "~2.1.24", 14 | "negotiator": "0.6.2" 15 | } 16 | }, 17 | "any-promise": { 18 | "version": "1.3.0", 19 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 20 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", 21 | "dev": true 22 | }, 23 | "bignumber.js": { 24 | "version": "7.2.1", 25 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", 26 | "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" 27 | }, 28 | "bson": { 29 | "version": "1.1.3", 30 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz", 31 | "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg==" 32 | }, 33 | "bytes": { 34 | "version": "3.1.0", 35 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 36 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 37 | }, 38 | "cache-content-type": { 39 | "version": "1.0.1", 40 | "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", 41 | "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", 42 | "dev": true, 43 | "requires": { 44 | "mime-types": "^2.1.18", 45 | "ylru": "^1.2.0" 46 | } 47 | }, 48 | "co": { 49 | "version": "4.6.0", 50 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 51 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 52 | "dev": true 53 | }, 54 | "co-body": { 55 | "version": "6.0.0", 56 | "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.0.0.tgz", 57 | "integrity": "sha512-9ZIcixguuuKIptnY8yemEOuhb71L/lLf+Rl5JfJEUiDNJk0e02MBt7BPxR2GEh5mw8dPthQYR4jPI/BnS1MQgw==", 58 | "requires": { 59 | "inflation": "^2.0.0", 60 | "qs": "^6.5.2", 61 | "raw-body": "^2.3.3", 62 | "type-is": "^1.6.16" 63 | } 64 | }, 65 | "content-disposition": { 66 | "version": "0.5.3", 67 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 68 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 69 | "dev": true, 70 | "requires": { 71 | "safe-buffer": "5.1.2" 72 | } 73 | }, 74 | "content-type": { 75 | "version": "1.0.4", 76 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 77 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 78 | "dev": true 79 | }, 80 | "cookies": { 81 | "version": "0.8.0", 82 | "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", 83 | "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", 84 | "dev": true, 85 | "requires": { 86 | "depd": "~2.0.0", 87 | "keygrip": "~1.1.0" 88 | }, 89 | "dependencies": { 90 | "depd": { 91 | "version": "2.0.0", 92 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 93 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 94 | "dev": true 95 | } 96 | } 97 | }, 98 | "copy-to": { 99 | "version": "2.0.1", 100 | "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", 101 | "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" 102 | }, 103 | "core-util-is": { 104 | "version": "1.0.2", 105 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 106 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 107 | }, 108 | "debug": { 109 | "version": "3.1.0", 110 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 111 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 112 | "dev": true, 113 | "requires": { 114 | "ms": "2.0.0" 115 | } 116 | }, 117 | "deep-equal": { 118 | "version": "1.0.1", 119 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", 120 | "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", 121 | "dev": true 122 | }, 123 | "delegates": { 124 | "version": "1.0.0", 125 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 126 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", 127 | "dev": true 128 | }, 129 | "depd": { 130 | "version": "1.1.2", 131 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 132 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 133 | }, 134 | "destroy": { 135 | "version": "1.0.4", 136 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 137 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", 138 | "dev": true 139 | }, 140 | "ee-first": { 141 | "version": "1.1.1", 142 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 143 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", 144 | "dev": true 145 | }, 146 | "encodeurl": { 147 | "version": "1.0.2", 148 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 149 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 150 | "dev": true 151 | }, 152 | "error-inject": { 153 | "version": "1.0.0", 154 | "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", 155 | "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=", 156 | "dev": true 157 | }, 158 | "escape-html": { 159 | "version": "1.0.3", 160 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 161 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 162 | "dev": true 163 | }, 164 | "fresh": { 165 | "version": "0.5.2", 166 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 167 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", 168 | "dev": true 169 | }, 170 | "http-assert": { 171 | "version": "1.4.1", 172 | "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", 173 | "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", 174 | "dev": true, 175 | "requires": { 176 | "deep-equal": "~1.0.1", 177 | "http-errors": "~1.7.2" 178 | } 179 | }, 180 | "http-errors": { 181 | "version": "1.7.3", 182 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 183 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 184 | "requires": { 185 | "depd": "~1.1.2", 186 | "inherits": "2.0.4", 187 | "setprototypeof": "1.1.1", 188 | "statuses": ">= 1.5.0 < 2", 189 | "toidentifier": "1.0.0" 190 | } 191 | }, 192 | "iconv-lite": { 193 | "version": "0.4.24", 194 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 195 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 196 | "requires": { 197 | "safer-buffer": ">= 2.1.2 < 3" 198 | } 199 | }, 200 | "inflation": { 201 | "version": "2.0.0", 202 | "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", 203 | "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" 204 | }, 205 | "inherits": { 206 | "version": "2.0.4", 207 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 208 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 209 | }, 210 | "is-generator-function": { 211 | "version": "1.0.7", 212 | "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", 213 | "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==", 214 | "dev": true 215 | }, 216 | "isarray": { 217 | "version": "1.0.0", 218 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 219 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 220 | }, 221 | "keygrip": { 222 | "version": "1.1.0", 223 | "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", 224 | "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", 225 | "dev": true, 226 | "requires": { 227 | "tsscmp": "1.0.6" 228 | } 229 | }, 230 | "koa": { 231 | "version": "2.11.0", 232 | "resolved": "https://registry.npmjs.org/koa/-/koa-2.11.0.tgz", 233 | "integrity": "sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==", 234 | "dev": true, 235 | "requires": { 236 | "accepts": "^1.3.5", 237 | "cache-content-type": "^1.0.0", 238 | "content-disposition": "~0.5.2", 239 | "content-type": "^1.0.4", 240 | "cookies": "~0.8.0", 241 | "debug": "~3.1.0", 242 | "delegates": "^1.0.0", 243 | "depd": "^1.1.2", 244 | "destroy": "^1.0.4", 245 | "encodeurl": "^1.0.2", 246 | "error-inject": "^1.0.0", 247 | "escape-html": "^1.0.3", 248 | "fresh": "~0.5.2", 249 | "http-assert": "^1.3.0", 250 | "http-errors": "^1.6.3", 251 | "is-generator-function": "^1.0.7", 252 | "koa-compose": "^4.1.0", 253 | "koa-convert": "^1.2.0", 254 | "on-finished": "^2.3.0", 255 | "only": "~0.0.2", 256 | "parseurl": "^1.3.2", 257 | "statuses": "^1.5.0", 258 | "type-is": "^1.6.16", 259 | "vary": "^1.1.2" 260 | } 261 | }, 262 | "koa-bodyparser": { 263 | "version": "4.2.1", 264 | "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.2.1.tgz", 265 | "integrity": "sha512-UIjPAlMZfNYDDe+4zBaOAUKYqkwAGcIU6r2ARf1UOXPAlfennQys5IiShaVeNf7KkVBlf88f2LeLvBFvKylttw==", 266 | "requires": { 267 | "co-body": "^6.0.0", 268 | "copy-to": "^2.0.1" 269 | } 270 | }, 271 | "koa-compose": { 272 | "version": "4.1.0", 273 | "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", 274 | "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", 275 | "dev": true 276 | }, 277 | "koa-convert": { 278 | "version": "1.2.0", 279 | "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", 280 | "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", 281 | "dev": true, 282 | "requires": { 283 | "co": "^4.6.0", 284 | "koa-compose": "^3.0.0" 285 | }, 286 | "dependencies": { 287 | "koa-compose": { 288 | "version": "3.2.1", 289 | "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", 290 | "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", 291 | "dev": true, 292 | "requires": { 293 | "any-promise": "^1.1.0" 294 | } 295 | } 296 | } 297 | }, 298 | "koa-router": { 299 | "version": "7.4.0", 300 | "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-7.4.0.tgz", 301 | "integrity": "sha512-IWhaDXeAnfDBEpWS6hkGdZ1ablgr6Q6pGdXCyK38RbzuH4LkUOpPqPw+3f8l8aTDrQmBQ7xJc0bs2yV4dzcO+g==", 302 | "dev": true, 303 | "requires": { 304 | "debug": "^3.1.0", 305 | "http-errors": "^1.3.1", 306 | "koa-compose": "^3.0.0", 307 | "methods": "^1.0.1", 308 | "path-to-regexp": "^1.1.1", 309 | "urijs": "^1.19.0" 310 | }, 311 | "dependencies": { 312 | "koa-compose": { 313 | "version": "3.2.1", 314 | "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", 315 | "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", 316 | "dev": true, 317 | "requires": { 318 | "any-promise": "^1.1.0" 319 | } 320 | } 321 | } 322 | }, 323 | "lodash": { 324 | "version": "4.17.15", 325 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 326 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" 327 | }, 328 | "media-typer": { 329 | "version": "0.3.0", 330 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 331 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 332 | }, 333 | "memory-pager": { 334 | "version": "1.5.0", 335 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 336 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 337 | "optional": true 338 | }, 339 | "methods": { 340 | "version": "1.1.2", 341 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 342 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 343 | "dev": true 344 | }, 345 | "mime-db": { 346 | "version": "1.40.0", 347 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 348 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 349 | }, 350 | "mime-types": { 351 | "version": "2.1.24", 352 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 353 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 354 | "requires": { 355 | "mime-db": "1.40.0" 356 | } 357 | }, 358 | "moment": { 359 | "version": "2.24.0", 360 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", 361 | "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" 362 | }, 363 | "mongodb": { 364 | "version": "3.4.0", 365 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.0.tgz", 366 | "integrity": "sha512-W90jm/n8F0Edm47ljkVRK9l8qGW9g8T9ZSiZWRiUP58wLhsCJCeN/JxdpVnH0CUwwAw2hITUcCo9x58udpX2Uw==", 367 | "requires": { 368 | "bson": "^1.1.1", 369 | "require_optional": "^1.0.1", 370 | "safe-buffer": "^5.1.2", 371 | "saslprep": "^1.0.0" 372 | } 373 | }, 374 | "ms": { 375 | "version": "2.0.0", 376 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 377 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 378 | "dev": true 379 | }, 380 | "mysql": { 381 | "version": "2.17.1", 382 | "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.17.1.tgz", 383 | "integrity": "sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA==", 384 | "requires": { 385 | "bignumber.js": "7.2.1", 386 | "readable-stream": "2.3.6", 387 | "safe-buffer": "5.1.2", 388 | "sqlstring": "2.3.1" 389 | } 390 | }, 391 | "negotiator": { 392 | "version": "0.6.2", 393 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 394 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", 395 | "dev": true 396 | }, 397 | "on-finished": { 398 | "version": "2.3.0", 399 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 400 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 401 | "dev": true, 402 | "requires": { 403 | "ee-first": "1.1.1" 404 | } 405 | }, 406 | "only": { 407 | "version": "0.0.2", 408 | "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", 409 | "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", 410 | "dev": true 411 | }, 412 | "parseurl": { 413 | "version": "1.3.3", 414 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 415 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 416 | "dev": true 417 | }, 418 | "path-to-regexp": { 419 | "version": "1.8.0", 420 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", 421 | "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", 422 | "dev": true, 423 | "requires": { 424 | "isarray": "0.0.1" 425 | }, 426 | "dependencies": { 427 | "isarray": { 428 | "version": "0.0.1", 429 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 430 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 431 | "dev": true 432 | } 433 | } 434 | }, 435 | "process-nextick-args": { 436 | "version": "2.0.1", 437 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 438 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 439 | }, 440 | "qs": { 441 | "version": "6.9.1", 442 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", 443 | "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" 444 | }, 445 | "raw-body": { 446 | "version": "2.4.1", 447 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", 448 | "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", 449 | "requires": { 450 | "bytes": "3.1.0", 451 | "http-errors": "1.7.3", 452 | "iconv-lite": "0.4.24", 453 | "unpipe": "1.0.0" 454 | } 455 | }, 456 | "readable-stream": { 457 | "version": "2.3.6", 458 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 459 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 460 | "requires": { 461 | "core-util-is": "~1.0.0", 462 | "inherits": "~2.0.3", 463 | "isarray": "~1.0.0", 464 | "process-nextick-args": "~2.0.0", 465 | "safe-buffer": "~5.1.1", 466 | "string_decoder": "~1.1.1", 467 | "util-deprecate": "~1.0.1" 468 | } 469 | }, 470 | "require_optional": { 471 | "version": "1.0.1", 472 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 473 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 474 | "requires": { 475 | "resolve-from": "^2.0.0", 476 | "semver": "^5.1.0" 477 | } 478 | }, 479 | "resolve-from": { 480 | "version": "2.0.0", 481 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 482 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 483 | }, 484 | "safe-buffer": { 485 | "version": "5.1.2", 486 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 487 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 488 | }, 489 | "safer-buffer": { 490 | "version": "2.1.2", 491 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 492 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 493 | }, 494 | "saslprep": { 495 | "version": "1.0.3", 496 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 497 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 498 | "optional": true, 499 | "requires": { 500 | "sparse-bitfield": "^3.0.3" 501 | } 502 | }, 503 | "semver": { 504 | "version": "5.7.1", 505 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 506 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 507 | }, 508 | "setprototypeof": { 509 | "version": "1.1.1", 510 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 511 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 512 | }, 513 | "sparse-bitfield": { 514 | "version": "3.0.3", 515 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 516 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 517 | "optional": true, 518 | "requires": { 519 | "memory-pager": "^1.0.2" 520 | } 521 | }, 522 | "sqlstring": { 523 | "version": "2.3.1", 524 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", 525 | "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" 526 | }, 527 | "statuses": { 528 | "version": "1.5.0", 529 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 530 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 531 | }, 532 | "string_decoder": { 533 | "version": "1.1.1", 534 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 535 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 536 | "requires": { 537 | "safe-buffer": "~5.1.0" 538 | } 539 | }, 540 | "toidentifier": { 541 | "version": "1.0.0", 542 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 543 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 544 | }, 545 | "tsscmp": { 546 | "version": "1.0.6", 547 | "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", 548 | "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", 549 | "dev": true 550 | }, 551 | "type-is": { 552 | "version": "1.6.18", 553 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 554 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 555 | "requires": { 556 | "media-typer": "0.3.0", 557 | "mime-types": "~2.1.24" 558 | } 559 | }, 560 | "unpipe": { 561 | "version": "1.0.0", 562 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 563 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 564 | }, 565 | "urijs": { 566 | "version": "1.19.2", 567 | "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.2.tgz", 568 | "integrity": "sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w==", 569 | "dev": true 570 | }, 571 | "util-deprecate": { 572 | "version": "1.0.2", 573 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 574 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 575 | }, 576 | "vary": { 577 | "version": "1.1.2", 578 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 579 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 580 | "dev": true 581 | }, 582 | "ylru": { 583 | "version": "1.2.1", 584 | "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", 585 | "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", 586 | "dev": true 587 | } 588 | } 589 | } 590 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web-editor-node", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node src/app.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "koa": "^2.11.0", 14 | "koa-router": "^7.4.0" 15 | }, 16 | "dependencies": { 17 | "koa-bodyparser": "^4.2.1", 18 | "lodash": "^4.17.15", 19 | "moment": "^2.24.0", 20 | "mongodb": "^3.4.0", 21 | "mysql": "^2.17.1" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app.js: -------------------------------------------------------------------------------- 1 | const Koa = require('koa'); 2 | const app = new Koa(); 3 | const bodyParser = require('koa-bodyparser') 4 | const Router = require("koa-router"); 5 | const loadsh = require('lodash') 6 | 7 | const router = new Router(); 8 | 9 | const HOST_NAME = 'localhost'; 10 | const POST = 3000; 11 | const projectService = require('./services/project_service'); 12 | const projectStatusService = require('./services/project_status_service'); 13 | const pageService = require('./services/page_service'); 14 | const dataSourceService = require('./services/data_source'); 15 | 16 | const getDataSourceByType = async(ctx) => { 17 | const paramis = ctx.params['idustry']; 18 | const data = await dataSourceService.getDataSource(paramis); 19 | ctx.body = { 20 | msg:"success", 21 | data:data 22 | } 23 | } 24 | 25 | const getProjects = async(ctx) => { 26 | const data = await projectService.getList(); 27 | ctx.body = { 28 | msg:'success', 29 | data:data 30 | } 31 | } 32 | 33 | const createProject = async(ctx, next) => { 34 | let params = ctx.request.body; 35 | const data = await projectService.create(params); 36 | ctx.body = { 37 | msg:"success", 38 | data:data 39 | } 40 | } 41 | 42 | const getProject = async (ctx) => { 43 | const id = ctx.params['id']; 44 | if(!id) { 45 | ctx.body = { 46 | mes:'error' 47 | } 48 | }else { 49 | const data = await projectService.getById(id); 50 | ctx.body = { 51 | msg:'scuess', 52 | data:data 53 | } 54 | } 55 | } 56 | 57 | const deleteProject = async(ctx, next) => { 58 | let params = ctx.params['projectId'] 59 | const data = await projectService.delete(params); 60 | ctx.body = { 61 | msg:"success" 62 | }; 63 | } 64 | 65 | 66 | const getPages = async(ctx) => { 67 | const projectId = ctx.params['projectId'] || 1; 68 | try { 69 | const data = await pageService.getList(projectId); 70 | ctx.body = { 71 | msg:'success', 72 | data:data 73 | } 74 | } catch (error) { 75 | ctx.throw(statusCode, message) 76 | } 77 | 78 | } 79 | 80 | const createPage = async(ctx, next) => { 81 | let params = ctx.request.body; 82 | const data = await pageService.create(params); 83 | ctx.body = { 84 | msg:"success", 85 | data:data 86 | } 87 | } 88 | 89 | const updatePage = async(ctx, next) => { 90 | let params = ctx.request.body; 91 | const data = await pageService.update(params); 92 | ctx.body = { 93 | msg:"success" 94 | }; 95 | } 96 | 97 | const deletePage = async(ctx, next) => { 98 | let params = ctx.params['pageId'] 99 | const data = await pageService.delete(params); 100 | ctx.body = { 101 | msg:"success" 102 | }; 103 | } 104 | 105 | const getStates = async(ctx, next) => { 106 | try { 107 | const data = await projectStatusService.getStates(); 108 | ctx.body = { 109 | msg:'success', 110 | data:data 111 | } 112 | } catch (error) { 113 | ctx.throw(statusCode, message) 114 | } 115 | } 116 | 117 | router 118 | .post('/project', createProject) 119 | .get('/projects', getProjects) 120 | .get('/project/:id', getProject) 121 | .delete('/project/:projectId',deleteProject) 122 | .get('/pages/:projectId', getPages) 123 | .post('/page', createPage) 124 | .put('/page', updatePage) 125 | .delete('/page/:pageId', deletePage) 126 | .get('/states', getStates) 127 | .get('/dataSource', getDataSourceByType) 128 | // .get('/dataSource/:idustry', getDataSourceByType)s 129 | 130 | app.on("error", (err, ctx) => { 131 | ctx.body ={ 132 | msg:'error' 133 | } 134 | }); 135 | app 136 | .use(bodyParser()) 137 | .use(router.routes()) 138 | .use(router.allowedMethods()) 139 | .listen(POST, () => { 140 | console.log(`Server running at http://${HOST_NAME}:${POST}`) 141 | }); -------------------------------------------------------------------------------- /src/assets/createTempo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bojue/Web-editor-server/591928ab6c76f7f0d23916f0193b9a05100aa722/src/assets/createTempo.png -------------------------------------------------------------------------------- /src/assets/import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bojue/Web-editor-server/591928ab6c76f7f0d23916f0193b9a05100aa722/src/assets/import.png -------------------------------------------------------------------------------- /src/configs/DB_mysql.js: -------------------------------------------------------------------------------- 1 | const config = { 2 | host : 'localhost', 3 | user : 'root', 4 | password : "", 5 | database : 'tempo' 6 | } 7 | 8 | module.exports = config; -------------------------------------------------------------------------------- /src/controllers/ProjectController.js: -------------------------------------------------------------------------------- 1 | const project = require('../services/project_service') 2 | 3 | export class ProjectController { 4 | constructor() { 5 | 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/db/mysql.js: -------------------------------------------------------------------------------- 1 | var mysql = require('mysql'); 2 | var config = require('../configs/DB_mysql') 3 | var connection = mysql.createPool({ 4 | host : config.host, 5 | user : config.user, 6 | password : config.password, 7 | database : config.database 8 | }); 9 | 10 | class DB_Mysql { 11 | constructor() {} 12 | query(url) { 13 | if(!url) { 14 | return false; 15 | } 16 | return new Promise((resolve, reject) => { 17 | connection.query(url, function(error, results, fields){ 18 | if(error) { 19 | throw error; 20 | } 21 | resolve(results); 22 | }) 23 | }) 24 | } 25 | } 26 | 27 | module.exports = new DB_Mysql(); -------------------------------------------------------------------------------- /src/services/data_source.js: -------------------------------------------------------------------------------- 1 | const mysql = require('../db/mysql'); 2 | 3 | class DataSourceService { 4 | constructor() { 5 | 6 | } 7 | 8 | getDataSource(params) { 9 | 10 | // let sql = `select * from data_source`; 11 | let sql = `select idustry,idustry_name from data_source group by idustry,idustry_name `; 12 | 13 | let data = mysql.query(sql); 14 | return data; 15 | } 16 | 17 | getDataSourceByType(dataType) { 18 | let sql = `select * from data_source where dataType = ${dataType}`; 19 | let data = mysql.query(sql); 20 | return data; 21 | } 22 | 23 | } 24 | 25 | module.exports = new DataSourceService(); -------------------------------------------------------------------------------- /src/services/page_service.js: -------------------------------------------------------------------------------- 1 | const moment = require('moment'); 2 | const mysql = require('../db/mysql'); 3 | 4 | class PageService { 5 | constructor() { 6 | 7 | } 8 | 9 | getList(projectId) { 10 | let sql = `select * from page where projectId = ${projectId}`; 11 | let data = mysql.query(sql); 12 | return data; 13 | } 14 | 15 | create(page) { 16 | page['creator'] |= 1; 17 | page['style'] |= '{"width":"1000", "height":"1000","backgrund":"#fff}'; 18 | page['description'] |= ""; 19 | page['appendName'] |= page['name'] || ''; 20 | page['vip_status'] |= 0; 21 | page['componentList'] = "[]"; 22 | page['create_time'] = this.momentDate(page['create_time']); 23 | page['update_time'] = this.momentDate(page['update_time']); 24 | 25 | 26 | let sql = ` 27 | INSERT INTO page 28 | (projectId,name,appendName,description,creator,width,height,vip_status,type,componentList,create_time ,update_time) 29 | VALUES ( 30 | ${page['projectId']}, 31 | "${page['name']}", 32 | "${page['appendName']}", 33 | "${page['description']}", 34 | ${page['creator']}, 35 | ${page['width']}, 36 | ${page['height']}, 37 | ${page['vip_status']}, 38 | "${page['type']}", 39 | "${page['componentList']}", 40 | "${page['create_time']}","${page['update_time']}")`; 41 | let data = mysql.query(sql); 42 | return data; 43 | } 44 | 45 | momentDate(time) { 46 | let _time = time || new Date(); 47 | return moment(_time).format('YYYY-MM-DD HH:mm:ss'); 48 | } 49 | 50 | getById(id) { 51 | let sql = `select * from page where id = ${id}`; 52 | let data = mysql.query(sql) 53 | return data; 54 | } 55 | 56 | update(page) { 57 | const update_time = moment(new Date()).format('YYYY-MM-DD HH:mm:ss') 58 | let sql = ` 59 | UPDATE page 60 | SET 61 | name = '${page['name']}', 62 | appendName = '${page['appendName']}', 63 | description = '${page['description']}', 64 | update_time ="${update_time}", 65 | status = ${page['status']}, 66 | type = ${page['type']}, 67 | creator = ${page['creator']}, 68 | style = "${page['style']}", 69 | vip_status = ${page['vip_status']}, 70 | componentList = '${page['componentList']}' 71 | WHERE 72 | id = ${page['id']} && 73 | projectId = ${page['projectId']}` 74 | let data = mysql.query(sql); 75 | return data; 76 | } 77 | 78 | delete(pageId) { 79 | let sql = ` 80 | DELETE FROM page WHERE id=${pageId}` 81 | let data = mysql.query(sql); 82 | return data; 83 | } 84 | } 85 | 86 | module.exports = new PageService(); -------------------------------------------------------------------------------- /src/services/project_service.js: -------------------------------------------------------------------------------- 1 | const moment = require('moment'); 2 | const mysql = require('../db/mysql'); 3 | 4 | class ProjectService { 5 | constructor() { 6 | 7 | } 8 | 9 | getList() { 10 | let data = mysql.query('select * from project'); 11 | return data; 12 | } 13 | 14 | create(project) { 15 | project['status'] |= 0; 16 | project['vip_staus'] |= 0; 17 | project['type'] |= 'cutome'; 18 | project['create_time'] = this.momentDate(project['create_time']); 19 | project['update_time'] = this.momentDate(project['update_time']); 20 | let sql = ` 21 | INSERT INTO project 22 | (name,appendName,description,creator,vip_staus,type,create_time ,update_time) 23 | VALUES ( 24 | "${project['name']}", 25 | "${project['appendName']}", 26 | "${project['description']}", 27 | ${project['creator']}, 28 | ${project['vip_staus']}, 29 | "${project['type']}", 30 | "${project['create_time']}", 31 | "${project['update_time']}")`; 32 | let data = mysql.query(sql); 33 | return data; 34 | } 35 | 36 | 37 | delete(id) { 38 | let sql = ` 39 | DELETE FROM project WHERE id=${id}` 40 | let data = mysql.query(sql); 41 | return data; 42 | } 43 | 44 | momentDate(time) { 45 | let _time = time || new Date(); 46 | return moment(_time).format('YYYY-MM-DD HH:mm:ss'); 47 | } 48 | 49 | getById(id) { 50 | let data = mysql.query(`select * from project where id = ${id}`); 51 | return data; 52 | } 53 | } 54 | 55 | module.exports = new ProjectService(); -------------------------------------------------------------------------------- /src/services/project_status_service.js: -------------------------------------------------------------------------------- 1 | const mysql = require('../db/mysql'); 2 | 3 | class ProejctStatusService { 4 | constructor() { 5 | 6 | } 7 | 8 | getStates() { 9 | let data = mysql.query(`select * from status order by id`); 10 | return data; 11 | } 12 | } 13 | 14 | module.exports = new ProejctStatusService(); --------------------------------------------------------------------------------