UNPKG

@zhsz/cool-design-crud

Version:

98 lines (97 loc) 2.42 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const vue = require("vue"); require("../../utils/test.js"); const core = require("../../hooks/core.js"); const index$1 = require("../../utils/index.js"); require("@formily/core"); require("lodash-es"); require("../../hooks/table.js"); const index = /* @__PURE__ */ vue.defineComponent({ name: "cl-query", props: { modelValue: [String, Number], list: { type: Array, required: true }, field: { type: String, default: "query" }, multiple: Boolean, callback: Function }, emits: ["update:modelValue", "change"], setup(props, { emit, expose }) { const { crud } = core.useCore(); const list = vue.ref([]); function update() { let arr = []; if (index$1.isArray(props.modelValue)) { arr = props.modelValue; } else { arr = [props.modelValue]; } if (!props.multiple) { arr.splice(1); } list.value = (props.list || []).map((e) => { e.active = arr.includes(e.value); return e; }); } update(); function selectItem(item) { if (item.active) { item.active = false; } else { if (props.multiple) { item.active = true; } else { list.value.forEach((e) => { e.active = e.value === item.value; }); } } const selection = list.value.filter((e) => e.active).map((e) => e.value); const value = props.multiple ? selection : selection[0]; if (props.callback) { props.callback(value); } else { crud.refresh({ [props.field]: value }); emit("change", value); } } vue.watch(() => props.modelValue, () => { update(); }); expose({ list, selectItem }); return () => { return vue.createVNode("div", { "class": "cl-query" }, [vue.createVNode("ul", null, [list.value.map((item, index2) => { return vue.createVNode("li", { "class": { "is-active": item.active }, "key": index2, "onClick": () => { selectItem(item); } }, [vue.createVNode("span", null, [item.label])]); })])]); }; } }); exports.default = index;