Blame view

ant-design-vue-jeecg/src/mixins/JeecgListMixin.js 12.8 KB
肖超群 authored
1
2
3
4
5
/**
 * 新增修改完成调用 modalFormOk方法 编辑弹框组件ref定义为modalForm
 * 高级查询按钮调用 superQuery方法  高级查询组件ref定义为superQueryModal
 * dataurl定义 list为查询列表  delete为删除单条记录  deleteBatch为批量删除
 */
肖超群 authored
6
7
import {filterObj} from '@/utils/util';
import {deleteAction, getAction, downFile, getFileAccessHttpUrl} from '@/api/manage'
肖超群 authored
8
import Vue from 'vue'
肖超群 authored
9
import {ACCESS_TOKEN, TENANT_ID} from "@/store/mutation-types"
肖超群 authored
10
11
12
import store from '@/store'

export const JeecgListMixin = {
肖超群 authored
13
  data() {
肖超群 authored
14
15
16
17
    return {
      /* 查询条件-请不要在queryParam中声明非字符串值的属性 */
      queryParam: {},
      /* 数据源 */
肖超群 authored
18
      dataSource: [],
肖超群 authored
19
      /* 分页参数 */
肖超群 authored
20
      ipagination: {
肖超群 authored
21
22
23
24
25
26
27
28
29
30
31
        current: 1,
        pageSize: 10,
        pageSizeOptions: ['10', '20', '30'],
        showTotal: (total, range) => {
          return range[0] + "-" + range[1] + " 共" + total + "条"
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0
      },
      /* 排序参数 */
肖超群 authored
32
      isorter: {
肖超群 authored
33
34
35
36
37
38
        column: 'createTime',
        order: 'desc',
      },
      /* 筛选参数 */
      filters: {},
      /* table加载状态 */
肖超群 authored
39
      loading: false,
肖超群 authored
40
41
42
43
44
      /* table选中keys*/
      selectedRowKeys: [],
      /* table选中records*/
      selectionRows: [],
      /* 查询折叠 */
肖超群 authored
45
      toggleSearchStatus: false,
肖超群 authored
46
      /* 高级查询条件生效状态 */
肖超群 authored
47
      superQueryFlag: false,
肖超群 authored
48
49
50
51
52
53
54
      /* 高级查询条件 */
      superQueryParams: '',
      /** 高级查询拼接方式 */
      superQueryMatchType: 'and',
    }
  },
  created() {
肖超群 authored
55
56
57
58
59
60
    if (!this.disableMixinCreated) {
      console.log(' -- mixin created -- ')
      this.loadData();
      //初始化字典配置 在自己页面定义
      this.initDictConfig();
    }
肖超群 authored
61
62
63
  },
  computed: {
    //token header
肖超群 authored
64
    tokenHeader() {
肖超群 authored
65
66
      let head = {'X-Access-Token': Vue.ls.get(ACCESS_TOKEN)}
      let tenantid = Vue.ls.get(TENANT_ID)
肖超群 authored
67
      if (tenantid) {
肖超群 authored
68
69
70
71
72
        head['tenant-id'] = tenantid
      }
      return head;
    }
  },
肖超群 authored
73
  methods: {
肖超群 authored
74
    loadData(arg) {
肖超群 authored
75
      if (!this.url.list) {
肖超群 authored
76
77
78
79
80
81
82
83
84
85
86
87
        this.$message.error("请设置url.list属性!")
        return
      }
      //加载数据 若传入参数1则加载第一页的内容
      if (arg === 1) {
        this.ipagination.current = 1;
      }
      var params = this.getQueryParams();//查询条件
      this.loading = true;
      getAction(this.url.list, params).then((res) => {
        if (res.success) {
          //update-begin---author:zhangyafei    Date:20201118  for:适配不分页的数据列表------------
肖超群 authored
88
89
          this.dataSource = res.result.records || res.result;
          if (res.result.total) {
肖超群 authored
90
            this.ipagination.total = res.result.total;
肖超群 authored
91
          } else {
肖超群 authored
92
93
94
            this.ipagination.total = 0;
          }
          //update-end---author:zhangyafei    Date:20201118  for:适配不分页的数据列表------------
肖超群 authored
95
        } else {
肖超群 authored
96
97
98
99
100
101
          this.$message.warning(res.message)
        }
      }).finally(() => {
        this.loading = false
      })
    },
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
    loadDataList() {
      if (!this.url.list) {
        this.$message.error("请设置url.list属性!")
        return
      }
      var params = this.getQueryParams();//查询条件
      getAction(this.url.list, params).then((res) => {
        if (res.success) {
          //update-begin---author:zhangyafei    Date:20201118  for:适配不分页的数据列表------------
          this.dataSource = res.result.records || res.result;
          if (res.result.total) {
            this.ipagination.total = res.result.total;
          } else {
            this.ipagination.total = 0;
          }
          //update-end---author:zhangyafei    Date:20201118  for:适配不分页的数据列表------------
        } else {
          this.$message.warning(res.message)
        }
      }).finally(() => {
      })
    },
肖超群 authored
125
    initDictConfig() {
肖超群 authored
126
127
128
129
      console.log("--这是一个假的方法!")
    },
    handleSuperQuery(params, matchType) {
      //高级查询方法
肖超群 authored
130
131
      if (!params) {
        this.superQueryParams = ''
肖超群 authored
132
        this.superQueryFlag = false
肖超群 authored
133
      } else {
肖超群 authored
134
        this.superQueryFlag = true
肖超群 authored
135
        this.superQueryParams = JSON.stringify(params)
肖超群 authored
136
137
138
139
140
141
142
        this.superQueryMatchType = matchType
      }
      this.loadData(1)
    },
    getQueryParams() {
      //获取查询条件
      let sqp = {}
肖超群 authored
143
144
      if (this.superQueryParams) {
        sqp['superQueryParams'] = encodeURI(this.superQueryParams)
肖超群 authored
145
146
        sqp['superQueryMatchType'] = this.superQueryMatchType
      }
肖超群 authored
147
      var param = Object.assign(sqp, this.queryParam, this.isorter, this.filters);
肖超群 authored
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
      param.field = this.getQueryField();
      param.pageNo = this.ipagination.current;
      param.pageSize = this.ipagination.pageSize;
      return filterObj(param);
    },
    getQueryField() {
      //TODO 字段权限控制
      var str = "id,";
      this.columns.forEach(function (value) {
        str += "," + value.dataIndex;
      });
      return str;
    },

    onSelectChange(selectedRowKeys, selectionRows) {
      this.selectedRowKeys = selectedRowKeys;
      this.selectionRows = selectionRows;
    },
    onClearSelected() {
      this.selectedRowKeys = [];
      this.selectionRows = [];
    },
    searchQuery() {
      this.loadData(1);
      // 点击查询清空列表选中行
      // https://gitee.com/jeecg/jeecg-boot/issues/I4KTU1
      this.selectedRowKeys = []
      this.selectionRows = []
    },
    superQuery() {
      this.$refs.superQueryModal.show();
    },
    searchReset() {
      this.queryParam = {}
      this.loadData(1);
    },
    batchDel: function () {
肖超群 authored
185
      if (!this.url.deleteBatch) {
肖超群 authored
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
        this.$message.error("请设置url.deleteBatch属性!")
        return
      }
      if (this.selectedRowKeys.length <= 0) {
        this.$message.warning('请选择一条记录!');
        return;
      } else {
        var ids = "";
        for (var a = 0; a < this.selectedRowKeys.length; a++) {
          ids += this.selectedRowKeys[a] + ",";
        }
        var that = this;
        this.$confirm({
          title: "确认删除",
          content: "是否删除选中数据?",
          onOk: function () {
            that.loading = true;
            deleteAction(that.url.deleteBatch, {ids: ids}).then((res) => {
              if (res.success) {
                //重新计算分页问题
                that.reCalculatePage(that.selectedRowKeys.length)
                that.$message.success(res.message);
                that.loadData();
                that.onClearSelected();
              } else {
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.loading = false;
            });
          }
        });
      }
    },
    handleDelete: function (id) {
肖超群 authored
221
      if (!this.url.delete) {
肖超群 authored
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
        this.$message.error("请设置url.delete属性!")
        return
      }
      var that = this;
      deleteAction(that.url.delete, {id: id}).then((res) => {
        if (res.success) {
          //重新计算分页问题
          that.reCalculatePage(1)
          that.$message.success(res.message);
          that.loadData();
        } else {
          that.$message.warning(res.message);
        }
      });
    },
肖超群 authored
237
    reCalculatePage(count) {
肖超群 authored
238
      //总数量-count
肖超群 authored
239
      let total = this.ipagination.total - count;
肖超群 authored
240
      //获取删除后的分页数
肖超群 authored
241
      let currentIndex = Math.ceil(total / this.ipagination.pageSize);
肖超群 authored
242
      //删除后的分页数<所在当前页
肖超群 authored
243
244
      if (currentIndex < this.ipagination.current) {
        this.ipagination.current = currentIndex;
肖超群 authored
245
      }
肖超群 authored
246
      console.log('currentIndex', currentIndex)
肖超群 authored
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
    },
    handleEdit: function (record) {
      this.$refs.modalForm.edit(record);
      this.$refs.modalForm.title = "编辑";
      this.$refs.modalForm.disableSubmit = false;
    },
    handleAdd: function () {
      this.$refs.modalForm.add();
      this.$refs.modalForm.title = "新增";
      this.$refs.modalForm.disableSubmit = false;
    },
    handleTableChange(pagination, filters, sorter) {
      //分页、排序、筛选变化时触发
      //TODO 筛选
      console.log(pagination)
      if (Object.keys(sorter).length > 0) {
        this.isorter.column = sorter.field;
        this.isorter.order = "ascend" == sorter.order ? "asc" : "desc"
      }
      this.ipagination = pagination;
      this.loadData();
    },
肖超群 authored
269
    handleToggleSearch() {
肖超群 authored
270
271
272
      this.toggleSearchStatus = !this.toggleSearchStatus;
    },
    // 给popup查询使用(查询区域不支持回填多个字段,限制只返回一个字段)
肖超群 authored
273
    getPopupField(fields) {
肖超群 authored
274
275
276
277
278
279
280
281
      return fields.split(',')[0]
    },
    modalFormOk() {
      // 新增/修改 成功时,重载列表
      this.loadData();
      //清空列表选中
      this.onClearSelected()
    },
肖超群 authored
282
    handleDetail: function (record) {
肖超群 authored
283
      this.$refs.modalForm.edit(record);
肖超群 authored
284
      this.$refs.modalForm.title = "详情";
肖超群 authored
285
286
287
      this.$refs.modalForm.disableSubmit = true;
    },
    /* 导出 */
肖超群 authored
288
    handleExportXls2() {
肖超群 authored
289
290
291
292
      let paramsStr = encodeURI(JSON.stringify(this.getQueryParams()));
      let url = `${window._CONFIG['domianURL']}/${this.url.exportXlsUrl}?paramsStr=${paramsStr}`;
      window.location.href = url;
    },
肖超群 authored
293
294
    handleExportXls(fileName) {
      if (!fileName || typeof fileName != "string") {
肖超群 authored
295
296
297
        fileName = "导出文件"
      }
      let param = this.getQueryParams();
肖超群 authored
298
      if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
肖超群 authored
299
300
        param['selections'] = this.selectedRowKeys.join(",")
      }
肖超群 authored
301
302
      console.log("导出参数", param)
      downFile(this.url.exportXlsUrl, param).then((data) => {
肖超群 authored
303
304
305
306
307
        if (!data) {
          this.$message.warning("文件下载失败")
          return
        }
        if (typeof window.navigator.msSaveBlob !== 'undefined') {
肖超群 authored
308
309
310
          window.navigator.msSaveBlob(new Blob([data], {type: 'application/vnd.ms-excel'}), fileName + '.xls')
        } else {
          let url = window.URL.createObjectURL(new Blob([data], {type: 'application/vnd.ms-excel'}))
肖超群 authored
311
312
313
          let link = document.createElement('a')
          link.style.display = 'none'
          link.href = url
肖超群 authored
314
          link.setAttribute('download', fileName + '.xls')
肖超群 authored
315
316
317
318
319
320
321
322
          document.body.appendChild(link)
          link.click()
          document.body.removeChild(link); //下载完成移除元素
          window.URL.revokeObjectURL(url); //释放掉blob对象
        }
      })
    },
    /* 导入 */
肖超群 authored
323
    handleImportExcel(info) {
肖超群 authored
324
325
326
327
328
329
330
331
332
      this.loading = true;
      if (info.file.status !== 'uploading') {
        console.log(info.file, info.fileList);
      }
      if (info.file.status === 'done') {
        this.loading = false;
        if (info.file.response.success) {
          // this.$message.success(`${info.file.name} 文件上传成功`);
          if (info.file.response.code === 201) {
肖超群 authored
333
            let {message, result: {msg, fileUrl, fileName}} = info.file.response
肖超群 authored
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
            let href = window._CONFIG['domianURL'] + fileUrl
            this.$warning({
              title: message,
              content: (<div>
                  <span>{msg}</span><br/>
                  <span>具体详情请 <a href={href} target="_blank" download={fileName}>点击下载</a> </span>
                </div>
              )
            })
          } else {
            this.$message.success(info.file.response.message || `${info.file.name} 文件上传成功`)
          }
          this.loadData()
        } else {
          this.$message.error(`${info.file.name} ${info.file.response.message}.`);
        }
      } else if (info.file.status === 'error') {
        this.loading = false;
        if (info.file.response.status === 500) {
          let data = info.file.response
          const token = Vue.ls.get(ACCESS_TOKEN)
          if (token && data.message.includes("Token失效")) {
            this.$error({
              title: '登录已过期',
              content: '很抱歉,登录已过期,请重新登录',
              okText: '重新登录',
              mask: false,
              onOk: () => {
                store.dispatch('Logout').then(() => {
                  Vue.ls.remove(ACCESS_TOKEN)
                  window.location.reload();
                })
              }
            })
          }
        } else {
          this.$message.error(`文件上传失败: ${info.file.msg} `);
        }
      }
    },
    /* 图片预览 */
肖超群 authored
375
376
377
    getImgView(text) {
      if (text && text.indexOf(",") > 0) {
        text = text.substring(0, text.indexOf(","))
肖超群 authored
378
379
380
381
382
      }
      return getFileAccessHttpUrl(text)
    },
    /* 文件下载 */
    // update--autor:lvdandan-----date:20200630------for:修改下载文件方法名uploadFile改为downloadFile------
肖超群 authored
383
384
    downloadFile(text) {
      if (!text) {
肖超群 authored
385
386
387
        this.$message.warning("未知的文件")
        return;
      }
肖超群 authored
388
389
      if (text.indexOf(",") > 0) {
        text = text.substring(0, text.indexOf(","))
肖超群 authored
390
391
392
393
394
395
396
      }
      let url = getFileAccessHttpUrl(text)
      window.open(url);
    },
  }

}