@maketribe/ms-app 4.0.0-alpha.4 → 4.0.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/dist/cjs/{404-C5dmqK1T.cjs → 404-DGgEMQMF.cjs} +2 -2
  2. package/dist/cjs/{404-C5dmqK1T.cjs.map → 404-DGgEMQMF.cjs.map} +1 -1
  3. package/dist/cjs/{article-edit-add-page-BhIbt8mY.cjs → article-edit-add-page-Bje080RK.cjs} +3 -3
  4. package/dist/cjs/{article-edit-add-page-BhIbt8mY.cjs.map → article-edit-add-page-Bje080RK.cjs.map} +1 -1
  5. package/dist/cjs/{cms-settings-XOAsKe2w.cjs → cms-settings-Qdpc_nmk.cjs} +2 -2
  6. package/dist/cjs/{cms-settings-XOAsKe2w.cjs.map → cms-settings-Qdpc_nmk.cjs.map} +1 -1
  7. package/dist/cjs/{dialog-rl_frDK9.cjs → dialog-BOcxD8Ri.cjs} +2 -2
  8. package/dist/cjs/{dialog-rl_frDK9.cjs.map → dialog-BOcxD8Ri.cjs.map} +1 -1
  9. package/dist/cjs/{dialog-DYWmSX78.cjs → dialog-DD9hjDmn.cjs} +2 -2
  10. package/dist/cjs/{dialog-DYWmSX78.cjs.map → dialog-DD9hjDmn.cjs.map} +1 -1
  11. package/dist/cjs/{dialog-9t4PpBq_.cjs → dialog-aRYiTFfI.cjs} +2 -2
  12. package/dist/cjs/{dialog-9t4PpBq_.cjs.map → dialog-aRYiTFfI.cjs.map} +1 -1
  13. package/dist/cjs/{edit-YTd9VNsI.cjs → edit-BL5dngfc.cjs} +2 -2
  14. package/dist/cjs/{edit-YTd9VNsI.cjs.map → edit-BL5dngfc.cjs.map} +1 -1
  15. package/dist/cjs/{index-CALg925z.cjs → index-3lwyakW0.cjs} +2 -2
  16. package/dist/cjs/{index-CALg925z.cjs.map → index-3lwyakW0.cjs.map} +1 -1
  17. package/dist/cjs/{index-C2OOg-9r.cjs → index-63F98Jtn.cjs} +2 -2
  18. package/dist/cjs/{index-C2OOg-9r.cjs.map → index-63F98Jtn.cjs.map} +1 -1
  19. package/dist/cjs/index-B-Aeexgc.cjs +200 -0
  20. package/dist/cjs/index-B-Aeexgc.cjs.map +1 -0
  21. package/dist/cjs/{index-P7aJrY9b.cjs → index-B1VQXzw4.cjs} +79 -60
  22. package/dist/cjs/index-B1VQXzw4.cjs.map +1 -0
  23. package/dist/cjs/{index-D675maEE.cjs → index-B7ZJf5GV.cjs} +2 -2
  24. package/dist/cjs/{index-D675maEE.cjs.map → index-B7ZJf5GV.cjs.map} +1 -1
  25. package/dist/cjs/{index-BQjfBtn7.cjs → index-Ba7fImfP.cjs} +2 -2
  26. package/dist/cjs/{index-BQjfBtn7.cjs.map → index-Ba7fImfP.cjs.map} +1 -1
  27. package/dist/cjs/{index-DoAWnYyy.cjs → index-Bc2B_X5p.cjs} +2 -2
  28. package/dist/cjs/index-Bc2B_X5p.cjs.map +1 -0
  29. package/dist/cjs/{index-DrKpdqBV.cjs → index-BjyJK1r7.cjs} +3 -3
  30. package/dist/cjs/{index-DrKpdqBV.cjs.map → index-BjyJK1r7.cjs.map} +1 -1
  31. package/dist/cjs/{index-CqTnJlET.cjs → index-BolEvnXh.cjs} +2 -2
  32. package/dist/cjs/{index-CqTnJlET.cjs.map → index-BolEvnXh.cjs.map} +1 -1
  33. package/dist/cjs/{index-D9nmASDU.cjs → index-CaCUViDy.cjs} +2 -2
  34. package/dist/cjs/index-CaCUViDy.cjs.map +1 -0
  35. package/dist/cjs/{index-7G4aDLGX.cjs → index-CdtDddiW.cjs} +2 -2
  36. package/dist/cjs/{index-7G4aDLGX.cjs.map → index-CdtDddiW.cjs.map} +1 -1
  37. package/dist/cjs/{index-Ch0S2DrM.cjs → index-Cg0aBXSH.cjs} +2 -2
  38. package/dist/cjs/{index-Ch0S2DrM.cjs.map → index-Cg0aBXSH.cjs.map} +1 -1
  39. package/dist/cjs/{index-BtU3tqPr.cjs → index-Cir-kUe5.cjs} +3 -3
  40. package/dist/cjs/{index-BtU3tqPr.cjs.map → index-Cir-kUe5.cjs.map} +1 -1
  41. package/dist/cjs/{index-BGFeVpUZ.cjs → index-CjULkhHo.cjs} +2 -2
  42. package/dist/cjs/{index-BGFeVpUZ.cjs.map → index-CjULkhHo.cjs.map} +1 -1
  43. package/dist/cjs/{index-BcHCVUXJ.cjs → index-DUxljBVo.cjs} +2 -2
  44. package/dist/cjs/{index-BcHCVUXJ.cjs.map → index-DUxljBVo.cjs.map} +1 -1
  45. package/dist/cjs/{index-CvHE6ZPf.cjs → index-DWyoz9uB.cjs} +8 -10
  46. package/dist/cjs/index-DWyoz9uB.cjs.map +1 -0
  47. package/dist/cjs/{index-PPh3CcUq.cjs → index-DcyP91fA.cjs} +2 -2
  48. package/dist/cjs/{index-PPh3CcUq.cjs.map → index-DcyP91fA.cjs.map} +1 -1
  49. package/dist/cjs/{index-pzYNuMPD.cjs → index-DkGZObr_.cjs} +2 -2
  50. package/dist/cjs/{index-pzYNuMPD.cjs.map → index-DkGZObr_.cjs.map} +1 -1
  51. package/dist/cjs/{index-CbhJwIay.cjs → index-DkIRPJAw.cjs} +2 -2
  52. package/dist/cjs/{index-CbhJwIay.cjs.map → index-DkIRPJAw.cjs.map} +1 -1
  53. package/dist/cjs/{index-CN4Rj6Na.cjs → index-DrBXbJbx.cjs} +2 -2
  54. package/dist/cjs/index-DrBXbJbx.cjs.map +1 -0
  55. package/dist/cjs/{index-DF9tph7D.cjs → index-DtsfTu6t.cjs} +2 -2
  56. package/dist/cjs/{index-DF9tph7D.cjs.map → index-DtsfTu6t.cjs.map} +1 -1
  57. package/dist/cjs/{index-ChvoLKrL.cjs → index-HNgq3w7m.cjs} +2 -2
  58. package/dist/cjs/{index-ChvoLKrL.cjs.map → index-HNgq3w7m.cjs.map} +1 -1
  59. package/dist/cjs/{index-KKM-xN3u.cjs → index-MUZMUnyF.cjs} +9 -10
  60. package/dist/cjs/index-MUZMUnyF.cjs.map +1 -0
  61. package/dist/cjs/{index-DBmVCYfK.cjs → index-Oe0BUapJ.cjs} +2 -2
  62. package/dist/cjs/{index-DBmVCYfK.cjs.map → index-Oe0BUapJ.cjs.map} +1 -1
  63. package/dist/cjs/{index-BEXhwBqh.cjs → index-T1YsHAiR.cjs} +3 -3
  64. package/dist/cjs/{index-BEXhwBqh.cjs.map → index-T1YsHAiR.cjs.map} +1 -1
  65. package/dist/cjs/{index-CVvSVtzA.cjs → index-bj8-MXln.cjs} +3 -3
  66. package/dist/cjs/{index-CVvSVtzA.cjs.map → index-bj8-MXln.cjs.map} +1 -1
  67. package/dist/cjs/{index-CxONh6ck.cjs → index-g-sCVX8Y.cjs} +2 -2
  68. package/dist/cjs/{index-CxONh6ck.cjs.map → index-g-sCVX8Y.cjs.map} +1 -1
  69. package/dist/cjs/{index-VgamPuGl.cjs → index-gYJKZkJ6.cjs} +3 -3
  70. package/dist/cjs/{index-VgamPuGl.cjs.map → index-gYJKZkJ6.cjs.map} +1 -1
  71. package/dist/cjs/{index-D3yfcKl6.cjs → index-h4ZlI0EM.cjs} +2 -2
  72. package/dist/cjs/{index-D3yfcKl6.cjs.map → index-h4ZlI0EM.cjs.map} +1 -1
  73. package/dist/cjs/{index-mI3PgWZJ.cjs → index-rVOOWou_.cjs} +3 -3
  74. package/dist/cjs/{index-mI3PgWZJ.cjs.map → index-rVOOWou_.cjs.map} +1 -1
  75. package/dist/cjs/{index-BK8MnCss.cjs → index-z5P0Kaen.cjs} +2 -2
  76. package/dist/cjs/{index-BK8MnCss.cjs.map → index-z5P0Kaen.cjs.map} +1 -1
  77. package/dist/cjs/index.js +5 -5
  78. package/dist/cjs/{index.vue_vue_type_script_setup_true_lang-C8mQbE_f.cjs → index.vue_vue_type_script_setup_true_lang-C4ujB235.cjs} +2 -2
  79. package/dist/cjs/{index.vue_vue_type_script_setup_true_lang-C8mQbE_f.cjs.map → index.vue_vue_type_script_setup_true_lang-C4ujB235.cjs.map} +1 -1
  80. package/dist/cjs/{json-editor-B1Tcl8VY.cjs → json-editor-BuDPJNoi.cjs} +2 -2
  81. package/dist/cjs/{json-editor-B1Tcl8VY.cjs.map → json-editor-BuDPJNoi.cjs.map} +1 -1
  82. package/dist/cjs/{markdown-editor-BW1jNYfM.cjs → markdown-editor-VlKQ5rmm.cjs} +2 -2
  83. package/dist/cjs/{markdown-editor-BW1jNYfM.cjs.map → markdown-editor-VlKQ5rmm.cjs.map} +1 -1
  84. package/dist/cjs/{normal-Bsspj4QK.cjs → normal-162tp8x5.cjs} +2 -2
  85. package/dist/cjs/{normal-Bsspj4QK.cjs.map → normal-162tp8x5.cjs.map} +1 -1
  86. package/dist/cjs/{normal-CeD-Oud5.cjs → normal-D2713i_m.cjs} +2 -2
  87. package/dist/cjs/{normal-CeD-Oud5.cjs.map → normal-D2713i_m.cjs.map} +1 -1
  88. package/dist/cjs/{permission-manage-B6TKnw0T.cjs → permission-manage-DphCZ2al.cjs} +3 -3
  89. package/dist/cjs/{permission-manage-B6TKnw0T.cjs.map → permission-manage-DphCZ2al.cjs.map} +1 -1
  90. package/dist/cjs/{resource-select-input-FPwFgXzl.cjs → resource-select-input-iHLmmMyn.cjs} +2 -2
  91. package/dist/cjs/{resource-select-input-FPwFgXzl.cjs.map → resource-select-input-iHLmmMyn.cjs.map} +1 -1
  92. package/dist/cjs/style.css +1 -1
  93. package/dist/cjs/{table-DTn-HXFZ.cjs → table-gztffYjX.cjs} +2 -2
  94. package/dist/cjs/{table-DTn-HXFZ.cjs.map → table-gztffYjX.cjs.map} +1 -1
  95. package/dist/esm/{404-C1lIpndy.js → 404-CW_9KTBN.js} +2 -2
  96. package/dist/esm/{404-C1lIpndy.js.map → 404-CW_9KTBN.js.map} +1 -1
  97. package/dist/esm/{article-edit-add-page-ClytcmO4.js → article-edit-add-page-BxbovMjH.js} +3 -3
  98. package/dist/esm/{article-edit-add-page-ClytcmO4.js.map → article-edit-add-page-BxbovMjH.js.map} +1 -1
  99. package/dist/esm/{cms-settings-jjd73rEK.js → cms-settings-3ysZKNMa.js} +2 -2
  100. package/dist/esm/{cms-settings-jjd73rEK.js.map → cms-settings-3ysZKNMa.js.map} +1 -1
  101. package/dist/esm/{dialog-DBVAimvZ.js → dialog-CoFIYAyR.js} +2 -2
  102. package/dist/esm/{dialog-DBVAimvZ.js.map → dialog-CoFIYAyR.js.map} +1 -1
  103. package/dist/esm/{dialog-D6rgkM2v.js → dialog-DknjQoA1.js} +2 -2
  104. package/dist/esm/{dialog-D6rgkM2v.js.map → dialog-DknjQoA1.js.map} +1 -1
  105. package/dist/esm/{dialog-DwwYU6ht.js → dialog-E7M9atVV.js} +2 -2
  106. package/dist/esm/{dialog-DwwYU6ht.js.map → dialog-E7M9atVV.js.map} +1 -1
  107. package/dist/esm/{edit-o5nFwY2w.js → edit-BM-Do19m.js} +2 -2
  108. package/dist/esm/{edit-o5nFwY2w.js.map → edit-BM-Do19m.js.map} +1 -1
  109. package/dist/esm/{index-BY1xSjU9.js → index-6pZHgXtY.js} +3 -3
  110. package/dist/esm/{index-BY1xSjU9.js.map → index-6pZHgXtY.js.map} +1 -1
  111. package/dist/esm/{index-D6Z7Ujhs.js → index-B7V4NKgm.js} +2 -2
  112. package/dist/esm/{index-D6Z7Ujhs.js.map → index-B7V4NKgm.js.map} +1 -1
  113. package/dist/esm/index-BFKVNCwz.js +200 -0
  114. package/dist/esm/index-BFKVNCwz.js.map +1 -0
  115. package/dist/esm/{index-BzC8nFti.js → index-BQuQ8jEs.js} +2 -2
  116. package/dist/esm/{index-BzC8nFti.js.map → index-BQuQ8jEs.js.map} +1 -1
  117. package/dist/esm/{index-D9IagxRh.js → index-BUQ8XMhN.js} +2 -2
  118. package/dist/esm/{index-D9IagxRh.js.map → index-BUQ8XMhN.js.map} +1 -1
  119. package/dist/esm/{index-Bdpr5BhD.js → index-C2Y6k5VU.js} +2 -2
  120. package/dist/esm/{index-Bdpr5BhD.js.map → index-C2Y6k5VU.js.map} +1 -1
  121. package/dist/esm/{index-B8tP_Pku.js → index-CAmafqoX.js} +3 -3
  122. package/dist/esm/{index-B8tP_Pku.js.map → index-CAmafqoX.js.map} +1 -1
  123. package/dist/esm/{index-BuMWOrRH.js → index-CKR8AVN2.js} +3 -3
  124. package/dist/esm/{index-BuMWOrRH.js.map → index-CKR8AVN2.js.map} +1 -1
  125. package/dist/esm/{index-z5v336Rn.js → index-CZ8jfaGv.js} +3 -3
  126. package/dist/esm/{index-z5v336Rn.js.map → index-CZ8jfaGv.js.map} +1 -1
  127. package/dist/esm/{index-C2CKP0Ko.js → index-CdTUER4F.js} +2 -2
  128. package/dist/esm/{index-C2CKP0Ko.js.map → index-CdTUER4F.js.map} +1 -1
  129. package/dist/esm/{index-DknNVWIH.js → index-ClxRVkUv.js} +253 -234
  130. package/dist/esm/index-ClxRVkUv.js.map +1 -0
  131. package/dist/esm/{index-Co757Yb3.js → index-CpVtmerJ.js} +2 -2
  132. package/dist/esm/{index-Co757Yb3.js.map → index-CpVtmerJ.js.map} +1 -1
  133. package/dist/esm/{index-C58Q2T-f.js → index-CuoLNqsR.js} +2 -2
  134. package/dist/esm/{index-C58Q2T-f.js.map → index-CuoLNqsR.js.map} +1 -1
  135. package/dist/esm/{index-DvPP6Wol.js → index-Cw4Br85S.js} +2 -2
  136. package/dist/esm/index-Cw4Br85S.js.map +1 -0
  137. package/dist/esm/{index-CEIFlqQ6.js → index-D9OxO5-n.js} +2 -2
  138. package/dist/esm/{index-CEIFlqQ6.js.map → index-D9OxO5-n.js.map} +1 -1
  139. package/dist/esm/{index-Bk3DoVIM.js → index-DH4urB62.js} +2 -2
  140. package/dist/esm/{index-Bk3DoVIM.js.map → index-DH4urB62.js.map} +1 -1
  141. package/dist/esm/{index-C0OV7CMI.js → index-DNqEddef.js} +2 -2
  142. package/dist/esm/index-DNqEddef.js.map +1 -0
  143. package/dist/esm/{index-Gog2XV76.js → index-DRv4tRm_.js} +2 -2
  144. package/dist/esm/{index-Gog2XV76.js.map → index-DRv4tRm_.js.map} +1 -1
  145. package/dist/esm/{index-DBmsWB9D.js → index-DVprQ057.js} +2 -2
  146. package/dist/esm/{index-DBmsWB9D.js.map → index-DVprQ057.js.map} +1 -1
  147. package/dist/esm/{index-Cc0BSacV.js → index-D_72zZcS.js} +2 -2
  148. package/dist/esm/index-D_72zZcS.js.map +1 -0
  149. package/dist/esm/{index-D3JpAH_K.js → index-DbE9AANc.js} +2 -2
  150. package/dist/esm/{index-D3JpAH_K.js.map → index-DbE9AANc.js.map} +1 -1
  151. package/dist/esm/{index-DLTcz_Lh.js → index-Dh0Vib2I.js} +2 -2
  152. package/dist/esm/{index-DLTcz_Lh.js.map → index-Dh0Vib2I.js.map} +1 -1
  153. package/dist/esm/{index-BF7lUn1x.js → index-Dt4bQBBJ.js} +9 -10
  154. package/dist/esm/index-Dt4bQBBJ.js.map +1 -0
  155. package/dist/esm/{index-CBNDTPbG.js → index-Dtte-7PW.js} +9 -11
  156. package/dist/esm/index-Dtte-7PW.js.map +1 -0
  157. package/dist/esm/{index-fJ9vuH0d.js → index-DvMY_TAx.js} +2 -2
  158. package/dist/esm/{index-fJ9vuH0d.js.map → index-DvMY_TAx.js.map} +1 -1
  159. package/dist/esm/{index-Bg87MBB-.js → index-Dw_8CNLO.js} +2 -2
  160. package/dist/esm/{index-Bg87MBB-.js.map → index-Dw_8CNLO.js.map} +1 -1
  161. package/dist/esm/{index-B07kUUxH.js → index-Rs0Y4chB.js} +2 -2
  162. package/dist/esm/{index-B07kUUxH.js.map → index-Rs0Y4chB.js.map} +1 -1
  163. package/dist/esm/{index-CGAkIBXU.js → index-Wod-kleB.js} +3 -3
  164. package/dist/esm/{index-CGAkIBXU.js.map → index-Wod-kleB.js.map} +1 -1
  165. package/dist/esm/{index-wRgJJ7hu.js → index-ZsmNUCj7.js} +2 -2
  166. package/dist/esm/{index-wRgJJ7hu.js.map → index-ZsmNUCj7.js.map} +1 -1
  167. package/dist/esm/{index-5yHWO2PM.js → index-aRsrq1KN.js} +2 -2
  168. package/dist/esm/{index-5yHWO2PM.js.map → index-aRsrq1KN.js.map} +1 -1
  169. package/dist/esm/{index-CIfSdmY3.js → index-vHGC9cSD.js} +3 -3
  170. package/dist/esm/{index-CIfSdmY3.js.map → index-vHGC9cSD.js.map} +1 -1
  171. package/dist/esm/index.js +176 -176
  172. package/dist/esm/{index.vue_vue_type_script_setup_true_lang-JlluKuL-.js → index.vue_vue_type_script_setup_true_lang-B9tW53id.js} +2 -2
  173. package/dist/esm/{index.vue_vue_type_script_setup_true_lang-JlluKuL-.js.map → index.vue_vue_type_script_setup_true_lang-B9tW53id.js.map} +1 -1
  174. package/dist/esm/{json-editor-BT0C5D4u.js → json-editor-CQkxKSXs.js} +2 -2
  175. package/dist/esm/{json-editor-BT0C5D4u.js.map → json-editor-CQkxKSXs.js.map} +1 -1
  176. package/dist/esm/{markdown-editor-CFcH6yNx.js → markdown-editor-gKhIB3Bf.js} +2 -2
  177. package/dist/esm/{markdown-editor-CFcH6yNx.js.map → markdown-editor-gKhIB3Bf.js.map} +1 -1
  178. package/dist/esm/{normal-CT0vCPEg.js → normal-BX6dhg2W.js} +2 -2
  179. package/dist/esm/{normal-CT0vCPEg.js.map → normal-BX6dhg2W.js.map} +1 -1
  180. package/dist/esm/{normal-UXk824cE.js → normal-W9IqF1DG.js} +2 -2
  181. package/dist/esm/{normal-UXk824cE.js.map → normal-W9IqF1DG.js.map} +1 -1
  182. package/dist/esm/{permission-manage-dCLfCBD9.js → permission-manage-CGSDXzZP.js} +3 -3
  183. package/dist/esm/{permission-manage-dCLfCBD9.js.map → permission-manage-CGSDXzZP.js.map} +1 -1
  184. package/dist/esm/{resource-select-input-MU3WMOqe.js → resource-select-input-BHZ9ndaS.js} +2 -2
  185. package/dist/esm/{resource-select-input-MU3WMOqe.js.map → resource-select-input-BHZ9ndaS.js.map} +1 -1
  186. package/dist/esm/style.css +1 -1
  187. package/dist/esm/{table-GSEHVDi3.js → table-DJQh65QP.js} +2 -2
  188. package/dist/esm/{table-GSEHVDi3.js.map → table-DJQh65QP.js.map} +1 -1
  189. package/dist/types/components/data-model/data-form/components/form-detail/form-detail.vue.d.ts +39 -0
  190. package/dist/types/components/data-model/data-form/components/form-detail/index.d.ts +2 -2
  191. package/dist/types/layouts/new/ui-kit/HDialog.vue.d.ts +1 -0
  192. package/package.json +1 -1
  193. package/dist/cjs/index-CN4Rj6Na.cjs.map +0 -1
  194. package/dist/cjs/index-CvHE6ZPf.cjs.map +0 -1
  195. package/dist/cjs/index-D9nmASDU.cjs.map +0 -1
  196. package/dist/cjs/index-DoAWnYyy.cjs.map +0 -1
  197. package/dist/cjs/index-DozqAI-B.cjs +0 -167
  198. package/dist/cjs/index-DozqAI-B.cjs.map +0 -1
  199. package/dist/cjs/index-KKM-xN3u.cjs.map +0 -1
  200. package/dist/cjs/index-P7aJrY9b.cjs.map +0 -1
  201. package/dist/esm/index-BF7lUn1x.js.map +0 -1
  202. package/dist/esm/index-C0OV7CMI.js.map +0 -1
  203. package/dist/esm/index-CBNDTPbG.js.map +0 -1
  204. package/dist/esm/index-Cc0BSacV.js.map +0 -1
  205. package/dist/esm/index-Cxq2d0cF.js +0 -167
  206. package/dist/esm/index-Cxq2d0cF.js.map +0 -1
  207. package/dist/esm/index-DknNVWIH.js.map +0 -1
  208. package/dist/esm/index-DvPP6Wol.js.map +0 -1
@@ -2,7 +2,7 @@ import { defineComponent, ref, onMounted, watch, computed, resolveComponent, res
2
2
  import { ElScrollbar, ElMessageBox, ElMessage, ElButton } from "element-plus";
3
3
  import { Dialoger } from "@maketribe/dm";
4
4
  import { DvOpt } from "@maketribe/request";
5
- import { ad as MsRoleForm, q as MKSvgIcon, _ as _export_sfc, ae as MsMemberRoleTable, z as MKPageContainer, A as MKDataTable, af as MKTable, ag as MKDataTablePagination } from "./index-DknNVWIH.js";
5
+ import { ae as MsRoleForm, q as MKSvgIcon, _ as _export_sfc, af as MsMemberRoleTable, z as MKPageContainer, A as MKDataTable, ag as MKTable, ah as MKDataTablePagination } from "./index-ClxRVkUv.js";
6
6
  import "@maketribe/utils";
7
7
  import "@lexical/overflow";
8
8
  import "@lexical/text";
@@ -390,4 +390,4 @@ const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-214b
390
390
  export {
391
391
  index as default
392
392
  };
393
- //# sourceMappingURL=index-BzC8nFti.js.map
393
+ //# sourceMappingURL=index-BQuQ8jEs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BzC8nFti.js","sources":["../../src/modules/ms/pages/ms-role/components/aside.vue","../../src/modules/ms/pages/ms-role/index.vue"],"sourcesContent":["<template>\r\n <div class=\"ms-role-aside\">\r\n <div class=\"ms-role-aside__main\" v-loading=\"loading\">\r\n <ElScrollbar height=\"100%\">\r\n <div class=\"ms-role-aside__role-list\">\r\n <div\r\n v-for=\"role in roles\"\r\n class=\"ms-role-aside__role-item flex flex-justify-between\"\r\n :class=\"[role.id === currentRole?.id ? 'is-active' : '',]\"\r\n :key=\"role.id\"\r\n @click=\"handleRoleClick(role)\"\r\n >\r\n <div>\r\n <MKSvgIcon class=\"ms-role-aside__role-icon\" name=\"solar:user-bold-duotone\"/>\r\n <span class=\"ms-role-aside__role-desc\">{{ role.desc }}</span>\r\n </div>\r\n <div @click.prevent class=\"flex flex-items-center\">\r\n <ElDropdown>\r\n <span class=\"ms-role-aside__icon\">\r\n <MKSvgIcon name=\"ri:more-fill\"/>\r\n </span>\r\n\r\n <template #dropdown>\r\n <ElDropdownMenu>\r\n <ElDropdownItem :icon=\"Edit\" @click=\"handleMemberRoleEdit(role)\">\r\n 编辑\r\n </ElDropdownItem>\r\n <ElDropdownItem :icon=\"Delete\" @click=\"handleDelete(role)\">\r\n 删除\r\n </ElDropdownItem>\r\n </ElDropdownMenu>\r\n </template>\r\n </ElDropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport {onMounted, ref, Ref, watch, computed, unref} from \"vue\";\r\nimport {DvOpt} from \"@maketribe/request\";\r\nimport {Dialoger} from \"@maketribe/dm\";\r\nimport {Edit, Delete} from \"@element-plus/icons-vue\";\r\nimport {ElButton, ElMessage, ElScrollbar, ElMessageBox} from \"element-plus\";\r\nimport {MKSvgIcon} from \"../../../../../components\";\r\nimport {MsRole, MsRoleForm} from \"../../../dataviews\";\r\n\r\nconst props = defineProps({\r\n roleForm: {\r\n type: MsRoleForm,\r\n required: true,\r\n },\r\n});\r\n\r\nconst emit = defineEmits([\"role-select\"]);\r\n\r\nconst dvOpt = DvOpt.createInstance({name: \"ms-role\"});\r\n\r\nconst roles: Ref<MsRole[]> = ref([]);\r\n\r\nconst currentRole: Ref<MsRole | null> = ref(null);\r\n\r\nconst loading = ref(false);\r\n\r\nonMounted(() => {\r\n loadRoleList();\r\n});\r\n\r\nwatch(currentRole, () => {\r\n emit(\"role-select\", currentRole.value);\r\n});\r\n\r\n//asdasda\r\nwatch(\r\n computed(() => props.roleForm),\r\n (roleForm, _, onCleanup) => {\r\n const disposable = roleForm.submittedEvent.on(() => {\r\n loadRoleList();\r\n });\r\n\r\n onCleanup(() => {\r\n disposable.dispose();\r\n });\r\n },\r\n {immediate: true}\r\n);\r\n\r\nconst loadRoleList = async () => {\r\n try {\r\n loading.value = true;\r\n\r\n roles.value = await dvOpt.query().list<MsRole>();\r\n\r\n // 加载完成之后默认选中第一个\r\n if (roles.value.length) {\r\n handleRoleClick(roles.value[0])\r\n }\r\n\r\n } finally {\r\n loading.value = false;\r\n }\r\n};\r\n\r\nconst handleMemberRoleEdit = (role: MsRole) => {\r\n Dialoger.dataFormDialog({\r\n dataForm: props.roleForm,\r\n recId: role.id,\r\n });\r\n};\r\n\r\nconst handleRoleClick = (role: MsRole) => {\r\n currentRole.value = role;\r\n};\r\n\r\n\r\nconst handleDelete = async (role: MsRole) => {\r\n const isConfirm = await ElMessageBox.confirm(\"是否确认删除\", {\r\n type: \"warning\",\r\n }).then(\r\n () => true,\r\n () => false\r\n );\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n\r\n try {\r\n const result = await dvOpt.delete(role.id);\r\n\r\n if (result.code !== 200) {\r\n ElMessage.error({message: result.msg});\r\n return;\r\n }\r\n\r\n ElMessage.success({message: \"删除成功\"});\r\n\r\n if (unref(currentRole)?.id === role.id) {\r\n currentRole.value = null;\r\n }\r\n\r\n loadRoleList();\r\n } catch (e) {\r\n console.error(e);\r\n ElMessage.error({message: \"网络异常\"});\r\n }\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.ms-role-aside {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n\r\n &__main {\r\n height: 0;\r\n flex: 1;\r\n }\r\n\r\n &__role {\r\n &-icon {\r\n margin-right: 8px;\r\n font-size: 16px;\r\n }\r\n &-item+&-item {\r\n margin-top: 5px;\r\n }\r\n &-item {\r\n display: flex;\r\n align-items: center;\r\n height: 36px;\r\n padding: 5px 10px;\r\n line-height: 36px;\r\n border-radius: 5px;\r\n cursor: pointer;\r\n\r\n &.is-active,\r\n &:hover {\r\n background-color: #f4f4f4;\r\n }\r\n\r\n .ms-role-aside__icon {\r\n display: none;\r\n border-radius: 3px;\r\n font-size: 14px;\r\n\r\n &:hover {\r\n background-color: #f4f4f4;\r\n }\r\n }\r\n\r\n &:hover {\r\n .ms-role-aside__icon {\r\n padding: 5px;\r\n display: inline-flex;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <MKPageContainer class=\"ms-role\">\r\n <el-page-header style=\"background-color: #fff;padding: 10px;\" :icon=\"null\">\r\n <template #title>\r\n <h3 style=\"color: var(--el-text-color-regular);\" flex=\"~ items-center\" m=\"l-[10px]\">\r\n <MKSvgIcon name=\"oui:app-users-roles\" style=\"margin-right: 5px;\"/>\r\n 角色管理\r\n </h3>\r\n </template>\r\n <template #extra>\r\n <el-button type=\"primary\" text @click=\"handleAddRoleClick\" style=\"margin-right: 10px;\">\r\n <MKSvgIcon name=\"carbon:add-filled\" style=\"margin-right: 5px;\"/>\r\n 添加角色\r\n </el-button>\r\n </template>\r\n </el-page-header>\r\n <div class=\"ms-role__body-warp\">\r\n <div class=\"ms-role__aside\">\r\n <RoleAside\r\n @role-select=\"handleRoleSelect\"\r\n :role-form=\"roleForm\"\r\n ref=\"RoleAsideEl\"\r\n />\r\n </div>\r\n <div class=\"ms-role__main\">\r\n <div class=\"ms-role__content\" v-if=\"currentRole\">\r\n <div class=\"flex flex-justify-between\">\r\n <div class=\"ms-role__title\" flex=\"~ items-center\">\r\n <MKSvgIcon class=\"ms-role-aside__role-icon\" name=\"oui:app-users-roles\" m=\"r-[10px]\"/>\r\n {{ currentRole.desc }}\r\n </div>\r\n <div class=\"ms-role__tools\">\r\n <ElButton type=\"primary\" text @click=\"handlePermissionEdit\">\r\n <template #icon>\r\n <MKSvgIcon name=\"material-symbols-light:vpn-key-outline\"/>\r\n </template>\r\n 权限设置\r\n </ElButton>\r\n <ElButton type=\"primary\" @click=\"handleSelectUserClick\">\r\n <template #icon>\r\n <MKSvgIcon name=\"carbon:add-filled\"/>\r\n </template>\r\n 添加成员\r\n </ElButton>\r\n <ElButton\r\n :disabled=\"disabledBatchDelete\"\r\n @click=\"handleBatchDelete\"\r\n >\r\n 批量删除\r\n </ElButton>\r\n </div>\r\n </div>\r\n <MKDataTable :data-table=\"memberRoleTable\">\r\n <MKTable/>\r\n <MKDataTablePagination/>\r\n </MKDataTable>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <ElDialog v-model=\"isShowPermissionDialog\" appendToBody width=\"80%\">-->\r\n <!-- <MKRolePermissionConfig :rolePermissionConfigTable=\"rolePermissionConfigTable\"/>-->\r\n <!-- </ElDialog>-->\r\n </MKPageContainer>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport {\r\n reactive,\r\n Ref,\r\n ref,\r\n watch,\r\n unref,\r\n computed,\r\n onBeforeUnmount,\r\n} from \"vue\";\r\nimport {ElButton, ElMessage, ElMessageBox} from \"element-plus\";\r\nimport {Dialoger} from \"@maketribe/dm\";\r\nimport {DvOpt} from \"@maketribe/request\";\r\nimport {MKDataTable, MKPageContainer, MKSvgIcon, MKTable, MKDataTablePagination} from \"../../../../components\";\r\nimport {MsRole, MsMemberRoleTable, MsRoleForm} from \"../../dataviews\";\r\nimport RoleAside from \"./components/aside.vue\";\r\n\r\nconst router = useRouter();\r\n\r\nconst dvOpt = DvOpt.createInstance({name: \"ms-member-role\"});\r\n\r\nconst currentRole: Ref<MsRole | null> = ref(null);\r\n\r\nconst memberRoleTable = reactive(new MsMemberRoleTable()) as MsMemberRoleTable;\r\n\r\nconst roleForm = reactive(new MsRoleForm()) as MsRoleForm;\r\n\r\nconst disabledBatchDelete = computed(\r\n () => memberRoleTable.getSelection().length === 0\r\n);\r\n\r\nwatch(currentRole, (currentRole) => {\r\n memberRoleTable.setCurrentRole(currentRole);\r\n});\r\n\r\nonBeforeUnmount(() => {\r\n memberRoleTable.dispose();\r\n roleForm.dispose();\r\n});\r\n\r\nconst handleAddRoleClick = () => {\r\n Dialoger.dataFormDialog({\r\n dataForm: roleForm\r\n });\r\n};\r\n\r\nconst handleRoleSelect = (role: MsRole) => {\r\n currentRole.value = role;\r\n};\r\n\r\nconst handleSelectUserClick = async () => {\r\n const selectResult = await Dialoger.dataTableSelectDialog(\r\n memberRoleTable.memberTable\r\n );\r\n\r\n if (!selectResult.isConfirm) {\r\n return;\r\n }\r\n\r\n const roleId = unref(currentRole)!.id;\r\n\r\n const memberRoleList = selectResult.selections.map((item) => ({\r\n roleId,\r\n memberId: item,\r\n }));\r\n\r\n try {\r\n const result = await dvOpt.batchSave(memberRoleList);\r\n\r\n if (result.code !== 200) {\r\n ElMessage.error({message: result.msg});\r\n return;\r\n }\r\n\r\n ElMessage.success({message: \"添加成功\"});\r\n\r\n memberRoleTable.load();\r\n } catch (e) {\r\n console.error(e);\r\n\r\n ElMessage.error({message: \"网络异常\"});\r\n }\r\n};\r\n\r\nconst handleBatchDelete = async () => {\r\n const isConfirm = await ElMessageBox.confirm(\"是否确认删除\", {\r\n type: \"warning\",\r\n }).then(\r\n () => true,\r\n () => false\r\n );\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n\r\n try {\r\n const result = await dvOpt.batchDelete(memberRoleTable.getSelection());\r\n\r\n if (result.code !== 200) {\r\n ElMessage.error({message: result.msg});\r\n return;\r\n }\r\n\r\n ElMessage.success({message: \"删除成功\"});\r\n memberRoleTable.load();\r\n } catch (e) {\r\n console.error(e);\r\n ElMessage.error({message: \"网络异常\"});\r\n }\r\n};\r\n\r\nconst handlePermissionEdit = () => {\r\n router.push({name: \"dv/ms-role/permission\", params: {id: unref(currentRole)?.id}})\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.ms-role {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n padding: 0px;\r\n\r\n &__body-warp {\r\n padding: 10px;\r\n display: flex;\r\n height: 100%;\r\n overflow: hidden;\r\n }\r\n\r\n &__aside {\r\n background-color: #fff;\r\n padding: 10px;\r\n max-width: 360px;\r\n min-width: 220px;\r\n margin-right: 10px;\r\n }\r\n\r\n &__main {\r\n width: 0;\r\n flex: 1;\r\n\r\n .mk-data-table {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n\r\n .el-table {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n }\r\n\r\n &__content {\r\n display: flex;\r\n flex-direction: column;\r\n padding: 12px;\r\n width: 100%;\r\n height: 100%;\r\n box-sizing: border-box;\r\n background-color: #fff;\r\n }\r\n\r\n &__title {\r\n font-size: 18px;\r\n font-weight: 600;\r\n margin: 10px 0;\r\n }\r\n\r\n &__tools {\r\n margin: 10px 0;\r\n display: flex;\r\n justify-content: flex-end;\r\n }\r\n}\r\n\r\n</style>\r\n"],"names":["currentRole"],"mappings":"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"}
1
+ {"version":3,"file":"index-BQuQ8jEs.js","sources":["../../src/modules/ms/pages/ms-role/components/aside.vue","../../src/modules/ms/pages/ms-role/index.vue"],"sourcesContent":["<template>\r\n <div class=\"ms-role-aside\">\r\n <div class=\"ms-role-aside__main\" v-loading=\"loading\">\r\n <ElScrollbar height=\"100%\">\r\n <div class=\"ms-role-aside__role-list\">\r\n <div\r\n v-for=\"role in roles\"\r\n class=\"ms-role-aside__role-item flex flex-justify-between\"\r\n :class=\"[role.id === currentRole?.id ? 'is-active' : '',]\"\r\n :key=\"role.id\"\r\n @click=\"handleRoleClick(role)\"\r\n >\r\n <div>\r\n <MKSvgIcon class=\"ms-role-aside__role-icon\" name=\"solar:user-bold-duotone\"/>\r\n <span class=\"ms-role-aside__role-desc\">{{ role.desc }}</span>\r\n </div>\r\n <div @click.prevent class=\"flex flex-items-center\">\r\n <ElDropdown>\r\n <span class=\"ms-role-aside__icon\">\r\n <MKSvgIcon name=\"ri:more-fill\"/>\r\n </span>\r\n\r\n <template #dropdown>\r\n <ElDropdownMenu>\r\n <ElDropdownItem :icon=\"Edit\" @click=\"handleMemberRoleEdit(role)\">\r\n 编辑\r\n </ElDropdownItem>\r\n <ElDropdownItem :icon=\"Delete\" @click=\"handleDelete(role)\">\r\n 删除\r\n </ElDropdownItem>\r\n </ElDropdownMenu>\r\n </template>\r\n </ElDropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport {onMounted, ref, Ref, watch, computed, unref} from \"vue\";\r\nimport {DvOpt} from \"@maketribe/request\";\r\nimport {Dialoger} from \"@maketribe/dm\";\r\nimport {Edit, Delete} from \"@element-plus/icons-vue\";\r\nimport {ElButton, ElMessage, ElScrollbar, ElMessageBox} from \"element-plus\";\r\nimport {MKSvgIcon} from \"../../../../../components\";\r\nimport {MsRole, MsRoleForm} from \"../../../dataviews\";\r\n\r\nconst props = defineProps({\r\n roleForm: {\r\n type: MsRoleForm,\r\n required: true,\r\n },\r\n});\r\n\r\nconst emit = defineEmits([\"role-select\"]);\r\n\r\nconst dvOpt = DvOpt.createInstance({name: \"ms-role\"});\r\n\r\nconst roles: Ref<MsRole[]> = ref([]);\r\n\r\nconst currentRole: Ref<MsRole | null> = ref(null);\r\n\r\nconst loading = ref(false);\r\n\r\nonMounted(() => {\r\n loadRoleList();\r\n});\r\n\r\nwatch(currentRole, () => {\r\n emit(\"role-select\", currentRole.value);\r\n});\r\n\r\n//asdasda\r\nwatch(\r\n computed(() => props.roleForm),\r\n (roleForm, _, onCleanup) => {\r\n const disposable = roleForm.submittedEvent.on(() => {\r\n loadRoleList();\r\n });\r\n\r\n onCleanup(() => {\r\n disposable.dispose();\r\n });\r\n },\r\n {immediate: true}\r\n);\r\n\r\nconst loadRoleList = async () => {\r\n try {\r\n loading.value = true;\r\n\r\n roles.value = await dvOpt.query().list<MsRole>();\r\n\r\n // 加载完成之后默认选中第一个\r\n if (roles.value.length) {\r\n handleRoleClick(roles.value[0])\r\n }\r\n\r\n } finally {\r\n loading.value = false;\r\n }\r\n};\r\n\r\nconst handleMemberRoleEdit = (role: MsRole) => {\r\n Dialoger.dataFormDialog({\r\n dataForm: props.roleForm,\r\n recId: role.id,\r\n });\r\n};\r\n\r\nconst handleRoleClick = (role: MsRole) => {\r\n currentRole.value = role;\r\n};\r\n\r\n\r\nconst handleDelete = async (role: MsRole) => {\r\n const isConfirm = await ElMessageBox.confirm(\"是否确认删除\", {\r\n type: \"warning\",\r\n }).then(\r\n () => true,\r\n () => false\r\n );\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n\r\n try {\r\n const result = await dvOpt.delete(role.id);\r\n\r\n if (result.code !== 200) {\r\n ElMessage.error({message: result.msg});\r\n return;\r\n }\r\n\r\n ElMessage.success({message: \"删除成功\"});\r\n\r\n if (unref(currentRole)?.id === role.id) {\r\n currentRole.value = null;\r\n }\r\n\r\n loadRoleList();\r\n } catch (e) {\r\n console.error(e);\r\n ElMessage.error({message: \"网络异常\"});\r\n }\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.ms-role-aside {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n\r\n &__main {\r\n height: 0;\r\n flex: 1;\r\n }\r\n\r\n &__role {\r\n &-icon {\r\n margin-right: 8px;\r\n font-size: 16px;\r\n }\r\n &-item+&-item {\r\n margin-top: 5px;\r\n }\r\n &-item {\r\n display: flex;\r\n align-items: center;\r\n height: 36px;\r\n padding: 5px 10px;\r\n line-height: 36px;\r\n border-radius: 5px;\r\n cursor: pointer;\r\n\r\n &.is-active,\r\n &:hover {\r\n background-color: #f4f4f4;\r\n }\r\n\r\n .ms-role-aside__icon {\r\n display: none;\r\n border-radius: 3px;\r\n font-size: 14px;\r\n\r\n &:hover {\r\n background-color: #f4f4f4;\r\n }\r\n }\r\n\r\n &:hover {\r\n .ms-role-aside__icon {\r\n padding: 5px;\r\n display: inline-flex;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <MKPageContainer class=\"ms-role\">\r\n <el-page-header style=\"background-color: #fff;padding: 10px;\" :icon=\"null\">\r\n <template #title>\r\n <h3 style=\"color: var(--el-text-color-regular);\" flex=\"~ items-center\" m=\"l-[10px]\">\r\n <MKSvgIcon name=\"oui:app-users-roles\" style=\"margin-right: 5px;\"/>\r\n 角色管理\r\n </h3>\r\n </template>\r\n <template #extra>\r\n <el-button type=\"primary\" text @click=\"handleAddRoleClick\" style=\"margin-right: 10px;\">\r\n <MKSvgIcon name=\"carbon:add-filled\" style=\"margin-right: 5px;\"/>\r\n 添加角色\r\n </el-button>\r\n </template>\r\n </el-page-header>\r\n <div class=\"ms-role__body-warp\">\r\n <div class=\"ms-role__aside\">\r\n <RoleAside\r\n @role-select=\"handleRoleSelect\"\r\n :role-form=\"roleForm\"\r\n ref=\"RoleAsideEl\"\r\n />\r\n </div>\r\n <div class=\"ms-role__main\">\r\n <div class=\"ms-role__content\" v-if=\"currentRole\">\r\n <div class=\"flex flex-justify-between\">\r\n <div class=\"ms-role__title\" flex=\"~ items-center\">\r\n <MKSvgIcon class=\"ms-role-aside__role-icon\" name=\"oui:app-users-roles\" m=\"r-[10px]\"/>\r\n {{ currentRole.desc }}\r\n </div>\r\n <div class=\"ms-role__tools\">\r\n <ElButton type=\"primary\" text @click=\"handlePermissionEdit\">\r\n <template #icon>\r\n <MKSvgIcon name=\"material-symbols-light:vpn-key-outline\"/>\r\n </template>\r\n 权限设置\r\n </ElButton>\r\n <ElButton type=\"primary\" @click=\"handleSelectUserClick\">\r\n <template #icon>\r\n <MKSvgIcon name=\"carbon:add-filled\"/>\r\n </template>\r\n 添加成员\r\n </ElButton>\r\n <ElButton\r\n :disabled=\"disabledBatchDelete\"\r\n @click=\"handleBatchDelete\"\r\n >\r\n 批量删除\r\n </ElButton>\r\n </div>\r\n </div>\r\n <MKDataTable :data-table=\"memberRoleTable\">\r\n <MKTable/>\r\n <MKDataTablePagination/>\r\n </MKDataTable>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <ElDialog v-model=\"isShowPermissionDialog\" appendToBody width=\"80%\">-->\r\n <!-- <MKRolePermissionConfig :rolePermissionConfigTable=\"rolePermissionConfigTable\"/>-->\r\n <!-- </ElDialog>-->\r\n </MKPageContainer>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport {\r\n reactive,\r\n Ref,\r\n ref,\r\n watch,\r\n unref,\r\n computed,\r\n onBeforeUnmount,\r\n} from \"vue\";\r\nimport {ElButton, ElMessage, ElMessageBox} from \"element-plus\";\r\nimport {Dialoger} from \"@maketribe/dm\";\r\nimport {DvOpt} from \"@maketribe/request\";\r\nimport {MKDataTable, MKPageContainer, MKSvgIcon, MKTable, MKDataTablePagination} from \"../../../../components\";\r\nimport {MsRole, MsMemberRoleTable, MsRoleForm} from \"../../dataviews\";\r\nimport RoleAside from \"./components/aside.vue\";\r\n\r\nconst router = useRouter();\r\n\r\nconst dvOpt = DvOpt.createInstance({name: \"ms-member-role\"});\r\n\r\nconst currentRole: Ref<MsRole | null> = ref(null);\r\n\r\nconst memberRoleTable = reactive(new MsMemberRoleTable()) as MsMemberRoleTable;\r\n\r\nconst roleForm = reactive(new MsRoleForm()) as MsRoleForm;\r\n\r\nconst disabledBatchDelete = computed(\r\n () => memberRoleTable.getSelection().length === 0\r\n);\r\n\r\nwatch(currentRole, (currentRole) => {\r\n memberRoleTable.setCurrentRole(currentRole);\r\n});\r\n\r\nonBeforeUnmount(() => {\r\n memberRoleTable.dispose();\r\n roleForm.dispose();\r\n});\r\n\r\nconst handleAddRoleClick = () => {\r\n Dialoger.dataFormDialog({\r\n dataForm: roleForm\r\n });\r\n};\r\n\r\nconst handleRoleSelect = (role: MsRole) => {\r\n currentRole.value = role;\r\n};\r\n\r\nconst handleSelectUserClick = async () => {\r\n const selectResult = await Dialoger.dataTableSelectDialog(\r\n memberRoleTable.memberTable\r\n );\r\n\r\n if (!selectResult.isConfirm) {\r\n return;\r\n }\r\n\r\n const roleId = unref(currentRole)!.id;\r\n\r\n const memberRoleList = selectResult.selections.map((item) => ({\r\n roleId,\r\n memberId: item,\r\n }));\r\n\r\n try {\r\n const result = await dvOpt.batchSave(memberRoleList);\r\n\r\n if (result.code !== 200) {\r\n ElMessage.error({message: result.msg});\r\n return;\r\n }\r\n\r\n ElMessage.success({message: \"添加成功\"});\r\n\r\n memberRoleTable.load();\r\n } catch (e) {\r\n console.error(e);\r\n\r\n ElMessage.error({message: \"网络异常\"});\r\n }\r\n};\r\n\r\nconst handleBatchDelete = async () => {\r\n const isConfirm = await ElMessageBox.confirm(\"是否确认删除\", {\r\n type: \"warning\",\r\n }).then(\r\n () => true,\r\n () => false\r\n );\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n\r\n try {\r\n const result = await dvOpt.batchDelete(memberRoleTable.getSelection());\r\n\r\n if (result.code !== 200) {\r\n ElMessage.error({message: result.msg});\r\n return;\r\n }\r\n\r\n ElMessage.success({message: \"删除成功\"});\r\n memberRoleTable.load();\r\n } catch (e) {\r\n console.error(e);\r\n ElMessage.error({message: \"网络异常\"});\r\n }\r\n};\r\n\r\nconst handlePermissionEdit = () => {\r\n router.push({name: \"dv/ms-role/permission\", params: {id: unref(currentRole)?.id}})\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.ms-role {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n padding: 0px;\r\n\r\n &__body-warp {\r\n padding: 10px;\r\n display: flex;\r\n height: 100%;\r\n overflow: hidden;\r\n }\r\n\r\n &__aside {\r\n background-color: #fff;\r\n padding: 10px;\r\n max-width: 360px;\r\n min-width: 220px;\r\n margin-right: 10px;\r\n }\r\n\r\n &__main {\r\n width: 0;\r\n flex: 1;\r\n\r\n .mk-data-table {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n\r\n .el-table {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n }\r\n\r\n &__content {\r\n display: flex;\r\n flex-direction: column;\r\n padding: 12px;\r\n width: 100%;\r\n height: 100%;\r\n box-sizing: border-box;\r\n background-color: #fff;\r\n }\r\n\r\n &__title {\r\n font-size: 18px;\r\n font-weight: 600;\r\n margin: 10px 0;\r\n }\r\n\r\n &__tools {\r\n margin: 10px 0;\r\n display: flex;\r\n justify-content: flex-end;\r\n }\r\n}\r\n\r\n</style>\r\n"],"names":["currentRole"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,UAAM,QAAQ;AAOd,UAAM,OAAO;AAEb,UAAM,QAAQ,MAAM,eAAe,EAAC,MAAM,WAAU;AAE9C,UAAA,QAAuB,IAAI,CAAA,CAAE;AAE7B,UAAA,cAAkC,IAAI,IAAI;AAE1C,UAAA,UAAU,IAAI,KAAK;AAEzB,cAAU,MAAM;AACD;IAAA,CACd;AAED,UAAM,aAAa,MAAM;AAClB,WAAA,eAAe,YAAY,KAAK;AAAA,IAAA,CACtC;AAGD;AAAA,MACE,SAAS,MAAM,MAAM,QAAQ;AAAA,MAC7B,CAAC,UAAU,GAAG,cAAc;AAC1B,cAAM,aAAa,SAAS,eAAe,GAAG,MAAM;AACrC;QAAA,CACd;AAED,kBAAU,MAAM;AACd,qBAAW,QAAQ;AAAA,QAAA,CACpB;AAAA,MACH;AAAA,MACA,EAAC,WAAW,KAAI;AAAA,IAAA;AAGlB,UAAM,eAAe,YAAY;AAC3B,UAAA;AACF,gBAAQ,QAAQ;AAEhB,cAAM,QAAQ,MAAM,MAAM,QAAQ,KAAa;AAG3C,YAAA,MAAM,MAAM,QAAQ;AACN,0BAAA,MAAM,MAAM,CAAC,CAAC;AAAA,QAChC;AAAA,MAAA,UAEA;AACA,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA;AAGI,UAAA,uBAAuB,CAAC,SAAiB;AAC7C,eAAS,eAAe;AAAA,QACtB,UAAU,MAAM;AAAA,QAChB,OAAO,KAAK;AAAA,MAAA,CACb;AAAA,IAAA;AAGG,UAAA,kBAAkB,CAAC,SAAiB;AACxC,kBAAY,QAAQ;AAAA,IAAA;AAIhB,UAAA,eAAe,OAAO,SAAiB;;AAC3C,YAAM,YAAY,MAAM,aAAa,QAAQ,UAAU;AAAA,QACrD,MAAM;AAAA,MACP,CAAA,EAAE;AAAA,QACD,MAAM;AAAA,QACN,MAAM;AAAA,MAAA;AAGR,UAAI,CAAC,WAAW;AACd;AAAA,MACF;AAEI,UAAA;AACF,cAAM,SAAS,MAAM,MAAM,OAAO,KAAK,EAAE;AAErC,YAAA,OAAO,SAAS,KAAK;AACvB,oBAAU,MAAM,EAAC,SAAS,OAAO,IAAI,CAAA;AACrC;AAAA,QACF;AAEA,kBAAU,QAAQ,EAAC,SAAS,OAAO,CAAA;AAEnC,cAAI,WAAM,WAAW,MAAjB,mBAAoB,QAAO,KAAK,IAAI;AACtC,sBAAY,QAAQ;AAAA,QACtB;AAEa;eACN,GAAG;AACV,gBAAQ,MAAM,CAAC;AACf,kBAAU,MAAM,EAAC,SAAS,OAAO,CAAA;AAAA,MACnC;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnEF,UAAM,SAAS;AAEf,UAAM,QAAQ,MAAM,eAAe,EAAC,MAAM,kBAAiB;AAErD,UAAA,cAAkC,IAAI,IAAI;AAEhD,UAAM,kBAAkB,SAAS,IAAI,kBAAmB,CAAA;AAExD,UAAM,WAAW,SAAS,IAAI,WAAY,CAAA;AAE1C,UAAM,sBAAsB;AAAA,MAC1B,MAAM,gBAAgB,eAAe,WAAW;AAAA,IAAA;AAG5C,UAAA,aAAa,CAACA,iBAAgB;AAClC,sBAAgB,eAAeA,YAAW;AAAA,IAAA,CAC3C;AAED,oBAAgB,MAAM;AACpB,sBAAgB,QAAQ;AACxB,eAAS,QAAQ;AAAA,IAAA,CAClB;AAED,UAAM,qBAAqB,MAAM;AAC/B,eAAS,eAAe;AAAA,QACtB,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAGG,UAAA,mBAAmB,CAAC,SAAiB;AACzC,kBAAY,QAAQ;AAAA,IAAA;AAGtB,UAAM,wBAAwB,YAAY;AAClC,YAAA,eAAe,MAAM,SAAS;AAAA,QAClC,gBAAgB;AAAA,MAAA;AAGd,UAAA,CAAC,aAAa,WAAW;AAC3B;AAAA,MACF;AAEM,YAAA,SAAS,MAAM,WAAW,EAAG;AAEnC,YAAM,iBAAiB,aAAa,WAAW,IAAI,CAAC,UAAU;AAAA,QAC5D;AAAA,QACA,UAAU;AAAA,MACV,EAAA;AAEE,UAAA;AACF,cAAM,SAAS,MAAM,MAAM,UAAU,cAAc;AAE/C,YAAA,OAAO,SAAS,KAAK;AACvB,oBAAU,MAAM,EAAC,SAAS,OAAO,IAAI,CAAA;AACrC;AAAA,QACF;AAEA,kBAAU,QAAQ,EAAC,SAAS,OAAO,CAAA;AAEnC,wBAAgB,KAAK;AAAA,eACd,GAAG;AACV,gBAAQ,MAAM,CAAC;AAEf,kBAAU,MAAM,EAAC,SAAS,OAAO,CAAA;AAAA,MACnC;AAAA,IAAA;AAGF,UAAM,oBAAoB,YAAY;AACpC,YAAM,YAAY,MAAM,aAAa,QAAQ,UAAU;AAAA,QACrD,MAAM;AAAA,MACP,CAAA,EAAE;AAAA,QACD,MAAM;AAAA,QACN,MAAM;AAAA,MAAA;AAGR,UAAI,CAAC,WAAW;AACd;AAAA,MACF;AAEI,UAAA;AACF,cAAM,SAAS,MAAM,MAAM,YAAY,gBAAgB,cAAc;AAEjE,YAAA,OAAO,SAAS,KAAK;AACvB,oBAAU,MAAM,EAAC,SAAS,OAAO,IAAI,CAAA;AACrC;AAAA,QACF;AAEA,kBAAU,QAAQ,EAAC,SAAS,OAAO,CAAA;AACnC,wBAAgB,KAAK;AAAA,eACd,GAAG;AACV,gBAAQ,MAAM,CAAC;AACf,kBAAU,MAAM,EAAC,SAAS,OAAO,CAAA;AAAA,MACnC;AAAA,IAAA;AAGF,UAAM,uBAAuB,MAAM;;AACjC,aAAO,KAAK,EAAC,MAAM,yBAAyB,QAAQ,EAAC,KAAI,WAAM,WAAW,MAAjB,mBAAoB,GAAE,EAAE,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, createVNode, mergeProps, unref } from "vue";
2
2
  import { dayjs } from "element-plus";
3
- import { columnTextProps, MKColumnText } from "./index-CEIFlqQ6.js";
3
+ import { columnTextProps, MKColumnText } from "./index-D9OxO5-n.js";
4
4
  import { buildProps } from "@maketribe/utils";
5
5
  const dateTypes = ["date", "year", "month", "datetime"];
6
6
  const columnDateProps = buildProps({
@@ -51,4 +51,4 @@ export {
51
51
  dateTypes,
52
52
  MKColumnDate as default
53
53
  };
54
- //# sourceMappingURL=index-D9IagxRh.js.map
54
+ //# sourceMappingURL=index-BUQ8XMhN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-D9IagxRh.js","sources":["../../src/components/data-model/data-table/components/column-date/column-date-options.ts","../../src/components/data-model/data-table/components/column-date/column-date.tsx","../../src/components/data-model/data-table/components/column-date/index.ts"],"sourcesContent":["import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { columnTextProps } from \"../column-text\";\r\n\r\nexport const dateTypes = [\"date\", \"year\", \"month\", \"datetime\"] as const;\r\n\r\nexport const columnDateProps = buildProps({\r\n ...columnTextProps,\r\n type: { default: \"date\", values: dateTypes },\r\n});\r\n\r\nexport type ColumnDateProps = ExtractPropTypes<typeof columnDateProps>;\r\n","import { computed, defineComponent, unref } from \"vue\";\nimport { dayjs } from \"element-plus\";\n\nimport { MKColumnText } from \"../column-text\";\nimport { columnDateProps } from \"./column-date-options\";\n\nexport default defineComponent({\n name: \"MKColumnDate\",\n props: columnDateProps,\n setup(props) {\n const columnTextProps = computed(() => {\n const { type, ...columnTextProps } = props;\n return columnTextProps;\n });\n\n const type = computed(() => props.type);\n\n const formatValue = (value: string) => {\n const dayInstance = dayjs(value ?? null);\n\n if (!dayInstance.isValid()) {\n return;\n }\n\n switch (unref(type)) {\n case \"datetime\":\n return dayInstance.format(\"YYYY-MM-DD HH:mm:ss\");\n case \"date\":\n return dayInstance.format(\"YYYY-MM-DD\");\n case \"month\":\n return dayInstance.format(\"YYYY-MM\");\n case \"year\":\n return dayInstance.format(\"YYYY\");\n default:\n return props.formatValue(value);\n }\n };\n\n return () => {\n return (\n <MKColumnText {...unref(columnTextProps)} formatValue={formatValue} />\n );\n };\n },\n});\n","import ColumnDate from \"./column-date\";\r\n\r\nexport const MKColumnDate = ColumnDate;\r\nexport default MKColumnDate;\r\n\r\nexport * from \"./column-date-options\";\r\n"],"names":["defineComponent","name","props","columnDateProps","setup","columnTextProps","computed","type","formatValue","value","dayInstance","dayjs","isValid","unref","format","_createVNode","MKColumnText","_mergeProps"],"mappings":";;;;AAIO,MAAM,YAAY,CAAC,QAAQ,QAAQ,SAAS,UAAU;AAEtD,MAAM,kBAAkB,WAAW;AAAA,EACxC,GAAG;AAAA,EACH,MAAM,EAAE,SAAS,QAAQ,QAAQ,UAAU;AAC7C,CAAC;ACHD,MAAeA,6CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOC;AAAAA,EACPC,MAAMF,OAAO;AACX,UAAMG,mBAAkBC,SAAS,MAAM;AACrC,YAAM;AAAA,QAAEC,MAAAA;AAAAA,QAAM,GAAGF;AAAAA,MAAiB,IAAGH;AACrC,aAAOG;AAAAA,IACT,CAAC;AAED,UAAME,OAAOD,SAAS,MAAMJ,MAAMK,IAAI;AAEtC,UAAMC,cAAeC,WAAkB;AACrC,YAAMC,cAAcC,MAAMF,SAAS,IAAI;AAEvC,UAAI,CAACC,YAAYE,WAAW;AAC1B;AAAA,MACF;AAEA,cAAQC,MAAMN,IAAI,GAAC;AAAA,QACjB,KAAK;AACH,iBAAOG,YAAYI,OAAO,qBAAqB;AAAA,QACjD,KAAK;AACH,iBAAOJ,YAAYI,OAAO,YAAY;AAAA,QACxC,KAAK;AACH,iBAAOJ,YAAYI,OAAO,SAAS;AAAA,QACrC,KAAK;AACH,iBAAOJ,YAAYI,OAAO,MAAM;AAAA,QAClC;AACE,iBAAOZ,MAAMM,YAAYC,KAAK;AAAA,MAClC;AAAA;AAGF,WAAO,MAAM;AACX,aAAAM,YAAAC,cAAAC,WACoBJ,MAAMR,gBAAe,GAAC;AAAA,QAAA,eAAeG;AAAAA,MAAW,CAAA,GAAA,IAAA;AAAA;EAGxE;AACF,CAAC;AC1CM,MAAM,eAAe;"}
1
+ {"version":3,"file":"index-BUQ8XMhN.js","sources":["../../src/components/data-model/data-table/components/column-date/column-date-options.ts","../../src/components/data-model/data-table/components/column-date/column-date.tsx","../../src/components/data-model/data-table/components/column-date/index.ts"],"sourcesContent":["import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { columnTextProps } from \"../column-text\";\r\n\r\nexport const dateTypes = [\"date\", \"year\", \"month\", \"datetime\"] as const;\r\n\r\nexport const columnDateProps = buildProps({\r\n ...columnTextProps,\r\n type: { default: \"date\", values: dateTypes },\r\n});\r\n\r\nexport type ColumnDateProps = ExtractPropTypes<typeof columnDateProps>;\r\n","import { computed, defineComponent, unref } from \"vue\";\nimport { dayjs } from \"element-plus\";\n\nimport { MKColumnText } from \"../column-text\";\nimport { columnDateProps } from \"./column-date-options\";\n\nexport default defineComponent({\n name: \"MKColumnDate\",\n props: columnDateProps,\n setup(props) {\n const columnTextProps = computed(() => {\n const { type, ...columnTextProps } = props;\n return columnTextProps;\n });\n\n const type = computed(() => props.type);\n\n const formatValue = (value: string) => {\n const dayInstance = dayjs(value ?? null);\n\n if (!dayInstance.isValid()) {\n return;\n }\n\n switch (unref(type)) {\n case \"datetime\":\n return dayInstance.format(\"YYYY-MM-DD HH:mm:ss\");\n case \"date\":\n return dayInstance.format(\"YYYY-MM-DD\");\n case \"month\":\n return dayInstance.format(\"YYYY-MM\");\n case \"year\":\n return dayInstance.format(\"YYYY\");\n default:\n return props.formatValue(value);\n }\n };\n\n return () => {\n return (\n <MKColumnText {...unref(columnTextProps)} formatValue={formatValue} />\n );\n };\n },\n});\n","import ColumnDate from \"./column-date\";\r\n\r\nexport const MKColumnDate = ColumnDate;\r\nexport default MKColumnDate;\r\n\r\nexport * from \"./column-date-options\";\r\n"],"names":["defineComponent","name","props","columnDateProps","setup","columnTextProps","computed","type","formatValue","value","dayInstance","dayjs","isValid","unref","format","_createVNode","MKColumnText","_mergeProps"],"mappings":";;;;AAIO,MAAM,YAAY,CAAC,QAAQ,QAAQ,SAAS,UAAU;AAEtD,MAAM,kBAAkB,WAAW;AAAA,EACxC,GAAG;AAAA,EACH,MAAM,EAAE,SAAS,QAAQ,QAAQ,UAAU;AAC7C,CAAC;ACHD,MAAeA,6CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOC;AAAAA,EACPC,MAAMF,OAAO;AACX,UAAMG,mBAAkBC,SAAS,MAAM;AACrC,YAAM;AAAA,QAAEC,MAAAA;AAAAA,QAAM,GAAGF;AAAAA,MAAiB,IAAGH;AACrC,aAAOG;AAAAA,IACT,CAAC;AAED,UAAME,OAAOD,SAAS,MAAMJ,MAAMK,IAAI;AAEtC,UAAMC,cAAeC,WAAkB;AACrC,YAAMC,cAAcC,MAAMF,SAAS,IAAI;AAEvC,UAAI,CAACC,YAAYE,WAAW;AAC1B;AAAA,MACF;AAEA,cAAQC,MAAMN,IAAI,GAAC;AAAA,QACjB,KAAK;AACH,iBAAOG,YAAYI,OAAO,qBAAqB;AAAA,QACjD,KAAK;AACH,iBAAOJ,YAAYI,OAAO,YAAY;AAAA,QACxC,KAAK;AACH,iBAAOJ,YAAYI,OAAO,SAAS;AAAA,QACrC,KAAK;AACH,iBAAOJ,YAAYI,OAAO,MAAM;AAAA,QAClC;AACE,iBAAOZ,MAAMM,YAAYC,KAAK;AAAA,MAClC;AAAA;AAGF,WAAO,MAAM;AACX,aAAAM,YAAAC,cAAAC,WACoBJ,MAAMR,gBAAe,GAAC;AAAA,QAAA,eAAeG;AAAAA,MAAW,CAAA,GAAA,IAAA;AAAA;EAGxE;AACF,CAAC;AC1CM,MAAM,eAAe;"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, ref, computed, unref, onMounted, resolveComponent, openBlock, createBlock, withCtx, createVNode, createElementVNode, createElementBlock, Fragment, renderList, toDisplayString } from "vue";
2
2
  import { ElMessage } from "element-plus";
3
3
  import * as elIcons from "@element-plus/icons-vue";
4
- import { z as MKPageContainer } from "./index-DknNVWIH.js";
4
+ import { z as MKPageContainer } from "./index-ClxRVkUv.js";
5
5
  import "@maketribe/request";
6
6
  import "@maketribe/utils";
7
7
  import "@lexical/overflow";
@@ -105,4 +105,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
105
105
  export {
106
106
  _sfc_main as default
107
107
  };
108
- //# sourceMappingURL=index-Bdpr5BhD.js.map
108
+ //# sourceMappingURL=index-C2Y6k5VU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-Bdpr5BhD.js","sources":["../../src/modules/ms/pages/icons/index.vue"],"sourcesContent":["<template>\n <MKPageContainer>\n <ElCard>\n <ElScrollbar height=\"100%\">\n <ElInput\n v-model=\"search\"\n placeholder=\"搜索图标\"\n :suffix-icon=\"elIcons.Search\"\n />\n\n <ul class=\"mk-icon-list\">\n <li class=\"mk-icon-list__item\" v-for=\"icon in filteredIcons\">\n <div class=\"mk-icon-item\" @click=\"handleClick(icon)\">\n <div class=\"mk-icon-item__icon\">\n <MKSvgIcon :iconClass=\"icon\" />\n </div>\n\n <div class=\"mk-icon-item__name\">\n {{ icon }}\n </div>\n </div>\n </li>\n </ul>\n </ElScrollbar>\n </ElCard>\n </MKPageContainer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, Ref, unref } from \"vue\";\nimport { ElMessage } from \"element-plus\";\nimport * as elIcons from \"@element-plus/icons-vue\";\nimport { MKPageContainer } from \"../../../../components\";\n\nconst icons: Ref<string[]> = ref([]);\n\nconst search = ref(\"\");\n\nconst filteredIcons = computed(() => {\n const _search = unref(search).toLowerCase();\n\n return unref(icons).filter((icon) => icon.toLowerCase().includes(_search));\n});\n\nonMounted(() => {\n const svgList: NodeListOf<SVGElement> = document.querySelectorAll(\n 'body > svg[aria-hidden=\"true\"]'\n );\n\n let iconList: string[] = [];\n\n for (const svg of Array.from(svgList)) {\n const symbols = svg.querySelectorAll(\"symbol\");\n\n iconList = iconList.concat(\n Array.from(symbols).map((symbol) => symbol.id.replace(/^icon-/, \"\"))\n );\n }\n\n icons.value = Array.from(new Set([...Object.keys(elIcons), ...iconList]));\n});\n\nconst handleClick = (icon: string) => {\n const content = `<MKSvgIcon iconClass=\"${icon}\"/>`;\n\n if (navigator.clipboard === undefined) {\n //通过input标签进行复制\n const input = document.createElement(\"input\");\n input.value = content;\n document.body.appendChild(input);\n input.select();\n document.execCommand(\"Copy\");\n document.body.removeChild(input);\n } else {\n navigator.clipboard.writeText(content);\n }\n\n ElMessage.success(\"复制成功\");\n};\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCM,UAAA,QAAuB,IAAI,CAAA,CAAE;AAE7B,UAAA,SAAS,IAAI,EAAE;AAEf,UAAA,gBAAgB,SAAS,MAAM;AACnC,YAAM,UAAU,MAAM,MAAM,EAAE,YAAY;AAEnC,aAAA,MAAM,KAAK,EAAE,OAAO,CAAC,SAAS,KAAK,YAAY,EAAE,SAAS,OAAO,CAAC;AAAA,IAAA,CAC1E;AAED,cAAU,MAAM;AACd,YAAM,UAAkC,SAAS;AAAA,QAC/C;AAAA,MAAA;AAGF,UAAI,WAAqB,CAAA;AAEzB,iBAAW,OAAO,MAAM,KAAK,OAAO,GAAG;AAC/B,cAAA,UAAU,IAAI,iBAAiB,QAAQ;AAE7C,mBAAW,SAAS;AAAA,UAClB,MAAM,KAAK,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,GAAG,QAAQ,UAAU,EAAE,CAAC;AAAA,QAAA;AAAA,MAEvE;AAEA,YAAM,QAAQ,MAAM,KAAK,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,GAAG,QAAQ,CAAC,CAAC;AAAA,IAAA,CACzE;AAEK,UAAA,cAAc,CAAC,SAAiB;AAC9B,YAAA,UAAU,yBAAyB,IAAI;AAEzC,UAAA,UAAU,cAAc,QAAW;AAE/B,cAAA,QAAQ,SAAS,cAAc,OAAO;AAC5C,cAAM,QAAQ;AACL,iBAAA,KAAK,YAAY,KAAK;AAC/B,cAAM,OAAO;AACb,iBAAS,YAAY,MAAM;AAClB,iBAAA,KAAK,YAAY,KAAK;AAAA,MAAA,OAC1B;AACK,kBAAA,UAAU,UAAU,OAAO;AAAA,MACvC;AAEA,gBAAU,QAAQ,MAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index-C2Y6k5VU.js","sources":["../../src/modules/ms/pages/icons/index.vue"],"sourcesContent":["<template>\n <MKPageContainer>\n <ElCard>\n <ElScrollbar height=\"100%\">\n <ElInput\n v-model=\"search\"\n placeholder=\"搜索图标\"\n :suffix-icon=\"elIcons.Search\"\n />\n\n <ul class=\"mk-icon-list\">\n <li class=\"mk-icon-list__item\" v-for=\"icon in filteredIcons\">\n <div class=\"mk-icon-item\" @click=\"handleClick(icon)\">\n <div class=\"mk-icon-item__icon\">\n <MKSvgIcon :iconClass=\"icon\" />\n </div>\n\n <div class=\"mk-icon-item__name\">\n {{ icon }}\n </div>\n </div>\n </li>\n </ul>\n </ElScrollbar>\n </ElCard>\n </MKPageContainer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, Ref, unref } from \"vue\";\nimport { ElMessage } from \"element-plus\";\nimport * as elIcons from \"@element-plus/icons-vue\";\nimport { MKPageContainer } from \"../../../../components\";\n\nconst icons: Ref<string[]> = ref([]);\n\nconst search = ref(\"\");\n\nconst filteredIcons = computed(() => {\n const _search = unref(search).toLowerCase();\n\n return unref(icons).filter((icon) => icon.toLowerCase().includes(_search));\n});\n\nonMounted(() => {\n const svgList: NodeListOf<SVGElement> = document.querySelectorAll(\n 'body > svg[aria-hidden=\"true\"]'\n );\n\n let iconList: string[] = [];\n\n for (const svg of Array.from(svgList)) {\n const symbols = svg.querySelectorAll(\"symbol\");\n\n iconList = iconList.concat(\n Array.from(symbols).map((symbol) => symbol.id.replace(/^icon-/, \"\"))\n );\n }\n\n icons.value = Array.from(new Set([...Object.keys(elIcons), ...iconList]));\n});\n\nconst handleClick = (icon: string) => {\n const content = `<MKSvgIcon iconClass=\"${icon}\"/>`;\n\n if (navigator.clipboard === undefined) {\n //通过input标签进行复制\n const input = document.createElement(\"input\");\n input.value = content;\n document.body.appendChild(input);\n input.select();\n document.execCommand(\"Copy\");\n document.body.removeChild(input);\n } else {\n navigator.clipboard.writeText(content);\n }\n\n ElMessage.success(\"复制成功\");\n};\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCM,UAAA,QAAuB,IAAI,CAAA,CAAE;AAE7B,UAAA,SAAS,IAAI,EAAE;AAEf,UAAA,gBAAgB,SAAS,MAAM;AACnC,YAAM,UAAU,MAAM,MAAM,EAAE,YAAY;AAEnC,aAAA,MAAM,KAAK,EAAE,OAAO,CAAC,SAAS,KAAK,YAAY,EAAE,SAAS,OAAO,CAAC;AAAA,IAAA,CAC1E;AAED,cAAU,MAAM;AACd,YAAM,UAAkC,SAAS;AAAA,QAC/C;AAAA,MAAA;AAGF,UAAI,WAAqB,CAAA;AAEzB,iBAAW,OAAO,MAAM,KAAK,OAAO,GAAG;AAC/B,cAAA,UAAU,IAAI,iBAAiB,QAAQ;AAE7C,mBAAW,SAAS;AAAA,UAClB,MAAM,KAAK,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,GAAG,QAAQ,UAAU,EAAE,CAAC;AAAA,QAAA;AAAA,MAEvE;AAEA,YAAM,QAAQ,MAAM,KAAK,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,GAAG,QAAQ,CAAC,CAAC;AAAA,IAAA,CACzE;AAEK,UAAA,cAAc,CAAC,SAAiB;AAC9B,YAAA,UAAU,yBAAyB,IAAI;AAEzC,UAAA,UAAU,cAAc,QAAW;AAE/B,cAAA,QAAQ,SAAS,cAAc,OAAO;AAC5C,cAAM,QAAQ;AACL,iBAAA,KAAK,YAAY,KAAK;AAC/B,cAAM,OAAO;AACb,iBAAS,YAAY,MAAM;AAClB,iBAAA,KAAK,YAAY,KAAK;AAAA,MAAA,OAC1B;AACK,kBAAA,UAAU,UAAU,OAAO;AAAA,MACvC;AAEA,gBAAU,QAAQ,MAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, ref, reactive, resolveComponent, openBlock, createBlock, withCtx, createElementVNode, createTextVNode, createVNode, unref } from "vue";
2
2
  import { useRouter } from "vue-router";
3
3
  import { Messager } from "@maketribe/dm";
4
- import { v as useHttpRequest, t as MKOpenVerifyCode } from "./index-DknNVWIH.js";
4
+ import { v as useHttpRequest, t as MKOpenVerifyCode } from "./index-ClxRVkUv.js";
5
5
  import "@maketribe/request";
6
6
  import "@maketribe/locale";
7
7
  import "@maketribe/utils";
@@ -17,7 +17,7 @@ import "@element-plus/icons-vue";
17
17
  import "@lexical/history";
18
18
  import "@lexical/dragon";
19
19
  import "@lexical/plain-text";
20
- import { _ as _sfc_main$1 } from "./index.vue_vue_type_script_setup_true_lang-JlluKuL-.js";
20
+ import { _ as _sfc_main$1 } from "./index.vue_vue_type_script_setup_true_lang-B9tW53id.js";
21
21
  const _hoisted_1 = { class: "login-form-wrap" };
22
22
  const _hoisted_2 = /* @__PURE__ */ createElementVNode("div", { class: "login-form-title" }, " 账号申请 ", -1);
23
23
  const _hoisted_3 = { class: "login-form-item" };
@@ -197,4 +197,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
197
197
  export {
198
198
  _sfc_main as default
199
199
  };
200
- //# sourceMappingURL=index-B8tP_Pku.js.map
200
+ //# sourceMappingURL=index-CAmafqoX.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-B8tP_Pku.js","sources":["../../src/page/signup/index.vue"],"sourcesContent":["<template>\r\n <SimplePageLayout class=\"login-wrap\">\r\n <div class=\"login-form-wrap\">\r\n <div class=\"login-form-title\"> 账号申请 </div>\r\n <div class=\"login-form-item\">\r\n <div></div>\r\n <span class=\"notify\">\r\n 已有账号?\r\n <el-link :underline=\"false\" type=\"primary\" @click=\"router.push('/login')\">\r\n 返回登录\r\n <MKSvgIcon iconClass=\"ArrowRightBold\" style=\"margin-left: 5px;\" />\r\n </el-link>\r\n </span>\r\n </div>\r\n <ElForm\r\n :model=\"signFormData\"\r\n :rules=\"rules\"\r\n size=\"large\"\r\n ref=\"formEl\"\r\n >\r\n <ElFormItem prop=\"account\">\r\n <ElInput v-model=\"signFormData.account\" placeholder=\"帐号\" />\r\n </ElFormItem>\r\n <ElFormItem prop=\"email\">\r\n <ElInput v-model=\"signFormData.email\" placeholder=\"邮箱\" />\r\n </ElFormItem>\r\n <ElFormItem prop=\"name\">\r\n <ElInput v-model=\"signFormData.name\" placeholder=\"姓名\" />\r\n </ElFormItem>\r\n <ElFormItem prop=\"nickName\">\r\n <ElInput v-model=\"signFormData.nickName\" placeholder=\"昵称\" />\r\n </ElFormItem>\r\n <ElFormItem prop=\"phone\">\r\n <ElInput v-model=\"signFormData.phone\" placeholder=\"手机号\" />\r\n </ElFormItem>\r\n\r\n <ElFormItem>\r\n <ElButton type=\"primary\" style=\"width: 100%\"\r\n :loading=\"loading\" @click=\"handleAccountApply\">\r\n 提交申请\r\n </ElButton>\r\n </ElFormItem>\r\n </ElForm>\r\n </div>\r\n </SimplePageLayout>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { Ref, computed, reactive, ref } from \"vue\";\r\nimport { useRouter } from \"vue-router\";\r\nimport { FormRules } from \"element-plus\";\r\nimport { Messager } from \"@maketribe/dm\";\r\nimport { useHttpRequest } from \"../../composables\";\r\nimport { MKOpenVerifyCode } from \"../../components\";\r\nimport SimplePageLayout from \"../../layouts/components/simple-page-layout/index.vue\"\r\n\r\ndefineOptions({\r\n mkRoute: {\r\n name: \"signup\",\r\n path: \"/signup\",\r\n meta: {\r\n isAuthorization: false,\r\n },\r\n },\r\n});\r\n\r\nconst formEl: Ref<any> = ref(null);\r\n\r\nconst router = useRouter();\r\n\r\nconst httpRequest = useHttpRequest()!;\r\n\r\nconst loading = ref(false);\r\n\r\nconst rules: FormRules = {\r\n account: [{ required: true, message: \"账号必填\" }],\r\n email: [\r\n {\r\n required: true,\r\n trigger: \"change\",\r\n validator: (rule, value, callback) => {\r\n if (!value) {\r\n callback(new Error(\"邮箱必填\"));\r\n } else if (\r\n !/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$/.test(value)\r\n ) {\r\n callback(new Error(\"邮箱规则不符\"));\r\n } else {\r\n callback();\r\n }\r\n },\r\n },\r\n ],\r\n name: [{ required: true, message: \"姓名必填\" }],\r\n};\r\n\r\n\r\nconst signFormData = reactive({\r\n account: \"\",\r\n email: \"\",\r\n name: \"\",\r\n nickName: \"\",\r\n phone: \"\",\r\n vCdoe:\"\"\r\n});\r\n\r\nconst handleAccountApply = async () => {\r\n\r\n if(! await formEl.value.validate()){\r\n return ;\r\n }\r\n\r\n // 验证码\r\n signFormData.vCdoe = (await MKOpenVerifyCode({ sence:\"AccountApply\" } as any)) + \"\";\r\n\r\n const result = await httpRequest.post(\"ms/app/account-apply\",signFormData);\r\n\r\n if (result.data.code != 200) {\r\n Messager.error({ message: result.data.msg || \"注册失败\"});\r\n return;\r\n }\r\n\r\n Messager.success({ message: \"注册成功,请联系管理员通过验证\" });\r\n};\r\n\r\n// 记住登陆状态\r\nconst rememberLoginState = ref(false);\r\n</script>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEM,UAAA,SAAmB,IAAI,IAAI;AAEjC,UAAM,SAAS;AAEf,UAAM,cAAc;AAEd,UAAA,UAAU,IAAI,KAAK;AAEzB,UAAM,QAAmB;AAAA,MACvB,SAAS,CAAC,EAAE,UAAU,MAAM,SAAS,QAAQ;AAAA,MAC7C,OAAO;AAAA,QACL;AAAA,UACE,UAAU;AAAA,UACV,SAAS;AAAA,UACT,WAAW,CAAC,MAAM,OAAO,aAAa;AACpC,gBAAI,CAAC,OAAO;AACD,uBAAA,IAAI,MAAM,MAAM,CAAC;AAAA,YAE1B,WAAA,CAAC,qDAAqD,KAAK,KAAK,GAChE;AACS,uBAAA,IAAI,MAAM,QAAQ,CAAC;AAAA,YAAA,OACvB;AACI;YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,MAAM,CAAC,EAAE,UAAU,MAAM,SAAS,QAAQ;AAAA,IAAA;AAI5C,UAAM,eAAe,SAAS;AAAA,MAC5B,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAM;AAAA,IAAA,CACP;AAED,UAAM,qBAAqB,YAAY;AAErC,UAAG,CAAE,MAAM,OAAO,MAAM,YAAW;AACjC;AAAA,MACF;AAGA,mBAAa,QAAS,MAAM,iBAAiB,EAAE,OAAM,eAAA,CAAuB,IAAK;AAEjF,YAAM,SAAS,MAAM,YAAY,KAAK,wBAAuB,YAAY;AAErE,UAAA,OAAO,KAAK,QAAQ,KAAK;AAC3B,iBAAS,MAAM,EAAE,SAAS,OAAO,KAAK,OAAO,QAAO;AACpD;AAAA,MACF;AAEA,eAAS,QAAQ,EAAE,SAAS,kBAAmB,CAAA;AAAA,IAAA;AAItB,QAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index-CAmafqoX.js","sources":["../../src/page/signup/index.vue"],"sourcesContent":["<template>\r\n <SimplePageLayout class=\"login-wrap\">\r\n <div class=\"login-form-wrap\">\r\n <div class=\"login-form-title\"> 账号申请 </div>\r\n <div class=\"login-form-item\">\r\n <div></div>\r\n <span class=\"notify\">\r\n 已有账号?\r\n <el-link :underline=\"false\" type=\"primary\" @click=\"router.push('/login')\">\r\n 返回登录\r\n <MKSvgIcon iconClass=\"ArrowRightBold\" style=\"margin-left: 5px;\" />\r\n </el-link>\r\n </span>\r\n </div>\r\n <ElForm\r\n :model=\"signFormData\"\r\n :rules=\"rules\"\r\n size=\"large\"\r\n ref=\"formEl\"\r\n >\r\n <ElFormItem prop=\"account\">\r\n <ElInput v-model=\"signFormData.account\" placeholder=\"帐号\" />\r\n </ElFormItem>\r\n <ElFormItem prop=\"email\">\r\n <ElInput v-model=\"signFormData.email\" placeholder=\"邮箱\" />\r\n </ElFormItem>\r\n <ElFormItem prop=\"name\">\r\n <ElInput v-model=\"signFormData.name\" placeholder=\"姓名\" />\r\n </ElFormItem>\r\n <ElFormItem prop=\"nickName\">\r\n <ElInput v-model=\"signFormData.nickName\" placeholder=\"昵称\" />\r\n </ElFormItem>\r\n <ElFormItem prop=\"phone\">\r\n <ElInput v-model=\"signFormData.phone\" placeholder=\"手机号\" />\r\n </ElFormItem>\r\n\r\n <ElFormItem>\r\n <ElButton type=\"primary\" style=\"width: 100%\"\r\n :loading=\"loading\" @click=\"handleAccountApply\">\r\n 提交申请\r\n </ElButton>\r\n </ElFormItem>\r\n </ElForm>\r\n </div>\r\n </SimplePageLayout>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { Ref, computed, reactive, ref } from \"vue\";\r\nimport { useRouter } from \"vue-router\";\r\nimport { FormRules } from \"element-plus\";\r\nimport { Messager } from \"@maketribe/dm\";\r\nimport { useHttpRequest } from \"../../composables\";\r\nimport { MKOpenVerifyCode } from \"../../components\";\r\nimport SimplePageLayout from \"../../layouts/components/simple-page-layout/index.vue\"\r\n\r\ndefineOptions({\r\n mkRoute: {\r\n name: \"signup\",\r\n path: \"/signup\",\r\n meta: {\r\n isAuthorization: false,\r\n },\r\n },\r\n});\r\n\r\nconst formEl: Ref<any> = ref(null);\r\n\r\nconst router = useRouter();\r\n\r\nconst httpRequest = useHttpRequest()!;\r\n\r\nconst loading = ref(false);\r\n\r\nconst rules: FormRules = {\r\n account: [{ required: true, message: \"账号必填\" }],\r\n email: [\r\n {\r\n required: true,\r\n trigger: \"change\",\r\n validator: (rule, value, callback) => {\r\n if (!value) {\r\n callback(new Error(\"邮箱必填\"));\r\n } else if (\r\n !/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$/.test(value)\r\n ) {\r\n callback(new Error(\"邮箱规则不符\"));\r\n } else {\r\n callback();\r\n }\r\n },\r\n },\r\n ],\r\n name: [{ required: true, message: \"姓名必填\" }],\r\n};\r\n\r\n\r\nconst signFormData = reactive({\r\n account: \"\",\r\n email: \"\",\r\n name: \"\",\r\n nickName: \"\",\r\n phone: \"\",\r\n vCdoe:\"\"\r\n});\r\n\r\nconst handleAccountApply = async () => {\r\n\r\n if(! await formEl.value.validate()){\r\n return ;\r\n }\r\n\r\n // 验证码\r\n signFormData.vCdoe = (await MKOpenVerifyCode({ sence:\"AccountApply\" } as any)) + \"\";\r\n\r\n const result = await httpRequest.post(\"ms/app/account-apply\",signFormData);\r\n\r\n if (result.data.code != 200) {\r\n Messager.error({ message: result.data.msg || \"注册失败\"});\r\n return;\r\n }\r\n\r\n Messager.success({ message: \"注册成功,请联系管理员通过验证\" });\r\n};\r\n\r\n// 记住登陆状态\r\nconst rememberLoginState = ref(false);\r\n</script>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEM,UAAA,SAAmB,IAAI,IAAI;AAEjC,UAAM,SAAS;AAEf,UAAM,cAAc;AAEd,UAAA,UAAU,IAAI,KAAK;AAEzB,UAAM,QAAmB;AAAA,MACvB,SAAS,CAAC,EAAE,UAAU,MAAM,SAAS,QAAQ;AAAA,MAC7C,OAAO;AAAA,QACL;AAAA,UACE,UAAU;AAAA,UACV,SAAS;AAAA,UACT,WAAW,CAAC,MAAM,OAAO,aAAa;AACpC,gBAAI,CAAC,OAAO;AACD,uBAAA,IAAI,MAAM,MAAM,CAAC;AAAA,YAE1B,WAAA,CAAC,qDAAqD,KAAK,KAAK,GAChE;AACS,uBAAA,IAAI,MAAM,QAAQ,CAAC;AAAA,YAAA,OACvB;AACI;YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,MAAM,CAAC,EAAE,UAAU,MAAM,SAAS,QAAQ;AAAA,IAAA;AAI5C,UAAM,eAAe,SAAS;AAAA,MAC5B,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAM;AAAA,IAAA,CACP;AAED,UAAM,qBAAqB,YAAY;AAErC,UAAG,CAAE,MAAM,OAAO,MAAM,YAAW;AACjC;AAAA,MACF;AAGA,mBAAa,QAAS,MAAM,iBAAiB,EAAE,OAAM,eAAA,CAAuB,IAAK;AAEjF,YAAM,SAAS,MAAM,YAAY,KAAK,wBAAuB,YAAY;AAErE,UAAA,OAAO,KAAK,QAAQ,KAAK;AAC3B,iBAAS,MAAM,EAAE,SAAS,OAAO,KAAK,OAAO,QAAO;AACpD;AAAA,MACF;AAEA,eAAS,QAAQ,EAAE,SAAS,kBAAmB,CAAA;AAAA,IAAA;AAItB,QAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, createVNode, unref } from "vue";
2
2
  import { buildProps } from "@maketribe/utils";
3
- import { columnTextProps } from "./index-CEIFlqQ6.js";
4
- import { X as useColumn, q as MKSvgIcon } from "./index-DknNVWIH.js";
3
+ import { columnTextProps } from "./index-D9OxO5-n.js";
4
+ import { X as useColumn, q as MKSvgIcon } from "./index-ClxRVkUv.js";
5
5
  import "vue-router";
6
6
  import "@maketribe/dm";
7
7
  import "element-plus";
@@ -31,4 +31,4 @@ export {
31
31
  columnIconProps,
32
32
  MKColumnIcon as default
33
33
  };
34
- //# sourceMappingURL=index-BuMWOrRH.js.map
34
+ //# sourceMappingURL=index-CKR8AVN2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BuMWOrRH.js","sources":["../../src/components/data-model/data-table/components/column-icon/column-icon-options.ts","../../src/components/data-model/data-table/components/column-icon/column-icon.tsx","../../src/components/data-model/data-table/components/column-icon/index.ts"],"sourcesContent":["import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { columnTextProps } from \"../column-text\";\r\n\r\nexport const columnIconProps = buildProps({\r\n\t...columnTextProps,\r\n});\r\n\r\nexport type ColumnIconProps = ExtractPropTypes<typeof columnIconProps>;\r\n","import { defineComponent, unref } from \"vue\";\r\nimport { columnIconProps } from \"./column-icon-options\";\r\nimport { MKSvgIcon } from \"../../../../basic/svg-icon\";\r\nimport { useColumn } from \"../../composables\";\r\n\r\nexport default defineComponent({\r\n name: \"MKColumnIcon\",\r\n props: columnIconProps,\r\n setup(props) {\r\n const { value } = useColumn(props);\r\n return () => {\r\n return <MKSvgIcon name={unref(value)} />;\r\n };\r\n },\r\n});\r\n","import ColumnIcon from \"./column-icon\";\r\n\r\nexport const MKColumnIcon = ColumnIcon;\r\nexport default MKColumnIcon;\r\n\r\nexport * from \"./column-icon-options\";\r\n"],"names":["defineComponent","name","props","columnIconProps","setup","value","useColumn","_createVNode","MKSvgIcon","unref"],"mappings":";;;;;;;;;;AAIO,MAAM,kBAAkB,WAAW;AAAA,EACzC,GAAG;AACJ,CAAC;ACDD,MAAeA,6CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOC;AAAAA,EACPC,MAAMF,OAAO;AACX,UAAM;AAAA,MAAEG;AAAAA,IAAM,IAAIC,UAAUJ,KAAK;AACjC,WAAO,MAAM;AACX,aAAAK,YAAAC,WAAA;AAAA,QAAA,QAAwBC,MAAMJ,KAAK;AAAA,MAAC,GAAA,IAAA;AAAA;EAExC;AACF,CAAC;ACZM,MAAM,eAAe;"}
1
+ {"version":3,"file":"index-CKR8AVN2.js","sources":["../../src/components/data-model/data-table/components/column-icon/column-icon-options.ts","../../src/components/data-model/data-table/components/column-icon/column-icon.tsx","../../src/components/data-model/data-table/components/column-icon/index.ts"],"sourcesContent":["import { ExtractPropTypes } from \"vue\";\r\nimport { buildProps } from \"@maketribe/utils\";\r\nimport { columnTextProps } from \"../column-text\";\r\n\r\nexport const columnIconProps = buildProps({\r\n\t...columnTextProps,\r\n});\r\n\r\nexport type ColumnIconProps = ExtractPropTypes<typeof columnIconProps>;\r\n","import { defineComponent, unref } from \"vue\";\r\nimport { columnIconProps } from \"./column-icon-options\";\r\nimport { MKSvgIcon } from \"../../../../basic/svg-icon\";\r\nimport { useColumn } from \"../../composables\";\r\n\r\nexport default defineComponent({\r\n name: \"MKColumnIcon\",\r\n props: columnIconProps,\r\n setup(props) {\r\n const { value } = useColumn(props);\r\n return () => {\r\n return <MKSvgIcon name={unref(value)} />;\r\n };\r\n },\r\n});\r\n","import ColumnIcon from \"./column-icon\";\r\n\r\nexport const MKColumnIcon = ColumnIcon;\r\nexport default MKColumnIcon;\r\n\r\nexport * from \"./column-icon-options\";\r\n"],"names":["defineComponent","name","props","columnIconProps","setup","value","useColumn","_createVNode","MKSvgIcon","unref"],"mappings":";;;;;;;;;;AAIO,MAAM,kBAAkB,WAAW;AAAA,EACzC,GAAG;AACJ,CAAC;ACDD,MAAeA,6CAAgB;AAAA,EAC7BC,MAAM;AAAA,EACNC,OAAOC;AAAAA,EACPC,MAAMF,OAAO;AACX,UAAM;AAAA,MAAEG;AAAAA,IAAM,IAAIC,UAAUJ,KAAK;AACjC,WAAO,MAAM;AACX,aAAAK,YAAAC,WAAA;AAAA,QAAA,QAAwBC,MAAMJ,KAAK;AAAA,MAAC,GAAA,IAAA;AAAA;EAExC;AACF,CAAC;ACZM,MAAM,eAAe;"}
@@ -2,7 +2,7 @@ import { defineComponent, ref, reactive, watch, resolveComponent, openBlock, cre
2
2
  import { withInstall } from "@maketribe/utils";
3
3
  import { ElScrollbar, ElMessageBox, ElSwitch } from "element-plus";
4
4
  import { Edit, Delete, Plus, MoreFilled, EditPen } from "@element-plus/icons-vue";
5
- import { ab as useI18n, ah as CmsPartTree, q as MKSvgIcon, A as MKDataTable, J as MKTree, ai as CmsArticlesTable, a4 as CmsArticlesForm, F as MKTableView, P as CmsPartForm, B as MKDataForm, a3 as MKForm, a6 as MKDataFormItem, Q as CmsAdContentsForm, S as CmsAdDefinesForm, aj as CmsPartMiniForm, ak as CmsContentManPartForm, a5 as MKDocEditor, al as usePartExtensionList, am as usePartContentComponent } from "./index-DknNVWIH.js";
5
+ import { ac as useI18n, ai as CmsPartTree, q as MKSvgIcon, A as MKDataTable, J as MKTree, aj as CmsArticlesTable, a4 as CmsArticlesForm, F as MKTableView, P as CmsPartForm, B as MKDataForm, a3 as MKForm, a6 as MKDataFormItem, Q as CmsAdContentsForm, S as CmsAdDefinesForm, ak as CmsPartMiniForm, al as CmsContentManPartForm, a5 as MKDocEditor, am as usePartExtensionList, an as usePartContentComponent } from "./index-ClxRVkUv.js";
6
6
  import { isWhereFilter, Dialoger, Messager } from "@maketribe/dm";
7
7
  import { useRouter, useRoute } from "vue-router";
8
8
  import { DataViewRequest, Where } from "@maketribe/request";
@@ -19,7 +19,7 @@ import "@lexical/history";
19
19
  import "@lexical/dragon";
20
20
  import "@lexical/plain-text";
21
21
  import "@codemirror/lang-html";
22
- import { u as useCmsSettings } from "./cms-settings-jjd73rEK.js";
22
+ import { u as useCmsSettings } from "./cms-settings-3ysZKNMa.js";
23
23
  const _hoisted_1$4 = { class: "cms-part-tree" };
24
24
  const _hoisted_2$4 = { class: "cms-part-tree__header" };
25
25
  const _hoisted_3$4 = { class: "cms-part-tree__body" };
@@ -1602,4 +1602,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1602
1602
  export {
1603
1603
  _sfc_main as default
1604
1604
  };
1605
- //# sourceMappingURL=index-z5v336Rn.js.map
1605
+ //# sourceMappingURL=index-CZ8jfaGv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-z5v336Rn.js","sources":["../../src/modules/cms/components/part-tree/index.vue","../../src/modules/cms/components/part-tree/index.ts","../../src/modules/cms/pages/cms-contents/components/article-list.vue","../../src/modules/cms/pages/cms-contents/components/part-info.vue","../../src/modules/cms/pages/cms-contents/components/part-banner.vue","../../src/modules/cms/pages/cms-contents/components/part-banner-edit.vue","../../src/modules/cms/pages/cms-contents/index.vue"],"sourcesContent":["<template>\r\n <div class=\"cms-part-tree\">\r\n <div class=\"cms-part-tree__header\">\r\n <div>\r\n <MKSvgIcon name=\"ep:notebook\" />\r\n 栏目\r\n </div>\r\n <el-switch v-model=\"isDrag\" inline-prompt active-text=\"开启排序\"\r\n inactive-text=\"关闭排序\" />\r\n </div>\r\n <div class=\"cms-part-tree__body\">\r\n <ElScrollbar style=\"height: 100%;\">\r\n <MKDataTable :auto-load=\"true\" :data-table=\"dataTree\" highlight-current>\r\n <MKTree :data-tree=\"dataTree\" @nodeClick=\"selectPart\" defaultExpandAll :draggable=\"isDrag\" ref=\"treeRef\" :currentNodeKey=\"selectNodeId\">\r\n <template #node-main=\"{ data }\">\r\n {{ data.data.title }}\r\n </template>\r\n <template #node-tools=\"{ data }\">\r\n <el-dropdown>\r\n <ElIcon>\r\n <MoreFilled />\r\n </ElIcon>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :icon=\"Edit\" @click=\"handleEditClick(data.data)\">编辑</el-dropdown-item>\r\n <el-dropdown-item :icon=\"Delete\" @click=\"handleDeleteClick(data.data)\">删除</el-dropdown-item>\r\n <el-dropdown-item v-if=\"data.data.cmsPartTypeId != 1\" :icon=\"Plus\"\r\n @click=\"handleAddClick(data.data)\">添加子菜单</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </template>\r\n </MKTree>\r\n </MKDataTable>\r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n</template>\r\n<script setup lang='ts'>\r\nimport { ElMessageBox, ElScrollbar } from \"element-plus\"\r\nimport { Plus, Edit, Delete, MoreFilled } from \"@element-plus/icons-vue\";\r\nimport { reactive, defineProps, watch, defineEmits, ref } from \"vue\";\r\nimport { MKDataTable, MKTree } from \"../../../../components/data-model/data-table\"\r\nimport { CmsPartTree } from \"../../dataviews\";\r\nimport { useI18n } from \"../../../../composables\";\r\nimport { DataTreeNode } from \"@maketribe/dm\";\r\nimport {MKSvgIcon} from \"../../../../components/basic\";\r\n\r\ndefineOptions({ name: \"MKPartTree\" });\r\nconst treeRef = ref(null);\r\n// 配置选项\r\nconst optionSettings = defineProps<{\r\n curSelectId?:string|undefined\r\n}>();\r\n\r\n// 事件定义\r\nconst emit = defineEmits([\"edit\", \"add\", \"deleteSuccessfully\", \"select\"]);\r\n\r\nconst i18n = useI18n()!;\r\nconst dataTree = reactive(new CmsPartTree()) as CmsPartTree;\r\n\r\nconst isDrag = ref(false)\r\n\r\nconst selectNodeId = ref(optionSettings.curSelectId);\r\n\r\nwatch(()=>optionSettings.curSelectId,()=>{\r\n selectNodeId.value = optionSettings.curSelectId\r\n})\r\n\r\n// 监听数据变化\r\ndataTree.listChangeEvent.on(() => {\r\n\r\n const list = dataTree.getList();\r\n\r\n if (list.length > 0) {\r\n //默认选择第一条\r\n if(!selectNodeId.value){ selectNodeId.value = list[0].id; }\r\n\r\n for(let i=0;i<list.length;i++){\r\n\r\n let item = list[i]\r\n \r\n if(item.id == selectNodeId.value){\r\n emit(\"select\", item);\r\n break;\r\n }\r\n item.children?.forEach((child:any)=>list.push(child))\r\n\r\n }\r\n }\r\n})\r\n\r\n/**\r\n * 点击添加栏目按钮\r\n * @param item \r\n */\r\nconst handleAddClick = (item: any) => {\r\n emit(\"add\", item);\r\n}\r\n\r\n/**\r\n * 编辑栏目\r\n * @param item \r\n */\r\nconst handleEditClick = (item: any) => {\r\n emit(\"edit\", item);\r\n}\r\n/**\r\n * 删除栏目\r\n * @param item \r\n */\r\nconst handleDeleteClick = async (item: any) => {\r\n // 删除提示\r\n const isConfirm = await ElMessageBox.confirm(\r\n i18n.translate(\"mk.dataTablePage.deleteMessage\"),\r\n i18n.translate(\"mk.dataTablePage.deleteTitle\"),\r\n { type: \"warning\" }\r\n )\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n const result = await dataTree.deleteAfterRefresh(item.id);\r\n if (result.data.code == 200) {\r\n emit('deleteSuccessfully', item)\r\n }\r\n}\r\n\r\n/**\r\n * 选择栏目\r\n * @param data \r\n */\r\nconst selectPart = (data: DataTreeNode) => {\r\n emit(\"select\", data.data);\r\n}\r\n\r\ndefineExpose({ dataTree });\r\n\r\n\r\n</script>\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport PartTree from \"./index.vue\";\r\n\r\nexport const MKPartTree = withInstall(PartTree);\r\nexport default MKPartTree;\r\n","<template>\r\n <MKDataTable :data-table=\"articlesDv\" :auto-load=\"false\" class=\"mk-cms-article-list\">\r\n <el-empty v-if=\"part && part.cmsPartTypeId == 1\" description=\"外链栏目下无文章内容\" />\r\n <MKTableView v-else-if=\"part\" :data-table=\"articlesDv\">\r\n <el-scrollbar class=\"mk-cms-article-list__content\" style=\"box-sizing: border-box;font-size: 0;\"\r\n v-if=\"articlesDv.getList().length > 0\">\r\n <el-card class=\"mk-cms-article-list__item\" v-for=\"article in articlesDv.getList()\" :key=\"article.id\">\r\n <div class=\"mk-cms-article-list__item__content\">\r\n <div class=\"left\">\r\n <el-image class=\"cover-image\" :src=\"article.cover\" fit=\"contain\">\r\n <template #error>\r\n <MKSvgIcon iconClass=\"Picture\" />\r\n </template>\r\n </el-image>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"top\">\r\n <div class=\"title\" :title=\"article.title\"> {{ article.title }}</div>\r\n <div class=\"tags\">\r\n <el-tag class=\"tag\" v-if=\"CmsSettings.content.useTop && article.isTop == 1\"\r\n @click=\"changeArticleStatus(article, 'isTop', 0)\">置顶</el-tag>\r\n <el-tag class=\"tag\" v-if=\"CmsSettings.content.useNew && article.isNew == 1\"\r\n @click=\"changeArticleStatus(article, 'isNew', 0)\">最新</el-tag>\r\n <el-tag class=\"tag\" v-if=\"CmsSettings.content.useHotRecommend && article.isHotRecommend == 1\"\r\n @click=\"changeArticleStatus(article, 'isHotRecommend', 0)\">热门推荐</el-tag>\r\n <el-tag class=\"tag\" v-if=\"CmsSettings.content.usePartRecommend && article.isPartRecommend == 1\"\r\n @click=\"changeArticleStatus(article, 'isPartRecommend', 0)\">栏目推荐</el-tag>\r\n </div>\r\n </div>\r\n <div class=\"sub-title\" v-if=\"article.subTitle\" :title=\"article.subTitle\"> {{ article.subTitle }}</div>\r\n <div class=\"desc\">\r\n {{ article.desc }}\r\n </div>\r\n <div class=\"footer\">\r\n <div class=\"ext\">\r\n <div class=\"author\">\r\n <MKSvgIcon iconClass=\"UserFilled\"></MKSvgIcon>\r\n 作者 : {{ article.author || \"-\" }}\r\n </div>\r\n <div class=\"publish-time\" v-if=\"article.releaseDate\">\r\n <MKSvgIcon iconClass=\"Timer\"></MKSvgIcon>\r\n 新闻日期 : {{ article.releaseDate }}\r\n </div>\r\n </div>\r\n <div class=\"tools\">\r\n <el-button type=\"primary\" size=\"large\" @click=\"editArticleHandle(article)\" text>\r\n 编辑\r\n </el-button>\r\n <el-button type=\"danger\" size=\"large\" @click=\"deleteArticleHandle(article)\" text>\r\n 删除\r\n </el-button>\r\n <!-- <a v-if=\"CmsSettings.publish.mode == 'static' && article.url\" :href=\"article.url\" target=\"_blank\">\r\n <el-button type=\"primary\" size=\"large\" text>访问</el-button>\r\n </a> -->\r\n <a :href=\"'/api/cms/content/preview/content/' + article.cmsPartId + '/' + article.id\"\r\n v-if=\"CmsSettings.publish.mode == 'static'\" target=\"_blank\">\r\n <el-button type=\"primary\" size=\"large\" text>预览</el-button>\r\n </a>\r\n <el-dropdown>\r\n <el-button type=\"primary\" size=\"large\" text>\r\n 更多\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item v-if=\"CmsSettings.publish.mode == 'static' && article.url\">\r\n <a style=\"text-decoration: none;color: #606266;\"\r\n v-if=\"CmsSettings.publish.mode == 'static' && article.url\" :href=\"article.url\"\r\n target=\"_blank\">\r\n 访问\r\n </a>\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"publishArticleHandle(article)\">\r\n 发布\r\n </el-dropdown-item>\r\n <el-dropdown-item v-if=\"CmsSettings.content.useTop && article.isTop == 0\"\r\n @click=\"changeArticleStatus(article, 'isTop', 1)\">设为置顶</el-dropdown-item>\r\n <el-dropdown-item v-if=\"CmsSettings.content.useNew && article.isNew == 0\"\r\n @click=\"changeArticleStatus(article, 'isNew', 1)\">设为最新</el-dropdown-item>\r\n <el-dropdown-item v-if=\"CmsSettings.content.useHotRecommend && article.isHotRecommend == 0\"\r\n @click=\"changeArticleStatus(article, 'isHotRecommend', 1)\">设为热门推荐</el-dropdown-item>\r\n <el-dropdown-item v-if=\"CmsSettings.content.usePartRecommend && article.isPartRecommend == 0\"\r\n @click=\"changeArticleStatus(article, 'isPartRecommend', 1)\">设为栏目推荐</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </el-card>\r\n </el-scrollbar>\r\n <el-empty v-if=\"articlesDv.getList().length <= 0\" description=\"暂无文章内容\" />\r\n </MKTableView>\r\n </MKDataTable>\r\n</template>\r\n<script setup lang='ts'>\r\nimport { MKTableView } from \"../../../../../components\"\r\nimport { CmsArticlesTable, CmsArticlesForm } from \"../../../dataviews\"\r\nimport { reactive, defineProps, watch, onMounted } from \"vue\";\r\nimport { Dialoger, isWhereFilter, Messager } from '@maketribe/dm'\r\nimport { useRouter } from \"vue-router\";\r\nimport { useCmsSettings } from \"../../../cms-settings\"\r\n// cms 配置\r\nconst CmsSettings = useCmsSettings();\r\n\r\n// 文章\r\nconst articlesDv = reactive(new CmsArticlesTable()) as CmsArticlesTable;\r\n// 发布文章表单\r\nconst articleForm = reactive(new CmsArticlesForm()) as CmsArticlesForm;\r\n// 草稿文章\r\nconst draftArticleForm = reactive(new CmsArticlesForm()) as CmsArticlesForm;\r\n\r\n// 参数\r\nconst props = defineProps({\r\n part: { type: Object, default: null }\r\n})\r\n\r\nconst router = useRouter();\r\n\r\n//改变文章指定,最新,推荐状态\r\nconst changeArticleStatus = async (article: any, item: string, status: number) => {\r\n const text: Record<string, string[]> = {\r\n \"isTop\": ['取消置顶', '设为置顶'],\r\n \"isNew\": ['取消最新', '设为最新'],\r\n \"isHotRecommend\": ['取消热门推荐', '设为热门推荐'],\r\n \"isPartRecommend\": ['取消栏目推荐', '设为栏目推荐'],\r\n }\r\n\r\n const isConfirm = await Dialoger.confirm({\r\n title: \"修改文章状态\",\r\n message: `是否${text[item][status]}?`,\r\n type: \"warning\"\r\n })\r\n if (!isConfirm) {\r\n return\r\n }\r\n try {\r\n\r\n articlesDv.getLoadingManager().startLoading();\r\n await articleForm.editRecord(article.id)\r\n const isSuccess = await articleForm.simpleSubmit({\r\n id: article.id,\r\n [item]: status\r\n })\r\n\r\n if (isSuccess) {\r\n articlesDv.load();\r\n }\r\n } finally {\r\n articlesDv.getLoadingManager().completeLoading();\r\n }\r\n\r\n\r\n}\r\n\r\n// 初始化\r\nonMounted(() => {\r\n articleForm.init();\r\n draftArticleForm.init();\r\n\r\n // 监听栏目数据变化\r\n watch(() => props.part, (item: any) => {\r\n if (item.cmsPartTypeId != 1) {\r\n \r\n const dataFilter = articlesDv.dataFilter;\r\n\r\n if (isWhereFilter(dataFilter)) {\r\n\r\n const defaultGroup = dataFilter.getDefaultGroup();\r\n\r\n defaultGroup.clear();\r\n defaultGroup.addCondition(\"cmsPartId\", \"=\", item.id);\r\n // 只查草稿\r\n defaultGroup.addCondition(\"isDraft\", \"=\", 1);\r\n }\r\n\r\n articlesDv.load()\r\n }\r\n }, { immediate: true })\r\n})\r\n\r\n/**\r\n * 删除文章\r\n */\r\nconst deleteArticleHandle = async (item: any) => {\r\n const isConfirm = await Dialoger.confirm({\r\n title: \"删除文章?\",\r\n message: \"是否删除文章?\",\r\n type: \"warning\"\r\n })\r\n\r\n if (!isConfirm) { return; }\r\n await articlesDv.deleteAfterRefresh(item.id);\r\n}\r\n\r\n/**\r\n * 编辑文章\r\n */\r\nconst editArticleHandle = (item: any, isEdit = false) => {\r\n router.push({ path: \"/cms/article\", query: { id: isEdit ? undefined : item.id, partId: isEdit ? item.id : undefined } })\r\n}\r\n\r\n// 添加记录\r\narticlesDv.addRecordEvent.on(() => editArticleHandle(props.part, true))\r\n\r\n/**\r\n * fault文章\r\n * @param article \r\n */\r\nconst publishArticleHandle = async (article: any) => {\r\n\r\n try {\r\n\r\n if (await Dialoger.confirm({ title: \"文章发布\", message: \"是否发布文章?\", type: \"warning\" })) {\r\n\r\n articlesDv.getLoadingManager().startLoading();\r\n\r\n // 调用发布接口\r\n const response: any = await CmsArticlesForm.publish(CmsSettings.publish.mode, article.cmsPartId, article.id);\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n\r\n Messager.success({ message: \"发布成功\" });\r\n }\r\n\r\n } finally {\r\n articlesDv.getLoadingManager().completeLoading();\r\n }\r\n}\r\n\r\n\r\n</script>\r\n","<template>\r\n <div class=\"mk-cms-part-info\">\r\n <MKDataForm :dataForm=\"partDataForm\" style=\"height: 100%;\">\r\n <MKForm :dataForm=\"partDataForm\">\r\n <div class=\"mk-cms-part-info__body__form\">\r\n <div class=\"mk-cms-part-info__body__form-options\">\r\n <ElScrollbar>\r\n <MKDataFormItem name=\"cmsPartTypeId\" v-if=\"hideHandle('cmsPartTypeId')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"parentId\" v-if=\"hideHandle('parentId')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"cmsCoverArticleId\" v-if=\"hideHandle('cmsCoverArticleId')\">\r\n </MKDataFormItem>\r\n <MKDataFormItem name=\"title\" v-if=\"hideHandle('title')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"name\" v-if=\"hideHandle('name')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"externalLink\" v-if=\"hideHandle('externalLink')\">\r\n </MKDataFormItem>\r\n <el-row :gutter=\"22\" justify=\"space-between\">\r\n <el-col :span=\"10\" v-if=\"hideHandle('isShowMenu')\">\r\n <MKDataFormItem name=\"isShowMenu\"></MKDataFormItem>\r\n </el-col>\r\n <el-col :span=\"10\" v-if=\"hideHandle('isHome')\">\r\n <MKDataFormItem name=\"isHome\"></MKDataFormItem>\r\n </el-col>\r\n </el-row>\r\n <template v-if=\"CmsSettings.publish.mode == 'static'\">\r\n <el-divider content-position=\"left\" v-if=\"hideHandle('coverRouter')\">路由配置</el-divider>\r\n <MKDataFormItem name=\"coverRouter\" v-if=\"hideHandle('coverRouter')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"listRouter\" v-if=\"hideHandle('listRouter')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"contentRouter\" v-if=\"hideHandle('contentRouter')\"></MKDataFormItem>\r\n <el-divider content-position=\"left\" v-if=\"hideHandle('coverTemplate')\">模版配置</el-divider>\r\n <MKDataFormItem name=\"coverTemplate\" v-if=\"hideHandle('coverTemplate')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"listTemplate\" v-if=\"hideHandle('listTemplate')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"contentTemplate\" v-if=\"hideHandle('contentTemplate')\">\r\n </MKDataFormItem>\r\n <el-divider content-position=\"left\" v-if=\"hideHandle('seoKeywords')\">SEO</el-divider>\r\n <MKDataFormItem name=\"seoKeywords\" v-if=\"hideHandle('seoKeywords')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"seoDesc\" v-if=\"hideHandle('seoDesc')\"></MKDataFormItem>\r\n </template>\r\n \r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n </MKForm>\r\n </MKDataForm>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { MKDataForm, MKForm, MKDataFormItem } from \"../../../../../components\";\r\nimport { CmsPartForm } from \"../../../dataviews/cms-parts/CmsPartForm\";\r\nimport { computed, reactive, Ref, watch } from \"vue\";\r\nimport { useCmsSettings } from \"../../../cms-settings\"\r\n// cms 配置\r\nconst CmsSettings = useCmsSettings();\r\nconst props = defineProps({\r\n part: {\r\n type: Object,\r\n default: () => {\r\n return {}\r\n }\r\n },\r\n partDataForm: {\r\n type: CmsPartForm,\r\n default: () => {\r\n return new CmsPartForm()\r\n }\r\n }\r\n})\r\n\r\n//监听保存成功事件\r\n// props.partDataForm.submittedEvent.on(() => {\r\n// props.partDataForm.editRecord(props.part.id)\r\n// })\r\n\r\n/**\r\n * 需要隐藏的行\r\n */\r\nconst hideHandle = (name: string) => {\r\n if (props.partDataForm.data.cmsPartTypeId == 1 && CmsPartForm.outerChainHideColumn.includes(name)) {\r\n return false;\r\n } \r\n else if (props.partDataForm.data.cmsPartTypeId == 2 && CmsPartForm.contentHideColumn.includes(name)) {\r\n return false;\r\n } \r\n else if (props.partDataForm.data.cmsPartTypeId == 3 && CmsPartForm.menuHideColumn.includes(name)) {\r\n props.partDataForm.data.isShowMenu = 1;\r\n return false;\r\n } \r\n else {\r\n return true;\r\n }\r\n}\r\n\r\n\r\n</script>\r\n<style lang='scss'></style>\r\n","<template>\r\n <div v-loading=\"loading\">\r\n <el-carousel v-if=\"partAdBanner && partAdBanner.contents?.length\" :autoplay=\"false\" :height=\"partAdBannerHeight\"\r\n arrow=\"always\" ref=\"carouselRef\">\r\n <el-carousel-item v-for=\"item in partAdBanner.contents\" :key=\"item.id\">\r\n <div class=\"mk-cms-part-banner__list_item\">\r\n <div class=\"mk-cms-part-banner__list_content\">\r\n <el-image class=\"mk-cms-part-banner__list_content_img\" v-if=\"item.type == 1\" :src=\"item.path\" fit=\"cover\"\r\n tyle=\"width: 100%;height: 100%;\">\r\n <div slot=\"placeholder\" class=\"image-slot\">\r\n 加载中<span class=\"dot\">...</span>\r\n </div>\r\n </el-image>\r\n <video class=\"video\" v-if=\"item.type == 2\" :src=\"item.path\" style=\"width: 100%;height: 100%;\"\r\n controls></video>\r\n </div>\r\n <div class=\"mk-cms-part-banner__list_bottom\">\r\n <div class=\"mk-cms-part-banner__list_title\">{{ item.title }}</div>\r\n <div>{{ item.desc }}</div>\r\n </div>\r\n <div class=\"mk-cms-part-banner__list_action-mask\">\r\n <el-button type=\"primary\" style=\"margin-left: 10px;\" :icon=\"EditPen\" @click=\"showAdContentHandle(item.id)\">\r\n 编辑当前轮播素材\r\n </el-button>\r\n <el-button type=\"primary\" style=\"margin-left: 10px;\" :icon=\"Plus\" @click=\"showAdContentHandle(null)\">\r\n 添加新轮播素材\r\n </el-button>\r\n <el-button type=\"primary\" style=\"margin-left: 10px;\" :icon=\"EditPen\" @click=\"showAdDefineHandle()\">\r\n 设置素材显示尺寸\r\n </el-button>\r\n <el-button type=\"danger\" style=\"margin-left: 10px;\" :icon=\"Delete\" @click=\"deleteAdContentHandle(item.id)\">\r\n 删除当前素材\r\n </el-button>\r\n </div>\r\n </div>\r\n </el-carousel-item>\r\n </el-carousel>\r\n <el-empty v-else :image-size=\"80\" :style=\"{ height: partAdBannerHeight }\">\r\n <template #description>\r\n <el-text>暂无{{ title }}轮播素材数据</el-text>\r\n <el-button type=\"primary\" text style=\"margin-left: 10px;\" :icon=\"Plus\" @click=\"showAdDefineHandle()\">\r\n 设置素材显示尺寸\r\n </el-button>\r\n <el-button type=\"primary\" text style=\"margin-left: 10px;\" :icon=\"Plus\" @click=\"showAdContentHandle(null)\">\r\n 添加\r\n </el-button>\r\n </template>\r\n </el-empty>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { useCmsSettings } from \"../../../cms-settings\"\r\nimport { onMounted, reactive, ref, watch, defineProps, computed } from \"vue\";\r\nimport { DataViewRequest, DVQueryable, Where } from \"@maketribe/request\";\r\nimport { Dialoger, Messager } from \"@maketribe/dm\";\r\nimport { CmsAdContentsForm, CmsAdDefinesForm } from \"../../../dataviews\";\r\nimport { EditPen, Plus, Delete } from \"@element-plus/icons-vue\"\r\n\r\nconst props = defineProps({ adkey: { type: String }, title: { type: String }, deviceValue: { type: String, default: \"\" }, viewWidth: { type: Number } })\r\n\r\n// 广告定义数据表\r\nconst adRequest = new DataViewRequest({ name: \"ad-define\", moduleName: \"cms\" });\r\nconst adContentRequest = new DataViewRequest({ name: \"ad-content\", moduleName: \"cms\" });\r\n// cms 配置\r\nconst cmsSettings = useCmsSettings();\r\n// 栏目广告\r\nconst partAdBanner = ref<any | null>(null);\r\nconst loading = ref(true);\r\nconst adContentForm = reactive<CmsAdContentsForm>(new CmsAdContentsForm({ cutSise: cmsSettings.part.bannerImageSize }))\r\nconst adDefineForm = reactive<CmsAdDefinesForm>(new CmsAdDefinesForm())\r\nconst warpRef = ref<any | null>(null);\r\n// 计算广告的高度\r\nconst partAdBannerHeight = computed(() => {\r\n\r\n // 全局Banner尺寸信息\r\n const sizes = cmsSettings.part.bannerImageSize.split(\"*\") as Array<any>;\r\n\r\n // 宽高比\r\n let widthHeightRatio = 0;\r\n\r\n //设定的比例\r\n if (!!partAdBanner.value?.width && !!partAdBanner.value?.height) {\r\n widthHeightRatio = partAdBanner.value.width / partAdBanner.value.height;\r\n }\r\n else if (sizes.length && sizes[0] && sizes[1]) {\r\n widthHeightRatio = sizes[0] / sizes[1]\r\n }\r\n\r\n if (widthHeightRatio && props.viewWidth) { return (props.viewWidth / widthHeightRatio) + \"px\" }\r\n\r\n return \"240px\"\r\n\r\n})\r\n\r\n// 内容添加之前监测广告是否存在不存在先添加广告\r\nadContentForm.beforeSubmitEvent.on(async ({ data }) => {\r\n\r\n if (partAdBanner.value) {\r\n data.adDefineId = partAdBanner.value.id as any;\r\n }\r\n else {\r\n try {\r\n\r\n const widthAndHeight = cmsSettings.part.bannerImageSize.split(\"*\");\r\n // 添加广告\r\n const result = await adRequest.add({ key: props.adkey, desc: `${props.title}的Banner`, width: widthAndHeight[0], height: widthAndHeight[1] })\r\n\r\n if (result.data.code == 200) {\r\n partAdBanner.value = { id: result.data.data as string }\r\n data.adDefineId = result.data.data;\r\n }\r\n\r\n } catch (error) {\r\n Messager.error({ message: \"添加失败!\" });\r\n }\r\n }\r\n\r\n})\r\n\r\n//提交判断是否存在,判断更新还是添加\r\nadDefineForm.formatSubmitData = ((data) => {\r\n if (partAdBanner.value) {\r\n data.id = partAdBanner.value.id as any;\r\n } else {\r\n data.key = props.adkey\r\n data.desc = `${props.title}的Banner`\r\n }\r\n return data\r\n})\r\n\r\n// 添加完成则刷新\r\nadContentForm.submittedEvent.on(() => loadPartAdDefineData())\r\n// 添加完成则刷新\r\nadDefineForm.submittedEvent.on(() => loadPartAdDefineData())\r\n\r\n//加载栏目广告\r\nconst loadPartAdDefineData = async () => {\r\n\r\n try {\r\n\r\n loading.value = true;\r\n const where = new Where()\r\n where.addCondition(\"key\", \"=\", props.adkey);\r\n // 加载广告定义\r\n partAdBanner.value = (await adRequest.query({\r\n data: {\r\n pn: 1,\r\n pc: 1000000,\r\n condition: where\r\n }\r\n })).data.data?.[0] ?? null;\r\n\r\n if (partAdBanner.value?.width && partAdBanner.value?.width) {\r\n adContentForm.changeCutSise(`${partAdBanner.value.width}*${partAdBanner.value.height}`)\r\n }\r\n\r\n } catch (e) {\r\n console.error(e)\r\n } finally {\r\n loading.value = false;\r\n }\r\n}\r\n\r\n//显示栏目广告的编辑弹窗\r\nconst showAdContentHandle = async (id: any) => {\r\n await Dialoger.dataFormDialog({\r\n dataForm: adContentForm as CmsAdContentsForm,\r\n recId: id\r\n })\r\n}\r\n\r\n//显示栏目广告定义的编辑弹窗\r\nconst showAdDefineHandle = async () => {\r\n await Dialoger.dataFormDialog({\r\n title: \"设置素材显示尺寸\",\r\n dataForm: adDefineForm as CmsAdDefinesForm,\r\n recId: partAdBanner.value?.id\r\n })\r\n adDefineForm.getColumn(\"contents\")!.visible = false;\r\n adDefineForm.getColumn(\"key\")!.visible = false;\r\n adDefineForm.getColumn(\"desc\")!.visible = false;\r\n}\r\n\r\nconst deleteAdContentHandle = async (id: any) => {\r\n try {\r\n const isConfirm = await Dialoger.confirm({ title: \"确定删除?\", message: \"确定删除当前轮播吗?\", type: \"warning\" })\r\n if (!isConfirm) return;\r\n const result = await adContentRequest.delete(id)\r\n if (result.data.code != 200) {\r\n Messager.error({ message: result.data.msg || \"删除失败!\" })\r\n return\r\n };\r\n loadPartAdDefineData()\r\n } catch (error) {\r\n Messager.error({ message: \"删除失败!\" })\r\n }\r\n}\r\n\r\n// 组件挂载的时候\r\nonMounted(() => {\r\n watch(() => props.adkey, () => loadPartAdDefineData(), { immediate: true })\r\n})\r\n\r\n</script>\r\n<style lang='scss'></style>\r\n","<template>\r\n <div class=\"mk-cms-part-banner__warp\" v-if=\"cmsSettings.part.openBanner\" ref=\"warpElRef\">\r\n <el-tabs v-model=\"activePartAdType\">\r\n <el-tab-pane label=\"PC端\" name=\"pc\" v-if=\"cmsSettings.devices.includes('pc')\">\r\n <PartBannerComponent :adkey=\"`part_${partId}`\" :title=\"`${title}PC端`\" :viewWidth=\"warpElRef?.offsetWidth\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"移动端\" name=\"mobile\" v-if=\"cmsSettings.devices.includes('mobile')\">\r\n <PartBannerComponent :adkey=\"`part_${partId}_mobile`\" :title=\"`${title}移动端`\" :viewWidth=\"750\"\r\n style=\"max-width: 750px;margin: auto;\" />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { ref, defineProps } from \"vue\"\r\nimport { useCmsSettings } from \"../../../cms-settings\"\r\nimport PartBannerComponent from \"./part-banner.vue\"\r\n\r\ndefineProps({ partId: { type: String }, title: { type: String } })\r\n\r\n// cms 配置\r\nconst cmsSettings = useCmsSettings();\r\nconsole.log(cmsSettings.devices);\r\n// cms 配置\r\nconst warpElRef = ref<any>()\r\n// 栏目广告\r\nconst activePartAdType = ref(cmsSettings.devices[0])\r\n\r\n</script>\r\n","<template>\r\n <div class=\"mk-cms-contents__warp\" v-loading=\"loading\">\r\n <el-page-header style=\"background-color: #fff; padding: 10px\" :icon=\"null\">\r\n <template #title>\r\n <h3 style=\"color: var(--el-text-color-regular);\" m=\"l-[10px]\" flex=\"~ items-center\">\r\n <MKSvgIcon name=\"f7:doc-richtext\" m=\"r-[5px]\"/>\r\n 内容管理\r\n </h3>\r\n </template>\r\n <template #extra>\r\n <div class=\"flex items-center\">\r\n <el-button-group>\r\n <el-button type=\"primary\" size=\"large\" text v-if=\"CmsSettings.publish.mode == 'static'\"\r\n @click=\"publishAllPartHandle\">\r\n <MKSvgIcon name=\"ep:promotion\" m=\"r-[10]x\"/>\r\n 整站发布\r\n </el-button>\r\n <el-button type=\"primary\" size=\"large\" text @click=\"showPartFormHandle\">\r\n <MKSvgIcon name=\"ep:plus\" m=\"r-[10]x\"/>\r\n 新增栏目\r\n </el-button>\r\n </el-button-group>\r\n </div>\r\n </template>\r\n </el-page-header>\r\n <div class=\"mk-cms-contents__body\">\r\n <MKPartTree class=\"mk-cms-contents__body__left\" @select=\"selectPartHandle\" @edit=\"editPartHandle\"\r\n @add=\"showPartFormHandle\" @deleteSuccessfully=\"deletePartHandle\" ref=\"partTreeRef\"\r\n :curSelectId=\"curSelectPartId\" />\r\n <el-tabs v-if=\"curSelectPartItem\" v-model=\"activeTabName\" class=\"mk-cms-contents__body__right\">\r\n <div class=\"mk-cms-contents__body__right__action\">\r\n\r\n <template v-for=\"(ext, i) in partExList\" :label=\"ext.title || `页面扩展设置 ${i+1}`\" :name=\"\">\r\n <el-button type=\"primary\" text @click=\"ext.save()\" v-if=\"activeTabName == `part-ext${i}` && ext.save\">\r\n <MKSvgIcon name=\"carbon:save\" m=\"r-[5px]\" />\r\n 保存{{ ext.title }}\r\n </el-button>\r\n </template>\r\n <template v-if=\"activeTabName == 'part' || (activeTabName == 'part-content' && !partContentExtension?.component)\">\r\n <el-button type=\"primary\" text @click=\"savePartHandle()\" :disabled=\"!partDataForm?.isChanged\">\r\n <MKSvgIcon name=\"carbon:save\" m=\"r-[5px]\" />\r\n 保存\r\n </el-button>\r\n </template>\r\n <el-dropdown\r\n v-if=\"CmsSettings.publish.mode == 'static' && curSelectPartItem.coverTemplate || curSelectPartItem.listTemplate || curSelectPartItem.contentTemplate\">\r\n <span class=\"el-dropdown-link\">\r\n <el-button type=\"primary\" text>\r\n <MKSvgIcon name=\"ep:more-filled\" />\r\n </el-button>\r\n </span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"previewHandle()\"\r\n v-if=\"CmsSettings.publish.mode == 'static' && curSelectPartItem.coverTemplate\">\r\n <MKSvgIcon name=\"ep:view\" m=\"l-[10px]\" />\r\n 预览封面\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"previewHandle(1)\"\r\n v-if=\"curSelectPartItem.listTemplate\">\r\n <MKSvgIcon name=\"ep:view\" m=\"l-[10px]\" />\r\n 预览列表\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"showPublish = true\">\r\n <MKSvgIcon name=\"ep:promotion\" m=\"l-[10px]\" />\r\n 发布当前栏目\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <el-tab-pane label=\"文章列表\" name=\"article-list\" v-if=\"curSelectPartItem.contentTemplate\">\r\n <ArticleList v-if=\"activeTabName == 'article-list'\" :part=\"curSelectPartItem\" style=\"height: 99%;\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"栏目设置\" name=\"part\" v-loading=\"partDataForm.loading\">\r\n <PartInfo v-if=\"activeTabName == 'part'\" :part=\"curSelectPartItem\" ref=\"partInfoRef\"\r\n :partDataForm=\"partDataForm\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"页面内容\" name=\"part-content\" style=\"background-color: #f4f4f4\"\r\n v-if=\"curSelectPartItem.cmsPartTypeId != 1\">\r\n <!-- 存在内容扩展配置 -->\r\n <template v-if=\"partContentExtension && activeTabName == 'part-content'\">\r\n\r\n <!-- 都自定义扩展的话 -->\r\n <template v-if=\"partContentExtension.component && partContentExtension.adComponent\">\r\n <div style=\"background: #fff;margin-top: -10px;padding: 10px;box-sizing: border-box;\">\r\n <component :is=\"partContentExtension.adComponent\" />\r\n </div>\r\n <div style=\"background: #fff;\">\r\n <component :is=\"partContentExtension.component\" />\r\n </div>\r\n </template>\r\n <!-- 只扩展内容 -->\r\n <template v-if=\"partContentExtension.component && !partContentExtension.adComponent\">\r\n <PartBannerEdit v-if=\"partDataForm.data?.id\" :partId=\"partDataForm.data?.id\" :title=\"partDataForm.data?.title\" />\r\n <div style=\"background: #fff;margin-top: -10px;padding: 10px;box-sizing: border-box;\" v-if=\"partContentExtension.component\">\r\n <component :is=\"partContentExtension.component\" />\r\n </div>\r\n </template>\r\n <!-- 只扩展栏目广告栏 -->\r\n <template v-if=\"!partContentExtension.component && partContentExtension.adComponent\">\r\n <MKDocEditor :css=\"CmsSettings.part.doc.css\" :js=\"CmsSettings.part.doc.js\" :loading=\"partDataForm.loading\" namespace=\"cms-part\"\r\n :modelValue=\"partDataForm.data?.content\" placeholder=\"从这里开始写正文...\" @update:modelValue=\"docEditorChangeHandle\">\r\n <template #before-extentions>\r\n <div style=\"background: #fff;margin-bottom: 10px;\">\r\n <component :is=\"partContentExtension.adComponent\" />\r\n </div>\r\n </template>\r\n </MKDocEditor>\r\n </template>\r\n \r\n </template>\r\n\r\n <template v-else-if=\"activeTabName == 'part-content'\">\r\n <MKDocEditor :css=\"CmsSettings.part.doc.css\" :js=\"CmsSettings.part.doc.js\" :loading=\"partDataForm.loading\" namespace=\"cms-part\"\r\n :modelValue=\"partDataForm.data?.content\" @update:modelValue=\"docEditorChangeHandle\" placeholder=\"从这里开始写正文...\">\r\n <template #before-extentions>\r\n <PartBannerEdit v-if=\"partDataForm.data?.id\" :partId=\"partDataForm.data?.id\"\r\n :title=\"partDataForm.data?.title\" />\r\n </template>\r\n </MKDocEditor>\r\n </template>\r\n\r\n </el-tab-pane>\r\n <el-tab-pane v-for=\"(ext, i) in partExList\" :label=\"ext.title || `页面扩展设置 ${i == 0 ? '' : i}`\" :name=\"`part-ext${i}`\">\r\n <component :is=\"ext.component\" />\r\n </el-tab-pane>\r\n\r\n </el-tabs>\r\n <el-empty v-else description=\"请选择栏目\" style=\"width: 100%\" />\r\n </div>\r\n <el-dialog v-model=\"showPublish\" title=\"栏目发布\" width=\"475px\" :append-to-body=\"false\">\r\n <div class=\"mk-cms-contents__publish\">\r\n <div><span>是否发布列表:</span> <el-switch v-model=\"optionData.isPublishList\"\r\n :disabled=\"!curSelectPartItem.listTemplate\" /></div>\r\n <div><span>是否发布封面:</span> <el-switch v-model=\"optionData.isPublishCover\"\r\n :disabled=\"!curSelectPartItem.coverTemplate\" /></div>\r\n <div><span>是否发布内容:</span> <el-switch v-model=\"optionData.isPublishContent\"\r\n :disabled=\"!curSelectPartItem.contentTemplate\" /></div>\r\n <div><span>是否发布资源:</span> <el-switch v-model=\"optionData.isPublishAssets\" /></div>\r\n <div><span>是否强制发布:</span> <el-switch v-model=\"optionData.isCompulsion\" /></div>\r\n </div>\r\n <template #footer>\r\n <el-button @click=\"showPublish = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"publishPartHandle\" :loading=\"publishLoading\">确定</el-button>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { MKPartTree } from \"../../components\";\r\nimport ArticleList from \"./components/article-list.vue\";\r\nimport PartInfo from \"./components/part-info.vue\";\r\nimport PartBannerEdit from \"./components/part-banner-edit.vue\";\r\nimport { MKDocEditor } from \"../../../../components\";\r\nimport { reactive, ref,shallowRef, watch, watchEffect } from \"vue\";\r\nimport { Dialoger, Messager } from \"@maketribe/dm\";\r\nimport { CmsContentManPartForm, CmsPartForm, CmsPartMiniForm } from \"../../dataviews/cms-parts\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { usePartExtensionList, usePartContentComponent, type PartExtension } from \"../../composables/part-extensions\"\r\nimport { ElSwitch } from \"element-plus\";\r\nimport { useCmsSettings } from \"../../cms-settings\"\r\nimport {MKSvgIcon} from \"../../../../components/basic\";\r\n//路由 \r\nconst route = useRoute();\r\nconst router = useRouter();\r\n\r\n// 当前选中的栏目id\r\nconst curSelectPartId = ref<string>(route.query.pid as string)\r\nwatch(() => route.query.pid, (v: any) => {\r\n curSelectPartId.value = v\r\n}, { immediate: true });\r\n\r\n//栏目Mini表单\r\nconst partMiniForm = reactive<CmsPartMiniForm>(new CmsPartMiniForm());\r\n\r\n// cms 配置\r\nconst CmsSettings = useCmsSettings(true);\r\n\r\n//发布栏目时的配置\r\nconst showPublish = ref(false)\r\n\r\n//发布配置项\r\nconst optionData = ref({\r\n isPublishList: false,\r\n isPublishCover: false,\r\n isPublishContent: false,\r\n isPublishAssets: false,\r\n isCompulsion: true\r\n});\r\n\r\n//发布加载状态\r\nconst publishLoading = ref(false);\r\n\r\n// 数据加载状态\r\nconst loading = ref(false)\r\n\r\n// 激活的tab\r\nconst activeTabName = ref(\"article-list\");\r\n\r\n// 当前选中的菜单\r\nconst curSelectPartItem = ref(null as any);\r\n\r\n// 栏目树ref\r\nconst partTreeRef = ref(null);\r\n\r\n//栏目扩展\r\nconst partExList = shallowRef<Array<PartExtension>>([]);\r\nconst partContentExtension = shallowRef<any>(null)\r\n\r\n//栏目数据\r\nconst partDataForm = reactive(new CmsContentManPartForm()) as CmsContentManPartForm;\r\n\r\n// 初始化表单\r\npartDataForm.init();\r\n\r\n// 切换tab 加载栏目表单数据\r\nlet beforeInitFormPart: any = null;\r\nwatchEffect(async () => {\r\n if ((activeTabName.value == \"part\" || activeTabName.value == \"part-content\") && curSelectPartItem.value != beforeInitFormPart && curSelectPartItem.value) {\r\n try {\r\n beforeInitFormPart = curSelectPartItem.value;\r\n await partDataForm.editRecord(curSelectPartItem.value.id);\r\n } catch (error) {\r\n console.log(132)\r\n console.log(error)\r\n }\r\n }\r\n});\r\n\r\n// 选择栏目\r\nconst selectPartHandle = async (item: any) => {\r\n\r\n if (curSelectPartItem.value != item) {\r\n\r\n curSelectPartItem.value = item;\r\n\r\n if (!curSelectPartItem.value.contentTemplate) {\r\n activeTabName.value = \"part\";\r\n }\r\n else {\r\n activeTabName.value = \"article-list\";\r\n }\r\n router.replace({ name: 'cms/contents', query: { pid: curSelectPartItem.value.id } } as any)\r\n partExList.value = usePartExtensionList(curSelectPartItem.value.id).concat(usePartExtensionList(curSelectPartItem.value.name));\r\n partContentExtension.value = usePartContentComponent(curSelectPartItem.value.id) || usePartContentComponent(curSelectPartItem.value.name)\r\n }\r\n};\r\n\r\n//删除栏目\r\nconst deletePartHandle = (item: any) => {\r\n if (item.id == curSelectPartItem.value.id) {\r\n curSelectPartItem.value = null;\r\n }\r\n};\r\n\r\n//编辑栏目\r\nconst editPartHandle = (item: any) => {\r\n curSelectPartItem.value = item;\r\n activeTabName.value = \"part\";\r\n};\r\n\r\n/**\r\n * 显示添加栏目表单\r\n */\r\nconst showPartFormHandle = async (item?: any) => {\r\n await Dialoger.dataFormDialog({\r\n dataForm: partMiniForm as CmsContentManPartForm,\r\n });\r\n\r\n if (item.id) {\r\n partMiniForm.addRecord({ parentId: item.id });\r\n }\r\n\r\n};\r\n\r\nwatch(showPublish, async (v) => {\r\n if (v) {\r\n console.log(2)\r\n optionData.value.isPublishList = !!curSelectPartItem.value.listTemplate\r\n optionData.value.isPublishCover = !!curSelectPartItem.value.coverTemplate\r\n optionData.value.isPublishContent = !!curSelectPartItem.value.contentTemplate\r\n }\r\n})\r\n\r\n//监听表单完成事件\r\npartMiniForm.submittedEvent.on(({ response }: any) => {\r\n if (response.data.data) {\r\n // 重置选中\r\n curSelectPartId.value = response.data.data;\r\n // 刷新完成直接选中\r\n (partTreeRef.value! as any).dataTree?.load();\r\n }\r\n\r\n});\r\n\r\n//栏目发布\r\nconst publishAllPartHandle = async () => {\r\n\r\n try {\r\n\r\n loading.value = true;\r\n\r\n await CmsPartForm.publishAll()\r\n }\r\n finally {\r\n loading.value = false;\r\n }\r\n\r\n}\r\nconst publishPartHandle = async () => {\r\n\r\n try {\r\n //表单未保存,默认保存\r\n try{\r\n if(partDataForm.isChanged){\r\n await savePartHandle()\r\n }\r\n }catch{\r\n Messager.error({\r\n message:\"保存失败\"\r\n })\r\n return \r\n }\r\n\r\n publishLoading.value = true\r\n\r\n await CmsPartForm.publish(curSelectPartItem.value.id, optionData.value);\r\n\r\n showPublish.value = false;\r\n\r\n } finally {\r\n publishLoading.value = false\r\n }\r\n}\r\n\r\n/**\r\n * 预览\r\n */\r\nconst previewHandle =async (num?:string|number)=>{\r\n if(partDataForm.isChanged){\r\n await savePartHandle()\r\n }\r\n if(num){\r\n CmsPartForm.openPreview(curSelectPartItem.value.id, '1')\r\n }else{\r\n CmsPartForm.openPreview(curSelectPartItem.value.id)\r\n }\r\n}\r\n\r\n/**\r\n * 保存栏目信息\r\n */\r\nconst savePartHandle = async () => {\r\n curSelectPartItem.value = partDataForm.data;\r\n await partDataForm.submit();\r\n}\r\n\r\n/**\r\n * 更新编辑器内容\r\n * @param v 内容\r\n */\r\nconst docEditorChangeHandle = (v: any) => {\r\n if(partDataForm.data){\r\n partDataForm.data.content = v\r\n }\r\n}\r\n</script>\r\n"],"names":["PartTree"],"mappings":"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"}
1
+ {"version":3,"file":"index-CZ8jfaGv.js","sources":["../../src/modules/cms/components/part-tree/index.vue","../../src/modules/cms/components/part-tree/index.ts","../../src/modules/cms/pages/cms-contents/components/article-list.vue","../../src/modules/cms/pages/cms-contents/components/part-info.vue","../../src/modules/cms/pages/cms-contents/components/part-banner.vue","../../src/modules/cms/pages/cms-contents/components/part-banner-edit.vue","../../src/modules/cms/pages/cms-contents/index.vue"],"sourcesContent":["<template>\r\n <div class=\"cms-part-tree\">\r\n <div class=\"cms-part-tree__header\">\r\n <div>\r\n <MKSvgIcon name=\"ep:notebook\" />\r\n 栏目\r\n </div>\r\n <el-switch v-model=\"isDrag\" inline-prompt active-text=\"开启排序\"\r\n inactive-text=\"关闭排序\" />\r\n </div>\r\n <div class=\"cms-part-tree__body\">\r\n <ElScrollbar style=\"height: 100%;\">\r\n <MKDataTable :auto-load=\"true\" :data-table=\"dataTree\" highlight-current>\r\n <MKTree :data-tree=\"dataTree\" @nodeClick=\"selectPart\" defaultExpandAll :draggable=\"isDrag\" ref=\"treeRef\" :currentNodeKey=\"selectNodeId\">\r\n <template #node-main=\"{ data }\">\r\n {{ data.data.title }}\r\n </template>\r\n <template #node-tools=\"{ data }\">\r\n <el-dropdown>\r\n <ElIcon>\r\n <MoreFilled />\r\n </ElIcon>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :icon=\"Edit\" @click=\"handleEditClick(data.data)\">编辑</el-dropdown-item>\r\n <el-dropdown-item :icon=\"Delete\" @click=\"handleDeleteClick(data.data)\">删除</el-dropdown-item>\r\n <el-dropdown-item v-if=\"data.data.cmsPartTypeId != 1\" :icon=\"Plus\"\r\n @click=\"handleAddClick(data.data)\">添加子菜单</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </template>\r\n </MKTree>\r\n </MKDataTable>\r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n</template>\r\n<script setup lang='ts'>\r\nimport { ElMessageBox, ElScrollbar } from \"element-plus\"\r\nimport { Plus, Edit, Delete, MoreFilled } from \"@element-plus/icons-vue\";\r\nimport { reactive, defineProps, watch, defineEmits, ref } from \"vue\";\r\nimport { MKDataTable, MKTree } from \"../../../../components/data-model/data-table\"\r\nimport { CmsPartTree } from \"../../dataviews\";\r\nimport { useI18n } from \"../../../../composables\";\r\nimport { DataTreeNode } from \"@maketribe/dm\";\r\nimport {MKSvgIcon} from \"../../../../components/basic\";\r\n\r\ndefineOptions({ name: \"MKPartTree\" });\r\nconst treeRef = ref(null);\r\n// 配置选项\r\nconst optionSettings = defineProps<{\r\n curSelectId?:string|undefined\r\n}>();\r\n\r\n// 事件定义\r\nconst emit = defineEmits([\"edit\", \"add\", \"deleteSuccessfully\", \"select\"]);\r\n\r\nconst i18n = useI18n()!;\r\nconst dataTree = reactive(new CmsPartTree()) as CmsPartTree;\r\n\r\nconst isDrag = ref(false)\r\n\r\nconst selectNodeId = ref(optionSettings.curSelectId);\r\n\r\nwatch(()=>optionSettings.curSelectId,()=>{\r\n selectNodeId.value = optionSettings.curSelectId\r\n})\r\n\r\n// 监听数据变化\r\ndataTree.listChangeEvent.on(() => {\r\n\r\n const list = dataTree.getList();\r\n\r\n if (list.length > 0) {\r\n //默认选择第一条\r\n if(!selectNodeId.value){ selectNodeId.value = list[0].id; }\r\n\r\n for(let i=0;i<list.length;i++){\r\n\r\n let item = list[i]\r\n \r\n if(item.id == selectNodeId.value){\r\n emit(\"select\", item);\r\n break;\r\n }\r\n item.children?.forEach((child:any)=>list.push(child))\r\n\r\n }\r\n }\r\n})\r\n\r\n/**\r\n * 点击添加栏目按钮\r\n * @param item \r\n */\r\nconst handleAddClick = (item: any) => {\r\n emit(\"add\", item);\r\n}\r\n\r\n/**\r\n * 编辑栏目\r\n * @param item \r\n */\r\nconst handleEditClick = (item: any) => {\r\n emit(\"edit\", item);\r\n}\r\n/**\r\n * 删除栏目\r\n * @param item \r\n */\r\nconst handleDeleteClick = async (item: any) => {\r\n // 删除提示\r\n const isConfirm = await ElMessageBox.confirm(\r\n i18n.translate(\"mk.dataTablePage.deleteMessage\"),\r\n i18n.translate(\"mk.dataTablePage.deleteTitle\"),\r\n { type: \"warning\" }\r\n )\r\n\r\n if (!isConfirm) {\r\n return;\r\n }\r\n const result = await dataTree.deleteAfterRefresh(item.id);\r\n if (result.data.code == 200) {\r\n emit('deleteSuccessfully', item)\r\n }\r\n}\r\n\r\n/**\r\n * 选择栏目\r\n * @param data \r\n */\r\nconst selectPart = (data: DataTreeNode) => {\r\n emit(\"select\", data.data);\r\n}\r\n\r\ndefineExpose({ dataTree });\r\n\r\n\r\n</script>\r\n","import { withInstall } from \"@maketribe/utils\";\r\nimport PartTree from \"./index.vue\";\r\n\r\nexport const MKPartTree = withInstall(PartTree);\r\nexport default MKPartTree;\r\n","<template>\r\n <MKDataTable :data-table=\"articlesDv\" :auto-load=\"false\" class=\"mk-cms-article-list\">\r\n <el-empty v-if=\"part && part.cmsPartTypeId == 1\" description=\"外链栏目下无文章内容\" />\r\n <MKTableView v-else-if=\"part\" :data-table=\"articlesDv\">\r\n <el-scrollbar class=\"mk-cms-article-list__content\" style=\"box-sizing: border-box;font-size: 0;\"\r\n v-if=\"articlesDv.getList().length > 0\">\r\n <el-card class=\"mk-cms-article-list__item\" v-for=\"article in articlesDv.getList()\" :key=\"article.id\">\r\n <div class=\"mk-cms-article-list__item__content\">\r\n <div class=\"left\">\r\n <el-image class=\"cover-image\" :src=\"article.cover\" fit=\"contain\">\r\n <template #error>\r\n <MKSvgIcon iconClass=\"Picture\" />\r\n </template>\r\n </el-image>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"top\">\r\n <div class=\"title\" :title=\"article.title\"> {{ article.title }}</div>\r\n <div class=\"tags\">\r\n <el-tag class=\"tag\" v-if=\"CmsSettings.content.useTop && article.isTop == 1\"\r\n @click=\"changeArticleStatus(article, 'isTop', 0)\">置顶</el-tag>\r\n <el-tag class=\"tag\" v-if=\"CmsSettings.content.useNew && article.isNew == 1\"\r\n @click=\"changeArticleStatus(article, 'isNew', 0)\">最新</el-tag>\r\n <el-tag class=\"tag\" v-if=\"CmsSettings.content.useHotRecommend && article.isHotRecommend == 1\"\r\n @click=\"changeArticleStatus(article, 'isHotRecommend', 0)\">热门推荐</el-tag>\r\n <el-tag class=\"tag\" v-if=\"CmsSettings.content.usePartRecommend && article.isPartRecommend == 1\"\r\n @click=\"changeArticleStatus(article, 'isPartRecommend', 0)\">栏目推荐</el-tag>\r\n </div>\r\n </div>\r\n <div class=\"sub-title\" v-if=\"article.subTitle\" :title=\"article.subTitle\"> {{ article.subTitle }}</div>\r\n <div class=\"desc\">\r\n {{ article.desc }}\r\n </div>\r\n <div class=\"footer\">\r\n <div class=\"ext\">\r\n <div class=\"author\">\r\n <MKSvgIcon iconClass=\"UserFilled\"></MKSvgIcon>\r\n 作者 : {{ article.author || \"-\" }}\r\n </div>\r\n <div class=\"publish-time\" v-if=\"article.releaseDate\">\r\n <MKSvgIcon iconClass=\"Timer\"></MKSvgIcon>\r\n 新闻日期 : {{ article.releaseDate }}\r\n </div>\r\n </div>\r\n <div class=\"tools\">\r\n <el-button type=\"primary\" size=\"large\" @click=\"editArticleHandle(article)\" text>\r\n 编辑\r\n </el-button>\r\n <el-button type=\"danger\" size=\"large\" @click=\"deleteArticleHandle(article)\" text>\r\n 删除\r\n </el-button>\r\n <!-- <a v-if=\"CmsSettings.publish.mode == 'static' && article.url\" :href=\"article.url\" target=\"_blank\">\r\n <el-button type=\"primary\" size=\"large\" text>访问</el-button>\r\n </a> -->\r\n <a :href=\"'/api/cms/content/preview/content/' + article.cmsPartId + '/' + article.id\"\r\n v-if=\"CmsSettings.publish.mode == 'static'\" target=\"_blank\">\r\n <el-button type=\"primary\" size=\"large\" text>预览</el-button>\r\n </a>\r\n <el-dropdown>\r\n <el-button type=\"primary\" size=\"large\" text>\r\n 更多\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item v-if=\"CmsSettings.publish.mode == 'static' && article.url\">\r\n <a style=\"text-decoration: none;color: #606266;\"\r\n v-if=\"CmsSettings.publish.mode == 'static' && article.url\" :href=\"article.url\"\r\n target=\"_blank\">\r\n 访问\r\n </a>\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"publishArticleHandle(article)\">\r\n 发布\r\n </el-dropdown-item>\r\n <el-dropdown-item v-if=\"CmsSettings.content.useTop && article.isTop == 0\"\r\n @click=\"changeArticleStatus(article, 'isTop', 1)\">设为置顶</el-dropdown-item>\r\n <el-dropdown-item v-if=\"CmsSettings.content.useNew && article.isNew == 0\"\r\n @click=\"changeArticleStatus(article, 'isNew', 1)\">设为最新</el-dropdown-item>\r\n <el-dropdown-item v-if=\"CmsSettings.content.useHotRecommend && article.isHotRecommend == 0\"\r\n @click=\"changeArticleStatus(article, 'isHotRecommend', 1)\">设为热门推荐</el-dropdown-item>\r\n <el-dropdown-item v-if=\"CmsSettings.content.usePartRecommend && article.isPartRecommend == 0\"\r\n @click=\"changeArticleStatus(article, 'isPartRecommend', 1)\">设为栏目推荐</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </el-card>\r\n </el-scrollbar>\r\n <el-empty v-if=\"articlesDv.getList().length <= 0\" description=\"暂无文章内容\" />\r\n </MKTableView>\r\n </MKDataTable>\r\n</template>\r\n<script setup lang='ts'>\r\nimport { MKTableView } from \"../../../../../components\"\r\nimport { CmsArticlesTable, CmsArticlesForm } from \"../../../dataviews\"\r\nimport { reactive, defineProps, watch, onMounted } from \"vue\";\r\nimport { Dialoger, isWhereFilter, Messager } from '@maketribe/dm'\r\nimport { useRouter } from \"vue-router\";\r\nimport { useCmsSettings } from \"../../../cms-settings\"\r\n// cms 配置\r\nconst CmsSettings = useCmsSettings();\r\n\r\n// 文章\r\nconst articlesDv = reactive(new CmsArticlesTable()) as CmsArticlesTable;\r\n// 发布文章表单\r\nconst articleForm = reactive(new CmsArticlesForm()) as CmsArticlesForm;\r\n// 草稿文章\r\nconst draftArticleForm = reactive(new CmsArticlesForm()) as CmsArticlesForm;\r\n\r\n// 参数\r\nconst props = defineProps({\r\n part: { type: Object, default: null }\r\n})\r\n\r\nconst router = useRouter();\r\n\r\n//改变文章指定,最新,推荐状态\r\nconst changeArticleStatus = async (article: any, item: string, status: number) => {\r\n const text: Record<string, string[]> = {\r\n \"isTop\": ['取消置顶', '设为置顶'],\r\n \"isNew\": ['取消最新', '设为最新'],\r\n \"isHotRecommend\": ['取消热门推荐', '设为热门推荐'],\r\n \"isPartRecommend\": ['取消栏目推荐', '设为栏目推荐'],\r\n }\r\n\r\n const isConfirm = await Dialoger.confirm({\r\n title: \"修改文章状态\",\r\n message: `是否${text[item][status]}?`,\r\n type: \"warning\"\r\n })\r\n if (!isConfirm) {\r\n return\r\n }\r\n try {\r\n\r\n articlesDv.getLoadingManager().startLoading();\r\n await articleForm.editRecord(article.id)\r\n const isSuccess = await articleForm.simpleSubmit({\r\n id: article.id,\r\n [item]: status\r\n })\r\n\r\n if (isSuccess) {\r\n articlesDv.load();\r\n }\r\n } finally {\r\n articlesDv.getLoadingManager().completeLoading();\r\n }\r\n\r\n\r\n}\r\n\r\n// 初始化\r\nonMounted(() => {\r\n articleForm.init();\r\n draftArticleForm.init();\r\n\r\n // 监听栏目数据变化\r\n watch(() => props.part, (item: any) => {\r\n if (item.cmsPartTypeId != 1) {\r\n \r\n const dataFilter = articlesDv.dataFilter;\r\n\r\n if (isWhereFilter(dataFilter)) {\r\n\r\n const defaultGroup = dataFilter.getDefaultGroup();\r\n\r\n defaultGroup.clear();\r\n defaultGroup.addCondition(\"cmsPartId\", \"=\", item.id);\r\n // 只查草稿\r\n defaultGroup.addCondition(\"isDraft\", \"=\", 1);\r\n }\r\n\r\n articlesDv.load()\r\n }\r\n }, { immediate: true })\r\n})\r\n\r\n/**\r\n * 删除文章\r\n */\r\nconst deleteArticleHandle = async (item: any) => {\r\n const isConfirm = await Dialoger.confirm({\r\n title: \"删除文章?\",\r\n message: \"是否删除文章?\",\r\n type: \"warning\"\r\n })\r\n\r\n if (!isConfirm) { return; }\r\n await articlesDv.deleteAfterRefresh(item.id);\r\n}\r\n\r\n/**\r\n * 编辑文章\r\n */\r\nconst editArticleHandle = (item: any, isEdit = false) => {\r\n router.push({ path: \"/cms/article\", query: { id: isEdit ? undefined : item.id, partId: isEdit ? item.id : undefined } })\r\n}\r\n\r\n// 添加记录\r\narticlesDv.addRecordEvent.on(() => editArticleHandle(props.part, true))\r\n\r\n/**\r\n * fault文章\r\n * @param article \r\n */\r\nconst publishArticleHandle = async (article: any) => {\r\n\r\n try {\r\n\r\n if (await Dialoger.confirm({ title: \"文章发布\", message: \"是否发布文章?\", type: \"warning\" })) {\r\n\r\n articlesDv.getLoadingManager().startLoading();\r\n\r\n // 调用发布接口\r\n const response: any = await CmsArticlesForm.publish(CmsSettings.publish.mode, article.cmsPartId, article.id);\r\n\r\n if (response.data.code !== 200) {\r\n Messager.error({ message: response.data.msg });\r\n return;\r\n }\r\n\r\n Messager.success({ message: \"发布成功\" });\r\n }\r\n\r\n } finally {\r\n articlesDv.getLoadingManager().completeLoading();\r\n }\r\n}\r\n\r\n\r\n</script>\r\n","<template>\r\n <div class=\"mk-cms-part-info\">\r\n <MKDataForm :dataForm=\"partDataForm\" style=\"height: 100%;\">\r\n <MKForm :dataForm=\"partDataForm\">\r\n <div class=\"mk-cms-part-info__body__form\">\r\n <div class=\"mk-cms-part-info__body__form-options\">\r\n <ElScrollbar>\r\n <MKDataFormItem name=\"cmsPartTypeId\" v-if=\"hideHandle('cmsPartTypeId')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"parentId\" v-if=\"hideHandle('parentId')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"cmsCoverArticleId\" v-if=\"hideHandle('cmsCoverArticleId')\">\r\n </MKDataFormItem>\r\n <MKDataFormItem name=\"title\" v-if=\"hideHandle('title')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"name\" v-if=\"hideHandle('name')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"externalLink\" v-if=\"hideHandle('externalLink')\">\r\n </MKDataFormItem>\r\n <el-row :gutter=\"22\" justify=\"space-between\">\r\n <el-col :span=\"10\" v-if=\"hideHandle('isShowMenu')\">\r\n <MKDataFormItem name=\"isShowMenu\"></MKDataFormItem>\r\n </el-col>\r\n <el-col :span=\"10\" v-if=\"hideHandle('isHome')\">\r\n <MKDataFormItem name=\"isHome\"></MKDataFormItem>\r\n </el-col>\r\n </el-row>\r\n <template v-if=\"CmsSettings.publish.mode == 'static'\">\r\n <el-divider content-position=\"left\" v-if=\"hideHandle('coverRouter')\">路由配置</el-divider>\r\n <MKDataFormItem name=\"coverRouter\" v-if=\"hideHandle('coverRouter')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"listRouter\" v-if=\"hideHandle('listRouter')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"contentRouter\" v-if=\"hideHandle('contentRouter')\"></MKDataFormItem>\r\n <el-divider content-position=\"left\" v-if=\"hideHandle('coverTemplate')\">模版配置</el-divider>\r\n <MKDataFormItem name=\"coverTemplate\" v-if=\"hideHandle('coverTemplate')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"listTemplate\" v-if=\"hideHandle('listTemplate')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"contentTemplate\" v-if=\"hideHandle('contentTemplate')\">\r\n </MKDataFormItem>\r\n <el-divider content-position=\"left\" v-if=\"hideHandle('seoKeywords')\">SEO</el-divider>\r\n <MKDataFormItem name=\"seoKeywords\" v-if=\"hideHandle('seoKeywords')\"></MKDataFormItem>\r\n <MKDataFormItem name=\"seoDesc\" v-if=\"hideHandle('seoDesc')\"></MKDataFormItem>\r\n </template>\r\n \r\n </ElScrollbar>\r\n </div>\r\n </div>\r\n </MKForm>\r\n </MKDataForm>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { MKDataForm, MKForm, MKDataFormItem } from \"../../../../../components\";\r\nimport { CmsPartForm } from \"../../../dataviews/cms-parts/CmsPartForm\";\r\nimport { computed, reactive, Ref, watch } from \"vue\";\r\nimport { useCmsSettings } from \"../../../cms-settings\"\r\n// cms 配置\r\nconst CmsSettings = useCmsSettings();\r\nconst props = defineProps({\r\n part: {\r\n type: Object,\r\n default: () => {\r\n return {}\r\n }\r\n },\r\n partDataForm: {\r\n type: CmsPartForm,\r\n default: () => {\r\n return new CmsPartForm()\r\n }\r\n }\r\n})\r\n\r\n//监听保存成功事件\r\n// props.partDataForm.submittedEvent.on(() => {\r\n// props.partDataForm.editRecord(props.part.id)\r\n// })\r\n\r\n/**\r\n * 需要隐藏的行\r\n */\r\nconst hideHandle = (name: string) => {\r\n if (props.partDataForm.data.cmsPartTypeId == 1 && CmsPartForm.outerChainHideColumn.includes(name)) {\r\n return false;\r\n } \r\n else if (props.partDataForm.data.cmsPartTypeId == 2 && CmsPartForm.contentHideColumn.includes(name)) {\r\n return false;\r\n } \r\n else if (props.partDataForm.data.cmsPartTypeId == 3 && CmsPartForm.menuHideColumn.includes(name)) {\r\n props.partDataForm.data.isShowMenu = 1;\r\n return false;\r\n } \r\n else {\r\n return true;\r\n }\r\n}\r\n\r\n\r\n</script>\r\n<style lang='scss'></style>\r\n","<template>\r\n <div v-loading=\"loading\">\r\n <el-carousel v-if=\"partAdBanner && partAdBanner.contents?.length\" :autoplay=\"false\" :height=\"partAdBannerHeight\"\r\n arrow=\"always\" ref=\"carouselRef\">\r\n <el-carousel-item v-for=\"item in partAdBanner.contents\" :key=\"item.id\">\r\n <div class=\"mk-cms-part-banner__list_item\">\r\n <div class=\"mk-cms-part-banner__list_content\">\r\n <el-image class=\"mk-cms-part-banner__list_content_img\" v-if=\"item.type == 1\" :src=\"item.path\" fit=\"cover\"\r\n tyle=\"width: 100%;height: 100%;\">\r\n <div slot=\"placeholder\" class=\"image-slot\">\r\n 加载中<span class=\"dot\">...</span>\r\n </div>\r\n </el-image>\r\n <video class=\"video\" v-if=\"item.type == 2\" :src=\"item.path\" style=\"width: 100%;height: 100%;\"\r\n controls></video>\r\n </div>\r\n <div class=\"mk-cms-part-banner__list_bottom\">\r\n <div class=\"mk-cms-part-banner__list_title\">{{ item.title }}</div>\r\n <div>{{ item.desc }}</div>\r\n </div>\r\n <div class=\"mk-cms-part-banner__list_action-mask\">\r\n <el-button type=\"primary\" style=\"margin-left: 10px;\" :icon=\"EditPen\" @click=\"showAdContentHandle(item.id)\">\r\n 编辑当前轮播素材\r\n </el-button>\r\n <el-button type=\"primary\" style=\"margin-left: 10px;\" :icon=\"Plus\" @click=\"showAdContentHandle(null)\">\r\n 添加新轮播素材\r\n </el-button>\r\n <el-button type=\"primary\" style=\"margin-left: 10px;\" :icon=\"EditPen\" @click=\"showAdDefineHandle()\">\r\n 设置素材显示尺寸\r\n </el-button>\r\n <el-button type=\"danger\" style=\"margin-left: 10px;\" :icon=\"Delete\" @click=\"deleteAdContentHandle(item.id)\">\r\n 删除当前素材\r\n </el-button>\r\n </div>\r\n </div>\r\n </el-carousel-item>\r\n </el-carousel>\r\n <el-empty v-else :image-size=\"80\" :style=\"{ height: partAdBannerHeight }\">\r\n <template #description>\r\n <el-text>暂无{{ title }}轮播素材数据</el-text>\r\n <el-button type=\"primary\" text style=\"margin-left: 10px;\" :icon=\"Plus\" @click=\"showAdDefineHandle()\">\r\n 设置素材显示尺寸\r\n </el-button>\r\n <el-button type=\"primary\" text style=\"margin-left: 10px;\" :icon=\"Plus\" @click=\"showAdContentHandle(null)\">\r\n 添加\r\n </el-button>\r\n </template>\r\n </el-empty>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { useCmsSettings } from \"../../../cms-settings\"\r\nimport { onMounted, reactive, ref, watch, defineProps, computed } from \"vue\";\r\nimport { DataViewRequest, DVQueryable, Where } from \"@maketribe/request\";\r\nimport { Dialoger, Messager } from \"@maketribe/dm\";\r\nimport { CmsAdContentsForm, CmsAdDefinesForm } from \"../../../dataviews\";\r\nimport { EditPen, Plus, Delete } from \"@element-plus/icons-vue\"\r\n\r\nconst props = defineProps({ adkey: { type: String }, title: { type: String }, deviceValue: { type: String, default: \"\" }, viewWidth: { type: Number } })\r\n\r\n// 广告定义数据表\r\nconst adRequest = new DataViewRequest({ name: \"ad-define\", moduleName: \"cms\" });\r\nconst adContentRequest = new DataViewRequest({ name: \"ad-content\", moduleName: \"cms\" });\r\n// cms 配置\r\nconst cmsSettings = useCmsSettings();\r\n// 栏目广告\r\nconst partAdBanner = ref<any | null>(null);\r\nconst loading = ref(true);\r\nconst adContentForm = reactive<CmsAdContentsForm>(new CmsAdContentsForm({ cutSise: cmsSettings.part.bannerImageSize }))\r\nconst adDefineForm = reactive<CmsAdDefinesForm>(new CmsAdDefinesForm())\r\nconst warpRef = ref<any | null>(null);\r\n// 计算广告的高度\r\nconst partAdBannerHeight = computed(() => {\r\n\r\n // 全局Banner尺寸信息\r\n const sizes = cmsSettings.part.bannerImageSize.split(\"*\") as Array<any>;\r\n\r\n // 宽高比\r\n let widthHeightRatio = 0;\r\n\r\n //设定的比例\r\n if (!!partAdBanner.value?.width && !!partAdBanner.value?.height) {\r\n widthHeightRatio = partAdBanner.value.width / partAdBanner.value.height;\r\n }\r\n else if (sizes.length && sizes[0] && sizes[1]) {\r\n widthHeightRatio = sizes[0] / sizes[1]\r\n }\r\n\r\n if (widthHeightRatio && props.viewWidth) { return (props.viewWidth / widthHeightRatio) + \"px\" }\r\n\r\n return \"240px\"\r\n\r\n})\r\n\r\n// 内容添加之前监测广告是否存在不存在先添加广告\r\nadContentForm.beforeSubmitEvent.on(async ({ data }) => {\r\n\r\n if (partAdBanner.value) {\r\n data.adDefineId = partAdBanner.value.id as any;\r\n }\r\n else {\r\n try {\r\n\r\n const widthAndHeight = cmsSettings.part.bannerImageSize.split(\"*\");\r\n // 添加广告\r\n const result = await adRequest.add({ key: props.adkey, desc: `${props.title}的Banner`, width: widthAndHeight[0], height: widthAndHeight[1] })\r\n\r\n if (result.data.code == 200) {\r\n partAdBanner.value = { id: result.data.data as string }\r\n data.adDefineId = result.data.data;\r\n }\r\n\r\n } catch (error) {\r\n Messager.error({ message: \"添加失败!\" });\r\n }\r\n }\r\n\r\n})\r\n\r\n//提交判断是否存在,判断更新还是添加\r\nadDefineForm.formatSubmitData = ((data) => {\r\n if (partAdBanner.value) {\r\n data.id = partAdBanner.value.id as any;\r\n } else {\r\n data.key = props.adkey\r\n data.desc = `${props.title}的Banner`\r\n }\r\n return data\r\n})\r\n\r\n// 添加完成则刷新\r\nadContentForm.submittedEvent.on(() => loadPartAdDefineData())\r\n// 添加完成则刷新\r\nadDefineForm.submittedEvent.on(() => loadPartAdDefineData())\r\n\r\n//加载栏目广告\r\nconst loadPartAdDefineData = async () => {\r\n\r\n try {\r\n\r\n loading.value = true;\r\n const where = new Where()\r\n where.addCondition(\"key\", \"=\", props.adkey);\r\n // 加载广告定义\r\n partAdBanner.value = (await adRequest.query({\r\n data: {\r\n pn: 1,\r\n pc: 1000000,\r\n condition: where\r\n }\r\n })).data.data?.[0] ?? null;\r\n\r\n if (partAdBanner.value?.width && partAdBanner.value?.width) {\r\n adContentForm.changeCutSise(`${partAdBanner.value.width}*${partAdBanner.value.height}`)\r\n }\r\n\r\n } catch (e) {\r\n console.error(e)\r\n } finally {\r\n loading.value = false;\r\n }\r\n}\r\n\r\n//显示栏目广告的编辑弹窗\r\nconst showAdContentHandle = async (id: any) => {\r\n await Dialoger.dataFormDialog({\r\n dataForm: adContentForm as CmsAdContentsForm,\r\n recId: id\r\n })\r\n}\r\n\r\n//显示栏目广告定义的编辑弹窗\r\nconst showAdDefineHandle = async () => {\r\n await Dialoger.dataFormDialog({\r\n title: \"设置素材显示尺寸\",\r\n dataForm: adDefineForm as CmsAdDefinesForm,\r\n recId: partAdBanner.value?.id\r\n })\r\n adDefineForm.getColumn(\"contents\")!.visible = false;\r\n adDefineForm.getColumn(\"key\")!.visible = false;\r\n adDefineForm.getColumn(\"desc\")!.visible = false;\r\n}\r\n\r\nconst deleteAdContentHandle = async (id: any) => {\r\n try {\r\n const isConfirm = await Dialoger.confirm({ title: \"确定删除?\", message: \"确定删除当前轮播吗?\", type: \"warning\" })\r\n if (!isConfirm) return;\r\n const result = await adContentRequest.delete(id)\r\n if (result.data.code != 200) {\r\n Messager.error({ message: result.data.msg || \"删除失败!\" })\r\n return\r\n };\r\n loadPartAdDefineData()\r\n } catch (error) {\r\n Messager.error({ message: \"删除失败!\" })\r\n }\r\n}\r\n\r\n// 组件挂载的时候\r\nonMounted(() => {\r\n watch(() => props.adkey, () => loadPartAdDefineData(), { immediate: true })\r\n})\r\n\r\n</script>\r\n<style lang='scss'></style>\r\n","<template>\r\n <div class=\"mk-cms-part-banner__warp\" v-if=\"cmsSettings.part.openBanner\" ref=\"warpElRef\">\r\n <el-tabs v-model=\"activePartAdType\">\r\n <el-tab-pane label=\"PC端\" name=\"pc\" v-if=\"cmsSettings.devices.includes('pc')\">\r\n <PartBannerComponent :adkey=\"`part_${partId}`\" :title=\"`${title}PC端`\" :viewWidth=\"warpElRef?.offsetWidth\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"移动端\" name=\"mobile\" v-if=\"cmsSettings.devices.includes('mobile')\">\r\n <PartBannerComponent :adkey=\"`part_${partId}_mobile`\" :title=\"`${title}移动端`\" :viewWidth=\"750\"\r\n style=\"max-width: 750px;margin: auto;\" />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { ref, defineProps } from \"vue\"\r\nimport { useCmsSettings } from \"../../../cms-settings\"\r\nimport PartBannerComponent from \"./part-banner.vue\"\r\n\r\ndefineProps({ partId: { type: String }, title: { type: String } })\r\n\r\n// cms 配置\r\nconst cmsSettings = useCmsSettings();\r\nconsole.log(cmsSettings.devices);\r\n// cms 配置\r\nconst warpElRef = ref<any>()\r\n// 栏目广告\r\nconst activePartAdType = ref(cmsSettings.devices[0])\r\n\r\n</script>\r\n","<template>\r\n <div class=\"mk-cms-contents__warp\" v-loading=\"loading\">\r\n <el-page-header style=\"background-color: #fff; padding: 10px\" :icon=\"null\">\r\n <template #title>\r\n <h3 style=\"color: var(--el-text-color-regular);\" m=\"l-[10px]\" flex=\"~ items-center\">\r\n <MKSvgIcon name=\"f7:doc-richtext\" m=\"r-[5px]\"/>\r\n 内容管理\r\n </h3>\r\n </template>\r\n <template #extra>\r\n <div class=\"flex items-center\">\r\n <el-button-group>\r\n <el-button type=\"primary\" size=\"large\" text v-if=\"CmsSettings.publish.mode == 'static'\"\r\n @click=\"publishAllPartHandle\">\r\n <MKSvgIcon name=\"ep:promotion\" m=\"r-[10]x\"/>\r\n 整站发布\r\n </el-button>\r\n <el-button type=\"primary\" size=\"large\" text @click=\"showPartFormHandle\">\r\n <MKSvgIcon name=\"ep:plus\" m=\"r-[10]x\"/>\r\n 新增栏目\r\n </el-button>\r\n </el-button-group>\r\n </div>\r\n </template>\r\n </el-page-header>\r\n <div class=\"mk-cms-contents__body\">\r\n <MKPartTree class=\"mk-cms-contents__body__left\" @select=\"selectPartHandle\" @edit=\"editPartHandle\"\r\n @add=\"showPartFormHandle\" @deleteSuccessfully=\"deletePartHandle\" ref=\"partTreeRef\"\r\n :curSelectId=\"curSelectPartId\" />\r\n <el-tabs v-if=\"curSelectPartItem\" v-model=\"activeTabName\" class=\"mk-cms-contents__body__right\">\r\n <div class=\"mk-cms-contents__body__right__action\">\r\n\r\n <template v-for=\"(ext, i) in partExList\" :label=\"ext.title || `页面扩展设置 ${i+1}`\" :name=\"\">\r\n <el-button type=\"primary\" text @click=\"ext.save()\" v-if=\"activeTabName == `part-ext${i}` && ext.save\">\r\n <MKSvgIcon name=\"carbon:save\" m=\"r-[5px]\" />\r\n 保存{{ ext.title }}\r\n </el-button>\r\n </template>\r\n <template v-if=\"activeTabName == 'part' || (activeTabName == 'part-content' && !partContentExtension?.component)\">\r\n <el-button type=\"primary\" text @click=\"savePartHandle()\" :disabled=\"!partDataForm?.isChanged\">\r\n <MKSvgIcon name=\"carbon:save\" m=\"r-[5px]\" />\r\n 保存\r\n </el-button>\r\n </template>\r\n <el-dropdown\r\n v-if=\"CmsSettings.publish.mode == 'static' && curSelectPartItem.coverTemplate || curSelectPartItem.listTemplate || curSelectPartItem.contentTemplate\">\r\n <span class=\"el-dropdown-link\">\r\n <el-button type=\"primary\" text>\r\n <MKSvgIcon name=\"ep:more-filled\" />\r\n </el-button>\r\n </span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"previewHandle()\"\r\n v-if=\"CmsSettings.publish.mode == 'static' && curSelectPartItem.coverTemplate\">\r\n <MKSvgIcon name=\"ep:view\" m=\"l-[10px]\" />\r\n 预览封面\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"previewHandle(1)\"\r\n v-if=\"curSelectPartItem.listTemplate\">\r\n <MKSvgIcon name=\"ep:view\" m=\"l-[10px]\" />\r\n 预览列表\r\n </el-dropdown-item>\r\n <el-dropdown-item @click=\"showPublish = true\">\r\n <MKSvgIcon name=\"ep:promotion\" m=\"l-[10px]\" />\r\n 发布当前栏目\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n <el-tab-pane label=\"文章列表\" name=\"article-list\" v-if=\"curSelectPartItem.contentTemplate\">\r\n <ArticleList v-if=\"activeTabName == 'article-list'\" :part=\"curSelectPartItem\" style=\"height: 99%;\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"栏目设置\" name=\"part\" v-loading=\"partDataForm.loading\">\r\n <PartInfo v-if=\"activeTabName == 'part'\" :part=\"curSelectPartItem\" ref=\"partInfoRef\"\r\n :partDataForm=\"partDataForm\" />\r\n </el-tab-pane>\r\n <el-tab-pane label=\"页面内容\" name=\"part-content\" style=\"background-color: #f4f4f4\"\r\n v-if=\"curSelectPartItem.cmsPartTypeId != 1\">\r\n <!-- 存在内容扩展配置 -->\r\n <template v-if=\"partContentExtension && activeTabName == 'part-content'\">\r\n\r\n <!-- 都自定义扩展的话 -->\r\n <template v-if=\"partContentExtension.component && partContentExtension.adComponent\">\r\n <div style=\"background: #fff;margin-top: -10px;padding: 10px;box-sizing: border-box;\">\r\n <component :is=\"partContentExtension.adComponent\" />\r\n </div>\r\n <div style=\"background: #fff;\">\r\n <component :is=\"partContentExtension.component\" />\r\n </div>\r\n </template>\r\n <!-- 只扩展内容 -->\r\n <template v-if=\"partContentExtension.component && !partContentExtension.adComponent\">\r\n <PartBannerEdit v-if=\"partDataForm.data?.id\" :partId=\"partDataForm.data?.id\" :title=\"partDataForm.data?.title\" />\r\n <div style=\"background: #fff;margin-top: -10px;padding: 10px;box-sizing: border-box;\" v-if=\"partContentExtension.component\">\r\n <component :is=\"partContentExtension.component\" />\r\n </div>\r\n </template>\r\n <!-- 只扩展栏目广告栏 -->\r\n <template v-if=\"!partContentExtension.component && partContentExtension.adComponent\">\r\n <MKDocEditor :css=\"CmsSettings.part.doc.css\" :js=\"CmsSettings.part.doc.js\" :loading=\"partDataForm.loading\" namespace=\"cms-part\"\r\n :modelValue=\"partDataForm.data?.content\" placeholder=\"从这里开始写正文...\" @update:modelValue=\"docEditorChangeHandle\">\r\n <template #before-extentions>\r\n <div style=\"background: #fff;margin-bottom: 10px;\">\r\n <component :is=\"partContentExtension.adComponent\" />\r\n </div>\r\n </template>\r\n </MKDocEditor>\r\n </template>\r\n \r\n </template>\r\n\r\n <template v-else-if=\"activeTabName == 'part-content'\">\r\n <MKDocEditor :css=\"CmsSettings.part.doc.css\" :js=\"CmsSettings.part.doc.js\" :loading=\"partDataForm.loading\" namespace=\"cms-part\"\r\n :modelValue=\"partDataForm.data?.content\" @update:modelValue=\"docEditorChangeHandle\" placeholder=\"从这里开始写正文...\">\r\n <template #before-extentions>\r\n <PartBannerEdit v-if=\"partDataForm.data?.id\" :partId=\"partDataForm.data?.id\"\r\n :title=\"partDataForm.data?.title\" />\r\n </template>\r\n </MKDocEditor>\r\n </template>\r\n\r\n </el-tab-pane>\r\n <el-tab-pane v-for=\"(ext, i) in partExList\" :label=\"ext.title || `页面扩展设置 ${i == 0 ? '' : i}`\" :name=\"`part-ext${i}`\">\r\n <component :is=\"ext.component\" />\r\n </el-tab-pane>\r\n\r\n </el-tabs>\r\n <el-empty v-else description=\"请选择栏目\" style=\"width: 100%\" />\r\n </div>\r\n <el-dialog v-model=\"showPublish\" title=\"栏目发布\" width=\"475px\" :append-to-body=\"false\">\r\n <div class=\"mk-cms-contents__publish\">\r\n <div><span>是否发布列表:</span> <el-switch v-model=\"optionData.isPublishList\"\r\n :disabled=\"!curSelectPartItem.listTemplate\" /></div>\r\n <div><span>是否发布封面:</span> <el-switch v-model=\"optionData.isPublishCover\"\r\n :disabled=\"!curSelectPartItem.coverTemplate\" /></div>\r\n <div><span>是否发布内容:</span> <el-switch v-model=\"optionData.isPublishContent\"\r\n :disabled=\"!curSelectPartItem.contentTemplate\" /></div>\r\n <div><span>是否发布资源:</span> <el-switch v-model=\"optionData.isPublishAssets\" /></div>\r\n <div><span>是否强制发布:</span> <el-switch v-model=\"optionData.isCompulsion\" /></div>\r\n </div>\r\n <template #footer>\r\n <el-button @click=\"showPublish = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"publishPartHandle\" :loading=\"publishLoading\">确定</el-button>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { MKPartTree } from \"../../components\";\r\nimport ArticleList from \"./components/article-list.vue\";\r\nimport PartInfo from \"./components/part-info.vue\";\r\nimport PartBannerEdit from \"./components/part-banner-edit.vue\";\r\nimport { MKDocEditor } from \"../../../../components\";\r\nimport { reactive, ref,shallowRef, watch, watchEffect } from \"vue\";\r\nimport { Dialoger, Messager } from \"@maketribe/dm\";\r\nimport { CmsContentManPartForm, CmsPartForm, CmsPartMiniForm } from \"../../dataviews/cms-parts\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { usePartExtensionList, usePartContentComponent, type PartExtension } from \"../../composables/part-extensions\"\r\nimport { ElSwitch } from \"element-plus\";\r\nimport { useCmsSettings } from \"../../cms-settings\"\r\nimport {MKSvgIcon} from \"../../../../components/basic\";\r\n//路由 \r\nconst route = useRoute();\r\nconst router = useRouter();\r\n\r\n// 当前选中的栏目id\r\nconst curSelectPartId = ref<string>(route.query.pid as string)\r\nwatch(() => route.query.pid, (v: any) => {\r\n curSelectPartId.value = v\r\n}, { immediate: true });\r\n\r\n//栏目Mini表单\r\nconst partMiniForm = reactive<CmsPartMiniForm>(new CmsPartMiniForm());\r\n\r\n// cms 配置\r\nconst CmsSettings = useCmsSettings(true);\r\n\r\n//发布栏目时的配置\r\nconst showPublish = ref(false)\r\n\r\n//发布配置项\r\nconst optionData = ref({\r\n isPublishList: false,\r\n isPublishCover: false,\r\n isPublishContent: false,\r\n isPublishAssets: false,\r\n isCompulsion: true\r\n});\r\n\r\n//发布加载状态\r\nconst publishLoading = ref(false);\r\n\r\n// 数据加载状态\r\nconst loading = ref(false)\r\n\r\n// 激活的tab\r\nconst activeTabName = ref(\"article-list\");\r\n\r\n// 当前选中的菜单\r\nconst curSelectPartItem = ref(null as any);\r\n\r\n// 栏目树ref\r\nconst partTreeRef = ref(null);\r\n\r\n//栏目扩展\r\nconst partExList = shallowRef<Array<PartExtension>>([]);\r\nconst partContentExtension = shallowRef<any>(null)\r\n\r\n//栏目数据\r\nconst partDataForm = reactive(new CmsContentManPartForm()) as CmsContentManPartForm;\r\n\r\n// 初始化表单\r\npartDataForm.init();\r\n\r\n// 切换tab 加载栏目表单数据\r\nlet beforeInitFormPart: any = null;\r\nwatchEffect(async () => {\r\n if ((activeTabName.value == \"part\" || activeTabName.value == \"part-content\") && curSelectPartItem.value != beforeInitFormPart && curSelectPartItem.value) {\r\n try {\r\n beforeInitFormPart = curSelectPartItem.value;\r\n await partDataForm.editRecord(curSelectPartItem.value.id);\r\n } catch (error) {\r\n console.log(132)\r\n console.log(error)\r\n }\r\n }\r\n});\r\n\r\n// 选择栏目\r\nconst selectPartHandle = async (item: any) => {\r\n\r\n if (curSelectPartItem.value != item) {\r\n\r\n curSelectPartItem.value = item;\r\n\r\n if (!curSelectPartItem.value.contentTemplate) {\r\n activeTabName.value = \"part\";\r\n }\r\n else {\r\n activeTabName.value = \"article-list\";\r\n }\r\n router.replace({ name: 'cms/contents', query: { pid: curSelectPartItem.value.id } } as any)\r\n partExList.value = usePartExtensionList(curSelectPartItem.value.id).concat(usePartExtensionList(curSelectPartItem.value.name));\r\n partContentExtension.value = usePartContentComponent(curSelectPartItem.value.id) || usePartContentComponent(curSelectPartItem.value.name)\r\n }\r\n};\r\n\r\n//删除栏目\r\nconst deletePartHandle = (item: any) => {\r\n if (item.id == curSelectPartItem.value.id) {\r\n curSelectPartItem.value = null;\r\n }\r\n};\r\n\r\n//编辑栏目\r\nconst editPartHandle = (item: any) => {\r\n curSelectPartItem.value = item;\r\n activeTabName.value = \"part\";\r\n};\r\n\r\n/**\r\n * 显示添加栏目表单\r\n */\r\nconst showPartFormHandle = async (item?: any) => {\r\n await Dialoger.dataFormDialog({\r\n dataForm: partMiniForm as CmsContentManPartForm,\r\n });\r\n\r\n if (item.id) {\r\n partMiniForm.addRecord({ parentId: item.id });\r\n }\r\n\r\n};\r\n\r\nwatch(showPublish, async (v) => {\r\n if (v) {\r\n console.log(2)\r\n optionData.value.isPublishList = !!curSelectPartItem.value.listTemplate\r\n optionData.value.isPublishCover = !!curSelectPartItem.value.coverTemplate\r\n optionData.value.isPublishContent = !!curSelectPartItem.value.contentTemplate\r\n }\r\n})\r\n\r\n//监听表单完成事件\r\npartMiniForm.submittedEvent.on(({ response }: any) => {\r\n if (response.data.data) {\r\n // 重置选中\r\n curSelectPartId.value = response.data.data;\r\n // 刷新完成直接选中\r\n (partTreeRef.value! as any).dataTree?.load();\r\n }\r\n\r\n});\r\n\r\n//栏目发布\r\nconst publishAllPartHandle = async () => {\r\n\r\n try {\r\n\r\n loading.value = true;\r\n\r\n await CmsPartForm.publishAll()\r\n }\r\n finally {\r\n loading.value = false;\r\n }\r\n\r\n}\r\nconst publishPartHandle = async () => {\r\n\r\n try {\r\n //表单未保存,默认保存\r\n try{\r\n if(partDataForm.isChanged){\r\n await savePartHandle()\r\n }\r\n }catch{\r\n Messager.error({\r\n message:\"保存失败\"\r\n })\r\n return \r\n }\r\n\r\n publishLoading.value = true\r\n\r\n await CmsPartForm.publish(curSelectPartItem.value.id, optionData.value);\r\n\r\n showPublish.value = false;\r\n\r\n } finally {\r\n publishLoading.value = false\r\n }\r\n}\r\n\r\n/**\r\n * 预览\r\n */\r\nconst previewHandle =async (num?:string|number)=>{\r\n if(partDataForm.isChanged){\r\n await savePartHandle()\r\n }\r\n if(num){\r\n CmsPartForm.openPreview(curSelectPartItem.value.id, '1')\r\n }else{\r\n CmsPartForm.openPreview(curSelectPartItem.value.id)\r\n }\r\n}\r\n\r\n/**\r\n * 保存栏目信息\r\n */\r\nconst savePartHandle = async () => {\r\n curSelectPartItem.value = partDataForm.data;\r\n await partDataForm.submit();\r\n}\r\n\r\n/**\r\n * 更新编辑器内容\r\n * @param v 内容\r\n */\r\nconst docEditorChangeHandle = (v: any) => {\r\n if(partDataForm.data){\r\n partDataForm.data.content = v\r\n }\r\n}\r\n</script>\r\n"],"names":["PartTree"],"mappings":"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"}