服务返回类型
如调用某一个服务
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';
}
}
查找节点
查找子节点
-
单个节点查找
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]');
-
多个节点查找
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";
点击事件无响应
从以下几点排查错误
- 组件id正确
- 页面正确引入了所有组件
- 调用事件正确发出了
- 被调用组件根节点正确绑定了调用事件
- 页面中该组件使用的id没有重复
- 被调用组件正确配置了该调用事件和响应的对应关系 S.ts
- 被调用组件正确引用了全部必要响应
- 响应被执行,且让被调用组件显示
初始化下拉框
- 给select元素绑定p块
<select data-feidao-presentation="p01"> </select>
- 获取下拉框数据
import nodejs from > "@feidao/web/atom/nodejs/msg-b/nodejs"; const data = (await nodejs(fd.data.spaceid, '服务名', 参数)) as Array<{key: string; value: string;}>;
- 编写下拉框内容模板(p01.ts)
<options value=""> </options>
有时候我们会额外增加一项,如
请选择
<options>请选择</options> <options value=""> </options>
- 渲染
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>