SysCategoryList.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <template>
  2. <a-card :bordered="false">
  3. <!-- 操作按钮区域 -->
  4. <div class="table-operator">
  5. <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
  6. <!--<a-button type="primary" icon="download" @click="handleExportXls('分类字典')">导出</a-button>
  7. <a-upload name="file" :showUploadList="false" :multiple="false" :action="importExcelUrl" @change="handleImportExcel">
  8. <a-button type="primary" icon="import">导入</a-button>
  9. </a-upload>-->
  10. <a-dropdown v-if="selectedRowKeys.length > 0">
  11. <a-menu slot="overlay">
  12. <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
  13. </a-menu>
  14. <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
  15. </a-dropdown>
  16. </div>
  17. <!-- table区域-begin -->
  18. <div>
  19. <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
  20. <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
  21. <a style="margin-left: 24px" @click="onClearSelected">清空</a>
  22. </div>
  23. <a-table
  24. ref="table"
  25. size="middle"
  26. rowKey="id"
  27. :columns="columns"
  28. :dataSource="dataSource"
  29. :pagination="ipagination"
  30. :loading="loading"
  31. :expandedRowKeys="expandedRowKeys"
  32. @change="handleTableChange"
  33. @expand="handleExpand"
  34. v-bind="tableProps">
  35. <span slot="action" slot-scope="text, record">
  36. <a @click="handleEdit(record)">编辑</a>
  37. <a-divider type="vertical" />
  38. <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
  39. <a>删除</a>
  40. </a-popconfirm>
  41. </span>
  42. </a-table>
  43. </div>
  44. <sysCategory-modal ref="modalForm" @ok="modalFormOk"></sysCategory-modal>
  45. </a-card>
  46. </template>
  47. <script>
  48. import { getAction } from '@/api/manage'
  49. import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  50. import SysCategoryModal from './modules/SysCategoryModal'
  51. export default {
  52. name: "SysCategoryList",
  53. mixins:[JeecgListMixin],
  54. components: {
  55. SysCategoryModal
  56. },
  57. data () {
  58. return {
  59. description: '分类字典管理页面',
  60. // 表头
  61. columns: [
  62. {
  63. title:'类型名称',
  64. align:"left",
  65. dataIndex: 'name'
  66. },
  67. {
  68. title:'类型编码',
  69. align:"left",
  70. dataIndex: 'code'
  71. },
  72. {
  73. title: '操作',
  74. dataIndex: 'action',
  75. align:"center",
  76. scopedSlots: { customRender: 'action' },
  77. }
  78. ],
  79. url: {
  80. list: "/sys/category/rootList",
  81. childList: "/sys/category/childList",
  82. delete: "/sys/category/delete",
  83. deleteBatch: "/sys/category/deleteBatch",
  84. exportXlsUrl: "/sys/category/exportXls",
  85. importExcelUrl: "sys/category/importExcel",
  86. },
  87. expandedRowKeys:[],
  88. hasChildrenField:"hasChild",
  89. pidField:"pid",
  90. dictOptions:{
  91. }
  92. }
  93. },
  94. computed: {
  95. importExcelUrl(){
  96. return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
  97. },
  98. tableProps() {
  99. let _this = this
  100. return {
  101. // 列表项是否可选择
  102. rowSelection: {
  103. selectedRowKeys: _this.selectedRowKeys,
  104. onChange: (selectedRowKeys) => _this.selectedRowKeys = selectedRowKeys
  105. }
  106. }
  107. }
  108. },
  109. methods: {
  110. loadData(arg){
  111. if(arg==1){
  112. this.ipagination.current=1
  113. }
  114. this.loading = true
  115. this.expandedRowKeys = []
  116. let params = this.getQueryParams()
  117. return new Promise((resolve) => {
  118. getAction(this.url.list,params).then(res=>{
  119. if(res.success){
  120. let result = res.result
  121. if(Number(result.total)>0){
  122. this.ipagination.total = Number(result.total)
  123. this.dataSource = this.getDataByResult(res.result.records)
  124. resolve()
  125. }else{
  126. this.ipagination.total=0
  127. this.dataSource=[]
  128. }
  129. }else{
  130. this.$message.warning(res.message)
  131. }
  132. this.loading = false
  133. })
  134. })
  135. },
  136. getDataByResult(result){
  137. return result.map(item=>{
  138. //判断是否标记了带有子节点
  139. if(item[this.hasChildrenField]=='1'){
  140. let loadChild = { id: item.id+'_loadChild', name: 'loading...', isLoading: true }
  141. item.children = [loadChild]
  142. }
  143. return item
  144. })
  145. },
  146. handleExpand(expanded, record){
  147. // 判断是否是展开状态
  148. if (expanded) {
  149. this.expandedRowKeys.push(record.id)
  150. if (record.children.length>0 && record.children[0].isLoading === true) {
  151. let params = this.getQueryParams();//查询条件
  152. params[this.pidField] = record.id
  153. getAction(this.url.childList,params).then((res)=>{
  154. if(res.success){
  155. if(res.result && res.result.length>0){
  156. record.children = this.getDataByResult(res.result)
  157. this.dataSource = [...this.dataSource]
  158. }else{
  159. record.children=''
  160. record.hasChildrenField='0'
  161. }
  162. }else{
  163. this.$message.warning(res.message)
  164. }
  165. })
  166. }
  167. }else{
  168. let keyIndex = this.expandedRowKeys.indexOf(record.id)
  169. if(keyIndex>=0){
  170. this.expandedRowKeys.splice(keyIndex, 1);
  171. }
  172. }
  173. },
  174. initDictConfig(){
  175. },
  176. modalFormOk(formData,arr){
  177. if(!formData.id){
  178. this.addOk(formData,arr)
  179. }else{
  180. this.editOk(formData,this.dataSource)
  181. this.dataSource=[...this.dataSource]
  182. }
  183. },
  184. editOk(formData,arr){
  185. if(arr && arr.length>0){
  186. for(let i=0;i<arr.length;i++){
  187. if(arr[i].id==formData.id){
  188. arr[i]=formData
  189. break
  190. }else{
  191. this.editOk(formData,arr[i].children)
  192. }
  193. }
  194. }
  195. },
  196. async addOk(formData,arr){
  197. if(!formData[this.pidField]){
  198. this.loadData()
  199. }else{
  200. this.expandedRowKeys=[]
  201. console.log("22222",arr)
  202. for(let i of arr){
  203. await this.expandTreeNode(i)
  204. }
  205. }
  206. },
  207. expandTreeNode(nodeId){
  208. return new Promise((resolve,reject)=>{
  209. this.getFormDataById(nodeId,this.dataSource)
  210. let row = this.parentFormData
  211. this.expandedRowKeys.push(nodeId)
  212. let params = this.getQueryParams();//查询条件
  213. params[this.pidField] = nodeId
  214. getAction(this.url.childList,params).then((res)=>{
  215. console.log("11111",res)
  216. if(res.success){
  217. if(res.result && res.result.length>0){
  218. row.children = this.getDataByResult(res.result)
  219. this.dataSource = [...this.dataSource]
  220. resolve()
  221. }else{
  222. reject()
  223. }
  224. }else{
  225. reject()
  226. }
  227. })
  228. })
  229. },
  230. getFormDataById(id,arr){
  231. if(arr && arr.length>0){
  232. for(let i=0;i<arr.length;i++){
  233. if(arr[i].id==id){
  234. this.parentFormData = arr[i]
  235. }else{
  236. this.getFormDataById(id,arr[i].children)
  237. }
  238. }
  239. }
  240. },
  241. }
  242. }
  243. </script>
  244. <style scoped>
  245. @import '~@assets/less/common.less'
  246. </style>