飞道科技

飞道科技文档总汇

服务返回类型

如调用某一个服务

const res = await nodejs(spaceid, 'sss', 参数);

res.xxx 报错,提示[ts] Property 'xxx' does not exist on type '{}'.

解决办法:

const res = await nodejs<{xxx: string;}>(spaceid, 'sss', 参数);

注意

这里的{xxx: string;}类型即服务sss返回的类型,服务应该看起来像是这样:

async function atom(){
	// todo
	return {
		xxx: 'test'
	};
}

时间戳处理

如何将时间戳转换为日期字符串

import format from './atom/dt/format';
format(Date.now(), 'yyyy--mm--dd');
format(Date.now(), "yyyy-mm-dd'T'HH:MM:ss")

参数参见dateformat

如何将日期字符串转换为时间戳

import parse from './atom/dt/parse';
parse('2018-05-07T18:31:31');

如何在页面上使用时分秒日期控件

<input type="datetime-local" step="1" value="2018-05-07T18:31:31" />

如何把时分秒控件获取的值变为时间戳

const dt = "2018-05-07T18:31:31";
const timestamp = new Date(dt).getTime();

如何连接两个表

参见./service/src/db-join.ts

两组数据使用join链接

import join from './atom/db/join-inner';

const a = [{'a':'a1','b':'b1','c':'c1'},{'a':'a2','b':'b2','c':'c2'},{'a':'a3','b':'b3','c':'c3'},{'a':'a4','b':'b4','c':'c4'}];
const b = [{'a':'a3','d':'d3','e':'e3'},{'a':'a4','d':'d4','e':'e4'},{'a':'a5','d':'d5','e':'e5'}];

const c = join(a,b,'a','a');
// 返回的数据为
[{'a':'a3','b':'b3','c':'c3','d':'d3','e':'e3'},{'a':'a4','b':'b4','c':'c4','d':'d4','e':'e4'}]
////////////////////////

const a = [{'a':'a1','b':'b1','c':'c1'},{'a':'a2','b':'b2','c':'c2'},{'a':'a3','b':'b3','c':'c3'},{'a':'a4','b':'b4','c':'c4'},{'a':'a5','b':'b5','c':'c5'}];
const b = [{'a':'a3','d':'d3','e':'e3'},{'a':'a5','d':'d5','e':'e5'},{'a':'a4','d':'d4','e':'e4'}];

const c = join(a,b,'a','a');
// 返回的数据为,数据顺序为右侧数据顺序
[{'a':'a3','b':'b3','c':'c3','d':'d3','e':'e3'},{'a':'a5','b':'b5','c':'c5','d':'d5','e':'e5'},{'a':'a4','b':'b4','c':'c4','d':'d4','e':'e4'}]

const c = join(b, a,'a','a');
[{'a':'a3','b':'b3','c':'c3','d':'d3','e':'e3'},{'a':'a4','b':'b4','c':'c4','d':'d4','e':'e4'},{'a':'a5','b':'b5','c':'c5','d':'d5','e':'e5'}]

访问文件

import { spaceid, file_url } from './config';
`<a class="display-ib ht30 l-ht30 vertical-a-t font14" target="_blank" download="" href="${file_url}getfile?productid=${spaceid}&id=">下载附件</a>`

数据库插入多条数据

import { v4 as uuid } from 'uuid';
import insert from './atom/db/insert';

import { IBaseTable } from './atom/db/interfaces';

declare const action_id: string;
declare const session_id: string;
declare const spaceid: string;

interface Message {
    names: string[];
}

interface Student extends IBaseTable {
    name: string;
}

async function atom(msg: Message) {
    const { exec, prepare } = insert(action_id, session_id, spaceid, '1000');
    const data = msg.names.map((name)=>{
        return {
            _id: uuid(),
            name
        };
    });
    prepare<Student>('student', data);
    const ret = await exec();
    if (ret.code === 1) {
        return 'success';
    } else {
        return 'fail';
    }
}

查找节点

查找子节点

  1. 单个节点查找

     fd.data.node.querySelector('tagname');
     fd.data.node.querySelector<HTMLInputElement>('#id');
     fd.data.node.querySelector<HTMLSpanElement>('.class');
     fd.data.node.querySelector<HTMLTextAreaElement>('[attribute-name]');
     fd.data.node.querySelector<HTMLAnchorElement>('[attribute-name=attribute-value]');
    
  2. 多个节点查找

     Array.from(fd.data.node.querySelectorAll('tagname'));
     Array.from(fd.data.node.querySelectorAll<HTMLInputElement>('.class'));
     Array.from(fd.data.node.querySelectorAll<HTMLSpanElement>('[attribute-name]'));
     Array.from(fd.data.node.querySelectorAll<HTMLAnchorElement>('[attribute-name=attribute-value]'));
    

查找父级节点

node.parentElement as HTMLDivElement;
node.closest('tagname');
node.closest('.class') as HTMLInputElement;
node.closest('[attribute-name]') as HTMLSpanElement;
node.closest('[attribute-name=attribute-value]') as HTMLAnchorElement;

调用服务原子操作引用错误

// 服务端
import nodejs from > '@feidao/web/atom/nodejs/msg/nodejs';
// 浏览器模拟服务端
import nodejs from > '@feidao/web/atom/nodejs/msg-b/nodejs';
// 浏览器端
import nodejs from > "@feidao/web/atom/browser/msg/nodejs";

点击事件无响应

从以下几点排查错误

  1. 组件id正确
  2. 页面正确引入了所有组件
  3. 调用事件正确发出了
  4. 被调用组件根节点正确绑定了调用事件
  5. 页面中该组件使用的id没有重复
  6. 被调用组件正确配置了该调用事件和响应的对应关系 S.ts
  7. 被调用组件正确引用了全部必要响应
  8. 响应被执行,且让被调用组件显示

初始化下拉框

  1. 给select元素绑定p块
     <select data-feidao-presentation="p01">
     </select>
    
  2. 获取下拉框数据
     import nodejs from > "@feidao/web/atom/nodejs/msg-b/nodejs";
     const data = (await nodejs(fd.data.spaceid, '服务名', 参数)) as Array<{key: string; value: string;}>;
    
  3. 编写下拉框内容模板(p01.ts)
        
     <options value="">
     </options>
        
    

    有时候我们会额外增加一项,如请选择

     <options>请选择</options>
        
     <options value="">
     </options>
        
    
  4. 渲染
     import p01 from './p01';
     import render from '@feidao/web/atom/nodejs/render/render';
     render(fd.data.node, data, p01, 'p01');
    

设置下拉选择框默认选中项

<select>
    <option value="已采购"  selected >已采购</option>
    <option value="采购中"  selected >采购中</option>
</select>