project.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <template>
  2. <div class="form-wrap">
  3. <div class="searchBox">
  4. <el-form
  5. ref="form"
  6. :model="form"
  7. :inline="true"
  8. label-width="100px">
  9. <el-form-item
  10. label="名称"
  11. prop="projectName">
  12. <el-input v-model="form.projectName"></el-input>
  13. </el-form-item>
  14. </el-form>
  15. <div class="btn-wrap">
  16. <el-button
  17. type="primary"
  18. @click="getProjectList">搜索</el-button>
  19. <el-button
  20. type="primary"
  21. v-if="canAddUsers"
  22. @click="showDialog('add')">新增项目</el-button>
  23. </div>
  24. </div>
  25. <div class="tableBox">
  26. <!-- <div class="block-title">
  27. 项目列表
  28. </div> -->
  29. <el-table
  30. v-loading="loading"
  31. row-class-name="is-center"
  32. :data="tableData">
  33. <el-table-column
  34. prop="projectIndex"
  35. label="项目序号"
  36. width="100">
  37. </el-table-column>
  38. <el-table-column
  39. prop="createTime"
  40. label="创建时间"
  41. width="160">
  42. </el-table-column>
  43. <el-table-column
  44. prop="id"
  45. label="项目ID"
  46. width="200">
  47. </el-table-column>
  48. <el-table-column
  49. prop="projectName"
  50. label="项目名称">
  51. </el-table-column>
  52. <el-table-column
  53. prop="projectNickName"
  54. label="项目中文名称"
  55. width="160">
  56. </el-table-column>
  57. <el-table-column
  58. prop="projectDesc"
  59. label="项目描述"
  60. show-overflow-tooltip
  61. width="200">
  62. </el-table-column>
  63. <el-table-column
  64. prop="offlineUrl"
  65. label="线下地址"
  66. width="200">
  67. </el-table-column>
  68. <el-table-column
  69. prop="webUrl"
  70. label="线上地址"
  71. width="260">
  72. <template slot-scope="scope">
  73. <el-button
  74. v-if="scope.row.webUrl"
  75. type="text"
  76. @click="openOnlineUrl(scope.row.webUrl)">{{ buildOnlineUrl(scope.row.webUrl) }}</el-button>
  77. <span v-else>-</span>
  78. </template>
  79. </el-table-column>
  80. <el-table-column
  81. prop="lastHeartbeatTime"
  82. label="最近一次在线时间"
  83. width="180">
  84. </el-table-column>
  85. <el-table-column
  86. show-overflow-tooltip
  87. prop="validEndTime"
  88. label="项目到期时间" />
  89. <el-table-column
  90. fixed="right"
  91. label="操作"
  92. width="120">
  93. <template slot-scope="scope">
  94. <el-button
  95. type="text"
  96. @click="showDialog('edit',scope.row)">编辑</el-button>
  97. </template>
  98. </el-table-column>
  99. </el-table>
  100. </div>
  101. <!-- 账号弹框 -->
  102. <ElDialog
  103. title="添加项目"
  104. width="660px"
  105. v-model="addVisible">
  106. <AddDialog @updateList="getProjectList"></AddDialog>
  107. </ElDialog>
  108. <ElDialog
  109. title="编辑项目"
  110. width="660px"
  111. v-model="editVisible">
  112. <EditDialog
  113. :project-item="currentItem"
  114. @updateList="getProjectList"></EditDialog>
  115. </ElDialog>
  116. <ElDialog
  117. title="项目详细"
  118. width="800px"
  119. v-model="detailVisible">
  120. <DetailDialog
  121. :project-item="currentItem"
  122. @updateList="getProjectList"></DetailDialog>
  123. </ElDialog>
  124. <el-pagination
  125. background
  126. :page-size="10"
  127. @current-change="handlePage"
  128. layout="prev, pager, next"
  129. :total="total">
  130. </el-pagination>
  131. </div>
  132. </template>
  133. <script>
  134. import { getProjectList } from '@/api/platform'
  135. import ElDialog from '@/components/Dialog'
  136. import AddDialog from './project/AddDialog'
  137. import EditDialog from './project/EditDialog'
  138. import DetailDialog from './project/DetailDialog'
  139. export default {
  140. components: {
  141. ElDialog,
  142. AddDialog,
  143. EditDialog,
  144. DetailDialog
  145. },
  146. computed: {
  147. canAddUsers () {
  148. return true
  149. // return this.$store.state.user.permissionList.includes('system_settings:add_users')
  150. }
  151. },
  152. created () {
  153. this.getProjectList()
  154. },
  155. data () {
  156. return {
  157. loading: false,
  158. addVisible: false,
  159. editVisible: false,
  160. detailVisible: false,
  161. tableData: [],
  162. total: 0,
  163. form: {
  164. projectName: '', // 账号名
  165. pageNum: 1,
  166. pageSize: 10
  167. },
  168. // 当前账号对象
  169. currentItem: {}
  170. }
  171. },
  172. methods: {
  173. // 线上地址 = 项目线上域名 + 离线端前端登录页
  174. buildOnlineUrl (url) {
  175. if (!url) return ''
  176. return url.replace(/\/+$/, '') + '/frontend/offline/#/login'
  177. },
  178. // 新开标签页打开线上地址
  179. openOnlineUrl (url) {
  180. const link = this.buildOnlineUrl(url)
  181. if (!link) return
  182. window.open(link, '_blank')
  183. },
  184. showDialog (type, item) {
  185. this[`${type}Visible`] = true
  186. this.currentItem = item
  187. },
  188. getProjectList (goFirst) {
  189. this.loading = true
  190. if (goFirst) {
  191. this.form.pageNum = 1
  192. }
  193. getProjectList(this.form).then(res => {
  194. this.loading = false
  195. this.tableData = res.data.records.map(item => {
  196. item.permissionList = (item.roleList || []).reduce((acc, role) => {
  197. return acc.concat(role.resourceList || [])
  198. }, [])
  199. return item
  200. }) || []
  201. this.total = res.data.total
  202. })
  203. },
  204. handlePage (pageNum) {
  205. this.form.pageNum = pageNum
  206. this.getProjectList()
  207. }
  208. }
  209. }
  210. </script>
  211. <style scoped>
  212. </style>