tenantIndex.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. :model="queryParams"
  5. ref="queryForm"
  6. size="small"
  7. :inline="true"
  8. v-show="showSearch"
  9. label-width="68px"
  10. >
  11. <el-form-item label="租户名称" prop="tenantName">
  12. <el-input
  13. v-model="queryParams.tenantName"
  14. placeholder="请输入租户名称"
  15. clearable
  16. @keyup.enter.native="handleQuery"
  17. />
  18. </el-form-item>
  19. <el-form-item label="租户编号" prop="tenantCode">
  20. <el-input
  21. v-model="queryParams.tenantCode"
  22. placeholder="请输入租户编号"
  23. clearable
  24. @keyup.enter.native="handleQuery"
  25. />
  26. </el-form-item>
  27. <el-form-item label="负责人" prop="owner">
  28. <el-input
  29. v-model="queryParams.owner"
  30. placeholder="请输入负责人"
  31. clearable
  32. @keyup.enter.native="handleQuery"
  33. />
  34. </el-form-item>
  35. <el-form-item label="联系方式" prop="contactInfo">
  36. <el-input
  37. v-model="queryParams.contactInfo"
  38. placeholder="请输入联系方式"
  39. clearable
  40. @keyup.enter.native="handleQuery"
  41. />
  42. </el-form-item>
  43. <el-form-item label="地址" prop="address">
  44. <el-input
  45. v-model="queryParams.address"
  46. placeholder="请输入地址"
  47. clearable
  48. @keyup.enter.native="handleQuery"
  49. />
  50. </el-form-item>
  51. <el-form-item>
  52. <el-button
  53. type="primary"
  54. icon="el-icon-search"
  55. size="mini"
  56. @click="handleQuery"
  57. >搜索
  58. </el-button
  59. >
  60. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  61. >重置
  62. </el-button
  63. >
  64. </el-form-item>
  65. </el-form>
  66. <el-row :gutter="10" class="mb8">
  67. <el-col :span="1.5">
  68. <el-button
  69. v-if="selection.length == 0"
  70. type="warning"
  71. plain
  72. icon="el-icon-download"
  73. size="mini"
  74. @click="handleExport"
  75. v-hasPermi="['system:tenant:export']"
  76. >导出
  77. </el-button>
  78. <ExcelDownLoad
  79. v-else
  80. :headerList="headerList"
  81. :fieldList="selection"
  82. :excelTitle="excelTitle"
  83. ></ExcelDownLoad>
  84. </el-col>
  85. <right-toolbar
  86. :showSearch.sync="showSearch"
  87. @queryTable="getList"
  88. ></right-toolbar>
  89. </el-row>
  90. <el-table
  91. v-loading="loading"
  92. :data="tenantList"
  93. style="width: 100%"
  94. row-key="tenantId"
  95. border
  96. lazy
  97. :load="load"
  98. :tree-props="{children: 'children', hasChildren:'hasChildren' }"
  99. @cell-dblclick="copyText"
  100. >
  101. <el-table-column label="租户ID" align="center" prop="tenantId"/>
  102. <el-table-column label="租户名称" align="center" prop="tenantName"/>
  103. <el-table-column label="租户编号" align="center" prop="tenantCode"/>
  104. <el-table-column label="负责人" align="center" prop="owner"/>
  105. <el-table-column label="联系方式" align="center" prop="contactInfo"/>
  106. <el-table-column label="地址" align="center" prop="address"/>
  107. <el-table-column label="租户父级ID" align="center" prop="tenantParentId"/>
  108. <el-table-column label="客户端访问地址" align="center" prop="tenantClientLoginUrl"/>
  109. <el-table-column label="工具端访问地址" align="center" prop="tenantToolLoginUrl"/>
  110. <el-table-column label="租户等级" align="center" prop="tenantGrade"/>
  111. <el-table-column label="到期天数" align="center" prop="tenantExpirationTime"/>
  112. </el-table>
  113. <pagination
  114. v-show="total > 0"
  115. :total="total"
  116. :page.sync="queryParams.pageNum"
  117. :limit.sync="queryParams.pageSize"
  118. @pagination="getList"
  119. />
  120. </div>
  121. </template>
  122. <script>
  123. import {
  124. listTenant,
  125. getTenantAllList,
  126. selectAllUser,
  127. getTenantChildrenInfo
  128. } from '@/api/system/tenant'
  129. import {mapState} from "vuex";
  130. import ExcelDownLoad from '@/components/ExcelDownLoad/index.vue'
  131. export default {
  132. name: 'Tenant',
  133. dicts: [
  134. 'datasource_type',
  135. 'sqlserver_connection_information',
  136. 'mysql_connection_information',
  137. 'dm_connection_information',
  138. 'orcale_connection_information',
  139. 'system_login_url'
  140. ],
  141. components: {
  142. ExcelDownLoad
  143. },
  144. data() {
  145. return {
  146. // 前端导出数据
  147. selection: [],
  148. headerList: {
  149. 租户名称: 'tenantName',
  150. 租户编号: 'tenantCode',
  151. 负责人: 'owner',
  152. 联系方式: 'contactInfo',
  153. 地址: 'address',
  154. 是否删除: 'isDel'
  155. },
  156. excelTitle: 'tenant',
  157. // 弹窗的加载提示
  158. dialogLoading: false,
  159. // 遮罩层
  160. loading: true,
  161. // 选中数组
  162. ids: [],
  163. // 非单个禁用
  164. single: true,
  165. // 非多个禁用
  166. multiple: true,
  167. // 显示搜索条件
  168. showSearch: true,
  169. // 总条数
  170. total: 0,
  171. // 租户信息表格数据
  172. tenantList: [],
  173. // 弹出层标题
  174. title: '',
  175. // 是否显示弹出层
  176. open: false,
  177. // 所有用户信息
  178. allUser: [],
  179. // 查询参数
  180. queryParams: {
  181. tenantParentId: 0,
  182. pageNum: 1,
  183. pageSize: 10,
  184. tenantName: null,
  185. tenantCode: null,
  186. owner: null,
  187. contactInfo: null,
  188. address: null
  189. },
  190. }
  191. },
  192. computed: {
  193. ...mapState({
  194. userInfo: state => state
  195. })
  196. },
  197. created() {
  198. this.getList()
  199. this.selectAllUser()
  200. },
  201. methods: {
  202. copyText(row, column, cell, event) {
  203. // 双击复制
  204. const textToCopy = event.target.innerText;
  205. navigator.clipboard.writeText(textToCopy).then(() => {
  206. this.$message({message: '复制成功', type: 'success'}); // 提示
  207. }).catch((error) => {
  208. console.error('复制失败:', error);
  209. });
  210. },
  211. load(tree, treeNode, resolve) {
  212. console.log(tree, treeNode, resolve)
  213. // 根据当前租户id查询子租户
  214. getTenantChildrenInfo(tree.tenantId).then(res => {
  215. if (res.data != null) {
  216. resolve(res.data)
  217. } else {
  218. resolve({})
  219. }
  220. })
  221. },
  222. buildTree(data, parentId = null) {
  223. const children = data.filter(item => item.tenantParentId === parentId)
  224. return children.map(child => ({
  225. value: child.tenantId,
  226. label: child.tenantName,
  227. children: this.buildTree(data, child.tenantId) // 将 child.tenant_id 作为下一层的 parentId
  228. }))
  229. },
  230. // 获取所用用户名,作校验用
  231. async selectAllUser() {
  232. let res = await selectAllUser()
  233. if (res.code == 200) {
  234. this.allUser = res.data
  235. } else {
  236. console.log(res.msg)
  237. }
  238. },
  239. // 重置login配置表单数据
  240. resetloginForm() {
  241. this.loginForm = {
  242. loginPageNumber: '',
  243. loginPageTitle: '',
  244. loginPageDescription: '',
  245. loginPageLogo: '',
  246. loginPageBackgroundImage: '',
  247. windowTitle: '',
  248. windowLogo: '',
  249. tenantId: ''
  250. }
  251. },
  252. /** 查询租户信息列表 */
  253. getList() {
  254. this.loading = true
  255. this.currentPage = this.queryParams.pageNum
  256. this.queryParams.tenantParentId = this.userInfo.user.tenant.tenantId
  257. getTenantAllList(this.queryParams).then((response) => {
  258. this.tenantList = response.rows
  259. this.tenantList.forEach(item => {
  260. item['hasChildren'] = true
  261. })
  262. this.total = response.total
  263. this.loading = false
  264. })
  265. },
  266. /** 搜索按钮操作 */
  267. handleQuery() {
  268. this.queryParams.pageNum = 1
  269. this.getList()
  270. },
  271. /** 重置按钮操作 */
  272. resetQuery() {
  273. this.resetForm('queryForm')
  274. this.handleQuery()
  275. },
  276. /** 导出按钮操作 */
  277. handleExport() {
  278. this.download(
  279. 'system/tenant/export',
  280. {
  281. ...this.queryParams
  282. },
  283. `tenant_${new Date().getTime()}.xlsx`
  284. )
  285. },
  286. }
  287. }
  288. </script>