diff --git a/sql/tansci_boot.sql b/sql/tansci_boot.sql index 57a119a..6a6ae36 100644 --- a/sql/tansci_boot.sql +++ b/sql/tansci_boot.sql @@ -97,7 +97,7 @@ INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/ INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/group.json', '{\r\n \"properties\" : { },\r\n \"id\" : \"3766b233e65047908e6ade58f6a91cef\",\r\n \"name\" : \"接口生成\",\r\n \"type\" : \"api\",\r\n \"parentId\" : \"fc09d5b985f44120956d5d4f9fbd3658\",\r\n \"path\" : \"generator\",\r\n \"createTime\" : 1706837176932,\r\n \"updateTime\" : null,\r\n \"createBy\" : null,\r\n \"updateBy\" : null,\r\n \"paths\" : [ ],\r\n \"options\" : [ ]\r\n}'); INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/分页.ms', '{\r\n \"properties\" : { },\r\n \"id\" : \"72d2a17d7417416ab095d82cfb5114cd\",\r\n \"script\" : null,\r\n \"groupId\" : \"3766b233e65047908e6ade58f6a91cef\",\r\n \"name\" : \"分页\",\r\n \"createTime\" : null,\r\n \"updateTime\" : 1706843973047,\r\n \"lock\" : \"1\",\r\n \"createBy\" : null,\r\n \"updateBy\" : null,\r\n \"path\" : \"page\",\r\n \"method\" : \"GET\",\r\n \"parameters\" : [ ],\r\n \"options\" : [ ],\r\n \"requestBody\" : null,\r\n \"headers\" : [ ],\r\n \"paths\" : [ ],\r\n \"responseBody\" : null,\r\n \"description\" : null,\r\n \"requestBodyDefinition\" : null,\r\n \"responseBodyDefinition\" : null\r\n}\r\n================================\r\nreturn db.page(\"\"\"\r\n select * from sys_gen \r\n where 1=1\r\n ?{tableName, and table_name like concat(\'%\',#{tableName},\'%\')}\r\n ?{tableComment, and table_comment like concat(\'%\',#{tableComment},\'%\')}\r\n order by update_time desc\r\n\"\"\")'); INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/删除接口.ms', '{\r\n \"properties\" : { },\r\n \"id\" : \"836d46dce24045c78408f44db6dfda7d\",\r\n \"script\" : null,\r\n \"groupId\" : \"3766b233e65047908e6ade58f6a91cef\",\r\n \"name\" : \"删除接口\",\r\n \"createTime\" : null,\r\n \"updateTime\" : 1706843980275,\r\n \"lock\" : \"1\",\r\n \"createBy\" : null,\r\n \"updateBy\" : null,\r\n \"path\" : \"delete/{id}\",\r\n \"method\" : \"DELETE\",\r\n \"parameters\" : [ ],\r\n \"options\" : [ ],\r\n \"requestBody\" : null,\r\n \"headers\" : [ ],\r\n \"paths\" : [ ],\r\n \"responseBody\" : null,\r\n \"description\" : null,\r\n \"requestBodyDefinition\" : null,\r\n \"responseBodyDefinition\" : null\r\n}\r\n================================\r\nimport org.ssssssss.magicapi.core.service.MagicResourceService\r\n\r\nvar interfaceId = db.selectValue(\"\"\"select interface_id from sys_gen where id = #{id}\"\"\")\r\nif(interfaceId != null){\r\n MagicResourceService.delete(interfaceId)\r\n}\r\n\r\nreturn db.table(\"sys_gen\").where().eq(\"id\",id).delete()'); -INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/接口生成.ms', '{\r\n \"properties\" : { },\r\n \"id\" : \"470d902b51e5466d899789de871a426f\",\r\n \"script\" : null,\r\n \"groupId\" : \"3766b233e65047908e6ade58f6a91cef\",\r\n \"name\" : \"接口生成\",\r\n \"createTime\" : null,\r\n \"updateTime\" : 1708933805692,\r\n \"lock\" : \"1\",\r\n \"createBy\" : null,\r\n \"updateBy\" : null,\r\n \"path\" : \"execute\",\r\n \"method\" : \"POST\",\r\n \"parameters\" : [ ],\r\n \"options\" : [ ],\r\n \"requestBody\" : \"\",\r\n \"headers\" : [ ],\r\n \"paths\" : [ ],\r\n \"responseBody\" : null,\r\n \"description\" : null,\r\n \"requestBodyDefinition\" : null,\r\n \"responseBodyDefinition\" : null\r\n}\r\n================================\r\nimport org.ssssssss.magicapi.core.model.Option;\r\nimport org.ssssssss.magicapi.core.model.ApiInfo;\r\nimport org.ssssssss.magicapi.core.model.Group;\r\nimport org.ssssssss.magicapi.core.service.MagicResourceService;\r\nimport log;\r\n\r\ninfo = info::json\r\nvar permissionPrefix = (info.modulePath + info.businessPath).replace(/^\\//,\'\').replace(/\\/\\//, \'/\').replace(\'/\', \':\')\r\n\r\n//创建组\r\nvar getGroup = (type) => {\r\n var moduleGroup = MagicResourceService.tree(type).children.filter(it => {\r\n return it.node.path == info.modulePath || it.node.path == info.modulePath.substring(1, info.modulePath.length())\r\n })\r\n if(moduleGroup.length == 0){\r\n Group group = new Group();\r\n group.setId(UUID.randomUUID().toString().replace(\'-\', \'\'));\r\n group.setName(info.moduleName);\r\n group.setPath(info.modulePath);\r\n group.setParentId(\"0\");\r\n group.setType(type)\r\n MagicResourceService.saveGroup(group);\r\n moduleGroup = group;\r\n }else{\r\n moduleGroup = moduleGroup[0].node\r\n }\r\n //创建功能组\r\n var businessGroup = MagicResourceService.tree(type).children.filter(it => it.node.id == moduleGroup.id)[0].children.filter(it => {\r\n return it.node.path == info.businessPath || it.node.path == info.businessPath.substring(1, info.businessPath.length())\r\n })\r\n if(businessGroup.length == 0){\r\n Group group = new Group();\r\n group.setId(UUID.randomUUID().toString().replace(\'-\', \'\'));\r\n group.setName(info.businessName);\r\n group.setPath(info.businessPath);\r\n group.setParentId(moduleGroup.getId());\r\n group.setType(type)\r\n MagicResourceService.saveGroup(group);\r\n businessGroup = group;\r\n }else{\r\n businessGroup = businessGroup[0].node\r\n }\r\n\r\n // 子表组\r\n var subPath = \"/sub\"\r\n var bGroup = MagicResourceService.tree(type).children.filter(it => it.node.id == moduleGroup.id)[0]\r\n var subGroup = bGroup.children.filter(it => it.node.id == businessGroup.id )[0].children.filter(it =>{\r\n return it.node.path == subPath || it.node.path == subPath.substring(1, subPath.length())\r\n })\r\n if(info.template == \"subTable\"){\r\n if(subGroup.length == 0){\r\n Group group = new Group();\r\n group.setId(UUID.randomUUID().toString().replace(\'-\', \'\'));\r\n group.setName(\"子表\");\r\n group.setPath(\"/sub\");\r\n group.setParentId(businessGroup.getId());\r\n group.setType(type)\r\n MagicResourceService.saveGroup(group);\r\n subGroup = group; \r\n }else{\r\n subGroup = subGroup[0].node\r\n }\r\n }\r\n\r\n return {\r\n moduleGroup,\r\n businessGroup,\r\n subGroup\r\n }\r\n}\r\n//删除临时文件\r\nvar deleteFiles = (groupId, paths) => {\r\n var listFiles = MagicResourceService.listFiles(groupId)\r\n listFiles.forEach(it => {\r\n if(paths.indexOf(it.path) != -1){\r\n MagicResourceService.delete(it.id)\r\n }\r\n })\r\n}\r\n\r\nvar businessGroup = getGroup(\'api\').businessGroup\r\n//删除api接口\r\ndeleteFiles(businessGroup.getId(),[\'/list\', \'/save\', \'/get\', \'/delete\'])\r\n\r\ncolumns = columns::json\r\nvar listFields = columns.filter(it => it.list).map(it => it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()).join(\',\')\r\nvar wheres = \'\';\r\ncolumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n if(it.query){\r\n if(it.where == \'in\'){\r\n wheres += ` ?{${it.columnName}, and ${field} in(#{`+it.columnName+`.split(\',\')}) }\\n`\r\n }else if(it.where == \'like\'){\r\n wheres += ` ?{${it.columnName}, and ${field} like concat(\'%\',#{${it.columnName}},\'%\') }\\n`\r\n }else{\r\n wheres += ` ?{${it.columnName}, and ${field} ${it.where} #{${it.columnName}} }\\n`\r\n }\r\n }\r\n})\r\n//取得数据库的表信息\r\ndatasource = datasource || \'\'\r\nvar commonField = db[datasource].select(\"\"\"\r\n SELECT\r\n column_name\r\n FROM\r\n information_schema.COLUMNS\r\n WHERE\r\n table_name = #{tableName} AND column_name IN ( \'is_del\', \'create_by\', \'create_date\', \'update_by\', \'update_date\' ) AND table_schema = DATABASE()\r\n\"\"\")\r\ncommonField = commonField.map(it => it.columnName)\r\nvar primary = db[datasource].selectValue(\"SELECT column_name FROM information_schema.COLUMNS WHERE table_name = #{tableName} and column_key = \'PRI\' and table_schema = database() limit 1\")\r\nvar primaryLowerCamelCase = primary.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n\r\nvar logic = \'\'\r\nif(commonField.contains(\'is_del\')){\r\n logic = \'.logic()\'\r\n wheres += ` and is_del = 0\\n`\r\n}\r\nwheres = wheres.substring(0,wheres.length() - 1)\r\n\r\nvar datasourceScript = datasource ? `.${datasource}` : \'\';\r\n\r\n// 产生查询api接口\r\nApiInfo listApi = new ApiInfo()\r\nlistApi.setName(\"列表\")\r\nlistApi.setPath(\"/list\")\r\nlistApi.setMethod(\"GET\")\r\nlistApi.setGroupId(businessGroup.getId())\r\nlistApi.setScript(`return db${datasourceScript}.page(\"\"\"\r\nselect ${primary},${listFields} from ${tableName} where 1=1\r\n${wheres}\r\n\"\"\")`)\r\n// listApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(listApi)\r\n\r\nvar saveMethod = \'save(data)\'\r\nif(commonField.size() >= 4){\r\n saveMethod = \'saveOrUpdate(data)\'\r\n}\r\n\r\n//产生增册改查api接口\r\nvar insertFields = \'\';\r\ncolumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n insertFields += `, #{body.`+it.columnName+`}`\r\n})\r\n\r\nApiInfo saveApi = new ApiInfo()\r\nsaveApi.setName(\"保存\")\r\nsaveApi.setPath(\"/save\")\r\nsaveApi.setMethod(\"POST\")\r\nsaveApi.setGroupId(businessGroup.getId())\r\nsaveApi.setScript(`return db.insert(\"\"\"insert into ${tableName}(${primary},${listFields}) values (uuid() ${insertFields})\"\"\")`)\r\n// saveApi.setOption([new Option(\'wrap_request_parameter\', \'data\'), new Option(\'permission\', `${permissionPrefix}:save`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(saveApi)\r\n\r\n// 修改\r\nvar updateFields = \'\';\r\ncolumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n updateFields += `?{body.${it.columnName}, ,${field} = #{body.${it.columnName}}}\\n`\r\n})\r\nApiInfo updateApi = new ApiInfo()\r\nupdateApi.setName(\"修改\")\r\nupdateApi.setPath(\"/update\")\r\nupdateApi.setMethod(\"POST\")\r\nupdateApi.setGroupId(businessGroup.getId())\r\nupdateApi.setScript(`return db.update(\"\"\"update ${tableName} set \\n${primary} = #{body.${primary}}\\n ${updateFields} where ${primary} = #{body.${primary}}\"\"\")`)\r\n// updateApi.setOption([new Option(\'wrap_request_parameter\', \'data\'), new Option(\'permission\', `${permissionPrefix}:save`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(updateApi)\r\n\r\nApiInfo deleteApi = new ApiInfo()\r\ndeleteApi.setName(\"删除\")\r\ndeleteApi.setPath(\"/delete\")\r\ndeleteApi.setMethod(\"DELETE\")\r\ndeleteApi.setGroupId(businessGroup.getId())\r\ndeleteApi.setScript(`return db${datasourceScript}.table(\'${tableName}\')${logic}.where().eq(\'${primary}\', ${primaryLowerCamelCase}).delete()`)\r\n// deleteApi.setOption([new Option(\'permission\', `${permissionPrefix}:delete`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(deleteApi)\r\n\r\nvar saveFields = columns.filter(it => it.save).map(it => it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()).join(\',\')\r\n//产生单个行Api接口\r\nApiInfo getApi = new ApiInfo()\r\ngetApi.setName(\"详情\")\r\ngetApi.setPath(\"/get\")\r\ngetApi.setMethod(\"GET\")\r\ngetApi.setGroupId(businessGroup.getId())\r\ngetApi.setScript(`return db${datasourceScript}.selectOne(\"\"\"select ${saveFields} from ${tableName} where ${primary} = #{${primaryLowerCamelCase}}\"\"\")`)\r\n// getApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(getApi)\r\n\r\n// 树列表接口\r\nif(info.template == \"tree\"){\r\n ApiInfo treeApi = new ApiInfo()\r\n treeApi.setName(\"树列表\")\r\n treeApi.setPath(\"/tree\")\r\n treeApi.setMethod(\"GET\")\r\n treeApi.setGroupId(businessGroup.getId())\r\n treeApi.setScript(`var toTree = (list,${info.treePid}) => select t.*,toTree(list,t.${info.treeId}) children from list t where t.${info.treePid} = ${info.treePid}\r\n var list = toTree(db.select(\'select ${listFields} from ${datasourceScript?datasourceScript+\'.\':\'\'}${tableName}\'),\'0\')\r\n return {\r\n list: list,\r\n total: list.getLength()\r\n }\r\n `)\r\n // treeApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(treeApi)\r\n}\r\n\r\n// 主子表 api接口\r\nif(info.template == \"subTable\"){\r\n var subGroup = getGroup(\'api\').subGroup\r\n subColumns = subColumns\r\n var subListFields = subColumns.filter(it => it.list).map(it => it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()).join(\',\')\r\n var subWheres = \'\';\r\n subColumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n if(it.query){\r\n if(it.where == \'in\'){\r\n subWheres += `?{${it.columnName}, and ${field} in(#{`+it.columnName+`.split(\',\')}) }\\n`\r\n }else if(it.where == \'like\'){\r\n subWheres += `?{${it.columnName}, and ${field} like concat(\'%\',#{${it.columnName}},\'%\') }\\n`\r\n }else{\r\n subWheres += `?{${it.columnName}, and ${field} ${it.where} #{${it.columnName}} }\\n`\r\n }\r\n }\r\n })\r\n var subPrimary = db[datasource].selectValue(\"SELECT column_name FROM information_schema.COLUMNS WHERE table_name = #{subTableName} and column_key = \'PRI\' and table_schema = database() limit 1\")\r\n var subPrimaryLowerCamelCase = subPrimary.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n var subLogic = \'\'\r\n if(subListFields.contains(\'is_del\')){\r\n subLogic = \'.logic()\'\r\n subWheres += ` and is_del = 0\\n`\r\n }\r\n subWheres = subWheres.substring(0,subWheres.length() - 1)\r\n \r\n // 列表\r\n ApiInfo subListApi = new ApiInfo()\r\n subListApi.setName(\"列表\")\r\n subListApi.setPath(\"/list\")\r\n subListApi.setMethod(\"GET\")\r\n subListApi.setGroupId(subGroup.getId())\r\n subListApi.setScript(`return db${datasourceScript}.page(\"\"\"\r\n select ${subListFields} from ${subTableName} where 1=1\r\n ${subWheres}\r\n \"\"\")`)\r\n // subListApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subListApi)\r\n\r\n // 保存\r\n var insertSubFields = \'\';\r\n subColumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n insertSubFields += `, #{body.`+it.columnName+`}`\r\n })\r\n ApiInfo subSaveApi = new ApiInfo()\r\n subSaveApi.setName(\"保存\")\r\n subSaveApi.setPath(\"/save\")\r\n subSaveApi.setMethod(\"POST\")\r\n subSaveApi.setGroupId(subGroup.getId())\r\n subSaveApi.setScript(`return db.insert(\"\"\"insert into ${subTableName}(${subPrimary},${subListFields}) values (uuid() ${insertSubFields})\"\"\")`)\r\n // subSaveApi.setOption([new Option(\'wrap_request_parameter\', \'data\'), new Option(\'permission\', `${permissionPrefix}:save`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subSaveApi)\r\n\r\n // 修改\r\n var updateSubFields = \'\';\r\n subColumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n updateSubFields += `?{body.${it.columnName}, ,${field} = #{body.${it.columnName}}}\\n`\r\n })\r\n ApiInfo subUpdateApi = new ApiInfo()\r\n subUpdateApi.setName(\"修改\")\r\n subUpdateApi.setPath(\"/update\")\r\n subUpdateApi.setMethod(\"POST\")\r\n subUpdateApi.setGroupId(subGroup.getId())\r\n subUpdateApi.setScript(`return db.update(\"\"\"update ${subTableName} set \\n${subPrimary} = #{body.${subPrimary}}\\n ${updateSubFields} where ${subPrimary} = #{body.${subPrimary}}\"\"\")`)\r\n // subUpdateApi.setOption([new Option(\'wrap_request_parameter\', \'data\'), new Option(\'permission\', `${permissionPrefix}:save`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subUpdateApi)\r\n\r\n // 删除\r\n ApiInfo subDeleteApi = new ApiInfo()\r\n subDeleteApi.setName(\"删除\")\r\n subDeleteApi.setPath(\"/delete\")\r\n subDeleteApi.setMethod(\"DELETE\")\r\n subDeleteApi.setGroupId(subGroup.getId())\r\n subDeleteApi.setScript(`return db${datasourceScript}.table(\'${subTableName}\')${subLogic}.where().eq(\'${subPrimary}\', ${subPrimaryLowerCamelCase}).delete()`)\r\n // subDeleteApi.setOption([new Option(\'permission\', `${permissionPrefix}:delete`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subDeleteApi)\r\n\r\n var subSaveFields = subColumns.filter(it => it.save).map(it => it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()).join(\',\')\r\n // 详情\r\n ApiInfo subGetApi = new ApiInfo()\r\n subGetApi.setName(\"详情\")\r\n subGetApi.setPath(\"/get\")\r\n subGetApi.setMethod(\"GET\")\r\n subGetApi.setGroupId(subGroup.getId())\r\n subGetApi.setScript(`return db${datasourceScript}.selectOne(\"\"\"select ${subPrimary},${subSaveFields} from ${subTableName} where ${subPrimary} = #{${subPrimaryLowerCamelCase}}\"\"\")`)\r\n // subGetApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subGetApi)\r\n}\r\n\r\nvar moduleGroup = getGroup(\'api\').moduleGroup\r\nreturn moduleGroup.id\r\n'); +INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/接口生成.ms', '{\r\n \"properties\" : { },\r\n \"id\" : \"470d902b51e5466d899789de871a426f\",\r\n \"script\" : null,\r\n \"groupId\" : \"3766b233e65047908e6ade58f6a91cef\",\r\n \"name\" : \"接口生成\",\r\n \"createTime\" : null,\r\n \"updateTime\" : 1711505784847,\r\n \"lock\" : \"1\",\r\n \"createBy\" : null,\r\n \"updateBy\" : null,\r\n \"path\" : \"execute\",\r\n \"method\" : \"POST\",\r\n \"parameters\" : [ ],\r\n \"options\" : [ ],\r\n \"requestBody\" : \"\",\r\n \"headers\" : [ ],\r\n \"paths\" : [ ],\r\n \"responseBody\" : null,\r\n \"description\" : null,\r\n \"requestBodyDefinition\" : null,\r\n \"responseBodyDefinition\" : null\r\n}\r\n================================\r\nimport org.ssssssss.magicapi.core.model.Option;\r\nimport org.ssssssss.magicapi.core.model.ApiInfo;\r\nimport org.ssssssss.magicapi.core.model.Group;\r\nimport org.ssssssss.magicapi.core.service.MagicResourceService;\r\nimport log;\r\n\r\ninfo = info::json\r\nvar permissionPrefix = (info.modulePath + info.businessPath).replace(/^\\//,\'\').replace(/\\/\\//, \'/\').replace(\'/\', \':\')\r\n\r\n//创建组\r\nvar getGroup = (type) => {\r\n var moduleGroup = MagicResourceService.tree(type).children.filter(it => {\r\n return it.node.path == info.modulePath || it.node.path == info.modulePath.substring(1, info.modulePath.length())\r\n })\r\n if(moduleGroup.length == 0){\r\n Group group = new Group();\r\n group.setId(UUID.randomUUID().toString().replace(\'-\', \'\'));\r\n group.setName(info.moduleName);\r\n group.setPath(info.modulePath);\r\n group.setParentId(\"0\");\r\n group.setType(type)\r\n MagicResourceService.saveGroup(group);\r\n moduleGroup = group;\r\n }else{\r\n moduleGroup = moduleGroup[0].node\r\n }\r\n //创建功能组\r\n var businessGroup = MagicResourceService.tree(type).children.filter(it => it.node.id == moduleGroup.id)[0].children.filter(it => {\r\n return it.node.path == info.businessPath || it.node.path == info.businessPath.substring(1, info.businessPath.length())\r\n })\r\n if(businessGroup.length == 0){\r\n Group group = new Group();\r\n group.setId(UUID.randomUUID().toString().replace(\'-\', \'\'));\r\n group.setName(info.businessName);\r\n group.setPath(info.businessPath);\r\n group.setParentId(moduleGroup.getId());\r\n group.setType(type)\r\n MagicResourceService.saveGroup(group);\r\n businessGroup = group;\r\n }else{\r\n businessGroup = businessGroup[0].node\r\n }\r\n\r\n // 子表组\r\n var subPath = \"/sub\"\r\n var bGroup = MagicResourceService.tree(type).children.filter(it => it.node.id == moduleGroup.id)[0]\r\n var subGroup = bGroup.children.filter(it => it.node.id == businessGroup.id )[0].children.filter(it =>{\r\n return it.node.path == subPath || it.node.path == subPath.substring(1, subPath.length())\r\n })\r\n if(info.template == \"subTable\"){\r\n if(subGroup.length == 0){\r\n Group group = new Group();\r\n group.setId(UUID.randomUUID().toString().replace(\'-\', \'\'));\r\n group.setName(\"子表\");\r\n group.setPath(\"/sub\");\r\n group.setParentId(businessGroup.getId());\r\n group.setType(type)\r\n MagicResourceService.saveGroup(group);\r\n subGroup = group; \r\n }else{\r\n subGroup = subGroup[0].node\r\n }\r\n }\r\n\r\n return {\r\n moduleGroup,\r\n businessGroup,\r\n subGroup\r\n }\r\n}\r\n//删除临时文件\r\nvar deleteFiles = (groupId, paths) => {\r\n var listFiles = MagicResourceService.listFiles(groupId)\r\n listFiles.forEach(it => {\r\n if(paths.indexOf(it.path) != -1){\r\n MagicResourceService.delete(it.id)\r\n }\r\n })\r\n}\r\n\r\nvar businessGroup = getGroup(\'api\').businessGroup\r\n//删除api接口\r\ndeleteFiles(businessGroup.getId(),[\'/list\', \'/save\', \'/get\', \'/delete\'])\r\n\r\ncolumns = columns::json\r\nvar listFields = columns.filter(it => it.list).map(it => it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()).join(\',\')\r\nvar wheres = \'\';\r\ncolumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n if(it.query){\r\n if(it.where == \'in\'){\r\n wheres += ` ?{${it.columnName}, and ${field} in(#{`+it.columnName+`.split(\',\')}) }\\n`\r\n }else if(it.where == \'like\'){\r\n wheres += ` ?{${it.columnName}, and ${field} like concat(\'%\',#{${it.columnName}},\'%\') }\\n`\r\n }else{\r\n wheres += ` ?{${it.columnName}, and ${field} ${it.where} #{${it.columnName}} }\\n`\r\n }\r\n }\r\n})\r\n//取得数据库的表信息\r\ndatasource = datasource || \'\'\r\nvar commonField = db[datasource].select(\"\"\"\r\n SELECT\r\n column_name\r\n FROM\r\n information_schema.COLUMNS\r\n WHERE\r\n table_name = #{tableName} AND column_name IN ( \'is_del\', \'create_by\', \'create_date\', \'update_by\', \'update_date\' ) AND table_schema = DATABASE()\r\n\"\"\")\r\ncommonField = commonField.map(it => it.columnName)\r\nvar primary = db[datasource].selectValue(\"SELECT column_name FROM information_schema.COLUMNS WHERE table_name = #{tableName} and column_key = \'PRI\' and table_schema = database() limit 1\")\r\nvar primaryLowerCamelCase = primary.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n\r\nvar logic = \'\'\r\nif(commonField.contains(\'is_del\')){\r\n logic = \'.logic()\'\r\n wheres += ` and is_del = 0\\n`\r\n}\r\nwheres = wheres.substring(0,wheres.length() - 1)\r\n\r\nvar datasourceScript = datasource ? `.${datasource}` : \'\';\r\n\r\n// 产生查询api接口\r\nApiInfo listApi = new ApiInfo()\r\nlistApi.setName(\"列表\")\r\nlistApi.setPath(\"/list\")\r\nlistApi.setMethod(\"GET\")\r\nlistApi.setGroupId(businessGroup.getId())\r\nlistApi.setScript(`return db${datasourceScript}.page(\"\"\"\r\nselect ${primary},${listFields} from ${tableName} where 1=1\r\n${wheres}\r\n\"\"\")`)\r\n// listApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(listApi)\r\n\r\nvar saveMethod = \'save(data)\'\r\nif(commonField.size() >= 4){\r\n saveMethod = \'saveOrUpdate(data)\'\r\n}\r\n\r\n//产生增册改查api接口\r\nvar insertFields = \'\';\r\ncolumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n insertFields += `, #{body.`+it.columnName+`}`\r\n})\r\n\r\nApiInfo saveApi = new ApiInfo()\r\nsaveApi.setName(\"保存\")\r\nsaveApi.setPath(\"/save\")\r\nsaveApi.setMethod(\"POST\")\r\nsaveApi.setGroupId(businessGroup.getId())\r\nsaveApi.setScript(`return db.insert(\"\"\"insert into ${tableName}(${primary},${listFields}) values (uuid() ${insertFields})\"\"\")`)\r\n// saveApi.setOption([new Option(\'wrap_request_parameter\', \'data\'), new Option(\'permission\', `${permissionPrefix}:save`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(saveApi)\r\n\r\n// 修改\r\nvar updateFields = \'\';\r\ncolumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n updateFields += `?{body.${it.columnName}, ,${field} = #{body.${it.columnName}}}\\n`\r\n})\r\nApiInfo updateApi = new ApiInfo()\r\nupdateApi.setName(\"修改\")\r\nupdateApi.setPath(\"/update\")\r\nupdateApi.setMethod(\"POST\")\r\nupdateApi.setGroupId(businessGroup.getId())\r\nupdateApi.setScript(`return db.update(\"\"\"update ${tableName} set \\n${primary} = #{body.${primary}}\\n ${updateFields} where ${primary} = #{body.${primary}}\"\"\")`)\r\n// updateApi.setOption([new Option(\'wrap_request_parameter\', \'data\'), new Option(\'permission\', `${permissionPrefix}:save`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(updateApi)\r\n\r\nApiInfo deleteApi = new ApiInfo()\r\ndeleteApi.setName(\"删除\")\r\ndeleteApi.setPath(\"/delete\")\r\ndeleteApi.setMethod(\"DELETE\")\r\ndeleteApi.setGroupId(businessGroup.getId())\r\ndeleteApi.setScript(`return db${datasourceScript}.table(\'${tableName}\')${logic}.where().eq(\'${primary}\', ${primaryLowerCamelCase}).delete()`)\r\n// deleteApi.setOption([new Option(\'permission\', `${permissionPrefix}:delete`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(deleteApi)\r\n\r\nvar saveFields = columns.filter(it => it.save).map(it => it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()).join(\',\')\r\n//产生单个行Api接口\r\nApiInfo getApi = new ApiInfo()\r\ngetApi.setName(\"详情\")\r\ngetApi.setPath(\"/get\")\r\ngetApi.setMethod(\"GET\")\r\ngetApi.setGroupId(businessGroup.getId())\r\ngetApi.setScript(`return db${datasourceScript}.selectOne(\"\"\"select ${saveFields} from ${tableName} where ${primary} = #{${primaryLowerCamelCase}}\"\"\")`)\r\n// getApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\nMagicResourceService.saveFile(getApi)\r\n\r\n// 树列表接口\r\nif(info.template == \"tree\"){\r\n ApiInfo treeApi = new ApiInfo()\r\n treeApi.setName(\"树列表\")\r\n treeApi.setPath(\"/tree\")\r\n treeApi.setMethod(\"GET\")\r\n treeApi.setGroupId(businessGroup.getId())\r\n treeApi.setScript(`var toTree = (list,${info.treePid}) => select t.*,toTree(list,t.${info.treeId}) children from list t where t.${info.treePid} = ${info.treePid}\r\n var list = toTree(db.select(\'select ${listFields} from ${datasourceScript?datasourceScript+\'.\':\'\'}${tableName}\'),\'0\')\r\n return {\r\n list: list,\r\n total: list.getLength()\r\n }\r\n `)\r\n // treeApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(treeApi)\r\n}\r\n\r\n// 主子表 api接口\r\nif(info.template == \"subTable\"){\r\n var subGroup = getGroup(\'api\').subGroup\r\n subColumns = subColumns::json\r\n var subListFields = subColumns.filter(it => it.list).map(it => it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()).join(\',\')\r\n var subWheres = \'\';\r\n subColumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n if(it.query){\r\n if(it.where == \'in\'){\r\n subWheres += `?{${it.columnName}, and ${field} in(#{`+it.columnName+`.split(\',\')}) }\\n`\r\n }else if(it.where == \'like\'){\r\n subWheres += `?{${it.columnName}, and ${field} like concat(\'%\',#{${it.columnName}},\'%\') }\\n`\r\n }else{\r\n subWheres += `?{${it.columnName}, and ${field} ${it.where} #{${it.columnName}} }\\n`\r\n }\r\n }\r\n })\r\n var subPrimary = db[datasource].selectValue(\"SELECT column_name FROM information_schema.COLUMNS WHERE table_name = #{subTableName} and column_key = \'PRI\' and table_schema = database() limit 1\")\r\n var subPrimaryLowerCamelCase = subPrimary.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n var subLogic = \'\'\r\n if(subListFields.contains(\'is_del\')){\r\n subLogic = \'.logic()\'\r\n subWheres += ` and is_del = 0\\n`\r\n }\r\n subWheres = subWheres.substring(0,subWheres.length() - 1)\r\n \r\n // 列表\r\n ApiInfo subListApi = new ApiInfo()\r\n subListApi.setName(\"列表\")\r\n subListApi.setPath(\"/list\")\r\n subListApi.setMethod(\"GET\")\r\n subListApi.setGroupId(subGroup.getId())\r\n subListApi.setScript(`return db${datasourceScript}.page(\"\"\"\r\n select ${subListFields} from ${subTableName} where 1=1\r\n ${subWheres}\r\n \"\"\")`)\r\n // subListApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subListApi)\r\n\r\n // 保存\r\n var insertSubFields = \'\';\r\n subColumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n insertSubFields += `, #{body.`+it.columnName+`}`\r\n })\r\n ApiInfo subSaveApi = new ApiInfo()\r\n subSaveApi.setName(\"保存\")\r\n subSaveApi.setPath(\"/save\")\r\n subSaveApi.setMethod(\"POST\")\r\n subSaveApi.setGroupId(subGroup.getId())\r\n subSaveApi.setScript(`return db.insert(\"\"\"insert into ${subTableName}(${subPrimary},${subListFields}) values (uuid() ${insertSubFields})\"\"\")`)\r\n // subSaveApi.setOption([new Option(\'wrap_request_parameter\', \'data\'), new Option(\'permission\', `${permissionPrefix}:save`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subSaveApi)\r\n\r\n // 修改\r\n var updateSubFields = \'\';\r\n subColumns.forEach(it => {\r\n var field = it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()\r\n updateSubFields += `?{body.${it.columnName}, ,${field} = #{body.${it.columnName}}}\\n`\r\n })\r\n ApiInfo subUpdateApi = new ApiInfo()\r\n subUpdateApi.setName(\"修改\")\r\n subUpdateApi.setPath(\"/update\")\r\n subUpdateApi.setMethod(\"POST\")\r\n subUpdateApi.setGroupId(subGroup.getId())\r\n subUpdateApi.setScript(`return db.update(\"\"\"update ${subTableName} set \\n${subPrimary} = #{body.${subPrimary}}\\n ${updateSubFields} where ${subPrimary} = #{body.${subPrimary}}\"\"\")`)\r\n // subUpdateApi.setOption([new Option(\'wrap_request_parameter\', \'data\'), new Option(\'permission\', `${permissionPrefix}:save`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subUpdateApi)\r\n\r\n // 删除\r\n ApiInfo subDeleteApi = new ApiInfo()\r\n subDeleteApi.setName(\"删除\")\r\n subDeleteApi.setPath(\"/delete\")\r\n subDeleteApi.setMethod(\"DELETE\")\r\n subDeleteApi.setGroupId(subGroup.getId())\r\n subDeleteApi.setScript(`return db${datasourceScript}.table(\'${subTableName}\')${subLogic}.where().eq(\'${subPrimary}\', ${subPrimaryLowerCamelCase}).delete()`)\r\n // subDeleteApi.setOption([new Option(\'permission\', `${permissionPrefix}:delete`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subDeleteApi)\r\n\r\n var subSaveFields = subColumns.filter(it => it.save).map(it => it.columnName.replace(/([A-Z])/g,\"_$1\").toLowerCase()).join(\',\')\r\n // 详情\r\n ApiInfo subGetApi = new ApiInfo()\r\n subGetApi.setName(\"详情\")\r\n subGetApi.setPath(\"/get\")\r\n subGetApi.setMethod(\"GET\")\r\n subGetApi.setGroupId(subGroup.getId())\r\n subGetApi.setScript(`return db${datasourceScript}.selectOne(\"\"\"select ${subPrimary},${subSaveFields} from ${subTableName} where ${subPrimary} = #{${subPrimaryLowerCamelCase}}\"\"\")`)\r\n // subGetApi.setOption([new Option(\'permission\', `${permissionPrefix}:view`, \'允许拥有该权限的访问\')])\r\n MagicResourceService.saveFile(subGetApi)\r\n}\r\n\r\nvar moduleGroup = getGroup(\'api\').moduleGroup\r\nreturn moduleGroup.id\r\n'); INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/新增接口.ms', '{\r\n \"properties\" : { },\r\n \"id\" : \"0631fbe5d71c4a6990dc45bbcadd35e5\",\r\n \"script\" : null,\r\n \"groupId\" : \"3766b233e65047908e6ade58f6a91cef\",\r\n \"name\" : \"新增接口\",\r\n \"createTime\" : null,\r\n \"updateTime\" : 1706848294180,\r\n \"lock\" : \"1\",\r\n \"createBy\" : null,\r\n \"updateBy\" : null,\r\n \"path\" : \"save\",\r\n \"method\" : \"POST\",\r\n \"parameters\" : [ ],\r\n \"options\" : [ ],\r\n \"requestBody\" : \"\",\r\n \"headers\" : [ ],\r\n \"paths\" : [ ],\r\n \"responseBody\" : null,\r\n \"description\" : null,\r\n \"requestBodyDefinition\" : null,\r\n \"responseBodyDefinition\" : null\r\n}\r\n================================\r\nreturn db.insert(\"\"\"\r\n INSERT INTO `sys_gen` (`id`, `interface_id`,`data_source`, `table_name`, `table_comment`, `columns`, `sub_table_name`, `sub_table_comment`, `sub_columns`, `info`, `update_time`, `create_time`) \r\n VALUES (uuid(),#{interfaceId},#{dataSource},#{tableName},#{tableComment},#{columns},#{subTableName},#{sub_tableComment},#{subColumns},#{info},now(),now())\r\n\"\"\")'); INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/根据表查列.ms', '{\r\n \"properties\" : { },\r\n \"id\" : \"8a8899e6a39e442ca51d08db50067cc0\",\r\n \"script\" : null,\r\n \"groupId\" : \"3766b233e65047908e6ade58f6a91cef\",\r\n \"name\" : \"根据表查列\",\r\n \"createTime\" : null,\r\n \"updateTime\" : 1706848387714,\r\n \"lock\" : \"1\",\r\n \"createBy\" : null,\r\n \"updateBy\" : null,\r\n \"path\" : \"columns\",\r\n \"method\" : \"GET\",\r\n \"parameters\" : [ ],\r\n \"options\" : [ ],\r\n \"requestBody\" : \"\",\r\n \"headers\" : [ ],\r\n \"paths\" : [ ],\r\n \"responseBody\" : null,\r\n \"description\" : null,\r\n \"requestBodyDefinition\" : null,\r\n \"responseBodyDefinition\" : null\r\n}\r\n================================\r\nreturn db.select(\"\"\"\r\n SELECT column_name,column_comment,column_type,case when is_nullable = \'YES\' then 0 else 1 end required\r\n FROM information_schema.COLUMNS \r\n WHERE table_name = #{name}\r\n AND column_name != \'id\'\r\n AND table_schema = DATABASE()\r\n\"\"\")'); INSERT INTO `magic_api_file` VALUES ('/tansci-api/api/应用管理/接口生成/表列表.ms', '{\r\n \"properties\" : { },\r\n \"id\" : \"2274d01e99954f35bacde40c983db2f8\",\r\n \"script\" : null,\r\n \"groupId\" : \"3766b233e65047908e6ade58f6a91cef\",\r\n \"name\" : \"表列表\",\r\n \"createTime\" : null,\r\n \"updateTime\" : 1706843981698,\r\n \"lock\" : \"1\",\r\n \"createBy\" : null,\r\n \"updateBy\" : null,\r\n \"path\" : \"tables\",\r\n \"method\" : \"GET\",\r\n \"parameters\" : [ ],\r\n \"options\" : [ ],\r\n \"requestBody\" : null,\r\n \"headers\" : [ ],\r\n \"paths\" : [ ],\r\n \"responseBody\" : null,\r\n \"description\" : null,\r\n \"requestBodyDefinition\" : null,\r\n \"responseBodyDefinition\" : null\r\n}\r\n================================\r\nreturn db.select(\"\"\"\r\n select table_schema,table_name,table_comment \r\n from information_schema.tables \r\n where table_schema = #{name}\r\n\"\"\")'); diff --git a/tansci-boot-ui/src/views/Index.vue b/tansci-boot-ui/src/views/Index.vue index a018b6d..12df9a2 100644 --- a/tansci-boot-ui/src/views/Index.vue +++ b/tansci-boot-ui/src/views/Index.vue @@ -4,6 +4,7 @@ const gzh = new URL('../assets/image/gzh.jpg', import.meta.url).href const state = reactive({ versionList: [ + {timestamp:'2024-03-27', icon:'CircleCheckFilled', color:'#409EFF', content: ['接口生成:生成父子表会报错问题处理']}, {timestamp:'2024-02-26', icon:'CircleCheckFilled', color:'#409EFF', content: ['登录验证码改为纯数字型,修改其他BUG']}, {timestamp:'2024-02-02', icon:'CircleCheckFilled', color:'#409EFF', content: ['新增后端接口代码生成器【应用开发-接口生成】']}, {timestamp:'2024-01-12', icon:'CircleCheckFilled', color:'#409EFF', content: ['解决 amis 城市选择无法使用问题']},