@cqmcui/cqmcui
Version:
轻量级移动端 Vue2、Vue3 组件库(支持小程序开发)
85 lines (84 loc) • 2.44 kB
JavaScript
import { ref, reactive, computed, onMounted, toRefs, openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot } from "vue";
import { c as createComponent } from "./component-81a4c1d0.js";
import { _ as _export_sfc } from "./_plugin-vue_export-helper-cc2b3d55.js";
import "../locale/lang";
const { componentName, create } = createComponent("side-navbar");
const _sfc_main = create({
props: {
offset: {
type: [String, Number],
default: 15
}
},
emits: [],
setup: (props) => {
const list = ref(null);
const state = reactive({
count: 1,
observer: null
});
const classes = computed(() => {
const prefixCls = componentName;
return {
[prefixCls]: true
};
});
const setPaddingLeft = (nodeList, level = 1) => {
for (let i = 0; i < nodeList.length; i++) {
let item = nodeList[i];
item.children[0].style.paddingLeft = +props.offset * level + "px";
if (!item.className.includes("cqmc-side-navbar-item")) {
setPaddingLeft(Array.from(item.children[1].children), ++state.count);
}
}
state.count--;
};
const handleSlots = () => {
let childNodes = list.value.childNodes;
if (childNodes.length) {
childNodes = Array.from(childNodes).filter((item) => item.nodeType !== 3).map((item) => {
return item;
});
setPaddingLeft(childNodes);
}
};
onMounted(() => {
handleSlots();
state.observer = new MutationObserver(function() {
state.count = 1;
handleSlots();
});
state.observer.observe(list.value, {
attributes: false,
childList: true,
characterData: false,
subtree: false
});
});
return {
...toRefs(state),
list,
classes
};
}
});
const _hoisted_1 = { class: "cqmc-side-navbar__content" };
const _hoisted_2 = {
class: "cqmc-side-navbar__content__list",
ref: "list"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("view", {
class: normalizeClass(_ctx.classes)
}, [
createElementVNode("view", _hoisted_1, [
createElementVNode("view", _hoisted_2, [
renderSlot(_ctx.$slots, "default")
], 512)
])
], 2);
}
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
index as default
};