Browse Source

测试多层级单选下拉树,区分默认值和暂不可用值情况

master
linyang3 3 years ago
parent
commit
029d18e683
  1. 62
      dist/bundle.js
  2. 62
      src/modules/tree/main.js

62
dist/bundle.js vendored

@ -279,55 +279,72 @@
})(); })();
!(function () { !(function () {
// 给多层级单选树增加设置错误值时标红状态
/**
* 多层级单选树增加无效值时状态使用BI.config覆盖原组件只能调用一次
* 新增defaultText参数表示空默认值不传默认值为请选择注意不能替代text只是为了跟text区分开text现在包含空默认值和暂不可用值两种情况
* value存在且不存在于items中为无效值文本框标红
* value不存在text不为defaultText时为暂不可用值文本框不变去除水印
*/
BI.config("bi.multilayer_single_tree_combo", function (config) { BI.config("bi.multilayer_single_tree_combo", function (config) {
var ERROR_CLASS = "combo-error"; var ERROR_CLASS = "combo-error";
var WATERMARK_CLASS = "bi-water-mark";
var DEFAULT_TEXT = "请选择";
/** /**
* 判断是否是有效值 * 判断是否是有效值
* @param {Object} config * @param {Object} config
* @param {Array} value setValue传入的值 * @param {String} value setValue传入的值
* @returns {Boolean} * @returns {Boolean}
*/ */
function isValueValid (options, value) { function isValueValid (options, value) {
value = value || options.value || ""; if (!BI.isObject(options)) {
if (Array.isArray(value)) { return true;
value = value[0];
} }
var items = options.items || []; value = value || options.value;
var itemIds = [];
if (BI.isNull(value)) { // null/undefined/空字符串作为空值
if (BI.isNull(value) || (value === "")) {
return true; return true;
} }
var items = options.items || [];
var itemIds = [];
// 获取id列表 // 获取id列表
BI.each(items, function (i, item) { BI.each(items, function (i, item) {
item && item.value && itemIds.push(item.value); item && item.value && itemIds.push(item.value);
}); });
if (BI.contains(itemIds, value)) { return BI.contains(itemIds, value);
return true;
}
return false;
} }
/** /**
* 增加/去除标红className * 增加/去除标红className
* @param {Object} widget * @param {Object} widget
* @param {Array} value setValue传入的值 * @param {String} value setValue传入的值
*/ */
function changeInvalidClassName (widget, value) { function changeInvalidClassName (widget, value) {
var combo = widget.combo || {}; if (!BI.isObject(widget)) {
var options = widget.options || {}; return;
}
var combo = widget.combo;
var trigger = widget.textTrigger && widget.textTrigger.trigger && widget.textTrigger.trigger.trigger && widget.textTrigger.trigger.trigger.text && widget.textTrigger.trigger.trigger.text.element;
var options = widget.options;
var defaultText = options.defaultText || DEFAULT_TEXT;
if (isValueValid(options, value)) { if (isValueValid(options, value)) {
combo && combo.element.removeClass(ERROR_CLASS); combo && combo.element.removeClass(ERROR_CLASS);
} else { } else {
combo && combo.element.addClass(ERROR_CLASS); combo && combo.element.addClass(ERROR_CLASS);
} }
if (options.text !== defaultText) {
trigger.removeClass(WATERMARK_CLASS);
}
} }
config.listeners = config.listeners || []; config.listeners = config.listeners || [];
// 新增mount生命周期回调 // 新增mount生命周期回调
config.listeners.push({ config.listeners.push({
@ -336,8 +353,8 @@
// 覆盖原setValue方法,调用原setValue前,修改样式 // 覆盖原setValue方法,调用原setValue前,修改样式
var _setValue = this.setValue; var _setValue = this.setValue;
this.setValue = function (value) { this.setValue = function (value) {
changeInvalidClassName(this, value);
_setValue.call(this, value); _setValue.call(this, value);
changeInvalidClassName(this, value && value[0]);
}; };
// 立即触发一次样式变更,不需要传value // 立即触发一次样式变更,不需要传value
@ -349,10 +366,6 @@
}); });
var treeItems = [ var treeItems = [
{id: -1, pId: -2, value: "根目录", text: "根目录"}, {id: -1, pId: -2, value: "根目录", text: "根目录"},
{id: 1, pId: -1, value: "第一级目录1", text: "第一级目录1"}, {id: 1, pId: -1, value: "第一级目录1", text: "第一级目录1"},
@ -414,10 +427,10 @@
]; ];
m.items = m.items.concat(newItems); m.items = m.items.concat(newItems);
// 测试修改value // 测试修改value;
setTimeout(function () { setTimeout(function () {
console.log("setValue"); console.log("setValue");
self.treeRef.setValue(""); self.treeRef.setValue("不存在的值");
}, 3000); }, 3000);
@ -430,7 +443,8 @@
}, },
{ {
type: "bi.multilayer_single_tree_combo", type: "bi.multilayer_single_tree_combo",
text: "默认值", text: "无效值",
defaultText: "无效值",
allowEdit: false, allowEdit: false,
items: self.model.items, items: self.model.items,
ref: function (ref) { ref: function (ref) {

62
src/modules/tree/main.js

@ -1,56 +1,71 @@
!(function () { !(function () {
// 给多层级单选树增加设置错误值时标红状态
/**
* 多层级单选树增加无效值时状态使用BI.config覆盖原组件只能调用一次
* 新增defaultText参数表示空默认值不传默认值为请选择注意不能替代text只是为了跟text区分开text现在包含空默认值和暂不可用值两种情况
* value存在且不存在于items中为无效值文本框标红
* value不存在text不为defaultText时为暂不可用值文本框不变去除水印
*/
BI.config("bi.multilayer_single_tree_combo", function (config) { BI.config("bi.multilayer_single_tree_combo", function (config) {
var ERROR_CLASS = "combo-error"; var ERROR_CLASS = "combo-error";
var WATERMARK_CLASS = "bi-water-mark";
var DEFAULT_TEXT = "请选择";
/** /**
* 判断是否是有效值 * 判断是否是有效值
* @param {Object} config * @param {Object} config
* @param {Array} value setValue传入的值 * @param {String} value setValue传入的值
* @returns {Boolean} * @returns {Boolean}
*/ */
function isValueValid (options, value) { function isValueValid (options, value) {
if (!BI.isObject(options)) {
return true;
}
value = value || options.value; value = value || options.value;
if (Array.isArray(value)) {
value = value[0]; // null/undefined/空字符串作为空值
if (BI.isNull(value) || (value === "")) {
return true;
} }
value = value || null;
var items = options.items || []; var items = options.items || [];
var itemIds = []; var itemIds = [];
if (BI.isNull(value)) {
return true;
}
// 获取id列表 // 获取id列表
BI.each(items, function (i, item) { BI.each(items, function (i, item) {
item && item.value && itemIds.push(item.value); item && item.value && itemIds.push(item.value);
}); });
if (BI.contains(itemIds, value)) { return BI.contains(itemIds, value);
return true;
}
return false;
} }
/** /**
* 增加/去除标红className * 增加/去除标红className
* @param {Object} widget * @param {Object} widget
* @param {Array} value setValue传入的值 * @param {String} value setValue传入的值
*/ */
function changeInvalidClassName (widget, value) { function changeInvalidClassName (widget, value) {
var combo = widget.combo || {}; if (!BI.isObject(widget)) {
var options = widget.options || {}; return;
}
var combo = widget.combo;
var trigger = widget.textTrigger && widget.textTrigger.trigger && widget.textTrigger.trigger.trigger && widget.textTrigger.trigger.trigger.text && widget.textTrigger.trigger.trigger.text.element;
var options = widget.options;
var defaultText = options.defaultText || DEFAULT_TEXT;
if (isValueValid(options, value)) { if (isValueValid(options, value)) {
combo && combo.element.removeClass(ERROR_CLASS); combo && combo.element.removeClass(ERROR_CLASS);
} else { } else {
combo && combo.element.addClass(ERROR_CLASS); combo && combo.element.addClass(ERROR_CLASS);
} }
if (options.text !== defaultText) {
trigger.removeClass(WATERMARK_CLASS);
}
} }
config.listeners = config.listeners || []; config.listeners = config.listeners || [];
// 新增mount生命周期回调 // 新增mount生命周期回调
config.listeners.push({ config.listeners.push({
@ -59,8 +74,8 @@
// 覆盖原setValue方法,调用原setValue前,修改样式 // 覆盖原setValue方法,调用原setValue前,修改样式
var _setValue = this.setValue; var _setValue = this.setValue;
this.setValue = function (value) { this.setValue = function (value) {
changeInvalidClassName(this, value);
_setValue.call(this, value); _setValue.call(this, value);
changeInvalidClassName(this, value && value[0]);
}; };
// 立即触发一次样式变更,不需要传value // 立即触发一次样式变更,不需要传value
@ -72,10 +87,6 @@
}); });
var treeItems = [ var treeItems = [
{id: -1, pId: -2, value: "根目录", text: "根目录"}, {id: -1, pId: -2, value: "根目录", text: "根目录"},
{id: 1, pId: -1, value: "第一级目录1", text: "第一级目录1"}, {id: 1, pId: -1, value: "第一级目录1", text: "第一级目录1"},
@ -137,10 +148,10 @@
]; ];
m.items = m.items.concat(newItems); m.items = m.items.concat(newItems);
// 测试修改value // 测试修改value;
setTimeout(function () { setTimeout(function () {
console.log("setValue"); console.log("setValue");
self.treeRef.setValue(""); self.treeRef.setValue("不存在的值");
}, 3000); }, 3000);
@ -153,7 +164,8 @@
}, },
{ {
type: "bi.multilayer_single_tree_combo", type: "bi.multilayer_single_tree_combo",
text: "默认值", text: "无效值",
defaultText: "无效值",
allowEdit: false, allowEdit: false,
items: self.model.items, items: self.model.items,
ref: function (ref) { ref: function (ref) {

Loading…
Cancel
Save