Your Name 2 years ago
parent
commit
d2bce5c772

+ 1
- 0
src/app.config.js View File

@@ -8,6 +8,7 @@ export default defineAppConfig({
8 8
     'pages/issue/edit/index',
9 9
     'pages/org/issue/list/index',
10 10
     'pages/org/issue/detail/index',
11
+    'pages/apply/list/index',
11 12
     'pages/apply/apply/index',
12 13
     'pages/apply/verify/index',
13 14
     'pages/index3/index',

BIN
src/assets/icons/avatar.png View File


BIN
src/assets/icons/icon1.png View File


BIN
src/assets/icons/icon10.png View File


BIN
src/assets/icons/icon11.png View File


BIN
src/assets/icons/icon2.png View File


BIN
src/assets/icons/icon3.png View File


BIN
src/assets/icons/icon4.png View File


BIN
src/assets/icons/icon5.png View File


BIN
src/assets/icons/icon6.png View File


BIN
src/assets/icons/icon7.png View File


BIN
src/assets/icons/icon8.png View File


BIN
src/assets/icons/icon9.png View File


+ 36
- 0
src/components/Icon.jsx View File

@@ -0,0 +1,36 @@
1
+import React from 'react';
2
+import Taro from '@tarojs/taro';
3
+import { Image } from '@tarojs/components';
4
+import icon1 from '@/assets/icons/icon1.png';
5
+import icon2 from '@/assets/icons/icon2.png';
6
+import icon3 from '@/assets/icons/icon3.png';
7
+import icon4 from '@/assets/icons/icon4.png';
8
+import icon5 from '@/assets/icons/icon5.png';
9
+import icon6 from '@/assets/icons/icon6.png';
10
+import icon7 from '@/assets/icons/icon7.png';
11
+import icon8 from '@/assets/icons/icon8.png';
12
+import icon9 from '@/assets/icons/icon9.png';
13
+import icon10 from '@/assets/icons/icon10.png';
14
+import icon11 from '@/assets/icons/icon11.png';
15
+
16
+const icons = {
17
+  icon1,
18
+  icon2,
19
+  icon3,
20
+  icon4,
21
+  icon5,
22
+  icon6,
23
+  icon7,
24
+  icon8,
25
+  icon9,
26
+  icon10,
27
+  icon11,
28
+}
29
+
30
+export default (props) => {
31
+  const { className, style, name } = props;
32
+  
33
+  return (
34
+    <Image src={icons[name]} className={className} style={style} />
35
+  )
36
+}

+ 48
- 0
src/components/MenuIcon.jsx View File

@@ -0,0 +1,48 @@
1
+import React from 'react';
2
+import Taro from '@tarojs/taro';
3
+import { View } from '@tarojs/components';
4
+import RatioView from './RatioView';
5
+import Icon from './Icon';
6
+
7
+const wrapperStyle = {
8
+  display: 'grid',
9
+  placeItems: 'center',
10
+  width: '100%',
11
+  height: '100%',
12
+}
13
+
14
+const iconStyle = {
15
+  width: '100rpx',
16
+  height: '100rpx',
17
+  margin: 'auto',
18
+  display: 'block',
19
+}
20
+
21
+const txtStyle = {
22
+  marginTop: '20rpx',
23
+  textAlign: 'center',
24
+  fontSize: '30rpx',
25
+  color: '#202020',
26
+}
27
+
28
+export default (props) => {
29
+  
30
+  const { icon, text, link } = props;
31
+
32
+  const onClick = () => {
33
+    Taro.navigateTo({
34
+      url: link
35
+    })
36
+  }
37
+
38
+  return (
39
+    <RatioView>
40
+      <View style={wrapperStyle} onClick={onClick}>
41
+        <View>
42
+          <Icon name={icon} style={iconStyle} />
43
+          <View style={txtStyle}>{text}</View>
44
+        </View>
45
+      </View>
46
+    </RatioView>
47
+  )
48
+}

+ 17
- 0
src/components/RatioView.jsx View File

@@ -0,0 +1,17 @@
1
+import React from 'react';
2
+import Taro from '@tarojs/taro';
3
+import { View } from '@tarojs/components';
4
+
5
+export default (props) => {
6
+  const { className, style, ratio = 100 } = props;
7
+  
8
+  return (
9
+    <View className={className} style={style}>
10
+      <View style={{ paddingBottom: `${ratio}%`, position: 'relative', overflow: 'hidden' }}>
11
+        <View style={{ width: '100%', height: '100%', position: 'absolute', left: 0, top: 0 }}>
12
+          {props.children}
13
+        </View>
14
+      </View>
15
+    </View>
16
+  )
17
+}

+ 3
- 1
src/layouts/layout.module.less View File

@@ -11,7 +11,9 @@
11 11
     height: 100%;
12 12
 
13 13
     &.with-tabbar {
14
-      height: calc(100% - var(--tabbar-height, 100rpx));
14
+      overflow-y: scroll;
15
+      // height: calc(100% - var(--tabbar-height, 100rpx));
16
+      padding-bottom: var(--tabbar-height, 100rpx);
15 17
     }
16 18
 
17 19
     .pdm-space {

+ 4
- 0
src/pages/apply/list/index.config.js View File

@@ -0,0 +1,4 @@
1
+// eslint-disable-next-line no-undef
2
+export default definePageConfig({
3
+  navigationBarTitleText: '申请列表'
4
+})

+ 72
- 0
src/pages/apply/list/index.jsx View File

@@ -0,0 +1,72 @@
1
+import React from 'react';
2
+import Taro from '@tarojs/taro';
3
+import { View } from '@tarojs/components';
4
+import { Tab, Tabs } from '@antmjs/vantui';
5
+import Page from '@/layouts/index';
6
+import PowerList from '@/components/PowerList';
7
+import Card from '@/components/IssueCard';
8
+import { getTaIssueApply } from '@/services/taissueapply';
9
+import { ROLE_MANAGER } from '@/utils/user';
10
+import { useModel } from '@/store';
11
+import { getIssueStatus } from '@/utils/biz';
12
+
13
+export default (props) => {
14
+
15
+  const router = Taro.useRouter();
16
+  const { title, applyType = '' } = router.params;
17
+
18
+  React.useMemo(() => {
19
+    if (title) {
20
+      Taro.setNavigationBarTitle({ title });
21
+    } else {
22
+      Taro.setNavigationBarTitle({ title: '申请列表' });
23
+    }
24
+  }, [title]);
25
+
26
+  const { user } = useModel('user');
27
+
28
+  const onClick = (item) => {
29
+
30
+    let act = '';
31
+    const status = getIssueStatus(item);
32
+
33
+    // 如果是管理员
34
+    if (user.dutyList.indexOf(ROLE_MANAGER) > -1) {
35
+      // 如果是待交办
36
+      if (status.value === 0) {
37
+        act = 'assigned';
38
+      }
39
+    } else {
40
+      
41
+    }
42
+
43
+    Taro.navigateTo({
44
+      url: `/pages/issue/edit/index?id=${item.issueId}&act=${act}`
45
+    })
46
+  }
47
+  
48
+  return (
49
+    <Page>
50
+      <Tabs sticky>
51
+        <Tab title="监督员">
52
+          <PowerList
53
+            request={getTaIssueApply}
54
+            params={{applyType, sourceType: 'inspector'}}
55
+            renderItem={(item) => (
56
+              <Card key={item.issueId} detail={item} onClick={() => onClick(item)} />
57
+            )}
58
+          />
59
+        </Tab>
60
+        <Tab title="市民">
61
+          <PowerList
62
+            request={getTaIssueApply}
63
+            params={{applyType, sourceType: 'feedback'}}
64
+            renderItem={(item) => (
65
+              <Card key={item.issueId} detail={item} onClick={() => onClick(item)} />
66
+            )}
67
+          />
68
+        </Tab>
69
+      </Tabs>
70
+    </Page>
71
+  )
72
+}

+ 4
- 1
src/pages/home/components/Head.jsx View File

@@ -2,6 +2,7 @@ import React from 'react';
2 2
 import { View, Image } from '@tarojs/components';
3 3
 import { ROLES, ROLE_CITIZEN } from '@/utils/user';
4 4
 import logo from '@/assets/image/logo.png';
5
+import avatar from '@/assets/icons/avatar.png';
5 6
 import style from './head.module.less';
6 7
 
7 8
 export default (props) => {
@@ -14,7 +15,9 @@ export default (props) => {
14 15
       <View className={style.profile}>
15 16
         <View style={{ letterSpacing: '2px' }}>Hi, {user.name}!</View>
16 17
         <View className={style.badge}>
17
-          <View className={style.icon}></View>
18
+          <View className={style.icon}>
19
+            <Image src={avatar} />
20
+          </View>
18 21
           <View>{role}</View>
19 22
         </View>
20 23
       </View>

+ 7
- 15
src/pages/home/components/head.module.less View File

@@ -27,25 +27,17 @@
27 27
       text-align: center;
28 28
 
29 29
       .icon {
30
-        top: -12px;
31
-        left: -12px;
30
+        top: -8px;
31
+        left: -8px;
32 32
         position: absolute;
33
-        width: 56px;
34
-        height: 56px;
35
-        border: 8px solid rgba(251, 239, 121, 0.6);
33
+        width: 64px;
34
+        height: 64px;
36 35
         border-radius: 50%;
37 36
         box-sizing: content-box;
38 37
 
39
-        &::before {
40
-          content: '';
41
-          position: absolute;
42
-          top: 0;
43
-          left: 0;
44
-          width: 56px;
45
-          height: 56px;
46
-          background: linear-gradient(0, #E36A00, #FFA658);
47
-          border-radius: 50%;
48
-          overflow: hidden;
38
+        image {
39
+          width: 100%;
40
+          height: 100%;
49 41
         }
50 42
       }
51 43
     }

+ 38
- 3
src/pages/home/index.jsx View File

@@ -2,20 +2,55 @@ import React from 'react'
2 2
 import { View, Text, Image } from '@tarojs/components'
3 3
 import Page from '@/layouts/index';
4 4
 import { useModel } from '@/store';
5
+import MenuIcon from '@/components/MenuIcon';
6
+import { ROLE_INSPECTOR, ROLE_MANAGER } from '@/utils/user';
5 7
 import Head from './components/Head';
6 8
 import BannerCard from './components/BannerCard';
7
-import MenuCard from './components/MenuCard';
8 9
 import './index.less';
9 10
 
11
+const menus = {
12
+  [ROLE_INSPECTOR]: [
13
+    { icon: 'icon9', text: '我的上报', link: '/pages/issue/list/index' },
14
+    { icon: 'icon11', text: '消息通知', link: '' },
15
+    { icon: 'icon10', text: '模拟测评', link: '' },
16
+  ],
17
+
18
+  [ROLE_MANAGER]: [
19
+    { icon: 'icon9', text: '我的上报', link: '/pages/issue/list2/index?title=我的上报&mine=true' },
20
+    { icon: 'icon11', text: '消息通知', link: '' },
21
+    { icon: 'icon10', text: '模拟测评', link: '' },
22
+    { icon: 'icon1', text: '待 交 办', link: '/pages/issue/list2/index?title=待交办&bizStatus=start' },
23
+    { icon: 'icon2', text: '已 交 办', link: '/pages/issue/list2/index?title=已交办&bizStatus=assigned' },
24
+    { icon: 'icon3', text: '已 办 结', link: '/pages/issue/list2/index?title=已办结报&bizStatus=end' },
25
+    { icon: 'icon4', text: '消单申请', link: '/pages/apply/list/index?title=消单申请&applyType=end' },
26
+    { icon: 'icon5', text: '逾期警告', link: '/pages/issue/list2/index?title=逾期警告&bizStatus=expired' },
27
+    { icon: 'icon6', text: '延期申请', link: '/pages/apply/list/index?title=延期申请&applyType=delay' },
28
+    { icon: 'icon7', text: '统计查询', link: '' },
29
+  ]
30
+}
31
+
10 32
 export default (props) => {
11 33
 
12 34
   const { user } = useModel('user');
13 35
 
36
+  const menuArr = React.useMemo(() => {
37
+    if (!user || !user.dutyList) return [];
38
+
39
+    return menus[user.dutyList[0]];
40
+  }, [user])
41
+
14 42
   return (
15
-    <Page tabBar="home" className='index'>
43
+    <Page tabBar="home" className='home-page'>
16 44
       <Head user={user} />
17 45
       <BannerCard />
18
-      <MenuCard />
46
+      
47
+      <View className="menu-icons">
48
+        {
49
+          menuArr.map(x => (
50
+            <MenuIcon key={x.text} {...x} />
51
+          ))
52
+        }
53
+      </View>
19 54
     </Page>
20 55
   );
21 56
 }

+ 16
- 0
src/pages/home/index.less View File

@@ -0,0 +1,16 @@
1
+
2
+.home-page {
3
+  .menu-icons {
4
+    display: grid;
5
+    grid-template-columns: repeat(3, 1fr);
6
+    grid-column-gap: var(--main-space);
7
+    grid-row-gap: var(--main-space);
8
+    padding: var(--main-space);
9
+
10
+    & > view {
11
+      background: #FFFFFF;
12
+      box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.06);
13
+      border-radius: 8px;
14
+    }
15
+  }
16
+}

+ 0
- 1
src/pages/issue/list/index.jsx View File

@@ -15,7 +15,6 @@ export default (props) => {
15 15
   const { user } = useModel('user');
16 16
 
17 17
   const onClick = (item) => {
18
-
19 18
     let act = '';
20 19
     const status = getIssueStatus(item);
21 20
     

+ 3
- 3
src/pages/issue/list2/index.jsx View File

@@ -13,7 +13,7 @@ import { getIssueStatus } from '@/utils/biz';
13 13
 export default (props) => {
14 14
 
15 15
   const router = Taro.useRouter();
16
-  const { title } = router.params;
16
+  const { title, bizStatus = '', mine = '' } = router.params;
17 17
 
18 18
   React.useMemo(() => {
19 19
     if (title) {
@@ -51,7 +51,7 @@ export default (props) => {
51 51
         <Tab title="监督员">
52 52
           <PowerList
53 53
             request={getTaIssue}
54
-            params={{mine: true}}
54
+            params={{bizStatus, mine, sourceType: 'inspector'}}
55 55
             renderItem={(item) => (
56 56
               <Card key={item.issueId} detail={item} onClick={() => onClick(item)} />
57 57
             )}
@@ -60,7 +60,7 @@ export default (props) => {
60 60
         <Tab title="市民">
61 61
           <PowerList
62 62
             request={getTaIssue}
63
-            params={{bizStatus: 'start', mine: true}}
63
+            params={{bizStatus, mine, sourceType: 'feedback'}}
64 64
             renderItem={(item) => (
65 65
               <Card key={item.issueId} detail={item} onClick={() => onClick(item)} />
66 66
             )}