index.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <template>
  2. <div class="user-management-container">
  3. <div class="side-layout">
  4. <div class="tree-side">
  5. <div class="head-container">
  6. <span style="font-size: 25px">所属区域</span>
  7. </div>
  8. <div class="tree-container">
  9. <el-tree
  10. ref="tree"
  11. :data="regionOptions"
  12. default-expand
  13. :default-expand-all="false"
  14. :expand-on-click-node="true"
  15. :filter-node-method="filterNode"
  16. highlight-current
  17. :props="defaultProps"
  18. @node-click="handleNodeClick">
  19. <span slot-scope="{ node }" class="custom-tree-node">
  20. <span>{{ node.label }}</span>
  21. <span>
  22. <i class="el-icon-more"></i>
  23. </span>
  24. </span>
  25. </el-tree>
  26. </div>
  27. </div>
  28. <div class="tree-table">
  29. <vab-query-form>
  30. <vab-query-form-top-panel>
  31. <el-form :inline="true" :model="queryForm" @submit.native.prevent>
  32. <el-form-item>
  33. <el-input v-model.trim="queryForm.distCode" clearable placeholder="经销商编码" />
  34. </el-form-item>
  35. <el-form-item>
  36. <el-input v-model.trim="queryForm.distName" clearable placeholder="经销商名称" />
  37. </el-form-item>
  38. <el-form-item>
  39. <el-input v-model.trim="queryForm.belongSale" clearable placeholder="所属销售" />
  40. </el-form-item>
  41. <el-form-item>
  42. <el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
  43. <el-button icon="el-icon-refresh-right" @click="reset">重置</el-button>
  44. </el-form-item>
  45. </el-form>
  46. </vab-query-form-top-panel>
  47. </vab-query-form>
  48. <vab-query-form-left-panel>
  49. <el-button
  50. v-permissions="['base:distributor:add']"
  51. icon="el-icon-plus"
  52. type="primary"
  53. @click="handleEdit($event)">
  54. 新建
  55. </el-button>
  56. </vab-query-form-left-panel>
  57. <vab-query-form-right-panel>
  58. <table-tool :check-list.sync="checkList" :columns="columns" />
  59. <el-button icon="el-icon-download" style="float: right" />
  60. </vab-query-form-right-panel>
  61. <el-table
  62. v-loading="listLoading"
  63. border
  64. :data="list"
  65. style="width: 100%; height: 500px"
  66. @selection-change="setSelectRows">
  67. <el-table-column
  68. v-for="(item, index) in finallyColumns"
  69. :key="index"
  70. align="center"
  71. :label="item.label"
  72. :prop="item.prop"
  73. show-overflow-tooltip
  74. :sortable="item.sortable"
  75. :width="item.width">
  76. <template #default="{ row }">
  77. <el-button v-if="item.prop === 'distName'" style="font-size: 14px" type="text" @click="handleDetail(row)">
  78. {{ row.distName }}
  79. </el-button>
  80. <span v-else>{{ row[item.prop] }}</span>
  81. </template>
  82. </el-table-column>
  83. <el-table-column align="center" label="操作" show-overflow-tooltip width="85">
  84. <template #default="{ row }">
  85. <el-button v-permissions="['base:distributor:edit']" type="text" @click="handleEdit(row)">编辑</el-button>
  86. <el-button v-permissions="['base:distributor:delete']" type="text" @click="handleDelete(row)">
  87. 删除
  88. </el-button>
  89. </template>
  90. </el-table-column>
  91. <template #empty>
  92. <el-image class="vab-data-empty" :src="require('@/assets/empty_images/data_empty.png')" />
  93. </template>
  94. </el-table>
  95. <el-pagination
  96. background
  97. :current-page="queryForm.pageNum"
  98. :layout="layout"
  99. :page-size="queryForm.pageSize"
  100. :total="total"
  101. @current-change="handleCurrentChange"
  102. @size-change="handleSizeChange" />
  103. </div>
  104. </div>
  105. <edit ref="edit" @fetch-data="fetchData" />
  106. </div>
  107. </template>
  108. <script>
  109. import distrApi from '@/api/base/distr'
  110. import regionApi from '@/api/base/region'
  111. import Edit from './components/DistrEdit'
  112. import TableTool from '@/components/table/TableTool'
  113. export default {
  114. name: 'Distr',
  115. components: { Edit, TableTool },
  116. data() {
  117. return {
  118. list: [],
  119. listLoading: true,
  120. layout: 'total, sizes, prev, pager, next, jumper',
  121. total: 0,
  122. selectRows: '',
  123. queryForm: {
  124. pageNum: 1,
  125. pageSize: 10,
  126. userName: '',
  127. },
  128. checkList: [],
  129. columns: [
  130. {
  131. label: '经销商名称',
  132. width: '120px',
  133. prop: 'distName',
  134. sortable: false,
  135. },
  136. {
  137. label: '所在省份',
  138. width: '100px',
  139. prop: 'provinceDesc',
  140. sortable: false,
  141. },
  142. {
  143. label: '归属销售',
  144. width: 'auto',
  145. prop: 'belongSale',
  146. sortable: false,
  147. disableCheck: true,
  148. },
  149. {
  150. label: '业务范围',
  151. width: 'auto',
  152. prop: 'businessScope',
  153. sortable: false,
  154. disableCheck: true,
  155. },
  156. {
  157. label: '负责人',
  158. width: 'auto',
  159. prop: 'distBoss',
  160. sortable: false,
  161. disableCheck: true,
  162. },
  163. {
  164. label: '归属销售',
  165. width: 'auto',
  166. prop: 'belongSale',
  167. sortable: false,
  168. disableCheck: true,
  169. },
  170. ],
  171. regionOptions: undefined,
  172. defaultProps: {
  173. id: 'id',
  174. children: 'children',
  175. label: 'regionDesc',
  176. },
  177. treeDefaultExpandAll: true,
  178. }
  179. },
  180. computed: {
  181. height() {
  182. return this.$baseTableHeight(1)
  183. },
  184. finallyColumns() {
  185. return this.columns.filter((item) => this.checkList.includes(item.label))
  186. },
  187. },
  188. created() {
  189. this.fetchData()
  190. this.getRegionTree()
  191. },
  192. methods: {
  193. async getRegionTree() {
  194. const { data: data } = await regionApi.getRegionTree({})
  195. this.regionOptions = data.list
  196. },
  197. // 筛选节点
  198. filterNode(value, data) {
  199. if (!value) return true
  200. return data[this.defaultProps.label].indexOf(value) !== -1
  201. },
  202. // 节点单击事件
  203. handleNodeClick(data) {
  204. console.log('ID', data.id)
  205. this.queryForm.provinceId = data.id
  206. this.fetchData()
  207. },
  208. setSelectRows(val) {
  209. this.selectRows = val
  210. },
  211. handleEdit(row) {
  212. if (row.id) {
  213. this.$refs['edit'].showEdit(row)
  214. } else {
  215. this.$refs['edit'].showEdit()
  216. }
  217. },
  218. handleDelete(row) {
  219. if (row.id) {
  220. this.$baseConfirm('你确定要删除当前项吗', null, async () => {
  221. const { msg } = await distrApi.doDelete({ ids: row.id })
  222. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  223. await this.fetchData()
  224. })
  225. } else {
  226. if (this.selectRows.length > 0) {
  227. const ids = this.selectRows.map((item) => parseInt(item.id))
  228. console.log(ids)
  229. this.$baseConfirm('你确定要删除选中项吗', null, async () => {
  230. const { msg } = await distrApi.doDelete({ ids })
  231. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  232. await this.fetchData()
  233. })
  234. } else {
  235. this.$baseMessage('未选中任何行', 'error', 'vab-hey-message-error')
  236. }
  237. }
  238. },
  239. handleSizeChange(val) {
  240. this.queryForm.pageSize = val
  241. this.fetchData()
  242. },
  243. handleCurrentChange(val) {
  244. this.queryForm.pageNum = val
  245. this.fetchData()
  246. },
  247. queryData() {
  248. this.queryForm.pageNum = 1
  249. this.fetchData()
  250. },
  251. async fetchData() {
  252. this.listLoading = true
  253. const {
  254. data: { list, total },
  255. } = await distrApi.getList(this.queryForm)
  256. this.list = list
  257. this.total = total
  258. this.listLoading = false
  259. },
  260. reset() {
  261. this.queryForm = {
  262. pageNum: 1,
  263. pageSize: 10,
  264. distCode: '',
  265. distName: '',
  266. belongSale: '',
  267. }
  268. this.fetchData()
  269. },
  270. //详情
  271. handleDetail(row) {
  272. this.$router.push({
  273. path: '/base/info',
  274. query: {
  275. id: row.id,
  276. },
  277. })
  278. },
  279. },
  280. }
  281. </script>
  282. <style>
  283. .el-tree-node:focus > .el-tree-node__content {
  284. /*设置选中的样式 */
  285. background-color: #dde9ff !important;
  286. }
  287. .el-tree-node__content:hover {
  288. /*设置鼠标飘过的颜色 */
  289. background: #eaf9ff !important;
  290. color: #007bff;
  291. }
  292. .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
  293. /*current选中的样式 */
  294. color: #4d95fd;
  295. font-weight: bold;
  296. background-color: #dde9ff !important;
  297. }
  298. </style>