Yansen 2 år sedan
förälder
incheckning
52e5f4449b

+ 1
- 1
public/config.js Visa fil

3
 DH_MONITOR = 'http://192.168.3.2';
3
 DH_MONITOR = 'http://192.168.3.2';
4
 
4
 
5
 // 海康监控
5
 // 海康监控
6
-HK_MONITOR = 'http://192.168.3.2';
6
+HK_MONITOR = 'http://192.168.3.3';

Binär
src/assets/avatar.png Visa fil


+ 2
- 0
src/layouts/AuthLayout/components/Header/Exit.jsx Visa fil

3
 import { LogoutOutlined } from '@ant-design/icons';
3
 import { LogoutOutlined } from '@ant-design/icons';
4
 import { Button, Modal } from 'antd';
4
 import { Button, Modal } from 'antd';
5
 import { useModel } from '@/store';
5
 import { useModel } from '@/store';
6
+import { logout } from '@/services/user';
6
 
7
 
7
 const { confirm } = Modal;
8
 const { confirm } = Modal;
8
 
9
 
15
     confirm({
16
     confirm({
16
       title: '确认退出系统?',
17
       title: '确认退出系统?',
17
       onOk: () => {
18
       onOk: () => {
19
+        logout();
18
         sessionStorage.removeItem('token');
20
         sessionStorage.removeItem('token');
19
         setUser();
21
         setUser();
20
         navigate('/login?back=true');
22
         navigate('/login?back=true');

+ 1
- 3
src/layouts/AuthLayout/components/Header/SplitMenu.jsx Visa fil

13
     }
13
     }
14
 
14
 
15
     return [homeIndex].concat(items);
15
     return [homeIndex].concat(items);
16
-    return items;
17
   }, [items]);
16
   }, [items]);
17
+  
18
   const selectedKeys = React.useMemo(() => `/${location.pathname.split('/')[1]}`, [location.pathname]);
18
   const selectedKeys = React.useMemo(() => `/${location.pathname.split('/')[1]}`, [location.pathname]);
19
 
19
 
20
-  console.log(menus, items)
21
-
22
   return (
20
   return (
23
     <Menu className='split-menu' mode="horizontal" items={menus} selectedKeys={selectedKeys} />
21
     <Menu className='split-menu' mode="horizontal" items={menus} selectedKeys={selectedKeys} />
24
   )
22
   )

+ 16
- 6
src/layouts/AuthLayout/components/Header/User.jsx Visa fil

1
 import React, { useState, forwardRef, useRef, useImperativeHandle } from 'react';
1
 import React, { useState, forwardRef, useRef, useImperativeHandle } from 'react';
2
-import { Avatar, Button, Dropdown, Menu, Form, Input, Modal } from 'antd';
3
-import { useModel } from '@/store'
2
+import { Avatar, Button, Dropdown, Menu, Form, Input, Modal, message } from 'antd';
3
+import avatarImg from '@/assets/avatar.png';
4
+import { changePassword } from '@/services/user'
5
+import md5 from 'md5';
4
 
6
 
5
 const ChangePassword = forwardRef((props, ref) => {
7
 const ChangePassword = forwardRef((props, ref) => {
6
   const [visible, setVisible] = useState(false);
8
   const [visible, setVisible] = useState(false);
7
 
9
 
8
   const onFinish = (values) => {
10
   const onFinish = (values) => {
9
-    console.log('Success:', values);
11
+    changePassword({
12
+      originPassword: md5(values.password),
13
+      newPassword: md5(values.newPassword)
14
+    }).then(() => setVisible(false));
10
   };
15
   };
11
 
16
 
12
   useImperativeHandle(ref, () => {
17
   useImperativeHandle(ref, () => {
16
   });
21
   });
17
 
22
 
18
   return (
23
   return (
19
-    <Modal title="修改密码" visible={visible} onCancel={() => setVisible(false)}>
24
+    <Modal
25
+      title="修改密码"
26
+      visible={visible}
27
+      onCancel={() => setVisible(false)}
28
+      footer={null}
29
+    >
20
       <Form
30
       <Form
21
         labelCol={{ span: 8 }}
31
         labelCol={{ span: 8 }}
22
         wrapperCol={{ span: 16 }}
32
         wrapperCol={{ span: 16 }}
66
   ];
76
   ];
67
 
77
 
68
   const passRef = useRef();
78
   const passRef = useRef();
69
-  const { user = {} } = useModel('user');
79
+  const { user = {} } = props;
70
 
80
 
71
   const onClick = ({ key }) => {
81
   const onClick = ({ key }) => {
72
     if (key === 'changePassword') {
82
     if (key === 'changePassword') {
79
   return (
89
   return (
80
     <Dropdown overlay={menu}>
90
     <Dropdown overlay={menu}>
81
       <div className="user-info">
91
       <div className="user-info">
82
-        <Avatar size={24} src="https://joeschmoe.io/api/v1/random" />
92
+        <Avatar size={24} src={avatarImg} style={{background: '#fff'}} />
83
         <span className='font'>{user.name}</span>
93
         <span className='font'>{user.name}</span>
84
         <ChangePassword ref={passRef} />
94
         <ChangePassword ref={passRef} />
85
       </div>
95
       </div>

+ 2
- 2
src/layouts/AuthLayout/components/Header/index.jsx Visa fil

10
 const { Header } = Layout;
10
 const { Header } = Layout;
11
 
11
 
12
 export default (props) => {
12
 export default (props) => {
13
-  const { menus, theme, location } = props;
13
+  const { menus, theme, location, user } = props;
14
 
14
 
15
   const className = useMemo(() => classNames({
15
   const className = useMemo(() => classNames({
16
     'layout-header': true,
16
     'layout-header': true,
22
       <Logo />
22
       <Logo />
23
       <SplitMenu items={menus} location={location} />
23
       <SplitMenu items={menus} location={location} />
24
       <Space>
24
       <Space>
25
-        <User />
25
+        <User user={user} />
26
         <Exit />
26
         <Exit />
27
       </Space>
27
       </Space>
28
     </Header>
28
     </Header>

+ 1
- 1
src/layouts/AuthLayout/index.jsx Visa fil

34
             ? <Outlet />
34
             ? <Outlet />
35
             : (
35
             : (
36
               <Layout style={{ height: '100vh' }}>
36
               <Layout style={{ height: '100vh' }}>
37
-                <Header theme={theme} menus={splitMenus} location={location} />
37
+                <Header user={user} theme={theme} menus={splitMenus} location={location} />
38
                 <Layout style={{ height: 'calc(100vh - var(--header-height))' }}>
38
                 <Layout style={{ height: 'calc(100vh - var(--header-height))' }}>
39
                   { !noSiderBar && <SiderBar theme={theme} menus={siderMenus} location={location} /> }
39
                   { !noSiderBar && <SiderBar theme={theme} menus={siderMenus} location={location} /> }
40
                   <Container location={location} noFooter={noFooter} />
40
                   <Container location={location} noFooter={noFooter} />

+ 12
- 1
src/pages/dish/edit/index.jsx Visa fil

1
 import { addDish, getDishById } from '@/services/dish';
1
 import { addDish, getDishById } from '@/services/dish';
2
 import { getStoreList } from '@/services/stock';
2
 import { getStoreList } from '@/services/stock';
3
-import { PageContainer, ProForm, ProFormSelect, ProFormText, ProFormMoney } from '@ant-design/pro-components';
3
+import { PageContainer, ProForm, ProFormSelect, ProFormText, ProFormMoney, ProFormDigit } from '@ant-design/pro-components';
4
 import { useNavigate, useSearchParams } from 'react-router-dom';
4
 import { useNavigate, useSearchParams } from 'react-router-dom';
5
 import { Card, Col, message, Row, Space } from 'antd';
5
 import { Card, Col, message, Row, Space } from 'antd';
6
 import { useEffect, useRef, useState } from 'react';
6
 import { useEffect, useRef, useState } from 'react';
98
             width={460}
98
             width={460}
99
             options={foodDict}
99
             options={foodDict}
100
           />
100
           />
101
+          <ProFormDigit
102
+            label="元素"
103
+            name="calorie"
104
+            min={0}
105
+            width={460}
106
+            placeholder="卡路里"
107
+            fieldProps={{
108
+              addonAfter: '卡',
109
+              precision: '4'
110
+            }}
111
+          />
101
         </ProForm>
112
         </ProForm>
102
       </Card>
113
       </Card>
103
     </PageContainer>
114
     </PageContainer>

+ 2
- 2
src/pages/guaranteeTask/Edit/BasicForm.jsx Visa fil

201
         <Col offset={6} span={12}>
201
         <Col offset={6} span={12}>
202
           <Button type="primary" htmlType="submit" loading={loading}>提交</Button>
202
           <Button type="primary" htmlType="submit" loading={loading}>提交</Button>
203
           <Button style={{ marginLeft: '48px' }} onClick={() => navigate(-1)}>返回</Button>
203
           <Button style={{ marginLeft: '48px' }} onClick={() => navigate(-1)}>返回</Button>
204
-          <Button style={{ marginLeft: '48px' }}>
205
-            <Link target="_blank" to={`/guaranteeTask/print?id=${id}`}>打印预览</Link>
204
+          <Button style={{ marginLeft: '48px' }} disabled={!id}>
205
+            <a target="_blank" href={`${window.location.pathname}#/task/guaranteeTask/print?id=${id}`}>打印预览</a>
206
           </Button>
206
           </Button>
207
         </Col>
207
         </Col>
208
       </Row>
208
       </Row>

+ 14
- 0
src/services/user.js Visa fil

16
   * @returns
16
   * @returns
17
   */
17
   */
18
   export const login = (data) => request('/login', { data, method: 'post' });
18
   export const login = (data) => request('/login', { data, method: 'post' });
19
+  
20
+ /**
21
+  * 登出
22
+  * @param {*} 
23
+  * @returns
24
+  */
25
+  export const logout = () => request.post('/logout', { silent: true });
26
+  
27
+ /**
28
+  * 修改密码
29
+  * @param {*} 
30
+  * @returns
31
+  */
32
+  export const changePassword = (data) => request.put('/change-password', data, { successTip: '密码修改成功' });
19
 
33
 
20
 
34
 
21
   const [
35
   const [

+ 1
- 1
src/utils/request.js Visa fil

42
       sessionStorage.setItem('token', data.data.token);
42
       sessionStorage.setItem('token', data.data.token);
43
     }
43
     }
44
 
44
 
45
-    if (config.successTip) {
45
+    if (config.successTip && !config.silent) {
46
       message.success(typeof success === 'string' ? successTip : '操作成功');
46
       message.success(typeof success === 'string' ? successTip : '操作成功');
47
     }
47
     }
48
 
48