index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. <!-- @desc:常用功能 @auth:常皓宁 @time:2024/5/10 14:47 -->
  2. <template>
  3. <div class="main-div" ref="mainDiv">
  4. <loading :loading="loading" v-if="!modalVisible"></loading>
  5. <BaseIndexButtonGroup ref="BaseIndexButtonGroup" id="BaseIndexButtonGroup">
  6. <template #left>
  7. <BaseIndexButton ref="search" name="search"></BaseIndexButton>
  8. <BaseIndexButton ref="edit" name="edit"></BaseIndexButton>
  9. </template>
  10. <template #right>
  11. </template>
  12. </BaseIndexButtonGroup>
  13. <!-- 表格部分 -->
  14. <div :style="'height: ' + (tableHeight + 30) + 'px'" class="split-div-class">
  15. <DkSplit v-model="split">
  16. <!-- 左边部分 -->
  17. <DkTable slot="left" ref="left-table" :data="leftData" :height="tableHeight + 30" :page-flag="false"
  18. :page-total-flag="false" :show-setting-flag="false" :freeze="false" :choose-flag="false"
  19. @current-change="currentChangeEvent($event)" primaryKey="gradeCode">
  20. <DkTableColumn field="gradeCode" :filter="false" :sortable="false" :center-flag="true"/>
  21. <DkTableColumn field="gradeName" :filter="false" :sortable="false" :center-flag="true"/>
  22. </DkTable>
  23. <!-- 常用功能 -->
  24. <DkTable slot="right" :id="'table-' + $options.name" ref="right-table"
  25. :data="menuData"
  26. :pageFlag="true"
  27. :page-total="pageInfo.total" :current-page="pageInfo.currentPage" :choose-flag="false"
  28. :height="this.tableHeight" primaryKey="menuUuid" @pageChange="pageSizeChange">
  29. <DkTableColumn field="appName"></DkTableColumn>
  30. <DkTableColumn field="menuName"></DkTableColumn>
  31. </DkTable>
  32. </DkSplit>
  33. </div>
  34. <!--新建编辑-->
  35. <DkModal
  36. :loading="loading"
  37. v-model="editAddModal"
  38. ref="modal_editAdd"
  39. @on-visible-change="handleVisibleModal"
  40. @modalOk="save"
  41. :saveFlag="true"
  42. :title="modalTitle"
  43. :width="1200"
  44. >
  45. <DkForm ref="formInline" v-model="formData" :col-count="1">
  46. <!--活动版本-->
  47. <DkFormItem prop="gradeName">
  48. <InputPop v-model="formData.gradeName" :readonly="true"/>
  49. </DkFormItem>
  50. <!--功能展示-->
  51. <DkRow style="margin-left: 0px">
  52. <!--功能一览-->
  53. <Col>
  54. <DkTabs v-model="tabValue" :options="tabList" @on-click="handleChangeTabs">
  55. <div style="height: 600px;overflow:auto" v-for="(item, index) of appList" :key="index"
  56. :slot="item.appCode">
  57. <div class="main-class">
  58. <el-collapse v-model="model" @change="handleChange(null)">
  59. <dk-el-collapse-item v-for="(it,index) in parentData.filter(f => f.appCode == item.appCode)"
  60. :key="index" :title="it[name]" :name="it.id"
  61. :ref="'collapseItem_' + it.id" :id="it.id" :checked="it.checked"
  62. v-if="tabValue==item.appCode"
  63. @on-change="(checked, id)=>handleChangeCheckbox(checked, id,it[name])"
  64. :disabled="disabled"
  65. style="width: 700px;">
  66. <div v-for="(tIt,tIndex) in data.filter(item=>item.parentId == it.id)" :key="tIndex">
  67. <!--子级-->
  68. <MasterSlaveCheckbox v-if="tIt[funcFlag]" :item="tIt" :name="name" :checked="tIt.checked"
  69. :disabled="disabled"
  70. :child-data="data.filter(item=>item.parentId == tIt.id)"
  71. @on-change="handleChangeCheckbox1()"
  72. ref="checkbox"></MasterSlaveCheckbox>
  73. </div>
  74. </dk-el-collapse-item>
  75. </el-collapse>
  76. </div>
  77. </div>
  78. </DkTabs>
  79. </Col>
  80. <!--常用功能-->
  81. <Col>
  82. <DkRow style="margin-left: 0px">
  83. <DkTable v-show="showTable" :id="'table-' + $options.name" ref="table-select"
  84. :data="useMenuData"
  85. :width="500"
  86. :pageFlag="false"
  87. :choose-flag="false"
  88. primaryKey="menuUuid">
  89. <DkTableColumn field="menuName"></DkTableColumn>
  90. </DkTable>
  91. </DkRow>
  92. </Col>
  93. </DkRow>
  94. </DkForm>
  95. </DkModal>
  96. </div>
  97. </template>
  98. <script>
  99. import MasterSlaveCheckbox from '@/components/modal/dk-function/master-slave-checkbox'
  100. import DkElCollapseItem from '@/components/modal/dk-function/dk-el-collapse-item'
  101. import {indexMixin} from '@/mixins'
  102. export default {
  103. name: "com-menu",
  104. mixins: [indexMixin],
  105. components: {MasterSlaveCheckbox, DkElCollapseItem},
  106. data() {
  107. let self = this
  108. return {
  109. showTable: true,
  110. modalTitle: '',//新建编辑弹窗名称
  111. formData: {
  112. gradeCode: null,
  113. gradeName: null,
  114. },
  115. split: 0.15,
  116. minSplit: 0.15,
  117. // gradeList: [],
  118. leftData: [],
  119. menuData: [],
  120. useMenuData: [],
  121. title: '',
  122. funcFlag: 'flgMenu',
  123. name: 'menuName',
  124. loading: false,
  125. visible: false,//显示控制,
  126. okFunc: () => {
  127. },//确定回调
  128. model: [],
  129. collapseFlag: true,
  130. parentData: [],
  131. data: [],
  132. collapseItems: [],
  133. collapseIds: [],
  134. disabled: false,
  135. tabValue: 'CP-WEB',
  136. appList: [],
  137. tabList: [],
  138. tableRef: 'left-table',
  139. appCode: 'CP-WEB'
  140. }
  141. },
  142. methods: {
  143. /**
  144. * @desc : 加载数据
  145. * @author : 常皓宁
  146. * @date : 2024/4/30 9:02
  147. */
  148. initData() {
  149. // 获取应用
  150. this.getApplication()
  151. },
  152. /**
  153. * @desc : 获取应用
  154. * @author : 洪旭东
  155. * @date : 2023-06-30 15:02
  156. */
  157. getApplication() {
  158. this.excute(this.$service.commonService, this.$service.commonService.getApplication, {}).then(res => {
  159. if (res.code === this.$config.SUCCESS_CODE) {
  160. let data = res.data.filter(it => it.appCode != 'DK-WEB')
  161. this.appList = data
  162. this.tabList = data.map(m => {
  163. return {
  164. label: m.appName,
  165. name: m.appCode
  166. }
  167. })
  168. }
  169. })
  170. },
  171. /**
  172. * @desc : 获取数据
  173. * @author : 常皓宁
  174. * @date : 2024/3/9 10:55
  175. */
  176. getData(params) {
  177. // 查询数据
  178. this.excute(this.$service.commonService, this.$service.commonService.getGrade, params).then(res => {
  179. if (res.code === this.$config.SUCCESS_CODE) {
  180. let gradeData = res.data.filter(it => it.gradeCode === 'STD' || it.gradeCode === 'PRO')
  181. // this.gradeList = gradeData
  182. this.leftData = gradeData
  183. }
  184. })
  185. this.loading = false
  186. },
  187. /**
  188. * @desc : 左侧列表行变化事件
  189. * @author : 常皓宁
  190. * @date : 2024/1/31 9:03
  191. */
  192. currentChangeEvent({row}) {
  193. if (row != null) {
  194. let params = {
  195. gradeCode: row.gradeCode
  196. }
  197. this.excute(this.$service.comMenuService, this.$service.comMenuService.selectByCond, params).then(res => {
  198. if (res.code === this.$config.SUCCESS_CODE) {
  199. this.menuData = res.data.list
  200. }
  201. })
  202. }
  203. },
  204. /**
  205. * @desc : 新建按钮点击事件
  206. * @author : 常皓宁
  207. * @date : 2024/1/31 9:19
  208. */
  209. edit() {
  210. this.modalTitle = this.setTitle(this.$config.formMode.edit, '常用功能')
  211. let row = this.$refs['left-table'].$refs.table.getCurrentRecord()
  212. if (row) {
  213. this.formData.gradeCode = row.gradeCode
  214. this.formData.gradeName = row.gradeName
  215. }
  216. this.getAppMenu(this.formData.gradeCode)
  217. this.modalParams.clearFlag = false
  218. this.modalParams.closeFlag = true
  219. this.modalParams.button = 'edit'
  220. },
  221. /**
  222. * @desc : 保存
  223. * @author : 常皓宁
  224. * @date : 2024/3/9 15:51
  225. */
  226. saveData() {
  227. let useMenuData = this.useMenuData
  228. let displayNo = 1
  229. useMenuData.map(row => {
  230. let item = row
  231. this.$set(item, 'gradeCode', this.formData.gradeCode)
  232. this.$set(item, 'displayNo', displayNo)
  233. displayNo++
  234. return item
  235. })
  236. let params = useMenuData
  237. //编辑
  238. if (this.modalParams.button === this.$config.formMode.edit) {
  239. return this.excute(this.$service.comMenuService, this.$service.comMenuService.update, params)
  240. }
  241. },
  242. /**
  243. * @desc : 勾选节点上的选择框
  244. * @author : 周兴
  245. * @date : 2022/12/29 16:52
  246. */
  247. handleChangeCheckbox(checked, id, name) {
  248. let item = {id: id, checked: checked, menuName: name};
  249. let filterRows = this.data.filter(it => it.id === id);
  250. if (filterRows && filterRows.length > 0) {
  251. filterRows[0].checked = checked;
  252. }
  253. this.data.update(item, 'id', 'checked', 'parentId');
  254. this.$forceUpdate()
  255. if (checked) {
  256. this.useMenuData.push(item)
  257. } else {
  258. this.useMenuData = this.useMenuData.filter(it => it.id !== item.id)
  259. }
  260. },
  261. /**
  262. * @desc : 勾选节点上的选择框
  263. * @author : 周兴
  264. * @date : 2022/12/29 16:52
  265. */
  266. handleChangeCheckbox1() {
  267. let list = []
  268. if (this.appCode == 'CP-WEB') {
  269. for (let re of this.$refs.checkbox) {
  270. list = list.concat(re.data.filter(item => item.checked))
  271. }
  272. this.useMenuData = list
  273. } else {
  274. let filters = this.$refs.checkbox.filter(it => it.checked)
  275. filters.forEach(it => {
  276. list.push(it.itemData)
  277. })
  278. this.useMenuData = list
  279. }
  280. },
  281. /**
  282. * @desc : 获取节点的ref
  283. * @author : 周兴
  284. * @date : 2022/12/29 13:54
  285. */
  286. getCollapseItems() {
  287. let items = this.data.filter(it => !it[this.funcFlag]);
  288. if (items && items.length > 0) {
  289. items.forEach(it => {
  290. this.collapseItems.push('collapseItem_' + it.id)
  291. this.collapseIds.push(it.id)
  292. })
  293. }
  294. },
  295. /**
  296. * @desc : 切换应用
  297. * @author : 付斌
  298. * @date : 2024-06-11 11:04
  299. */
  300. handleChangeTabs(val) {
  301. this.appCode = val;
  302. this.getAppMenu(this.formData.gradeCode)
  303. },
  304. /**
  305. * @desc : 获取功能
  306. * @author : 常皓宁
  307. * @date : 2024/5/11 13:42
  308. */
  309. getAppMenu(gradeCode) {
  310. let params = {
  311. gradeCode: gradeCode,
  312. appCode: this.appCode,
  313. }
  314. this.excute(this.$service.commonService, this.$service.commonService.getAppMenu, params).then(res => {
  315. if (res.code === this.$config.SUCCESS_CODE) {
  316. this.data = res.data.list
  317. // 先过滤顶级
  318. this.parentData = this.data?.filter(it => !it.parentId);
  319. this.editAddModal = true
  320. this.useMenuData = this.data.filter(it => it.checked);
  321. // this.$refs['table-select'].reloadData(this.useMenuData);
  322. if (this.collapseFlag) {
  323. this.model = this.data.map(it => it.id)
  324. } else {
  325. this.model = []
  326. }
  327. this.$nextTick(() => {
  328. this.getCollapseItems();
  329. })
  330. } else {
  331. this.$Message.warning(res.message)
  332. }
  333. })
  334. },
  335. },
  336. created() {
  337. this.primaryKey = 'gradeCode' // 设置主键Id
  338. this.routeObjName = 'comMenu' // 设置路由名称
  339. },
  340. }
  341. </script>
  342. <style scoped>
  343. </style>