UNPKG

@cqmcui/cqmcui

Version:

轻量级移动端 Vue2、Vue3 组件库(支持小程序开发)

198 lines (197 loc) 6.86 kB
import { defineComponent, h, reactive, computed, watch, toRefs, resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, Fragment, renderList, normalizeStyle, createTextVNode, toDisplayString, renderSlot, createBlock, createCommentVNode } from "vue"; import { c as createComponent } from "./component-81a4c1d0.js"; import { DownArrow } from "@cqmcui/icons-vue"; import { _ as _export_sfc } from "./_plugin-vue_export-helper-cc2b3d55.js"; import "../locale/lang"; const RenderColumn = defineComponent({ setup(props) { return () => h(`view`, {}, props.slots[0] ? props.slots[0](props.record) : props.slots[1](props.record)); }, props: { slots: Array, record: Object } }); const { componentName, create, translate } = createComponent("table"); const _sfc_main = create({ components: { RenderColumn, DownArrow }, props: { bordered: { type: Boolean, default: true }, columns: { type: Array, default: () => { return []; } }, data: { type: Object, default: () => { return {}; } }, summary: { type: Function, default: null }, striped: { type: Boolean, default: false } }, emits: ["sorter"], setup(props, { emit, slots }) { const state = reactive({ curData: props.data }); const classes = computed(() => { const prefixCls = componentName; return { [prefixCls]: true }; }); const cellClasses = (item) => { return { "cqmc-table__main__head__tr--border": props.bordered, [`cqmc-table__main__head__tr--align${item.align ? item.align : ""}`]: true }; }; const stylehead = (item) => { return item.stylehead ? item.stylehead : ""; }; const stylecolumn = (item) => { return item.stylecolumn ? item.stylecolumn : ""; }; const getColumnItem = (value) => { return props.columns.filter((item) => item.key === value)[0]; }; const getColumnItemStyle = (value) => { const style = props.columns.filter((item) => item.key === value); return style[0].stylecolumn ? style[0].stylecolumn : ""; }; const handleSorterClick = (item) => { if (item.sorter) { emit("sorter", item); state.curData = typeof item.sorter === "function" ? state.curData.sort(item.sorter) : item.sorter === "default" ? state.curData.sort() : state.curData; } }; const sortDataItem = () => { return props.columns.map((columns) => { return [columns.key, columns.render]; }); }; watch( () => props.data, (val) => { state.curData = val.slice(); } ); return { ...toRefs(state), classes, cellClasses, getColumnItem, getColumnItemStyle, handleSorterClick, sortDataItem, translate, stylehead, stylecolumn }; } }); const _hoisted_1 = { class: "cqmc-table__main__head" }; const _hoisted_2 = { class: "cqmc-table__main__head__tr" }; const _hoisted_3 = ["onClick"]; const _hoisted_4 = { class: "cqmc-table__main__body" }; const _hoisted_5 = { key: 1 }; const _hoisted_6 = { key: 0, class: "cqmc-table__nodata" }; const _hoisted_7 = { key: 0, class: "cqmc-table__nodata__text" }; const _hoisted_8 = { key: 1, class: "cqmc-table__summary" }; const _hoisted_9 = ["innerHTML"]; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_DownArrow = resolveComponent("DownArrow"); const _component_RenderColumn = resolveComponent("RenderColumn"); return openBlock(), createElementBlock("view", { class: normalizeClass(_ctx.classes) }, [ createElementVNode("view", { class: normalizeClass(["cqmc-table__main", { "cqmc-table__main--striped": _ctx.striped }]) }, [ createElementVNode("view", _hoisted_1, [ createElementVNode("view", _hoisted_2, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.columns, (item) => { return openBlock(), createElementBlock("span", { class: normalizeClass(["cqmc-table__main__head__tr__th", _ctx.cellClasses(item)]), key: item.key, onClick: ($event) => _ctx.handleSorterClick(item), style: normalizeStyle(item.stylehead) }, [ createTextVNode(toDisplayString(item.title) + " ", 1), renderSlot(_ctx.$slots, "icon"), !_ctx.$slots.icon && item.sorter ? (openBlock(), createBlock(_component_DownArrow, { key: 0, width: "12px", height: "12px" })) : createCommentVNode("", true) ], 14, _hoisted_3); }), 128)) ]) ]), createElementVNode("view", _hoisted_4, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.curData, (item) => { return openBlock(), createElementBlock("view", { class: "cqmc-table__main__body__tr", key: item }, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.sortDataItem(), ([value, render]) => { return openBlock(), createElementBlock("span", { class: normalizeClass(["cqmc-table__main__body__tr__td", _ctx.cellClasses(_ctx.getColumnItem(value))]), key: value, style: normalizeStyle(_ctx.getColumnItemStyle(value)) }, [ typeof item[value] === "function" || typeof render === "function" ? (openBlock(), createBlock(_component_RenderColumn, { key: 0, slots: [render, item[value]], record: item }, null, 8, ["slots", "record"])) : (openBlock(), createElementBlock("view", _hoisted_5, toDisplayString(item[value]), 1)) ], 6); }), 128)) ]); }), 128)) ]) ], 2), !_ctx.curData.length ? (openBlock(), createElementBlock("view", _hoisted_6, [ createElementVNode("div", { class: normalizeClass(["cqmc-table__nodata", { "cqmc-table__nodata--border": _ctx.bordered }]) }, [ renderSlot(_ctx.$slots, "nodata"), !_ctx.$slots.nodata ? (openBlock(), createElementBlock("div", _hoisted_7, toDisplayString(_ctx.translate("noData")), 1)) : createCommentVNode("", true) ], 2) ])) : createCommentVNode("", true), _ctx.summary ? (openBlock(), createElementBlock("view", _hoisted_8, [ createElementVNode("span", { class: "cqmc-table__summary__text", innerHTML: _ctx.summary().value }, null, 8, _hoisted_9) ])) : createCommentVNode("", true) ], 2); } const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { index as default };