华为云用户手册

  • 配置说明 表1 配置说明 参数名 是否必须 功能 devspore.auth.exclude-paths false 不需要认证的路径,多个规则用分号(;)分隔,优先级大于devspore.auth.auth-patterns。 devspore.auth.auth-patterns false 需要认证的路径,多个规则用分号(;)分隔。 devspore.auth.in-header false token是否在header中,默认true。 devspore.auth.token-name false token在header中的参数名,inHeader设置为true时生效,默认“X-Auth-Token”。
  • 实现示例 entry插件 继承抽象类Processor,实现doProcess接口,可定义多个插件。 插件均需注册为bean。 import com.huawei.devspore.horizon.DataEvent; import com.huawei.devspore.horizon.exception.PluginException; import com.huawei.devspore.horizon.processor.Processor; import org.springframework.stereotype.Component; /** * custom request plugin */ @Component public class CustomRequestPlugin extends Processor { @Override public boolean doProcess(DataEvent dataEvent) throws PluginException { // do your code ........ return true; } } 多个插件以","分隔,多个插件按配置顺序执行。 devspore: horizon: processors: defaultRequestPlugin,customRequestPlugin; exit插件 实现Observer接口中observer接口,可定义多个插件。 插件均需注册为bean。 import com.huawei.devspore.horizon.DataEvent; import com.huawei.devspore.horizon.exception.PluginException; import com.huawei.devspore.horizon.subscribe.Observer; import org.springframework.stereotype.Component; /** * custom response plugin */ @Component public class CustomResponsePlugin implements Observer { @Override public void observe(DataEvent dataEvent) throws PluginException { // do your code ...... } } 配置文件中多个插件以","分隔,多个插件按配置顺序执行。 devspore: horizon: observers: defaultResponsePlugin,customResponsePlugin
  • 整体架构 devspore-horizon是DevSpore开发框架提供的一种插件机制,您可以在请求被处理前(Entry)和应答发送前(Exit)调用DevSpore预置的,也可以使用自己开发的插件,可用于实现统一的操作前认证、鉴权,操作后消息发送、缓存更新、审计等功能。 devspore-horizon架构图如下: 图1 架构图 Entry类插件采用的是责任链模式(chain of resposibility),所有的插件按照被注册的顺序依次调用,其中有一个插件抛出异常则整个请求返回失败。 Exit类插件采用的是观察者模式(Observer),所有的插件作为观察者注册,DevSpore运行时库里的Publisher模块同时调用所有的观察者插件(插件可能被并发执行且执行的顺序随机),插件执行的结果不能影响请求返回。
  • 业务场景及设计流程说明 在AstroPro中,用户通过业务建模,可生成高可用、高可靠、以及安全稳定的企业级IT应用框架。本入门通过创建一个简单的订单系统,帮助您快速上手AstroPro。 本入门为创建一个简单的订单系统,订单系统中包括用户(User)、订单(Order)和订单详情(OrderDetail)三个业务对象,且三个对象之间存在聚合关系,即用户存在时,订单才会存在,订单存在时,订单详情才会存在。同时一个用户可以关联多个订单,订单通过单号进行标识,一个订单又可以关联多个商品,例如手机、耳机等,商品可以记录数量。在AstroPro中,构建上述一个订单系统的流程,如图图1所示。 图1 开发订单系统流程图
  • 购买实例 进入购买Astro企业应用实例页面。 “实例规格”选择“企业版”,其他参数按需进行设置,单击“立即购买”。 图1 选择购买规格 确认订单无误后,单击“去支付”。 以购买企业版一年为例,若为基础版,此处配置费用为“0”。 图2 确认订单 选择支付方式,单击“确认付款”,完成支付。 订单支付成功后,单击“返回Astro企业应用控制台”。 在Astro企业应用控制台中,可以查看到Astro企业应用的实例状态。当“实例状态”变为“运行中”时,说明实例已安装完成,可以正常使用Astro企业应用。 图3 查看实例状态
  • 购买扩容包 扩容包仅适用于在购买专业版或企业版的基础上使用,不可单独购买和退订。扩容包的使用截止时间与主资源的截止时间保持一致。 参考购买实例中操作,购买AstroPro企业版实例。 在已购买的实例中,单击“操作”,选择“扩容”。 图4 选择扩容 在购买扩容包页面,设置购买数量,单击“立即购买”。 一个资源扩容包,包含用户数50个、应用数20个、实体个数200个,请按需设置购买数量。 图5 购买扩容包 选择支付方式,单击“确认付款”,完成订单支付。
  • 18、x-interface-name-style 作用: 控制自定义接口、实现类命名风格。 标签值类型: enum(DEFAULT,SERVICE_IMPL_AND_NO_I_INTERFACE_PREFIX),配置为DEFAULT时和不配置此参数效果相同。 使用位置: x-interface-name-style 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-entity-package: "customdto" x-interface-name-style: SERVICE_IMPL_AND_NO_I_INTERFACE_PREFIX ------------ 使用效果: 使用前: service类的命名为 I+tag驼峰+ service eg: IOrderService 使用后: service类的命名为 tag驼峰+ service eg: OrderService
  • 5、x-class-annotations 作用: 添加指定的注解。 该标签用于在api接口或者dto类上添加指定的注解。 标签值类型: List 使用位置: x-class-annotations(定义在swagger的最外层时,会在所有的api接口上都添加指定的注解) components.schemas.model.x-class-annotations(定义dto对象上时,只在该对象上添加指定的注解) 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-imports: - "org.springframework.stereotype.Controller;" # 使用的时候结尾一定要带上 ; - "org.springframework.transaction.annotation.Transactional;" x-class-annotations: #此处添加的注解,在所有生成的api上都会添加 - "@Controller" # 此处会将 @Controller识别为一个字符串添加到api接口类上,并不会导入相应的包,需要使用 x-imports标签手动导入相应的包 - "@Transactional" # 此处会将 @Transactional识别为一个字符串添加到api接口类上,并不会导入相应的包,需要使用 x-imports标签手动导入相应的包 使用效果: 使用前: package com.huaweicloud.icsl.api; import ------ /** * CARDApi interface */ public interface CARDApi { ----------- } 使用后: package com.huaweicloud.icsl.api; import org.springframework.stereotype.Controller; // 通过x-imports 引入的导包 import org.springframework.transaction.annotation.Transactional; // 通过x-imports 引入的导包 /** * CARDApi interface */ @Controller // 通过x-class-annotations 引入的注解 @Transactional // 通过x-class-annotations 引入的注解 public interface CARDApi { ----------- }
  • 6、x-controller-annotations 作用: 添加指定的注解。 该标签用于在api实现类上添加指定的注解。 标签值类型: String 使用位置: x-class-annotations(定义在swagger最外层,所有的api实现类上都会添加指定注解) components.schemas.model.x-class-annotations(定义在指定tag下,只会在具体api实现类上添加指定注解) 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-imports: - "org.springframework.context.annotation.Profile;" # 使用的时候结尾一定要带上 ; x-controller-annotations: # 此处添加的注解,在所有生成的api实现类上都会添加,需要使用x-imports手动导入相应的包 - '@Profile("test")' 使用效果: 使用前: public class CardApiController implements CardApi { ------ } 使用后: @Profile("test") // 通过x-controller-annotations引入的注解 public class CardApiController implements CardApi { ------ }
  • 9、x-type 作用: 给dto的字段设置指定的类型。 标签值类型: String 使用位置: components.schemas.model.prorperties.field.x-type(设置在dto的指定字段上时,改变该字段的类型为指定类型) 使用示例: definitions: Contain: type: "object" x-generic: T x-extends: Parent properties: name: type: "string" description: "" example: data: type: "string" x-type: T # 通过x-type指定data的类型为T, 此处是将T当为一个字符串设置上,如果设置为一个对象时,需要使用x-imports手动导入相应的包 xml: name: "Contain" namespace: "com.huaweicloud.icsl.app.dto" --------------- 使用效果: 使用前: public class Contain implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("name") private String name = null; @JsonProperty("data") private String data = null; } 使用后: public class Contain implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("name") private String name = null; @JsonProperty("data") private T data = null; }
  • 16、x-enum-class-name 作用 用于标识查询参数对应的枚举类。 标签值类型 String 使用位置 paths.path.operation.parameters.fields.x-enum-value-type 对应的是swagger中已定义的枚举对象名字。 使用示例 Paths: /v1/orders/{order_id}/order-details: get: tags: - "Order" summary: "查询OrderDetail" description: "Returns OrderDetail" operationId: "ListOrderDetails" x-is-registered: 'N' x-support-sdk: 'N' x-mybatis-paging: true consumes: - "application/json" produces: - "application/json" parameters: - name: "status" in: "query" description: "status" required: false type: "string" x-enum-class-name: "OrderStatus" #此标签只在查询参数中使用 -------- 使用效果: 使用前: public class ListOrderDetailsQo implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("status") private Object status = null; ------------------- } 使用后: public class ListOrderDetailsQo implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("status") private OrderStatus status = null; ------------------- }
  • 17、x-entity-package 作用: 用于在swagger中指定实体类dto生成的包名。 标签值类型: String 使用位置: x-entity-package(定义在swagger的最外层) 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-entity-package: "customdto" ------------ 使用效果: 使用前: #dto对象生成目录 xxx.xx.xx.dto 使用后: #dto对象生成目录 xxx.xx.xx.customdto
  • 4、x-annotations 作用: 添加指定的注解。 该标签用于在api的参数或者dto指定属性上添加注解。 标签值类型: List 使用位置: paths.path.operation.parameters.x-annotations(定义在api中的参数上时,只在此参数上生成对应的注解) definitions.model.properties.property.x-annotations(定义在dto的字段上时,只在此字段上生成对应的注解) 使用示例: Card: type: "object" properties: id: type: "string" description: "id" example: "id" balance: type: "integer" format: "int64" description: "balance" example: 123 address: type: "string" description: "address" example: "address" x-annotations: - "@InjectMocks" # 此处在address属性上添加了一个 @InjectMocks 注解 x-imports: - "org.mockito.InjectMocks;" # x-annotations实际是把 @InjectMocks当做字符串添加到了address上,所以需要自己通过x-imports导入相应的类 creator: type: "string" description: "creator" example: "creator" create_time: type: "string" format: "date-time" default: "CURRENT_TIMESTAMP" description: "create time" example: "2020-02-27 15:00:08" modify_time: type: "string" format: "date-time" default: "CURRENT_TIMESTAMP" description: "modified time" example: "2020-02-27 15:00:08" description: type: "string" description: "description info" example: "description" xml: name: "card" namespace: "com.huaweicloud.icsl.model" 使用效果: 使用前: public class Card implements Serializable { private static final long serialVersionUID = 1L; ----- @JsonProperty("address") private String address = null; ---- } 使用后: public class Card implements Serializable { private static final long serialVersionUID = 1L; ------- @JsonProperty("address") @InjectMocks // 通过 x-annotations 引入的注解 private String address = null; -------- }
  • 21、x-pom-gav 作用 自定义标签-pom坐标引入。 标签值类型 List 使用位置 x-pom-gav components.schemas.model.x-pom-gav components.schemas.model.properties.property.x-pom-gav paths.path.operation.x-pom-gav paths.path.operation.parameters.name.x-pom-gav x-pom-gav在Swagger文件中的位置可以是类级别、方法级别、参数级别,groupId、artifactId、version按照顺序用:连接,全局有一个地方定义即可,不需要重复定义。 使用示例 swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-entity-package: "customdto" x-interface-name-style: SERVICE_IMPL_AND_NO_I_INTERFACE_PREFIX x-user-defined-consumes: true x-pom-gav: # 手动引入hibernate-validator:依赖 - "org.hibernate.validator:hibernate-validator:8.0.1.Final" ------- 使用效果: 使用前: pom中没有org.hibernate.validator:hibernate-validator:8.0.1.Final的依赖 使用后: pom中生成org.hibernate.validator:hibernate-validator:8.0.1.Final的依赖
  • 2、x-default-empty 作用: 只支持get请求,指定String类型参数生成默认值为""。 需要配合metadata元数据中generatorPolicy的queryParamLimit使用,当将请求参数转换为对象后此标签才会生效。 标签值类型: boolean 使用位置: paths.path.operation.parameters.name.x-default-empty 当该标签置为true时,原定义默认值的default标签失效,该标签只可用于定义String参数为""。 使用示例: paths: /v1/cards: get: # 该接口设置了查询参数转换为对象的功能,最终所有的参数都会自动定义到一个对象中 tags: - "CARD" summary: "查询所有Card" description: "Returns all Card" operationId: "ListCards" x-is-registered: 'N' x-support-sdk: 'N' x-mybatis-paging: true x-query-param-body: CardQo parameters: - name: "creator" in: "query" description: "creator" required: false type: "string" x-default-empty: true # 使用 x-default-empty 指定creator的默认值为 "" ----- 使用效果: 使用前: public class ListCardsQo implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("creator") private String creator = null; // 此处生成的creator默认值为 null ------ } 使用后: public class CardQo implements Serializable { // 该示例使用了x-query-param-body指定了对象名为CardQo,所以和使用前的的示例中类名不一样 private static final long serialVersionUID = 1L; @JsonProperty("creator") private String creator = ""; //此处生成的creator的默认值为 "" ------- }
  • 3、x-imports 作用: 自主定义类中需要添加的 import 引用。 标签值类型: List 使用位置: x-imports(当定义在swagger的最外层时,所有的类中都会引入import) components.schemas.model.properties.property.x-imports(当定义在dto的字段中时,只会在该dto类中引入import) definitions.model.x-imports(当定义在dto上时,只会在该dto类中引入import) paths.path.operation.x-imports(当定义在api中时,只会在该api中引入import) 在生成代码的时候,最终会有格式化的一个步骤,类上的无用import会被消除。 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-imports: - "org.springframework.stereotype.Controller;" # 使用的时候结尾一定要带上 ; - "org.springframework.transaction.annotation.Transactional;" 使用效果: 使用前:api类中不生成org.springframework.stereotype.Controller; 和org.springframework.transaction.annotation.Transactional;引用。 使用后:api类中生成如下引用。 import org.springframework.stereotype.Controller; # 通过x-import引入 import org.springframework.transaction.annotation.Transactional; # 通过x-import引入 public interface CARDApi { ------- );
  • DDL文件设计 根据业务模型,完成DDL文件设计,DDL标签使用可参考DDL标签使用指南。 示例: CREATE TABLE `t_value_object` ( `workspace1_id` varchar(200) NOT NULL COMMENT 'relation("t_workspace1","id","AGGREGATE")', `number` int NOT NULL COMMENT 'valueObject', `new_name3` varchar(200) NOT NULL COMMENT 'searchable', `new_name4` varchar(200) NOT NULL COMMENT 'searchable', CONSTRAINT pk_t_value_object PRIMARY KEY (`workspace1_id`, `number`) ) COMMENT = 'primaryKeyType("NONE")'; CREATE TABLE `renameWorkspace` ( `key1` varchar(200) NOT NULL COMMENT 'alias("newName2")', `key2` varchar(200) NOT NULL COMMENT 'alias("newName3")', `renameField` boolean NOT NULL COMMENT 'alias("newName4")', `new_name5` int NOT NULL, `new_name6` bigint(40) NOT NULL, `new_name7` decimal(40, 0) NOT NULL, `new_name8` float(40, 0) NOT NULL, `new_name9` double(40, 0) NOT NULL, `new_name10` date NOT NULL, `new_name11` timestamp NOT NULL, CONSTRAINT pk_renameworkspace PRIMARY KEY (`key1`, `key2`) ) COMMENT = 'alias("renameWeaweae");primaryKeyType("COMPOSITE")'; CREATE TABLE `t_workspace6` ( `parent_id` bigint(40) NULL COMMENT 'parent_id;relation("t_workspace6","id","RECURSIVE")', `id` bigint(40) NOT NULL, `new_name4` varchar(200) NOT NULL, `new_name5` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) COMMENT = 'primaryKeyType("SNOWFLAKE")';
  • 关系标签 一对多关系 在MANY一方的关系字段上添加标注:COMMENT 'relation("关联表名","关联表字段","ONE2MANY")'。 DDL示例: CREATE TABLE `t_workspace2` ( `id` varchar(200) NOT NULL, `new_name3` varchar(200) NOT NULL, `new_name4` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) COMMENT = 'primaryKeyType("UUID")'; CREATE TABLE `t_workspace3` ( `id` varchar(200) NOT NULL, `new_name4` varchar(200) NOT NULL, `workspace2_id` varchar(200) NOT NULL COMMENT 'searchable;relation("t_workspace2","id","ONE2MANY")', PRIMARY KEY (`id`) ) COMMENT = 'primaryKeyType("UUID")'; 标签使用效果: 多对多关系 在多对多关系表的关系字段上添加标注:COMMENT = 'relation("关联表名","关联表字段","MANY2MANY")'。 此处关系的首要方关联字段写在关系的次要方关联字段前面,即workspace4_id字段在workspace5_id前面。示例中首要方:t_workspace4,次要方:t_workspace5。 DDL示例: CREATE TABLE `t_workspace4` ( `id` varchar(200) NOT NULL, `new_name3` varchar(200) NOT NULL, `new_name4` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) COMMENT = 'primaryKeyType("UUID")'; CREATE TABLE `t_workspace5` ( `id` varchar(200) NOT NULL, `new_name3` varchar(200) NOT NULL, `new_name4` varchar(200) NOT NULL, `new_name5` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) COMMENT = 'primaryKeyType("UUID")'; CREATE TABLE `t_rel_workspace4_workspace5` ( `new_name3` varchar(200) NOT NULL, `new_name4` varchar(200) NOT NULL, `workspace4_id` varchar(200) NOT NULL COMMENT 'relation("t_workspace4","id","MANY2MANY")', `workspace5_id` varchar(200) NOT NULL COMMENT 'relation("t_workspace5","id","MANY2MANY")', CONSTRAINT pk_t_rel_workspace4_workspace5 PRIMARY KEY (`workspace4_id`, `workspace5_id`) ) COMMENT = 'relWorkspace4Workspace5'; 标签使用效果: 聚合关系 在聚合关系的主表的关系字段上添加标注:COMMENT 'relation("关联表名","关联表字段","AGGREGATE")'。 DDL示例: CREATE TABLE `t_spec_group` ( `id` varchar(40) NOT NULL COMMENT 'id', `city_id` varchar(40) NOT NULL COMMENT 'relation("t_city","id","AGGREGATE")', `name` varchar(200) NULL, PRIMARY KEY (`id`) ) COMMENT = 'specGroup'; CREATE TABLE `t_city` ( `id` varchar(40) NOT NULL COMMENT 'id', `city` varchar(200) NULL, `dateType` date NOT NULL COMMENT 'dateType', PRIMARY KEY (`id`) ) COMMENT = 'city'; 标签使用效果: 树递归关系 在树递归关系BO表中的"parent_id"上添加标注:COMMENT 'relation("关联表名","关联表字段","RECURSIVE")'。 DDL示例: CREATE TABLE `t_workspace6` ( `parent_id` bigint(40) NULL COMMENT 'parent_id;relation("t_workspace6","id","RECURSIVE")', `id` bigint(40) NOT NULL, `new_name4` varchar(200) NOT NULL, `new_name5` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) COMMENT = 'primaryKeyType("SNOWFLAKE")'; 标签使用效果:
  • 主键标签 在comment中使用函数形式表示主键类型。可选值为:UUID、SNOWFLAKE、AUTO_INCREASE_INT32、AUTO_INCREASE_INT64、USER_DEFINE。 参数说明: 标签名称:valueObject。 数据类型:boolean类型。 默认值:false。 标签规则 UUID时主键应是字符类型。 AUTO_INCREASE_INT32的主键应是int类型。 AUTO_INCREASE_INT64的主键应是bigint类型。 SNOWFLAKE时主键应是数值(int/long)类型。 非USER_DEFINE的主键时,主键名不是“id”。 USER_DEFINE的主键时,未指定主键字段。 同时非USER_DEFINE时,可以不指定主键(即ddl中可以没有primary key的声明语句)。 当未指定标签时,指定主键情况下主键类型默认为USER_DEFINE; 未指定主键默认为UUID。 标签示例: CREATE TABLE `t_workspace4` ( `id` varchar(200) NOT NULL, `new_name3` varchar(200) NOT NULL, `new_name4` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) COMMENT = 'primaryKeyType("UUID")'; 标签使用效果:
  • 值对象标签 在comment中使用函数形式表示Value Object类型BO,标识作用于值对象表的number字段。 参数说明: 标签名称:valueObject。 数据类型:boolean类型。 默认值:false。 标签示例: CREATE TABLE `t_workspace9` ( `id` varchar(40) NOT NULL COMMENT 'id', `name` varchar(200) NOT NULL COMMENT 'name', PRIMARY KEY (`id`) ) COMMENT = 't_workspace9'; CREATE TABLE `t_object1` ( `workspace9_id` varchar(0) NOT NULL COMMENT 'relation("t_workspace9","id","AGGREGATE")', `number` int NOT NULL COMMENT 'valueObject' ) COMMENT = 'object1'; 标签使用效果:
  • 别名标签 在comment中使用函数形式标识字段或表的别名,标识作用于表中字段或表名。 参数说明: 标签名称:alias。 数据类型:string类型。 默认值:空(原字段名或表名)。 标签示例: CREATE TABLE `t_workspace9` ( `id` varchar(40) NOT NULL COMMENT 'id', `name` varchar(200) NOT NULL COMMENT 'alias("rename");searchable', PRIMARY KEY (`id`) ) COMMENT = 'alias("workspace10")'; 标签使用效果: 表名别名效果: 字段别名效果:
  • 字段允许搜索标签 在comment中使用函数形式表示字段允许搜索,标识作用于表中需设置为searchable的字段。 参数说明: 标签名称:searchable。 数据类型:boolean类型。 默认值:false。 标签示例: CREATE TABLE `t_workspace9` ( `id` varchar(40) NOT NULL COMMENT 'id', `name` varchar(200) NOT NULL COMMENT 'name;searchable', PRIMARY KEY (`id`) ) COMMENT = 'workspace9'; 与其他标签同时使用";"分隔使用示例: CREATE TABLE `t_object1` ( `workspace9_id` varchar(0) NOT NULL COMMENT 'relation("t_workspace9","id","AGGREGATE");searchable', `number` int NOT NULL COMMENT 'valueObject' ) COMMENT = 'object1'; 标签使用效果:
  • 字段数据类型标签 在comment中使用函数形式标识字段的数据类型,标识作用于表中字段,可使标识字段数据类型在模型中修改为标识类型。 参数说明: 标签名称:type。 数据类型:string类型。 默认值:空(原字段数据库类型对应的java类型)。 标签示例: CREATE TABLE `t_workspace9` ( `id` varchar(40) NOT NULL COMMENT 'id', `name` varchar(200) NOT NULL COMMENT 'type("integer")', PRIMARY KEY (`id`) ) COMMENT = 't_workspace9'; 标签使用效果:
  • 注意事项 SwaggerCodeGen会将n、FALSE、 No和off转换成boolean类型的false,将Y、true、Yes和ON转换成boolean类型的true,所以在java代码编译时会报错。因此“是否生成客户端”开关打开时,表中定义上述字段时可使用“别名标签”给字段设置别名。 关系表标识:含有"_rel_"的表名,大小写不敏感。例如:t_rel_workspace4_workspace5。
  • 组件协议结构规范 组件协议结构规范用于描述组件的关键信息和配置项,对应组件的components字段。 表1 组件协议结构规范 字段 说明 类型 name 组件名称,以“i18n”形式配置。 Object component 组件名。 String icon 组件图标。 String screenshot 快照。 String description 组件介绍描述。 String npm 组件NPM包信息,会根据此描述引入npm源组件。 Object npm.package npm包名。 - npm.exportName 需要从npm包中import的名称。 - npm.version package的版本。 - npm.destructuring 是否以结构方式import。 - npm.script ESModule格式的JS文件CDN地址。 String npm.css 样式文件CDN地址。 String group 组件分组。 String schema 组件元数据(定义属性、事件等)。 Object configure 组件的属性信息。 Object version 组件版本。 Object
  • 模板文件介绍 所有的自定义组件都在src/components文件夹里面内开发,模板内提供了两个预置模板componentA和componentB,可直接在模板基础上进行开发,如需更多可复制添加。 图1 默认组件 components都包含三个文件,一个index.js,一个*.vue文件和一个componentBundle.json文件,其中index.js和componentBundle.json这两个文件名字不可更改。 图2 components文件夹 componentBundle.json:用于定义一组组件的元数据,包括组件的配置、依赖关系、版本信息等。 index.js:作为应用程序的入口文件,即程序启动时首先执行的脚本。 *.vue:用于定义Vue组件,包括模板(HTML)、脚本(JavaScript)和样式( CSS )。
  • 编写全局样式 参考登录AstroPro界面中操作,登录AstroPro界面。 在左侧导航栏中,选择“前端应用”。 单击待编辑应用模块内的“开发应用”,进入设计器。 画布中选中组件,在组件属性设置面板选择“样式”。 单击全局样式的。 在弹框中直接编写全局样式。 可以直接声明多条 CS S样式或其他媒体查询的样式。 图3 编写全局样式 单击“保存”,完成全局样式编辑。 通过类名绑定已创建的全局样式。 图4 效果展示
  • 选中组件 添加了组件之后,您可以选中组件,对组件进行修改、删除、移动等操作。 以下为选中组件的相关方法: 从画布中直接单击组件选中组件。 图6 直接单击选中组件 在左侧大纲树插件中,以树的形式展示了当前页面中所有的组件,单击树节点选中画布中的组件。 图7 单击树节点选中组件 底部节点树展示了从根节点到当前选中组件的层级节点,单击底部的节点树的某一个节点,选中父组件。 图8 展示当前选中组件的层级节点 图9 单击节点树的父点,选中父组件
  • 步骤三:新建一个页面 单击“页面管理”的新增页面按钮。 设置页面基本属性。 选择页面类型:可选“静态页面”或“公共页面”。 页面名称:只允许包含英文字母,且以大写开头驼峰格式,如DemoPage。 选择文件夹:下拉框中选择文件夹名称。 路由:输入路由信息,只允许包含英文字母、数字、下划线、中划线和正斜杠组成, 且以英文字母开头。 图4 创建页面 单击“保存”。 在弹框中输入历史备份信息,单击“确定”。
  • 左侧插件栏 :物料插件,提供设计所需组件,拖拽组件至画布中进行页面设计,具体操作请参考使用组件。 :大纲树插件,可查看页面大纲树。 :页面管理工具插件,可以新增文件夹,可以新增文件夹,以及对页面或者文件的增删改操作。 :数据源管理插件,可用于来配合画布上的组件渲染,具体操作请参考使用数据源。 :资源管理插件,将一些可复用的公共函数编写到工具类中,也可以将一些npm包引用到工具类中,供后续调用,具体操作请参考使用工具类方法。 :国际化插件,可添加国际化词条,实现中英文切换。 :JS方法插件,您可以通过使用JS面板编写自己的代码,从而实现较为复杂的业务场景。 :状态管理插件,可添加页面变量和添加全局变量,供页面及应用使用。 单击插件按钮后会向右展开对应插件设置面板。例如,单击,将展开物料资产包。 图2 展开物料资产包
共100000条