@zhsz/cool-design-crud
Version:
98 lines (97 loc) • 2.42 kB
JavaScript
;
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;