index.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <template>
  2. <div class="user-management-container">
  3. <el-row :gutter="20" type="flex">
  4. <el-col :span="6">
  5. <div class="head-container" style="margin-bottom: 5px">
  6. <el-input v-model="filterText" placeholder="输入关键字进行过滤" />
  7. <el-button icon="el-icon-plus" style="margin-top: 10px" type="primary" @click="getCheckedNodes($event)">
  8. 添加区域
  9. </el-button>
  10. <el-tree
  11. ref="tree"
  12. class="filter-tree"
  13. :data="deptOptions"
  14. default-expand-all
  15. :default-expanded-keys="[1]"
  16. :filter-node-method="filterNode"
  17. highlight-current
  18. node-key="id"
  19. :props="defaultProps"
  20. @node-click="handleNodeClick">
  21. <span slot-scope="{ node }" class="custom-tree-node">
  22. <span>{{ node.label }}</span>
  23. <span>
  24. <i class="el-icon-more"></i>
  25. </span>
  26. </span>
  27. </el-tree>
  28. <!-- <el-tree ref="tree" :data="deptOptions" node-key="id"
  29. :filter-node-method="filterNode" :props="defaultProps"
  30. @node-click="handleNodeClick" /> -->
  31. </div>
  32. <!-- <div class="buttons">
  33. <el-button @click="getCheckedNodes($event)">添加区域</el-button>
  34. </div> -->
  35. </el-col>
  36. <el-col :span="18">
  37. <vab-query-form>
  38. <vab-query-form-left-panel :span="18">
  39. <el-form :inline="true" :model="queryForm" @submit.native.prevent>
  40. <el-form-item style="letter-spacing: 12px">
  41. <el-input v-model.trim="queryForm.custCode" clearable placeholder="客户编码" />
  42. </el-form-item>
  43. <el-form-item>
  44. <el-input v-model.trim="queryForm.custName" clearable placeholder="客户名称" />
  45. </el-form-item>
  46. <el-form-item>
  47. <el-input v-model.trim="queryForm.custIndustry" clearable placeholder="客户行业" />
  48. </el-form-item>
  49. </el-form>
  50. </vab-query-form-left-panel>
  51. <vab-query-form-right-panel :span="6">
  52. <el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
  53. <el-button icon="el-icon-plus" type="primary" @click="handleEdit($event)">添加</el-button>
  54. </vab-query-form-right-panel>
  55. </vab-query-form>
  56. <el-table
  57. v-loading="listLoading"
  58. border
  59. :data="list"
  60. height="calc(100% - 52px - 43px)"
  61. style="width: 100%"
  62. @selection-change="setSelectRows">
  63. <el-table-column align="center" show-overflow-tooltip type="selection" />
  64. <el-table-column align="center" label="省份" prop="distName" show-overflow-tooltip />
  65. <el-table-column align="center" label="客户数量" prop="count" show-overflow-tooltip />
  66. <el-table-column align="center" label="创建人" prop="createdName" show-overflow-tooltip />
  67. <el-table-column align="center" label="创建时间" prop="createdTime" show-overflow-tooltip />
  68. <el-table-column align="center" label="操作" show-overflow-tooltip width="85">
  69. <template #default="{ row }">
  70. <el-button type="text" @click="handleEdit(row)">编辑</el-button>
  71. <el-button type="text" @click="handleDelete(row)">删除</el-button>
  72. </template>
  73. </el-table-column>
  74. <template #empty>
  75. <el-image class="vab-data-empty" :src="require('@/assets/empty_images/data_empty.png')" />
  76. </template>
  77. </el-table>
  78. <el-pagination
  79. background
  80. :current-page="queryForm.pageNum"
  81. :layout="layout"
  82. :page-size="queryForm.pageSize"
  83. :total="total"
  84. @current-change="handleCurrentChange"
  85. @size-change="handleSizeChange" />
  86. </el-col>
  87. </el-row>
  88. <edit ref="edit" @fetch-data="fetchData" />
  89. <reg-edit ref="reg-edit" @fetch-data="fetchData" />
  90. </div>
  91. </template>
  92. <script>
  93. import Edit from './components/RegionEdit'
  94. import RegEdit from './components/RegEdit'
  95. import regionApi from '@/api/base/region/region'
  96. export default {
  97. name: 'Distr',
  98. components: { Edit, RegEdit },
  99. data() {
  100. return {
  101. current: '',
  102. list: [],
  103. listLoading: true,
  104. layout: 'total, sizes, prev, pager, next, jumper',
  105. total: 0,
  106. selectRows: '',
  107. filterText: '',
  108. queryForm: {
  109. pageNum: 1,
  110. pageSize: 10,
  111. userName: '',
  112. },
  113. deptOptions: undefined,
  114. defaultProps: {
  115. id: 'id',
  116. regionCode: 'regionCode',
  117. label: 'regionDesc',
  118. },
  119. treeDefaultExpandAll: true,
  120. regionId: 0,
  121. }
  122. },
  123. computed: {
  124. height() {
  125. return this.$baseTableHeight(10)
  126. },
  127. },
  128. watch: {
  129. filterText(val) {
  130. this.$refs.tree.filter(val)
  131. },
  132. },
  133. created() {
  134. this.fetchData()
  135. this.getRegion()
  136. },
  137. methods: {
  138. async getRegion() {
  139. const { data: data } = await regionApi.getRegion({})
  140. var first_id = data.list[0].id
  141. console.log('区域', first_id)
  142. this.deptOptions = data.list
  143. this.queryForm.regionId = first_id //data.list[0].id
  144. this.$refs['edit'].setRegion(first_id)
  145. //默认第一选中
  146. this.$nextTick(() => {
  147. this.$refs.tree.setCurrentKey(first_id)
  148. })
  149. this.fetchData()
  150. },
  151. // 筛选节点
  152. filterNode(value, data) {
  153. if (!value) return true
  154. return data[this.defaultProps.label].indexOf(value) !== -1
  155. },
  156. // 节点单击事件
  157. handleNodeClick(data) {
  158. console.log('ID', data.id)
  159. this.$refs['edit'].setRegion(data.id)
  160. this.queryForm.regionId = data.id
  161. this.fetchData()
  162. },
  163. setSelectRows(val) {
  164. this.selectRows = val
  165. },
  166. getCheckedNodes() {
  167. this.$refs['reg-edit'].showEdit()
  168. },
  169. handleEdit(row) {
  170. if (row.id) {
  171. this.$refs['edit'].showEdit(row)
  172. } else {
  173. this.$refs['edit'].showEdit()
  174. }
  175. },
  176. handleDelete(row) {
  177. if (row.id) {
  178. console.log('deletedId', row.id)
  179. this.$baseConfirm('你确定要删除当前项吗', null, async () => {
  180. const { msg } = await regionApi.doDelete({ ids: row.id })
  181. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  182. await this.fetchData()
  183. })
  184. } else {
  185. if (this.selectRows.length > 0) {
  186. const ids = this.selectRows.map((item) => parseInt(item.id))
  187. console.log(ids)
  188. this.$baseConfirm('你确定要删除选中项吗', null, async () => {
  189. const { msg } = await regionApi.doDelete({ ids })
  190. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  191. await this.fetchData()
  192. })
  193. } else {
  194. this.$baseMessage('未选中任何行', 'error', 'vab-hey-message-error')
  195. }
  196. }
  197. },
  198. handleSizeChange(val) {
  199. this.queryForm.pageSize = val
  200. this.fetchData()
  201. },
  202. handleCurrentChange(val) {
  203. this.queryForm.pageNum = val
  204. this.fetchData()
  205. },
  206. queryData() {
  207. this.queryForm.pageNum = 1
  208. this.fetchData()
  209. },
  210. async fetchData() {
  211. this.listLoading = true
  212. const {
  213. data: { list, total },
  214. } = await regionApi.getList(this.queryForm)
  215. this.list = list
  216. this.total = total
  217. this.listLoading = false
  218. },
  219. },
  220. }
  221. </script>
  222. <style lang="scss" scoped>
  223. $base: '.user-management';
  224. #{$base}-container {
  225. > .el-row {
  226. height: calc(100vh - 60px - 50px - 12px * 2 - 40px - 24px);
  227. }
  228. .head-container {
  229. height: calc(100% - 5px);
  230. .el-tree {
  231. height: calc(100% - 74px);
  232. overflow-y: auto;
  233. }
  234. }
  235. }
  236. </style>