plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

223 lines
6.8 KiB

3 years ago
  1. <template>
  2. <div class="mod-menu">
  3. <el-form :inline="true" :model="dataForm">
  4. <el-form-item>
  5. <el-button v-if="isAuth('sys:menu:save')" type="primary" @click="addOrUpdateHandle()">{{buttons.add || '新增'}}</el-button>
  6. </el-form-item>
  7. </el-form>
  8. <el-table
  9. :data="dataList"
  10. row-key="menuId"
  11. border
  12. style="width: 100%; ">
  13. <el-table-column
  14. prop="name"
  15. header-align="center"
  16. min-width="150"
  17. :label="buttons.name||'名称'" >
  18. </el-table-column>
  19. <el-table-column
  20. prop="parentName"
  21. header-align="center"
  22. align="center"
  23. width="120"
  24. :label="buttons.parentName||'上级菜单'">
  25. </el-table-column>
  26. <el-table-column
  27. header-align="center"
  28. align="center"
  29. :label="buttons.icon||'图标'">
  30. <template slot-scope="scope">
  31. <icon-svg :name="scope.row.icon || ''"></icon-svg>
  32. </template>
  33. </el-table-column>
  34. <el-table-column
  35. prop="type"
  36. header-align="center"
  37. align="center"
  38. :label="buttons.type||'类型'">
  39. <template slot-scope="scope">
  40. <el-link v-if="scope.row.type === 0" type="success">目录</el-link>
  41. <el-link v-else-if="scope.row.type === 1" size="small" type="success">{{buttons.menu||'菜单'}}菜单</el-link>
  42. <el-link v-else-if="scope.row.type === 2" size="small" type="info">{{buttons.button||'按钮'}}</el-link>
  43. </template>
  44. </el-table-column>
  45. <el-table-column
  46. prop="orderNum"
  47. header-align="center"
  48. align="center"
  49. :label="buttons.orderNum||'排序号'">
  50. </el-table-column>
  51. <el-table-column
  52. prop="url"
  53. header-align="center"
  54. align="center"
  55. width="150"
  56. :show-overflow-tooltip="true"
  57. :label="buttons.url||'菜单URL'">
  58. </el-table-column>
  59. <el-table-column
  60. prop="perms"
  61. header-align="center"
  62. align="center"
  63. width="150"
  64. :show-overflow-tooltip="true"
  65. :label="buttons.perms||'授权标识'">
  66. </el-table-column>
  67. <el-table-column
  68. fixed="right"
  69. header-align="center"
  70. align="center"
  71. width="150"
  72. :label="buttons.cz||'操作'">
  73. <template slot-scope="scope">
  74. <a v-if="isAuth('sys:menu:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.menuId)">{{buttons.edit||'修改'}}</a>
  75. <a v-if="isAuth('sys:menu:delete')" type="text" size="small" @click="deleteHandle(scope.row.menuId)">{{buttons.delete||'删除'}}</a>
  76. <a type="text" size="small" @click="addOrUpdateLanguage(scope.row.menuId)">{{buttons.language||'语言'}}</a>
  77. <a v-if="isAuth('sys:oss:all') && scope.row.type === 1 " type="text" size="small" @click="helpFileList(scope.row.menuId)">
  78. {{buttons.helpFile || '帮助文档'}}</a>
  79. </template>
  80. </el-table-column>
  81. </el-table>
  82. <!-- 弹窗, 新增 / 修改 -->
  83. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" v-drag></add-or-update>
  84. <MenuLanguage v-if="menuLanguageVisible" ref="menuLanguageAdd" @refreshDataList="getDataList" v-drag ></MenuLanguage>
  85. <FileList ref="helpFileList" v-if="helpFileVisible"></FileList>
  86. </div>
  87. </template>
  88. <script>
  89. import AddOrUpdate from './menu-add-or-update'
  90. import MenuLanguage from './menu-language'
  91. import FileList from '../common/file-list'
  92. import { treeDataTranslate } from '@/utils'
  93. import {
  94. searchFunctionButtonList,
  95. } from "@/api/sysLanguage.js"
  96. export default {
  97. data () {
  98. return {
  99. // height: 450,
  100. dataForm: {},
  101. dataList: [],
  102. dataListLoading: false,
  103. addOrUpdateVisible: false,
  104. menuLanguageVisible: false,
  105. helpFileVisible:false,
  106. buttons: {
  107. cz: '操作',
  108. add: '添加',
  109. edit: '编辑',
  110. delete: '删除',
  111. name:'名称',
  112. parentName:'上级菜单',
  113. icon:'图标',
  114. type:'类型',
  115. menu:'菜单',
  116. button:'按钮',
  117. orderNum:'排序号',
  118. url:'菜单URL',
  119. perms:'授权标识',
  120. helpFile : '帮助文档',
  121. language:'语言'
  122. },
  123. }
  124. },
  125. components: {
  126. AddOrUpdate,
  127. MenuLanguage,
  128. FileList
  129. },
  130. activated () {
  131. this.getDataList()
  132. },
  133. mounted() {
  134. this.$nextTick(()=>{
  135. this.height = window.innerHeight ;
  136. })
  137. },
  138. methods: {
  139. // 获取button的词典
  140. getFunctionButtonList() {
  141. let queryButton = {
  142. functionId: this.$route.meta.menuId,
  143. tableId: '*',
  144. languageCode: this.$i18n.locale,
  145. objectType: 'button'
  146. }
  147. searchFunctionButtonList(queryButton).then(({data}) => {
  148. if (data.code == 0 && data.data) {
  149. this.buttons = data.data
  150. }
  151. })
  152. },
  153. // 帮助文档列表
  154. helpFileList(val){
  155. let fileMappingDto = {
  156. fileId:'',
  157. fileType:'功能帮助文档',
  158. orderRef1:val,
  159. orderRef2: '*',
  160. orderRef3: '*',
  161. }
  162. this.helpFileVisible = true;
  163. this.$nextTick(() => {
  164. this.$refs.helpFileList.init(fileMappingDto)
  165. })
  166. },
  167. // 获取数据列表
  168. getDataList () {
  169. this.dataListLoading = true
  170. this.$http({
  171. url: this.$http.adornUrl('/sys/menu/list/'+this.$i18n.locale),
  172. method: 'get',
  173. params: this.$http.adornParams()
  174. }).then(({data}) => {
  175. this.dataList = treeDataTranslate(data, 'menuId')
  176. this.dataListLoading = false
  177. })
  178. },
  179. // 新增 / 修改
  180. addOrUpdateHandle (id) {
  181. this.addOrUpdateVisible = true
  182. this.$nextTick(() => {
  183. this.$refs.addOrUpdate.init(id)
  184. })
  185. },
  186. // 语言编辑
  187. addOrUpdateLanguage (id) {
  188. this.menuLanguageVisible = true
  189. this.$nextTick(() => {
  190. this.$refs.menuLanguageAdd.init(id)
  191. })
  192. },
  193. // 删除
  194. deleteHandle (id) {
  195. this.$confirm(`确定对进行[删除]操作?`, '提示', {
  196. confirmButtonText: '确定',
  197. cancelButtonText: '取消',
  198. type: 'warning'
  199. }).then(() => {
  200. this.$http({
  201. url: this.$http.adornUrl(`/sys/menu/delete/${id}`),
  202. method: 'post',
  203. data: this.$http.adornData()
  204. }).then(({data}) => {
  205. if (data && data.code === 0) {
  206. this.$message.success('操作成功')
  207. this.getDataList()
  208. } else {
  209. this.$message.error(data.msg)
  210. }
  211. })
  212. }).catch(() => {})
  213. }
  214. },
  215. created(){
  216. this.getFunctionButtonList()
  217. }
  218. }
  219. </script>