aldehyde 0.0.1

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 (156) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/dist/163.js +2 -0
  4. package/dist/163.js.LICENSE.txt +43 -0
  5. package/dist/41.js +1 -0
  6. package/dist/aldehyde.js +2 -0
  7. package/dist/aldehyde.js.LICENSE.txt +122 -0
  8. package/dist/chemstruc-graph.js +1 -0
  9. package/dist/css/163-24392163d3c7b54ea806.css +11 -0
  10. package/dist/css/290-5e8e152675ab7d201c00.css +886 -0
  11. package/dist/css/chemstruc-graph-87868f791bf92fb80db9.css +29 -0
  12. package/dist/css/main-2e6725ec1b56da516cee.css +256 -0
  13. package/dist/html-editor-draft.js +2 -0
  14. package/dist/html-editor-draft.js.LICENSE.txt +5 -0
  15. package/dist/images/logo-06f6a5d8.png +0 -0
  16. package/dist/index.html +4 -0
  17. package/dist/signature.js +2 -0
  18. package/dist/signature.js.LICENSE.txt +17 -0
  19. package/package.json +180 -0
  20. package/src/components/chart/antd/Chart.js +32 -0
  21. package/src/components/chart/antd/Chart10000.js +90 -0
  22. package/src/components/chart/antd/Max2DimLineChart.js +128 -0
  23. package/src/components/chart/antd/PieChart1.js +54 -0
  24. package/src/components/chart/antd/PieChart2.js +56 -0
  25. package/src/components/chart/antd/chart-utils.tsx +50 -0
  26. package/src/components/chart/antd/column-chart-sub.tsx +67 -0
  27. package/src/components/chart/antd/line-chart-sub.tsx +65 -0
  28. package/src/components/chart/antd/pie-chart-sub.tsx +54 -0
  29. package/src/components/chart/antd/statview-d2-chart.tsx +125 -0
  30. package/src/components/chart/statview-l2-chart.tsx +69 -0
  31. package/src/components/controls/action/index.css +9 -0
  32. package/src/components/controls/action/index.tsx +228 -0
  33. package/src/components/controls/action/utils.tsx +122 -0
  34. package/src/components/controls/auto-complete/index.tsx +80 -0
  35. package/src/components/controls/cascader/index.js +97 -0
  36. package/src/components/controls/chemstruc/graph.tsx +150 -0
  37. package/src/components/controls/chemstruc/index.css +28 -0
  38. package/src/components/controls/collapse-card/index.css +9 -0
  39. package/src/components/controls/collapse-card/index.tsx +59 -0
  40. package/src/components/controls/color-picker/index.css +27 -0
  41. package/src/components/controls/color-picker/index.tsx +88 -0
  42. package/src/components/controls/cquery/cquick-button.tsx +117 -0
  43. package/src/components/controls/date-picker/index.tsx +141 -0
  44. package/src/components/controls/entity-select/entity-select.tsx +277 -0
  45. package/src/components/controls/entity-select/index.css +6 -0
  46. package/src/components/controls/entity-select/popover-entity-select.tsx +112 -0
  47. package/src/components/controls/entry-control.tsx +240 -0
  48. package/src/components/controls/enum-badge/index.tsx +28 -0
  49. package/src/components/controls/enum-tag/index.tsx +30 -0
  50. package/src/components/controls/file-view/drawer-file-view.tsx +69 -0
  51. package/src/components/controls/file-view/index.tsx +145 -0
  52. package/src/components/controls/html-editor/draft.tsx +161 -0
  53. package/src/components/controls/html-editor/tinymce.js +55 -0
  54. package/src/components/controls/input-number/index.tsx +101 -0
  55. package/src/components/controls/input-range/index.tsx +48 -0
  56. package/src/components/controls/password-setter/index.css +3 -0
  57. package/src/components/controls/password-setter/index.js +70 -0
  58. package/src/components/controls/progress/index.tsx +61 -0
  59. package/src/components/controls/relation-existion/index.css +4 -0
  60. package/src/components/controls/relation-existion/index.tsx +108 -0
  61. package/src/components/controls/rfield/index.css +4 -0
  62. package/src/components/controls/rfield/index.tsx +161 -0
  63. package/src/components/controls/signature/index.tsx +162 -0
  64. package/src/components/controls/steps/index.tsx +58 -0
  65. package/src/components/controls/text/ellipsis-text.tsx +70 -0
  66. package/src/components/controls/upload/index.tsx +122 -0
  67. package/src/components/controls/view-control.tsx +177 -0
  68. package/src/components/detail/button/cquery-button-bar.tsx +112 -0
  69. package/src/components/detail/button/index.css +43 -0
  70. package/src/components/detail/button/submit-button-bar.tsx +151 -0
  71. package/src/components/detail/dtmpl.css +53 -0
  72. package/src/components/detail/edit/dtmpl-edit.tsx +218 -0
  73. package/src/components/detail/edit/fields-edit-card.tsx +103 -0
  74. package/src/components/detail/edit/modal-dtmpl-edit.tsx +198 -0
  75. package/src/components/detail/edit/modal-row-edit.tsx +72 -0
  76. package/src/components/detail/edit/post-result/index.tsx +52 -0
  77. package/src/components/detail/edit/row-edit-card.tsx +125 -0
  78. package/src/components/detail/edit/row-editor.tsx +71 -0
  79. package/src/components/detail/rightbar/index.css +35 -0
  80. package/src/components/detail/rightbar/index.tsx +76 -0
  81. package/src/components/detail/view/act-dtmpl-view.tsx +155 -0
  82. package/src/components/detail/view/dtmpl-view.tsx +143 -0
  83. package/src/components/detail/view/field-view-group.tsx +73 -0
  84. package/src/components/detail/view/modal-dtmpl-view.tsx +56 -0
  85. package/src/components/detail/view/snapshot-timeline.tsx +130 -0
  86. package/src/components/exportor/export-frame.css +3 -0
  87. package/src/components/exportor/export-frame.tsx +194 -0
  88. package/src/components/exportor/index.tsx +60 -0
  89. package/src/components/form/criteria-form.tsx +241 -0
  90. package/src/components/form/dtmpl-form.css +4 -0
  91. package/src/components/form/dtmpl-form.tsx +272 -0
  92. package/src/components/form/field-group-form.tsx +75 -0
  93. package/src/components/form/fields-form.tsx +51 -0
  94. package/src/components/form/form-Item-group.tsx +99 -0
  95. package/src/components/form/index.css +13 -0
  96. package/src/components/import/excel-import.tsx +316 -0
  97. package/src/components/import/index.css +54 -0
  98. package/src/components/import/template-builder.js +474 -0
  99. package/src/components/import/template.css +51 -0
  100. package/src/components/layout/MainPage.tsx +230 -0
  101. package/src/components/layout/footer/index.css +6 -0
  102. package/src/components/layout/footer/index.js +17 -0
  103. package/src/components/layout/header/index.css +86 -0
  104. package/src/components/layout/header/index.tsx +58 -0
  105. package/src/components/layout/menu/block.tsx +88 -0
  106. package/src/components/layout/menu/l2menu-message-bar.tsx +118 -0
  107. package/src/components/layout/menu/l2menu-quick-bar.tsx +132 -0
  108. package/src/components/layout/menu/menu-2layers.tsx +92 -0
  109. package/src/components/layout/menu/menu-render.tsx +49 -0
  110. package/src/components/layout/menu/reset-password.tsx +185 -0
  111. package/src/components/layout/menu/user-bar.tsx +97 -0
  112. package/src/components/layout/menu/userinfo-bar.tsx +70 -0
  113. package/src/components/layout/sidebar/index.css +26 -0
  114. package/src/components/layout/sidebar/index.tsx +38 -0
  115. package/src/components/login.js +137 -0
  116. package/src/components/module/criteria-page.tsx +175 -0
  117. package/src/components/module/dtmpl-page.tsx +70 -0
  118. package/src/components/module/ltmpl-page.tsx +181 -0
  119. package/src/components/routable/dtmpl-route.tsx +96 -0
  120. package/src/components/routable/import-route.tsx +28 -0
  121. package/src/components/routable/ltmpl-route.tsx +158 -0
  122. package/src/components/table/act-table.tsx +635 -0
  123. package/src/components/table/column/column-selector.tsx +79 -0
  124. package/src/components/table/column/index.css +14 -0
  125. package/src/components/table/index.css +45 -0
  126. package/src/components/table/l2-act-table.tsx +85 -0
  127. package/src/components/table/modal-select-table.tsx +248 -0
  128. package/src/components/table/pagination.css +15 -0
  129. package/src/components/table/pagination.tsx +72 -0
  130. package/src/components/table/query-table.tsx +331 -0
  131. package/src/components/table/relation-table.tsx +600 -0
  132. package/src/components/table/select-table.tsx +247 -0
  133. package/src/components/table/selected-rows-card.tsx +62 -0
  134. package/src/components/table/stat/restat.tsx +79 -0
  135. package/src/components/table/table-util.tsx +33 -0
  136. package/src/components/tmpl/control-type-supportor.tsx +97 -0
  137. package/src/components/tmpl/hc-data-source.tsx +230 -0
  138. package/src/components/tmpl/hcservice-v3.tsx +624 -0
  139. package/src/components/tmpl/interface.tsx +308 -0
  140. package/src/components/tmpl/superagent.js +93 -0
  141. package/src/components/tmpl/tmpl-config-analysis.tsx +111 -0
  142. package/src/components/units/EncryptUtils.js +38 -0
  143. package/src/components/units/image.d.ts +8 -0
  144. package/src/components/units/index.tsx +536 -0
  145. package/src/components/units/logo.png +0 -0
  146. package/src/components/units/storage.js +3 -0
  147. package/src/components/welcome/HCWelcome.js +232 -0
  148. package/src/components/welcome/index.css +13 -0
  149. package/src/components/welcome/logo.png +0 -0
  150. package/src/components/welcome/quick-entrance.tsx +77 -0
  151. package/src/components/welcome/workbench.tsx +76 -0
  152. package/src/index.js +4 -0
  153. package/src/style/common.css +79 -0
  154. package/src/style/coverstyle.css +49 -0
  155. package/src/style/transstyle.css +24 -0
  156. package/tsconfig.json +106 -0
@@ -0,0 +1,132 @@
1
+ import React from 'react'
2
+ import {Badge, Avatar, Dropdown, Menu, Timeline, Drawer, Space,Button} from 'antd'
3
+ import {MessageTwoTone,AppstoreOutlined} from '@ant-design/icons';
4
+ import 'antd/dist/antd.css';
5
+ import {Level2Menu} from "../../tmpl/interface";
6
+ // import HcserviceV3 from '../../tmpl/hcservice-v3'
7
+ import HCDataSource from './../../tmpl/hc-data-source'
8
+ import LtmplPage from "./../../module/ltmpl-page";
9
+
10
+ interface L2MenuQuickBarProps {
11
+
12
+ }
13
+
14
+ interface QuickBar {
15
+ l2Menu: Level2Menu;
16
+ count: number;
17
+ }
18
+
19
+ interface L2MenuQuickBarState {
20
+ quickBars: QuickBar[];
21
+ anyState:boolean;
22
+ currentId:string;
23
+ showDraw:boolean;
24
+ }
25
+
26
+
27
+ class L2MenuQuickBar extends React.PureComponent<L2MenuQuickBarProps, L2MenuQuickBarState> {
28
+ state={
29
+ quickBars:undefined,
30
+ anyState:false,
31
+ currentId:undefined,
32
+ showDraw:false,
33
+ }
34
+
35
+ async componentDidMount() {
36
+ let l2Menus = await HCDataSource.quickEntranceMenus();
37
+ const quickBars:QuickBar[]= [];
38
+ for (const item of l2Menus) {
39
+ const quickBar:QuickBar={
40
+ l2Menu:item,
41
+ count:0,
42
+ };
43
+ let that=this;
44
+ quickBars.push(quickBar);
45
+ }
46
+ this.setState({
47
+ quickBars,
48
+ });
49
+ }
50
+ showDraw=(currentId:string)=>{
51
+ console.log("点击了L2MenuQuickBar",currentId);
52
+ this.setState({
53
+ currentId,
54
+ showDraw:true
55
+ })
56
+
57
+ }
58
+
59
+ closeDrawer=()=>{
60
+ this.setState({
61
+ showDraw:false
62
+ })
63
+ }
64
+
65
+ renderQuickBar = (quickBars: QuickBar[]) => {
66
+
67
+ let total:number=0;
68
+
69
+ const menu = (
70
+ <Menu key={1}>
71
+ { quickBars.map((quickBar, index) => {
72
+ if(quickBar.count){
73
+ total=total+quickBar.count;
74
+ }
75
+ return <Menu.Item key={index} >
76
+ <span onClick={()=>this.showDraw(quickBar.l2Menu.id)}>
77
+ {quickBar.l2Menu.title}
78
+ </span>
79
+
80
+ </Menu.Item>
81
+ })}
82
+ </Menu>
83
+ );
84
+
85
+ if(!quickBars || quickBars.length==0){
86
+ return;
87
+ }else if(quickBars.length==1){
88
+ let quickBar=quickBars[0];
89
+ const l2Menu = quickBar.l2Menu;
90
+ return (<div className={'message-bar'} onClick={()=>this.showDraw(quickBar.l2Menu.id)}>
91
+ <span style={{ fontSize: '20px', color: '#08c' }} ><AppstoreOutlined /></span>
92
+ </div>)
93
+ }else{
94
+ return <Dropdown overlay={menu} placement="bottomCenter" >
95
+ <div className={'message-bar'} >
96
+ <span style={{ fontSize: '20px', color: '#08c' }} ><AppstoreOutlined /></span>
97
+ </div>
98
+ </Dropdown>
99
+ }
100
+ }
101
+
102
+
103
+ render() {
104
+ const {quickBars,showDraw,currentId} = this.state;
105
+ return (
106
+ <>
107
+ {quickBars?this.renderQuickBar(quickBars):""}
108
+ <Drawer
109
+ placement={'left'}
110
+ title="快捷查询"
111
+ closable={true}
112
+ mask={false}
113
+ onClose={this.closeDrawer}
114
+ visible={showDraw}
115
+ width={'calc(100% - 280px)'}
116
+ style={{
117
+ maxWidth: 1960,
118
+ }}
119
+ extra={
120
+ <Space>
121
+ <Button onClick={this.closeDrawer}>关闭</Button>
122
+ </Space>
123
+ }
124
+ >
125
+ <LtmplPage sourceId={currentId}></LtmplPage>
126
+ </Drawer>
127
+ </>
128
+ );
129
+ }
130
+ }
131
+
132
+ export default L2MenuQuickBar;
@@ -0,0 +1,92 @@
1
+ import React from "react";
2
+ import {Menu} from 'antd';
3
+ import {BlockMenu} from "../../tmpl/interface";
4
+ import MenuRender from './menu-render';
5
+ import {withRouter} from 'react-router-dom';
6
+
7
+
8
+ export interface Menu2layersProps {
9
+ blockMenu: BlockMenu;
10
+ collapsed?: boolean;
11
+ currentL2MenuId?: string;
12
+ }
13
+
14
+ interface Menu2layersState {
15
+ openKeys: string[];
16
+ }
17
+
18
+ class Menu2layers extends React.PureComponent<Menu2layersProps, Menu2layersState> {
19
+
20
+
21
+ constructor(props) {
22
+ super(props);
23
+ this.state = {
24
+ openKeys: [],
25
+ }
26
+ }
27
+
28
+ // componentDidMount() {
29
+ //
30
+ // }
31
+ componentDidUpdate(prevProps) {
32
+ const {currentL2MenuId, blockMenu,collapsed} = this.props;
33
+ let {currentL2MenuId:preMenuId}=prevProps;
34
+ const {openKeys} = this.state;
35
+ // if(collapsed){
36
+ // if(openKeys.length>0){
37
+ // this.setState({
38
+ // openKeys:[]
39
+ // })
40
+ // }
41
+ // }else{
42
+
43
+ let openKey = blockMenu?MenuRender.findOpenId(blockMenu.l1Menus, currentL2MenuId):undefined;
44
+ if(openKey && openKeys.length<1){
45
+ this.setState({
46
+ openKeys:[openKey.toString()]
47
+ })
48
+ }else if(preMenuId!=currentL2MenuId){
49
+ console.log('currentL2MenuId:',currentL2MenuId);
50
+ if (openKey) {
51
+ if(openKeys.length==1){
52
+ openKeys.push(openKey.toString())
53
+ if (openKeys && openKeys.length > 1) {
54
+ openKeys.splice(0, 1);
55
+ }
56
+ }
57
+ this.setState({
58
+ openKeys,
59
+ })
60
+ }
61
+ }
62
+ //}
63
+ }
64
+
65
+ handleOpen = (openKeys) => {
66
+ if (openKeys && openKeys.length > 1) {
67
+ openKeys.splice(0, 1);
68
+ }
69
+ this.setState({
70
+ openKeys
71
+ })
72
+ }
73
+
74
+ render() {
75
+ const {blockMenu, collapsed, currentL2MenuId} = this.props;
76
+ const {openKeys} = this.state;
77
+
78
+ return (
79
+ <Menu
80
+ mode="inline"
81
+ theme="dark"
82
+ onOpenChange={this.handleOpen} //手风琴
83
+ selectedKeys={currentL2MenuId ? [currentL2MenuId.toString()] : undefined}
84
+ openKeys={!collapsed?openKeys:undefined}
85
+ >
86
+ {blockMenu ? MenuRender.renderL1Menu(blockMenu.l1Menus, undefined) : ""}
87
+ </Menu>
88
+ );
89
+ }
90
+ }
91
+
92
+ export default withRouter(Menu2layers);
@@ -0,0 +1,49 @@
1
+ import {Level1Menu, Level2Menu} from "../../tmpl/interface";
2
+ import {Menu} from "antd";
3
+ import React from "react";
4
+ import {NavLink} from 'react-router-dom';
5
+ import Units from "../../units";
6
+ const {SubMenu} = Menu;
7
+
8
+ export default {
9
+ renderL1Menu(menus:Level1Menu[],target){
10
+ return menus.map((item) => {
11
+ if (item.l2Menus) {
12
+ return <SubMenu title={item.title} key={item.id}>
13
+ {this.renderL2Menu(item.l2Menus,target)}
14
+ </SubMenu>
15
+ }
16
+ })
17
+ },
18
+ renderL2Menu(menus:Level2Menu[],target){
19
+ return menus.map((item) => {
20
+ let delimiter="/";
21
+ let customPath=item.customPath;
22
+ if(customPath){
23
+ if(customPath.startsWith('/') || customPath.startsWith('\\')){
24
+ delimiter="";
25
+ }
26
+ }
27
+ let defaultCriteriaData="";
28
+ if(item.defaultCriteriaValue){
29
+ defaultCriteriaData='&'+ Units.transQueryParamsToStr(item.defaultCriteriaValue);
30
+ }
31
+
32
+ return <Menu.Item key={item.id}>
33
+ <NavLink to={customPath ? `/page-${item.id}${delimiter}${customPath}?menuId=${item.id}` :`/${item.id}/act-table?menuId=${item.id}${defaultCriteriaData}`} target={target} >{item.title}</NavLink>
34
+ </Menu.Item>
35
+ })
36
+ },
37
+ findOpenId(l1Menus:Level1Menu[],currentL2MenuId:string){
38
+ let openL2MenuId:string=undefined;
39
+ for(const menul1 of l1Menus){
40
+ for(const menul2 of menul1.l2Menus){
41
+ if(menul2.id==currentL2MenuId){
42
+ openL2MenuId=menul1.id;
43
+ return openL2MenuId;
44
+ }
45
+ }
46
+ }
47
+ return openL2MenuId;
48
+ }
49
+ }
@@ -0,0 +1,185 @@
1
+ import React from 'react'
2
+ import {
3
+ Dropdown,
4
+ Menu,
5
+ Modal,
6
+ message,
7
+ Popconfirm,
8
+ Avatar,
9
+ Badge,
10
+ Tooltip,
11
+ Button,
12
+ Popover,
13
+ Col,
14
+ Form,
15
+ Input, Row, Space, FormInstance
16
+ } from 'antd';
17
+ import {KeyOutlined,LockOutlined,ClearOutlined} from '@ant-design/icons';
18
+ import 'antd/dist/antd.css';
19
+ import HCserviceV3 from "../../tmpl/hcservice-v3";
20
+
21
+ interface ResetPasswordProps {
22
+
23
+ }
24
+
25
+
26
+ interface ResetPasswordState {
27
+ showPopover:boolean,
28
+ pubkey:string,
29
+ loading:boolean
30
+ }
31
+
32
+
33
+ class ResetPassword extends React.PureComponent<ResetPasswordProps, ResetPasswordState> {
34
+ state={
35
+ showPopover:false,
36
+ pubkey:undefined,
37
+ loading:false,
38
+ }
39
+ formRef = React.createRef<FormInstance>();
40
+
41
+ async componentDidMount() {
42
+ let pubkey = await HCserviceV3.getRasPubkey();
43
+ this.setState({
44
+ pubkey
45
+ })
46
+ }
47
+
48
+
49
+
50
+ handleSubmit = async (values) => {
51
+
52
+ this.setState({
53
+ loading: true
54
+ })
55
+ let {pubkey}=this.state
56
+
57
+
58
+ let res = await HCserviceV3.resetPassword(values.oldPassword, values.newPassword,pubkey);
59
+ if(res.status == 'success') {
60
+ message.info("密码已重置,请重新登录")
61
+ HCserviceV3.logout();
62
+ }
63
+
64
+ this.setState({
65
+ loading: false
66
+ })
67
+ }
68
+
69
+ handleBlurCapture=()=>{
70
+ //判断新密码和确认密码相同
71
+ console.log("this.formRef.current.getFieldValue('newPassword')",this.formRef.current.getFieldValue('newPassword')) ;
72
+ let newPassword= this.formRef.current.getFieldValue('newPassword');
73
+ let reNewPassword= this.formRef.current.getFieldValue('reNewPassword');
74
+ if(newPassword && reNewPassword && newPassword!=reNewPassword){
75
+ this.formRef.current.setFields([{
76
+ name:'reNewPassword',
77
+ value:reNewPassword,
78
+ errors:['两次密码输入不一致!']
79
+ }]);
80
+ }else{
81
+ this.formRef.current.setFields([{
82
+ name:'reNewPassword',
83
+ value:reNewPassword,
84
+ errors:[]
85
+ }]);
86
+ }
87
+ }
88
+
89
+ getForm=()=>{
90
+ const {loading} = this.state;
91
+ return <Row justify="center" align="middle">
92
+ <Col>
93
+ <Form style={{width: 350}} ref={this.formRef}
94
+ name="normal_login"
95
+ className="login-form"
96
+ onFinish={this.handleSubmit}
97
+ >
98
+ <Form.Item
99
+ label={"原密码"}
100
+ name="oldPassword"
101
+ rules={[{required: true, message: '请输入原密码!'}]}
102
+ >
103
+ <Input.Password
104
+ placeholder="密码"
105
+ prefix={<LockOutlined className="site-form-item-icon"/>}
106
+ />
107
+ </Form.Item>
108
+ <Form.Item
109
+ label={"新设密码"}
110
+ name="newPassword"
111
+ rules={[{required: true, message: '请输入新密码!'}]}
112
+ >
113
+ <Input.Password
114
+ placeholder="新设密码"
115
+ onBlurCapture={this.handleBlurCapture}
116
+ prefix={<LockOutlined className="site-form-item-icon"/>}
117
+ />
118
+ </Form.Item>
119
+ <Form.Item
120
+ label={"确认密码"}
121
+ name="reNewPassword"
122
+ rules={[{required: true, message: '请输入确认密码!'},
123
+ ({ getFieldValue }) => ({
124
+ validator(_, value) {
125
+ if (!value || getFieldValue('newPassword') === value) {
126
+ return Promise.resolve();
127
+ }
128
+ return Promise.reject(new Error('两次密码输入不一致!'));
129
+ },
130
+ }),]}
131
+ >
132
+ <Input.Password
133
+ placeholder="确认密码"
134
+ //onBlurCapture={this.handleBlurCapture}
135
+ prefix={<LockOutlined className="site-form-item-icon"/>}
136
+ />
137
+ </Form.Item>
138
+
139
+ <Form.Item>
140
+ <Row align="middle" gutter={32} >
141
+ <Col span={12}>
142
+ {/*<Space style={{alignContent:"right"}} key={3} size={[8, 16]}>*/}
143
+ {/* <Button type="primary">确定</Button>*/}
144
+ {/* <Button >取消</Button>*/}
145
+ {/*</Space>*/}
146
+ <Button style={{width: '100%'}} type="primary" loading={loading} onClick={()=>this.formRef.current.submit()}>确定</Button>
147
+ </Col>
148
+ <Col span={12}>
149
+ <Button style={{width: '100%'}} onClick={()=>{
150
+ this.setState({
151
+ showPopover:false
152
+ })
153
+ }} >取消</Button>
154
+ </Col>
155
+ </Row>
156
+
157
+ </Form.Item>
158
+ </Form>
159
+ </Col>
160
+ </Row>
161
+
162
+ }
163
+
164
+
165
+
166
+ render() {
167
+ const {showPopover,loading} = this.state;
168
+ return (
169
+ <>
170
+ <Popover destroyTooltipOnHide={true} visible={showPopover} overlayStyle={{maxWidth: '400px'}} title={'修改密码'} placement="leftBottom" trigger="click"
171
+ content={this.getForm()}
172
+ ><Button type={"text"} size={'small'} onClick={()=>{
173
+ this.setState({
174
+ showPopover:!showPopover
175
+ })
176
+ }} >
177
+ <KeyOutlined />修改密码
178
+ </Button>
179
+ </Popover>
180
+ </>
181
+ );
182
+ }
183
+ }
184
+
185
+ export default ResetPassword;
@@ -0,0 +1,97 @@
1
+ import React from 'react'
2
+ import {Dropdown, Menu, Modal, message, Popconfirm, Avatar, Badge,Tooltip} from 'antd';
3
+ import {UserOutlined,LogoutOutlined,ClearOutlined,KeyOutlined,SolutionOutlined} from '@ant-design/icons';
4
+ import 'antd/dist/antd.css';
5
+ import {Level2Menu,UserInfo} from "../../tmpl/interface";
6
+ import HcserviceV3 from '../../tmpl/hcservice-v3';
7
+ import HCDataSource from "../../tmpl/hc-data-source";
8
+ import UserInfoBar from "./userinfo-bar"
9
+ import ResetPassword from "./reset-password";
10
+ const confirm = Modal.confirm;
11
+
12
+ interface UserBarProps {
13
+
14
+ }
15
+
16
+
17
+ interface UserBarState extends UserInfo{
18
+
19
+ }
20
+
21
+
22
+ class UserBar extends React.PureComponent<UserBarProps, UserBarState> {
23
+ state={
24
+ id:undefined,
25
+ name:undefined,
26
+ roles:[],
27
+ }
28
+
29
+ async componentDidMount() {
30
+ let userInfo = await HcserviceV3.getUser();
31
+ this.setState({
32
+ ...userInfo
33
+ });
34
+ }
35
+
36
+ cleanCache=()=>{
37
+ let {roles}=this.state;
38
+ HCDataSource.clear(roles);
39
+ }
40
+
41
+
42
+ render() {
43
+ const {name} = this.state;
44
+
45
+ const menu = (
46
+ <Menu>
47
+ {/*<Menu.Item>*/}
48
+ {/* <span onClick={() => this.userDetail("detail")}><UserOutlined/>用户详情</span>*/}
49
+ {/*</Menu.Item>*/}
50
+ {/*<Menu.Item>*/}
51
+ {/* <span onClick={() => this.userDetail("edit")}><FormOutlined/>用户修改</span>*/}
52
+ {/*</Menu.Item>*/}
53
+
54
+ <Menu.Item>
55
+ <UserInfoBar />
56
+ </Menu.Item>
57
+ <Menu.Item>
58
+ <ResetPassword></ResetPassword>
59
+ </Menu.Item>
60
+ <Menu.Item>
61
+ {/*<Popconfirm*/}
62
+ {/* placement="rightBottom"*/}
63
+ {/* title={'确定要清除缓存吗'}*/}
64
+ {/* onConfirm={()=>{*/}
65
+ {/* HCDataSource.clear();*/}
66
+ {/* message.success("清除成功");*/}
67
+ {/* }}*/}
68
+ {/* okText="Yes"*/}
69
+ {/* cancelText="No"*/}
70
+ {/*>*/}
71
+ {/* <span ><ClearOutlined />清空缓存</span>*/}
72
+ {/*</Popconfirm>*/}
73
+ <span onClick={this.cleanCache}><ClearOutlined />清空缓存</span>
74
+ <Menu.Item>
75
+ <span onClick={HcserviceV3.logout}><LogoutOutlined/>退出登录</span>
76
+ </Menu.Item>
77
+ </Menu.Item>
78
+ </Menu>
79
+ );
80
+ return (
81
+ <>
82
+ <Dropdown overlay={menu} placement="bottomCenter" trigger={['click']}>
83
+ <div className="userLogin">
84
+ {/*<Tooltip placement={'right'} title={name} >*/}
85
+ {/*<Avatar style={{ color:'#1890ff' }} shape="square" icon={<UserOutlined/>} size={{ xs: 8, sm: 16, md: 24, lg: 32, xl: 40, xxl: 48 }}>*/}
86
+ {/*</Avatar>*/}
87
+ {/*</Tooltip>*/}
88
+ <UserOutlined/>
89
+ <span>{name}</span>
90
+ </div>
91
+ </Dropdown>
92
+ </>
93
+ );
94
+ }
95
+ }
96
+
97
+ export default UserBar;
@@ -0,0 +1,70 @@
1
+ import React from 'react'
2
+ import {Badge, Avatar, Dropdown, Menu, Timeline, Drawer, Space,Button} from 'antd'
3
+ import {MessageTwoTone,AppstoreOutlined} from '@ant-design/icons';
4
+ import 'antd/dist/antd.css';
5
+ import {Level2Menu} from "../../tmpl/interface";
6
+ // import HcserviceV3 from '../../tmpl/hcservice-v3'
7
+ import HCDataSource from './../../tmpl/hc-data-source'
8
+ import {UserOutlined,LogoutOutlined,ClearOutlined,KeyOutlined,SolutionOutlined} from '@ant-design/icons';
9
+ import DtmplPage from "./../../module/dtmpl-page";
10
+ import HcserviceV3 from "../../tmpl/hcservice-v3";
11
+
12
+ interface UserInfoBarProps {
13
+
14
+ }
15
+
16
+ interface UserInfoBarState {
17
+ showDraw:boolean;
18
+ }
19
+
20
+
21
+ class UserInfoBar extends React.PureComponent<UserInfoBarProps, UserInfoBarState> {
22
+ state={
23
+ showDraw:false,
24
+ }
25
+
26
+ async componentDidMount() {
27
+
28
+ }
29
+ showDraw=()=>{
30
+ this.setState({
31
+ showDraw:true
32
+ })
33
+ }
34
+
35
+ closeDrawer=()=>{
36
+ this.setState({
37
+ showDraw:false
38
+ })
39
+ }
40
+
41
+ render() {
42
+ const {showDraw} = this.state;
43
+ return (
44
+ <>
45
+ <span onClick={this.showDraw}><SolutionOutlined />个人信息</span>
46
+ <Drawer
47
+ placement={'left'}
48
+ title="个人信息"
49
+ closable={true}
50
+ mask={false}
51
+ onClose={this.closeDrawer}
52
+ visible={showDraw}
53
+ width={'calc(100% - 280px)'}
54
+ style={{
55
+ maxWidth: 1960,
56
+ }}
57
+ extra={
58
+ <Space>
59
+ <Button onClick={this.closeDrawer}>关闭</Button>
60
+ </Space>
61
+ }
62
+ >
63
+ <DtmplPage sourceId={'0'} code={"userCode"}></DtmplPage>
64
+ </Drawer>
65
+ </>
66
+ );
67
+ }
68
+ }
69
+
70
+ export default UserInfoBar;
@@ -0,0 +1,26 @@
1
+ .logo{
2
+ line-height: 38px;
3
+ height: 42px;
4
+ margin: 16px;
5
+ background: rgba(255, 255, 255, 0.3);
6
+ }
7
+ .logo h1{
8
+ font-size: 20px;
9
+ color:#fff;
10
+ display: inline-block;
11
+ text-align: center;
12
+ vertical-align: middle;
13
+ width:100%;
14
+ margin:0;
15
+ }
16
+ .logonly{
17
+ border-radius: 4px;
18
+ line-height: 38px;
19
+ height: 42px;
20
+ margin: 16px;
21
+ background: rgba(255, 255, 255, 0.8);
22
+ }
23
+ .ant-menu-inline-collapsed{
24
+ width: 50px!important;
25
+ }
26
+
@@ -0,0 +1,38 @@
1
+ import React from 'react'
2
+ import './index.css'
3
+ import Units from '../../units';
4
+ import Menu2layers, {Menu2layersProps} from "../menu/menu-2layers";
5
+ import Scrollbars from 'react-custom-scrollbars';
6
+ import {Image, Layout} from 'antd';
7
+ import logo from '../../../../public/logo.png';
8
+ interface NavLeftProps extends Menu2layersProps {
9
+
10
+ }
11
+
12
+ interface NavLeftState {
13
+
14
+ }
15
+
16
+ class NavLeft extends React.PureComponent<NavLeftProps, NavLeftState> {
17
+
18
+ render() {
19
+ let {collapsed}=this.props
20
+ return (
21
+ <div>
22
+ <Scrollbars style={{height: 'calc(100vh)'}} autoHide autoHideTimeout={1000}>
23
+ <div className={collapsed?"logonly" :"logo"}>
24
+ <a href="#/home">
25
+ {collapsed?<Image
26
+ src={logo}
27
+ /> :<h1>{Units.programName_NavLeft()}</h1>}
28
+ </a>
29
+ </div>
30
+ <Menu2layers {...this.props}></Menu2layers>
31
+ </Scrollbars>
32
+ </div>
33
+
34
+ )
35
+ }
36
+ }
37
+
38
+ export default NavLeft