mirror of
https://gitee.com/baidu/amis.git
synced 2024-12-02 12:08:13 +08:00
Merge pull request #315 from 2betop/master
tpl filter 扩充 & form-data 支持 qsOptions
This commit is contained in:
commit
5c08a68297
@ -94,6 +94,7 @@ tpl 类型的渲染器支持用 JS 模板引擎来组织输出,采用的 lodas
|
||||
- `upperCase` 转大写
|
||||
- `base64Encode` base64 转码
|
||||
- `base64Decode` base64 解码
|
||||
- `filter` 过滤数组,操作对象为数组,当目标对象不是数组时将无效。使用语法 ${xxx | filter: 参与过滤的字段集合:指令:取值变量名}。比如: `${xxx|filter:readonly:isTrue}` 将xxx 数组中 readonly 为 true 的成员提取出来。再来个栗子:`${xxx|filter:a,b:match:keywords}` 将 xxx 数组中成员变量 a 或者 b 的值与环境中 keywords 的值相匹配的提取出来。如果不需要取变量,也可以写固定值如:`${xxx|filter:a,b:match:'123'}`
|
||||
|
||||
组合使用。
|
||||
|
||||
|
@ -61,6 +61,7 @@ Api 类型可以是字符串或者对象。API 中可以直接设置数据发送
|
||||
- `method` 可以是:`get`、`post`、`put`或者`delete`
|
||||
- `data` 数据体, 数据对象。
|
||||
- `dataType` 数据体格式,默认为 `json` 可以配置成 `form` 或者 `form-data`。当 data 中包含文件时,自动会采用 `form-data`(multipart/form-data) 格式。当配置为 `form` 时为 `application/x-www-form-urlencoded` 格式。
|
||||
- `qsOptions` 当 dataType 为 `form` 或者 `form-data` 的时候有用。具体参数请参考这: https://github.com/ljharb/qs 默认设置为 `{arrayFormat: 'indices', encodeValuesOnly: true}`
|
||||
- `headers` 头部,配置方式和 data 配置一样,下面不详讲。如果要使用,请前往群组系统配置中,添加允许。
|
||||
- `sendOn` 可以配置发送条件比如: `this.id` 表示当存在 id 值时才发送这个请求。
|
||||
- `cache` 通过配置此属性开启缓存,单位是 ms,比如设置 3000 的话,当前接口在3s内请求,只要传参一致就会走缓存。
|
||||
|
@ -146,7 +146,7 @@ export function wrapFetcher(
|
||||
if (api.data && (hasFile(api.data) || api.dataType === 'form-data')) {
|
||||
api.data = object2formData(api.data, api.qsOptions);
|
||||
} else if (api.data && api.dataType === 'form') {
|
||||
api.data = qsstringify(api.data) as any;
|
||||
api.data = qsstringify(api.data, api.qsOptions) as any;
|
||||
api.headers = api.headers || (api.headers = {});
|
||||
api.headers['Content-Type'] = 'application/x-www-form-urlencoded';
|
||||
}
|
||||
|
@ -212,22 +212,31 @@ export const filters: {
|
||||
return input ? filterDate(input, this, inputFormat).format(outputFormat) : '';
|
||||
},
|
||||
asArray: input => (input ? [input] : input),
|
||||
filter: function(input, keys, exp) {
|
||||
let keywords: string;
|
||||
if (!Array.isArray(input) || !keys || !exp || !(keywords = resolveVariable(exp, this as any))) {
|
||||
filter: function(input, keys, expOrDirective, arg1) {
|
||||
if (!Array.isArray(input) || !keys || !expOrDirective) {
|
||||
return input;
|
||||
}
|
||||
|
||||
keywords = keywords.toLowerCase();
|
||||
let directive = expOrDirective;
|
||||
let fn: (value: any, key: string, item: any) => boolean = () => true;
|
||||
|
||||
if (directive === 'isTrue') {
|
||||
fn = value => !!value;
|
||||
} else if (directive === 'isFalse') {
|
||||
fn = value => !value;
|
||||
} else if (directive === 'isExists') {
|
||||
fn = value => typeof value !== 'undefined';
|
||||
} else {
|
||||
if (directive !== 'match') {
|
||||
directive = 'match';
|
||||
arg1 = expOrDirective;
|
||||
}
|
||||
arg1 = arg1 ? (/^('|")(.*)\1$/.test(arg1) ? RegExp.$2 : resolveVariable(arg1, this as any)) : '';
|
||||
fn = value => !!~String(value.toLowerCase()).indexOf(arg1);
|
||||
}
|
||||
|
||||
keys = keys.split(/\s*,\s*/);
|
||||
return input.filter((item: any) =>
|
||||
keys.some(
|
||||
(key: string) =>
|
||||
~String(resolveVariable(key, item))
|
||||
.toLowerCase()
|
||||
.indexOf(keywords)
|
||||
)
|
||||
);
|
||||
return input.filter((item: any) => keys.some((key: string) => fn(resolveVariable(key, item), key, item)));
|
||||
},
|
||||
base64Encode(str) {
|
||||
return btoa(
|
||||
|
Loading…
Reference in New Issue
Block a user