fmui-base 2.3.58 → 2.3.59
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.
- package/README.md +1 -0
- package/lib/db/db.js +23 -0
- package/lib/db/variables.js +2 -0
- package/lib/process_info/RelationProcess.js +112 -14
- package/lib/process_info/RelationProcessPicker.js +509 -0
- package/lib/process_info/processInfo.js +218 -7
- package/lib/process_info/processInfo.less +32 -0
- package/package.json +1 -1
package/README.md
CHANGED
package/lib/db/db.js
CHANGED
|
@@ -383,6 +383,29 @@ context.create('FlowModuleAPI', {
|
|
|
383
383
|
});
|
|
384
384
|
}
|
|
385
385
|
},
|
|
386
|
+
getRelationProcessList: {
|
|
387
|
+
url: _variables2.default.URLS.getRelationProcessList,
|
|
388
|
+
method: 'GET',
|
|
389
|
+
header: {
|
|
390
|
+
Authorization: 'Bearer ' + getLoginUserInfo().token
|
|
391
|
+
},
|
|
392
|
+
willFetch: function willFetch() {}
|
|
393
|
+
},
|
|
394
|
+
deleteRelation: {
|
|
395
|
+
url: _variables2.default.URLS.deleteRelation,
|
|
396
|
+
method: 'POST',
|
|
397
|
+
postDataFomat: 'FORM',
|
|
398
|
+
header: {
|
|
399
|
+
Authorization: 'Bearer ' + getLoginUserInfo().token
|
|
400
|
+
},
|
|
401
|
+
willFetch: function willFetch() {
|
|
402
|
+
_Toast2.default.show({
|
|
403
|
+
content: _react2.default.createElement(_loading2.default, null),
|
|
404
|
+
hasMask: true,
|
|
405
|
+
duration: 800
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
},
|
|
386
409
|
startFlowTest: {
|
|
387
410
|
url: _variables2.default.URLS.startFlowTest,
|
|
388
411
|
method: 'POST',
|
package/lib/db/variables.js
CHANGED
|
@@ -72,6 +72,8 @@ exports.default = {
|
|
|
72
72
|
getComponentInfoList: urlBasicPrefix + 'mobilehall/mobileoffice/getComponentInfoList' + '?', //获取关联表单字段
|
|
73
73
|
|
|
74
74
|
insertBatchRelation: approveUrlPrefix + 'insertBatchRelation' + '?', // 关联流程
|
|
75
|
+
getRelationProcessList: approveUrlPrefix + 'getRelationProcessList' + '?', // 可选关联流程列表
|
|
76
|
+
deleteRelation: approveUrlPrefix + 'deleteRelation' + '?', // 删除关联流程
|
|
75
77
|
startFlowTest: approveUrlPrefix + 'startFlowTest' + '?', // 检验间隔时间
|
|
76
78
|
startProcess: approveUrlPrefix + 'startProcess' + '?', // 启动流程的接口
|
|
77
79
|
claimTask: approveUrlPrefix + 'claimTask' + '?', //校验流程
|
|
@@ -15,6 +15,14 @@ var _Boxs = require('saltui/lib/Boxs');
|
|
|
15
15
|
|
|
16
16
|
var _Boxs2 = _interopRequireDefault(_Boxs);
|
|
17
17
|
|
|
18
|
+
var _Dialog = require('saltui/lib/Dialog');
|
|
19
|
+
|
|
20
|
+
var _Dialog2 = _interopRequireDefault(_Dialog);
|
|
21
|
+
|
|
22
|
+
var _Toast = require('saltui/lib/Toast');
|
|
23
|
+
|
|
24
|
+
var _Toast2 = _interopRequireDefault(_Toast);
|
|
25
|
+
|
|
18
26
|
var _AngleRight = require('salt-icon/lib/AngleRight');
|
|
19
27
|
|
|
20
28
|
var _AngleRight2 = _interopRequireDefault(_AngleRight);
|
|
@@ -50,34 +58,119 @@ var Page = function (_React$Component) {
|
|
|
50
58
|
_this.state = {
|
|
51
59
|
relationList: []
|
|
52
60
|
};
|
|
53
|
-
|
|
54
61
|
return _this;
|
|
55
62
|
}
|
|
56
63
|
|
|
57
64
|
_createClass(Page, [{
|
|
58
65
|
key: 'componentDidMount',
|
|
59
66
|
value: function componentDidMount() {
|
|
67
|
+
this.reload();
|
|
68
|
+
}
|
|
69
|
+
}, {
|
|
70
|
+
key: 'componentDidUpdate',
|
|
71
|
+
value: function componentDidUpdate(prevProps) {
|
|
72
|
+
if (prevProps.processInstanceId !== this.props.processInstanceId && this.props.processInstanceId) {
|
|
73
|
+
this.reload();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}, {
|
|
77
|
+
key: 'reload',
|
|
78
|
+
value: function reload() {
|
|
60
79
|
var t = this;
|
|
61
|
-
t.setState({
|
|
62
|
-
relationList: []
|
|
63
|
-
});
|
|
64
80
|
var processInstanceId = this.props.processInstanceId;
|
|
81
|
+
if (!processInstanceId || processInstanceId === '-99' || processInstanceId === 'undefined') {
|
|
82
|
+
t.setState({ relationList: [] });
|
|
83
|
+
if (typeof t.props.onCountChange === 'function') {
|
|
84
|
+
t.props.onCountChange(0);
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
65
88
|
_db2.default.FlowModuleAPI.getRelationProcess({ processInstanceId: processInstanceId }).then(function (content) {
|
|
89
|
+
var list = [];
|
|
90
|
+
if (Array.isArray(content)) {
|
|
91
|
+
list = content;
|
|
92
|
+
} else if (content && Array.isArray(content.data)) {
|
|
93
|
+
list = content.data;
|
|
94
|
+
} else if (content && Array.isArray(content.content)) {
|
|
95
|
+
list = content.content;
|
|
96
|
+
} else if (content && content.list && Array.isArray(content.list)) {
|
|
97
|
+
list = content.list;
|
|
98
|
+
}
|
|
66
99
|
t.setState({
|
|
67
|
-
relationList:
|
|
100
|
+
relationList: list
|
|
101
|
+
}, function () {
|
|
102
|
+
if (typeof t.props.onCountChange === 'function') {
|
|
103
|
+
t.props.onCountChange(list.length);
|
|
104
|
+
}
|
|
68
105
|
});
|
|
69
|
-
}).catch(function (
|
|
106
|
+
}).catch(function () {
|
|
107
|
+
t.setState({ relationList: [] });
|
|
108
|
+
if (typeof t.props.onCountChange === 'function') {
|
|
109
|
+
t.props.onCountChange(0);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
70
112
|
}
|
|
71
113
|
}, {
|
|
72
114
|
key: 'clickDetail',
|
|
73
115
|
value: function clickDetail(item) {
|
|
74
116
|
var processInstanceId = item.processInstanceId;
|
|
75
|
-
var formId = item.formId;
|
|
76
|
-
var module = item.module;
|
|
77
|
-
var url =
|
|
117
|
+
var formId = item.formId || '-99';
|
|
118
|
+
var module = item.module || 'approve';
|
|
119
|
+
var url = 'process/processDetails/-99/' + formId + '/-99/-99/0/' + processInstanceId + '/' + module;
|
|
78
120
|
decodeURI(url);
|
|
79
121
|
location.hash = url;
|
|
80
|
-
|
|
122
|
+
}
|
|
123
|
+
}, {
|
|
124
|
+
key: 'canDelete',
|
|
125
|
+
value: function canDelete(item) {
|
|
126
|
+
var canManage = this.props.canManage === true || this.props.canManage === '1';
|
|
127
|
+
if (!canManage) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
if (String(item.canDel) !== '1') {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
var currentActivityId = this.props.activityId;
|
|
134
|
+
if (currentActivityId == null || currentActivityId === '') {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
return String(item.activityId) === String(currentActivityId);
|
|
138
|
+
}
|
|
139
|
+
}, {
|
|
140
|
+
key: 'deleteRelation',
|
|
141
|
+
value: function deleteRelation(item, e) {
|
|
142
|
+
if (e && e.stopPropagation) {
|
|
143
|
+
e.stopPropagation();
|
|
144
|
+
}
|
|
145
|
+
var t = this;
|
|
146
|
+
var processInstanceId = t.props.processInstanceId;
|
|
147
|
+
var relationId = item.processInstanceId;
|
|
148
|
+
_Dialog2.default.confirm({
|
|
149
|
+
locale: 'zh_CN',
|
|
150
|
+
title: '提示',
|
|
151
|
+
content: '确定删除该关联流程吗?',
|
|
152
|
+
onConfirm: function onConfirm() {
|
|
153
|
+
_db2.default.FlowModuleAPI.deleteRelation({
|
|
154
|
+
processInstanceId: processInstanceId,
|
|
155
|
+
relationId: relationId
|
|
156
|
+
}).then(function () {
|
|
157
|
+
_Toast2.default.show({
|
|
158
|
+
type: 'success',
|
|
159
|
+
content: '删除成功'
|
|
160
|
+
});
|
|
161
|
+
t.reload();
|
|
162
|
+
if (typeof t.props.onDeleted === 'function') {
|
|
163
|
+
t.props.onDeleted();
|
|
164
|
+
}
|
|
165
|
+
}).catch(function () {
|
|
166
|
+
_Toast2.default.show({
|
|
167
|
+
type: 'error',
|
|
168
|
+
content: '删除失败'
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
onCancel: function onCancel() {}
|
|
173
|
+
});
|
|
81
174
|
}
|
|
82
175
|
}, {
|
|
83
176
|
key: 'render',
|
|
@@ -89,10 +182,10 @@ var Page = function (_React$Component) {
|
|
|
89
182
|
t.state.relationList.map(function (item, i) {
|
|
90
183
|
return _react2.default.createElement(
|
|
91
184
|
HBox,
|
|
92
|
-
{ className: 't-BCf t-P16 t-PR12 dd-bottom-border',
|
|
185
|
+
{ key: (item.processInstanceId || '') + '_' + i, className: 't-BCf t-P16 t-PR12 dd-bottom-border', vAlign: 'center' },
|
|
93
186
|
_react2.default.createElement(
|
|
94
187
|
Box,
|
|
95
|
-
{ flex: 1 },
|
|
188
|
+
{ flex: 1, onClick: t.clickDetail.bind(t, item) },
|
|
96
189
|
_react2.default.createElement(
|
|
97
190
|
'div',
|
|
98
191
|
{ className: 't-omit t-FC3 t-FS16 t-LH1_3 t-MR8' },
|
|
@@ -134,16 +227,21 @@ var Page = function (_React$Component) {
|
|
|
134
227
|
)
|
|
135
228
|
)
|
|
136
229
|
),
|
|
230
|
+
t.canDelete(item) ? _react2.default.createElement(
|
|
231
|
+
Box,
|
|
232
|
+
{ className: 't-PL8 t-PR8 t-FCred t-FS14', onClick: t.deleteRelation.bind(t, item) },
|
|
233
|
+
'\u5220\u9664'
|
|
234
|
+
) : null,
|
|
137
235
|
_react2.default.createElement(
|
|
138
236
|
Box,
|
|
139
|
-
|
|
237
|
+
{ onClick: t.clickDetail.bind(t, item) },
|
|
140
238
|
_react2.default.createElement(_AngleRight2.default, { width: 20, fill: '#ccc', className: 'demo-t-list-arrow' })
|
|
141
239
|
)
|
|
142
240
|
);
|
|
143
241
|
}.bind(this)),
|
|
144
242
|
_react2.default.createElement(
|
|
145
243
|
'div',
|
|
146
|
-
{ className: t.state.relationList.length == 0 ?
|
|
244
|
+
{ className: t.state.relationList.length == 0 ? 'nodata-wrapper' : 't-DN' },
|
|
147
245
|
_react2.default.createElement(
|
|
148
246
|
VBox,
|
|
149
247
|
{ vAlign: 'center', hAlign: 'center', className: 'nodata' },
|
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = undefined;
|
|
7
|
+
|
|
8
|
+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
|
9
|
+
|
|
10
|
+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
11
|
+
|
|
12
|
+
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
13
|
+
|
|
14
|
+
var _react = require('react');
|
|
15
|
+
|
|
16
|
+
var _react2 = _interopRequireDefault(_react);
|
|
17
|
+
|
|
18
|
+
var _SearchBar = require('saltui/lib/SearchBar');
|
|
19
|
+
|
|
20
|
+
var _SearchBar2 = _interopRequireDefault(_SearchBar);
|
|
21
|
+
|
|
22
|
+
var _Button = require('saltui/lib/Button');
|
|
23
|
+
|
|
24
|
+
var _Button2 = _interopRequireDefault(_Button);
|
|
25
|
+
|
|
26
|
+
var _Toast = require('saltui/lib/Toast');
|
|
27
|
+
|
|
28
|
+
var _Toast2 = _interopRequireDefault(_Toast);
|
|
29
|
+
|
|
30
|
+
var _Boxs = require('saltui/lib/Boxs');
|
|
31
|
+
|
|
32
|
+
var _Boxs2 = _interopRequireDefault(_Boxs);
|
|
33
|
+
|
|
34
|
+
var _db = require('../db/db');
|
|
35
|
+
|
|
36
|
+
var _db2 = _interopRequireDefault(_db);
|
|
37
|
+
|
|
38
|
+
var _variables = require('../db/variables');
|
|
39
|
+
|
|
40
|
+
var _variables2 = _interopRequireDefault(_variables);
|
|
41
|
+
|
|
42
|
+
var _ScrollList = require('../ScrollList/ScrollList');
|
|
43
|
+
|
|
44
|
+
var _ScrollList2 = _interopRequireDefault(_ScrollList);
|
|
45
|
+
|
|
46
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
47
|
+
|
|
48
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
49
|
+
|
|
50
|
+
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
51
|
+
|
|
52
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
53
|
+
|
|
54
|
+
var HBox = _Boxs2.default.HBox,
|
|
55
|
+
Box = _Boxs2.default.Box;
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
var PAGE_SIZE = 10;
|
|
59
|
+
|
|
60
|
+
/** 列表项:已关联则禁用多选框,但仍展示 */
|
|
61
|
+
function RelationPickItem(props) {
|
|
62
|
+
var item = props.data || props;
|
|
63
|
+
if (item._hidden) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
var pid = String(item.processInstanceId || item.id || '');
|
|
67
|
+
var disabled = !!item._relatedDisabled;
|
|
68
|
+
var checked = !!props.isChecked;
|
|
69
|
+
var createTime = item.createTime || item.startTime || '';
|
|
70
|
+
return _react2.default.createElement(
|
|
71
|
+
HBox,
|
|
72
|
+
{
|
|
73
|
+
className: 't-BCf t-P16 t-PR12 dd-bottom-border' + (disabled ? ' relation-pick-item-disabled' : ''),
|
|
74
|
+
vAlign: 'center',
|
|
75
|
+
onClick: function onClick() {
|
|
76
|
+
if (disabled) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (typeof props.onToggle === 'function') {
|
|
80
|
+
props.onToggle(item);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
_react2.default.createElement(
|
|
85
|
+
Box,
|
|
86
|
+
{
|
|
87
|
+
className: disabled ? 't-checkbox-field-icon-list un-checked disabled' : checked ? 't-checkbox-field-icon checked t-checkbox-field-icon-list' : 't-checkbox-field-icon-list un-checked',
|
|
88
|
+
style: disabled ? { opacity: 0.4, background: 'rgba(31,56,88,.15)' } : undefined
|
|
89
|
+
},
|
|
90
|
+
_react2.default.createElement('i', { className: 'iconfont icon-checked t-FCf t-FS14' })
|
|
91
|
+
),
|
|
92
|
+
_react2.default.createElement(
|
|
93
|
+
Box,
|
|
94
|
+
{ flex: 1, className: 't-PL12', style: { minWidth: 0 } },
|
|
95
|
+
_react2.default.createElement(
|
|
96
|
+
'div',
|
|
97
|
+
{ className: 't-omit t-FS16 t-LH1_3 ' + (disabled ? 't-FCc' : 't-FC3') },
|
|
98
|
+
item.title || '',
|
|
99
|
+
disabled ? _react2.default.createElement(
|
|
100
|
+
'span',
|
|
101
|
+
{ className: 't-FS12 t-ML8 t-FCc' },
|
|
102
|
+
'\uFF08\u5DF2\u5173\u8054\uFF09'
|
|
103
|
+
) : null
|
|
104
|
+
),
|
|
105
|
+
_react2.default.createElement(
|
|
106
|
+
HBox,
|
|
107
|
+
{ className: 't-FCddfontblue-40 t-LH1_3 t-PT8 t-FS14', vAlign: 'center' },
|
|
108
|
+
_react2.default.createElement(
|
|
109
|
+
Box,
|
|
110
|
+
null,
|
|
111
|
+
_react2.default.createElement(
|
|
112
|
+
'span',
|
|
113
|
+
{ className: 't-omit t-MR16' },
|
|
114
|
+
item.startUserName || ''
|
|
115
|
+
)
|
|
116
|
+
),
|
|
117
|
+
_react2.default.createElement(
|
|
118
|
+
Box,
|
|
119
|
+
{ flex: 1, style: { minWidth: 0 } },
|
|
120
|
+
_react2.default.createElement(
|
|
121
|
+
'span',
|
|
122
|
+
{ className: 't-omit' },
|
|
123
|
+
createTime
|
|
124
|
+
)
|
|
125
|
+
)
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* 移动端关联流程选择:标题搜索 + ScrollList 触底分页
|
|
133
|
+
* 已关联:展示但禁用勾选;分页按服务端 count 判断,避免过滤后误判「没有更多了」
|
|
134
|
+
*/
|
|
135
|
+
|
|
136
|
+
var RelationProcessPicker = function (_React$Component) {
|
|
137
|
+
_inherits(RelationProcessPicker, _React$Component);
|
|
138
|
+
|
|
139
|
+
function RelationProcessPicker(props) {
|
|
140
|
+
_classCallCheck(this, RelationProcessPicker);
|
|
141
|
+
|
|
142
|
+
var _this = _possibleConstructorReturn(this, (RelationProcessPicker.__proto__ || Object.getPrototypeOf(RelationProcessPicker)).call(this, props));
|
|
143
|
+
|
|
144
|
+
_this.state = {
|
|
145
|
+
title: '',
|
|
146
|
+
selectedMap: {},
|
|
147
|
+
list: [],
|
|
148
|
+
page: 1,
|
|
149
|
+
total: 0,
|
|
150
|
+
fetchedCount: 0,
|
|
151
|
+
loading: false,
|
|
152
|
+
refreshing: false,
|
|
153
|
+
dataGetted: false,
|
|
154
|
+
noMore: false,
|
|
155
|
+
hasError: false
|
|
156
|
+
};
|
|
157
|
+
_this.searchTimer = null;
|
|
158
|
+
return _this;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
_createClass(RelationProcessPicker, [{
|
|
162
|
+
key: 'componentDidMount',
|
|
163
|
+
value: function componentDidMount() {
|
|
164
|
+
this.fetchPage(1, true);
|
|
165
|
+
}
|
|
166
|
+
}, {
|
|
167
|
+
key: 'componentWillUnmount',
|
|
168
|
+
value: function componentWillUnmount() {
|
|
169
|
+
if (this.searchTimer) {
|
|
170
|
+
clearTimeout(this.searchTimer);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}, {
|
|
174
|
+
key: 'getExcludeIdSet',
|
|
175
|
+
value: function getExcludeIdSet() {
|
|
176
|
+
var excludeIds = this.props.excludeIds || [];
|
|
177
|
+
var set = {};
|
|
178
|
+
for (var i = 0; i < excludeIds.length; i++) {
|
|
179
|
+
if (excludeIds[i]) {
|
|
180
|
+
set[String(excludeIds[i])] = true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
var currentId = this.props.processInstanceId;
|
|
184
|
+
if (currentId) {
|
|
185
|
+
set[String(currentId)] = true;
|
|
186
|
+
}
|
|
187
|
+
return set;
|
|
188
|
+
}
|
|
189
|
+
}, {
|
|
190
|
+
key: 'isRelated',
|
|
191
|
+
value: function isRelated(item) {
|
|
192
|
+
var excludeSet = this.getExcludeIdSet();
|
|
193
|
+
var pid = item.processInstanceId || item.id;
|
|
194
|
+
return !!(pid && excludeSet[String(pid)]);
|
|
195
|
+
}
|
|
196
|
+
}, {
|
|
197
|
+
key: 'markList',
|
|
198
|
+
value: function markList(rawList) {
|
|
199
|
+
var selfId = String(this.props.processInstanceId || '');
|
|
200
|
+
var marked = [];
|
|
201
|
+
if (!rawList || !rawList.length) {
|
|
202
|
+
return marked;
|
|
203
|
+
}
|
|
204
|
+
for (var i = 0; i < rawList.length; i++) {
|
|
205
|
+
var row = Object.assign({}, rawList[i]);
|
|
206
|
+
var pid = String(row.processInstanceId || row.id || '');
|
|
207
|
+
// 当前流程标记隐藏(不删数组项,避免影响分页长度判断;渲染时跳过)
|
|
208
|
+
if (pid && selfId && pid === selfId) {
|
|
209
|
+
row._hidden = true;
|
|
210
|
+
}
|
|
211
|
+
row._relatedDisabled = this.isRelated(row);
|
|
212
|
+
marked.push(row);
|
|
213
|
+
}
|
|
214
|
+
return marked;
|
|
215
|
+
}
|
|
216
|
+
}, {
|
|
217
|
+
key: 'parsePayload',
|
|
218
|
+
value: function parsePayload(content) {
|
|
219
|
+
var payload = content;
|
|
220
|
+
// 兼容 DB 解包后 / 未解包 / 再包一层 content
|
|
221
|
+
if (content && content.content && _typeof(content.content) === 'object' && !Array.isArray(content.content)) {
|
|
222
|
+
var inner = content.content;
|
|
223
|
+
if (inner.data || inner.count != null || inner.content) {
|
|
224
|
+
payload = inner;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (payload && payload.content && _typeof(payload.content) === 'object' && !Array.isArray(payload.content) && (payload.content.data || payload.content.count != null)) {
|
|
228
|
+
payload = payload.content;
|
|
229
|
+
}
|
|
230
|
+
var list = [];
|
|
231
|
+
if (payload && Array.isArray(payload.data)) {
|
|
232
|
+
list = payload.data;
|
|
233
|
+
} else if (Array.isArray(payload)) {
|
|
234
|
+
list = payload;
|
|
235
|
+
}
|
|
236
|
+
var total = 0;
|
|
237
|
+
if (payload && payload.count != null && payload.count !== '') {
|
|
238
|
+
total = Number(payload.count);
|
|
239
|
+
} else if (payload && payload.totalElements != null) {
|
|
240
|
+
total = Number(payload.totalElements);
|
|
241
|
+
} else if (payload && payload.total != null) {
|
|
242
|
+
total = Number(payload.total);
|
|
243
|
+
}
|
|
244
|
+
if (isNaN(total) || total < 0) {
|
|
245
|
+
total = 0;
|
|
246
|
+
}
|
|
247
|
+
return { list: list, total: total };
|
|
248
|
+
}
|
|
249
|
+
}, {
|
|
250
|
+
key: 'fetchPage',
|
|
251
|
+
value: function fetchPage(page, replace) {
|
|
252
|
+
var t = this;
|
|
253
|
+
if (t.state.loading) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
t.setState(replace ? { refreshing: true, loading: true } : { loading: true, hasError: false });
|
|
257
|
+
_db2.default.FlowModuleAPI.getRelationProcessList({
|
|
258
|
+
title: t.state.title || '',
|
|
259
|
+
page: page,
|
|
260
|
+
limit: PAGE_SIZE,
|
|
261
|
+
pageSize: PAGE_SIZE
|
|
262
|
+
}).then(function (content) {
|
|
263
|
+
var parsed = t.parsePayload(content);
|
|
264
|
+
var marked = t.markList(parsed.list);
|
|
265
|
+
// 累计「原始返回条数」判断是否还有下一页;隐藏当前流程不缩短累计长度
|
|
266
|
+
var fetchedLen = (replace ? 0 : t.state.fetchedCount || 0) + parsed.list.length;
|
|
267
|
+
var nextList = replace ? marked : t.state.list.concat(marked);
|
|
268
|
+
var total = parsed.total;
|
|
269
|
+
// 仅按服务端 count 判断;绝不能用过滤/隐藏后的 list.length < pageSize
|
|
270
|
+
var noMore = false;
|
|
271
|
+
if (total > 0) {
|
|
272
|
+
noMore = fetchedLen >= total;
|
|
273
|
+
} else {
|
|
274
|
+
noMore = parsed.list.length === 0;
|
|
275
|
+
}
|
|
276
|
+
t.setState({
|
|
277
|
+
list: nextList,
|
|
278
|
+
page: page,
|
|
279
|
+
total: total,
|
|
280
|
+
fetchedCount: fetchedLen,
|
|
281
|
+
loading: false,
|
|
282
|
+
refreshing: false,
|
|
283
|
+
dataGetted: true,
|
|
284
|
+
noMore: noMore,
|
|
285
|
+
hasError: false
|
|
286
|
+
});
|
|
287
|
+
}).catch(function () {
|
|
288
|
+
t.setState({
|
|
289
|
+
loading: false,
|
|
290
|
+
refreshing: false,
|
|
291
|
+
dataGetted: true,
|
|
292
|
+
hasError: true
|
|
293
|
+
});
|
|
294
|
+
_Toast2.default.show({
|
|
295
|
+
type: 'error',
|
|
296
|
+
content: '加载可选流程失败'
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}, {
|
|
301
|
+
key: 'onSearchChange',
|
|
302
|
+
value: function onSearchChange(value) {
|
|
303
|
+
var t = this;
|
|
304
|
+
t.setState({ title: value });
|
|
305
|
+
if (t.searchTimer) {
|
|
306
|
+
clearTimeout(t.searchTimer);
|
|
307
|
+
}
|
|
308
|
+
t.searchTimer = setTimeout(function () {
|
|
309
|
+
t.fetchPage(1, true);
|
|
310
|
+
}, 400);
|
|
311
|
+
}
|
|
312
|
+
}, {
|
|
313
|
+
key: 'onSearch',
|
|
314
|
+
value: function onSearch(value) {
|
|
315
|
+
var _this2 = this;
|
|
316
|
+
|
|
317
|
+
this.setState({ title: value }, function () {
|
|
318
|
+
_this2.fetchPage(1, true);
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}, {
|
|
322
|
+
key: 'onRefresh',
|
|
323
|
+
value: function onRefresh() {
|
|
324
|
+
this.fetchPage(1, true);
|
|
325
|
+
}
|
|
326
|
+
}, {
|
|
327
|
+
key: 'onLoad',
|
|
328
|
+
value: function onLoad() {
|
|
329
|
+
if (this.state.noMore || this.state.loading) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
this.fetchPage(this.state.page + 1, false);
|
|
333
|
+
}
|
|
334
|
+
}, {
|
|
335
|
+
key: 'toggleSelect',
|
|
336
|
+
value: function toggleSelect(item) {
|
|
337
|
+
if (!item || item._hidden || item._relatedDisabled || this.isRelated(item)) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
var pid = String(item.processInstanceId || item.id || '');
|
|
341
|
+
if (!pid) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
var selectedMap = Object.assign({}, this.state.selectedMap);
|
|
345
|
+
if (selectedMap[pid]) {
|
|
346
|
+
delete selectedMap[pid];
|
|
347
|
+
} else {
|
|
348
|
+
selectedMap[pid] = item;
|
|
349
|
+
}
|
|
350
|
+
this.setState({ selectedMap: selectedMap });
|
|
351
|
+
}
|
|
352
|
+
}, {
|
|
353
|
+
key: 'closePage',
|
|
354
|
+
value: function closePage() {
|
|
355
|
+
if (typeof this.props.onClose === 'function') {
|
|
356
|
+
this.props.onClose();
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (typeof this.props.onCancel === 'function') {
|
|
360
|
+
this.props.onCancel();
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}, {
|
|
364
|
+
key: 'handleCancel',
|
|
365
|
+
value: function handleCancel() {
|
|
366
|
+
this.closePage();
|
|
367
|
+
}
|
|
368
|
+
}, {
|
|
369
|
+
key: 'handleConfirm',
|
|
370
|
+
value: function handleConfirm() {
|
|
371
|
+
var t = this;
|
|
372
|
+
var keys = Object.keys(t.state.selectedMap);
|
|
373
|
+
if (!keys.length) {
|
|
374
|
+
_Toast2.default.show({
|
|
375
|
+
type: 'error',
|
|
376
|
+
content: '请选择记录'
|
|
377
|
+
});
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
var processInstanceId = t.props.processInstanceId;
|
|
381
|
+
if (!processInstanceId) {
|
|
382
|
+
_Toast2.default.show({
|
|
383
|
+
type: 'error',
|
|
384
|
+
content: '请先保存/提交生成流程后再关联'
|
|
385
|
+
});
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
_db2.default.FlowModuleAPI.insertBatchRelation({
|
|
389
|
+
processInstanceId: processInstanceId,
|
|
390
|
+
relationIds: keys.join(','),
|
|
391
|
+
activityId: t.props.activityId || '',
|
|
392
|
+
dataInherit: ''
|
|
393
|
+
}).then(function () {
|
|
394
|
+
_Toast2.default.show({
|
|
395
|
+
type: 'success',
|
|
396
|
+
content: '关联成功'
|
|
397
|
+
});
|
|
398
|
+
t.closePage();
|
|
399
|
+
if (typeof t.props.onSuccess === 'function') {
|
|
400
|
+
t.props.onSuccess();
|
|
401
|
+
}
|
|
402
|
+
}).catch(function () {
|
|
403
|
+
_Toast2.default.show({
|
|
404
|
+
type: 'error',
|
|
405
|
+
content: '关联失败'
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
}, {
|
|
410
|
+
key: 'render',
|
|
411
|
+
value: function render() {
|
|
412
|
+
var t = this;
|
|
413
|
+
var selectedMap = t.state.selectedMap;
|
|
414
|
+
var selectedCount = Object.keys(selectedMap).length;
|
|
415
|
+
var searchBarProps = {
|
|
416
|
+
locale: 'zh_CN',
|
|
417
|
+
placeholder: '搜索流程标题',
|
|
418
|
+
instantSearch: true,
|
|
419
|
+
hasHistory: false,
|
|
420
|
+
searchDelay: 400,
|
|
421
|
+
onChange: t.onSearchChange.bind(t),
|
|
422
|
+
onSearch: t.onSearch.bind(t)
|
|
423
|
+
};
|
|
424
|
+
var winH = typeof window !== 'undefined' && window.innerHeight ? window.innerHeight : 600;
|
|
425
|
+
var listH = Math.max(winH - 160, 240);
|
|
426
|
+
return _react2.default.createElement(
|
|
427
|
+
'div',
|
|
428
|
+
{
|
|
429
|
+
className: 't-W100 t-BCf relation-process-picker',
|
|
430
|
+
style: {
|
|
431
|
+
width: '100%',
|
|
432
|
+
height: winH + 'px',
|
|
433
|
+
display: 'flex',
|
|
434
|
+
flexDirection: 'column',
|
|
435
|
+
boxSizing: 'border-box'
|
|
436
|
+
}
|
|
437
|
+
},
|
|
438
|
+
_react2.default.createElement(
|
|
439
|
+
HBox,
|
|
440
|
+
{ vAlign: 'center', className: 't-PL16 t-PR16 t-PT12 t-PB12 t-BB1', style: { flexShrink: 0 } },
|
|
441
|
+
_react2.default.createElement(
|
|
442
|
+
Box,
|
|
443
|
+
{ flex: 1, className: 't-FS16 t-FAC' },
|
|
444
|
+
'\u5173\u8054\u6D41\u7A0B'
|
|
445
|
+
)
|
|
446
|
+
),
|
|
447
|
+
_react2.default.createElement(
|
|
448
|
+
'div',
|
|
449
|
+
{ className: 't-BCf', style: { flexShrink: 0 } },
|
|
450
|
+
_react2.default.createElement(_SearchBar2.default, _extends({}, searchBarProps, { value: t.state.title }))
|
|
451
|
+
),
|
|
452
|
+
_react2.default.createElement(
|
|
453
|
+
'div',
|
|
454
|
+
{ style: { flex: 1, minHeight: 0, height: listH + 'px' }, className: 'relation-process-picker-scroll' },
|
|
455
|
+
_react2.default.createElement(
|
|
456
|
+
_ScrollList2.default,
|
|
457
|
+
{
|
|
458
|
+
dataGetted: t.state.dataGetted,
|
|
459
|
+
data: t.state.list,
|
|
460
|
+
loading: t.state.loading,
|
|
461
|
+
refreshing: t.state.refreshing,
|
|
462
|
+
noMore: t.state.noMore,
|
|
463
|
+
hasError: t.state.hasError,
|
|
464
|
+
onRefresh: t.onRefresh.bind(t),
|
|
465
|
+
onLoad: t.onLoad.bind(t),
|
|
466
|
+
scrollLoad: true,
|
|
467
|
+
scrollRefresh: true,
|
|
468
|
+
noDataImage: _variables2.default.nodataIcon,
|
|
469
|
+
noDataTip: '\u6682\u65E0\u6570\u636E',
|
|
470
|
+
noMoreDataTip: '\u6CA1\u6709\u66F4\u591A\u4E86'
|
|
471
|
+
},
|
|
472
|
+
function (item, i) {
|
|
473
|
+
var pid = String(item.processInstanceId || item.id || '');
|
|
474
|
+
return _react2.default.createElement(RelationPickItem, {
|
|
475
|
+
key: pid + '_' + i,
|
|
476
|
+
data: item,
|
|
477
|
+
isChecked: !!selectedMap[pid],
|
|
478
|
+
onToggle: t.toggleSelect.bind(t)
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
)
|
|
482
|
+
),
|
|
483
|
+
_react2.default.createElement(
|
|
484
|
+
'div',
|
|
485
|
+
{ className: 't-P0', style: { flexShrink: 0 } },
|
|
486
|
+
_react2.default.createElement(
|
|
487
|
+
_Button2.default.Group,
|
|
488
|
+
null,
|
|
489
|
+
_react2.default.createElement(
|
|
490
|
+
_Button2.default,
|
|
491
|
+
{ type: 'secondary', display: 'banner', onClick: t.handleCancel.bind(t) },
|
|
492
|
+
'\u53D6\u6D88'
|
|
493
|
+
),
|
|
494
|
+
_react2.default.createElement(
|
|
495
|
+
_Button2.default,
|
|
496
|
+
{ type: 'primary', display: 'banner', onClick: t.handleConfirm.bind(t) },
|
|
497
|
+
'\u786E\u5B9A',
|
|
498
|
+
selectedCount > 0 ? '(' + selectedCount + ')' : ''
|
|
499
|
+
)
|
|
500
|
+
)
|
|
501
|
+
)
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
}]);
|
|
505
|
+
|
|
506
|
+
return RelationProcessPicker;
|
|
507
|
+
}(_react2.default.Component);
|
|
508
|
+
|
|
509
|
+
exports.default = RelationProcessPicker;
|
|
@@ -100,6 +100,10 @@ var _RelationProcess = require('./RelationProcess');
|
|
|
100
100
|
|
|
101
101
|
var _RelationProcess2 = _interopRequireDefault(_RelationProcess);
|
|
102
102
|
|
|
103
|
+
var _RelationProcessPicker = require('./RelationProcessPicker');
|
|
104
|
+
|
|
105
|
+
var _RelationProcessPicker2 = _interopRequireDefault(_RelationProcessPicker);
|
|
106
|
+
|
|
103
107
|
var _MessageBoard = require('./MessageBoard');
|
|
104
108
|
|
|
105
109
|
var _MessageBoard2 = _interopRequireDefault(_MessageBoard);
|
|
@@ -534,6 +538,8 @@ var PageHome = function (_React$Component) {
|
|
|
534
538
|
mobileSubTblDefault: '1', //移动端子表默认 1展开 0收起;未设置按展开
|
|
535
539
|
enableMessageBoard: '0', //流程启用留言板
|
|
536
540
|
enableAttachmentArea: '0', //流程启用附件区
|
|
541
|
+
relationCount: 0, //关联流程数量
|
|
542
|
+
hasRelationBtn: false, //当前是否具备关联流程按钮权限
|
|
537
543
|
readScopeId: '',
|
|
538
544
|
readScopeList: [],
|
|
539
545
|
readRangeType: '', //传阅范围 0全部 2本组织及下属组织 4自定义
|
|
@@ -1616,6 +1622,7 @@ var PageHome = function (_React$Component) {
|
|
|
1616
1622
|
defaultValue: defaultValue,
|
|
1617
1623
|
commentId: commentId,
|
|
1618
1624
|
buttons: buttons,
|
|
1625
|
+
hasRelationBtn: (',' + (buttons || '') + ',').indexOf(',OTHER_RELATION,') !== -1,
|
|
1619
1626
|
startButtons: startButtons,
|
|
1620
1627
|
code: content.code,
|
|
1621
1628
|
formItem: formItem,
|
|
@@ -1685,6 +1692,11 @@ var PageHome = function (_React$Component) {
|
|
|
1685
1692
|
startUserOrgId: content.startUserOrgId || content.startUserGroupId || '',
|
|
1686
1693
|
taskAssignOrgId: content.taskAssignOrgId || ''
|
|
1687
1694
|
}, function () {
|
|
1695
|
+
// 进页即拉取关联数量(显式传当前实例 id,避免 state 未齐)
|
|
1696
|
+
try {
|
|
1697
|
+
var pidForRelation = t.state.processInstanceId || t.props.processInstanceId;
|
|
1698
|
+
t.loadRelationCount(pidForRelation);
|
|
1699
|
+
} catch (eCount) {}
|
|
1688
1700
|
if (t._pendingCommentRestore != null && t._pendingCommentRestore !== '') {
|
|
1689
1701
|
var restoredComment = t._pendingCommentRestore;
|
|
1690
1702
|
t._pendingCommentRestore = null;
|
|
@@ -1857,11 +1869,12 @@ var PageHome = function (_React$Component) {
|
|
|
1857
1869
|
continue;
|
|
1858
1870
|
}
|
|
1859
1871
|
//PAGE_SAVE保存按钮只有当新建时才有,HELP_ADDLOTS加签只有在会签和串签才有,RADOM_FINISH随机流程完成按钮去掉
|
|
1860
|
-
|
|
1872
|
+
// OTHER_RELATION 移动端已支持,不再跳过
|
|
1873
|
+
if (buttonCode == 'FLOW_REVOKE' || buttonCode == 'RADOM_FINISH' || buttonCode == 'FLOW_CANCEL' || buttonCode == 'FLOW_RECOVER' || buttonCode == 'PAGE_PRINT' || buttonCode == 'PAGE_URGE' || buttonCode == 'PAGE_REDSET' || buttonCode == 'PAGE_FEEDBACK' || buttonCode == 'RECORD' || buttonCode == 'HELP_ADDLOTS' && participantMode == '0') {
|
|
1861
1874
|
continue;
|
|
1862
1875
|
} else {
|
|
1863
1876
|
if (isStart == true && permissionCode == 'start' || isDraft == '1') {
|
|
1864
|
-
if (buttonCode == 'PAGE_SAVE' || buttonCode == 'BASE_SUMBIT') {
|
|
1877
|
+
if (buttonCode == 'PAGE_SAVE' || buttonCode == 'BASE_SUMBIT' || buttonCode == 'OTHER_RELATION') {
|
|
1865
1878
|
buttonArrayNew.push(buttonCode);
|
|
1866
1879
|
}
|
|
1867
1880
|
// 发起人已配置作废,且流程已有数据(退回/撤回到发起人)时显示作废
|
|
@@ -1907,6 +1920,7 @@ var PageHome = function (_React$Component) {
|
|
|
1907
1920
|
buttonList.push({ name: t.state.finalButtons.get("HELP_FORWARD"), type: 'secondary', display: 'inline', no: 20 });
|
|
1908
1921
|
} else if (listType == "4") {
|
|
1909
1922
|
//我的
|
|
1923
|
+
var processStatusNow = String(content.processStatus != null ? content.processStatus : content.status != null ? content.status : '');
|
|
1910
1924
|
if (this.state.processIsComplete == "0") {
|
|
1911
1925
|
//当流程未结束时,
|
|
1912
1926
|
if (buttons.indexOf('FLOW_CANCEL') >= 0) {
|
|
@@ -1919,7 +1933,6 @@ var PageHome = function (_React$Component) {
|
|
|
1919
1933
|
buttonList.push({ name: t.state.finalButtons.get("FLOW_REVOKE"), type: 'secondary', display: 'inline', no: 7 });
|
|
1920
1934
|
}
|
|
1921
1935
|
// 与 PC 一致:发起人配置作废 + 进行中 + 当前待办在发起节点
|
|
1922
|
-
var processStatusNow = String(content.processStatus != null ? content.processStatus : content.status != null ? content.status : '');
|
|
1923
1936
|
var backToInitiator = isStart == true || isStart == 'true';
|
|
1924
1937
|
if (!backToInitiator && content.processLogList && content.processLogList.length > 0 && content.doingUserList && content.doingUserList.length > 0) {
|
|
1925
1938
|
var startActId = content.processLogList[0].curactivityid;
|
|
@@ -1940,6 +1953,18 @@ var PageHome = function (_React$Component) {
|
|
|
1940
1953
|
buttonList.push({ name: t.state.finalButtons.get("PAGE_URGE"), type: 'secondary', display: 'inline', no: 12 });
|
|
1941
1954
|
}
|
|
1942
1955
|
}
|
|
1956
|
+
// 不通过(status=6):与 PC 一致,点开详情允许作废(发起人节点配置了 BASE_INVALID)
|
|
1957
|
+
if (processStatusNow == '6' && startButtons && startButtons.indexOf('BASE_INVALID') >= 0) {
|
|
1958
|
+
var hasInvalidBtn = false;
|
|
1959
|
+
for (var bi = 0; bi < buttonList.length; bi++) {
|
|
1960
|
+
if (buttonList[bi] && buttonList[bi].no == 9) {
|
|
1961
|
+
hasInvalidBtn = true;break;
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
if (!hasInvalidBtn) {
|
|
1965
|
+
buttonList.push({ name: t.state.finalButtons.get("BASE_INVALID"), type: 'danger', display: 'inline', no: 9 });
|
|
1966
|
+
}
|
|
1967
|
+
}
|
|
1943
1968
|
if (startButtons) {
|
|
1944
1969
|
if (startButtons.indexOf('HELP_CIRCULATE') >= 0) {
|
|
1945
1970
|
//传阅
|
|
@@ -2630,6 +2655,9 @@ var PageHome = function (_React$Component) {
|
|
|
2630
2655
|
case 'MAILSEND':
|
|
2631
2656
|
t.handleSubmit(18);
|
|
2632
2657
|
break;
|
|
2658
|
+
case 'OTHER_RELATION':
|
|
2659
|
+
t.handleSubmit('OTHER_RELATION');
|
|
2660
|
+
break;
|
|
2633
2661
|
default:
|
|
2634
2662
|
t.handleSubmit(actionSheetButtonOpt[index]);
|
|
2635
2663
|
break;
|
|
@@ -3599,6 +3627,9 @@ var PageHome = function (_React$Component) {
|
|
|
3599
3627
|
$(window).scrollTop(0);
|
|
3600
3628
|
});
|
|
3601
3629
|
}
|
|
3630
|
+
} else if (operate == 'OTHER_RELATION') {
|
|
3631
|
+
//关联流程
|
|
3632
|
+
this.openRelationPicker();
|
|
3602
3633
|
} else {
|
|
3603
3634
|
//其他按钮
|
|
3604
3635
|
if (typeof FlowCommon[operate] === "function") {
|
|
@@ -4652,6 +4683,162 @@ var PageHome = function (_React$Component) {
|
|
|
4652
4683
|
this.startSubProcess();
|
|
4653
4684
|
}
|
|
4654
4685
|
}
|
|
4686
|
+
|
|
4687
|
+
// 打开关联流程选择(标题搜索多选)
|
|
4688
|
+
|
|
4689
|
+
}, {
|
|
4690
|
+
key: 'openRelationPicker',
|
|
4691
|
+
value: function openRelationPicker() {
|
|
4692
|
+
var t = this;
|
|
4693
|
+
var processInstanceId = t.state.processInstanceId;
|
|
4694
|
+
if (!processInstanceId || processInstanceId === '-99' || processInstanceId === 'undefined' || processInstanceId === 'null') {
|
|
4695
|
+
_Toast2.default.show({
|
|
4696
|
+
type: 'error',
|
|
4697
|
+
content: '请先保存/提交生成流程后再关联'
|
|
4698
|
+
});
|
|
4699
|
+
return;
|
|
4700
|
+
}
|
|
4701
|
+
// 先拉已关联列表再打开,保证已关联流程不可选;关闭必须用本层 Popup 实例 close
|
|
4702
|
+
_db2.default.FlowModuleAPI.getRelationProcess({
|
|
4703
|
+
processInstanceId: processInstanceId
|
|
4704
|
+
}).then(function (content) {
|
|
4705
|
+
var excludeIds = [processInstanceId];
|
|
4706
|
+
var list = [];
|
|
4707
|
+
if (Array.isArray(content)) {
|
|
4708
|
+
list = content;
|
|
4709
|
+
} else if (content && Array.isArray(content.data)) {
|
|
4710
|
+
list = content.data;
|
|
4711
|
+
}
|
|
4712
|
+
for (var i = 0; i < list.length; i++) {
|
|
4713
|
+
var rid = list[i].processInstanceId || list[i].id;
|
|
4714
|
+
if (rid) {
|
|
4715
|
+
excludeIds.push(String(rid));
|
|
4716
|
+
}
|
|
4717
|
+
}
|
|
4718
|
+
var relationRef = t.refs.relationProcess_list;
|
|
4719
|
+
if (relationRef && relationRef.state && relationRef.state.relationList) {
|
|
4720
|
+
for (var j = 0; j < relationRef.state.relationList.length; j++) {
|
|
4721
|
+
var rid2 = relationRef.state.relationList[j].processInstanceId;
|
|
4722
|
+
if (rid2) {
|
|
4723
|
+
excludeIds.push(String(rid2));
|
|
4724
|
+
}
|
|
4725
|
+
}
|
|
4726
|
+
}
|
|
4727
|
+
var popupInst = null;
|
|
4728
|
+
var closePicker = function closePicker() {
|
|
4729
|
+
try {
|
|
4730
|
+
if (popupInst && typeof popupInst.close === 'function') {
|
|
4731
|
+
popupInst.close();
|
|
4732
|
+
} else {
|
|
4733
|
+
_Popup2.default.hide();
|
|
4734
|
+
}
|
|
4735
|
+
} catch (e) {
|
|
4736
|
+
try {
|
|
4737
|
+
_Popup2.default.hide();
|
|
4738
|
+
} catch (e2) {}
|
|
4739
|
+
}
|
|
4740
|
+
};
|
|
4741
|
+
popupInst = _Popup2.default.show(_react2.default.createElement(_RelationProcessPicker2.default, {
|
|
4742
|
+
processInstanceId: processInstanceId,
|
|
4743
|
+
activityId: t.state.activityId,
|
|
4744
|
+
excludeIds: excludeIds,
|
|
4745
|
+
onClose: closePicker,
|
|
4746
|
+
onSuccess: function onSuccess() {
|
|
4747
|
+
t.refreshRelationTab();
|
|
4748
|
+
}
|
|
4749
|
+
}), {
|
|
4750
|
+
animationType: 'slide-left',
|
|
4751
|
+
className: 'relation-process-picker-popup',
|
|
4752
|
+
maskClosable: true
|
|
4753
|
+
});
|
|
4754
|
+
}).catch(function () {
|
|
4755
|
+
_Toast2.default.show({
|
|
4756
|
+
type: 'error',
|
|
4757
|
+
content: '获取已关联流程失败'
|
|
4758
|
+
});
|
|
4759
|
+
});
|
|
4760
|
+
}
|
|
4761
|
+
|
|
4762
|
+
// 刷新关联流程页签数量与列表
|
|
4763
|
+
|
|
4764
|
+
}, {
|
|
4765
|
+
key: 'refreshRelationTab',
|
|
4766
|
+
value: function refreshRelationTab() {
|
|
4767
|
+
var t = this;
|
|
4768
|
+
var relationRef = t.refs.relationProcess_list;
|
|
4769
|
+
if (relationRef && typeof relationRef.reload === 'function') {
|
|
4770
|
+
relationRef.reload();
|
|
4771
|
+
}
|
|
4772
|
+
t.loadRelationCount();
|
|
4773
|
+
}
|
|
4774
|
+
|
|
4775
|
+
// 仅刷新页签数量(不依赖 RelationProcess 是否已挂载);可显式传入 processInstanceId
|
|
4776
|
+
|
|
4777
|
+
}, {
|
|
4778
|
+
key: 'loadRelationCount',
|
|
4779
|
+
value: function loadRelationCount(forceProcessInstanceId) {
|
|
4780
|
+
var t = this;
|
|
4781
|
+
var processInstanceId = forceProcessInstanceId || t.state.processInstanceId || t.props.processInstanceId;
|
|
4782
|
+
if (!processInstanceId || processInstanceId === '-99' || processInstanceId === 'undefined' || processInstanceId === 'null') {
|
|
4783
|
+
t.setState({ relationCount: 0 });
|
|
4784
|
+
return;
|
|
4785
|
+
}
|
|
4786
|
+
_db2.default.FlowModuleAPI.getRelationProcess({
|
|
4787
|
+
processInstanceId: processInstanceId
|
|
4788
|
+
}).then(function (content) {
|
|
4789
|
+
var list = t.normalizeRelationList(content);
|
|
4790
|
+
t.setState({ relationCount: list.length });
|
|
4791
|
+
}).catch(function () {
|
|
4792
|
+
t.setState({ relationCount: 0 });
|
|
4793
|
+
});
|
|
4794
|
+
}
|
|
4795
|
+
|
|
4796
|
+
// 配合详情页 flex:0.25,完整展示「关联流程(N)」
|
|
4797
|
+
|
|
4798
|
+
}, {
|
|
4799
|
+
key: 'getRelationTabTitle',
|
|
4800
|
+
value: function getRelationTabTitle() {
|
|
4801
|
+
var n = parseInt(this.state.relationCount, 10);
|
|
4802
|
+
if (isNaN(n) || n < 0) {
|
|
4803
|
+
n = 0;
|
|
4804
|
+
}
|
|
4805
|
+
return n > 0 ? '关联流程(' + n + ')' : '关联流程';
|
|
4806
|
+
}
|
|
4807
|
+
}, {
|
|
4808
|
+
key: 'normalizeRelationList',
|
|
4809
|
+
value: function normalizeRelationList(content) {
|
|
4810
|
+
if (Array.isArray(content)) {
|
|
4811
|
+
return content;
|
|
4812
|
+
}
|
|
4813
|
+
if (content && Array.isArray(content.data)) {
|
|
4814
|
+
return content.data;
|
|
4815
|
+
}
|
|
4816
|
+
if (content && Array.isArray(content.content)) {
|
|
4817
|
+
return content.content;
|
|
4818
|
+
}
|
|
4819
|
+
if (content && content.list && Array.isArray(content.list)) {
|
|
4820
|
+
return content.list;
|
|
4821
|
+
}
|
|
4822
|
+
return [];
|
|
4823
|
+
}
|
|
4824
|
+
}, {
|
|
4825
|
+
key: 'onRelationCountChange',
|
|
4826
|
+
value: function onRelationCountChange(count) {
|
|
4827
|
+
var n = parseInt(count, 10);
|
|
4828
|
+
if (isNaN(n) || n < 0) {
|
|
4829
|
+
n = 0;
|
|
4830
|
+
}
|
|
4831
|
+
// 与列表回写对齐,始终刷新页签数字
|
|
4832
|
+
if (n !== this.state.relationCount) {
|
|
4833
|
+
this.setState({
|
|
4834
|
+
relationCount: n
|
|
4835
|
+
});
|
|
4836
|
+
} else if (n > 0) {
|
|
4837
|
+
// 同值也强制一次,避免 Tab 标题未重绘
|
|
4838
|
+
this.forceUpdate();
|
|
4839
|
+
}
|
|
4840
|
+
}
|
|
4841
|
+
|
|
4655
4842
|
//子流程自动关联
|
|
4656
4843
|
|
|
4657
4844
|
}, {
|
|
@@ -7292,6 +7479,8 @@ var PageHome = function (_React$Component) {
|
|
|
7292
7479
|
buttonCodeListNew.push({ name: buttonName, type: 'secondary', display: 'inline', no: 'distributeFlow' });
|
|
7293
7480
|
} else if (buttonCode == 'MAILSEND') {
|
|
7294
7481
|
buttonCodeListNew.push({ name: buttonName, type: 'secondary', display: 'inline', no: 18 });
|
|
7482
|
+
} else if (buttonCode == 'OTHER_RELATION') {
|
|
7483
|
+
buttonCodeListNew.push({ name: buttonName, type: 'secondary', display: 'inline', no: 'OTHER_RELATION' });
|
|
7295
7484
|
} else {
|
|
7296
7485
|
buttonCodeListNew.push({ name: buttonName, type: 'secondary', display: 'inline', no: buttonCode });
|
|
7297
7486
|
}
|
|
@@ -7349,6 +7538,8 @@ var PageHome = function (_React$Component) {
|
|
|
7349
7538
|
buttonList.push({ name: buttonName, type: 'secondary', display: 'inline', no: 20 });
|
|
7350
7539
|
} else if (buttonCode == 'MAILSEND') {
|
|
7351
7540
|
buttonList.push({ name: buttonName, type: 'secondary', display: 'inline', no: 18 });
|
|
7541
|
+
} else if (buttonCode == 'OTHER_RELATION') {
|
|
7542
|
+
buttonList.push({ name: buttonName, type: 'secondary', display: 'inline', no: 'OTHER_RELATION' });
|
|
7352
7543
|
} else {
|
|
7353
7544
|
buttonList.push({ name: buttonName, type: 'secondary', display: 'inline', no: buttonCode });
|
|
7354
7545
|
}
|
|
@@ -7923,11 +8114,19 @@ var PageHome = function (_React$Component) {
|
|
|
7923
8114
|
key: 'handleChange',
|
|
7924
8115
|
value: function handleChange(obj) {
|
|
7925
8116
|
var t = this;
|
|
7926
|
-
this.setState({ activeItemIndex: obj.active })
|
|
8117
|
+
this.setState({ activeItemIndex: obj.active }, function () {
|
|
8118
|
+
if (String(obj.active) === '3') {
|
|
8119
|
+
t.loadRelationCount();
|
|
8120
|
+
}
|
|
8121
|
+
});
|
|
7927
8122
|
if (obj.active == '2') {
|
|
7928
8123
|
t.refs.flowChart_list.componentDidMount();
|
|
7929
8124
|
} else if (obj.active == '3') {
|
|
7930
|
-
t.refs.relationProcess_list.
|
|
8125
|
+
if (t.refs.relationProcess_list && typeof t.refs.relationProcess_list.reload === 'function') {
|
|
8126
|
+
t.refs.relationProcess_list.reload();
|
|
8127
|
+
} else if (t.refs.relationProcess_list && typeof t.refs.relationProcess_list.componentDidMount === 'function') {
|
|
8128
|
+
t.refs.relationProcess_list.componentDidMount();
|
|
8129
|
+
}
|
|
7931
8130
|
}
|
|
7932
8131
|
}
|
|
7933
8132
|
|
|
@@ -9127,14 +9326,26 @@ var PageHome = function (_React$Component) {
|
|
|
9127
9326
|
),
|
|
9128
9327
|
_react2.default.createElement(
|
|
9129
9328
|
_Tab2.default.Item,
|
|
9130
|
-
{
|
|
9329
|
+
{
|
|
9330
|
+
key: '3',
|
|
9331
|
+
title: this.getRelationTabTitle()
|
|
9332
|
+
},
|
|
9131
9333
|
_react2.default.createElement(
|
|
9132
9334
|
_Group2.default.List,
|
|
9133
9335
|
null,
|
|
9134
9336
|
_react2.default.createElement(
|
|
9135
9337
|
'div',
|
|
9136
9338
|
{ className: this.state.activeItemIndex == 3 ? '' : 't-DN' },
|
|
9137
|
-
_react2.default.createElement(_RelationProcess2.default, {
|
|
9339
|
+
_react2.default.createElement(_RelationProcess2.default, {
|
|
9340
|
+
ref: "relationProcess_list",
|
|
9341
|
+
taskId: this.state.taskId,
|
|
9342
|
+
processInstanceId: this.state.processInstanceId,
|
|
9343
|
+
listType: this.state.listType,
|
|
9344
|
+
activityId: this.state.activityId,
|
|
9345
|
+
canManage: this.state.hasRelationBtn && (this.state.listType == '0' || this.state.isDraft == '1' || this.state.permissionCode == 'start' || this.state.isStart === true),
|
|
9346
|
+
onCountChange: this.onRelationCountChange.bind(this),
|
|
9347
|
+
onDeleted: this.refreshRelationTab.bind(this)
|
|
9348
|
+
})
|
|
9138
9349
|
)
|
|
9139
9350
|
)
|
|
9140
9351
|
),
|
|
@@ -6,6 +6,38 @@
|
|
|
6
6
|
background: #fff;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
/* 关联流程选择弹层:slide-left 默认无 left/width,需强制全屏,否则变成右侧窄条 */
|
|
10
|
+
.relation-process-picker-popup {
|
|
11
|
+
left: 0 !important;
|
|
12
|
+
right: 0 !important;
|
|
13
|
+
width: 100% !important;
|
|
14
|
+
background: #fff;
|
|
15
|
+
}
|
|
16
|
+
.relation-process-picker-popup .t-popup-content {
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: 100%;
|
|
19
|
+
}
|
|
20
|
+
.relation-process-picker {
|
|
21
|
+
width: 100%;
|
|
22
|
+
box-sizing: border-box;
|
|
23
|
+
}
|
|
24
|
+
.relation-process-picker-scroll {
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
}
|
|
27
|
+
.relation-process-picker-scroll .t-scroll-list,
|
|
28
|
+
.relation-process-picker-scroll .t-scrollview-list {
|
|
29
|
+
height: 100%;
|
|
30
|
+
}
|
|
31
|
+
.relation-pick-item-disabled {
|
|
32
|
+
background: #f7f8fa;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* 详情页签略加宽(0.2→0.25),保证「关联流程(N)」完整显示,仍比均分整行紧凑 */
|
|
36
|
+
.approve-content .approval-details .t-tab-bar .t-tab-tab,
|
|
37
|
+
.approval-details .t-tab-bar .t-tab-tab {
|
|
38
|
+
flex: 0.25 !important;
|
|
39
|
+
}
|
|
40
|
+
|
|
9
41
|
/* 结束/不通过/作废「提醒对象」:已选文字勿压住右侧箭头(slot 模式 class 在 Field 根上) */
|
|
10
42
|
.remind-object-field {
|
|
11
43
|
.t-checkbox-field-value-wrap,
|