aldehyde 0.2.1 → 0.2.3
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/lib/controls/code-editor/sql-code-editor.js +1 -1
- package/lib/controls/code-editor/sql-code-editor.js.map +1 -1
- package/lib/controls/collapse-card/index.js +1 -1
- package/lib/controls/collapse-card/index.js.map +1 -1
- package/lib/controls/color-picker/index.d.ts.map +1 -1
- package/lib/controls/color-picker/index.js +2 -3
- package/lib/controls/color-picker/index.js.map +1 -1
- package/lib/controls/entity-select/entity-select.d.ts +15 -2
- package/lib/controls/entity-select/entity-select.d.ts.map +1 -1
- package/lib/controls/entity-select/entity-select.js +88 -17
- package/lib/controls/entity-select/entity-select.js.map +1 -1
- package/lib/controls/html-editor/draft.js +1 -1
- package/lib/controls/html-editor/draft.js.map +1 -1
- package/lib/detail/edit/dtmpl-edit-page.d.ts +2 -1
- package/lib/detail/edit/dtmpl-edit-page.d.ts.map +1 -1
- package/lib/detail/edit/dtmpl-edit-page.js +8 -6
- package/lib/detail/edit/dtmpl-edit-page.js.map +1 -1
- package/lib/detail/edit/fields-edit-card.js +1 -1
- package/lib/detail/edit/fields-edit-card.js.map +1 -1
- package/lib/detail/view/act-dtmpl-view.js +1 -1
- package/lib/detail/view/act-dtmpl-view.js.map +1 -1
- package/lib/{module/dtmpl-view-page.d.ts → detail/view/dtmpl-view-card.d.ts} +5 -5
- package/lib/detail/view/dtmpl-view-card.d.ts.map +1 -0
- package/lib/{module/dtmpl-view-page.js → detail/view/dtmpl-view-card.js} +7 -7
- package/lib/detail/view/dtmpl-view-card.js.map +1 -0
- package/lib/detail/view/dtmpl-view-page.d.ts +33 -0
- package/lib/detail/view/dtmpl-view-page.d.ts.map +1 -0
- package/lib/detail/view/dtmpl-view-page.js +46 -0
- package/lib/detail/view/dtmpl-view-page.js.map +1 -0
- package/lib/form/form-Item-group.d.ts +0 -1
- package/lib/form/form-Item-group.d.ts.map +1 -1
- package/lib/form/form-Item-group.js +0 -1
- package/lib/form/form-Item-group.js.map +1 -1
- package/lib/import/excel-import.js +1 -1
- package/lib/import/excel-import.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/layout/coverstyle.css +3 -0
- package/lib/layout/menu/user-bar.d.ts +2 -0
- package/lib/layout/menu/user-bar.d.ts.map +1 -1
- package/lib/layout/menu/user-bar.js +21 -8
- package/lib/layout/menu/user-bar.js.map +1 -1
- package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
- package/lib/layout/menu/userinfo-bar.js +2 -7
- package/lib/layout/menu/userinfo-bar.js.map +1 -1
- package/lib/login/context-setter.d.ts.map +1 -1
- package/lib/login/context-setter.js.map +1 -1
- package/lib/table/query-table.js +2 -2
- package/lib/table/query-table.js.map +1 -1
- package/lib/table/relation-table.js +1 -1
- package/lib/table/relation-table.js.map +1 -1
- package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
- package/lib/tmpl/hcservice-v3.js.map +1 -1
- package/lib/welcome/workbench.js +2 -2
- package/lib/welcome/workbench.js.map +1 -1
- package/package.json +30 -29
- package/src/aldehyde/controls/code-editor/sql-code-editor.tsx +1 -1
- package/src/aldehyde/controls/collapse-card/index.tsx +1 -1
- package/src/aldehyde/controls/color-picker/index.tsx +2 -5
- package/src/aldehyde/controls/entity-select/entity-select.tsx +171 -63
- package/src/aldehyde/controls/html-editor/draft.tsx +1 -1
- package/src/aldehyde/detail/edit/dtmpl-edit-page.tsx +16 -7
- package/src/aldehyde/detail/edit/fields-edit-card.tsx +1 -1
- package/src/aldehyde/detail/view/act-dtmpl-view.tsx +1 -1
- package/src/aldehyde/{module/dtmpl-view-page.tsx → detail/view/dtmpl-view-card.tsx} +8 -8
- package/src/aldehyde/detail/view/dtmpl-view-page.tsx +79 -0
- package/src/aldehyde/form/form-Item-group.tsx +0 -2
- package/src/aldehyde/import/excel-import.tsx +1 -1
- package/src/aldehyde/index.tsx +3 -3
- package/src/aldehyde/layout/coverstyle.css +3 -0
- package/src/aldehyde/layout/menu/user-bar.tsx +29 -14
- package/src/aldehyde/layout/menu/userinfo-bar.tsx +3 -20
- package/src/aldehyde/login/context-setter.tsx +1 -1
- package/src/aldehyde/table/query-table.tsx +2 -2
- package/src/aldehyde/table/relation-table.tsx +1 -1
- package/src/aldehyde/tmpl/hcservice-v3.tsx +107 -113
- package/src/aldehyde/welcome/workbench.tsx +2 -2
- package/lib/module/dtmpl-view-page.d.ts.map +0 -1
- package/lib/module/dtmpl-view-page.js.map +0 -1
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
import * as React from 'react'
|
|
2
|
-
import {Button, Select, Spin} from 'antd'
|
|
2
|
+
import {Button, Col, Divider, Row, Select, Spin, Tag} from 'antd'
|
|
3
3
|
import {EControlProps, PageInfo, QueryData, QueryKey, SelectConfig} from "../../tmpl/interface";
|
|
4
|
-
import {SearchOutlined} from '@ant-design/icons';
|
|
4
|
+
import {AlignLeftOutlined, EditOutlined, PlusOutlined, SearchOutlined} from '@ant-design/icons';
|
|
5
5
|
import debounce from 'lodash/debounce';
|
|
6
6
|
import './index.css';
|
|
7
7
|
import HcserviceV3 from "../../tmpl/hcservice-v3";
|
|
8
8
|
import HCDataSource from "../../tmpl/hc-data-source";
|
|
9
|
+
import DtmplViewPage from "../../detail/view/dtmpl-view-page";
|
|
10
|
+
import DtmplEditPage from "../../detail/edit/dtmpl-edit-page";
|
|
11
|
+
import {CustomTagProps} from 'rc-select/lib/BaseSelect';
|
|
9
12
|
|
|
10
13
|
interface InnerEntitySelectProps extends EControlProps {
|
|
11
14
|
maxSelected?: number,
|
|
12
15
|
onEntityClick?: (code: string) => void,
|
|
13
|
-
baseCriteria:object,
|
|
16
|
+
baseCriteria: object,
|
|
17
|
+
actions: Array<'add' | 'delete' | 'edit' | 'detail'>
|
|
14
18
|
};
|
|
15
19
|
|
|
16
20
|
interface InnerEntitySelectState {
|
|
17
21
|
titleId: string,
|
|
18
22
|
optionCacheKey: string,
|
|
19
|
-
pageNo:number,
|
|
23
|
+
pageNo: number,
|
|
20
24
|
loading: boolean,
|
|
21
|
-
optionsCache: object
|
|
22
|
-
selectConfig: SelectConfig
|
|
25
|
+
optionsCache: object;
|
|
26
|
+
selectConfig: SelectConfig,
|
|
27
|
+
showView: boolean,
|
|
28
|
+
drawCode: string,
|
|
29
|
+
showEdit: boolean,
|
|
23
30
|
};
|
|
24
31
|
|
|
25
32
|
type OptionCache = {
|
|
@@ -45,19 +52,57 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
45
52
|
state = {
|
|
46
53
|
titleId: undefined,
|
|
47
54
|
optionCacheKey: undefined,
|
|
48
|
-
pageNo:1,
|
|
55
|
+
pageNo: 1,
|
|
49
56
|
loading: false,
|
|
50
57
|
optionsCache: {},
|
|
51
|
-
selectConfig:undefined,
|
|
58
|
+
selectConfig: undefined,
|
|
59
|
+
showView: false,
|
|
60
|
+
showEdit: false,
|
|
61
|
+
drawCode: undefined,
|
|
52
62
|
}
|
|
63
|
+
dropdownRender = (menu) => {
|
|
64
|
+
const {fieldConfig, actions} = this.props;
|
|
65
|
+
// console.log("menu",menu);
|
|
66
|
+
return <>
|
|
67
|
+
{menu}
|
|
68
|
+
{actions && actions.indexOf('add') ?
|
|
69
|
+
<>
|
|
70
|
+
<Divider style={{margin: '8px 0'}}/>
|
|
71
|
+
<Row justify="end">
|
|
72
|
+
<Col>
|
|
73
|
+
<Button type="text" icon={<PlusOutlined style={{color: '#0958d9'}}/>}
|
|
74
|
+
onClick={() => this.editItem()}>
|
|
75
|
+
添加{fieldConfig.title}
|
|
76
|
+
</Button>
|
|
77
|
+
</Col>
|
|
78
|
+
</Row></> : null}
|
|
79
|
+
</>
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
editItem = (code?) => {
|
|
83
|
+
this.setState({
|
|
84
|
+
showEdit: true,
|
|
85
|
+
showView: false,
|
|
86
|
+
drawCode: code,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
showItem = (code) => {
|
|
91
|
+
this.setState({
|
|
92
|
+
showEdit: false,
|
|
93
|
+
showView: true,
|
|
94
|
+
drawCode: code,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
53
98
|
|
|
54
99
|
componentDidUpdate(prevProps) {
|
|
55
|
-
const {baseCriteria,mainCode,fieldConfig} = this.props;
|
|
56
|
-
let {baseCriteria:preBaseCriteria,mainCode:preMainCode,fieldConfig:preFieldConfig}=prevProps;
|
|
57
|
-
if((baseCriteria && JSON.stringify(baseCriteria) != JSON.stringify(preBaseCriteria)
|
|
58
|
-
|
|
100
|
+
const {baseCriteria, mainCode, fieldConfig} = this.props;
|
|
101
|
+
let {baseCriteria: preBaseCriteria, mainCode: preMainCode, fieldConfig: preFieldConfig} = prevProps;
|
|
102
|
+
if ((baseCriteria && JSON.stringify(baseCriteria) != JSON.stringify(preBaseCriteria)) || (mainCode && mainCode != preMainCode)
|
|
103
|
+
|| (fieldConfig && preFieldConfig && fieldConfig.id != preFieldConfig.id)) {
|
|
59
104
|
this.setState({
|
|
60
|
-
optionsCache:{}
|
|
105
|
+
optionsCache: {}
|
|
61
106
|
})
|
|
62
107
|
}
|
|
63
108
|
}
|
|
@@ -70,22 +115,50 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
70
115
|
|
|
71
116
|
|
|
72
117
|
toOption = (code: string, title: string, onEntityClick) => {
|
|
118
|
+
const {actions}=this.props;
|
|
73
119
|
let option = {
|
|
74
|
-
code:code,
|
|
120
|
+
code: code,
|
|
75
121
|
value: code + '@R@' + title,
|
|
76
|
-
showlabel: onEntityClick ? <Button size={'small'} style={{padding: '0px'}} type="link" title=""
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
</Button> : title,
|
|
82
|
-
label:
|
|
122
|
+
// showlabel: onEntityClick ? <Button size={'small'} style={{padding: '0px'}} type="link" title=""
|
|
123
|
+
// onClick={(e) => {
|
|
124
|
+
// e.stopPropagation();
|
|
125
|
+
// onEntityClick(code);
|
|
126
|
+
// }}>{title}
|
|
127
|
+
// </Button> : title,
|
|
128
|
+
label: <>
|
|
129
|
+
{title}
|
|
130
|
+
{actions && actions.indexOf("detail") ?
|
|
131
|
+
<Button size={'small'} type={'text'}><AlignLeftOutlined style={{color: '#0958d9'}} onClick={(event) => {
|
|
132
|
+
event.stopPropagation();
|
|
133
|
+
this.showItem(code);
|
|
134
|
+
}}/></Button>:null}
|
|
135
|
+
|
|
136
|
+
{actions && actions.indexOf("edit") ?
|
|
137
|
+
<Button size={'small'} type={'text'}><EditOutlined style={{color: '#0958d9'}} onClick={(event) => {
|
|
138
|
+
event.stopPropagation();
|
|
139
|
+
this.editItem(code);
|
|
140
|
+
}}/></Button>:null}
|
|
141
|
+
|
|
142
|
+
</>,
|
|
83
143
|
};
|
|
84
144
|
return option;
|
|
85
145
|
}
|
|
86
146
|
|
|
87
|
-
|
|
88
|
-
|
|
147
|
+
doClose = () => {
|
|
148
|
+
this.setState({
|
|
149
|
+
drawCode: undefined,
|
|
150
|
+
showEdit: false,
|
|
151
|
+
showView: false,
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
drawSubmited = () => {
|
|
157
|
+
this.doClose();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
toValueArray = (value) => {
|
|
161
|
+
let valueArray: string[] = [];
|
|
89
162
|
if (value instanceof Array) {
|
|
90
163
|
valueArray = value;
|
|
91
164
|
} else {
|
|
@@ -95,11 +168,11 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
95
168
|
valueArray = [];
|
|
96
169
|
}
|
|
97
170
|
}
|
|
98
|
-
let result=[];
|
|
171
|
+
let result = [];
|
|
99
172
|
for (let v of valueArray) {
|
|
100
173
|
if (v) {
|
|
101
174
|
let vs = v.split("@R@");
|
|
102
|
-
if(vs[1]!='null'){
|
|
175
|
+
if (vs[1] != 'null') {
|
|
103
176
|
result.push(v);
|
|
104
177
|
}
|
|
105
178
|
}
|
|
@@ -112,27 +185,27 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
112
185
|
let options: object[] = [];
|
|
113
186
|
//console.log('options value', value);
|
|
114
187
|
|
|
115
|
-
let valueArray: string[]=this.toValueArray(value);
|
|
188
|
+
let valueArray: string[] = this.toValueArray(value);
|
|
116
189
|
for (let v of valueArray) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
190
|
+
if (v) {
|
|
191
|
+
let vs = v.split("@R@");
|
|
192
|
+
if (vs[1] != 'null') {
|
|
193
|
+
options.push(this.toOption(vs[0], vs[1], onEntityClick));
|
|
122
194
|
}
|
|
195
|
+
}
|
|
123
196
|
}
|
|
124
197
|
|
|
125
198
|
//添加补充项
|
|
126
|
-
if(fieldConfig.suppleOptions){
|
|
127
|
-
fieldConfig.suppleOptions.forEach((o)=>{
|
|
128
|
-
let had=false;
|
|
129
|
-
options.forEach((s)=>{
|
|
130
|
-
if(s['code']==o.code){
|
|
131
|
-
had=true;
|
|
199
|
+
if (fieldConfig.suppleOptions) {
|
|
200
|
+
fieldConfig.suppleOptions.forEach((o) => {
|
|
201
|
+
let had = false;
|
|
202
|
+
options.forEach((s) => {
|
|
203
|
+
if (s['code'] == o.code) {
|
|
204
|
+
had = true;
|
|
132
205
|
return;
|
|
133
206
|
}
|
|
134
207
|
})
|
|
135
|
-
if(!had) {
|
|
208
|
+
if (!had) {
|
|
136
209
|
options.push(this.toOption(o.code, o.title, undefined));
|
|
137
210
|
}
|
|
138
211
|
})
|
|
@@ -142,7 +215,7 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
142
215
|
}
|
|
143
216
|
|
|
144
217
|
fetchNextPage = async () => {
|
|
145
|
-
const {optionCacheKey, titleId,optionsCache} = this.state;
|
|
218
|
+
const {optionCacheKey, titleId, optionsCache} = this.state;
|
|
146
219
|
let optionCache = optionsCache[optionCacheKey];
|
|
147
220
|
let pageInfo = optionCache.pageInfo;
|
|
148
221
|
if (!optionCache.touchEnd) {
|
|
@@ -153,15 +226,15 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
153
226
|
optionCache.touchEnd = dataSource.touchEnd;
|
|
154
227
|
}
|
|
155
228
|
this.setState({
|
|
156
|
-
pageNo:pageInfo.pageNo,
|
|
229
|
+
pageNo: pageInfo.pageNo,
|
|
157
230
|
})
|
|
158
231
|
}
|
|
159
232
|
}
|
|
160
233
|
|
|
161
234
|
fetchOptions = async (searchText) => {
|
|
162
|
-
const {
|
|
163
|
-
const {optionsCache,selectConfig}=this.state;
|
|
164
|
-
let optionCacheKey="withoutValue";
|
|
235
|
+
const {fieldConfig, mainCode, baseCriteria} = this.props;
|
|
236
|
+
const {optionsCache, selectConfig} = this.state;
|
|
237
|
+
let optionCacheKey = "withoutValue";
|
|
165
238
|
//先从缓存里拿
|
|
166
239
|
if (searchText) {
|
|
167
240
|
optionCacheKey = searchText;
|
|
@@ -172,9 +245,9 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
172
245
|
this.setState({
|
|
173
246
|
loading: true,
|
|
174
247
|
})
|
|
175
|
-
let selectConfig_=selectConfig;
|
|
248
|
+
let selectConfig_ = selectConfig;
|
|
176
249
|
if (!selectConfig_) {
|
|
177
|
-
selectConfig_ = await HCDataSource.requestSelectConfig(
|
|
250
|
+
selectConfig_ = await HCDataSource.requestSelectConfig(fieldConfig.id);
|
|
178
251
|
}
|
|
179
252
|
let pageInfo = {
|
|
180
253
|
pageNo: 1,
|
|
@@ -196,15 +269,18 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
196
269
|
/** 构建 dataSource **/
|
|
197
270
|
//构建过滤条件
|
|
198
271
|
let criteriaData = {};
|
|
199
|
-
let mainCode_=mainCode;
|
|
200
|
-
if(baseCriteria){
|
|
201
|
-
criteriaData={...baseCriteria}
|
|
202
|
-
if(!mainCode){
|
|
203
|
-
mainCode_=baseCriteria['mainCode']; //当只在条件中设置mainCode时,保证生效不被设置为null
|
|
272
|
+
let mainCode_ = mainCode;
|
|
273
|
+
if (baseCriteria) {
|
|
274
|
+
criteriaData = {...baseCriteria}
|
|
275
|
+
if (!mainCode) {
|
|
276
|
+
mainCode_ = baseCriteria['mainCode']; //当只在条件中设置mainCode时,保证生效不被设置为null
|
|
204
277
|
}
|
|
205
278
|
}
|
|
206
279
|
criteriaData[formItemName] = searchText;
|
|
207
|
-
let queryKey: QueryKey = await HcserviceV3.requestLtmplQueryKey(
|
|
280
|
+
let queryKey: QueryKey = await HcserviceV3.requestLtmplQueryKey(fieldConfig.id, {
|
|
281
|
+
...criteriaData, ...pageInfo,
|
|
282
|
+
mainCode
|
|
283
|
+
});
|
|
208
284
|
let sourceData = await this.loadData(queryKey.key, pageInfo, titleId);
|
|
209
285
|
|
|
210
286
|
optionCache = {
|
|
@@ -214,12 +290,12 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
214
290
|
searchValue: searchText,
|
|
215
291
|
touchEnd: sourceData.touchEnd
|
|
216
292
|
};
|
|
217
|
-
optionsCache[optionCacheKey]=optionCache;
|
|
293
|
+
optionsCache[optionCacheKey] = optionCache;
|
|
218
294
|
this.setState({
|
|
219
295
|
optionCacheKey,
|
|
220
296
|
titleId,
|
|
221
|
-
optionsCache:{...optionsCache},
|
|
222
|
-
selectConfig:selectConfig_,
|
|
297
|
+
optionsCache: {...optionsCache},
|
|
298
|
+
selectConfig: selectConfig_,
|
|
223
299
|
loading: false,
|
|
224
300
|
})
|
|
225
301
|
} else {
|
|
@@ -252,9 +328,27 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
252
328
|
}
|
|
253
329
|
}
|
|
254
330
|
|
|
331
|
+
tagRender = (props: CustomTagProps) => {
|
|
332
|
+
const {label, closable, onClose} = props;
|
|
333
|
+
const onPreventMouseDown = (event: React.MouseEvent<HTMLSpanElement>) => {
|
|
334
|
+
event.preventDefault();
|
|
335
|
+
event.stopPropagation();
|
|
336
|
+
};
|
|
337
|
+
return (
|
|
338
|
+
<Tag
|
|
339
|
+
onMouseDown={onPreventMouseDown}
|
|
340
|
+
closable={closable}
|
|
341
|
+
onClose={onClose}
|
|
342
|
+
style={{marginRight: 3}}
|
|
343
|
+
>
|
|
344
|
+
{label}
|
|
345
|
+
</Tag>
|
|
346
|
+
);
|
|
347
|
+
};
|
|
348
|
+
|
|
255
349
|
|
|
256
350
|
loadData = async (queryKey: string, pageInfo: PageInfo, titleId: string): Promise<LoadDataSource> => {
|
|
257
|
-
const {onEntityClick,baseCriteria} = this.props;
|
|
351
|
+
const {onEntityClick, baseCriteria} = this.props;
|
|
258
352
|
|
|
259
353
|
let queryData: QueryData = await HcserviceV3.requestQueryData(queryKey, pageInfo);
|
|
260
354
|
let options: object[] = [];
|
|
@@ -264,11 +358,11 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
264
358
|
//放入全局对象缓存
|
|
265
359
|
//这个缓存后续还需要完善,因为太多了,容易爆掉
|
|
266
360
|
HCDataSource.cache(item);
|
|
267
|
-
if(title){
|
|
268
|
-
let ts=title.split('@R@');
|
|
269
|
-
let t=ts && ts.length>0?ts[ts.length-1]:title;
|
|
270
|
-
if(t!='null'){
|
|
271
|
-
let option = this.toOption(item.code,t
|
|
361
|
+
if (title) {
|
|
362
|
+
let ts = title.split('@R@');
|
|
363
|
+
let t = ts && ts.length > 0 ? ts[ts.length - 1] : title;
|
|
364
|
+
if (t != 'null') {
|
|
365
|
+
let option = this.toOption(item.code, t, onEntityClick);
|
|
272
366
|
options.push(option);
|
|
273
367
|
}
|
|
274
368
|
}
|
|
@@ -294,8 +388,8 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
294
388
|
}
|
|
295
389
|
|
|
296
390
|
render() {
|
|
297
|
-
const {id,value,
|
|
298
|
-
const {optionCacheKey, loading,optionsCache} = this.state;
|
|
391
|
+
const {id, value, fieldConfig, onChange, disabled, style, maxSelected, onEntityClick, actions} = this.props;
|
|
392
|
+
const {optionCacheKey, loading, optionsCache, drawCode, showEdit, showView} = this.state;
|
|
299
393
|
let initOptions = this.toOptions(value, onEntityClick);
|
|
300
394
|
let exists;
|
|
301
395
|
let properOptions = [...initOptions];
|
|
@@ -313,7 +407,7 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
313
407
|
}
|
|
314
408
|
}
|
|
315
409
|
|
|
316
|
-
return
|
|
410
|
+
return <><Select
|
|
317
411
|
disabled={disabled}
|
|
318
412
|
id={id}
|
|
319
413
|
style={{...style}}
|
|
@@ -325,6 +419,8 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
325
419
|
allowClear={true}
|
|
326
420
|
showArrow={true}
|
|
327
421
|
suffixIcon={<SearchOutlined/>}
|
|
422
|
+
dropdownRender={this.dropdownRender}
|
|
423
|
+
tagRender={actions && (actions.indexOf("detail") || actions.indexOf("edit")) ? this.tagRender : undefined}
|
|
328
424
|
onSearch={this.debounceFetcher()}
|
|
329
425
|
onClick={() => {
|
|
330
426
|
debounce(this.fetchOptions, 100)(undefined)
|
|
@@ -337,7 +433,19 @@ export default class EntitySelect extends React.PureComponent<InnerEntitySelectP
|
|
|
337
433
|
}
|
|
338
434
|
}}>
|
|
339
435
|
</Select>
|
|
436
|
+
{showView && drawCode ?
|
|
437
|
+
<DtmplViewPage pageType={"drawer"} placement={'left'} onClose={this.doClose} open={showView}
|
|
438
|
+
sourceId={fieldConfig.id} code={drawCode}></DtmplViewPage> : null}
|
|
439
|
+
{showEdit ? <DtmplEditPage pageType={"drawer"} placement={'left'} open={showEdit}
|
|
440
|
+
onCancel={this.doClose}
|
|
441
|
+
width={960}
|
|
442
|
+
sourceId={fieldConfig.id}
|
|
443
|
+
code={drawCode}
|
|
444
|
+
onOk={this.drawSubmited}/> : null}
|
|
445
|
+
</>
|
|
340
446
|
}
|
|
447
|
+
|
|
448
|
+
|
|
341
449
|
}
|
|
342
450
|
|
|
343
451
|
|
|
@@ -140,7 +140,7 @@ export default class Draft extends React.PureComponent<DraftProps, DraftState>{
|
|
|
140
140
|
},
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
entryControl= <Card style={{width:'100%'}} bodyStyle={{padding:'2px',minHeight:'280px'}}>
|
|
143
|
+
entryControl= <Card style={{width:'100%'}} bodyStyle={{padding:'2px',minHeight:'280px'}} size={'small'}>
|
|
144
144
|
<Editor
|
|
145
145
|
readOnly={disabled}
|
|
146
146
|
toolbarHidden={viewOrEdit=='view'? true: false}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {Button, Drawer, FormInstance, Modal, Popconfirm, Space} from 'antd'
|
|
1
|
+
import React, {ReactNode} from 'react';
|
|
2
|
+
import {Button, Drawer, FormInstance, Modal, Popconfirm, Space,Card} from 'antd'
|
|
3
3
|
import {DtmplBaseProps, DtmplConfig, DtmplData, PageType} from "../../tmpl/interface";
|
|
4
4
|
import DtmplForm from '../../form/dtmpl-form';
|
|
5
5
|
import HCDataSource from "../../tmpl/hc-data-source";
|
|
@@ -14,7 +14,8 @@ interface ModalEditorProps extends DtmplBaseProps {
|
|
|
14
14
|
onOk: (code: string) => void,
|
|
15
15
|
onCancel: () => void,
|
|
16
16
|
pageType:PageType;
|
|
17
|
-
placement?:'top' | 'right' | 'bottom' | 'left'
|
|
17
|
+
placement?:'top' | 'right' | 'bottom' | 'left',
|
|
18
|
+
title?:ReactNode,
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
interface ModalEditorState {
|
|
@@ -186,13 +187,15 @@ export default class DtmplEditPage extends React.PureComponent<ModalEditorProps,
|
|
|
186
187
|
}
|
|
187
188
|
|
|
188
189
|
render() {
|
|
189
|
-
const {height, onOk, onCancel, code, sourceId, open,mainCode,width,pageType,placement,maxColsOnRow} = this.props
|
|
190
|
+
const {height, onOk, onCancel, code, sourceId, open,mainCode,width,pageType,placement,maxColsOnRow,title} = this.props
|
|
190
191
|
const {dtmplConfig,id,dtmplData} = this.state;
|
|
191
192
|
|
|
193
|
+
let title1=title?title:dtmplConfig ? dtmplConfig.title : "";
|
|
194
|
+
|
|
192
195
|
return (<> {pageType=='modal'? <Modal
|
|
193
196
|
open={open}
|
|
194
197
|
width={width}
|
|
195
|
-
title={
|
|
198
|
+
title={title1}
|
|
196
199
|
bodyStyle={{height: height, overflow: 'auto'}}
|
|
197
200
|
destroyOnClose={true}
|
|
198
201
|
centered
|
|
@@ -205,8 +208,9 @@ export default class DtmplEditPage extends React.PureComponent<ModalEditorProps,
|
|
|
205
208
|
showConfirm={false} dtmplData={dtmplData} onValuesChange={this.onValuesChange} />
|
|
206
209
|
</div>
|
|
207
210
|
</Modal>
|
|
208
|
-
:
|
|
211
|
+
:pageType=='drawer'?
|
|
209
212
|
<Drawer
|
|
213
|
+
title={title1}
|
|
210
214
|
placement={placement}
|
|
211
215
|
closable={true}
|
|
212
216
|
mask={false}
|
|
@@ -223,7 +227,12 @@ export default class DtmplEditPage extends React.PureComponent<ModalEditorProps,
|
|
|
223
227
|
<DtmplForm mainCode={mainCode} parentId={id} dtmplConfig={dtmplConfig} formRef={this.formRef} sourceId={sourceId}
|
|
224
228
|
onFinish={onOk} maxColsOnRow={maxColsOnRow}
|
|
225
229
|
showConfirm={false} dtmplData={dtmplData} onValuesChange={this.onValuesChange} />
|
|
226
|
-
</Drawer>
|
|
230
|
+
</Drawer>:<Card title={title1}>
|
|
231
|
+
<DtmplForm mainCode={mainCode} parentId={id} dtmplConfig={dtmplConfig} formRef={this.formRef} sourceId={sourceId}
|
|
232
|
+
onFinish={onOk} maxColsOnRow={maxColsOnRow}
|
|
233
|
+
showConfirm={false} dtmplData={dtmplData} onValuesChange={this.onValuesChange} />
|
|
234
|
+
</Card>
|
|
235
|
+
|
|
227
236
|
}
|
|
228
237
|
</>
|
|
229
238
|
)
|
|
@@ -93,7 +93,7 @@ class ActDtmplView extends React.PureComponent<ActDtmplViewProps, ActDtmplViewSt
|
|
|
93
93
|
}
|
|
94
94
|
return (
|
|
95
95
|
<div className={`detailPage ${showRightNav_ ? 'showRightNav' : 'noRightNav'}`}>
|
|
96
|
-
<Card bordered={false}
|
|
96
|
+
<Card bordered={false} size={'small'}
|
|
97
97
|
key={"detailTitle"}
|
|
98
98
|
className="hoverable pageHeader"
|
|
99
99
|
>
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import DtmplEditPage from "../
|
|
3
|
-
import ActDtmplView from "
|
|
2
|
+
import DtmplEditPage from "../edit/dtmpl-edit-page";
|
|
3
|
+
import ActDtmplView from "./act-dtmpl-view";
|
|
4
4
|
|
|
5
5
|
//以列表为入口的,页面内列表,基本原则是所有交互在页面内完成,不会触发路由。
|
|
6
6
|
|
|
7
|
-
export interface
|
|
7
|
+
export interface DtmplViewCardProps {
|
|
8
8
|
sourceId?:string,
|
|
9
9
|
code?:string;
|
|
10
10
|
mainCode?:string;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
export interface
|
|
13
|
+
export interface DtmplViewCardState {
|
|
14
14
|
showDtmplEdit:boolean;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
class
|
|
17
|
+
class DtmplViewCard extends React.PureComponent<DtmplViewCardProps, DtmplViewCardState> {
|
|
18
18
|
|
|
19
19
|
state = {
|
|
20
20
|
showDtmplEdit:false,
|
|
@@ -48,16 +48,16 @@ class DtmplViewPage extends React.PureComponent<DtmplViewPageProps, DtmplViewPag
|
|
|
48
48
|
const { sourceId,code,mainCode} = this.props;
|
|
49
49
|
return <>
|
|
50
50
|
<ActDtmplView goDtmpl={this.goDtmpl} sourceId={sourceId} code={code} mainCode={mainCode}></ActDtmplView>
|
|
51
|
-
|
|
51
|
+
{showDtmplEdit? <DtmplEditPage open={showDtmplEdit} onCancel={()=>{
|
|
52
52
|
this.setState({
|
|
53
53
|
showDtmplEdit:false,
|
|
54
54
|
})}}
|
|
55
55
|
sourceId={sourceId}
|
|
56
56
|
code={code}
|
|
57
|
-
onOk={this.handleDtmplEdit}
|
|
57
|
+
onOk={this.handleDtmplEdit} />:null}
|
|
58
58
|
</>
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
export default
|
|
62
|
+
export default DtmplViewCard;
|
|
63
63
|
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import React, {ReactNode} from 'react'
|
|
2
|
+
import {Drawer, Space, Button, Modal} from 'antd'
|
|
3
|
+
import {SolutionOutlined} from '@ant-design/icons';
|
|
4
|
+
import DtmplViewCard from "../../detail/view/dtmpl-view-card";
|
|
5
|
+
import {DtmplBaseProps, PageType} from "../../tmpl/interface";
|
|
6
|
+
|
|
7
|
+
interface DtmplViewPageProps extends DtmplBaseProps{
|
|
8
|
+
title?:ReactNode,
|
|
9
|
+
open: boolean,
|
|
10
|
+
onClose: () => void,
|
|
11
|
+
pageType?:PageType;
|
|
12
|
+
placement?:'top' | 'right' | 'bottom' | 'left',
|
|
13
|
+
width?:string|number,
|
|
14
|
+
height?:string|number,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface DtmplViewPageState {
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class DtmplViewPage extends React.PureComponent<DtmplViewPageProps, DtmplViewPageState> {
|
|
23
|
+
state={
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static defaultProps = {
|
|
28
|
+
height: 500,
|
|
29
|
+
width:1250,
|
|
30
|
+
forceRender: true,
|
|
31
|
+
style: {maxWidth: 'calc(100vw - 60px)', maxHeight: 'calc(100vh - 50px)'},
|
|
32
|
+
cancelText: "关闭",
|
|
33
|
+
pageType:'modal',
|
|
34
|
+
placement:'left',
|
|
35
|
+
open:false,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async componentDidMount() {
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
render() {
|
|
43
|
+
const {title,sourceId,code,placement,open,onClose,pageType,width,height}=this.props;
|
|
44
|
+
return <>{pageType=="modal"?
|
|
45
|
+
<Modal
|
|
46
|
+
open={open}
|
|
47
|
+
width={width}
|
|
48
|
+
title={title}
|
|
49
|
+
bodyStyle={{height: height, overflow: 'auto'}}
|
|
50
|
+
destroyOnClose={true}
|
|
51
|
+
centered
|
|
52
|
+
onCancel={onClose}
|
|
53
|
+
><DtmplViewCard sourceId={sourceId} code={code}></DtmplViewCard>
|
|
54
|
+
</Modal>
|
|
55
|
+
:pageType=='drawer'?
|
|
56
|
+
<Drawer
|
|
57
|
+
placement={placement}
|
|
58
|
+
title={title}
|
|
59
|
+
closable={true}
|
|
60
|
+
mask={false}
|
|
61
|
+
onClose={onClose}
|
|
62
|
+
open={open}
|
|
63
|
+
width={width}
|
|
64
|
+
style={{
|
|
65
|
+
maxWidth: 1960,
|
|
66
|
+
}}
|
|
67
|
+
extra={
|
|
68
|
+
<Space>
|
|
69
|
+
<Button onClick={()=>onClose()}>关闭</Button>
|
|
70
|
+
</Space>
|
|
71
|
+
}
|
|
72
|
+
>
|
|
73
|
+
<DtmplViewCard sourceId={sourceId} code={code}></DtmplViewCard>
|
|
74
|
+
</Drawer>: <DtmplViewCard sourceId={sourceId} code={code}></DtmplViewCard>}
|
|
75
|
+
</>
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export default DtmplViewPage;
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import React, {RefObject} from 'react'
|
|
2
2
|
import {Col, Form, Row} from 'antd'
|
|
3
|
-
import 'moment/locale/zh-cn';
|
|
4
3
|
import {FieldConfig} from "../tmpl/interface";
|
|
5
4
|
import EntryControl from "../controls/entry-control";
|
|
6
5
|
import Units from '../units'
|
|
7
6
|
import {FormInstance} from "antd/lib/form/hooks/useForm";
|
|
8
7
|
|
|
9
|
-
|
|
10
8
|
const FormItem = Form.Item
|
|
11
9
|
|
|
12
10
|
export interface FieldGroupProps {
|
|
@@ -247,7 +247,7 @@ export default class ExcelImport extends React.PureComponent<ExcelImportProps, E
|
|
|
247
247
|
</h3>
|
|
248
248
|
<Row>
|
|
249
249
|
<Col span={14} offset={5}>
|
|
250
|
-
<Card style={{minWidth:600}}>
|
|
250
|
+
<Card size={'small'} style={{minWidth:600}}>
|
|
251
251
|
<Upload {...props}>
|
|
252
252
|
<Button>
|
|
253
253
|
<UploadOutlined />选择导入文件
|
package/src/aldehyde/index.tsx
CHANGED
|
@@ -52,8 +52,8 @@ const ImportRoute = loadable(() =>
|
|
|
52
52
|
const LtmplRoute = loadable(() =>
|
|
53
53
|
import("./routable/ltmpl-route"), {fallback: Loading});
|
|
54
54
|
//import DtmplViewPage from './module/dtmpl-view-page';
|
|
55
|
-
const
|
|
56
|
-
import("./
|
|
55
|
+
const DtmplViewCard = loadable(() =>
|
|
56
|
+
import("./detail/view/dtmpl-view-card"), {fallback: Loading});
|
|
57
57
|
const DtmplEditCard = loadable(() =>
|
|
58
58
|
import("./detail/edit/dtmpl-edit-card"), {fallback: Loading});
|
|
59
59
|
// import DtmplEdit from './detail/edit/dtmpl-edit';
|
|
@@ -91,7 +91,7 @@ const DtmplEditPage = loadable(() =>
|
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
|
|
94
|
-
export {ActTable,SelectTable,Loginit,DtmplRoute,ImportRoute,LtmplRoute,
|
|
94
|
+
export {ActTable,SelectTable,Loginit,DtmplRoute,ImportRoute,LtmplRoute,DtmplViewCard,LtmplPage,Menu2layers,Block,UserBar,
|
|
95
95
|
ResetPassword,Footer,EntryControl,ViewControl,ProgramConfig,HydrocarbonService,QuickEntrance,Workbench,PopoverEntitySelect,DtmplEditCard
|
|
96
96
|
,DatePicker,DtmplEditPage,TmplInterface,TmplDataSource,Superagent,DtmplEdit,HCWelcome,MainPage,ExcelImportRoute,CustomPageRouter,HCCustomPageRouter,L2MenuMessageBar,L2MenuQuickBar,ContextSetter,}
|
|
97
97
|
|