tableDemo.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <template>
  2. <div class="tableDemo">
  3. <div class="table-for-max-box">
  4. <div class="table-title-box">
  5. <p>模块菜单</p>
  6. <p>权限</p>
  7. </div>
  8. <div class="table-for-big-box" v-for="(maxItem,maxIndex) in menuList" :key="maxIndex">
  9. <div class="max-title-box" :class="!maxItem.children?'max-title-box-null':''">
  10. <p><el-checkbox v-model="maxItem.checkType">{{maxItem.menuName}}</el-checkbox></p>
  11. </div>
  12. <div class="max-right-box">
  13. <div class="big-box" v-for="(bigItem,bigIndex) in maxItem.children" :key="bigIndex">
  14. <div class="big-title-box" :class="!bigItem.children?'big-title-box-null':''">
  15. <p><el-checkbox v-model="bigItem.checkType">{{bigItem.menuName}}</el-checkbox></p>
  16. </div>
  17. <div class="big-right-box" v-if="bigItem.children">
  18. <div class="min-box" v-for="(minItem,minIndex) in bigItem.children" :key="minIndex">
  19. <div class="min-title-box">
  20. <p><el-checkbox v-model="minItem.checkType">{{minItem.menuName}}</el-checkbox></p>
  21. </div>
  22. <div class="min-right-box" v-if="minItem.checkType">
  23. <div class="scope-box">
  24. <p>
  25. <el-checkbox v-model="minItem.scopeCheckType" style="margin-right:40px;">数据范围</el-checkbox>
  26. <el-select v-model="minItem.value" :disabled="!minItem.scopeCheckType" placeholder="请选择">
  27. <el-option :key="0" label="所有数据" :value="0"></el-option>
  28. <el-option :key="1" label="本部门及下级部门数据" :value="1"></el-option>
  29. <el-option :key="2" label="本部门及指定部门数据" :value="2"></el-option>
  30. <el-option :key="3" label="当前账号数据" :value="3"></el-option>
  31. </el-select>
  32. </p>
  33. </div>
  34. <div class="permission-box">
  35. <p class="check-left-p"><el-checkbox v-model="minItem.permissionCheckType">管理权限</el-checkbox></p>
  36. <div class="check-button-box" :class="minItem.permissionCheckType?'check-button-box-colorA':'check-button-box-colorB'">
  37. <img v-if="!minItem.permissionCheckType" src="@/assets/ZDimages/icon_11.png">
  38. <img v-if="minItem.permissionCheckType" src="@/assets/ZDimages/icon_13.png">
  39. <p>详细配置</p>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. <div class="big-right-box-null" v-if="!bigItem.children&&bigItem.checkType">
  46. <div class="scope-box">
  47. <p>
  48. <el-checkbox v-model="bigItem.scopeCheckType" style="margin-right:40px;">数据范围</el-checkbox>
  49. <el-select v-model="bigItem.value" :disabled="!bigItem.scopeCheckType" placeholder="请选择">
  50. <el-option :key="0" label="所有数据" :value="0"></el-option>
  51. <el-option :key="1" label="本部门及下级部门数据" :value="1"></el-option>
  52. <el-option :key="2" label="本部门及指定部门数据" :value="2"></el-option>
  53. <el-option :key="3" label="当前账号数据" :value="3"></el-option>
  54. </el-select>
  55. </p>
  56. </div>
  57. <div class="permission-box">
  58. <p class="check-left-p"><el-checkbox v-model="bigItem.permissionCheckType">管理权限</el-checkbox></p>
  59. <div class="check-button-box" :class="bigItem.permissionCheckType?'check-button-box-colorA':'check-button-box-colorB'">
  60. <img v-if="!bigItem.permissionCheckType" src="@/assets/ZDimages/icon_11.png">
  61. <img v-if="bigItem.permissionCheckType" src="@/assets/ZDimages/icon_13.png">
  62. <p>详细配置</p>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. <p class="big-box-null" v-if="!maxItem.children&&maxItem.menuName == '数据可视化'">数据可视化大屏查看权限</p>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. </template>
  73. <script>
  74. import { listMenu} from "@/api/system/menu";
  75. export default {
  76. name: "tableDemo",
  77. data() {
  78. return {
  79. menuList:[],
  80. }
  81. },
  82. created() {
  83. this.getList();
  84. },
  85. mounted(){
  86. },
  87. methods: {
  88. /** 查询菜单列表 */
  89. getList() {
  90. this.loading = true;
  91. listMenu(this.queryParams).then(response => {
  92. this.menuList = this.handleTree(response.data, "menuId");
  93. this.loading = false;
  94. });
  95. },
  96. }
  97. }
  98. </script>
  99. <style lang="scss" scoped>
  100. .tableDemo{
  101. height:100%;
  102. box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
  103. position: relative;
  104. display: flex;
  105. flex-direction: column;
  106. padding:20px!important;
  107. overflow: hidden!important;
  108. .table-for-max-box{
  109. border:1px solid #D7D7D7;
  110. overflow-y: scroll;
  111. *{
  112. margin:0;
  113. padding:0;
  114. }
  115. .table-title-box{
  116. background: rgba(1,131,250,0.1);
  117. display: flex;
  118. p{
  119. font-size:14px;
  120. font-weight:700;
  121. color:#333;
  122. line-height:48px;
  123. padding-left:20px;
  124. }
  125. p:nth-child(1){
  126. width:615px;
  127. border-right:1px solid #D7D7D7;
  128. }
  129. }
  130. .table-for-big-box{
  131. border-top:1px solid #D7D7D7;
  132. display: flex;
  133. font-size:14px;
  134. .max-title-box-null{
  135. width:615px!important;
  136. }
  137. .max-title-box{
  138. width:230px;
  139. border-right:1px solid #D7D7D7;
  140. min-height:48px;
  141. position: relative;
  142. p{
  143. position: absolute;
  144. top:50%;
  145. left:20px;
  146. height:18px;
  147. line-height:18px;
  148. margin-top:-9px;
  149. }
  150. }
  151. .max-right-box{
  152. flex:5;
  153. min-height:48px;
  154. .big-box:nth-child(1){
  155. border:none!important;
  156. }
  157. .big-box-null{
  158. line-height:48px;
  159. margin-left:20px;
  160. color:#606266;
  161. }
  162. .big-box{
  163. display: flex;
  164. border-top:1px solid #D7D7D7;
  165. .big-title-box-null{
  166. width:385px!important;
  167. }
  168. .big-title-box{
  169. width:180px;
  170. border-right:1px solid #D7D7D7;
  171. min-height:48px;
  172. position: relative;
  173. overflow: hidden;
  174. p{
  175. position: absolute;
  176. top:50%;
  177. left:20px;
  178. height:48px;
  179. line-height:48px;
  180. margin-top:-24px;
  181. }
  182. }
  183. .big-right-box-null{
  184. display: flex;
  185. .scope-box{
  186. width:430px;
  187. position: relative;
  188. overflow: hidden;
  189. border-right:1px solid #D7D7D7;
  190. p{
  191. position: absolute;
  192. top:50%;
  193. left:20px;
  194. height:48px;
  195. line-height:48px;
  196. margin-top:-24px;
  197. }
  198. }
  199. .permission-box{
  200. flex:1;
  201. position: relative;
  202. overflow: hidden;
  203. display: flex;
  204. .check-left-p{
  205. margin-left:20px;
  206. height:48px;
  207. line-height:48px;
  208. }
  209. .check-button-box{
  210. width:130px;
  211. height:36px;
  212. margin:6px 0 0 36px;
  213. line-height:36px;
  214. display: flex;
  215. color:#333;
  216. cursor: pointer;
  217. img{
  218. width:16px;
  219. height:16px;
  220. margin:10px 14px 0 19px;
  221. }
  222. }
  223. .check-button-box-colorA{
  224. background: #CCE6FE;
  225. color:#0183FA;
  226. }
  227. .check-button-box-colorB{
  228. background: #E0E0E0;
  229. color:#333;
  230. }
  231. }
  232. }
  233. .big-right-box{
  234. flex:5;
  235. min-height:48px;
  236. .min-box:nth-child(1){
  237. border:none!important;
  238. }
  239. .min-box{
  240. display: flex;
  241. border-top:1px solid #D7D7D7;
  242. .min-title-box{
  243. width:205px;
  244. border-right:1px solid #D7D7D7;
  245. min-height:48px;
  246. position: relative;
  247. overflow: hidden;
  248. p{
  249. position: absolute;
  250. top:50%;
  251. left:20px;
  252. height:48px;
  253. line-height:48px;
  254. margin-top:-24px;
  255. }
  256. }
  257. .min-right-box{
  258. flex:5;
  259. min-height:48px;
  260. display: flex;
  261. .scope-box{
  262. width:430px;
  263. position: relative;
  264. overflow: hidden;
  265. border-right:1px solid #D7D7D7;
  266. p{
  267. position: absolute;
  268. top:50%;
  269. left:20px;
  270. height:48px;
  271. line-height:48px;
  272. margin-top:-24px;
  273. }
  274. }
  275. .permission-box{
  276. flex:1;
  277. position: relative;
  278. overflow: hidden;
  279. display: flex;
  280. .check-left-p{
  281. margin-left:20px;
  282. height:48px;
  283. line-height:48px;
  284. }
  285. .check-button-box{
  286. width:130px;
  287. height:36px;
  288. margin:6px 0 0 36px;
  289. line-height:36px;
  290. display: flex;
  291. color:#333;
  292. cursor: pointer;
  293. img{
  294. width:16px;
  295. height:16px;
  296. margin:10px 14px 0 19px;
  297. }
  298. }
  299. .check-button-box-colorA{
  300. background: #CCE6FE;
  301. color:#0183FA;
  302. }
  303. .check-button-box-colorB{
  304. background: #E0E0E0;
  305. color:#333;
  306. }
  307. }
  308. }
  309. }
  310. }
  311. }
  312. }
  313. }
  314. }
  315. }
  316. </style>
  317. <style>
  318. .scope-box .el-input--medium .el-input__inner{
  319. height:36px!important;
  320. }
  321. .scope-box .el-input--medium .el-input__icon {
  322. line-height: 46px;
  323. }
  324. </style>