amis
Version:
一种MIS页面生成工具
180 lines (174 loc) • 5.82 kB
JavaScript
/**
* amis v6.12.0
* build time: 2025-04-03
* Copyright 2018-2025 baidu
*/
;
var tslib = require('tslib');
var isEqual = require('lodash/isEqual');
var amisCore = require('amis-core');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
// input-kv 实际上是 combo 的一种扩展
amisCore.addSchemaFilter(function (schema, renderer, props) {
var _a, _b, _c, _d;
if (schema && schema.type === 'input-kv') {
var autoParseJSON_1 = (_a = schema.autoParseJSON) !== null && _a !== void 0 ? _a : true;
return tslib.__assign(tslib.__assign({
draggable: true
}, schema), {
multiple: true,
pipeIn: function (value) {
if (!amisCore.isObject(value)) {
return [];
}
if (isEqual__default["default"](value, this.cachedValue)) {
return this.cachedValueArray;
}
var arr = [];
Object.keys(value).forEach(function (key) {
var valueType = typeof value[key];
arr.push({
key: key || '',
value: valueType === 'string' || valueType === 'number' || valueType === 'boolean' ? value[key] : JSON.stringify(value[key])
});
});
return arr;
},
pipeOut: function (value) {
if (!Array.isArray(value)) {
return value;
}
var obj = {};
value.forEach(function (item) {
var _a, _b, _c;
var key = (_a = item.key) !== null && _a !== void 0 ? _a : '';
var value = (_c = (_b = item.value) !== null && _b !== void 0 ? _b : schema.defaultValue) !== null && _c !== void 0 ? _c : '';
if (autoParseJSON_1 && typeof value === 'string' && value.startsWith('{')) {
try {
value = JSON.parse(value);
} catch (e) {}
}
obj[key] = value;
});
this.cachedValue = obj;
this.cachedValueArray = value;
return obj;
},
items: [schema.keySchema ? tslib.__assign(tslib.__assign({
id: "u:".concat(amisCore.guid())
}, schema.keySchema), {
unique: true,
name: 'key',
required: true,
validateOnChange: true
}) : {
placeholder: (_b = schema.keyPlaceholder) !== null && _b !== void 0 ? _b : 'Key',
type: 'input-text',
unique: true,
name: 'key',
required: true,
validateOnChange: true,
id: "u:".concat(amisCore.guid())
}, schema.valueSchema ? tslib.__assign(tslib.__assign({
id: "u:".concat(amisCore.guid())
}, schema.valueSchema), {
name: 'value'
}) : schema.valueComponent ? {
placeholder: (_c = schema.valuePlaceholder) !== null && _c !== void 0 ? _c : 'Value',
component: schema.valueComponent,
asFormItem: true,
name: 'value',
id: "u:".concat(amisCore.guid())
} : {
placeholder: (_d = schema.valuePlaceholder) !== null && _d !== void 0 ? _d : 'Value',
type: schema.valueType || 'input-text',
name: 'value',
id: "u:".concat(amisCore.guid())
}]
});
}
return schema;
});
/**
* 之前 input-kv 的 value 值不支持对象或数组
* 很多属性是给单个值设置的,比如 valuePlaceholder 导致
* 耦合在一起会导致配置项混乱,所以新增了这个组件专门支持 value 是对象或数组的场景
*/
amisCore.addSchemaFilter(function (schema, renderer, props) {
if (schema && schema.type === 'input-kvs') {
var keyItem = schema.keyItem || {};
var valueItems = schema.valueItems || [];
// value 直接放在 key 下的情况
var flatValue_1 = false;
if (valueItems.length == 1) {
if (valueItems[0].name === '_value') {
flatValue_1 = true;
}
}
var newSchema = tslib.__assign(tslib.__assign({
draggable: true,
multiple: true,
multiLine: true
}, schema), {
pipeIn: function (data) {
if (!amisCore.isObject(data)) {
return [];
}
var arr = [];
Object.keys(data).forEach(function (key) {
var value = data[key];
if (flatValue_1) {
arr.push({
_key: key || '',
_value: value
});
} else if (typeof value === 'object') {
arr.push(tslib.__assign(tslib.__assign({}, value), {
_key: key || ''
}));
}
});
return arr;
},
pipeOut: function (value) {
if (!Array.isArray(value)) {
return value;
}
var obj = {};
value.forEach(function (item) {
var _key = item._key,
rest = tslib.__rest(item, ["_key"]);
_key = _key !== null && _key !== void 0 ? _key : '';
if (flatValue_1) {
if (schema.valueIsArray) {
obj[_key] = item['_value'] || [];
} else {
obj[_key] = item['_value'] || {};
}
// 数组的时候初始化会生成 [{}],还不确定是哪生成的,先修正为 []
if (isEqual__default["default"](obj[_key], [{}])) {
obj[_key] = [];
}
} else {
if (schema.valueIsArray) {
obj[_key] = rest || [];
} else {
obj[_key] = rest || {};
}
}
});
return obj;
},
items: tslib.__spreadArray([tslib.__assign({
type: 'input-text',
unique: true,
name: '_key',
required: true,
validateOnChange: true
}, keyItem)], tslib.__read(valueItems), false)
});
return newSchema;
}
return schema;
});