@gyenno/nutui-taro
Version:
京东风格的轻量级移动端 Vue2、Vue3 组件库(支持小程序开发)
119 lines (118 loc) • 3.66 kB
JavaScript
import { inject, getCurrentInstance, onUnmounted, computed, ref, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode, renderSlot, createTextVNode, Fragment, toDisplayString } from "vue";
import { c as createComponent } from "./component-25dcca32.js";
import { p as pxCheck } from "./pxCheck-c6b9f6b7.js";
import { G as GRID_KEY } from "./common-e3c38ee4.js";
import { _ as _export_sfc } from "./_plugin-vue_export-helper-cc2b3d55.js";
import "../locale/lang";
function useInject(key) {
const parent = inject(key, null);
if (parent) {
const instance = getCurrentInstance();
const { add, remove, internalChildren } = parent;
add(instance);
onUnmounted(() => remove(instance));
const index = computed(() => internalChildren.indexOf(instance));
return {
parent,
index
};
}
return {
parent: null,
index: ref(-1)
};
}
const { create, componentName } = createComponent("grid-item");
const _sfc_main = create({
props: {
text: {
type: String
}
// router
// to: {
// type: [String, Object]
// },
// url: {
// type: String,
// default: ''
// },
// replace: {
// type: Boolean,
// default: false
// }
},
emits: ["click"],
setup(props, { emit }) {
const Parent = useInject(GRID_KEY);
if (!Parent.parent)
return {};
const index = Parent.index;
const parent = Parent.parent.props;
const rootClass = computed(() => {
const prefixCls = componentName;
return {
[prefixCls]: true
};
});
const rootStyle = computed(() => {
const style = {
flexBasis: `${100 / +parent.columnNum}%`
};
if (parent.square) {
style.paddingTop = `${100 / +parent.columnNum}%`;
} else if (parent.gutter) {
style.paddingRight = pxCheck(parent.gutter);
if (index.value >= parent.columnNum) {
style.marginTop = pxCheck(parent.gutter);
}
}
return style;
});
const contentClass = computed(() => {
const prefixCls = `${componentName}__content`;
return {
[`${prefixCls}`]: true,
[`${prefixCls}--border`]: parent.border,
[`${prefixCls}--surround`]: parent.border && parent.gutter,
[`${prefixCls}--center`]: parent.center,
[`${prefixCls}--square`]: parent.square,
[`${prefixCls}--reverse`]: parent.reverse,
[`${prefixCls}--${parent.direction}`]: !!parent.direction,
[`${prefixCls}--clickable`]: parent.clickable
};
});
const handleClick = (event) => {
emit("click", event);
};
return {
rootClass,
rootStyle,
contentClass,
handleClick
};
}
});
const _hoisted_1 = { class: "nut-grid-item__text" };
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("view", {
class: normalizeClass(_ctx.rootClass),
style: normalizeStyle(_ctx.rootStyle),
onClick: _cache[0] || (_cache[0] = (...args) => _ctx.handleClick && _ctx.handleClick(...args))
}, [
createElementVNode("view", {
class: normalizeClass(_ctx.contentClass)
}, [
renderSlot(_ctx.$slots, "default"),
createTextVNode(),
createElementVNode("view", _hoisted_1, [
_ctx.text ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
createTextVNode(toDisplayString(_ctx.text), 1)
], 64)) : renderSlot(_ctx.$slots, "text", { key: 1 })
])
], 2)
], 6);
}
const index_taro = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
index_taro as default
};