@antdv/pro-field
Version:
原子信息组件,统一 ProForm、ProTable、ProList、Filter 等组件里面的字段定义。
171 lines (170 loc) • 6.32 kB
JavaScript
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
import { Fragment as _Fragment, createVNode as _createVNode, mergeProps as _mergeProps } from "vue";
import { LoadingOutlined } from "@ant-design/icons-vue";
import { useIntl } from "@antdv/pro-provider";
import { arrayType, classNames, FieldLabel, objectToMap, oneOf, proFieldParsingText } from "@antdv/pro-utils";
import { Cascader } from "ant-design-vue";
import { useConfigContextInject } from "ant-design-vue/es/config-provider/context";
import { computed, defineComponent, ref, toRefs } from "vue";
import { buildProFieldProp } from "../props.mjs";
import { fieldSelectProps, useFieldFetchData } from "../Select/index.mjs";
const fieldCascaderProps = __spreadValues({
options: arrayType(),
radioType: oneOf(["button", "radio"])
}, fieldSelectProps);
const FieldCascader = defineComponent({
name: "FieldCascader",
inheritAttrs: false,
props: buildProFieldProp(fieldCascaderProps),
slots: Object,
emits: {
"update:value": (val) => true
},
setup(props, {
slots,
emit,
expose
}) {
const {
getPrefixCls
} = useConfigContextInject();
const layoutClassName = getPrefixCls("pro-field-cascader");
const intl = useIntl();
const open = ref(false);
const cascaderRef = ref(null);
const {
mode,
light
} = toRefs(props);
const [loading, options, fetchData] = useFieldFetchData(props);
const optionsValueEnum = computed(() => {
var _a;
if (mode.value !== "read") return;
const {
value: valuePropsName = "value",
label: labelPropsName = "label",
children: childrenPropsName = "children"
} = ((_a = props.fieldProps.value) == null ? void 0 : _a.fieldNames) || {};
const valuesMap = /* @__PURE__ */ new Map();
const traverseOptions = (_options) => {
if (!(_options == null ? void 0 : _options.length)) {
return valuesMap;
}
const length = _options.length;
let i = 0;
while (i < length) {
const cur = _options[i++];
valuesMap.set(cur[valuePropsName], cur[labelPropsName]);
traverseOptions(cur[childrenPropsName]);
}
return valuesMap;
};
return traverseOptions(options.value);
});
expose(__spreadProps(__spreadValues({}, cascaderRef.value || {}), {
fetchData: (keyWord) => fetchData(keyWord)
}));
return () => {
var _a, _b, _c, _d, _e;
const {
label = (_a = slots.label) == null ? void 0 : _a.call(slots),
text,
value,
valueEnum,
render,
fieldProps,
renderFormItem,
bordered
} = props;
const textValue = text != null ? text : value;
if (mode.value === "read") {
const dom = _createVNode(_Fragment, null, [proFieldParsingText(textValue, objectToMap(valueEnum || optionsValueEnum.value))]);
if (render) {
return (_b = render(textValue, __spreadValues({
mode: mode.value,
value
}, fieldProps), dom)) != null ? _b : null;
}
return dom;
}
if (mode.value === "edit") {
let dom = _createVNode(Cascader, _mergeProps({
"bordered": !light.value,
"ref": cascaderRef,
"open": open.value,
"suffixIcon": loading.value ? _createVNode(LoadingOutlined, null, null) : void 0,
"placeholder": intl.getMessage("tableForm.selectPlaceholder", "\u8BF7\u9009\u62E9"),
"allowClear": ((_c = props.fieldProps) == null ? void 0 : _c.allowClear) !== false
}, props.fieldProps, {
"value": value,
"onUpdate:value": (val) => {
emit("update:value", val);
},
"onDropdownVisibleChange": (isOpen) => {
var _a2, _b2;
(_b2 = (_a2 = props == null ? void 0 : props.fieldProps) == null ? void 0 : _a2.onDropdownVisibleChange) == null ? void 0 : _b2.call(_a2, isOpen);
open.value = isOpen;
},
"class": classNames((_d = props.fieldProps) == null ? void 0 : _d.class, layoutClassName),
"options": options.value
}), null);
if (renderFormItem) {
dom = (_e = renderFormItem(textValue, computed(() => __spreadProps(__spreadValues({
mode: mode.value,
value
}, fieldProps), {
options: options.value,
loading: loading.value
})), dom)) != null ? _e : null;
}
if (light.value) {
const {
disabled
} = fieldProps;
const notEmpty = !!value && Array.isArray(value) && (value == null ? void 0 : value.length) !== 0;
return _createVNode(FieldLabel, {
"label": label,
"disabled": disabled,
"bordered": bordered,
"value": notEmpty || open.value ? dom : null,
"style": notEmpty ? {
paddingInlineEnd: 0
} : void 0,
"allowClear": false,
"downIcon": notEmpty || open.value ? false : void 0,
"onClick": () => {
var _a2;
open.value = true;
(_a2 = fieldProps == null ? void 0 : fieldProps.onDropdownVisibleChange) == null ? void 0 : _a2.call(fieldProps, true);
}
}, null);
}
return dom;
}
return null;
};
}
});
var stdin_default = FieldCascader;
export {
stdin_default as default,
fieldCascaderProps
};