UNPKG

@antdv/pro-field

Version:

原子信息组件,统一 ProForm、ProTable、ProList、Filter 等组件里面的字段定义。

171 lines (170 loc) 6.32 kB
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 };