UNPKG

@zhsz/cool-design-crud

Version:

98 lines (97 loc) 2.29 kB
import { defineComponent, ref, watch, createVNode } from "vue"; import "../../utils/test.mjs"; import { useCore } from "../../hooks/core.mjs"; import { isArray } from "../../utils/index.mjs"; import "@formily/core"; import "lodash-es"; import "../../hooks/table.mjs"; const index = /* @__PURE__ */ 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 } = useCore(); const list = ref([]); function update() { let arr = []; if (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); } } watch(() => props.modelValue, () => { update(); }); expose({ list, selectItem }); return () => { return createVNode("div", { "class": "cl-query" }, [createVNode("ul", null, [list.value.map((item, index2) => { return createVNode("li", { "class": { "is-active": item.active }, "key": index2, "onClick": () => { selectItem(item); } }, [createVNode("span", null, [item.label])]); })])]); }; } }); export { index as default };