Blame view

ant-design-vue-jeecg/src/views/system/DepartList.vue 20.4 KB
1
2
3
4
<template xmlns:background-color="http://www.w3.org/1999/xhtml">
  <a-row :gutter="10">
    <a-col :md="12" :sm="24">
      <a-card :bordered="false">
5
6
        <!-- 按钮操作区域 -->
7
        <a-row style="margin-left: 14px">
8
          <a-button @click="handleAdd(2)" type="primary">添加子部门</a-button>
9
10
11
12
13
          <a-button @click="handleAdd(1)" type="primary">添加一级部门</a-button>
          <a-button type="primary" icon="download" @click="handleExportXls('部门信息')">导出</a-button>
          <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
            <a-button type="primary" icon="import">导入</a-button>
          </a-upload>
14
          <a-button title="删除多条数据" @click="batchDel" type="default">批量删除</a-button>
15
          <!--<a-button @click="refresh" type="default" icon="reload" :loading="loading">刷新</a-button>-->
16
17
18
        </a-row>
        <div style="background: #fff;padding-left:16px;height: 100%; margin-top: 5px">
          <a-alert type="info" :showIcon="true">
19
            <div slot="message">
20
              当前选择:<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
21
22
23
              <a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">取消选择</a>
            </div>
          </a-alert>
24
          <a-input-search @search="onSearch" style="width:100%;margin-top: 10px" placeholder="请输入部门名称"/>
25
          <!-- 树-->
26
27
28
29
30
31
32
33
34
35
36
37
38
          <a-col :md="10" :sm="24">
            <template>
              <a-dropdown :trigger="[this.dropTrigger]" @visibleChange="dropStatus">
               <span style="user-select: none">
            <a-tree
              checkable
              multiple
              @select="onSelect"
              @check="onCheck"
              @rightClick="rightHandle"
              :selectedKeys="selectedKeys"
              :checkedKeys="checkedKeys"
              :treeData="departTree"
39
              :checkStrictly="checkStrictly"
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
              :expandedKeys="iExpandedKeys"
              :autoExpandParent="autoExpandParent"
              @expand="onExpand"/>
                </span>
                <!--新增右键点击事件,和增加添加和删除功能-->
                <a-menu slot="overlay">
                  <a-menu-item @click="handleAdd(3)" key="1">添加</a-menu-item>
                  <a-menu-item @click="handleDelete" key="2">删除</a-menu-item>
                  <a-menu-item @click="closeDrop" key="3">取消</a-menu-item>
                </a-menu>
              </a-dropdown>
            </template>
          </a-col>
        </div>
      </a-card>
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
      <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
      <div class="drawer-bootom-button">
        <a-dropdown :trigger="['click']" placement="topCenter">
          <a-menu slot="overlay">
            <a-menu-item key="1" @click="switchCheckStrictly(1)">父子关联</a-menu-item>
            <a-menu-item key="2" @click="switchCheckStrictly(2)">取消关联</a-menu-item>
            <a-menu-item key="3" @click="checkALL">全部勾选</a-menu-item>
            <a-menu-item key="4" @click="cancelCheckALL">取消全选</a-menu-item>
            <a-menu-item key="5" @click="expandAll">展开所有</a-menu-item>
            <a-menu-item key="6" @click="closeAll">合并所有</a-menu-item>
          </a-menu>
          <a-button>
            树操作 <a-icon type="up" />
          </a-button>
        </a-dropdown>
      </div>
      <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
72
73
    </a-col>
    <a-col :md="12" :sm="24">
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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
      <a-tabs defaultActiveKey="1">
        <a-tab-pane tab="基本信息" key="1" >
          <a-card :bordered="false">
            <a-form :form="form">
              <a-form-item
                :labelCol="labelCol"
                :wrapperCol="wrapperCol"
                label="机构名称">
                <a-input placeholder="请输入机构/部门名称" v-decorator="['departName', validatorRules.departName ]"/>
              </a-form-item>
              <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="上级部门">
                <a-tree-select
                  style="width:100%"
                  :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
                  :treeData="treeData"
                  :disabled="disable"
                  v-model="model.parentId"
                  placeholder="无">
                </a-tree-select>
              </a-form-item>
              <a-form-item
                :labelCol="labelCol"
                :wrapperCol="wrapperCol"
                label="机构编码">
                <a-input disabled placeholder="请输入机构编码" v-decorator="['orgCode', validatorRules.orgCode ]"/>
              </a-form-item>
              <a-form-item
                :labelCol="labelCol"
                :wrapperCol="wrapperCol"
                label="机构类型">
                <template v-if="orgCategoryDisabled">
                  <a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型">
                    <a-radio value="1">
                      公司
                    </a-radio>
                  </a-radio-group>
                </template>
                <template v-else>
                  <a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型">
                    <a-radio value="2">
                      部门
                    </a-radio>
                    <a-radio value="3">
                      岗位
                    </a-radio>
                  </a-radio-group>
                </template>
              </a-form-item>
              <a-form-item
                :labelCol="labelCol"
                :wrapperCol="wrapperCol"
                label="排序">
                <a-input-number v-decorator="[ 'departOrder',{'initialValue':0}]"/>
              </a-form-item>
              <a-form-item
                :labelCol="labelCol"
                :wrapperCol="wrapperCol"
                label="手机号">
                <a-input placeholder="请输入手机号" v-decorator="['mobile', {'initialValue':''}]"/>
              </a-form-item>
              <a-form-item
                :labelCol="labelCol"
                :wrapperCol="wrapperCol"
                label="地址">
                <a-input placeholder="请输入地址" v-decorator="['address', {'initialValue':''}]"/>
              </a-form-item>
              <a-form-item
                :labelCol="labelCol"
                :wrapperCol="wrapperCol"
                label="备注">
                <a-textarea placeholder="请输入备注" v-decorator="['memo', {'initialValue':''}]"/>
              </a-form-item>
            </a-form>
            <div class="anty-form-btn">
              <a-button @click="emptyCurrForm" type="default" htmlType="button" icon="sync">重置</a-button>
              <a-button @click="submitCurrForm" type="primary" htmlType="button" icon="form">修改并保存</a-button>
            </div>
          </a-card>
        </a-tab-pane>
        <a-tab-pane tab="部门权限" key="2" forceRender>
          <depart-auth-modal ref="departAuth"/>
        </a-tab-pane>
      </a-tabs>
158
159
160
    </a-col>
    <depart-modal ref="departModal" @ok="loadTree"></depart-modal>
  </a-row>
161
162
163
164
</template>
<script>
  import DepartModal from './modules/DepartModal'
  import pick from 'lodash.pick'
165
166
167
  import {queryDepartTreeList, searchByKeywords, deleteByDepartId} from '@/api/api'
  import {httpAction, deleteAction} from '@/api/manage'
  import {JeecgListMixin} from '@/mixins/JeecgListMixin'
168
  import DepartAuthModal from './modules/DepartAuthModal'
169
170
171
172
  // 表头
  const columns = [
    {
      title: '机构名称',
173
      dataIndex: 'departName'
174
175
176
    },
    {
      title: '机构类型',
177
      align: 'center',
178
179
180
181
      dataIndex: 'orgType'
    },
    {
      title: '机构编码',
182
      dataIndex: 'orgCode',
183
184
185
186
187
188
189
190
191
192
193
194
195
196
    },
    {
      title: '手机号',
      dataIndex: 'mobile'
    },
    {
      title: '传真',
      dataIndex: 'fax'
    },
    {
      title: '地址',
      dataIndex: 'address'
    },
    {
197
198
199
      title: '排序',
      align: 'center',
      dataIndex: 'departOrder'
200
201
202
    },
    {
      title: '操作',
203
      align: 'center',
204
      dataIndex: 'action',
205
      scopedSlots: {customRender: 'action'}
206
    }
207
  ]
208
  export default {
209
    name: 'DepartList',
210
    mixins: [JeecgListMixin],
211
    components: {
212
      DepartAuthModal,
213
214
      DepartModal
    },
215
    data() {
216
      return {
217
218
219
220
221
222
        iExpandedKeys: [],
        loading: false,
        autoExpandParent: true,
        currFlowId: '',
        currFlowName: '',
        disable: true,
223
        treeData: [],
224
225
226
227
228
229
230
231
232
233
234
235
236
        visible: false,
        departTree: [],
        rightClickSelectedKey: '',
        hiding: true,
        model: {},
        dropTrigger: '',
        depart: {},
        columns: columns,
        disableSubmit: false,
        checkedKeys: [],
        selectedKeys: [],
        autoIncr: 1,
        currSelected: {},
237
238
239
240

        allTreeKeys:[],
        checkStrictly: true,
241
242
        form: this.$form.createForm(this),
        labelCol: {
243
244
          xs: {span: 24},
          sm: {span: 5}
245
246
        },
        wrapperCol: {
247
248
          xs: {span: 24},
          sm: {span: 16}
249
        },
250
251
252
        graphDatasource: {
          nodes: [],
          edges: []
253
        },
254
        validatorRules: {
255
256
          departName: {rules: [{required: true, message: '请输入机构/部门名称!'}]},
          orgCode: {rules: [{required: true, message: '请输入机构编码!'}]},
257
          orgCategory: {rules: [{required: true, message: '请输入机构类型!'}]},
258
          mobile: {rules: [{validator: this.validateMobile}]}
259
260
        },
        url: {
261
262
263
264
265
          delete: '/sys/sysDepart/delete',
          edit: '/sys/sysDepart/edit',
          deleteBatch: '/sys/sysDepart/deleteBatch',
          exportXlsUrl: "sys/sysDepart/exportXls",
          importExcelUrl: "sys/sysDepart/importExcel",
266
        },
267
        orgCategoryDisabled:false,
268
269
270
271
272
      }
    },
    computed: {
      importExcelUrl: function () {
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
273
274
      }
    },
275
    methods: {
276
277
278
      loadData() {
        this.refresh();
      },
279
280
281
282
283
284
      loadTree() {
        var that = this
        that.treeData = []
        that.departTree = []
        queryDepartTreeList().then((res) => {
          if (res.success) {
285
            for (let i = 0; i < res.result.length; i++) {
286
287
288
289
              let temp = res.result[i]
              that.treeData.push(temp)
              that.departTree.push(temp)
              that.setThisExpandedKeys(temp)
290
291
              that.getAllKeys(temp);
              // console.log(temp.id)
292
            }
293
            this.loading = false
294
          }
295
        })
296
      },
297
298
299
300
301
      setThisExpandedKeys(node) {
        if (node.children && node.children.length > 0) {
          this.iExpandedKeys.push(node.key)
          for (let a = 0; a < node.children.length; a++) {
            this.setThisExpandedKeys(node.children[a])
302
303
304
          }
        }
      },
305
306
307
308
309
310
311
312
313
      refresh() {
        this.loading = true
        this.loadTree()
      },
      // 右键操作方法
      rightHandle(node) {
        this.dropTrigger = 'contextmenu'
        console.log(node.node.eventKey)
        this.rightClickSelectedKey = node.node.eventKey
314
      },
315
      onExpand(expandedKeys) {
316
317
318
319
320
321
        console.log('onExpand', expandedKeys)
        // if not set autoExpandParent to false, if children expanded, parent can not collapse.
        // or, you can remove all expanded children keys.
        this.iExpandedKeys = expandedKeys
        this.autoExpandParent = false
      },
322
323
324
325
326
327
328
329
330
331
332
333
      backFlowList() {
        this.$router.back(-1)
      },
      // 右键点击下拉框改变事件
      dropStatus(visible) {
        if (visible == false) {
          this.dropTrigger = ''
        }
      },
      // 右键店家下拉关闭下拉框
      closeDrop() {
        this.dropTrigger = ''
334
      },
335
336
      addRootNode() {
        this.$refs.nodeModal.add(this.currFlowId, '')
337
      },
338
      batchDel: function () {
339
        console.log(this.checkedKeys)
340
341
342
343
344
345
        if (this.checkedKeys.length <= 0) {
          this.$message.warning('请选择一条记录!')
        } else {
          var ids = ''
          for (var a = 0; a < this.checkedKeys.length; a++) {
            ids += this.checkedKeys[a] + ','
346
          }
347
          var that = this
348
          this.$confirm({
349
            title: '确认删除',
350
            content: '确定要删除所选中的 ' + this.checkedKeys.length + ' 条数据,以及子节点数据吗?',
351
352
            onOk: function () {
              deleteAction(that.url.deleteBatch, {ids: ids}).then((res) => {
353
354
355
356
357
358
                if (res.success) {
                  that.$message.success(res.message)
                  that.loadTree()
                  that.onClearSelected()
                } else {
                  that.$message.warning(res.message)
359
                }
360
              })
361
            }
362
          })
363
364
        }
      },
365
366
367
      onSearch(value) {
        let that = this
        if (value) {
368
          searchByKeywords({keyWord: value}).then((res) => {
369
370
            if (res.success) {
              that.departTree = []
371
              for (let i = 0; i < res.result.length; i++) {
372
373
                let temp = res.result[i]
                that.departTree.push(temp)
374
              }
375
376
            } else {
              that.$message.warning(res.message)
377
378
            }
          })
379
380
        } else {
          that.loadTree()
381
382
383
        }

      },
384
385
386
387
      nodeModalOk() {
        this.loadTree()
      },
      nodeModalClose() {
388
      },
389
390
391
      hide() {
        console.log(111)
        this.visible = false
392
      },
393
      onCheck(checkedKeys, info) {
394
        console.log('onCheck', checkedKeys, info)
395
        this.hiding = false
396
397
398
399
400
401
402
403
        //this.checkedKeys = checkedKeys.checked
        // <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
        if(this.checkStrictly){
          this.checkedKeys = checkedKeys.checked;
        }else{
          this.checkedKeys = checkedKeys
        }
        // <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
404
      },
405
      onSelect(selectedKeys, e) {
406
        console.log('selected', selectedKeys, e)
407
408
409
410
411
412
413
414
        this.hiding = false
        let record = e.node.dataRef
        console.log('onSelect-record', record)
        this.currSelected = Object.assign({}, record)
        this.model = this.currSelected
        this.selectedKeys = [record.key]
        this.model.parentId = record.parentId
        this.setValuesToForm(record)
415
        this.$refs.departAuth.show(record.id);
416
417

      },
418
419
      // 触发onSelect事件时,为部门树右侧的form表单赋值
      setValuesToForm(record) {
420
421
422
423
424
        if(record.orgCategory == '1'){
          this.orgCategoryDisabled = true;
        }else{
          this.orgCategoryDisabled = false;
        }
425
        this.form.getFieldDecorator('fax', {initialValue: ''})
426
        this.form.setFieldsValue(pick(record, 'departName','orgCategory', 'orgCode', 'departOrder', 'mobile', 'fax', 'address', 'memo'))
427
      },
428
429
      getCurrSelectedTitle() {
        return !this.currSelected.title ? '' : this.currSelected.title
430
      },
431
432
      onClearSelected() {
        this.hiding = true
zhangdaihao authored
433
        this.checkedKeys = []
434
435
436
        this.currSelected = {}
        this.form.resetFields()
        this.selectedKeys = []
437
        this.$refs.departAuth.departId = ''
438
      },
439
440
      handleNodeTypeChange(val) {
        this.currSelected.nodeType = val
441
      },
442
443
      notifyTriggerTypeChange(value) {
        this.currSelected.notifyTriggerType = value
444
      },
445
446
447
448
449
      receiptTriggerTypeChange(value) {
        this.currSelected.receiptTriggerType = value
      },
      submitCurrForm() {
        this.form.validateFields((err, values) => {
450
          if (!err) {
451
452
            if (!this.currSelected.id) {
              this.$message.warning('请点击选择要修改部门!')
453
454
455
              return
            }
456
            let formData = Object.assign(this.currSelected, values)
457
            console.log('Received values of form: ', formData)
458
            httpAction(this.url.edit, formData, 'put').then((res) => {
459
              if (res.success) {
460
461
                this.$message.success('保存成功!')
                this.loadTree()
462
463
              } else {
                this.$message.error(res.message)
464
465
466
              }
            })
          }
467
        })
468
      },
469
470
      emptyCurrForm() {
        this.form.resetFields()
471
      },
472
473
      nodeSettingFormSubmit() {
        this.form.validateFields((err, values) => {
474
475
476
          if (!err) {
            console.log('Received values of form: ', values)
          }
477
        })
478
      },
479
480
      openSelect() {
        this.$refs.sysDirectiveModal.show()
481
      },
482
483
484
485
486
487
488
489
490
      handleAdd(num) {
        if (num == 1) {
          this.$refs.departModal.add()
          this.$refs.departModal.title = '新增'
        } else if (num == 2) {
          let key = this.currSelected.key
          if (!key) {
            this.$message.warning('请先选中一条记录!')
            return false
491
          }
492
493
494
495
496
          this.$refs.departModal.add(this.selectedKeys)
          this.$refs.departModal.title = '新增'
        } else {
          this.$refs.departModal.add(this.rightClickSelectedKey)
          this.$refs.departModal.title = '新增'
497
498
        }
      },
499
      handleDelete() {
500
        deleteByDepartId({id: this.rightClickSelectedKey}).then((resp) => {
501
502
503
504
505
506
507
508
509
510
          if (resp.success) {
            this.$message.success('删除成功!')
            this.loadTree()
          } else {
            this.$message.warning('删除失败!')
          }
        })
      },
      selectDirectiveOk(record) {
        console.log('选中指令数据', record)
511
        this.nodeSettingForm.setFieldsValue({directiveCode: record.directiveCode})
512
        this.currSelected.sysCode = record.sysCode
513
      },
514
      getFlowGraphData(node) {
515
        this.graphDatasource.nodes.push({
516
517
          id: node.id,
          text: node.flowNodeName
518
        })
519
520
        if (node.children.length > 0) {
          for (let a = 0; a < node.children.length; a++) {
521
522
            let temp = node.children[a]
            this.graphDatasource.edges.push({
523
524
525
526
              source: node.id,
              target: temp.id
            })
            this.getFlowGraphData(temp)
527
528
          }
        }
529
      },
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
     // <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
      expandAll () {
        this.iExpandedKeys = this.allTreeKeys
      },
      closeAll () {
        this.iExpandedKeys = []
      },
      checkALL () {
        this.checkStriccheckStrictlytly = false
        this.checkedKeys = this.allTreeKeys
      },
      cancelCheckALL () {
        //this.checkedKeys = this.defaultCheckedKeys
        this.checkedKeys = []
      },
      switchCheckStrictly (v) {
        if(v==1){
          this.checkStrictly = false
        }else if(v==2){
          this.checkStrictly = true
        }
      },
      getAllKeys(node) {
        // console.log('node',node);
        this.allTreeKeys.push(node.key)
        if (node.children && node.children.length > 0) {
          for (let a = 0; a < node.children.length; a++) {
            this.getAllKeys(node.children[a])
          }
        }
      }
      // <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
563
    },
564
565
566
    created() {
      this.currFlowId = this.$route.params.id
      this.currFlowName = this.$route.params.name
567
568
      // this.loadTree()
    },
569
570
571
572

  }
</script>
<style scoped>
573
574
575
576
  .ant-card-body .table-operator {
    margin: 15px;
  }
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
  .anty-form-btn {
    width: 100%;
    text-align: center;
  }

  .anty-form-btn button {
    margin: 0 5px;
  }

  .anty-node-layout .ant-layout-header {
    padding-right: 0
  }

  .header {
    padding: 0 8px;
  }

  .header button {
    margin: 0 3px
  }

  .ant-modal-cust-warp {
    height: 100%
  }

  .ant-modal-cust-warp .ant-modal-body {
    height: calc(100% - 110px) !important;
    overflow-y: auto
  }

  .ant-modal-cust-warp .ant-modal-content {
    height: 90% !important;
    overflow-y: hidden
  }
612
613
614
  #app .desktop {
    height: auto !important;
  }
615
616
617
618
619

  /** Button按钮间距 */
  .ant-btn {
    margin-left: 3px
  }
620
621
622
623
624
625
626
627
628
629
630
631

  .drawer-bootom-button {
    /*position: absolute;*/
    bottom: 0;
    width: 100%;
    border-top: 1px solid #e8e8e8;
    padding: 10px 16px;
    text-align: left;
    left: 0;
    background: #fff;
    border-radius: 0 0 2px 2px;
  }
632
</style>