Blame view

ant-design-vue-jeecg/src/mixins/JeecgListMixin.js 12 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
      })
    },
肖超群 authored
102
    initDictConfig() {
肖超群 authored
103
104
105
106
      console.log("--这是一个假的方法!")
    },
    handleSuperQuery(params, matchType) {
      //高级查询方法
肖超群 authored
107
108
      if (!params) {
        this.superQueryParams = ''
肖超群 authored
109
        this.superQueryFlag = false
肖超群 authored
110
      } else {
肖超群 authored
111
        this.superQueryFlag = true
肖超群 authored
112
        this.superQueryParams = JSON.stringify(params)
肖超群 authored
113
114
115
116
117
118
119
        this.superQueryMatchType = matchType
      }
      this.loadData(1)
    },
    getQueryParams() {
      //获取查询条件
      let sqp = {}
肖超群 authored
120
121
      if (this.superQueryParams) {
        sqp['superQueryParams'] = encodeURI(this.superQueryParams)
肖超群 authored
122
123
        sqp['superQueryMatchType'] = this.superQueryMatchType
      }
肖超群 authored
124
      var param = Object.assign(sqp, this.queryParam, this.isorter, this.filters);
肖超群 authored
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
      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
162
      if (!this.url.deleteBatch) {
肖超群 authored
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
        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
198
      if (!this.url.delete) {
肖超群 authored
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
        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
214
    reCalculatePage(count) {
肖超群 authored
215
      //总数量-count
肖超群 authored
216
      let total = this.ipagination.total - count;
肖超群 authored
217
      //获取删除后的分页数
肖超群 authored
218
      let currentIndex = Math.ceil(total / this.ipagination.pageSize);
肖超群 authored
219
      //删除后的分页数<所在当前页
肖超群 authored
220
221
      if (currentIndex < this.ipagination.current) {
        this.ipagination.current = currentIndex;
肖超群 authored
222
      }
肖超群 authored
223
      console.log('currentIndex', currentIndex)
肖超群 authored
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
    },
    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
246
    handleToggleSearch() {
肖超群 authored
247
248
249
      this.toggleSearchStatus = !this.toggleSearchStatus;
    },
    // 给popup查询使用(查询区域不支持回填多个字段,限制只返回一个字段)
肖超群 authored
250
    getPopupField(fields) {
肖超群 authored
251
252
253
254
255
256
257
258
      return fields.split(',')[0]
    },
    modalFormOk() {
      // 新增/修改 成功时,重载列表
      this.loadData();
      //清空列表选中
      this.onClearSelected()
    },
肖超群 authored
259
    handleDetail: function (record) {
肖超群 authored
260
      this.$refs.modalForm.edit(record);
肖超群 authored
261
      this.$refs.modalForm.title = "详情";
肖超群 authored
262
263
264
      this.$refs.modalForm.disableSubmit = true;
    },
    /* 导出 */
肖超群 authored
265
    handleExportXls2() {
肖超群 authored
266
267
268
269
      let paramsStr = encodeURI(JSON.stringify(this.getQueryParams()));
      let url = `${window._CONFIG['domianURL']}/${this.url.exportXlsUrl}?paramsStr=${paramsStr}`;
      window.location.href = url;
    },
肖超群 authored
270
271
    handleExportXls(fileName) {
      if (!fileName || typeof fileName != "string") {
肖超群 authored
272
273
274
        fileName = "导出文件"
      }
      let param = this.getQueryParams();
肖超群 authored
275
      if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
肖超群 authored
276
277
        param['selections'] = this.selectedRowKeys.join(",")
      }
肖超群 authored
278
279
      console.log("导出参数", param)
      downFile(this.url.exportXlsUrl, param).then((data) => {
肖超群 authored
280
281
282
283
284
        if (!data) {
          this.$message.warning("文件下载失败")
          return
        }
        if (typeof window.navigator.msSaveBlob !== 'undefined') {
肖超群 authored
285
286
287
          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
288
289
290
          let link = document.createElement('a')
          link.style.display = 'none'
          link.href = url
肖超群 authored
291
          link.setAttribute('download', fileName + '.xls')
肖超群 authored
292
293
294
295
296
297
298
299
          document.body.appendChild(link)
          link.click()
          document.body.removeChild(link); //下载完成移除元素
          window.URL.revokeObjectURL(url); //释放掉blob对象
        }
      })
    },
    /* 导入 */
肖超群 authored
300
    handleImportExcel(info) {
肖超群 authored
301
302
303
304
305
306
307
308
309
      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
310
            let {message, result: {msg, fileUrl, fileName}} = info.file.response
肖超群 authored
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
            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
352
353
354
    getImgView(text) {
      if (text && text.indexOf(",") > 0) {
        text = text.substring(0, text.indexOf(","))
肖超群 authored
355
356
357
358
359
      }
      return getFileAccessHttpUrl(text)
    },
    /* 文件下载 */
    // update--autor:lvdandan-----date:20200630------for:修改下载文件方法名uploadFile改为downloadFile------
肖超群 authored
360
361
    downloadFile(text) {
      if (!text) {
肖超群 authored
362
363
364
        this.$message.warning("未知的文件")
        return;
      }
肖超群 authored
365
366
      if (text.indexOf(",") > 0) {
        text = text.substring(0, text.indexOf(","))
肖超群 authored
367
368
369
370
371
372
373
      }
      let url = getFileAccessHttpUrl(text)
      window.open(url);
    },
  }

}