cloud-module-bpm 6.2.6

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 (69) hide show
  1. package/README.md +20 -0
  2. package/babel.config.js +3 -0
  3. package/dist/cloud-module-bpm.common.js +96842 -0
  4. package/dist/cloud-module-bpm.common.js.map +1 -0
  5. package/dist/cloud-module-bpm.css +1 -0
  6. package/dist/cloud-module-bpm.umd.js +96852 -0
  7. package/dist/cloud-module-bpm.umd.js.map +1 -0
  8. package/dist/cloud-module-bpm.umd.min.js +41 -0
  9. package/dist/cloud-module-bpm.umd.min.js.map +1 -0
  10. package/dist/demo.html +10 -0
  11. package/dist/fonts/element-icons.535877f5.woff +0 -0
  12. package/dist/fonts/element-icons.732389de.ttf +0 -0
  13. package/examples/App.vue +221 -0
  14. package/examples/main.js +17 -0
  15. package/node_modules.zip +0 -0
  16. package/package.json +66 -0
  17. package/packages/bpm-back-anylink-dialog/bpm-back-anylink-dialog.vue +428 -0
  18. package/packages/bpm-back-anylink-dialog/index.js +7 -0
  19. package/packages/bpm-back-anylink-dialog/readme.md +1 -0
  20. package/packages/bpm-form-tools/bpm-form-tools.vue +238 -0
  21. package/packages/bpm-form-tools/index.js +7 -0
  22. package/packages/bpm-form-tools/readme.md +5 -0
  23. package/packages/bpm-grid-buttons/bpm-grid-buttons.vue +150 -0
  24. package/packages/bpm-grid-buttons/index.js +7 -0
  25. package/packages/bpm-grid-buttons/readme.md +5 -0
  26. package/packages/bpm-grid-buttons-new/bpm-grid-buttons-new.vue +199 -0
  27. package/packages/bpm-grid-buttons-new/index.js +7 -0
  28. package/packages/bpm-grid-buttons-new/readme.md +8 -0
  29. package/packages/bpm-jump-dialog/bpm-jump-dialog.vue +378 -0
  30. package/packages/bpm-jump-dialog/index.js +7 -0
  31. package/packages/bpm-jump-dialog/readme.md +1 -0
  32. package/packages/bpm-jump-latest-dialog/Tree.vue +91 -0
  33. package/packages/bpm-jump-latest-dialog/bpm-jump-latest-dialog.vue +532 -0
  34. package/packages/bpm-jump-latest-dialog/index.js +7 -0
  35. package/packages/bpm-jump-latest-dialog/readme.md +1 -0
  36. package/packages/bpm-opinion-dialog/bpm-opinion.vue +312 -0
  37. package/packages/bpm-opinion-dialog/index.js +7 -0
  38. package/packages/bpm-proctrack-dialog/bpm-proctrack.vue +102 -0
  39. package/packages/bpm-proctrack-dialog/index.js +7 -0
  40. package/packages/bpm-send-read-dialog/SelectedGrid.vue +99 -0
  41. package/packages/bpm-send-read-dialog/SourceGrid.vue +396 -0
  42. package/packages/bpm-send-read-dialog/Tree.vue +74 -0
  43. package/packages/bpm-send-read-dialog/bpm-next-node.vue +51 -0
  44. package/packages/bpm-send-read-dialog/bpm-send-read.vue +100 -0
  45. package/packages/bpm-send-read-dialog/index.js +7 -0
  46. package/packages/bpm-send-read-opinion-dialog/bpm-send-read-opinion.vue +261 -0
  47. package/packages/bpm-send-read-opinion-dialog/index.js +7 -0
  48. package/packages/bpm-sign-dialog/SelectedGrid.vue +102 -0
  49. package/packages/bpm-sign-dialog/SourceGrid.vue +413 -0
  50. package/packages/bpm-sign-dialog/Tree.vue +194 -0
  51. package/packages/bpm-sign-dialog/bpm-next-node.vue +57 -0
  52. package/packages/bpm-sign-dialog/bpm-sign-select.vue +116 -0
  53. package/packages/bpm-sign-dialog/index.js +7 -0
  54. package/packages/bpm-sign-opinion-dialog/bpm-sign-opinion.vue +259 -0
  55. package/packages/bpm-sign-opinion-dialog/index.js +7 -0
  56. package/packages/bpm-user-select-dialog/SelectedGrid.vue +155 -0
  57. package/packages/bpm-user-select-dialog/SourceGrid.vue +419 -0
  58. package/packages/bpm-user-select-dialog/Tree.vue +96 -0
  59. package/packages/bpm-user-select-dialog/bpm-next-node.vue +51 -0
  60. package/packages/bpm-user-select-dialog/bpm-user-select.vue +103 -0
  61. package/packages/bpm-user-select-dialog/index.js +7 -0
  62. package/packages/i18n/i18n.js +15 -0
  63. package/packages/i18n/langs/en_US.js +42 -0
  64. package/packages/i18n/langs/index.js +6 -0
  65. package/packages/i18n/langs/zh_CN.js +87 -0
  66. package/packages/index.js +48 -0
  67. package/packages/utils/merit-bpm.js +975 -0
  68. package/public/favicon.ico +0 -0
  69. package/vue.config.js +55 -0
@@ -0,0 +1,419 @@
1
+ <template>
2
+ <div>
3
+ <el-row justify="space-between" style="padding: 5px;">
4
+ <el-col
5
+ :span="7"
6
+ style="float: left;padding-right: 40px;margin-top: 5px;padding-left: 2px;"
7
+ >{{ $t('base.list_alternatives') }}</el-col
8
+ >
9
+ <el-col :span="17" style="float:right;" v-if="opt.showSearch">
10
+ <el-input
11
+ placeholder="请输入姓名或编码"
12
+ v-model="searchName"
13
+ clearable
14
+ @change="requestGridData"
15
+ >
16
+ <el-button
17
+ class="el-icon-search-button"
18
+ slot="append"
19
+ icon="el-icon-search"
20
+ @click="requestGridData"
21
+ ></el-button>
22
+ </el-input>
23
+ </el-col>
24
+ </el-row>
25
+ <el-table
26
+ ref="sourceGrid"
27
+ :data="empTableData"
28
+ stripe
29
+ :height="tableHeight"
30
+ style="width: 100%;"
31
+ :element-loading-text="$t('base.table.loading')"
32
+ element-loading-spinner="el-icon-loading"
33
+ element-loading-background="rgba(255, 255, 255, 0.8)"
34
+ @select-all="handleSelectAll"
35
+ @select="handleSelect"
36
+ @row-click="handleRowClick"
37
+ >
38
+ <div class=""></div>
39
+ <el-table-column
40
+ style="height: 18px"
41
+ type="selection"
42
+ v-if="notOnlyApprove"
43
+ ></el-table-column>
44
+ <el-table-column prop="name" :label="$t('base.user.name')" fit="true">
45
+ <template slot-scope="scope">
46
+ <div :title="scope.row.name" class="cell-hidden">
47
+ {{ scope.row.name }}
48
+ </div>
49
+ </template>
50
+ </el-table-column>
51
+ <el-table-column
52
+ prop="code"
53
+ :label="$t('base.user.user_name')"
54
+ fit="true"
55
+ >
56
+ <template slot-scope="scope">
57
+ <div :title="scope.row.code" class="cell-hidden">
58
+ {{ scope.row.code }}
59
+ </div>
60
+ </template>
61
+ </el-table-column>
62
+ <el-table-column prop="deptName" :label="$t('base.dept.name')" fit="true">
63
+ <template slot-scope="scope">
64
+ <div :title="scope.row.deptName" class="cell-hidden">
65
+ {{ scope.row.deptName }}
66
+ </div>
67
+ </template>
68
+ </el-table-column>
69
+ </el-table>
70
+ <el-pagination
71
+ class="SourceGrid"
72
+ @size-change="handleSizeChange"
73
+ @current-change="handleCurrentChange"
74
+ :current-page="currentPage"
75
+ :page-size="pageSize"
76
+ layout="total, prev, pager, next"
77
+ :total="empTotal"
78
+ :pager-count="pagerCount"
79
+ ></el-pagination>
80
+ </div>
81
+ </template>
82
+
83
+ <script>
84
+ import {
85
+ Main,
86
+ Container,
87
+ Row,
88
+ Col,
89
+ Table,
90
+ TableColumn,
91
+ Pagination,
92
+ Input,
93
+ Button
94
+ } from 'element-ui';
95
+ import axios from 'cloud-module-base/packages/httpConfig/http';
96
+ export default {
97
+ props: {
98
+ opt: {
99
+ type: Object,
100
+ required: true
101
+ }
102
+ },
103
+ components: {
104
+ 'el-main': Main,
105
+ 'el-container': Container,
106
+ 'el-row': Row,
107
+ 'el-col': Col,
108
+ 'el-table': Table,
109
+ 'el-table-column': TableColumn,
110
+ 'el-pagination': Pagination,
111
+ 'el-input': Input,
112
+ 'el-button': Button
113
+ },
114
+ data() {
115
+ return {
116
+ empUrl: '/api/identity/bpm-user/list-by-deptcode', //人员数据接口
117
+ searchName: '',
118
+ multipleSelection: [],
119
+ tableHeight: 355,
120
+ currentPage: 1,
121
+ pageSize: 10,
122
+ pagerCount: 5,
123
+ treeNode: {},
124
+ empTableData: [],
125
+ sourceAllData: [],
126
+ empTotal: 0,
127
+ loading: false,
128
+ receiverIds: []
129
+ };
130
+ },
131
+ computed: {
132
+ //是否是单人审批,如果不是单人审批则展示多选框
133
+ notOnlyApprove() {
134
+ return this.opt.approve.type != 'onlyApprove';
135
+ }
136
+ },
137
+ created() {
138
+ // this.tableHeight = window.outerHeight > 900 ? 385 : 265;
139
+ this.opt.bpmUsers.forEach(bpmUser => {
140
+ this.receiverIds.push(bpmUser.code);
141
+ });
142
+ },
143
+ watch: {
144
+ opt(old, newVal) {
145
+ this.empTotal = this.opt.bpmUsers.length;
146
+
147
+ this.empTableData = this.sourceAllData.slice(
148
+ this.pageSize * (this.currentPage - 1),
149
+ this.pageSize * this.currentPage
150
+ );
151
+ this.opt.bpmUsers.forEach(bpmUser => {
152
+ this.receiverIds.push(bpmUser.code);
153
+ });
154
+ }
155
+ },
156
+ //加载时调用方法 函数
157
+ mounted() {
158
+ let _this = this;
159
+
160
+ // 初始化选择数据分页
161
+ this.sourceAllData = this.opt.bpmUsers;
162
+ if (!this.treeNode.code) {
163
+ this.resultDataChange();
164
+ }
165
+
166
+ this.empTotal = this.opt.bpmUsers.length;
167
+ //点击树节点,刷新待选列表
168
+ this.EventBus.$on('refresh-source-grid' + this.opt.taskDeKey, treeNode => {
169
+ _this.pageSize = 10;
170
+ _this.currentPage = 1;
171
+ _this.treeNode = treeNode.attributes || treeNode;
172
+ _this.requestGridData();
173
+ });
174
+ //点击已选列表,取消刷新列表选择
175
+ this.EventBus.$on('cancel-seleced-user' + this.opt.taskDeKey, row => {
176
+ _this.cancelSelecedUser(row);
177
+ });
178
+ //监听保存按钮事件。点击后,清除已选择处理人对象
179
+ this.EventBus.$on('save-button-click', function() {
180
+ _this.searchName = '';
181
+ _this.currentPage = 1;
182
+ _this.multipleSelection = [];
183
+ });
184
+ },
185
+ methods: {
186
+ //每页显示数据个数变化时调用
187
+ handleSizeChange(val) {
188
+ this.pageSize = val;
189
+ //点击过tree,this.treeNode.code有值进行分页
190
+ if (this.treeNode.code) {
191
+ this.requestGridData();
192
+ } else {
193
+ //未点击tree进行分页
194
+ this.resultDataChange();
195
+ }
196
+ },
197
+ //页码变化时调用
198
+ handleCurrentChange(val) {
199
+ this.currentPage = val;
200
+ if (this.treeNode.code) {
201
+ this.requestGridData();
202
+ } else {
203
+ this.resultDataChange();
204
+ }
205
+ },
206
+ //判断是否是选择一条数据还是取消选择
207
+ selectRow(select, row) {
208
+ return select.some(element => {
209
+ if (element.code == row.code) {
210
+ return true;
211
+ }
212
+ });
213
+ },
214
+ resultDataChange() {
215
+ if (this.sourceAllData) {
216
+ var result = this.sourceAllData.slice(
217
+ this.pageSize * (this.currentPage - 1),
218
+ this.pageSize * this.currentPage
219
+ );
220
+ this.empTableData = result;
221
+ } else {
222
+ this.empTableData = [];
223
+ }
224
+ },
225
+ //判断是否已经选择该条数据
226
+ indexOfMultipleSelection(row) {
227
+ let index = -1;
228
+ for (let i = 0; i < this.multipleSelection.length; i++) {
229
+ const element = this.multipleSelection[i];
230
+ if (element.code == row.code) {
231
+ index = i;
232
+ }
233
+ }
234
+ return index;
235
+ },
236
+ //行单击事件只有单人审批是选人才生效,其他审批方式,通过checkbox生效
237
+ handleRowClick(row, event, column) {
238
+ let _this = this;
239
+ let index = this.indexOfMultipleSelection(row);
240
+ if (this.notOnlyApprove) {
241
+ this.$refs.sourceGrid.toggleRowSelection(row);
242
+ if (index != -1) {
243
+ this.multipleSelection.splice(index, 1);
244
+ } else {
245
+ this.multipleSelection.push(row);
246
+ }
247
+ } else {
248
+ this.multipleSelection.forEach(element => {
249
+ _this.$refs.sourceGrid.toggleRowSelection(element, false);
250
+ });
251
+ this.multipleSelection = [];
252
+ if (index == -1) {
253
+ this.$refs.sourceGrid.toggleRowSelection(row, true);
254
+ this.multipleSelection.push(row);
255
+ }
256
+ }
257
+ let dealUserCodes = [];
258
+ this.multipleSelection.forEach(element => {
259
+ dealUserCodes.push(element.code);
260
+ });
261
+ this.EventBus.$emit(
262
+ 'refresh-selected-grid' + this.opt.taskDeKey,
263
+ this.multipleSelection
264
+ );
265
+ this.EventBus.$emit('update-selected-user', {
266
+ nodekey: this.opt.taskDeKey + '_' + this.opt.approve.type,
267
+ dealUserCodes: dealUserCodes.join(',')
268
+ });
269
+ },
270
+ handleSelect(select, row) {
271
+ if (this.selectRow(select, row)) {
272
+ if (this.indexOfMultipleSelection(row) == -1) {
273
+ this.multipleSelection.push(row);
274
+ }
275
+ } else {
276
+ let index = this.indexOfMultipleSelection(row);
277
+ if (index != -1) {
278
+ this.multipleSelection.splice(index, 1);
279
+ }
280
+ }
281
+ let dealUserCodes = [];
282
+ this.multipleSelection.forEach(element => {
283
+ dealUserCodes.push(element.code);
284
+ });
285
+ this.EventBus.$emit(
286
+ 'refresh-selected-grid' + this.opt.taskDeKey,
287
+ this.multipleSelection
288
+ );
289
+ this.EventBus.$emit('update-selected-user', {
290
+ nodekey: this.opt.taskDeKey + '_' + this.opt.approve.type,
291
+ dealUserCodes: dealUserCodes.join(',')
292
+ });
293
+ },
294
+ handleSelectAll(selection) {
295
+ let _this = this;
296
+ if (selection == 0) {
297
+ this.empTableData.forEach(row => {
298
+ let index = _this.indexOfMultipleSelection(row);
299
+ if (index != -1) {
300
+ _this.multipleSelection.splice(index, 1);
301
+ }
302
+ });
303
+ } else {
304
+ selection.forEach(row => {
305
+ if (_this.indexOfMultipleSelection(row) == -1) {
306
+ _this.multipleSelection.push(row);
307
+ }
308
+ });
309
+ }
310
+ let dealUserCodes = [];
311
+ this.multipleSelection.forEach(element => {
312
+ dealUserCodes.push(element.code);
313
+ });
314
+ this.EventBus.$emit(
315
+ 'refresh-selected-grid' + this.opt.taskDeKey,
316
+ this.multipleSelection
317
+ );
318
+ this.EventBus.$emit('update-selected-user', {
319
+ nodekey: this.opt.taskDeKey + '_' + this.opt.approve.type,
320
+ dealUserCodes: dealUserCodes.join(',')
321
+ });
322
+ },
323
+ //请求数据
324
+ requestGridData() {
325
+ let _this = this;
326
+ let param = {
327
+ page: this.currentPage,
328
+ rows: this.pageSize,
329
+ deptCode: this.treeNode.code,
330
+ name: this.searchName,
331
+ userNames: this.receiverIds.join(',')
332
+ };
333
+ axios['bpm-engine']
334
+ .post(this.empUrl, param)
335
+ .then(function(res) {
336
+ if (res.success) {
337
+ _this.empTableData = res.data.rows;
338
+ _this.empTotal = res.data.total;
339
+ //必须等列表重新渲染完毕,才能执行此方法。
340
+ setTimeout(function() {
341
+ _this.setRowStatus();
342
+ }, 100);
343
+ }
344
+ _this.loading = false;
345
+ })
346
+ .catch(function(err) {
347
+ console.log(err);
348
+ });
349
+ },
350
+ setRowStatus() {
351
+ let _this = this;
352
+ this.empTableData.forEach(row => {
353
+ let index = _this.indexOfMultipleSelection(row);
354
+ if (index != -1) {
355
+ _this.$refs.sourceGrid.toggleRowSelection(row, true);
356
+ }
357
+ });
358
+ },
359
+ cancelSelecedUser(row) {
360
+ let index = this.indexOfMultipleSelection(row);
361
+ if (index != -1) {
362
+ this.multipleSelection.splice(index, 1);
363
+ }
364
+ this.$refs.sourceGrid.toggleRowSelection(row);
365
+ let dealUserCodes = [];
366
+ this.multipleSelection.forEach(element => {
367
+ dealUserCodes.push(element.code);
368
+ });
369
+ this.EventBus.$emit('update-selected-user', {
370
+ nodekey: this.opt.taskDeKey + '_' + this.opt.approve.type,
371
+ dealUserCodes: dealUserCodes.join(',')
372
+ });
373
+ }
374
+ }
375
+ };
376
+ </script>
377
+ <style lang="less">
378
+ .el-pagination {
379
+ position: unset !important;
380
+ }
381
+ .el-table__empty-block {
382
+ width: 100%;
383
+ overflow-x: hidden;
384
+ }
385
+ .el-pagination {
386
+ position: absolute;
387
+ right: 40px;
388
+ margin: 5px auto;
389
+ }
390
+ .el-table th {
391
+ background-color: #fff;
392
+ }
393
+ .table-tools-btn {
394
+ float: left;
395
+ margin-top: 5px;
396
+ padding-right: 40px;
397
+ padding-left: 2px;
398
+ }
399
+ .el-icon-search-button {
400
+ padding: 0 10px;
401
+ margin: -17px -17px;
402
+ }
403
+ .filter-tree {
404
+ width: 100%;
405
+ }
406
+ .span-ellipsis {
407
+ text-align: left;
408
+ width: 100%;
409
+ overflow: hidden;
410
+ white-space: nowrap;
411
+ text-overflow: ellipsis;
412
+ }
413
+ .el-table--scrollable-x .el-table__body-wrapper {
414
+ overflow-x: hidden !important;
415
+ }
416
+ .el-table th {
417
+ background-color: #fff;
418
+ }
419
+ </style>
@@ -0,0 +1,96 @@
1
+ <template>
2
+ <el-tree
3
+ :data="treeNode"
4
+ class="flow-tree"
5
+ ref="tree"
6
+ node-key="id"
7
+ :props="treeProps"
8
+ @node-click="handelrNodeClick"
9
+ highlight-current
10
+ :default-expanded-keys="defaultExpandedKeys"
11
+ >
12
+ <span class="custom-tree-node cell-hidden" slot-scope="{ node, data }">
13
+ <span v-if="data.type == 0" class="iconfont icon-jigou"></span>
14
+ <span v-else class="iconfont icon-bumenkaoqin"></span>
15
+ <span :title="node.label">{{ node.label }}</span>
16
+ </span>
17
+ </el-tree>
18
+ </template>
19
+ <script>
20
+ import { Tree, Container } from 'element-ui';
21
+ import axios from 'cloud-module-base/packages/httpConfig/http';
22
+ export default {
23
+ components: {
24
+ 'el-tree': Tree,
25
+ 'el-container': Container
26
+ },
27
+ //初始化数据下
28
+ data() {
29
+ return {
30
+ height: 0,
31
+ orgUrl: '/api/identity/bpm-dept/tree-by-deptcodes', //组织机构树接口
32
+ treeNode: [],
33
+ treeProps: {
34
+ children: 'children',
35
+ label: 'name',
36
+ id: 'id'
37
+ },
38
+ defaultExpandedKeys: []
39
+ };
40
+ },
41
+ props: {
42
+ opt: {
43
+ type: Object,
44
+ required: false
45
+ }
46
+ },
47
+ //方法
48
+ methods: {
49
+ //树节点点击事件
50
+ handelrNodeClick(treeNode) {
51
+ this.EventBus.$emit('refresh-source-grid' + this.opt.taskDeKey, treeNode);
52
+ }
53
+ },
54
+ //页面渲染之前调用方法 函数
55
+ created() {},
56
+ mounted() {
57
+ let _this = this;
58
+ let deptCodes = [];
59
+ this.opt.bpmUsers.forEach(bpmUser => {
60
+ if (bpmUser.deptCode && !deptCodes.includes(bpmUser.deptCode)) {
61
+ deptCodes.push(bpmUser.deptCode);
62
+ }
63
+ });
64
+ axios['bpm-engine']
65
+ .post(this.orgUrl, { deptCodes: deptCodes.join(',') })
66
+ .then(function(res) {
67
+ _this.treeNode = res.data;
68
+ _this.defaultExpandedKeys.push(res.data[0].id);
69
+ })
70
+ .catch(function(err) {
71
+ console.log(err);
72
+ });
73
+ },
74
+ //页面渲染完成调用方法 函数
75
+ watch: {
76
+ // opt(old, newVal) {
77
+ // let _this = this;
78
+ // let deptCodes = [];
79
+ // this.opt.bpmUsers.forEach(bpmUser => {
80
+ // if (bpmUser.deptCodes && !deptCodes.includes(bpmUser.deptCodes)) {
81
+ // deptCodes.push(bpmUser.deptCodes);
82
+ // }
83
+ // });
84
+ // axios['bpm-engine']
85
+ // .post(this.orgUrl, { deptCodes: deptCodes.join(',') })
86
+ // .then(function(res) {
87
+ // _this.treeNode = res.data;
88
+ // })
89
+ // .catch(function(err) {
90
+ // console.log(err);
91
+ // });
92
+ // }
93
+ }
94
+ };
95
+ </script>
96
+ <style></style>
@@ -0,0 +1,51 @@
1
+ <template>
2
+ <el-container style="background: #e8ecf3">
3
+ <el-aside style="height:456px;width:65%;margin-right: 0px;margin-left: 0px;background-color: #e8ecf3">
4
+ <el-container>
5
+ <el-aside style="height:456px;width: 40%;max-width: 400px;padding-top:5px;margin:0px;border-radius: 0px;">
6
+ <v-tree :opt="nextNode" />
7
+ </el-aside>
8
+ <el-main style="height:456px;width:45%;padding: 0px;margin-left:2px">
9
+ <v-source-grid :opt="nextNode" />
10
+ </el-main>
11
+ </el-container>
12
+ </el-aside>
13
+ <el-main style="height:456px;padding:0px;padding-bottom: 0px;width:35%;margin-left:10px">
14
+ <v-select-grid :opt="nextNode" />
15
+ </el-main>
16
+ </el-container>
17
+ </template>
18
+ <script>
19
+ import { Aside, Main, Container } from 'element-ui';
20
+ import selectedGrid from './SelectedGrid';
21
+ import sourceGrid from './SourceGrid';
22
+ import tree from './Tree';
23
+ import axios from 'cloud-module-base/packages/httpConfig/http';
24
+ export default {
25
+ //父组件传过来的数据属性
26
+ props: {
27
+ nextNode: {
28
+ type: Object,
29
+ required: true
30
+ }
31
+ },
32
+ components: {
33
+ 'v-select-grid': selectedGrid,
34
+ 'v-tree': tree,
35
+ 'v-source-grid': sourceGrid,
36
+ 'el-aside': Aside,
37
+ 'el-main': Main,
38
+ 'el-container': Container
39
+ },
40
+ data() {
41
+ return {
42
+ opt: {
43
+ maxHeight: '483px'
44
+ }
45
+ };
46
+ },
47
+ created() {
48
+ this.maxHeight = window.outerHeight > 900 ? '483px' : '361px';
49
+ }
50
+ };
51
+ </script>
@@ -0,0 +1,103 @@
1
+ <template>
2
+ <div>
3
+ <el-dialog
4
+ :title="opt.title"
5
+ :visible.sync="dialogVisible"
6
+ width="900px"
7
+ top="2vh"
8
+ :before-close="handleClose"
9
+ custom-class="el-editRole-dialog"
10
+ @open="openDialog"
11
+ :close-on-click-modal="false"
12
+ append-to-body
13
+ >
14
+ <el-tabs v-model="activeNodeName" style="padding: 0 20px 20px 20px!important">
15
+ <el-tab-pane v-for="nextNode in nextNodes" :label="nextNode.taskName" :name="nextNode.taskDeKey" :key="nextNode.taskDeKey">
16
+ <v-bpm-next-node :nextNode="nextNode"></v-bpm-next-node>
17
+ </el-tab-pane>
18
+ </el-tabs>
19
+ <span slot="footer" class="dialog-footer">
20
+ <el-button @click="handleClose">{{ $t('base.button.cancel') }}</el-button>
21
+ <el-button type="primary" @click="handleSave">{{ $t('base.button.ok') }}</el-button>
22
+ </span>
23
+ </el-dialog>
24
+ </div>
25
+ </template>
26
+ <script>
27
+ import { Dialog, Aside, Main, Container, Button, Tabs, TabPane } from 'element-ui';
28
+ import bpmNextNode from './bpm-next-node';
29
+ import axios from 'cloud-module-base/packages/httpConfig/http';
30
+
31
+ export default {
32
+ name: 'bpm-user-select',
33
+ components: {
34
+ 'el-dialog': Dialog,
35
+ 'el-button': Button,
36
+ 'el-tabs': Tabs,
37
+ 'el-tab-pane': TabPane,
38
+ 'v-bpm-next-node': bpmNextNode
39
+ },
40
+ //父组件传过来的数据属性
41
+ props: {
42
+ dialogVisible: {
43
+ type: Boolean,
44
+ required: true
45
+ },
46
+ ruleEngine: {
47
+ type: Object,
48
+ required: true
49
+ }
50
+ },
51
+ data() {
52
+ return {
53
+ //默认参数
54
+ opt: {
55
+ title: this.$t('bpm.user_select.title')
56
+ },
57
+ nextNodes: [],
58
+ activeNodeName: ''
59
+ };
60
+ },
61
+ created() {
62
+ let _this = this;
63
+ this.EventBus.$on('update-selected-user', params => {
64
+ _this.ruleEngine.nextNodes[params.nodekey] = params.dealUserCodes;
65
+ });
66
+ },
67
+ methods: {
68
+ openDialog() {
69
+ this.nextNodes = this.ruleEngine.runtime.nextNodes;
70
+ this.activeNodeName = this.nextNodes[0].taskDeKey;
71
+ this.ruleEngine.nextNodes = {};
72
+ },
73
+ handleClose() {
74
+ this.EventBus.$emit('save-button-click');
75
+ this.$emit('dialog-close', this.dialogVisible);
76
+ },
77
+ handleSave() {
78
+ let _this = this;
79
+ // 没有处理人的 流程节点
80
+ let noUserNode = '';
81
+ this.nextNodes.forEach(nextNode => {
82
+ if (
83
+ _this.ruleEngine.nextNodes[nextNode.taskDeKey + '_' + nextNode.approve.type] == undefined ||
84
+ _this.ruleEngine.nextNodes[nextNode.taskDeKey + '_' + nextNode.approve.type] == ''
85
+ ) {
86
+ noUserNode = nextNode.taskName;
87
+ return;
88
+ }
89
+ });
90
+ if (noUserNode != '') {
91
+ this.$message({
92
+ message: this.$t('bpm.user_select.node_no_select', { noUserNode }),
93
+ type: 'warning'
94
+ });
95
+ return;
96
+ }
97
+ this.EventBus.$emit('save-button-click');
98
+ this.$emit('dialog-save', this.ruleEngine);
99
+ this.$emit('dialog-close', this.dialogVisible);
100
+ }
101
+ }
102
+ };
103
+ </script>
@@ -0,0 +1,7 @@
1
+ import userSelect from './bpm-user-select';
2
+
3
+ /* istanbul ignore next */
4
+ userSelect.install = function(Vue) {
5
+ Vue.component(userSelect.name, userSelect);
6
+ };
7
+ export default userSelect;
@@ -0,0 +1,15 @@
1
+ import Vue from 'vue';
2
+ import locale from 'element-ui/lib/locale'; //elementUI的国际化
3
+ import VueI18n from 'vue-i18n';
4
+ import messages from './langs';
5
+
6
+ Vue.use(VueI18n);
7
+
8
+ const i18n = new VueI18n({
9
+ //从localStorage中取,没有就默认的中文
10
+ locale: window.localStorage.getItem('qinLang') || 'zh',
11
+ messages
12
+ });
13
+ locale.i18n((key, value) => i18n.t(key, value)); //elementui多语言切换
14
+
15
+ export default i18n;