import { h as I, resolveComponent as m, resolveDirective as _, openBlock as n, createElementBlock as l, createElementVNode as d, toDisplayString as f, Fragment as K, renderList as b, withDirectives as v, createBlock as g, withCtx as p, resolveDynamicComponent as L, createCommentVNode as a, createTextVNode as S, vShow as C, renderSlot as u, normalizeStyle as y, createVNode as k, createSlots as P } from "vue"; import { S as z } from "./index7.js"; import { l as W, U as T, a9 as A } from "./index2.js"; const M = { name: "SListLayout", components: { STable: z // ImportModal }, data() { return { _: this, importLoading: !1, exportLoading: !1, importVisible: !1, isFilter: !1, isMoreFilter: !1, layoutHeight: 0, tableScrollPx: 0, spinning: !1, pageSize: 20, sideWidth: 232, showSelection: !1, selectedRowKeys: [], expandedRowKeys: [], renderColumns: [], startX: 0, dragWidth: 0, renderButtons: [], iconMap: { add: "PlusCircleOutlined", edit: "FormOutlined", delete: "DeleteOutlined", remove: "DeleteOutlined", import: "UploadOutlined", export: "DownloadOutlined", assign: "ClusterOutlined", execute: "PlayOircleOutlined", pause: "PauseOircleOutlined", resume: "PoweroffOutlined", approve: "HighlightOutlined", setting: "SettingOutlined", TopOfType: "VerticalAlignTopOutlined", TOP: "VerticalAlignTopOutlined", synchronize: "SyncOutlined" } }; }, props: { // 页面标题 title: { type: String, required: !0 }, buttons: { type: Array, default() { return [ { name: "添加", key: "add", show: !0, type: "primary", icon: !0, api: null }, { name: "批量删除", key: "remove", action: "remove", show: !0, icon: !0, api: null }, { name: "导入", key: "import", show: !0, icon: !0, api: null, templateApi: null }, { name: "导出", key: "export", show: !0, icon: !0, api: null } ]; } }, // 列表checkbox列 isSelection: { type: Boolean, default: !1 }, showPagination: { type: Boolean, default: !0 }, columns: { type: Array, default() { return []; } }, rowKey: { type: [Function, String], default: "id" }, loadData: { type: Function, required: !0 }, pSize: { type: [String, Number], default: 20 } }, watch: { buttons: { handler(e) { e.length && this.initRenderButtons(e); }, immediate: !0, deep: !0 }, columns: { handler(e) { console.log("watch"), this.initComponent(); } } }, methods: { isFunction(e, t = "") { return !!(e && typeof e == "function"); }, renderIcon(e) { return typeof e.icon == "string" ? e.icon : typeof e.icon == "boolean" && e.icon ? this.iconMap[e.key] : ""; }, initRenderButtons(e) { this.renderButtons = e.map((t) => (t.key === "remove" && (this.showSelection = !0), t)); }, initTable() { this.$nextTick(() => { var e; this.layoutHeight = ((e = this.$refs.layout) == null ? void 0 : e.parentNode.offsetHeight) - 60, this.setLayoutHeight(), this.pageSize = this.pSize, this.renderColumns = this.columns.map((t) => ((t.template || t.isClick || t.dataIndex === "action" && !t.customRender) && !t.scopedSlots && (t.scopedSlots = { customRender: t.dataIndex }), t)); }); }, initComponent() { this.initTable(); }, toggleFilter() { this.isMoreFilter = !this.isMoreFilter, this.setLayoutHeight(); }, // 查询条件重置 filterReset() { this.$emit("reset"); }, reload() { this.$refs.table.refresh(!0); }, // 树列表 - 新增/编辑/详情 时 不刷新 setFilterParams() { }, // 设置列表路由地址 sethsitoryPath() { const e = this.$route; sessionStorage.setItem("backPath", e.path); }, // 按钮回调 btnCallback(e) { this.$emit("btnCallback", e.key, this.selectedRowKeys), this[e.key] ? this[e.key](e) : this.handAction(e); }, // 其他未定义按钮方法生成 handAction(e) { if (e.selection !== !1 && !this.selectedRowKeys.length) { this.$message.warn(`请选择要${e.name}的数据`); return; } if (this.isFunction(e.api, e.name, e.key)) { if (e.confirm) { this.$confirm({ title: `${e.name}`, content: () => I("div", { style: "color:red" }, `确认要{${e.name}}数据吗?`), onOk: () => { this.spinning = !0, e.api(this.selectedRowKeys).then(() => { this.$message.success(`${e.name}成功`), this.$emit("reset"); }).finally(() => { this.spinning = !1; }); } }); return; } this.spinning = !0, e.api(this.selectedRowKeys).then(() => { this.$message.success(`${e.name}成功`), this.$emit("reset"); }).finally(() => { this.spinning = !1; }); } }, // 变更按钮状态 setStateBtn(e, t) { typeof e == "string" ? this.setStateBtnItem(e, t) : e.forEach((s) => { this.setStateBtnItem(s, t); }); }, setStateBtnItem(e, t) { const s = this.renderButtons.find((c) => c.key === e); if (!s) { console.error(`按钮(${e})未定义, 请确认该变更状态按钮是否设置正确`); return; } Object.keys(t).forEach((c) => { s[c] = t[c]; }); }, // 添加方法 add() { }, // 删除方法 delete(e) { this.handAction(e); }, // 导入方法 import() { this.importVisible = !0; }, // 导出方法 export(e) { this.isFunction(e.api, e.name, e.key) && (this.spinning = !0, this.exportApi().then(() => { this.spinning = !1; })); }, // 导入回调 importExcel(e) { this.importLoading = !0; const t = this.renderButtons.find((s) => s.key === "import"); this.isFunction(t.api, t.name, t.key) && t.api(e).then(() => { this.importLoading = !1, this.$message.success("导入成功"), this.importVisible = !1, this.$emit("reset"); }); }, // 模板下载回调 exportExcelTemplate() { const e = this.renderButtons.find((t) => t.key === "import"); this.isFunction(e.templateApi, e.name, e.key) && (this.exportLoading = !0, e.templateApi().finally(() => { this.exportLoading = !1; })); }, // 表格可点击列事件回调 tableColCallback(e, t) { this.$emit("tableColCallback", e, t); }, onSelectChange(e) { this.selectedRowKeys = e; }, // 设置表格滚动条高度 setLayoutHeight() { this.$nextTick(() => { const t = this.$refs.filters && this.$refs.filters.offsetHeight || 0, s = this.$refs.tabs && this.$refs.tabs.offsetHeight || 0; this.tableScrollPx = this.layoutHeight - t - 103 - s; }); } }, mounted() { this.initComponent(); }, directives: { sidedrag: { mounted(e, t) { e.style.cursor = "e-resize"; const s = t.value; document.addEventListener("selectstart", (c) => { c.preventDefault(); }), e.onmousedown = (c) => { s.startX = c.clientX, s.dragWidth = s.sideWidth, document.onmousemove = (o) => { const r = o.clientX - s.startX; if (r < 0) { if (s.dragWidth + r <= 232) return; s.sideWidth = s.dragWidth + r; } else { if (s.dragWidth + r >= 500) return; s.sideWidth = s.dragWidth + r; } }, document.onmouseup = () => { document.onmousemove = document.onmousedown = null; }; }; } } } }, D = { class: "list-layout", ref: "layout" }, V = { class: "tools" }, E = { class: "title" }, N = { class: "btns" }, X = { key: 0, style: { "margin-left": "8px" } }, U = { class: "list-filter-wrap", ref: "filters" }, q = { key: 0, class: "filter-content" }, j = { class: "filter" }, G = { key: 1, class: "reset-wrap" }, J = { key: 1, class: "filter-more-content" }, Q = { key: 2, class: "desc-wrap" }, Y = { class: "table-content" }, Z = { key: 0, class: "tabs-wrap", ref: "tabs" }, ee = { class: "table-container" }, te = ["onClick"], se = { class: "other" }; function ie(e, t, s, c, o, r) { const w = T, x = m("down-outlined"), O = m("up-outlined"), B = m("sync-outlined"), F = A, $ = m("s-table"), H = _("action"), R = _("sidedrag"); return n(), l("div", D, [ d("div", V, [ d("div", E, f(s.title), 1), d("div", N, [ (n(!0), l(K, null, b(o.renderButtons, (i) => (n(), l("span", { class: "item-btn", key: i.key }, [ v((n(), g(w, { class: "btn", disabled: !!i.disabled, type: i.type || i.key === "add" ? "primary" : "default", onClick: (h) => r.btnCallback(i) }, { icon: p(() => [ r.renderIcon(i) ? (n(), g(L(r.renderIcon(i)), { key: 0 })) : a("", !0) ]), default: p(() => [ S(" " + f(i.name), 1) ]), _: 2 }, 1032, ["disabled", "type", "onClick"])), [ [H, i.action || i.key], [C, i.show !== !1] ]) ]))), 128)), e.$slots.otherBtns ? (n(), l("span", X, [ u(e.$slots, "otherBtns", { selections: o.selectedRowKeys }, void 0, !0) ])) : a("", !0) ]) ]), d("div", { class: "list-layout-main", style: y({ height: o.layoutHeight + "px" }) }, [ e.$slots.tree ? (n(), l("div", { key: 0, class: "side", ref: "side", style: y([{ height: o.layoutHeight + "px", width: o.sideWidth + "px" }, { "overflow-y": "auto" }]) }, [ u(e.$slots, "tree", {}, void 0, !0) ], 4)) : a("", !0), e.$slots.tree ? v((n(), l("div", { key: 1, class: "side-bar", style: y({ height: o.layoutHeight + "px", backgroundColor: e.$theme.bgColor }) }, null, 4)), [ [R, o._] ]) : a("", !0), e.$slots.empty ? (n(), l("div", { key: 3, class: "layout-list-content", style: y({ height: o.layoutHeight + "px" }) }, [ u(e.$slots, "empty", {}, void 0, !0) ], 4)) : (n(), l("div", { key: 2, class: "layout-list-content", style: y({ height: o.layoutHeight + "px" }) }, [ d("div", U, [ e.$slots.filter ? (n(), l("div", q, [ d("div", j, [ u(e.$slots, "filter", {}, void 0, !0) ]), e.$slots.filterMore ? (n(), l("a", { key: 0, class: "filter-more-btn", onClick: t[0] || (t[0] = (...i) => r.toggleFilter && r.toggleFilter(...i)) }, [ S(f(o.isMoreFilter ? "收起" : "更多") + " ", 1), o.isMoreFilter ? (n(), g(O, { key: 1, style: { "font-size": "12px" } })) : (n(), g(x, { key: 0, style: { "font-size": "12px" } })) ])) : a("", !0), e.$slots.filter ? (n(), l("div", G, [ k(F, { placement: "top", overlayStyle: { maxWidth: "500px" } }, { title: p(() => t[2] || (t[2] = [ d("span", null, "条件重置", -1) ])), default: p(() => [ k(w, { style: { "padding-bottom": "2px" }, onClick: r.filterReset }, { icon: p(() => [ k(B) ]), _: 1 }, 8, ["onClick"]) ]), _: 1 }) ])) : a("", !0) ])) : a("", !0), e.$slots.filterMore ? v((n(), l("div", J, [ u(e.$slots, "filterMore", {}, void 0, !0) ], 512)), [ [C, o.isMoreFilter] ]) : a("", !0), e.$slots.desc ? (n(), l("div", Q, [ u(e.$slots, "desc", {}, void 0, !0) ])) : a("", !0) ], 512), d("div", Y, [ e.$slots.tabs ? (n(), l("div", Z, [ u(e.$slots, "tabs", {}, void 0, !0) ], 512)) : a("", !0), d("div", ee, [ k($, { ref: "table", size: "middle", scroll: { y: o.tableScrollPx, x: "100%" }, pageSize: o.pageSize, rowKey: s.rowKey, columns: o.renderColumns, data: s.loadData, "expanded-row-keys": o.expandedRowKeys, "onUpdate:expandedRowKeys": t[1] || (t[1] = (i) => o.expandedRowKeys = i), rowSelection: o.showSelection || s.isSelection ? { selectedRowKeys: o.selectedRowKeys, onChange: r.onSelectChange } : null, showPagination: s.showPagination }, P({ _: 2 }, [ b(o.renderColumns, (i) => ({ name: "bodyCell", fn: p((h) => [ i.template && h.column.dataIndex === i.dataIndex ? u(e.$slots, i.dataIndex, { key: 0, text: h.text, record: h.record, item: i }, void 0, !0) : a("", !0), i.isClick && h.column.dataIndex === i.dataIndex ? (n(), l("a", { key: i.dataIndex, onClick: (oe) => r.tableColCallback(i.dataIndex, h.record) }, f(h.text.name), 9, te)) : a("", !0), h.column.dataIndex === "action" ? u(e.$slots, "action", { key: 2, record: h.record }, void 0, !0) : a("", !0) ]) })) ]), 1032, ["scroll", "pageSize", "rowKey", "columns", "data", "expanded-row-keys", "rowSelection", "showPagination"]) ]) ]) ], 4)) ], 4), d("div", se, [ u(e.$slots, "other", {}, void 0, !0) ]) ], 512); } const ae = /* @__PURE__ */ W(M, [["render", ie], ["__scopeId", "data-v-338f5afc"]]); export { ae as default };