@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
1,549 lines • 416 kB
JavaScript
var Uo = Object.defineProperty;
var Xo = (t, n, e) => n in t ? Uo(t, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[n] = e;
var V = (t, n, e) => Xo(t, typeof n != "symbol" ? n + "" : n, e);
import { defineComponent as Ke, ref as C, computed as A, watch as Te, onMounted as kt, createVNode as I, Fragment as Xt, reactive as yt, createApp as Gn, onUnmounted as ln, Transition as zn, mergeProps as Nt, createTextVNode as Rt, onBeforeUnmount as Yn, withDirectives as Qo, resolveDirective as Ko, nextTick as un, onBeforeMount as Jo, Teleport as Zo, shallowRef as er, render as dn, h as tr, cloneVNode as nr, inject as Tt, provide as or, triggerRef as rr, isVNode as ir } from "vue";
import { isPlainObject as On, cloneDeep as Ft, isUndefined as at, throttle as ar } from "lodash-es";
import Un from "../list-view/index.esm.js";
import sr from "../button-edit/index.esm.js";
import Xn from "../../designer/button-edit/index.esm.js";
import { useGuid as lr, resolveField as rt, FormSchemaEntityFieldTypeName as Pn, useCommonUtils as ur, useDateFormat as cr, useNumberFormat as dr, setFieldValue as vn, getCustomClass as fn, withInstall as Qn, FormSchemaEntityField$Type as Vn, FormSchemaEntityFieldType$Type as Kn } from "../common/index.esm.js";
import { DgControl as Dn, useDesignerComponent as fr } from "../designer-canvas/index.esm.js";
import { useResizeObserver as Jn } from "@vueuse/core";
import { useIdentify as mr, useGroupData as pr, useFilter as hr, useHierarchy as vr, useLoading as gr, useDataView as yr, useSelection as br, useSelectHierarchyItem as wr, useDataViewContainerStyle as Cr, useCommandColumn as xr, useColumn as _r, useSort as Sr, useGroupColumn as Tr, useRow as Fr, useEdit as Er, useVisualDataBound as kr, useVisualDataCell as Mr, useVisualDataRow as Ir, useVisualData as Or, useCellPosition as Pr, useSidebar as Vr, useVirtualScroll as Dr, useFitColumn as Br, useFilterHistory as Nr, useColumnFilter as Rr, useDragColumn as Lr, getColumnHeader as Hr, getSidebar as $r, getDisableMask as Wr, getHorizontalScrollbar as jr, getVerticalScrollbar as Ar, getEmpty as qr } from "../data-view/index.esm.js";
import "../modal/index.esm.js";
import Gr from "../transfer/index.esm.js";
import zr from "../tabs/index.esm.js";
import Yr from "../order/index.esm.js";
import "../condition/index.esm.js";
import { FCheckbox as Ur } from "../checkbox/index.esm.js";
import Xr from "../filter-bar/index.esm.js";
import Bn from "../tooltip/index.esm.js";
import Qr from "../pagination/index.esm.js";
import Kr from "../button/index.esm.js";
import Jr from "../search-box/index.esm.js";
import Zr from "../tags/index.esm.js";
import ei, { FDynamicFormGroup as ti, FDynamicFormInput as ni } from "../dynamic-form/index.esm.js";
import { createPropsResolver as oi } from "../dynamic-resolver/index.esm.js";
import "../property-panel/index.esm.js";
import ri from "../accordion/index.esm.js";
import ii from "../avatar/index.esm.js";
import ai from "../button-group/index.esm.js";
import si from "../calendar/index.esm.js";
import li from "../capsule/index.esm.js";
import Nn from "../../designer/checkbox/index.esm.js";
import Rn from "../../designer/checkbox-group/index.esm.js";
import gn from "../combo-list/index.esm.js";
import ui from "../combo-tree/index.esm.js";
import ci from "../component/index.esm.js";
import di from "../color-picker/index.esm.js";
import fi from "../content-container/index.esm.js";
import mi from "../date-picker/index.esm.js";
import pi from "../../designer/data-grid/index.esm.js";
import hi from "../dropdown/index.esm.js";
import vi from "../events-editor/index.esm.js";
import gi from "../field-selector/index.esm.js";
import yi from "../binding-selector/index.esm.js";
import bi from "../image-cropper/index.esm.js";
import wi from "../../designer/input-group/index.esm.js";
import Ci from "../layout/index.esm.js";
import xi from "../list-nav/index.esm.js";
import _i from "../lookup/index.esm.js";
import Si from "../mapping-editor/index.esm.js";
import Ti from "../nav/index.esm.js";
import Fi from "../number-range/index.esm.js";
import Ei from "../number-spinner/index.esm.js";
import ki from "../page-header/index.esm.js";
import Mi from "../page-footer/index.esm.js";
import Ii from "../progress/index.esm.js";
import Oi from "../query-solution/index.esm.js";
import Pi from "../../designer/radio-group/index.esm.js";
import Vi from "../rate/index.esm.js";
import Di from "../response-toolbar/index.esm.js";
import Bi from "../response-layout/index.esm.js";
import Ni from "../response-layout-editor/index.esm.js";
import Ri from "../section/index.esm.js";
import Li from "../smoke-detector/index.esm.js";
import Hi from "../splitter/index.esm.js";
import $i from "../step/index.esm.js";
import Wi from "../switch/index.esm.js";
import ji from "../text/index.esm.js";
import Ai from "../time-picker/index.esm.js";
import qi from "../tree-view/index.esm.js";
import Gi from "../uploader/index.esm.js";
import zi from "../verify-detail/index.esm.js";
import Yi from "../video/index.esm.js";
import Ui from "../textarea/index.esm.js";
import Xi from "../schema-selector/index.esm.js";
import Qi from "../tree-grid/index.esm.js";
import Ki from "../event-parameter/index.esm.js";
import Ji from "../filter-condition-editor/index.esm.js";
import Zi from "../fieldset/index.esm.js";
import ea from "../sort-condition-editor/index.esm.js";
import ta from "../menu-lookup/index.esm.js";
import na from "../drawer/index.esm.js";
import oa from "../json-editor/index.esm.js";
import ra from "../property-editor/index.esm.js";
import ia from "../expression-editor/index.esm.js";
import aa from "../code-editor/index.esm.js";
import sa from "../html-template/index.esm.js";
import "../external-container/index.esm.js";
import "../notify/index.esm.js";
const Zn = {}, eo = {};
function xn(t) {
const { properties: n, title: e, ignore: o } = t, r = o && Array.isArray(o), i = Object.keys(n).reduce((a, s) => ((!r || !o.find((u) => u === s)) && (a[s] = n[s].type === "object" && n[s].properties ? xn(n[s]) : Ft(n[s].default)), a), {});
if (e && (!r || !o.find((a) => a === "id"))) {
const a = e.toLowerCase().replace(/-/g, "_");
i.id = `${a}_${Math.random().toString().slice(2, 6)}`;
}
return i;
}
function la(t) {
const { properties: n, title: e, required: o } = t;
if (o && Array.isArray(o)) {
const r = o.reduce((i, a) => (i[a] = n[a].type === "object" && n[a].properties ? xn(n[a]) : Ft(n[a].default), i), {});
if (e && o.find((i) => i === "id")) {
const i = e.toLowerCase().replace(/-/g, "_");
r.id = `${i}_${Math.random().toString().slice(2, 6)}`;
}
return r;
}
return {
type: e
};
}
function to(t, n = {}, e) {
const o = Zn[t];
if (o) {
let r = la(o);
const i = eo[t];
return r = i ? i({ getSchemaByType: to }, r, n, e) : r, r;
}
return null;
}
function ua(t, n) {
const e = xn(n);
return Object.keys(e).reduce((o, r) => (Object.prototype.hasOwnProperty.call(t, r) && (o[r] && On(o[r]) && On(t[r] || !t[r]) ? Object.assign(o[r], t[r] || {}) : o[r] = t[r]), o), e), e;
}
function no(t, n) {
return Object.keys(t).filter((o) => t[o] != null).reduce((o, r) => {
if (n.has(r)) {
const i = n.get(r);
if (typeof i == "string")
o[i] = t[r];
else {
const a = i(r, t[r], t);
Object.assign(o, a);
}
} else
o[r] = t[r];
return o;
}, {});
}
function ca(t, n, e = /* @__PURE__ */ new Map()) {
const o = ua(t, n);
return no(o, e);
}
function da(t = {}) {
function n(c, d, l, f) {
if (typeof l == "number")
return f[c].length === l;
if (typeof l == "object") {
const m = Object.keys(l)[0], p = l[m];
if (m === "not")
return Number(f[c].length) !== Number(p);
if (m === "moreThan")
return Number(f[c].length) >= Number(p);
if (m === "lessThan")
return Number(f[c].length) <= Number(p);
}
return !1;
}
function e(c, d, l, f) {
return f[c] && f[c].propertyValue && String(f[c].propertyValue.value) === String(l);
}
const o = /* @__PURE__ */ new Map([
["length", n],
["getProperty", e]
]);
Object.keys(t).reduce((c, d) => (c.set(d, t[d]), c), o);
function r(c, d) {
const l = c;
return typeof d == "number" ? [{ target: l, operator: "length", param: null, value: Number(d) }] : typeof d == "boolean" ? [{ target: l, operator: "getProperty", param: c, value: !!d }] : typeof d == "object" ? Object.keys(d).map((f) => {
if (f === "length")
return { target: l, operator: "length", param: null, value: d[f] };
const m = f, p = d[f];
return { target: l, operator: "getProperty", param: m, value: p };
}) : [];
}
function i(c) {
return Object.keys(c).reduce((l, f) => {
const m = r(f, c[f]);
return l.push(...m), l;
}, []);
}
function a(c, d) {
if (o.has(c.operator)) {
const l = o.get(c.operator);
return l && l(c.target, c.param, c.value, d) || !1;
}
return !1;
}
function s(c, d) {
return i(c).reduce((m, p) => m && a(p, d), !0);
}
function u(c, d) {
const l = Object.keys(c), f = l.includes("allOf"), m = l.includes("anyOf"), p = f || m, h = (p ? c[p ? f ? "allOf" : "anyOf" : "allOf"] : [c]).map((g) => s(g, d));
return f ? !h.includes(!1) : h.includes(!0);
}
return { parseValueSchema: u };
}
const de = {
button: { type: "button", name: "按钮" },
"response-toolbar": { type: "response-toolbar", name: "工具栏" },
"response-toolbar-item": { type: "response-toolbar-item", name: "按钮" },
"content-container": { type: "content-container", name: "容器" },
"input-group": { type: "input-group", name: "文本" },
textarea: { type: "textarea", name: "多行文本" },
lookup: { type: "lookup", name: "帮助" },
"number-spinner": { type: "number-spinner", name: "数值" },
"date-picker": { type: "date-picker", name: "日期" },
switch: { type: "switch", name: "开关" },
"radio-group": { type: "radio-group", name: "单选组" },
"check-box": { type: "check-box", name: "复选框" },
"check-group": { type: "check-group", name: "复选框组" },
"combo-list": { type: "combo-list", name: "下拉列表" },
"response-form": { type: "response-form", name: "卡片面板" },
"response-layout": { type: "response-layout", name: "布局容器", icon: "response-layout-3" },
"response-layout-item": { type: "response-layout-item", name: "布局", icon: "response-layout-1" },
"tree-grid": { type: "tree-grid", name: "树表格" },
"tree-grid-column": { type: "tree-grid-column", name: "树表格列" },
"data-grid": { type: "data-grid", name: "表格" },
"data-grid-column": { type: "data-grid-column", name: "表格列" },
module: { type: "Module", name: "模块" },
component: { type: "component", name: "组件" },
tabs: { type: "tabs", name: "标签页" },
"tab-page": { type: "tab-page", name: "标签页项", dependentParentControl: "Tab" },
"tab-toolbar-item": { type: "tab-toolbar-item", name: "标签页工具栏按钮" },
"html-template": { type: "html-template", name: "模板容器" },
"time-picker": { type: "time-picker", name: "时间选择" },
section: { type: "section", name: "分组面板" },
"section-toolbar": { type: "section-toolbar", name: "分组面板工具栏" },
"section-toolbar-item": { type: "section-toolbar-item", name: "分组面板按钮" },
splitter: { type: "splitter", name: "分栏面板" },
"splitter-pane": { type: "splitter-pane", name: "分栏面板项", dependentParentControl: "Splitter" },
"component-ref": { type: "component-ref", name: "组件引用节点" },
uploader: { type: "uploader", name: "附件上传" },
"page-header": { type: "page-header", name: "页头" },
"page-footer": { type: "page-footer", name: "页脚" },
"tab-toolbar": { type: "tab-toolbar", name: "标签页工具栏" },
fieldset: { type: "fieldset", name: "分组" },
"query-solution": { type: "query-solution", name: "筛选方案" },
drawer: { type: "drawer", name: "抽屉" },
"external-container": { type: "external-container", name: "外部容器", icon: "content-container" },
"list-nav": { type: "list-nav", name: "列表导航" },
"filter-bar": { type: "filter-bar", name: "筛选条" }
}, fa = {}, ma = {};
da();
function Ht(t, n, e = /* @__PURE__ */ new Map(), o = (a, s, u, c) => s, r = {}, i = (a) => a) {
return Zn[n.title] = n, eo[n.title] = o, fa[n.title] = r, ma[n.title] = i, (a = {}, s = !0) => {
if (!s)
return no(a, e);
const u = ca(a, n, e), c = Object.keys(t).reduce((d, l) => (d[l] = t[l].default, d), {});
return Object.assign(c, u);
};
}
function cn(t, n) {
return { customClass: n.class, customStyle: n.style };
}
function pa() {
function t(n, e) {
const { dataSource: o } = n || {};
return o === void 0 ? {} : {};
}
return {
resolve: t
};
}
function ha() {
function t(n, e) {
return n.selectItemById(e);
}
return {
selectItemById: t
};
}
function va() {
function t(n, e) {
const { columns: o } = e;
return n.updateColumns(o);
}
return {
updateColumns: t
};
}
const ga = /* @__PURE__ */ new Map([
["appearance", cn]
]), ya = "https://json-schema.org/draft/2020-12/schema", ba = "https://farris-design.gitee.io/combo-list.schema.json", wa = "combo-list", Ca = "A Farris Input Component", xa = "object", _a = {
id: {
description: "The unique identifier for a combo list",
type: "string"
},
type: {
description: "The type string of number combo list component",
type: "string",
default: "combo-list"
},
appearance: {
description: "",
type: "object",
properties: {
class: {
type: "string"
},
style: {
type: "string"
}
},
default: {}
},
binding: {
description: "",
type: "object",
default: {}
},
disabled: {
description: "",
type: "boolean",
default: !1
},
enableClear: {
description: "",
type: "boolean",
default: !1
},
editable: {
description: "",
type: "boolean",
default: !1
},
enableLinkLabel: {
description: "",
type: "boolean",
default: !1
},
label: {
description: "",
type: "string",
default: ""
},
lableWidth: {
description: "",
type: "number"
},
placeholder: {
description: "",
type: "string",
default: "请选择"
},
idField: {
description: "",
type: "string",
default: "id"
},
valueField: {
description: "",
type: "string",
default: "id"
},
titleField: {
description: "",
type: "string",
default: "name"
},
textField: {
description: "",
type: "string",
default: "name"
},
dataSourceType: {
description: "",
type: "string",
default: "static"
},
data: {
description: "",
type: "array"
},
remote: {
description: "",
type: "string"
},
readonly: {
description: "",
type: "boolean",
default: !1
},
required: {
description: "",
type: "boolean",
default: !1
},
tabindex: {
description: "",
type: "number",
default: -1
},
textAlign: {
description: "",
type: "string",
enum: [
"left",
"middle",
"right"
],
default: "left"
},
multiSelect: {
description: "",
type: "boolean",
default: !1
},
maxLength: {
description: "",
type: "number",
default: null
},
visible: {
description: "",
type: "boolean",
default: !0
},
onBlur: {
description: "",
type: "string",
default: ""
},
onClickLinkLabel: {
description: "",
type: "sting",
default: ""
},
maxHeight: {
description: "",
type: "number",
default: 350
},
minPanelWidth: {
description: "",
type: "number",
default: 160
},
popupOnClick: {
description: "",
type: "boolean",
default: !0
},
separator: {
description: "",
type: "string",
default: ","
}
}, Sa = [
"type"
], Ta = [
"id",
"appearance",
"binding",
"visible"
], Fa = {
$schema: ya,
$id: ba,
title: wa,
description: Ca,
type: xa,
properties: _a,
required: Sa,
ignore: Ta
};
function Ea(t, n, e) {
return n;
}
var ka = /* @__PURE__ */ ((t) => (t.Text = "text", t.Tag = "tag", t))(ka || {}), Ma = /* @__PURE__ */ ((t) => (t.top = "top", t.bottom = "bottom", t.auto = "auto", t))(Ma || {});
const _n = {
/**
* 组件标识
*/
id: { type: String },
/**
* 下拉数据源
*/
data: { type: Array, default: [] },
/**
* 可选,展示文本
* 默认为空字符串 -----内部需要根据value重新生成展示文本,此属性不生效
* displayText: { type: String, default: '' },
*/
/**
* 可选,是否禁用
* 默认为`false`
*/
disabled: { default: !1, type: Boolean },
/**
* 可选,下拉图标
* 默认为'<span class="f-icon f-icon-arrow-60-down"></span>'
*/
dropDownIcon: { type: String, default: '<span class="f-icon f-icon-arrow-60-down"></span>' },
/**
* 可选,是否可编辑
* 默认`false`
*/
editable: { default: !1, type: Boolean },
/**
* 可选,是否启用清空
* 默认启用
*/
enableClear: { default: !0, type: Boolean },
/**
* 可选,启用搜索
* 默认为`false`
*/
enableSearch: { type: Boolean, default: !1 },
/**
* 可选,鼠标悬停时是否显示控件值
* 默认显示
*/
enableTitle: { default: !0, type: Boolean },
fitEditor: { default: !1, type: Boolean },
/**
* 可选,强制显示占位符
* 默认`false`
*/
forcePlaceholder: { default: !1, type: Boolean },
/**
* 可选,清空值时隐藏面板
* 默认`true`
*/
hidePanelOnClear: { default: !0, type: Boolean },
/**
* 可选,数据源id字段
* 默认为`id`
*/
idField: { default: "id", type: String },
/**
* 可选,字段映射
*/
mapFields: { type: Object },
/**
* 可选,最大高度
* 默认`350`
*/
maxHeight: { default: 350, type: Number },
/**
* 最大输入长度
*/
maxLength: { type: Number },
/**
* 可选,是否支持多选
* 默认`false`
*/
multiSelect: { type: Boolean, default: !1 },
/**
* 绑定值
*/
modelValue: {},
/**
* 占位符
*/
placeholder: { type: String, default: "请选择" },
/**
* 可选,下拉面板展示位置
* 默认为`auto`
*/
placement: {
type: String,
default: "auto"
/* auto */
},
/**
* 可选,是否只读
* 默认为`false`
*/
readonly: { default: !1, type: Boolean },
/**
* 远端数据源信息
*/
remote: { default: null, type: Object },
/**
* 可选,是否支持远端过滤
* 默认`false`
*/
remoteSearch: { default: !1, type: Boolean },
/**
* 可选,分隔符
* 默认`,`
*/
separator: { default: ",", type: String },
/**
* tabIndex
*/
tabIndex: { type: Number, default: -1 },
/**
* 可选,数据源显示字段
* 默认为`name`
*/
textField: { default: "name", type: String },
/**
* 可选,数据源的title
* 默认为`name`
*/
titleField: { default: "name", type: String },
/**
* 可选,数据源值字段
* 默认为`id`
*/
valueField: { default: "id", type: String },
/**
* 可选,启用多选下,下拉列表值在输入框中的展示方式
* 支持text | tag
* 因为ButtonEdit内部处理类型只有在批量的情况下才会有展示类型区分
*/
viewType: { default: "tag", type: String },
/**
* 值变化事件
*/
change: { type: Function, default: () => {
} },
/**
* 作为内嵌编辑器被创建后默认获得焦点
*/
focusOnCreated: { type: Boolean, default: !1 },
/**
* 作为内嵌编辑器被创建后默认选中文本
*/
selectOnCreated: { type: Boolean, default: !1 },
/**
* 此属性废弃
*/
autoHeight: { type: Boolean, default: !0 },
/**
* 打开前
*/
beforeOpen: { type: Function, default: null },
searchOption: {
type: [Boolean, Function],
default: !1
},
// 搜索启用高亮
enableHighlightSearch: { type: Boolean, default: !0 },
minPanelWidth: { type: Number, default: 160 },
popupOnClick: { type: Boolean, default: !0 }
}, Ia = Object.assign({}, _n, {
readonly: {}
}), oo = Ht(_n, Fa, ga, Ea), Oa = {
dataSource: { type: Array, default: [] },
enableSearch: { type: Boolean, default: !1 },
idField: { type: String, default: "id" },
multiSelect: { type: Boolean, default: !1 },
selectedValues: { type: String, default: "" },
separator: { type: String, default: "," },
textField: { type: String, default: "name" },
titleField: { type: String, default: "name" },
width: { type: Number },
maxHeight: { type: Number },
valueField: { type: String, default: "id" },
/** 值变化事件 */
onSelectionChange: { type: Function, default: () => {
} },
searchOption: {
type: [Boolean, Function],
default: !1
},
// 搜索启用高亮
enableHighlightSearch: { type: Boolean, default: !0 }
}, Pa = /* @__PURE__ */ Ke({
name: "FComboListContainer",
props: Oa,
emits: ["selectionChange"],
setup(t, n) {
const e = C(), o = C(t.dataSource), r = C([]), i = C(t.separator), a = C(t.width), s = C(t.maxHeight), u = C(String(t.selectedValues).split(i.value)), c = A(() => t.multiSelect), d = A(() => ({
enableSelectRow: !0,
multiSelect: t.multiSelect,
multiSelectMode: "OnCheckAndClick",
showCheckbox: c.value,
showSelectAll: !1,
showSelection: !0
}));
Te(t.dataSource, () => {
o.value = t.dataSource;
}), A(() => t.enableSearch ? "SearchBar" : "ContentHeader");
const l = A(() => {
const b = {};
return a.value !== void 0 && (b.width = `${a.value}px`), s.value !== void 0 && s.value > 0 && (b.maxHeight = `${s.value}px`), b;
});
function f(b) {
e.value.search(b);
}
function m(b) {
r.value = b.map((h) => Object.assign({}, h)), u.value = b.map((h) => h[t.idField]), n.emit("selectionChange", r.value);
}
function p(b) {
if (t.enableHighlightSearch)
return;
let h = [];
const {
searchOption: w
} = t;
typeof w == "function" ? h = o.value.filter((g) => w(b, g)) : h = o.value.filter((g) => g[t.valueField].indexOf(b) > -1 || g[t.textField].indexOf(b) > -1), e.value.updateDataSource(h);
}
Te([() => t.selectedValues], ([b]) => {
t.multiSelect ? u.value = b.split(i.value) : u.value = [b];
});
function k(b) {
e.value.activeRowById(b);
}
return kt(() => {
var b, h;
if (!t.multiSelect) {
const w = (b = u.value) == null ? void 0 : b[0];
let g = w;
if (!at(w)) {
const x = typeof w, F = typeof ((h = o.value[0]) == null ? void 0 : h[t.valueField || t.idField]);
F === "number" && x !== F && (g = Number(w)), F === "boolean" && x !== F && (g = w === "true" ? !0 : w === "false" ? !1 : w), k(g);
}
}
}), n.expose({
search: f,
activeRowById: k
}), () => I("div", {
class: "f-combo-list-container",
style: l.value
}, [I(Un, {
ref: e,
size: "small",
itemClass: "f-combo-list-item",
itemContentClass: "text-truncate",
header: "ContentHeader",
headerClass: "f-combo-list-search-box",
data: o.value,
idField: t.idField,
textField: t.textField,
titleField: t.titleField,
multiSelect: t.multiSelect,
selection: d.value,
enableHighlightSearch: t.enableHighlightSearch,
selectionValues: u.value,
onSelectionChange: m,
onAfterSearch: p
}, null)]);
}
});
function Va(t) {
const n = C(""), e = C(t.modelValue), o = C(t.data || []), r = C(t.editable);
function i(l) {
const f = t.multiSelect ? String(l).split(t.separator) : [String(l)], m = f.map((b) => [b, !0]), p = new Map(m);
return o.value.filter((b) => p.has(String(b[t.valueField]))).sort((b, h) => {
const w = f.indexOf(b[t.valueField]), g = f.indexOf(h[t.valueField]);
return w - g;
});
}
function a(l) {
const f = i(l).map((m) => m[t.textField]).join(t.separator);
n.value = r.value ? f || l : f;
}
function s(l) {
if (t.multiSelect) {
const f = l.split(t.separator).map((p) => [p, !0]), m = new Map(f);
return o.value.filter((p) => m.has(p[t.textField]));
}
return o.value.filter((f) => "" + f[t.textField] === l);
}
function u(l) {
const f = {};
return f[t.idField] = l, f[t.textField] = l, [f];
}
function c(l) {
let f = s(l);
const m = f && f.length > 0;
return r.value && !m && (f = u(l)), f;
}
function d() {
const { url: l, method: f = "GET", headers: m = {}, body: p = null } = t.remote, k = f.toLowerCase() === "get" ? { method: f, headers: m } : { method: f, headers: m, body: p };
let b = !1;
fetch(l, k).then((h) => {
var g, x;
if (h.status === 200)
return b = !!((x = (g = h.headers) == null ? void 0 : g.get("content-type")) != null && x.includes("application/json")), b ? h.text() : h.json();
throw new Error(h.statusText);
}).then((h) => {
o.value = b ? JSON.parse(h) : h;
}).catch((h) => {
console.error(h);
});
}
return t.remote && d(), Te(() => t.data, () => {
o.value = t.data;
}), Te([o], ([l]) => {
if (t.modelValue != null) {
const f = l.find((m) => m[t.valueField] === t.modelValue);
f && (n.value = f[t.textField]);
}
}), Te(() => t.modelValue, (l) => {
e.value = l, a(l);
}), a(t.modelValue), { dataSource: o, displayText: n, editable: r, modelValue: e, getItemsByDisplayText: s, getItemsByValue: i, getSelectedItemsByDisplayText: c };
}
const en = /* @__PURE__ */ Ke({
name: "FComboList",
props: _n,
emits: ["clear", "update:modelValue", "change", "input"],
setup(t, n) {
const e = C(), o = C(), r = C(t.disabled || t.readonly), i = C(t.enableClear), a = C(t.enableSearch), s = C(t.readonly), {
dataSource: u,
displayText: c,
editable: d,
modelValue: l,
getSelectedItemsByDisplayText: f,
getItemsByDisplayText: m
} = Va(t), p = A(() => t.multiSelect), k = A(() => o.value ? o.value.elementRef.getBoundingClientRect().width : 0);
function b() {
!p.value && o.value && o.value.hidePopup();
}
function h(S) {
c.value = S.map((O) => O[t.textField]).join(t.separator);
let y = "";
S.length === 1 ? y = S[0][t.valueField] : y = S.map((O) => O[t.valueField]).join(t.separator), l.value !== y && (l.value = y, n.emit("update:modelValue", l.value), n.emit("change", S, l.value));
}
function w() {
const S = f(c.value);
h(S);
}
function g() {
s.value || c.value;
}
function x(S) {
var y;
l.value = "", (y = e.value) == null || y.activeRowById(""), n.emit("update:modelValue", ""), n.emit("change", [], ""), n.emit("clear");
}
function F(S) {
var y, O;
t.enableSearch ? ((y = e.value) == null || y.search(S), (O = e.value) == null || O.activeRowById(S)) : (l.value = S, c.value = S, n.emit("update:modelValue", l.value), n.emit("change", [S], S));
}
function E(S) {
if (t.multiSelect) {
const y = m(S), D = y.map((M) => M[t.idField || t.valueField]).join(t.separator);
l.value !== D && (l.value = D, n.emit("update:modelValue", l.value), n.emit("change", y, l.value));
}
}
function v() {
return c.value;
}
function T(S) {
F(S), n.emit("input", S);
}
function _() {
o.value.hidePopup();
}
return n.expose({
getDisplayText: v,
hidePopup: _
}), Te([() => t.disabled, () => t.editable, () => t.enableClear, () => t.enableSearch, () => t.readonly], ([S, y, O, D, M]) => {
r.value = S, d.value = y, i.value = O, a.value = D, s.value = M;
}), () => I(sr, {
ref: o,
id: t.id,
disable: r.value,
readonly: s.value,
forcePlaceholder: t.forcePlaceholder,
editable: d.value,
buttonContent: t.dropDownIcon,
placeholder: t.placeholder,
enableClear: i.value,
maxLength: t.maxLength,
tabIndex: t.tabIndex,
enableTitle: t.enableTitle,
multiSelect: t.multiSelect,
inputType: t.multiSelect ? t.viewType : "text",
modelValue: c.value,
"onUpdate:modelValue": (S) => c.value = S,
focusOnCreated: t.focusOnCreated,
selectOnCreated: t.selectOnCreated,
onClear: x,
onClick: g,
onChange: E,
onBlur: w,
onInput: T,
beforeOpen: t.beforeOpen,
placement: t.placement,
popupMinWidth: t.minPanelWidth,
popupClass: "f-combo-list-wrapper",
popupOnClick: t.popupOnClick
}, {
default: () => [I(Pa, {
ref: e,
idField: t.idField,
valueField: t.valueField,
textField: t.textField,
titleField: t.titleField,
dataSource: u.value,
selectedValues: l.value,
separator: t.separator,
multiSelect: t.multiSelect,
enableSearch: a.value,
maxHeight: t.maxHeight,
enableHighlightSearch: t.enableHighlightSearch,
width: t.fitEditor ? k.value : void 0,
onSelectionChange: (S) => {
h(S), b();
}
}, null)]
});
}
}), Da = C(0);
function Ba() {
Da.value++;
}
const Lt = C(0);
function Na(t, n) {
const e = n.getBoundingClientRect(), o = t.getBoundingClientRect(), r = o.top >= e.top, i = o.top <= e.bottom;
return r && i;
}
function Ra(t) {
const n = t.querySelector(".component-btn-group");
if (!n)
return;
n.style.display = "";
const e = n.getBoundingClientRect();
if (!(e.top === 0 && e.left === 0)) {
const o = n.querySelector("div");
if (o) {
const r = o.getBoundingClientRect();
o.style.top = e.top + "px";
let i = e.left - r.width;
const a = document.querySelector(".editorDiv");
if (a) {
const s = a.getBoundingClientRect();
i < s.left && ({ left: i } = t.getBoundingClientRect());
}
o.style.left = i + "px";
}
}
}
function La(t) {
if (!window.scrollContainerList)
return;
const n = Array.from(window.scrollContainerList);
if (n.length && n.length === 1) {
const e = n[0], o = document.querySelector(`[id=${e}]`);
if (o && o.contains(t))
return o;
}
}
function ro(t) {
if (!t)
return;
const n = t.getBoundingClientRect();
if (n.width === 0 && n.height === 0)
return;
const e = t.querySelector(".component-btn-group");
if (e) {
let o = !0;
const r = La(t);
if (r && (o = Na(t, r)), !o) {
e.style.display = "none";
return;
}
Ra(t);
}
}
function Ha(t) {
if (!t)
return;
let n;
t.className.includes("dgComponentSelected") ? n = t : n = t.querySelector(".dgComponentSelected"), n && ro(n);
}
function $a(t) {
const { formSchemaUtils: n, formStateMachineUtils: e } = t;
function o(u, c = "") {
return {
path: c + u.code,
field: u.id,
fullPath: u.code
};
}
function r(u, c = "") {
return n.getViewModelById(u).states.map((l) => o(l, c));
}
function i(u) {
const c = n.getRootViewModelId(), d = r(u);
if (u === c)
return d;
const l = r(c, "root-component.");
return [...d, ...l];
}
function a(u) {
return u.binding && u.binding.path || u.id || "";
}
function s() {
return e && e.getRenderStates() || [];
}
return { getVariables: i, getControlName: a, getStateMachines: s };
}
class io {
constructor(n) {
V(this, "sessionVariables", [
{
key: "CurrentSysOrgName",
name: "当前组织Name",
description: "当前组织Name"
},
// {
// key: "CurrentSysOrgCode",
// name: "当前组织Code",
// description: "当前组织Code"
// },
{
key: "CurrentSysOrgId",
name: "当前组织Id",
description: "当前组织Id"
},
{
key: "CurrentUserName",
name: "当前用户Name",
description: "当前用户Name"
},
{
key: "CurrentUserCode",
name: "当前用户Code",
description: "当前用户Code"
},
{
key: "CurrentUserId",
name: "当前用户Id",
description: "当前用户Id"
},
{
key: "CurrentLanguage",
name: "当前语言编号",
description: "当前登录的语言编号,例如简体中文返回'zh-CHS',英文返回'en',繁体中文'zh-CHT'"
}
]);
V(this, "expressionNames", {
compute: "计算表达式",
dependency: "依赖表达式",
validate: "验证表达式",
dataPicking: "帮助前表达式",
visible: "可见表达式",
readonly: "只读表达式",
required: "必填表达式"
});
V(this, "getExpressionConverter", (n, e) => ({
convertFrom: (o, r, i, a) => {
const s = i.getExpressionRuleValue(n, e || r);
return s && s.value || "";
},
convertTo: (o, r, i, a, s) => {
var u;
if (r === "dataPicking" && (i != null && i.target)) {
const c = `${i.target}_dataPicking`;
((u = i.rules) == null ? void 0 : u.some(
(l) => l.id === c && l.value
)) ? o.dictPickingExpressionId = c : delete o.dictPickingExpressionId;
}
a.updateExpression(i);
}
}));
this.formSchemaService = n;
}
getExpressionRule(n, e) {
const o = this.formSchemaService.getExpressions();
if (!o)
return "";
const r = o.find((a) => a.target === n);
if (!r)
return "";
const i = r.rules.find((a) => a.type === e);
return i || "";
}
// 获取上下文表单变量
getContextFormVariables() {
const { module: n } = this.formSchemaService.getFormSchema();
if (!n.viewmodels || n.viewmodels.length === 0)
return [];
const e = this.formSchemaService.getRootViewModelId(), o = this.formSchemaService.getViewModelById(e);
if (!o || !o.states || o.states.length === 0)
return [];
const r = [];
return o.states.forEach((i) => {
r.push({
key: i.code,
name: i.name,
description: i.name,
category: i.category
});
}), r;
}
createTreeNode(n, e, o = "label") {
return {
id: n.id,
name: n.name,
bindingPath: n[o],
parents: e
};
}
buildEntityFieldsTreeData(n = null, e) {
const o = [];
return n == null || n.forEach((r) => {
var s;
const i = this.createTreeNode(r, e);
let a = [];
(s = r.type) != null && s.fields && (a = this.buildEntityFieldsTreeData(r.type.fields, [...e, r.label])), o.push({
data: i,
children: a,
expanded: !0
});
}), o;
}
buildChildEntityTreeData(n = null, e) {
const o = [];
return n == null || n.forEach((r) => {
var u, c;
const i = this.createTreeNode(r, e), a = this.buildEntityFieldsTreeData((u = r.type) == null ? void 0 : u.fields, [...e, r.label]), s = this.buildChildEntityTreeData((c = r.type) == null ? void 0 : c.entities, [...e, r.label]);
s != null && s.length && (a == null || a.push(...s)), o.push({
data: i,
children: a || [],
// 空值回退
expanded: !0
});
}), o;
}
getEntitiesTreeData() {
const n = this.formSchemaService.getSchemaEntities();
if (!(n != null && n.length))
return [];
const e = n[0];
if (!(e != null && e.type))
return [];
const o = this.buildEntityFieldsTreeData(e.type.fields, [e.code]), r = this.buildChildEntityTreeData(e.type.entities, [e.code]);
return r != null && r.length && (o == null || o.push(...r)), {
entityCode: e.code,
fields: [{
data: this.createTreeNode(e, [], "code"),
children: o || []
}]
};
}
getEntitiesAndVariables() {
return {
entities: this.getEntitiesTreeData(),
variables: {
session: {
name: "系统变量",
items: this.sessionVariables,
visible: !1
},
forms: {
name: "表单变量",
items: this.getContextFormVariables(),
visible: !0
}
}
};
}
onBeforeOpenExpression(n, e, o) {
const r = o === "Field" ? n.binding.field : n.id, i = this.getExpressionRule(r, e), a = this.getEntitiesAndVariables(), s = {
message: ["validate", "required", "dataPicking"].includes(e) && i ? i.message : "",
...a
};
return i.messageType != null && (s.messageType = i.messageType), s;
}
buildRule(n, e, o, r) {
const { expression: i, message: a, messageType: s } = e, u = {
id: `${n}_${o}`,
type: o,
value: i
};
return (o === "validate" || o === "dataPicking" || o === "required") && (u.message = a), o === "dataPicking" && (u.messageType = s), o === "validate" && r && (u.elementId = r), u;
}
getExpressionData() {
const { expressions: n } = this.formSchemaService.getFormSchema().module;
return n || [];
}
updateExpression(n, e, o, r) {
const i = e === "Field" ? n.binding.field : n.id, a = this.buildRule(i, o, r, n.type === "form-group" ? n.id : "");
let u = this.getExpressionData().find((d) => d.targetType === e && d.target === i);
const c = (d) => d.value.trim() === "";
if (u) {
const d = u.rules.find((l) => l.id === a.id);
if (d)
c(a) ? u.rules = u.rules.filter((l) => l.id !== a.id) : (Object.assign(d, a), r === "validate" && n.type === "form-group" && (d.elementId = n.id));
else {
if (c(a))
return null;
u.rules = u.rules || [], u.rules.push(a);
}
} else {
if (c(a))
return null;
u = {
target: `${i}`,
rules: [a],
targetType: e
};
}
return u;
}
getExpressionEditorOptions(n, e, o, r) {
return o.reduce((i, a) => {
var u, c;
const s = e === "Field" ? (u = n == null ? void 0 : n.binding) == null ? void 0 : u.field : n.id;
return i[a] = {
hide: e === "Field" ? !!((c = n == null ? void 0 : n.binding) != null && c.field) : !1,
description: "",
title: this.expressionNames[a],
type: "string",
$converter: this.getExpressionConverter(s),
editor: {
type: "expression-editor",
singleExpand: !1,
dialogTitle: `${this.expressionNames[a]}编辑器`,
showMessage: a === "validate" || a === "dataPicking" || a === "required",
showMessageType: a === "dataPicking",
beforeOpen: () => this.onBeforeOpenExpression(n, a, e),
onSubmitModal: (d) => {
const l = this.updateExpression(n, e, d, a);
if (r) {
const f = this.buildRule(s, d, a);
r(f);
}
return l;
}
}
}, i;
}, {});
}
getExpressionInfo(n, e, o) {
const r = e === "Field" ? n.binding.field : n.id, i = this.getExpressionRule(r, o), a = {
value: i && i.value,
targetId: r,
targetType: e,
expressionType: o
};
return i && i.message && (a.message = i.message), a;
}
getExpressionConfig(n, e, o = ["compute", "dependency", "validate"], r) {
return {
description: "表达式",
title: "表达式",
properties: {
...this.getExpressionEditorOptions(n, e, o, r)
}
};
}
getExpressionOptions(n, e, o) {
const r = this.getExpressionInfo(n, e, o);
return {
dialogTitle: `${this.expressionNames[o]}编辑器`,
singleExpand: !1,
showMessage: o === "required",
beforeOpen: () => this.onBeforeOpenExpression(n, o, e),
expressionInfo: r
};
}
}
class ao {
constructor(n, e) {
V(this, "componentId");
V(this, "viewModelId");
V(this, "eventsEditorUtils");
V(this, "formSchemaUtils");
V(this, "formMetadataConverter");
V(this, "designViewModelUtils");
V(this, "designViewModelField");
V(this, "controlCreatorUtils");
V(this, "designerHostService");
V(this, "schemaService", null);
V(this, "metadataService", null);
V(this, "propertyConfig", {
type: "object",
categories: {}
});
var o;
this.componentId = n, this.designerHostService = e, this.eventsEditorUtils = e.eventsEditorUtils, this.formSchemaUtils = e.formSchemaUtils, this.formMetadataConverter = e.formMetadataConverter, this.viewModelId = ((o = this.formSchemaUtils) == null ? void 0 : o.getViewModelIdByComponentId(n)) || "", this.designViewModelUtils = e.designViewModelUtils, this.controlCreatorUtils = e.controlCreatorUtils, this.metadataService = e.metadataService, this.schemaService = e.schemaService;
}
getTableInfo() {
var n;
return (n = this.schemaService) == null ? void 0 : n.getTableInfoByViewModelId(this.viewModelId);
}
setDesignViewModelField(n) {
var o;
const e = n.binding && n.binding.type === "Form" && n.binding.field;
if (e) {
if (!this.designViewModelField) {
const r = this.designViewModelUtils.getDgViewModel(this.viewModelId);
this.designViewModelField = r.fields.find((i) => i.id === e);
}
n.updateOn = (o = this.designViewModelField) == null ? void 0 : o.updateOn;
}
}
getBasicPropConfig(n) {
return {
description: "Basic Information",
title: "基本信息",
properties: {
id: {
description: "组件标识",
title: "标识",
type: "string",
readonly: !0
},
type: {
description: "组件类型",
title: "控件类型",
type: "select",
editor: {
type: "combo-list",
textField: "name",
valueField: "value",
idField: "value",
editable: !1,
data: [{ value: n.type, name: de[n.type].name }]
}
}
}
};
}
getAppearanceConfig(n = null, e = {}, o) {
const r = {
title: "外观",
description: "Appearance"
}, i = {
class: {
title: "class样式",
type: "string",
description: "组件的CSS样式",
$converter: "/converter/appearance.converter"
},
style: {
title: "style样式",
type: "string",
description: "组件的样式",
$converter: "/converter/appearance.converter"
}
};
for (const a in e)
i[a] = Object.assign(i[a] || {}, e[a]);
return {
...r,
properties: { ...i },
setPropertyRelates(a, s) {
if (a) {
switch (a && a.propertyID) {
case "class":
case "style": {
Lt.value++;
break;
}
}
o && o(a, n, s);
}
}
};
}
getPropertyEditorParams(n, e = [], o = "visible", r = {}, i = {}) {
const { getVariables: a, getControlName: s, getStateMachines: u } = $a(this.designerHostService), c = this.getRealTargetType(n), d = e && e.length > 0 ? e : ["Const", "Variable", "StateMachine", "Expression"], l = {
type: "property-editor",
propertyTypes: d
};
return d.map((f) => {
switch (f) {
case "Const":
Object.assign(l, {
constType: "enum",
constEnums: [{ id: !0, name: "是" }, { id: !1, name: "否" }]
}, r);
break;
case "Expression":
l.expressionConfig = this.getExpressionOptions(n, c, o);
break;
case "StateMachine":
l.stateMachines = u();
break;
case "Variable":
Object.assign(l, {
controlName: s(n),
newVariablePrefix: "is",
newVariableType: "Boolean",
variables: a(this.viewModelId),
onBeforeOpenVariables: (m) => {
m.value = a(this.viewModelId);
}
}, i);
break;
}
}), l;
}
getVisibleProperty(n, e = "") {
return {
visible: {
title: "是否可见",
type: "boolean",
description: "运行时组件是否可见",
editor: this.getPropertyEditorParams(n, e === "gridFieldEditor" ? ["Const", "Expression"] : ["Const", "Variable", "StateMachine", "Expression"], "visible")
}
};
}
/**
* 获取行为
* @param propertyData
* @param viewModelId
* @returns
*/
getBehaviorConfig(n, e = "", o = {}, r) {
const i = {
title: "行为",
description: ""
}, a = this.getVisibleProperty(n, e);
for (const u in o)
a[u] = Object.assign(a[u] || {}, o[u]);
const s = this;
return {
...i,
properties: { ...a },
setPropertyRelates(u, c) {
if (u) {
switch (u.propertyID) {
case "disabled":
case "readonly":
case "visible":
s.afterMutilEditorChanged(n, u);
break;
}
r && r(u, c);
}
}
};
}
/**
* 当多值编辑器变更时
* @param propertyData
* @param changeObject
*/
afterMutilEditorChanged(n, e) {
this.addNewVariableToViewModel(e, this.viewModelId), this.updateExpressionValue(e), this.clearExpression(e, n);
}
/**
*
* @param propertyId
* @param componentInstance
* @returns
*/
updateElementByParentContainer(n, e) {
const o = e && e.parent && e.parent.schema;
if (!o)
return;
const r = o.contents.findIndex((a) => a.id === n), i = Ft(o.contents[r]);
o.contents.splice(r, 1), o.contents.splice(r, 0, i), Ba();
}
/**
* 属性编辑器,在编辑过程中会新增变量,此处需要将新增的变量追加到ViewModel中
* @param changeObject
* @param viewModelId
* @returns
*/
addNewVariableToViewModel(n, e) {
const o = n.propertyValue;
if (!(o && typeof o == "object") || !(o.type === "Variable" && o.isNewVariable))
return;
const a = {
id: o.field,
category: "locale",
code: o.fullPath,
name: o.fullPath,
type: o.newVariableType || "String"
};
delete o.newVariableType, delete o.isNewVariable, this.formSchemaUtils.getVariableByCode(a.code) || this.formSchemaUtils.getViewModelById(e).states.push(a);
}
/**
* 更新表达式到expressions节点
* @param changeObject
*/
updateExpressionValue(n) {
const e = n.propertyValue;
if (!((e && e.type) === "Expression" && e.expressionInfo))
return;
const { expressionId: i, expressionInfo: a } = e, { targetId: s, targetType: u, expressionType: c, value: d, message: l } = a, f = this.formSchemaUtils.getModule();
f.expressions ?? (f.expressions = []);
const { expressions: m } = f;
let p = m.find((b) => b.target === s);
p || (p = { target: s, rules: [], targetType: u }, m.push(p));
const k = p.rules.find((b) => b.type === c);
if (k)
k.value = d, k.message = l;
else {
const b = { id: i, type: c, value: d, message: l };
p.rules.push(b);
}
delete e.expressionInfo;
}
/**
* 属性类型切换为非表达式后,清除原表达式
* @param changeObject
* @param propertyData
* @returns
*/
clearExpression(n, e) {
const o = n.propertyValue;
if (o && o.type === "Expression")
return;
const i = n.propertyID, a = this.formSchemaUtils.getExpressions(), s = e.binding ? e.binding.field : e.id, u = a.find((c) => c.target === s);
!u || !u.rules || (u.rules = u.rules.filter((c) => c.type !== i));
}
getExpressionOptions(n, e, o) {
return new io(this.formSchemaUtils).getExpressionOptions(n, e, o);
}
getRealTargetType(n) {
return ["response-toolbar-item", "tab-toolbar-item", "section-toolbar-item"].indexOf(n.type) > -1 ? "Button" : n.binding && n.binding.field ? "Field" : "Container";
}
}
const Wt = class Wt {
/**
* 根据绑定字段类型获取可用的输入类控件
*/
static getEditorTypesByMDataType(n, e = "") {
let o = Wt.fieldControlTypeMapping[n];
if (e === "data-grid-column" && (o != null && o.length)) {
const r = [de["check-group"].type, de["radio-group"].type];
o = o.filter((i) => !r.includes(i.key));
}
return o;
}
/**
* 获取所有输入类控件
*/
static getAllInputTypes() {
const n = [];
for (const e in Wt.fieldControlTypeMapping)
Wt.fieldControlTypeMapping[e].forEach((o) => {
n.find((r) => r.key === o.key && r.value === o.value) || n.push({ key: o.key, value: o.value });
});
return n;
}
/**
* 提供schema字段基础属性和DOM控件属性的映射
* @param control 控件元数据
*/
static mappingDomPropAndSchemaProp(n, e) {
var i;
const o = (i = n.editor) == null ? void 0 : i.type, r = [];
return (n.type === de["data-grid-column"].type || n.type === de["tree-grid-column"].type) && e && e.categoryId && e.categoryId.indexOf("gridFieldEditor") < 0 && r.push({ domField: "title", schemaField: "name" }), r.push({ domField: "label", schemaField: "name" }), r.push({ domField: "editor.required", schemaField: "require" }), r.push({ domField: "editor.readonly", schemaField: "readonly" }), (o === de["input-group"].type || o === de.textarea.type || o === de["number-spinner"].type) && r.push({ domField: "editor.maxLength", schemaField: "type.length" }), o === de["number-spinner"].type && r.push({ domField: "editor.precision", schemaField: "type.precision" }), (n.type === de["data-grid-column"].type || n.type === de["tree-grid-column"].type) && r.push({ domField: "formatter.precision", schemaField: "type.precision" }), (o === de["combo-list"].type || o === de["radio-group"].type) && r.push({ domField: "editor.data", schemaField: "type.enumValues" }), (n.type === de["data-grid-column"].type || n.type === de["tree-grid-column"].type) && r.push({ domField: "formatter.data", schemaField: "type.enumValues" }), o === de["date-picker"].type && (r.push({ domField: "editor.displayFormat", schemaField: "editor.format" }), r.push({ domField: "editor.fieldType", schemaField: "type.name" })), o === de["number-spinner"].type && (r.push({ domField: "editor.max", schemaField: "editor.maxValue" }), r.push({ domField: "editor.min", schemaField: "editor.minValue" })), o === de.lookup.type && (r.push({ domField: "editor.dataSource", schemaField: "editor.dataSource" }), r.push({ domField: "editor.valueField", schemaField: "editor.valueField" }), r.push({ domField: "editor.textField", schemaField: "editor.textField" }), r.push({ domField: "editor.displayType", schemaField: "editor.displayType" }), r.push({ domField: "editor.mapFields", schemaField: "editor.mapFields" }), r.push({ domField: "editor.helpId", schemaField: "editor.helpId" })), r.push({ domField: "path", schemaField: "bindingPath" }), r.push({ domField: "binding.path", schemaField: "bindingField" }), r.push({ domField: "binding.fullPath", schemaField: "path" }), (n.type === de["data-grid-column"].type || n.type === de["tree-grid-column"].type) && r.push({ domField: "field", schemaField: "bindingPath" }), r;
}
};
/**
* <字段类型,可配置的控件类型列表>的映射
*/
V(Wt, "fieldControlTypeMapping", {
String: [
{ key: de["input-group"].type, value: de["input-group"].name },
{ key: de.lookup.type, value: de.lookup.name },
{ key: de["date-picker"].type, value: de["date-picker"].name },
{ key: de["check-group"].type, value: de["check-group"].name },
{ key: de["radio-group"].type, value: de["radi