UNPKG

@fecp/mobile

Version:

163 lines (162 loc) 6.46 kB
/* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ /* empty css */ import { useAttrs, ref, computed, watch, createBlock, openBlock, unref, mergeProps, isRef, createSlots, withCtx, createVNode, withModifiers } from "vue"; import { MobileField } from "../field/index.mjs"; import { getOptions } from "../../../utils/optionUtil.mjs"; import { Picker } from "../../../../../../node_modules/.pnpm/vant@4.9.17_vue@3.5.13_typescript@5.7.3_/node_modules/vant/es/picker/index.mjs"; import { Popup } from "../../../../../../node_modules/.pnpm/vant@4.9.17_vue@3.5.13_typescript@5.7.3_/node_modules/vant/es/popup/index.mjs"; import { Icon } from "../../../../../../node_modules/.pnpm/vant@4.9.17_vue@3.5.13_typescript@5.7.3_/node_modules/vant/es/icon/index.mjs"; const _sfc_main = { __name: "FieldPicker", props: { // optionType: { // type: String, // default: "static", // }, // dicKey: { // type: String, // default: "", // }, // dicList: { // type: Array, // default: [], // }, // dataSource: { // type: String, // default: "", // }, // dataSourceParams: { // type: Object, // default: {}, // }, pickerOptions: { type: Array, default: [] }, treeOptionsFieldNames: { type: Object, default: { text: "text", value: "value" } }, modelValue: { type: String, default: "" }, disabled: { type: Boolean, default: false }, readonly: { type: Boolean, default: false }, "is-link": false }, emits: ["update:modelValue"], setup(__props, { emit: __emit }) { const props = __props; const attrs = useAttrs(); const finalOptions = ref([]); getOptions({ ...attrs, staticOptions: props.pickerOptions, optionsFieldNames: props.treeOptionsFieldNames }).then((data) => { finalOptions.value = data; }); const fieldTextValue = ref(""); const showPicker = ref(false); const emit = __emit; const pickerValue = computed({ get: () => { const value = props.modelValue; return [value]; }, set: (val) => { emit("update:modelValue", val); } }); watch( [() => props.modelValue, finalOptions], ([value, options]) => { if (!value) { fieldTextValue.value = ""; return; } const optionItem = options.find((item) => item.value == value); fieldTextValue.value = optionItem == null ? void 0 : optionItem.text; }, { immediate: true } ); const onConfirm = ({ selectedValues, selectedOptions }) => { pickerValue.value = selectedValues[0]; showPicker.value = false; }; return (_ctx, _cache) => { const _component_van_icon = Icon; const _component_van_picker = Picker; const _component_van_popup = Popup; return openBlock(), createBlock(unref(MobileField), mergeProps(_ctx.$attrs, { modelValue: unref(fieldTextValue), "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => isRef(fieldTextValue) ? fieldTextValue.value = $event : null), isLink: __props.readonly ? false : true, readonly: "", disabled: __props.disabled, onOpenPicker: _cache[4] || (_cache[4] = () => { if (!__props.readonly) { showPicker.value = true; } }) }), createSlots({ default: withCtx(() => [ createVNode(_component_van_popup, { show: unref(showPicker), "onUpdate:show": _cache[2] || (_cache[2] = ($event) => isRef(showPicker) ? showPicker.value = $event : null), "destroy-on-close": "", position: "bottom" }, { default: withCtx(() => [ createVNode(_component_van_picker, mergeProps(_ctx.$attrs, { columns: unref(finalOptions), "model-value": unref(pickerValue), readonly: false, onConfirm, onCancel: _cache[1] || (_cache[1] = ($event) => showPicker.value = false) }), null, 16, ["columns", "model-value"]) ]), _: 1 }, 8, ["show"]) ]), _: 2 }, [ !__props.readonly && !__props.disabled && unref(fieldTextValue) ? { name: "right-icon", fn: withCtx(() => [ createVNode(_component_van_icon, { name: "clear", class: "custom-close-icon", onClick: _cache[0] || (_cache[0] = withModifiers(($event) => pickerValue.value = null, ["stop"])) }) ]), key: "0" } : void 0 ]), 1040, ["modelValue", "isLink", "disabled"]); }; } }; export { _sfc_main as default };