@tongfun/tf-widget 0.1.15 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/.browserslistrc +3 -3
  2. package/.editorconfig +5 -5
  3. package/.eslintrc.js +17 -17
  4. package/README.md +46 -39
  5. package/lib/css/1.841c5d60.css +1 -0
  6. package/lib/tf-widget.common.1.js +10 -18
  7. package/lib/tf-widget.common.js +2838 -5940
  8. package/lib/tf-widget.css +1 -1
  9. package/lib/tf-widget.umd.1.js +10 -18
  10. package/lib/tf-widget.umd.js +2838 -5940
  11. package/lib/tf-widget.umd.min.1.js +1 -1
  12. package/lib/tf-widget.umd.min.js +4 -13
  13. package/package/svg-icon/index.js +8 -8
  14. package/package/svg-icon/src/SvgIcon.vue +59 -59
  15. package/package/t-data-list/index.js +6 -6
  16. package/package/t-data-list/main.vue +193 -192
  17. package/package/t-data-list/src/condition-input/basic.vue +31 -31
  18. package/package/t-data-list/src/condition-input/date.vue +106 -106
  19. package/package/t-data-list/src/condition-input/index.vue +100 -100
  20. package/package/t-data-list/src/condition-input/input.vue +31 -31
  21. package/package/t-data-list/src/condition-input/number.vue +115 -115
  22. package/package/t-data-list/src/condition-input/select.vue +86 -86
  23. package/package/t-data-list/src/js/fieldTypeEnum.js +10 -10
  24. package/package/t-data-list/src/js/operatorEnum.js +108 -109
  25. package/package/t-data-list/src/js/qureyParamsEnum.js +4 -4
  26. package/package/t-data-list/src/js/util.js +34 -34
  27. package/package/t-data-list/src/mixins/button-controll-mixin.js +93 -77
  28. package/package/t-data-list/src/pushdown/push-down.vue +158 -158
  29. package/package/t-data-list/src/t-list-search.vue +36 -32
  30. package/package/t-data-list/src/t-plan/condition-always-item.vue +143 -143
  31. package/package/t-data-list/src/t-plan/condition-mult-item.vue +222 -222
  32. package/package/t-data-list/src/t-plan/index.vue +195 -190
  33. package/package/t-data-list/src/t-plan/plan-content.vue +389 -396
  34. package/package/t-data-list/src/t-table/index.vue +129 -120
  35. package/package/t-data-list/src/t-table/table-group-item-edit.vue +238 -238
  36. package/package/t-data-list/src/t-table/table-group-item.vue +87 -87
  37. package/package/t-data-list/src/t-table/table-group.vue +180 -179
  38. package/package/t-data-list/src/t-table/table-records-header-popover.vue +246 -250
  39. package/package/t-data-list/src/t-table/table-records-selected.vue +159 -159
  40. package/package/t-data-list/src/t-table/table-records.vue +337 -324
  41. package/package/t-input/children/address.vue +101 -101
  42. package/package/t-input/children/basic-display.vue +41 -41
  43. package/package/t-input/children/basic.vue +253 -251
  44. package/package/t-input/children/date.vue +89 -89
  45. package/package/t-input/children/group-components/group-dialog.vue +344 -350
  46. package/package/t-input/children/group.vue +126 -126
  47. package/package/t-input/children/input.vue +72 -72
  48. package/package/t-input/children/number.vue +74 -74
  49. package/package/t-input/children/select.vue +89 -89
  50. package/package/t-input/children/tfile/fiile-enclosure.vue +233 -233
  51. package/package/t-input/index.js +7 -7
  52. package/package/t-input/index.vue +337 -337
  53. package/package/t-input/tInputCache.js +24 -24
  54. package/package/tf-icon-picker/README.md +8 -0
  55. package/package/tf-icon-picker/index.js +8 -8
  56. package/package/tf-icon-picker/src/tf-icon-picker.vue +266 -266
  57. package/package/tf-layout/README.md +115 -115
  58. package/package/tf-layout/index.js +8 -8
  59. package/package/tf-layout/src/components/tf-labelbar.vue +382 -382
  60. package/package/tf-layout/src/components/tf-menu.vue +180 -180
  61. package/package/tf-layout/src/components/tf-right-menu.vue +89 -89
  62. package/package/tf-layout/src/components/tf-rotate-box.vue +50 -50
  63. package/package/tf-layout/src/tf-layout.vue +120 -120
  64. package/package/tf-widget/index.js +8 -8
  65. package/package/tf-widget/src/assets/common-input.less +10 -10
  66. package/package/tf-widget/src/children/basic-data/basic-data.vue +361 -361
  67. package/package/tf-widget/src/children/basic-data/dependcy/basic-data-selector.vue +1087 -1082
  68. package/package/tf-widget/src/children/basic-data/dependcy/common-table.vue +750 -750
  69. package/package/tf-widget/src/children/basic-data/dependcy/condition-filter.vue +519 -519
  70. package/package/tf-widget/src/children/basic-data/dependcy/pagination.vue +93 -93
  71. package/package/tf-widget/src/children/basic-data/dependcy/table-control.vue +240 -240
  72. package/package/tf-widget/src/children/basic-data/dependcy/view-picture.vue +108 -108
  73. package/package/tf-widget/src/children/date-time.vue +103 -103
  74. package/package/tf-widget/src/children/date.vue +103 -103
  75. package/package/tf-widget/src/children/decimal.vue +115 -115
  76. package/package/tf-widget/src/children/integer.vue +104 -104
  77. package/package/tf-widget/src/children/property.vue +59 -59
  78. package/package/tf-widget/src/children/single-line-text.vue +82 -82
  79. package/package/tf-widget/src/children/small-pictures.vue +223 -223
  80. package/package/tf-widget/src/children/text-area.vue +74 -74
  81. package/package/tf-widget/src/children/tf-select.vue +113 -113
  82. package/package/tf-widget/src/tf-widget.vue +175 -175
  83. package/package.json +44 -43
  84. package/postinstall.js +10 -10
  85. package/src/api/edit.js +97 -97
  86. package/src/api/file-enclosure.js +26 -26
  87. package/src/api/push-down.js +19 -19
  88. package/src/api/table.js +294 -294
  89. package/src/api/tableV3.js +160 -186
  90. package/src/assets/images/icons/index.js +9 -9
  91. package/src/assets/images/icons/svg/add.svg +5 -5
  92. package/src/assets/images/icons/svg/push-down.svg +1 -1
  93. package/src/assets/images/icons/svg/remove.svg +1 -1
  94. package/src/assets/styles/common-table.less +202 -202
  95. package/src/directives/debounce.js +24 -0
  96. package/src/index.js +31 -31
  97. package/src/mixins/t-data-query-mixin.js +290 -289
  98. package/src/utils/auth.js +22 -22
  99. package/src/utils/request.js +42 -42
  100. package/src/utils/stato-anormale.js +59 -59
  101. package/src/utils/utils.js +109 -109
  102. package/src/utils/validate.js +84 -84
  103. package/dist/css/chunk-9c7a8e06.920744ef.css +0 -1
  104. package/dist/css/chunk-vendors.de967301.css +0 -1
  105. package/dist/css/index.153bd82e.css +0 -1
  106. package/dist/fonts/element-icons.535877f5.woff +0 -0
  107. package/dist/fonts/element-icons.732389de.ttf +0 -0
  108. package/dist/js/chunk-9c7a8e06.ffff58b5.js +0 -1
  109. package/dist/js/chunk-vendors.45086d09.js +0 -39
  110. package/dist/js/index.52bcef0d.js +0 -1
  111. package/lib/css/1.920744ef.css +0 -1
@@ -1,350 +1,344 @@
1
- <template>
2
- <div class="main">
3
- <!-- 分组选择主弹窗 -->
4
- <el-dialog
5
- :visible="visible"
6
- class="group-display"
7
- width="30%"
8
- title="分组选择"
9
- @update:visible="handleUpdateVisible"
10
- @open="handleOpen"
11
- >
12
- <div class="dataDialog">
13
- <div class="dialog-header">
14
- <el-input v-model="searchText" placeholder="搜索关键字" />
15
- </div>
16
- <div class="dialog-body">
17
- <el-scrollbar class="scrollbar">
18
- <el-tree
19
- ref="groupTree"
20
- :data="groupList"
21
- :show-checkbox="false"
22
- node-key="id"
23
- highlight-current
24
- :expand-on-click-node="false"
25
- check-on-click-node
26
- accordion
27
- :props="defaultProps"
28
- :filter-node-method="filterNode"
29
- :check-strictly="true"
30
- @check="handleNodeChange"
31
- />
32
- </el-scrollbar>
33
- </div>
34
- </div>
35
- <span slot="footer" class="dialog-footer">
36
- <el-button type="primary" size="mini" @click="openOperateDialog('insert')">新建分组</el-button>
37
- <el-button type="primary" size="mini" @click="openOperateDialog('update')">编辑分组</el-button>
38
- <el-button type="primary" size="mini" @click="handleCloseDialog">取 消</el-button>
39
- <el-button type="primary" size="mini" @click="handleDialogConfirm">确 定</el-button>
40
- </span>
41
- </el-dialog>
42
- <!-- 新建/编辑页面 -->
43
- <el-dialog
44
- title=""
45
- :visible.sync="operatingVisible"
46
- width="30%"
47
- @open="handleOpenOperate"
48
- @close="handleCloseOperate"
49
- >
50
- <div>
51
- <el-form ref="form" :rules="rules" :model="operatingData" label-width="80px">
52
- <el-form-item label="父级名称" prop="pid">
53
- <el-select v-model="operatingData.pid" placeholder="" @change="handleParentSelect">
54
- <el-option
55
- v-for="item in selectList"
56
- :key="item.id"
57
- :label="item.name"
58
- :value="item.id"
59
- />
60
- </el-select>
61
- </el-form-item>
62
- <el-form-item label="父级编码" prop="code">
63
- <el-input v-model="operatingData.groupCode" placeholder="" disabled />
64
- </el-form-item>
65
- <el-form-item label="编码" prop="code">
66
- <el-input v-model="operatingData.code" placeholder="" />
67
- </el-form-item>
68
- <el-form-item label="分组名称" prop="name">
69
- <el-input v-model="operatingData.name" placeholder="" />
70
- </el-form-item>
71
- </el-form>
72
- </div>
73
- <div slot="footer">
74
- <el-button @click="operatingVisible = false">取 消</el-button>
75
- <el-button type="primary" @click="handleSubmitOperate">确 定</el-button>
76
- </div>
77
- </el-dialog>
78
- </div>
79
- </template>
80
- <script>
81
- import { addGroupNode, updateGroupNode } from '@/api/tableV3'
82
- export default {
83
- name: 'GroupDialog',
84
- props: {
85
- data: {
86
- type: Array,
87
- default: () => {
88
- return []
89
- }
90
- },
91
- visible: {
92
- type: Boolean,
93
- default: true
94
- },
95
- value: {
96
- type: Object,
97
- default: () => {
98
- return {}
99
- }
100
- }
101
- },
102
- inject: ['target'],
103
- data () {
104
- var checkBlank = (rule, value, callback) => {
105
- const reg = /\s+/g
106
- if (reg.test(value)) {
107
- return callback(new Error('不能含有空格'))
108
- }
109
- callback()
110
- }
111
- return {
112
- searchText: '',
113
- selectNode: {},
114
- defaultProps: {
115
- children: 'children',
116
- label: 'name'
117
- },
118
- rules: {
119
- name: [
120
- { required: true, message: '不能为空', trigger: 'blur' },
121
- { validator: checkBlank, trigger: 'blur' }
122
- ],
123
- code: [
124
- { required: true, message: '不能为空', trigger: 'blur' }
125
- ],
126
- pid: [
127
- { required: true, message: '不能为空', trigger: 'blur' }
128
- ]
129
- },
130
- // selectList: [],
131
- operatingVisible: false,
132
- operatingStatus: 'insert', // 新增编辑弹窗的状态标识
133
- operatingData: {
134
- groupCode: '', // 分组编码
135
- code: '', // 节点编码
136
- id: '', // 节点id(编辑的时候存在)
137
- name: '', // 节点名称
138
- pid: ''// 父级id
139
- }
140
-
141
- }
142
- },
143
- computed: {
144
- groupList () {
145
- let list = []
146
- if (this.data && this.data[0]) {
147
- list = this.data[0]
148
- }
149
- // todo: 下面的方式eslint报错,而且下面的是啥逻辑啊,需要追踪数据后确定
150
- // return this.data[0] && this.data || []
151
- return list
152
- },
153
- selectMap () {
154
- return this.createSelectMap(this.data)
155
- },
156
- selectList () {
157
- return Object.values(this.selectMap)
158
- }
159
- },
160
- watch: {
161
- searchText (val) {
162
- this.$refs.groupTree.filter(val)
163
- },
164
- selectMap () {
165
- this.operatingVisible && this.updateGroupStatus()
166
- }
167
- },
168
- methods: {
169
- // 打开编辑弹窗前进行必要的校验
170
- openOperateDialog (mod) {
171
- if (!this.selectNode.id) {
172
- return this.$message.error('请先选择节点')
173
- }
174
- this.operatingStatus = mod
175
- if (this.operatingStatus === 'update' && this.selectNode.id === '0') {
176
- return this.$message.error('根节点不可编辑')
177
- }
178
- this.operatingVisible = true
179
- },
180
- // 打开弹窗进行的操作
181
- handleOpen () {
182
- this.$nextTick(() => {
183
- if (this.value && this.value.id) {
184
- this.$refs.groupTree.setCheckedKeys([this.value.id])
185
- this.$refs.groupTree.setCurrentKey(this.value.id)
186
- this.updateGroupStatus()
187
- this.handleNodeChange(this.selectMap[this.value.id])
188
- }
189
- })
190
- },
191
- // 更新展开状态
192
- updateGroupStatus () {
193
- this.$nextTick(() => {
194
- const id = this.selectNode.id || this.value.id
195
- if (id) {
196
- this.$refs.groupTree.setCurrentKey(id)
197
- this.expandedNode(id)
198
- }
199
- })
200
- },
201
- expandedNode (id, temp = false) {
202
- if (temp && this.$refs.groupTree.store.nodesMap[id]) {
203
- this.$refs.groupTree.store.nodesMap[id].expanded = true
204
- }
205
-
206
- if (this.selectMap[id].pid) {
207
- this.expandedNode(this.selectMap[id].pid, true)
208
- }
209
- },
210
- // 创建数据的map集合(id:{}
211
- createSelectMap (data, map, parentData = {}) {
212
- const dataCache = data || this.data
213
- const result = map || {}
214
- dataCache.forEach(e => {
215
- if (e.id) {
216
- result[e.id] = { id: e.id, name: e.name, groupCode: e.groupCode, pid: parentData.id || '' }
217
- }
218
- e.children && this.createSelectMap(e.children, result, e)
219
- })
220
- if (!map) return result
221
- },
222
- // 节点过滤
223
- filterNode (value, data) {
224
- if (!value) return true
225
- return data.name.indexOf(value) !== -1
226
- },
227
- // 节点选中
228
- handleNodeChange (data) {
229
- // console.log(this.$refs.groupTree)
230
- this.$refs.groupTree.setCheckedKeys([data.id])
231
- this.selectNode = data
232
- },
233
- // dialog确认
234
- handleDialogConfirm () {
235
- this.$emit('confirm', { id: this.selectNode.id, name: this.selectNode.name })
236
- this.handleCloseDialog()
237
- },
238
- // 关闭主dialog
239
- handleCloseDialog () {
240
- this.$emit('update:visible', false)
241
- },
242
- // 更新dialog
243
- handleUpdateVisible (val) {
244
- this.$emit('update:visible', val)
245
- },
246
- // 赋值
247
- handleParentSelect (id, field = 'groupCode') {
248
- this.operatingData[field] = this.selectMap[id][field]
249
- },
250
- // 打开操作界面
251
- handleOpenOperate () { // 打开操作界面
252
- if (this.operatingStatus === 'insert') {
253
- this.operatingData.pid = this.selectNode.id
254
- this.handleParentSelect(this.selectNode.id)
255
- }
256
- if (this.operatingStatus === 'update') {
257
- const id = this.selectMap[this.selectNode.id].pid
258
- this.operatingData.pid = id
259
- const groupCodeList = this.selectNode.groupCode.split('.')
260
- this.operatingData.code = groupCodeList[groupCodeList.length - 1]
261
- this.handleParentSelect(id)
262
- this.handleParentSelect(this.selectNode.id, 'name')
263
- }
264
- },
265
- // 关闭弹窗
266
- handleCloseOperate () {
267
- this.$refs.form.clearValidate()
268
- Object.keys(this.operatingData).forEach(e => {
269
- this.operatingData[e] = ''
270
- })
271
- },
272
- // 提交操作信息
273
- handleSubmitOperate () {
274
- this.$refs.form.validate(success => {
275
- if (success) {
276
- this.operatingStatus === 'insert'
277
- ? this.updateGroup(addGroupNode, '添加成功')
278
- : this.updateGroup(updateGroupNode, '修改成功')
279
- }
280
- })
281
- },
282
- async updateGroup (fun, msg) {
283
- const groupCode = this.operatingData.groupCode
284
- ? this.operatingData.groupCode + '.' + this.operatingData.code
285
- : this.operatingData.code
286
- const res = await fun(
287
- this.target,
288
- this.operatingData.name,
289
- this.operatingStatus === 'insert' ? '' : this.selectNode.id,
290
- this.operatingData.pid,
291
- groupCode)
292
-
293
- if (res.code !== 0) {
294
- return this.$message.error(res.msg)
295
- }
296
- this.$emit('success')
297
- // 如果修改到当前节点的更新操作
298
- if (this.selectNode.id === this.value.id) {
299
- this.selectNode.name = this.operatingData.name
300
- this.$emit('confirm', { id: this.value.id, name: this.operatingData.name })
301
- }
302
- this.$message.success(msg)
303
- this.operatingVisible = false
304
- }
305
- }
306
- }
307
- </script>
308
- <style lang="less" scoped>
309
- /**
310
- 列表弹窗
311
- */
312
- .group-display{
313
- ::v-deep .el-dialog__body {
314
- padding-top:0 !important;
315
- }
316
- ::v-deep .el-dialog__footer {
317
- .el-button {
318
- background-color: #07599C;
319
- border:none;
320
- }
321
- }
322
- }
323
-
324
- .dataDialog{
325
- height: 50vh;
326
- .dialog-header{
327
- width: 100%;
328
- height: 40px;
329
- box-sizing: border-box;
330
- padding: 5px;
331
- padding-top:0px;
332
- ::v-deep .el-input__inner {
333
- height:30px;
334
- width: 100% !important;
335
- }
336
- }
337
- .dialog-body{
338
- height: 100%;
339
- .scrollbar{
340
- height: 100%;
341
- /deep/.el-scrollbar__wrap{
342
- overflow-x: hidden;
343
- }
344
- }
345
- }
346
- }
347
- .el-form-item{
348
- margin-top: 20px;
349
- }
350
- </style>
1
+ <template>
2
+ <div class="main">
3
+ <!-- 分组选择主弹窗 -->
4
+ <el-dialog
5
+ :visible="visible"
6
+ class="group-display"
7
+ width="30%"
8
+ title="分组选择"
9
+ @update:visible="handleUpdateVisible"
10
+ @open="handleOpen"
11
+ >
12
+ <div class="dataDialog">
13
+ <div class="dialog-header">
14
+ <el-input v-model="searchText" placeholder="搜索关键字" />
15
+ </div>
16
+ <div class="dialog-body">
17
+ <el-scrollbar class="scrollbar">
18
+ <el-tree
19
+ ref="groupTree"
20
+ :data="groupList"
21
+ :show-checkbox="false"
22
+ node-key="id"
23
+ highlight-current
24
+ :expand-on-click-node="false"
25
+ check-on-click-node
26
+ accordion
27
+ :props="defaultProps"
28
+ :filter-node-method="filterNode"
29
+ :check-strictly="true"
30
+ @check="handleNodeChange"
31
+ />
32
+ </el-scrollbar>
33
+ </div>
34
+ </div>
35
+ <span slot="footer" class="dialog-footer">
36
+ <el-button type="primary" size="mini" @click="openOperateDialog('insert')">新建分组</el-button>
37
+ <el-button type="primary" size="mini" @click="openOperateDialog('update')">编辑分组</el-button>
38
+ <el-button type="primary" size="mini" @click="handleCloseDialog">取 消</el-button>
39
+ <el-button type="primary" size="mini" @click="handleDialogConfirm">确 定</el-button>
40
+ </span>
41
+ </el-dialog>
42
+ <!-- 新建/编辑页面 -->
43
+ <el-dialog
44
+ title=""
45
+ :visible.sync="operatingVisible"
46
+ width="30%"
47
+ @open="handleOpenOperate"
48
+ @close="handleCloseOperate"
49
+ >
50
+ <div>
51
+ <el-form ref="form" :rules="rules" :model="operatingData" label-width="80px">
52
+ <el-form-item label="父级名称" prop="pid">
53
+ <el-select v-model="operatingData.pid" placeholder="" @change="handleParentSelect">
54
+ <el-option
55
+ v-for="item in selectList"
56
+ :key="item.id"
57
+ :label="item.name"
58
+ :value="item.id"
59
+ />
60
+ </el-select>
61
+ </el-form-item>
62
+ <el-form-item label="父级编码" prop="code">
63
+ <el-input v-model="operatingData.groupCode" placeholder="" disabled />
64
+ </el-form-item>
65
+ <el-form-item label="编码" prop="code">
66
+ <el-input v-model="operatingData.code" placeholder="" />
67
+ </el-form-item>
68
+ <el-form-item label="分组名称" prop="name">
69
+ <el-input v-model="operatingData.name" placeholder="" />
70
+ </el-form-item>
71
+ </el-form>
72
+ </div>
73
+ <div slot="footer">
74
+ <el-button @click="operatingVisible = false">取 消</el-button>
75
+ <el-button type="primary" @click="handleSubmitOperate">确 定</el-button>
76
+ </div>
77
+ </el-dialog>
78
+ </div>
79
+ </template>
80
+ <script>
81
+ import { addGroupNode, updateGroupNode } from '@/api/tableV3'
82
+ export default {
83
+ name: 'GroupDialog',
84
+ props: {
85
+ data: {
86
+ type: Array,
87
+ default: () => {
88
+ return []
89
+ }
90
+ },
91
+ visible: {
92
+ type: Boolean,
93
+ default: true
94
+ },
95
+ value: {
96
+ type: Object,
97
+ default: () => {
98
+ return {}
99
+ }
100
+ }
101
+ },
102
+ inject: ['target'],
103
+ data () {
104
+ var checkBlank = (rule, value, callback) => {
105
+ const reg = /\s+/g
106
+ if (reg.test(value)) {
107
+ return callback(new Error('不能含有空格'))
108
+ }
109
+ callback()
110
+ }
111
+ return {
112
+ searchText: '',
113
+ selectNode: {},
114
+ defaultProps: {
115
+ children: 'children',
116
+ label: 'name'
117
+ },
118
+ rules: {
119
+ name: [
120
+ { required: true, message: '不能为空', trigger: 'blur' },
121
+ { validator: checkBlank, trigger: 'blur' }
122
+ ],
123
+ code: [
124
+ { required: true, message: '不能为空', trigger: 'blur' }
125
+ ],
126
+ pid: [
127
+ { required: true, message: '不能为空', trigger: 'blur' }
128
+ ]
129
+ },
130
+ // selectList: [],
131
+ operatingVisible: false,
132
+ operatingStatus: 'insert', // 新增编辑弹窗的状态标识
133
+ operatingData: {
134
+ groupCode: '', // 分组编码
135
+ code: '', // 节点编码
136
+ id: '', // 节点id(编辑的时候存在)
137
+ name: '', // 节点名称
138
+ pid: ''// 父级id
139
+ }
140
+
141
+ }
142
+ },
143
+ computed: {
144
+ groupList () {
145
+ return (this.data && this.data[0]) || []
146
+ },
147
+ selectMap () {
148
+ return this.createSelectMap(this.data)
149
+ },
150
+ selectList () {
151
+ return Object.values(this.selectMap)
152
+ }
153
+ },
154
+ watch: {
155
+ searchText (val) {
156
+ this.$refs.groupTree.filter(val)
157
+ },
158
+ selectMap () {
159
+ this.operatingVisible && this.updateGroupStatus()
160
+ }
161
+ },
162
+ methods: {
163
+ // 打开编辑弹窗前进行必要的校验
164
+ openOperateDialog (mod) {
165
+ if (!this.selectNode.id) {
166
+ return this.$message.error('请先选择节点')
167
+ }
168
+ this.operatingStatus = mod
169
+ if (this.operatingStatus === 'update' && this.selectNode.id === '0') {
170
+ return this.$message.error('根节点不可编辑')
171
+ }
172
+ this.operatingVisible = true
173
+ },
174
+ // 打开弹窗进行的操作
175
+ handleOpen () {
176
+ this.$nextTick(() => {
177
+ if (this.value && this.value.id) {
178
+ this.$refs.groupTree.setCheckedKeys([this.value.id])
179
+ this.$refs.groupTree.setCurrentKey(this.value.id)
180
+ this.updateGroupStatus()
181
+ this.handleNodeChange(this.selectMap[this.value.id])
182
+ }
183
+ })
184
+ },
185
+ // 更新展开状态
186
+ updateGroupStatus () {
187
+ this.$nextTick(() => {
188
+ const id = this.selectNode.id || this.value.id
189
+ if (id) {
190
+ this.$refs.groupTree.setCurrentKey(id)
191
+ this.expandedNode(id)
192
+ }
193
+ })
194
+ },
195
+ expandedNode (id, temp = false) {
196
+ if (temp && this.$refs.groupTree.store.nodesMap[id]) {
197
+ this.$refs.groupTree.store.nodesMap[id].expanded = true
198
+ }
199
+
200
+ if (this.selectMap[id].pid) {
201
+ this.expandedNode(this.selectMap[id].pid, true)
202
+ }
203
+ },
204
+ // 创建数据的map集合(id:{}
205
+ createSelectMap (data, map, parentData = {}) {
206
+ const dataCache = data || this.data
207
+ const result = map || {}
208
+ dataCache.forEach(e => {
209
+ if (e.id) {
210
+ result[e.id] = { id: e.id, name: e.name, groupCode: e.groupCode, pid: parentData.id || '' }
211
+ }
212
+ e.children && this.createSelectMap(e.children, result, e)
213
+ })
214
+ if (!map) return result
215
+ },
216
+ // 节点过滤
217
+ filterNode (value, data) {
218
+ if (!value) return true
219
+ return data.name.indexOf(value) !== -1
220
+ },
221
+ // 节点选中
222
+ handleNodeChange (data) {
223
+ // console.log(this.$refs.groupTree)
224
+ this.$refs.groupTree.setCheckedKeys([data.id])
225
+ this.selectNode = data
226
+ },
227
+ // dialog确认
228
+ handleDialogConfirm () {
229
+ this.$emit('confirm', { id: this.selectNode.id, name: this.selectNode.name })
230
+ this.handleCloseDialog()
231
+ },
232
+ // 关闭主dialog
233
+ handleCloseDialog () {
234
+ this.$emit('update:visible', false)
235
+ },
236
+ // 更新dialog
237
+ handleUpdateVisible (val) {
238
+ this.$emit('update:visible', val)
239
+ },
240
+ // 赋值
241
+ handleParentSelect (id, field = 'groupCode') {
242
+ this.operatingData[field] = this.selectMap[id][field]
243
+ },
244
+ // 打开操作界面
245
+ handleOpenOperate () { // 打开操作界面
246
+ if (this.operatingStatus === 'insert') {
247
+ this.operatingData.pid = this.selectNode.id
248
+ this.handleParentSelect(this.selectNode.id)
249
+ }
250
+ if (this.operatingStatus === 'update') {
251
+ const id = this.selectMap[this.selectNode.id].pid
252
+ this.operatingData.pid = id
253
+ const groupCodeList = this.selectNode.groupCode.split('.')
254
+ this.operatingData.code = groupCodeList[groupCodeList.length - 1]
255
+ this.handleParentSelect(id)
256
+ this.handleParentSelect(this.selectNode.id, 'name')
257
+ }
258
+ },
259
+ // 关闭弹窗
260
+ handleCloseOperate () {
261
+ this.$refs.form.clearValidate()
262
+ Object.keys(this.operatingData).forEach(e => {
263
+ this.operatingData[e] = ''
264
+ })
265
+ },
266
+ // 提交操作信息
267
+ handleSubmitOperate () {
268
+ this.$refs.form.validate(success => {
269
+ if (success) {
270
+ this.operatingStatus === 'insert'
271
+ ? this.updateGroup(addGroupNode, '添加成功')
272
+ : this.updateGroup(updateGroupNode, '修改成功')
273
+ }
274
+ })
275
+ },
276
+ async updateGroup (fun, msg) {
277
+ const groupCode = this.operatingData.groupCode
278
+ ? this.operatingData.groupCode + '.' + this.operatingData.code
279
+ : this.operatingData.code
280
+ const res = await fun(
281
+ this.target,
282
+ this.operatingData.name,
283
+ this.operatingStatus === 'insert' ? '' : this.selectNode.id,
284
+ this.operatingData.pid,
285
+ groupCode)
286
+
287
+ if (res.code !== 0) {
288
+ return this.$message.error(res.msg)
289
+ }
290
+ this.$emit('success')
291
+ // 如果修改到当前节点的更新操作
292
+ if (this.selectNode.id === this.value.id) {
293
+ this.selectNode.name = this.operatingData.name
294
+ this.$emit('confirm', { id: this.value.id, name: this.operatingData.name })
295
+ }
296
+ this.$message.success(msg)
297
+ this.operatingVisible = false
298
+ }
299
+ }
300
+ }
301
+ </script>
302
+ <style lang="less" scoped>
303
+ /**
304
+ 列表弹窗
305
+ */
306
+ .group-display{
307
+ ::v-deep .el-dialog__body {
308
+ padding-top:0 !important;
309
+ }
310
+ ::v-deep .el-dialog__footer {
311
+ .el-button {
312
+ background-color: #07599C;
313
+ border:none;
314
+ }
315
+ }
316
+ }
317
+
318
+ .dataDialog{
319
+ height: 50vh;
320
+ .dialog-header{
321
+ width: 100%;
322
+ height: 40px;
323
+ box-sizing: border-box;
324
+ padding: 5px;
325
+ padding-top:0px;
326
+ ::v-deep .el-input__inner {
327
+ height:30px;
328
+ width: 100% !important;
329
+ }
330
+ }
331
+ .dialog-body{
332
+ height: 100%;
333
+ .scrollbar{
334
+ height: 100%;
335
+ /deep/.el-scrollbar__wrap{
336
+ overflow-x: hidden;
337
+ }
338
+ }
339
+ }
340
+ }
341
+ .el-form-item{
342
+ margin-top: 20px;
343
+ }
344
+ </style>