SListCardLayout.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. import { h as F, resolveComponent as f, resolveDirective as _, openBlock as i, createElementBlock as r, createElementVNode as a, toDisplayString as v, Fragment as W, renderList as M, withDirectives as p, createBlock as m, withCtx as y, resolveDynamicComponent as P, createCommentVNode as d, createTextVNode as w, vShow as g, renderSlot as u, normalizeStyle as h, createVNode as k, createStaticVNode as R } from "vue";
  2. import { S as T } from "./index7.js";
  3. import { l as z, U as D, a9 as L } from "./index2.js";
  4. const I = {
  5. name: "SListLayout",
  6. components: {
  7. STable: T
  8. },
  9. data() {
  10. return {
  11. _: this,
  12. tableScrollPx: 0,
  13. isFilter: !1,
  14. isMoreFilter: !1,
  15. layoutHeight: 0,
  16. spinning: !1,
  17. pageSize: 20,
  18. sideWidth: 232,
  19. showSelection: !1,
  20. selectedRowKeys: [],
  21. startX: 0,
  22. dragWidth: 0,
  23. renderButtons: [],
  24. iconMap: {
  25. add: "PlusCircleOutlined",
  26. edit: "FormOutlined",
  27. delete: "DeleteOutlined",
  28. remove: "DeleteOutlined",
  29. import: "UploadOutlined",
  30. export: "DownloadOutlined",
  31. assign: "ClusterOutlined",
  32. execute: "PlayOircleOutlined",
  33. pause: "PauseOircleOutlined",
  34. resume: "PoweroffOutlined",
  35. approve: "HighlightOutlined",
  36. setting: "SettingOutlined",
  37. TopOfType: "VerticalAlignTopOutlined",
  38. TOP: "VerticalAlignTopOutlined",
  39. synchronize: "SyncOutlined"
  40. }
  41. };
  42. },
  43. props: {
  44. col: {
  45. type: [Number, String],
  46. default: 4
  47. },
  48. cardHeight: {
  49. type: Number,
  50. default: 300
  51. },
  52. // 页面标题
  53. title: {
  54. type: String,
  55. required: !0
  56. },
  57. buttons: {
  58. type: Array,
  59. default() {
  60. return [
  61. {
  62. name: "添加",
  63. key: "add",
  64. show: !0,
  65. type: "primary",
  66. icon: !0,
  67. api: null
  68. },
  69. {
  70. name: "批量删除",
  71. key: "remove",
  72. action: "remove",
  73. show: !0,
  74. icon: !0,
  75. api: null
  76. },
  77. {
  78. name: "导入",
  79. key: "import",
  80. show: !0,
  81. icon: !0,
  82. api: null,
  83. templateApi: null
  84. },
  85. {
  86. name: "导出",
  87. key: "export",
  88. show: !0,
  89. icon: !0,
  90. api: null
  91. }
  92. ];
  93. }
  94. },
  95. showPagination: {
  96. type: Boolean,
  97. default: !0
  98. },
  99. loadData: {
  100. type: Function,
  101. required: !0
  102. },
  103. pSize: {
  104. type: [String, Number],
  105. default: 20
  106. }
  107. },
  108. watch: {
  109. buttons: {
  110. handler(e) {
  111. e.length && this.initRenderButtons(e);
  112. },
  113. immediate: !0,
  114. deep: !0
  115. }
  116. },
  117. methods: {
  118. isFunction(e, t = "") {
  119. return !!(e && typeof e == "function");
  120. },
  121. renderIcon(e) {
  122. return typeof e.icon == "string" ? e.icon : typeof e.icon == "boolean" && e.icon ? this.iconMap[e.key] : "";
  123. },
  124. initRenderButtons(e) {
  125. this.renderButtons = e.map((t) => (t.key === "remove" && (this.showSelection = !0), t));
  126. },
  127. initComponent() {
  128. this.$nextTick(() => {
  129. this.layoutHeight = this.$refs.layout.offsetHeight - 50, this.pageSize = this.pSize, this.setLayoutHeight();
  130. });
  131. },
  132. toggleFilter() {
  133. this.isMoreFilter = !this.isMoreFilter, this.setLayoutHeight();
  134. },
  135. // 查询条件重置
  136. filterReset() {
  137. this.$emit("reset");
  138. },
  139. reload() {
  140. this.$refs.table.refresh(!0);
  141. },
  142. // 设置列表路由地址
  143. sethsitoryPath() {
  144. const e = this.$route;
  145. sessionStorage.setItem("backPath", e.path);
  146. },
  147. // 按钮回调
  148. btnCallback(e) {
  149. this.$emit("btnCallback", e.key, this.selectedRowKeys), this[e.key] ? this[e.key](e) : this.handAction(e);
  150. },
  151. // 其他未定义按钮方法生成
  152. handAction(e) {
  153. if (e.selection !== !1 && !this.selectedRowKeys.length) {
  154. this.$message.warn(`请选择要${e.name}的数据`);
  155. return;
  156. }
  157. if (this.isFunction(e.api, e.name, e.key)) {
  158. if (e.confirm) {
  159. this.$confirm({
  160. title: `${e.name}`,
  161. content: () => F("div", { style: "color:red" }, `确认要{${e.name}}数据吗?`),
  162. onOk: () => {
  163. this.spinning = !0, e.api(this.selectedRowKeys).then(() => {
  164. this.$message.success(`${e.name}成功`), this.$emit("reset");
  165. }).finally(() => {
  166. this.spinning = !1;
  167. });
  168. }
  169. });
  170. return;
  171. }
  172. this.spinning = !0, e.api(this.selectedRowKeys).then(() => {
  173. this.$message.success(`${e.name}成功`), this.$emit("reset");
  174. }).finally(() => {
  175. this.spinning = !1;
  176. });
  177. }
  178. },
  179. // 变更按钮状态
  180. setStateBtn(e, t) {
  181. typeof e == "string" ? this.setStateBtnItem(e, t) : e.forEach((s) => {
  182. this.setStateBtnItem(s, t);
  183. });
  184. },
  185. setStateBtnItem(e, t) {
  186. const s = this.renderButtons.find((c) => c.key === e);
  187. if (!s) {
  188. console.error(`按钮(${e})未定义, 请确认该变更状态按钮是否设置正确`);
  189. return;
  190. }
  191. Object.keys(t).forEach((c) => {
  192. s[c] = t[c];
  193. });
  194. },
  195. // 添加方法
  196. add() {
  197. },
  198. // 删除方法
  199. delete(e) {
  200. this.handAction(e);
  201. },
  202. // 设置表格滚动条高度
  203. setLayoutHeight() {
  204. this.$nextTick(() => {
  205. const t = this.$refs.filters && this.$refs.filters.offsetHeight || 0, s = this.$refs.tabs && this.$refs.tabs.offsetHeight || 0;
  206. this.tableScrollPx = this.layoutHeight - t - 0 - s;
  207. });
  208. }
  209. },
  210. mounted() {
  211. this.initComponent();
  212. },
  213. directives: {
  214. sidedrag: {
  215. mounted(e, t) {
  216. e.style.cursor = "e-resize";
  217. const s = t.value;
  218. document.addEventListener("selectstart", (c) => {
  219. c.preventDefault();
  220. }), e.onmousedown = (c) => {
  221. s.startX = c.clientX, s.dragWidth = s.sideWidth, document.onmousemove = (o) => {
  222. const l = o.clientX - s.startX;
  223. if (l < 0) {
  224. if (s.dragWidth + l <= 232) return;
  225. s.sideWidth = s.dragWidth + l;
  226. } else {
  227. if (s.dragWidth + l >= 500) return;
  228. s.sideWidth = s.dragWidth + l;
  229. }
  230. }, document.onmouseup = () => {
  231. document.onmousemove = document.onmousedown = null;
  232. };
  233. };
  234. }
  235. }
  236. }
  237. }, N = {
  238. class: "list-layout",
  239. ref: "layout"
  240. }, x = { class: "tools" }, A = { class: "title" }, V = { class: "btns" }, K = {
  241. key: 0,
  242. style: { "margin-left": "8px" }
  243. }, E = {
  244. class: "list-filter-wrap",
  245. ref: "filters"
  246. }, X = {
  247. key: 0,
  248. class: "filter-content"
  249. }, q = { class: "filter" }, U = {
  250. key: 1,
  251. class: "reset-wrap"
  252. }, j = {
  253. key: 1,
  254. class: "filter-more-content"
  255. }, G = {
  256. key: 2,
  257. class: "desc-wrap"
  258. }, J = { class: "table-content" }, Q = {
  259. key: 0,
  260. class: "tabs-wrap",
  261. ref: "tabs"
  262. }, Y = { class: "other" };
  263. function Z(e, t, s, c, o, l) {
  264. const b = D, S = f("down-outlined"), $ = f("up-outlined"), O = f("sync-outlined"), C = L, H = _("action"), B = _("sidedrag");
  265. return i(), r("div", N, [
  266. a("div", x, [
  267. a("div", A, v(s.title), 1),
  268. a("div", V, [
  269. (i(!0), r(W, null, M(o.renderButtons, (n) => (i(), r("span", {
  270. class: "item-btn",
  271. key: n.key
  272. }, [
  273. p((i(), m(b, {
  274. class: "btn",
  275. disabled: !!n.disabled,
  276. type: n.type || n.key === "add" ? "primary" : "default",
  277. onClick: (ee) => l.btnCallback(n)
  278. }, {
  279. icon: y(() => [
  280. l.renderIcon(n) ? (i(), m(P(l.renderIcon(n)), { key: 0 })) : d("", !0)
  281. ]),
  282. default: y(() => [
  283. w(" " + v(n.name), 1)
  284. ]),
  285. _: 2
  286. }, 1032, ["disabled", "type", "onClick"])), [
  287. [H, n.action || n.key],
  288. [g, n.show !== !1]
  289. ])
  290. ]))), 128)),
  291. e.$slots.otherBtns ? (i(), r("span", K, [
  292. u(e.$slots, "otherBtns", { selections: o.selectedRowKeys }, void 0, !0)
  293. ])) : d("", !0)
  294. ])
  295. ]),
  296. a("div", {
  297. class: "list-layout-main",
  298. style: h({ height: o.layoutHeight + "px" })
  299. }, [
  300. e.$slots.tree ? (i(), r("div", {
  301. key: 0,
  302. class: "side",
  303. ref: "side",
  304. style: h([{ height: o.layoutHeight + "px", width: o.sideWidth + "px" }, { "overflow-y": "auto" }])
  305. }, [
  306. u(e.$slots, "tree", {}, void 0, !0)
  307. ], 4)) : d("", !0),
  308. e.$slots.tree ? p((i(), r("div", {
  309. key: 1,
  310. class: "side-bar",
  311. style: h({ height: o.layoutHeight + "px", backgroundColor: e.$theme.bgColor })
  312. }, null, 4)), [
  313. [B, o._]
  314. ]) : d("", !0),
  315. e.$slots.empty ? (i(), r("div", {
  316. key: 3,
  317. class: "layout-list-content",
  318. style: h({ height: o.layoutHeight + "px" })
  319. }, [
  320. u(e.$slots, "empty", {}, void 0, !0)
  321. ], 4)) : (i(), r("div", {
  322. key: 2,
  323. class: "layout-list-content",
  324. style: h({ height: o.layoutHeight - 1 + "px" })
  325. }, [
  326. p(a("div", E, [
  327. e.$slots.filter ? (i(), r("div", X, [
  328. a("div", q, [
  329. u(e.$slots, "filter", {}, void 0, !0)
  330. ]),
  331. e.$slots.filterMore ? (i(), r("a", {
  332. key: 0,
  333. class: "filter-more-btn",
  334. onClick: t[0] || (t[0] = (...n) => l.toggleFilter && l.toggleFilter(...n))
  335. }, [
  336. w(v(o.isMoreFilter ? "收起" : "更多") + " ", 1),
  337. o.isMoreFilter ? (i(), m($, {
  338. key: 1,
  339. style: { "font-size": "12px" }
  340. })) : (i(), m(S, {
  341. key: 0,
  342. style: { "font-size": "12px" }
  343. }))
  344. ])) : d("", !0),
  345. e.$slots.filter ? (i(), r("div", U, [
  346. k(C, {
  347. placement: "top",
  348. overlayStyle: { maxWidth: "500px" }
  349. }, {
  350. title: y(() => t[1] || (t[1] = [
  351. a("span", null, "条件重置", -1)
  352. ])),
  353. default: y(() => [
  354. k(b, {
  355. style: { "padding-bottom": "2px" },
  356. onClick: l.filterReset
  357. }, {
  358. icon: y(() => [
  359. k(O)
  360. ]),
  361. _: 1
  362. }, 8, ["onClick"])
  363. ]),
  364. _: 1
  365. })
  366. ])) : d("", !0)
  367. ])) : d("", !0),
  368. e.$slots.filterMore ? p((i(), r("div", j, [
  369. u(e.$slots, "filterMore", {}, void 0, !0)
  370. ], 512)), [
  371. [g, o.isMoreFilter]
  372. ]) : d("", !0),
  373. e.$slots.desc ? (i(), r("div", G, [
  374. u(e.$slots, "desc", {}, void 0, !0)
  375. ])) : d("", !0)
  376. ], 512), [
  377. [g, e.$slots.filter]
  378. ]),
  379. a("div", J, [
  380. e.$slots.tabs ? (i(), r("div", Q, [
  381. u(e.$slots, "tabs", {}, void 0, !0)
  382. ], 512)) : d("", !0),
  383. a("div", {
  384. class: "table-container",
  385. style: h({
  386. display: "grid",
  387. gridTemplateColumns: `repeat(${s.col}, 1fr)`,
  388. gap: "12px",
  389. height: o.tableScrollPx - 1 + "px"
  390. })
  391. }, t[2] || (t[2] = [
  392. R('<div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div><div class="item-card" data-v-7b064537></div>', 15)
  393. ]), 4)
  394. ])
  395. ], 4))
  396. ], 4),
  397. a("div", Y, [
  398. u(e.$slots, "other", {}, void 0, !0)
  399. ])
  400. ], 512);
  401. }
  402. const oe = /* @__PURE__ */ z(I, [["render", Z], ["__scopeId", "data-v-7b064537"]]);
  403. export {
  404. oe as default
  405. };