cloud-module-bpm 6.3.0

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 (68) hide show
  1. package/README.md +20 -0
  2. package/babel.config.js +3 -0
  3. package/dist/cloud-module-bpm.common.js +104959 -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 +104969 -0
  7. package/dist/cloud-module-bpm.umd.js.map +1 -0
  8. package/dist/cloud-module-bpm.umd.min.js +48 -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/package.json +66 -0
  16. package/packages/bpm-back-anylink-dialog/bpm-back-anylink-dialog.vue +377 -0
  17. package/packages/bpm-back-anylink-dialog/index.js +7 -0
  18. package/packages/bpm-back-anylink-dialog/readme.md +1 -0
  19. package/packages/bpm-form-tools/bpm-form-tools.vue +216 -0
  20. package/packages/bpm-form-tools/index.js +7 -0
  21. package/packages/bpm-form-tools/readme.md +5 -0
  22. package/packages/bpm-grid-buttons/bpm-grid-buttons.vue +140 -0
  23. package/packages/bpm-grid-buttons/index.js +7 -0
  24. package/packages/bpm-grid-buttons/readme.md +5 -0
  25. package/packages/bpm-grid-buttons-new/bpm-grid-buttons-new.vue +189 -0
  26. package/packages/bpm-grid-buttons-new/index.js +7 -0
  27. package/packages/bpm-grid-buttons-new/readme.md +8 -0
  28. package/packages/bpm-jump-dialog/bpm-jump-dialog.vue +311 -0
  29. package/packages/bpm-jump-dialog/index.js +7 -0
  30. package/packages/bpm-jump-dialog/readme.md +1 -0
  31. package/packages/bpm-jump-latest-dialog/Tree.vue +91 -0
  32. package/packages/bpm-jump-latest-dialog/bpm-jump-latest-dialog.vue +453 -0
  33. package/packages/bpm-jump-latest-dialog/index.js +7 -0
  34. package/packages/bpm-jump-latest-dialog/readme.md +1 -0
  35. package/packages/bpm-opinion-dialog/bpm-opinion.vue +291 -0
  36. package/packages/bpm-opinion-dialog/index.js +7 -0
  37. package/packages/bpm-proctrack-dialog/bpm-proctrack.vue +102 -0
  38. package/packages/bpm-proctrack-dialog/index.js +7 -0
  39. package/packages/bpm-send-read-dialog/SelectedGrid.vue +99 -0
  40. package/packages/bpm-send-read-dialog/SourceGrid.vue +396 -0
  41. package/packages/bpm-send-read-dialog/Tree.vue +74 -0
  42. package/packages/bpm-send-read-dialog/bpm-next-node.vue +51 -0
  43. package/packages/bpm-send-read-dialog/bpm-send-read.vue +100 -0
  44. package/packages/bpm-send-read-dialog/index.js +7 -0
  45. package/packages/bpm-send-read-opinion-dialog/bpm-send-read-opinion.vue +261 -0
  46. package/packages/bpm-send-read-opinion-dialog/index.js +7 -0
  47. package/packages/bpm-sign-dialog/SelectedGrid.vue +102 -0
  48. package/packages/bpm-sign-dialog/SourceGrid.vue +413 -0
  49. package/packages/bpm-sign-dialog/Tree.vue +197 -0
  50. package/packages/bpm-sign-dialog/bpm-next-node.vue +57 -0
  51. package/packages/bpm-sign-dialog/bpm-sign-select.vue +116 -0
  52. package/packages/bpm-sign-dialog/index.js +7 -0
  53. package/packages/bpm-sign-opinion-dialog/bpm-sign-opinion.vue +259 -0
  54. package/packages/bpm-sign-opinion-dialog/index.js +7 -0
  55. package/packages/bpm-user-select-dialog/SelectedGrid.vue +155 -0
  56. package/packages/bpm-user-select-dialog/SourceGrid.vue +419 -0
  57. package/packages/bpm-user-select-dialog/Tree.vue +98 -0
  58. package/packages/bpm-user-select-dialog/bpm-next-node.vue +51 -0
  59. package/packages/bpm-user-select-dialog/bpm-user-select.vue +108 -0
  60. package/packages/bpm-user-select-dialog/index.js +7 -0
  61. package/packages/i18n/i18n.js +15 -0
  62. package/packages/i18n/langs/en_US.js +42 -0
  63. package/packages/i18n/langs/index.js +6 -0
  64. package/packages/i18n/langs/zh_CN.js +86 -0
  65. package/packages/index.js +48 -0
  66. package/packages/utils/merit-bpm.js +900 -0
  67. package/public/favicon.ico +0 -0
  68. package/vue.config.js +55 -0
@@ -0,0 +1,7 @@
1
+ import bpmGridButtonsNew from './bpm-grid-buttons-new.vue';
2
+
3
+ /* istanbul ignore next */
4
+ bpmGridButtonsNew.install = function(Vue) {
5
+ Vue.component(bpmGridButtonsNew.name, bpmGridButtonsNew);
6
+ };
7
+ export default bpmGridButtonsNew;
@@ -0,0 +1,8 @@
1
+ 流程应用列表按钮组件
2
+
3
+ 根据流程权限渲染新建和删除按钮
4
+
5
+ 根据人员的权限属性 渲染流程不同类型的查询条件
6
+
7
+
8
+ 与之前的bpm-grid-buttons区别在于我的工作中添加了我的已审选项。
@@ -0,0 +1,311 @@
1
+ <template>
2
+ <div>
3
+ <el-dialog
4
+ :title="opt.title"
5
+ :visible.sync="dialogVisible"
6
+ width="650px"
7
+ top="8vh"
8
+ @open="openDialog"
9
+ :before-close="handleClose"
10
+ :close-on-click-modal="false"
11
+ append-to-body
12
+ custom-class="bpmjump"
13
+ >
14
+ <el-form>
15
+ <div style="padding: 10px 0px 30px 0px">
16
+ <el-row>
17
+ <el-col :span="8" style="padding-right:140px">
18
+ {{ $t('bpm.jump.choice_activity') }}
19
+ </el-col>
20
+ </el-row>
21
+ <el-row type="flex" justify="center">
22
+ <span style="padding-right:5px;line-height:2.5;">
23
+ {{ $t('bpm.jump.activity_name') }}
24
+ </span>
25
+ <el-select style="width:200px" @change="handleChange" v-model="value" :placeholder="$t('bpm.jump.please_select')">
26
+ <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
27
+ </el-select>
28
+ </el-row>
29
+ </div>
30
+ <div>
31
+ <el-row>
32
+ <el-col :span="8" style="padding-right:140px">{{ $t('bpm.jump.for_personnel') }}</el-col>
33
+ </el-row>
34
+ <el-table
35
+ :data="initialTableData"
36
+ tooltip-effect="dark"
37
+ stripe
38
+ height="150"
39
+ @select="handleSelect"
40
+ @select-all="handleSelectAll"
41
+ ref="eltableCurrentRow"
42
+ >
43
+ <el-table-column type="selection" width="55"> </el-table-column>
44
+ <el-table-column prop="name" :label="$t('bpm.jump.name')"> </el-table-column>
45
+ <el-table-column prop="code" :label="$t('bpm.jump.coding')"> </el-table-column>
46
+ <el-table-column prop="deptName" :label="$t('bpm.jump.department')">
47
+ <template slot-scope="scope">
48
+ <div :title="scope.row.deptName" class="cell-hidden">
49
+ {{ scope.row.deptName }}
50
+ </div>
51
+ </template>
52
+ </el-table-column>
53
+ </el-table>
54
+ </div>
55
+ <div style="padding: 20px 0px 0px 0px">
56
+ <el-row>
57
+ <el-col :span="8" style="padding-right:140px">{{ $t('bpm.jump.selected_personnel_list') }}</el-col>
58
+ </el-row>
59
+ <el-table :data="selectTableData" tooltip-effect="dark" stripe height="150" @row-click="handleRowClick">
60
+ <el-table-column width="55"></el-table-column>
61
+ <el-table-column prop="name" :label="$t('bpm.jump.name')"> </el-table-column>
62
+ <el-table-column prop="code" :label="$t('bpm.jump.coding')"> </el-table-column>
63
+ <el-table-column prop="deptName" :label="$t('bpm.jump.department')">
64
+ <template slot-scope="scope">
65
+ <div :title="scope.row.deptName" class="cell-hidden">
66
+ {{ scope.row.deptName }}
67
+ </div>
68
+ </template>
69
+ </el-table-column>
70
+ </el-table>
71
+ </div>
72
+ </el-form>
73
+
74
+ <span slot="footer" class="dialog-footer">
75
+ <el-button @click="handleClose">{{ $t('base.button.cancel') }}</el-button>
76
+ <el-button type="primary" @click="handleSave">{{ $t('base.button.ok') }}</el-button>
77
+ </span>
78
+ </el-dialog>
79
+ </div>
80
+ </template>
81
+ <script>
82
+ import { Dialog, Aside, Main, Container, Button, Form, FormItem, Col, Row, Input, Tabs, TabPane } from 'element-ui';
83
+ import axios from 'cloud-module-base/packages/httpConfig/http';
84
+ export default {
85
+ name: 'bpm-jump',
86
+ components: {
87
+ 'el-dialog': Dialog,
88
+ 'el-aside': Aside,
89
+ 'el-main': Main,
90
+ 'el-container': Container,
91
+ 'el-button': Button,
92
+ 'el-form': Form,
93
+ 'el-form-item': FormItem,
94
+ 'el-col': Col,
95
+ 'el-row': Row,
96
+ 'el-input': Input,
97
+ 'el-tabs': Tabs,
98
+ 'el-tab-pane': TabPane
99
+ },
100
+ //父组件传过来的数据属性
101
+ props: {
102
+ dialogVisible: {
103
+ type: Boolean,
104
+ required: true
105
+ },
106
+ ruleEngine: {
107
+ type: Object,
108
+ required: true
109
+ }
110
+ },
111
+ data() {
112
+ return {
113
+ //默认参数
114
+ opt: {
115
+ title: this.$t('bpm.jump.dialog_title')
116
+ },
117
+ //业务id 从父组件ruleEngine中runtime->mainFrom中获取businessId = ruleEngine.runtime.mainForm.businessId
118
+ businessId: '',
119
+ //流程key
120
+ toTaskDefKey: '',
121
+ //初始值
122
+ initialTableData: [],
123
+ //选中的值
124
+ selectTableData: [],
125
+ //下拉框
126
+ options: [],
127
+ //下拉框初始值
128
+ value: '',
129
+ //批准类型
130
+ approveType: '',
131
+ currentRuleEngine: {}
132
+ };
133
+ },
134
+ created() {},
135
+ methods: {
136
+ handleRowClick(row, event, column) {
137
+ this.removeData(this.selectTableData, row);
138
+ },
139
+ ////取消已选中的
140
+ removeData(userData, row) {
141
+ //取消已选中的人员
142
+ var index = -1;
143
+ for (var i = 0; i < userData.length; i++) {
144
+ if (userData[i].code == row.code) {
145
+ index = i;
146
+ }
147
+ }
148
+ if (index != -1) {
149
+ userData.splice(index, 1);
150
+ }
151
+ //更新待选的人员
152
+ for (var i = 0; i < this.initialTableData.length; i++) {
153
+ if (this.initialTableData[i].code == row.code) {
154
+ this.$refs.eltableCurrentRow.toggleRowSelection(this.initialTableData[i], false);
155
+ }
156
+ }
157
+ },
158
+
159
+ //全部取消或者删除
160
+ handleSelectAll(select) {
161
+ var _this = this;
162
+ if ('onlyApprove' == _this.currentRuleEngine.runtime.nextNodes[0].approve.type) {
163
+ this.selectTableData = [];
164
+ this.$refs.eltableCurrentRow.clearSelection();
165
+ } else {
166
+ if (select.length > 0) {
167
+ // 全选
168
+ select.forEach(element => {
169
+ if (_this.indexOfselectTableData(element) == -1) {
170
+ _this.selectTableData.push(element);
171
+ }
172
+ });
173
+ } else {
174
+ //全取消
175
+ _this.initialTableData.forEach(element => {
176
+ var index = _this.indexOfselectTableData(element);
177
+ if (index != -1) {
178
+ _this.selectTableData.splice(index, 1);
179
+ }
180
+ });
181
+ }
182
+ }
183
+ },
184
+ handleSelect(select, row) {
185
+ var _this = this;
186
+
187
+ // 单人审批 只能选择一个
188
+ if ('onlyApprove' == _this.currentRuleEngine.runtime.nextNodes[0].approve.type) {
189
+ // 清楚数据
190
+ _this.selectTableData = [];
191
+ _this.$refs.eltableCurrentRow.clearSelection();
192
+ if (_this.selectRow(select, row)) {
193
+ _this.$refs.eltableCurrentRow.toggleRowSelection(row);
194
+ }
195
+ }
196
+ if (_this.selectRow(select, row)) {
197
+ // 选中
198
+ //判断已选列表中是否存在该条数据
199
+ if (_this.indexOfselectTableData(row) == -1) {
200
+ _this.selectTableData.push(row);
201
+ }
202
+ } else {
203
+ //取消
204
+ //取消已选中的列表数据
205
+ var index = _this.indexOfselectTableData(row);
206
+ if (index != -1) {
207
+ _this.selectTableData.splice(index, 1);
208
+ }
209
+ }
210
+ },
211
+ //是选中还是取消
212
+ selectRow(select, row) {
213
+ return select.some(element => {
214
+ if (element.code == row.code) {
215
+ return true;
216
+ }
217
+ });
218
+ },
219
+ // 是否已选中该条数据
220
+ indexOfselectTableData(row) {
221
+ var index = -1;
222
+ var _this = this;
223
+ if (_this.selectTableData.length > 0) {
224
+ for (var i = 0; i < _this.selectTableData.length; i++) {
225
+ if (_this.selectTableData[i].code == row.code) {
226
+ index = i;
227
+ return index;
228
+ }
229
+ }
230
+ }
231
+ return index;
232
+ },
233
+ //下拉框change事件
234
+ handleChange(val) {
235
+ // var = 选中的label
236
+ var _this = this;
237
+ _this.selectTableData = [];
238
+ _this.toTaskDefKey = val;
239
+ _this.initialTableData = [];
240
+ _this.ruleEngine['bpmIsLatest'] = false;
241
+ axios['bpm-engine']
242
+ .post('/api/engine/bpm/query/jump/candidate/' + _this.businessId + '/' + _this.toTaskDefKey, _this.ruleEngine)
243
+ .then(function(res) {
244
+ if (res.data.runtime.nextNodes[0].bpmUsers.length > 0) {
245
+ res.data.runtime.nextNodes[0].bpmUsers.forEach(element => {
246
+ var obj = {};
247
+ obj.name = element.name;
248
+ obj.code = element.code;
249
+ obj.deptName = element.deptName;
250
+ _this.initialTableData.push(obj);
251
+ });
252
+ _this.currentRuleEngine = res.data;
253
+ _this.approveType = res.data.approve.type;
254
+ }
255
+ })
256
+ .catch(function(err) {
257
+ console.log(err);
258
+ });
259
+ },
260
+ openDialog() {
261
+ var _this = this;
262
+ _this.businessId = _this.ruleEngine.runtime.mainForm.businessId;
263
+ _this.requestData();
264
+ },
265
+ //关闭对话框
266
+ handleClose() {
267
+ this.options = [];
268
+ this.$emit('dialog-close', this.dialogVisible);
269
+ },
270
+ requestData() {
271
+ var _this = this;
272
+ axios['bpm-engine']
273
+ .post('/api/engine/bpm/query/jump/all/usertasks/' + _this.businessId, {
274
+ bpmIsLatest: false
275
+ })
276
+ .then(function(res) {
277
+ for (var key in res.data) {
278
+ var obj = {};
279
+ obj.label = res.data[key];
280
+ obj.value = key;
281
+ _this.options.push(obj);
282
+ }
283
+
284
+ //下拉框初始化选中数据
285
+ _this.value = _this.options[0].value;
286
+ _this.handleChange(_this.value);
287
+ })
288
+ .catch(function(err) {
289
+ console.log(err);
290
+ });
291
+ },
292
+ handleSave() {
293
+ var _this = this;
294
+ if (_this.selectTableData.length == 0) {
295
+ _this.$message.warning(_this.$i18n.t('bpm.jump.please_personnel'));
296
+ return;
297
+ }
298
+ var codes = [];
299
+ _this.selectTableData.forEach(element => {
300
+ codes.push(element.code);
301
+ });
302
+
303
+ _this.ruleEngine[_this.toTaskDefKey + '_' + _this.approveType] = codes.join(',');
304
+ _this.ruleEngine.toTaskDefKey = _this.toTaskDefKey;
305
+ _this.$emit('dialog-save', _this.ruleEngine);
306
+ _this.options = [];
307
+ }
308
+ },
309
+ mounted() {}
310
+ };
311
+ </script>
@@ -0,0 +1,7 @@
1
+ import bpmJumpDialog from './bpm-jump-dialog.vue';
2
+
3
+ /* istanbul ignore next */
4
+ bpmJumpDialog.install = function(Vue) {
5
+ Vue.component(bpmJumpDialog.name, bpmJumpDialog);
6
+ };
7
+ export default bpmJumpDialog;
@@ -0,0 +1 @@
1
+ ### 特送对话框
@@ -0,0 +1,91 @@
1
+ <template>
2
+ <!--
3
+ load:加载子树数据方法 当lazy为true时可用
4
+ lazy:默认为false
5
+ data:数据展示
6
+ node-key:树节点唯一标识
7
+ @node-click:节点被点击时回调
8
+ default-expanded-keys:默认展开节点的key的数组
9
+ -->
10
+ <el-tree
11
+ class="flow-tree"
12
+ :load="loadNode"
13
+ :data="treeNode"
14
+ lazy
15
+ node-key="id"
16
+ highlight-current
17
+ ref="tree"
18
+ :props="treeProps"
19
+ @node-click="handelrNodeClick"
20
+ :default-expanded-keys="defaultExpandedKeys"
21
+ >
22
+ <span class="custom-tree-node cell-hidden" slot-scope="{ node, data }">
23
+ <!-- 通过部门层级选择标签 -->
24
+ <div :title="node.label" class="cell-hidden">
25
+ <span v-if="data.dLevel == 0" class="iconfont icon-jigou "></span>
26
+ <span v-else class="iconfont icon-bumenkaoqin"></span>
27
+ <span :title="node.label">{{ node.label }}</span>
28
+ </div>
29
+ </span>
30
+ </el-tree>
31
+ </template>
32
+ <script>
33
+ import { Tree, Container } from 'element-ui';
34
+ import axios from "cloud-module-base/packages/httpConfig/http";
35
+ export default {
36
+ //初始化数据
37
+ data() {
38
+ return {
39
+ treeNode: [],
40
+ treeData: [],
41
+ defaultExpandedKeys: [],
42
+ treeProps: {
43
+ children: "children", //指定子树为节点对象的某个属性值
44
+ label: "name", //指定节点标签为节点对象的某个属性值
45
+ id: "id"
46
+ },
47
+ id: "-1"
48
+ };
49
+ },
50
+ components: {
51
+ 'el-tree':Tree,
52
+ 'el-container':Container
53
+ },
54
+ //方法
55
+ methods: {
56
+ //请求方法
57
+ loadNode(node, resolve) {
58
+ let _this = this;
59
+ axios['system-manager']
60
+ .post("/api/ou/org/tree", {
61
+ id: node.data.id
62
+ })
63
+ .then(function(res) {
64
+ resolve(res.data);
65
+ if (node.data.length == 0 && res.data.length > 0) {
66
+ _this.defaultExpandedKeys.push(res.data[0].id);
67
+ // _this.$nextTick(() => {
68
+ // _this.$refs.tree.setCurrentKey(res.data[0].id);
69
+ // _this.EventBus.$emit("refreshGrid", res.data[0]); //EventBus事件总线,通过emit方法与父组件沟通。$emit触发当前实例上的所有事件
70
+ // });
71
+ }
72
+ })
73
+ .catch(function(err) {
74
+ console.log(err);
75
+ });
76
+ },
77
+
78
+ //节点点击事件
79
+ handelrNodeClick(data) {
80
+ this.EventBus.$emit("refreshGrid", data);
81
+ }
82
+ },
83
+ //页面渲染之前调用方法 函数
84
+ created() {},
85
+ //页面渲染完成调用方法 函数
86
+ mounted() {}
87
+ };
88
+ </script>
89
+ <style scoped>
90
+
91
+ </style>
@@ -0,0 +1,453 @@
1
+ <template>
2
+ <div>
3
+ <el-dialog
4
+ :title="opt.title"
5
+ :visible.sync="dialogVisible"
6
+ width="900px"
7
+ top="2vh"
8
+ @open="openDialog"
9
+ :before-close="handleClose"
10
+ :close-on-click-modal="false"
11
+ append-to-body
12
+ class="jumpDialog"
13
+ >
14
+ <el-container>
15
+ <el-aside style="height:456px;width:65%;margin-right: 0px;margin-left: 0px;">
16
+ <el-container>
17
+ <el-aside style="height:456px;width: 35%;max-width: 400px;padding-top:5px;margin:0px;border-radius: 0px;">
18
+ <v-tree />
19
+ </el-aside>
20
+ <!-- 待选择人员列表 -->
21
+ <el-main style="height:456px; width: 45%; padding: 0px; margin-left: 2px;">
22
+ <div class="selected-grid">
23
+ <el-row>
24
+ <el-col style="padding:7px;padding-right:290px;">
25
+ {{ $t('bpm.jump.choice_activity') }}
26
+ </el-col>
27
+ </el-row>
28
+ <el-row>
29
+ <el-col align="center"
30
+ >{{ $t('bpm.jump.activity_name') }}
31
+ <el-select style="width:200px" @change="handleChange" v-model="value" :placeholder="$t('bpm.jump.please_select')">
32
+ <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
33
+ </el-select>
34
+ </el-col>
35
+ </el-row>
36
+ <el-row>
37
+ <el-col style="padding:7px;padding-right:290px;">{{ $t('bpm.jump.for_personnel') }}</el-col>
38
+ </el-row>
39
+ <el-table
40
+ :data="initialTableData"
41
+ :height="tableHeight"
42
+ @select="handleSelect"
43
+ ref="eltableCurrentRow"
44
+ @select-all="handleSelectAll"
45
+ >
46
+ <el-table-column type="selection"> </el-table-column>
47
+ <el-table-column prop="name" :label="$t('bpm.jump.name')">
48
+ <template slot-scope="scope">
49
+ <div :title="scope.row.name" class="cell-hidden">
50
+ {{ scope.row.name }}
51
+ </div>
52
+ </template>
53
+ </el-table-column>
54
+ <el-table-column prop="code" :label="$t('bpm.jump.coding')">
55
+ <template slot-scope="scope">
56
+ <div :title="scope.row.code" class="cell-hidden">
57
+ {{ scope.row.code }}
58
+ </div>
59
+ </template>
60
+ </el-table-column>
61
+ <el-table-column prop="deptName" :label="$t('bpm.jump.department')">
62
+ <template slot-scope="scope">
63
+ <div :title="scope.row.deptName" class="cell-hidden">
64
+ {{ scope.row.deptName }}
65
+ </div>
66
+ </template>
67
+ </el-table-column>
68
+ </el-table>
69
+ <!--tree分页-->
70
+ <el-pagination
71
+ v-if="isShowPagination"
72
+ class="SourceGrid"
73
+ @size-change="handleSizeChange"
74
+ @current-change="handleCurrentChange"
75
+ :current-page="currentPage"
76
+ :page-size="pageSize"
77
+ layout="total, prev, pager, next"
78
+ :total="total"
79
+ :pager-count="pagerCount"
80
+ ></el-pagination>
81
+ <!--下拉框分页-->
82
+ <el-pagination
83
+ v-if="isShowPagination == false"
84
+ class="SourceGrid"
85
+ @size-change="elSelectHandleSizeChange"
86
+ @current-change="elSelectHandleCurrentChange"
87
+ :current-page="currentPage"
88
+ :page-size="pageSize"
89
+ layout="total, prev, pager, next"
90
+ :total="total"
91
+ :pager-count="pagerCount"
92
+ ></el-pagination>
93
+ </div>
94
+ </el-main>
95
+ </el-container>
96
+ </el-aside>
97
+ <!-- 已选择人员列表-->
98
+ <el-main style="height: 456px; padding: 0px; width: 35%; margin-left: 10px;">
99
+ <div>
100
+ <el-row style="float:left;padding:7px;">
101
+ {{ $t('bpm.jump.selected_personnel_list') }}
102
+ </el-row>
103
+ <el-table :data="selectTableData" :height="tableHeight + 111" @row-click="handleRowClick">
104
+ <el-table-column prop="name" :label="$t('bpm.jump.name')">
105
+ <template slot-scope="scope">
106
+ <div :title="scope.row.name" class="cell-hidden">
107
+ {{ scope.row.name }}
108
+ </div>
109
+ </template>
110
+ </el-table-column>
111
+ <el-table-column prop="code" :label="$t('bpm.jump.coding')">
112
+ <template slot-scope="scope">
113
+ <div :title="scope.row.code" class="cell-hidden">
114
+ {{ scope.row.code }}
115
+ </div>
116
+ </template>
117
+ </el-table-column>
118
+ <el-table-column prop="deptName" :label="$t('bpm.jump.department')">
119
+ <template slot-scope="scope">
120
+ <div :title="scope.row.deptName" class="cell-hidden">
121
+ {{ scope.row.deptName }}
122
+ </div>
123
+ </template>
124
+ </el-table-column>
125
+ </el-table>
126
+ </div>
127
+ </el-main>
128
+ </el-container>
129
+ <span slot="footer" class="dialog-footer">
130
+ <el-button @click="handleClose">{{ $t('base.button.cancel') }}</el-button>
131
+ <el-button type="primary" @click="handleSave">{{ $t('base.button.ok') }}</el-button>
132
+ </span>
133
+ </el-dialog>
134
+ </div>
135
+ </template>
136
+ <script>
137
+ import { Dialog, Aside, Main, Container, Button, Form, FormItem, Col, Row, Input, Tabs, TabPane } from 'element-ui';
138
+ import axios from 'cloud-module-base/packages/httpConfig/http';
139
+ import tree from './Tree';
140
+ export default {
141
+ name: 'bpm-jump-latest',
142
+ components: {
143
+ 'el-dialog': Dialog,
144
+ 'el-aside': Aside,
145
+ 'el-main': Main,
146
+ 'el-container': Container,
147
+ 'el-button': Button,
148
+ 'el-form': Form,
149
+ 'el-form-item': FormItem,
150
+ 'el-col': Col,
151
+ 'el-row': Row,
152
+ 'el-input': Input,
153
+ 'el-tabs': Tabs,
154
+ 'el-tab-pane': TabPane,
155
+ 'v-tree': tree
156
+ },
157
+ //父组件传过来的数据属性
158
+ props: {
159
+ dialogVisible: {
160
+ type: Boolean,
161
+ required: true
162
+ },
163
+ ruleEngine: {
164
+ type: Object,
165
+ required: true
166
+ }
167
+ },
168
+ data() {
169
+ return {
170
+ currentRuleEngine: {},
171
+ currentPage: 1,
172
+ pageSize: 10,
173
+ pagerCount: 5,
174
+ total: 10,
175
+ tableHeight: 315,
176
+ maxHeight: '483px',
177
+ //默认参数
178
+ opt: {
179
+ title: this.$t('bpm.jump_latest.dialog_title')
180
+ },
181
+ //业务id 3f28804f736ee91401736eec34950000
182
+ businessId: '',
183
+ //初始值
184
+ initialTableData: [],
185
+ //选中的值
186
+ selectTableData: [],
187
+ //下拉框
188
+ options: [],
189
+ value: '',
190
+ isShowPagination: false,
191
+ treeNode: {},
192
+ //流程key
193
+ toTaskDefKey: '',
194
+ //批准类型
195
+ approveType: ''
196
+ };
197
+ },
198
+ created() {
199
+ // this.tableHeight = window.outerHeight > 900 ? 386 : 256;
200
+ },
201
+ methods: {
202
+ //============tree分页===========
203
+ //每页显示数据个数变化时调用
204
+ handleSizeChange(val) {
205
+ this.pageSize = val;
206
+ this.treeClickData();
207
+ },
208
+ //页码变化时调用
209
+ handleCurrentChange(val) {
210
+ this.currentPage = val;
211
+ this.treeClickData();
212
+ },
213
+
214
+ //============下拉框分页===========
215
+ //每页显示数据个数变化时调用
216
+ elSelectHandleSizeChange(val) {
217
+ this.pageSize = val;
218
+ },
219
+ //页码变化时调用
220
+ elSelectHandleCurrentChange(val) {
221
+ this.currentPage = val;
222
+ this.resultDataChange();
223
+ },
224
+ resultDataChange() {
225
+ if (this.initialTableData) {
226
+ var result = this.initialTableData.slice(this.pageSize * (this.currentPage - 1), this.pageSize * this.currentPage);
227
+ this.initialTableData = result;
228
+ } else {
229
+ this.initialTableData = [];
230
+ }
231
+ },
232
+
233
+ handleRowClick(row, event, column) {
234
+ this.removeData(this.selectTableData, row);
235
+ },
236
+
237
+ ////取消已选中的
238
+ removeData(selectTableData, row) {
239
+ let index = this.indexOfselectTableData(row);
240
+ if (index != -1) {
241
+ selectTableData.splice(index, 1);
242
+ }
243
+ //更新待选的人员
244
+ for (var i = 0; i < this.initialTableData.length; i++) {
245
+ if (this.initialTableData[i].code == row.code) {
246
+ this.$refs.eltableCurrentRow.toggleRowSelection(this.initialTableData[i], false);
247
+ }
248
+ }
249
+ },
250
+ //是选中还是取消
251
+ selectRow(select, row) {
252
+ return select.some(element => {
253
+ if (element.code == row.code) {
254
+ return true;
255
+ }
256
+ });
257
+ },
258
+ // 是否已选中该条数据
259
+ indexOfselectTableData(row) {
260
+ var index = -1;
261
+ var _this = this;
262
+ if (_this.selectTableData.length > 0) {
263
+ for (var i = 0; i < _this.selectTableData.length; i++) {
264
+ if (_this.selectTableData[i].code == row.code) {
265
+ index = i;
266
+ return index;
267
+ }
268
+ }
269
+ }
270
+ return index;
271
+ },
272
+
273
+ // 是否已选中该条数据
274
+ indexOfselectTableData2() {
275
+ _this.initialTableData.forEach(element => {
276
+ var index = _this.indexOfselectTableData(element);
277
+ if (index != -1) {
278
+ _this.selectTableData.splice(index, 1);
279
+ }
280
+ });
281
+ },
282
+
283
+ //全选或者全取消
284
+ handleSelectAll(select) {
285
+ var _this = this;
286
+ if ('onlyApprove' == _this.currentRuleEngine.runtime.nextNodes[0].approve.type) {
287
+ this.selectTableData = [];
288
+ this.$refs.eltableCurrentRow.clearSelection();
289
+ } else {
290
+ if (select.length > 0) {
291
+ // 全选
292
+ select.forEach(element => {
293
+ if (_this.indexOfselectTableData(element) == -1) {
294
+ _this.selectTableData.push(element);
295
+ }
296
+ });
297
+ } else {
298
+ //全取消
299
+ _this.initialTableData.forEach(element => {
300
+ var index = _this.indexOfselectTableData(element);
301
+ if (index != -1) {
302
+ _this.selectTableData.splice(index, 1);
303
+ }
304
+ });
305
+ }
306
+ }
307
+ },
308
+
309
+ handleSelect(select, row) {
310
+ var _this = this;
311
+ // 单人审批 只能选择一个
312
+ if ('onlyApprove' == _this.currentRuleEngine.runtime.nextNodes[0].approve.type) {
313
+ // 清楚数据
314
+ _this.selectTableData = [];
315
+ _this.$refs.eltableCurrentRow.clearSelection();
316
+ if (_this.selectRow(select, row)) {
317
+ _this.$refs.eltableCurrentRow.toggleRowSelection(row);
318
+ }
319
+ }
320
+ if (_this.selectRow(select, row)) {
321
+ // 选中
322
+ //判断已选列表中是否存在该条数据
323
+ if (_this.indexOfselectTableData(row) == -1) {
324
+ _this.selectTableData.push(row);
325
+ }
326
+ } else {
327
+ //取消
328
+ //取消已选中的列表数据
329
+ var index = _this.indexOfselectTableData(row);
330
+ if (index != -1) {
331
+ _this.selectTableData.splice(index, 1);
332
+ }
333
+ }
334
+ },
335
+ //下拉框change事件
336
+ handleChange(val) {
337
+ var _this = this;
338
+ _this.selectTableData = [];
339
+ _this.toTaskDefKey = val;
340
+ _this.initialTableData = [];
341
+ _this.ruleEngine['bpmIsLatest'] = true;
342
+ axios['bpm-engine']
343
+ .post('/api/engine/bpm//query/jump/candidate/' + _this.businessId + '/' + _this.toTaskDefKey, _this.ruleEngine)
344
+ .then(function(res) {
345
+ if (res.data.runtime.nextNodes[0].bpmUsers.length > 0) {
346
+ res.data.runtime.nextNodes[0].bpmUsers.forEach(element => {
347
+ var obj = {};
348
+ obj.name = element.name;
349
+ obj.code = element.code;
350
+ obj.deptName = element.deptName;
351
+ _this.initialTableData.push(obj);
352
+ });
353
+ _this.total = _this.initialTableData.length;
354
+ _this.approveType = res.data.approve.type;
355
+ }
356
+
357
+ _this.currentRuleEngine = res.data;
358
+ _this.isShowPagination = false;
359
+ })
360
+ .catch(function(err) {
361
+ console.log(err);
362
+ });
363
+ },
364
+ openDialog() {
365
+ var _this = this;
366
+ _this.businessId = _this.ruleEngine.runtime.mainForm.businessId;
367
+ _this.requestData();
368
+ _this.selectTableData = [];
369
+ },
370
+ //关闭对话框
371
+ handleClose() {
372
+ this.options = [];
373
+ this.$emit('dialog-close', this.dialogVisible);
374
+ },
375
+ requestData() {
376
+ var _this = this;
377
+ axios['bpm-engine']
378
+ .post('/api/engine/bpm/query/jump/all/usertasks/' + _this.businessId, {
379
+ bpmIsLatest: true
380
+ })
381
+ .then(function(res) {
382
+ for (var key in res.data) {
383
+ var obj = {};
384
+ obj.label = res.data[key];
385
+ obj.value = key;
386
+ _this.options.push(obj);
387
+ }
388
+ //初始化选中数据
389
+ _this.value = _this.options[0].value;
390
+ _this.handleChange(_this.value);
391
+ })
392
+ .catch(function(err) {
393
+ console.log(err);
394
+ });
395
+ },
396
+ //保存
397
+ handleSave() {
398
+ var _this = this;
399
+ if (_this.selectTableData.length == 0) {
400
+ _this.$message.warning(_this.$i18n.t('bpm.jump.please_personnel'));
401
+ return;
402
+ }
403
+
404
+ var codes = [];
405
+ _this.selectTableData.forEach(element => {
406
+ codes.push(element.code);
407
+ });
408
+ //
409
+ _this.ruleEngine[_this.toTaskDefKey + '_' + _this.approveType] = codes.join(',');
410
+
411
+ //
412
+ _this.ruleEngine.toTaskDefKey = _this.toTaskDefKey;
413
+
414
+ _this.$emit('dialog-save', _this.ruleEngine);
415
+ },
416
+
417
+ treeClickData() {
418
+ var _this = this;
419
+ axios['system-manager']
420
+ .post('/api/ou/emp/listOrgUnselectedUserByOrg', {
421
+ id: _this.treeNode.id,
422
+ dLevelCode: _this.treeNode.dLevelCode,
423
+ page: _this.currentPage,
424
+ rows: _this.pageSize
425
+ })
426
+ .then(function(res) {
427
+ if (res.status == '1') {
428
+ _this.initialTableData = [];
429
+ res.data.rows.forEach(arr => {
430
+ var obj = {};
431
+ obj.name = arr.name;
432
+ obj.code = arr.code;
433
+ obj.deptName = arr.deptName;
434
+ _this.initialTableData.push(obj);
435
+ });
436
+ _this.total = res.data.total;
437
+ _this.isShowPagination = true;
438
+ }
439
+ });
440
+ }
441
+ },
442
+
443
+ mounted() {
444
+ var _this = this;
445
+ this.EventBus.$on('refreshGrid', treeNode => {
446
+ _this.treeNode = treeNode;
447
+ _this.currentPage = 1;
448
+ _this.treeClickData();
449
+ });
450
+ }
451
+ };
452
+ </script>
453
+ <style></style>