792e2c3ca2e73d46762fe72a74068974ac33007b.svn-base 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <template>
  2. <div class="user-manage" style="width: 100%; height: 100%;">
  3. <div class="search-wrapper">
  4. <el-form ref="form" :inline="true" label-width="80px">
  5. <el-form-item label="菜单名称">
  6. <el-input v-model="searchObj.menuName" clearable></el-input>
  7. </el-form-item>
  8. <el-button type="primary" @click="getMenuList()">查询</el-button>
  9. <el-button type="primary" @click="toaddMenu()">添加</el-button>
  10. </el-form>
  11. </div>
  12. <el-table
  13. :data="menusList"
  14. border
  15. stripe
  16. :height="tableHeight"
  17. style="width: 100%;">
  18. <el-table-column
  19. prop="parentName"
  20. label="父菜单">
  21. </el-table-column>
  22. <el-table-column
  23. prop="menuName"
  24. label="菜单名称">
  25. </el-table-column>
  26. <!-- <el-table-column
  27. prop="ownerSystem"
  28. label="所属系统"
  29. width="220">
  30. <template slot-scope="scope">
  31. {{systemFilter(scope.row.ownerSystem)}}
  32. </template>
  33. </el-table-column> -->
  34. <el-table-column
  35. prop="sortLevel"
  36. label="菜单等级">
  37. </el-table-column>
  38. <el-table-column
  39. prop="sequence"
  40. label="菜单排序">
  41. </el-table-column>
  42. <el-table-column
  43. prop="href"
  44. label="超链接">
  45. </el-table-column>
  46. <el-table-column label="操作">
  47. <template slot-scope="scope">
  48. <el-button
  49. size="mini"
  50. @click="handleEdit(scope.row)">编辑</el-button>
  51. <el-button
  52. size="mini"
  53. type="danger"
  54. @click="handleDelete(scope.row)">删除</el-button>
  55. </template>
  56. </el-table-column>
  57. </el-table>
  58. <el-pagination
  59. background
  60. @size-change="handleSizeChange"
  61. @current-change="handleCurrentChange"
  62. :current-page.sync="searchObj.pageNum"
  63. :page-sizes="[10, 20, 300, 40]"
  64. :page-size="searchObj.pageSize"
  65. layout="total, prev, pager, next"
  66. :total="total"
  67. style="margin: 10px auto">
  68. </el-pagination>
  69. <el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible">
  70. <el-form :model="editMenu" label-width="120px">
  71. <el-form-item label="菜单名称">
  72. <el-input v-model="editMenu.menuName" auto-complete="off"></el-input>
  73. </el-form-item>
  74. <el-form-item label="父菜单">
  75. <el-input v-model="parentName" @focus="showMenuTree = true" auto-complete="off" clearable></el-input>
  76. <tree-x
  77. v-if="showMenuTree"
  78. @closeTree='closeTree'
  79. :treeInfos='menuList'
  80. :isChecked= "'tree'"
  81. :defaultProps="defaultProps"
  82. @sendMenuInfo="sendMenuInfo"></tree-x>
  83. </el-form-item>
  84. <el-form-item label="菜单排序">
  85. <el-input v-model="editMenu.sequence" auto-complete="off"></el-input>
  86. </el-form-item>
  87. <el-form-item label="菜单等级">
  88. <el-input v-model="editMenu.sortLevel" auto-complete="off"></el-input>
  89. </el-form-item>
  90. <el-form-item label="超链接">
  91. <el-input v-model="editMenu.href" auto-complete="off"></el-input>
  92. </el-form-item>
  93. <!-- <el-form-item label="归属系统" v-if="dialogTitle == '添加'">-->
  94. <!-- <el-select v-model="editMenu.ownerSystem" placeholder="请选择">-->
  95. <!-- <el-option :label="system.name" :value="system.value" v-for="(system,index) in privDict.systemFlag" :key="index"></el-option>-->
  96. <!-- </el-select>-->
  97. <!-- </el-form-item>-->
  98. <el-form-item label="所属应用">
  99. <el-select v-model="editMenu.ownApp" multiple placeholder="请选择">
  100. <el-option :label="app.label" :value="app.value" v-for="(app,index) in ownAppOptions" :key="index"></el-option>
  101. <el-option label="日常检查" value="3" key="3" v-if="isChengDu"></el-option>
  102. </el-select>
  103. </el-form-item>
  104. <el-form-item label="权限标识" v-if="dialogTitle == '添加'">
  105. <el-input v-model="editMenu.code" auto-complete="off"></el-input>
  106. </el-form-item>
  107. <el-form-item label="是否叶子结点" v-if="dialogTitle == '添加'">
  108. <el-select v-model="editMenu.flagLeaf" placeholder="请选择">
  109. <el-option label="是" value="1"></el-option>
  110. <el-option label="否" value="0"></el-option>
  111. </el-select>
  112. </el-form-item>
  113. </el-form>
  114. <div slot="footer" class="dialog-footer">
  115. <el-button @click="dialogFormVisible = false">取 消</el-button>
  116. <el-button type="primary" @click="updateMenuInfo">确 定</el-button>
  117. </div>
  118. </el-dialog>
  119. </div>
  120. </template>
  121. <script>
  122. import request from '../../utils/gw_ajax_request.js'
  123. import treeX from '../../widgets/treeX.vue'
  124. import {getTrees} from '../../utils/gw_treeDataTransfer.js'
  125. export default {
  126. data(){
  127. return {
  128. tableHeight: window.innerHeight - 210,
  129. menuData : 'user',
  130. menusList: [],
  131. total:0,
  132. searchObj: {
  133. menuName: '',
  134. pageSize: 20,
  135. pageNum: 1
  136. },
  137. editMenu:{
  138. menuName: '',
  139. id: '',
  140. parentId: '',
  141. sequence: '',
  142. sortLevel: '',
  143. href: '',
  144. code: '',
  145. ownerSystem: '',
  146. flagLeaf: '',
  147. ownApp: []
  148. },
  149. parentName: '',
  150. menuList: [],
  151. saveUrl: '',
  152. defaultProps:{
  153. children: 'children',
  154. label: 'menuName'
  155. },
  156. privDict: {},
  157. showMenuTree: false,
  158. dialogFormVisible: false,
  159. dialogTitle: '修改',
  160. ownAppOptions: [
  161. {label: '督查系统',value: '1'},
  162. {label: '稽察系统',value: '2'}
  163. ]
  164. }
  165. },
  166. components:{
  167. 'tree-x': treeX
  168. },
  169. computed:{
  170. persId(){
  171. return localStorage.getItem('userid') ? localStorage.getItem('userid') : ''
  172. },
  173. isChengDu(){
  174. var path = window.location.href;
  175. return path.indexOf("221.237.107.122")>-1
  176. }
  177. },
  178. mounted(){
  179. this.getMenuList()
  180. this.getDict()
  181. },
  182. methods:{
  183. getMenuList(){
  184. this.searchObj['userId'] = this.persId
  185. request.post('/sys/menus/list-by-user',this.searchObj).then((res)=>{
  186. if(res.success){
  187. this.menusList = res.data.list
  188. this.total = res.data.total
  189. }else{
  190. this.$message.warning(res.message)
  191. }
  192. }).catch(error=>{
  193. this.$message.error(error)
  194. })
  195. },
  196. getMenusList(){
  197. request.post('/sys/menus/list-by-user',{'userId': this.persId,'pageSize': 500}).then(res=>{
  198. if(res.success){
  199. this.menuList = res.data.list
  200. this.menuList.forEach(ele=>{
  201. if(!ele.parentId){
  202. ele.parentId = '0'
  203. }
  204. })
  205. this.menuList = getTrees(this.menuList,'0')
  206. console.log(this.menuList)
  207. }
  208. }).catch(error=>{
  209. })
  210. },
  211. handleEdit(rowData){
  212. this.dialogTitle = '修改'
  213. let row = {}
  214. Object.assign(row,rowData)
  215. this.editMenu = row
  216. this.parentName = row.parentName
  217. this.editMenu.ownApp = this.editMenu.ownApp ? this.editMenu.ownApp.split(',') : this.editMenu.ownApp
  218. this.saveUrl = `/sys/menus/update-menu-priv`
  219. this.getMenusList()
  220. this.dialogFormVisible = true
  221. },
  222. toaddMenu(){
  223. this.dialogTitle = '添加'
  224. for(var obj in this.editMenu){
  225. this.editMenu[obj] = ''
  226. }
  227. this.editMenu.ownApp = []
  228. this.parentName = ''
  229. this.saveUrl = `/sys/menus/insert-menu-priv`
  230. this.getMenusList()
  231. delete this.editMenu.id
  232. this.dialogFormVisible = true
  233. },
  234. updateMenuInfo(){
  235. this.editMenu.privUri = this.editMenu.href
  236. this.editMenu.ownApp = this.editMenu.ownApp ? this.editMenu.ownApp.join(',') : this.editMenu.ownApp
  237. this.editMenu.parentId = this.editMenu.parentId == '' || this.editMenu.parentId == '0' || this.parentName == '' ? 0 : this.editMenu.parentId
  238. this.editMenu['parentName'] = this.parentName ? this.parentName : ''
  239. this.editMenu.ownerSystem = "DC_ALL";
  240. request.post(this.saveUrl,this.editMenu).then(res=>{
  241. if(res.success){
  242. this.$message.success('保存成功')
  243. this.getMenuList()
  244. this.editMenu.parentId = ''
  245. this.dialogFormVisible = false
  246. }else{
  247. this.$message.warning(res.message)
  248. }
  249. }).catch(error=>{
  250. // this.$message.error(error)
  251. })
  252. },
  253. handleDelete(rowData){
  254. this.$confirm('确认删除当前权限?', '提示', {
  255. confirmButtonText: '确定',
  256. cancelButtonText: '取消',
  257. type: 'warning'
  258. }).then(() => {
  259. request.post(`/sys/menus/delete-menu-priv/${rowData.id}`).then(res=>{
  260. if(res.success){
  261. this.getMenuList()
  262. this.$message({
  263. type: 'success',
  264. message: '删除成功!'
  265. });
  266. }
  267. }).catch(error=>{
  268. })
  269. }).catch(() => {
  270. });
  271. },
  272. getDict(){
  273. request.get(`/sys/privs/getSysFlagByUserId?userId=${this.persId}`).then(res=>{
  274. if(res.success){
  275. this.privDict['systemFlag'] = res.data
  276. }else{
  277. this.$message.warning(res.message)
  278. }
  279. }).catch(error=>{
  280. this.$message.warning(res.message)
  281. })
  282. },
  283. systemFilter(item){
  284. let system
  285. this.privDict.systemFlag.forEach(ele=>{
  286. if(item == ele.value){
  287. system = ele.name
  288. }
  289. })
  290. return system
  291. },
  292. sendMenuInfo(data){
  293. this.editMenu.parentId = data.id
  294. this.parentName = data.menuName
  295. },
  296. closeTree(val){
  297. this.showMenuTree = val
  298. },
  299. handleSizeChange(val) {
  300. this.searchObj.pageSize = val
  301. this.getMenuList()
  302. },
  303. handleCurrentChange(val) {
  304. this.searchObj.pageNum = val
  305. this.getMenuList()
  306. }
  307. }
  308. }
  309. </script>
  310. <style scoped lang='scss'>
  311. .user-manage{
  312. padding: 20px;
  313. box-sizing: border-box;
  314. .search-wrapper{
  315. }
  316. }
  317. </style>