Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

开发常见问题 #33

Open
sunhaolin opened this issue Dec 5, 2023 · 0 comments
Open

开发常见问题 #33

sunhaolin opened this issue Dec 5, 2023 · 0 comments

Comments

@sunhaolin
Copy link
Contributor

sunhaolin commented Dec 5, 2023

  • action rest 不能直接解析到前台传的文件流,在前台上传时amis上传文件控件可选择使用base64字符串的方式传入rest接口【⚠️只能是小文件】
  • 服务端上传文件可调用'~packages-@steedos/service-files.uploadCollectionFile' [Feature]: objectql service提供上传/下载附件api steedos-platform#5930
  • 点击某对象记录列表页按钮获取选中的记录,按钮自定义脚本: 【TODO 统一componentId规范,如"listview_" + objectName表示列表的componentId】
/* 自定义JS使用说明:  
* 1.动作执行函数doAction,可以执行所有类型的动作  
* 2.通过上下文对象context可以获取当前组件实例,例如context.props可以获取该组件相关属性  
* 3.事件对象event,在doAction之后执行event.stopPropagation();可以阻止后续动作执行
*/
const objectName = event.data.objectName;
const listViewRef = event.context.scoped.getComponentById("listview_" + objectName);
const selectedItems = listViewRef && listViewRef.props.store.toJSON().selectedItems || [];
if (selectedItems.length === 0) {
    doAction({ actionType: 'toast', args: { msg: '请至少选择一条记录' } });
    event.stopPropagation();
}
  • 刷新记录详细页,但不刷新浏览器
{
    "actionType": "broadcast",
    "args": {
        "eventName": "@data.changed.invoices"
    },
    "data": {
        "objectName": "invoices"
    }
}
  • 使用amis autoFill 自动给关联字段赋值,如新建银行信息时选择开户银行后自动给联行号赋值,在开户银行字段配置:
amis:
  autoFill:
    "showSuggestion": false
    "fillMapping": 
      "combinenum": "${combinenum}"
    "api":
      "method": "post"
      "url": "/graphql"
      "data": 
        "query": '{rows:bank(filters: ["_id", "=", "${pk_bankdoc}"]){combinenum}}'
      "silent": false
amis:
  autoFill:
    "showSuggestion": false
    "fillMapping": 
      "combinenum": "${combinenum}"
    "api":
      "method": "post"
      "url": "TODO open api"
      "data": 
        "query": 'TODO open api'
      "silent": false

项目开发经验:

  • 提交代码前先更新,防止冲突
  • 涉及到非整数数值计算如金额等,请使用 bignumber.js包,防止 0.1 + 0.2 = 0.30000000000000004 导致结果不准的情况
  • action、method中使用this.getObject 执行增删改查,如 const obj = this.getObject(‘contracts’); await obj.find({})
  • ctx.call 会传递 meta 信息,如 meta.user,在rest里执行ctx.call会默认传递meta.user
  • 定时任务使用 moleculer-cron davidroman0O/moleculer-cron: Moleculer Addons - Cron tasks (github.com)
  • api接口返回值格式 参考amis格式 API (baidu.com)
  • 软件包功能参数配置写在 package.service.js的 settings属性中,通过this.settings获取
  • 服务端日志打印设置颜色可使用 chalk 包 chalk - npm (npmjs.com)、工具包lodash - npm (npmjs.com)、日期库moment - npm (npmjs.com)
  • src下event的函数签名需要注意下,不能使用单参数且参数名称不能是ctx. 否则编译后参数值和src运行不一致. 请使用 async handler(payload, sender, event, ctx){}四个参数
  • .env/.env.local中配置的环境变量值注意不要有空格,否则可能导致值不准确
  • defaultValue: '"上海大众燃气有限公司"',如果想在服务端也生效需要加两层引号
  • 继承一个对象时,在package.service.js中的dependencies中需要配置原始对象所在软件包的服务名,例如继承space_users.object.yml 需要在软件包的package.service.js的dependencies中配置”~packages-@steedos/standard-space"
  • vscode debug模式打断点,可以打条件断点(符合某个条件时才进入断点)、记录点(这样就不用写console.log然后再重启服务)
  • vscode 设置用户代码片段提高开发效率,如action trigger
@sunhaolin sunhaolin changed the title 开发问题点 开发功能点 Dec 6, 2023
@sunhaolin sunhaolin changed the title 开发功能点 开发常见问题 Dec 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant