Browse Source

Merge branch 'master' of http://code.qutaovip.com/lihai/fish_app

* 'master' of http://code.qutaovip.com/lihai/fish_app:
  个人中心模块
  会员模块
  产品详情&&会员页面
黎海 3 weeks ago
parent
commit
d842a7de8b
91 changed files with 3556 additions and 119 deletions
  1. 1 1
      project.config.json
  2. 35 1
      project.private.config.json
  3. 20 1
      src/app.config.js
  4. 6 1
      src/app.js
  5. 1 0
      src/app.less
  6. 57 0
      src/components/Modal/index.jsx
  7. 122 0
      src/components/Modal/index.less
  8. 22 0
      src/components/ProductCard/index.jsx
  9. 59 0
      src/components/ProductCard/index.less
  10. 15 3
      src/components/index/OperationArea/index.jsx
  11. 122 48
      src/components/index/ProductList/index.jsx
  12. 66 25
      src/components/index/ProductList/index.less
  13. BIN
      src/images/aliPayIcon.png
  14. BIN
      src/images/earningsOrder/tag.png
  15. BIN
      src/images/earningsOrder/vip.png
  16. BIN
      src/images/member/order.png
  17. BIN
      src/images/member/toDetail.png
  18. BIN
      src/images/member/vip.png
  19. BIN
      src/images/member/warning.png
  20. BIN
      src/images/member/withdrawable.png
  21. BIN
      src/images/mine/edit.png
  22. BIN
      src/images/mine/loginOut.png
  23. BIN
      src/images/mine/norm.png
  24. BIN
      src/images/productDetail/like.png
  25. BIN
      src/images/productDetail/productDetailIcon.png
  26. BIN
      src/images/productDetail/selectStep.png
  27. BIN
      src/images/productDetail/selfBuy.png
  28. BIN
      src/images/productDetail/share.png
  29. BIN
      src/images/productDetail/stepThree.png
  30. BIN
      src/images/productDetail/xianyu.png
  31. BIN
      src/images/productManagement/add.png
  32. BIN
      src/images/productManagement/back.png
  33. BIN
      src/images/productManagement/delete.png
  34. BIN
      src/images/productManagement/manger.png
  35. BIN
      src/images/productManagement/selectIcon.png
  36. BIN
      src/images/productManagement/toTop.png
  37. BIN
      src/images/seckill/seckillIcon.png
  38. BIN
      src/images/seckill/seckillTop.png
  39. BIN
      src/images/statementRecordsIcon.png
  40. BIN
      src/images/storeManagement/storeManagement.png
  41. BIN
      src/images/storeManagement/storeManagementIcon.png
  42. BIN
      src/images/wallet.png
  43. 3 0
      src/pages/Alipay/index.config.js
  44. 55 0
      src/pages/Alipay/index.jsx
  45. 62 0
      src/pages/Alipay/index.less
  46. 3 0
      src/pages/cashOut/index.config.js
  47. 54 0
      src/pages/cashOut/index.jsx
  48. 118 0
      src/pages/cashOut/index.less
  49. 3 0
      src/pages/cashOutRecord/index.config.js
  50. 45 0
      src/pages/cashOutRecord/index.jsx
  51. 84 0
      src/pages/cashOutRecord/index.less
  52. 3 0
      src/pages/earningsDetail/index.config.js
  53. 65 0
      src/pages/earningsDetail/index.jsx
  54. 61 0
      src/pages/earningsDetail/index.less
  55. 3 0
      src/pages/earningsOrder/index.config.js
  56. 159 0
      src/pages/earningsOrder/index.jsx
  57. 241 0
      src/pages/earningsOrder/index.less
  58. 2 11
      src/pages/index/index.jsx
  59. 1 0
      src/pages/index/index.less
  60. 3 0
      src/pages/infoEdit/index.config.js
  61. 76 0
      src/pages/infoEdit/index.jsx
  62. 53 0
      src/pages/infoEdit/index.less
  63. 103 14
      src/pages/member/index.jsx
  64. 318 0
      src/pages/member/index.less
  65. 1 1
      src/pages/mine/index.config.js
  66. 44 13
      src/pages/mine/index.jsx
  67. 73 0
      src/pages/mine/index.less
  68. 3 0
      src/pages/productClassify/index.config.js
  69. 46 0
      src/pages/productClassify/index.jsx
  70. 37 0
      src/pages/productClassify/index.less
  71. 3 0
      src/pages/productDetail/index.config.js
  72. 213 0
      src/pages/productDetail/index.jsx
  73. 249 0
      src/pages/productDetail/index.less
  74. 3 0
      src/pages/productManagement/index.config.js
  75. 143 0
      src/pages/productManagement/index.jsx
  76. 197 0
      src/pages/productManagement/index.less
  77. 3 0
      src/pages/productSub/infoEdit/index.config.js
  78. 25 0
      src/pages/productSub/infoEdit/index.jsx
  79. 4 0
      src/pages/productSub/infoEdit/index.less
  80. 3 0
      src/pages/seckillIndex/index.config.js
  81. 28 0
      src/pages/seckillIndex/index.jsx
  82. 11 0
      src/pages/seckillIndex/index.less
  83. 3 0
      src/pages/statementRecords/index.config.js
  84. 49 0
      src/pages/statementRecords/index.jsx
  85. 48 0
      src/pages/statementRecords/index.less
  86. 3 0
      src/pages/storeManagement/index.config.js
  87. 115 0
      src/pages/storeManagement/index.jsx
  88. 184 0
      src/pages/storeManagement/index.less
  89. 3 0
      src/pages/userSpecification/index.config.js
  90. 24 0
      src/pages/userSpecification/index.jsx
  91. 0 0
      src/pages/userSpecification/index.less

+ 1 - 1
project.config.json

@@ -7,7 +7,7 @@
7 7
     "urlCheck": true,
8 8
     "es6": false,
9 9
     "postcss": false,
10
-    "minified": false,
10
+    "minified": true,
11 11
     "babelSetting": {
12 12
       "ignore": [],
13 13
       "disablePlugins": [],

+ 35 - 1
project.private.config.json

@@ -4,5 +4,39 @@
4 4
   "setting": {
5 5
     "compileHotReLoad": true
6 6
   },
7
-  "libVersion": "3.6.4"
7
+  "libVersion": "3.6.4",
8
+  "condition": {
9
+    "miniprogram": {
10
+      "list": [
11
+        {
12
+          "name": "pages/infoEdit/index",
13
+          "pathName": "pages/productSub/infoEdit/index",
14
+          "query": "",
15
+          "launchMode": "default",
16
+          "scene": null
17
+        },
18
+        {
19
+          "name": "pages/productManagement/index",
20
+          "pathName": "pages/productManagement/index",
21
+          "query": "",
22
+          "launchMode": "default",
23
+          "scene": null
24
+        },
25
+        {
26
+          "name": "pages/storeManagement/index",
27
+          "pathName": "pages/storeManagement/index",
28
+          "query": "isManager=true",
29
+          "launchMode": "default",
30
+          "scene": null
31
+        },
32
+        {
33
+          "name": "pages/productManagement/index",
34
+          "pathName": "pages/mine/index",
35
+          "query": "",
36
+          "launchMode": "default",
37
+          "scene": null
38
+        }
39
+      ]
40
+    }
41
+  }
8 42
 }

+ 20 - 1
src/app.config.js

@@ -1,12 +1,31 @@
1 1
 
2
-import Taro from '@tarojs/taro'
3 2
 export default defineAppConfig({
4 3
   pages: [
5 4
     'pages/index/index',
6 5
     'pages/member/index',
7 6
     "pages/mine/index",
7
+    "pages/seckillIndex/index",
8
+    "pages/productDetail/index",
9
+    "pages/storeManagement/index",
10
+    "pages/productManagement/index",
11
+    "pages/productClassify/index",
12
+    "pages/earningsDetail/index",
13
+    "pages/earningsOrder/index",
14
+    "pages/infoEdit/index",
15
+    "pages/userSpecification/index",
16
+    "pages/cashOut/index",
17
+    "pages/cashOutRecord/index",
18
+    "pages/statementRecords/index",
19
+    "pages/Alipay/index"
8 20
   ],
9 21
   subpackages: [
22
+    {
23
+      "root": "pages/productSub",
24
+      "pages": [
25
+        "infoEdit/index"
26
+      ],
27
+      independent: true
28
+    },
10 29
   ],
11 30
   navigateToMiniProgramAppIdList: [
12 31
     "ttf31985a46c214faf"

+ 6 - 1
src/app.js

@@ -1,10 +1,15 @@
1 1
 import { Component } from 'react'
2
+import Taro from '@tarojs/taro'
2 3
 import './app.less'
3 4
 import 'taro-ui/dist/style/index.scss'
4 5
 
5 6
 class App extends Component {
6 7
 
7
-  componentDidMount () {}
8
+  componentDidMount () {
9
+    // 存储导航栏高度
10
+    const systemInfo = Taro.getSystemInfoSync()
11
+    Taro.navigationBarHeight = systemInfo.safeArea.top
12
+  }
8 13
 
9 14
   componentDidShow () {}
10 15
 

+ 1 - 0
src/app.less

@@ -1,3 +1,4 @@
1 1
 body {
2 2
   background-color: #F9F9F9;
3
+  min-height: 100vh;
3 4
 }

+ 57 - 0
src/components/Modal/index.jsx

@@ -0,0 +1,57 @@
1
+import { AtModal, AtModalContent } from "taro-ui";
2
+import { View, Image, Text } from "@tarojs/components";
3
+import "./index.less";
4
+import selectStep from "../../images/productDetail/selectStep.png";
5
+import xianyu from "../../images/productDetail/xianyu.png";
6
+import stepThree from "../../images/productDetail/stepThree.png";
7
+export default function Modal(props) {
8
+  return (
9
+    <AtModal isOpened={props.isOpened} closeOnClickOverlay={true}>
10
+      <AtModalContent>
11
+        <View className="container">
12
+          <View className="title">{props.title}</View>
13
+          <View className="content">
14
+            <View className="link-text">{props.linkText}</View>
15
+            <View className="steps">
16
+              <View className="step-item">
17
+                <View className="step-title">
18
+                  <Text className="number">1</Text>
19
+                  <Text className="desc">第一步说明文字</Text>
20
+                </View>
21
+                <View className="step-box">
22
+                    <View className="step-One">
23
+                        复制口令
24
+                    </View>
25
+                  <Image  className="step-img-one" src={selectStep} />
26
+                </View>
27
+              </View>
28
+              <View className="step-item">
29
+                <View className="step-title">
30
+                  <Text className="number">2</Text>
31
+                  <Text className="desc">第二步说明文字</Text>
32
+                </View>
33
+                <View className="step-box">
34
+                  <Image className="step-img-t" src={xianyu} />
35
+                  <Image className="step-img-two" src={selectStep} />
36
+                </View>
37
+              </View>
38
+              <View className="step-item">
39
+                <View className="step-title">
40
+                  <Text className="number">3</Text>
41
+                  <Text className="desc">第三步说明文字</Text>
42
+                </View>
43
+                <View className="step-box">
44
+                  <Image mode="heightFix" className="step-img-three" src={stepThree} />
45
+                </View>
46
+              </View>
47
+            </View>
48
+            {/* 复制口令 */}
49
+            <View className="copy-link">
50
+                复制口令
51
+            </View>
52
+          </View>
53
+        </View>
54
+      </AtModalContent>
55
+    </AtModal>
56
+  );
57
+}

+ 122 - 0
src/components/Modal/index.less

@@ -0,0 +1,122 @@
1
+  .at-modal__container {
2
+    width: 610px !important;
3
+  }
4
+  .at-modal__content {
5
+    max-height: none !important;  // 移除最大高度限制
6
+    min-height: auto !important;  // 移除最小高度限制
7
+    height: auto !important;      // 高度自适应
8
+  }
9
+.container{
10
+    display: flex;
11
+    flex-direction: column;
12
+    align-items: center;
13
+    justify-content: center;
14
+    .title{
15
+        color: #000000;
16
+        font-size: 32px;
17
+        font-weight: bold;
18
+        line-height: 46px;
19
+        margin-bottom: 20px;
20
+    }
21
+    .content{
22
+        width: 100%;
23
+        text-align: left;
24
+        .link-text{
25
+            font-size: 28px;
26
+            color: #3D3D3D;
27
+            line-height: 41px;
28
+        }
29
+        .steps {
30
+            margin-top: 33px;
31
+            
32
+            .step-item {
33
+                margin-bottom: 24px;
34
+                
35
+                .step-title {
36
+                    display: flex;
37
+                    align-items: center;
38
+                    margin-bottom: 10px;
39
+                    
40
+                    .number {
41
+                        font-size: 22px;
42
+                        font-weight: bold;
43
+                        margin-right: 10px;
44
+                        color: #fff;
45
+                        line-height: 1;
46
+                        padding:6px 10px;
47
+                        background-color: #F6C71A;
48
+                        border-radius: 50%;
49
+                    }
50
+                    
51
+                    .desc {
52
+                        font-size: 24px;
53
+                        color: #3D3D3D;
54
+                        line-height: 35px;
55
+                        font-weight: 700;
56
+                    }
57
+                }
58
+                
59
+                .step-box {
60
+                    width: 482px;
61
+                    height: 146px;
62
+                    background: #ebebeb;
63
+                    border-radius: 20px;
64
+                    display: flex;
65
+                    align-items: center;
66
+                    justify-content: center;
67
+                    margin-left: 45px;
68
+                    box-sizing: border-box;
69
+                    position: relative;
70
+                    .step-img-one {
71
+                        max-width: 111px;
72
+                        max-height: 111px;
73
+                        position: absolute;
74
+                        top: 48px;
75
+                        right: 98px;
76
+                    }
77
+                    .step-One{
78
+                        width: 390px;
79
+                        height: 56px;
80
+                        background-color: #ffe000;
81
+                        border-radius: 60px;
82
+                        color: #000000;
83
+                        display: flex;
84
+                        justify-content: center;
85
+                        align-items: center;
86
+                        font-size: 20px;
87
+                        font-weight: 700;
88
+                    }
89
+                    .step-img-t{
90
+                        width: 192px;
91
+                        height: 116px;
92
+                    }
93
+                    .step-img-two{
94
+                        height: 111px;
95
+                        width: 111px;
96
+                        position: absolute;
97
+                        top: 59px;
98
+                        right: 125px;
99
+                    }
100
+                    .step-img-three{
101
+                        height: 100%;
102
+                    }
103
+                }
104
+            }
105
+        }
106
+        // 复制口令
107
+        .copy-link{
108
+            margin: 0 auto;
109
+            height: 88px;
110
+            width: 520px;
111
+            border-radius: 60px;
112
+            background-color: #ffe000;
113
+            color: #000000;
114
+            font-size: 28px;
115
+            font-weight: 700;
116
+            margin-top: 45px;
117
+            display: flex;
118
+            justify-content: center;
119
+            align-items: center;
120
+        }
121
+    }
122
+}

+ 22 - 0
src/components/ProductCard/index.jsx

@@ -0,0 +1,22 @@
1
+import { View, Text, Image } from '@tarojs/components'
2
+import './index.less'
3
+
4
+const ProductCard = ({ product }) => {
5
+  return (
6
+    <View className='product-card'>
7
+      <Image className='product-img' src={product.imageUrl} mode='widthFix' />
8
+      <View className='product-content'>
9
+        <Text className='title'>{product.name}</Text>
10
+        <View className='price-row'>
11
+          <Text className='price'>
12
+            <Text className='currency'>¥</Text>
13
+            {product.price}
14
+          </Text>
15
+          <Text className='original-price'>¥{product.originalPrice}</Text>
16
+        </View>
17
+      </View>
18
+    </View>
19
+  )
20
+}
21
+
22
+export default ProductCard

+ 59 - 0
src/components/ProductCard/index.less

@@ -0,0 +1,59 @@
1
+// 猜你喜欢列表
2
+.product-card-list {
3
+    margin: 0 16px 0 16px;
4
+    border-radius: 20px;
5
+    display: flex;
6
+    flex-wrap: wrap;
7
+    justify-content: space-between;
8
+    .product-card {
9
+        width: 332px;
10
+        background-color: #fff;
11
+        border-radius: 20px;
12
+        margin-bottom: 10px;
13
+        .product-img {
14
+            width: 100%;
15
+            height: 324px;
16
+            background-color: red;
17
+        }
18
+
19
+        .product-content {
20
+            padding: 0 16px 18px;
21
+
22
+            .title {
23
+                line-height: 41px;
24
+                font-size: 28px;
25
+                margin: 6px 0;
26
+                min-height: 82px;
27
+                overflow: hidden;
28
+                text-overflow: ellipsis;
29
+                display: -webkit-box;
30
+                -webkit-line-clamp: 2;
31
+                -webkit-box-orient: vertical;
32
+                white-space: normal;
33
+            }
34
+
35
+            .price-row {
36
+                display: flex;
37
+                align-items: center;
38
+                gap: 8px;
39
+
40
+                .price {
41
+                    color: #ff4d4f;
42
+                    font-size: 36px;
43
+                    line-height: 26px;
44
+                    margin-right: 10px;
45
+                    .currency {
46
+                        font-size: 22px;
47
+                    }
48
+                }
49
+
50
+                .original-price {
51
+                    color: #999;
52
+                    font-size: 26px;
53
+                    line-height: 38px;
54
+                    text-decoration: line-through;
55
+                }
56
+            }
57
+        }
58
+    }
59
+}

+ 15 - 3
src/components/index/OperationArea/index.jsx

@@ -1,4 +1,5 @@
1 1
 import { View, Text, Image } from "@tarojs/components";
2
+import Taro from "@tarojs/taro";
2 3
 import "./index.less";
3 4
 
4 5
 const OperationArea = () => {
@@ -27,9 +28,20 @@ const OperationArea = () => {
27 28
     }
28 29
   ];
29 30
 
31
+  // 添加跳转方法
32
+  const handleNavigate = (type) => {
33
+    if (type === 'seckill') {
34
+      Taro.navigateTo({
35
+        url: '/pages/seckillIndex/index'
36
+      });
37
+    } else if (type === 'highCommission') {
38
+
39
+    }
40
+  };
41
+
30 42
   return (
31
-    <View className="operation-wrap">
32
-      <View className="operation-item">
43
+    <View className="operation-wrap" >
44
+      <View className="operation-item" onClick={() => handleNavigate('seckill')}>
33 45
         <View className="title">限时秒杀</View>
34 46
         <View className="product-list">
35 47
           {seckillProducts.map(product => (
@@ -46,7 +58,7 @@ const OperationArea = () => {
46 58
           ))}
47 59
         </View>
48 60
       </View>
49
-      <View className="operation-item">
61
+      <View className="operation-item" onClick={() => handleNavigate('highCommission')}>
50 62
         <View className="title-wrap">
51 63
           <Text className="title">高佣专项</Text>
52 64
           <Text className="tag">高佣金必囤爆品</Text>

+ 122 - 48
src/components/index/ProductList/index.jsx

@@ -1,81 +1,151 @@
1
+import React, { useState, useEffect } from "react";
1 2
 import { View, Text, Image } from "@tarojs/components";
3
+import { AtCheckbox } from "taro-ui";
4
+import Taro from "@tarojs/taro";
2 5
 import "./index.less";
3
-import joinStoreBg from '../../../images/index/jionStore.png'
4
-import saveMoneyBg from '../../../images/index/save-money.png'
5
-import shareEarnBg from '../../../images/index/share-earn.png'
6
-
7
-const ProductList = () => {
6
+import joinStoreBg from "../../../images/index/jionStore.png";
7
+import saveMoneyBg from "../../../images/index/save-money.png";
8
+import shareEarnBg from "../../../images/index/share-earn.png";
9
+import seckillIcon from "../../../images/seckill/seckillIcon.png";
10
+const ProductList = (props) => {
11
+  const { isSeckill } = props; //是否是秒杀产品引用
12
+  const { isManagement } = props; //是否是管理产品引用
13
+  const { isManagementStatus } = props; //是否是管理状态引用
14
+  const { isSelectAll } = props; //是否是全选
15
+  const [selectedProducts, setSelectedProducts] = useState([]); // 管理选中的商品列表
8 16
   // 模拟商品数据
9 17
   const products = [
10 18
     {
11 19
       id: 1,
12
-      image: "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1saL6x.img?w=768&h=411&m=6",
20
+      image:
21
+        "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1saL6x.img?w=768&h=411&m=6",
13 22
       name: "这是一个商品名称这是一个商品名称这是一个商品名称这是一个商品名称这是一个商品名称",
14 23
       price: 99.99,
15 24
       originalPrice: 199.99,
16 25
       saveMoney: 10,
17
-      shareEarn: 20
26
+      shareEarn: 20,
18 27
     },
19 28
     {
20
-      id: 1,
21
-      image: "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1saL6x.img?w=768&h=411&m=6",
29
+      id: 2,
30
+      image:
31
+        "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1saL6x.img?w=768&h=411&m=6",
22 32
       name: "这是一个商品名称这是一个商品名称这是一个商品名称这是一个商品名称这是一个商品名称",
23 33
       price: 99.99,
24 34
       originalPrice: 199.99,
25 35
       saveMoney: 10,
26
-      shareEarn: 20
36
+      shareEarn: 20,
27 37
     },
28 38
     {
29
-      id: 1,
30
-      image: "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1saL6x.img?w=768&h=411&m=6",
39
+      id: 3,
40
+      image:
41
+        "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1saL6x.img?w=768&h=411&m=6",
31 42
       name: "这是一个商品名称这是一个商品名称这是一个商品名称这是一个商品名称这是一个商品名称",
32 43
       price: 99.99,
33 44
       originalPrice: 199.99,
34 45
       saveMoney: 10,
35
-      shareEarn: 20
46
+      shareEarn: 20,
36 47
     },
37
-    // ... 其他商品数据
38 48
   ];
39
-
49
+  // 跳转产品详情
50
+  const toDetail = (id) => {
51
+    if (isManagementStatus) {
52
+      selectProduct(id);
53
+    } else {
54
+      Taro.navigateTo({
55
+        url: `/pages/productDetail/index?id=${id}`,
56
+      });
57
+    }
58
+  };
59
+  // 监听 isSelectAll 的变化
60
+  useEffect(() => {
61
+    if (isSelectAll) {
62
+      // 如果 isSelectAll 为 true,选中所有商品
63
+      setSelectedProducts(products.map((product) => product.id));
64
+    } else {
65
+      // 如果 isSelectAll 为 false,取消所有选中
66
+      setSelectedProducts([]);
67
+    }
68
+  }, [isSelectAll]); // 依赖项是 isSelectAll
69
+  // 单选
70
+  const selectProduct = (productId) => {
71
+    setSelectedProducts((prevSelected) => {
72
+      const isSelected = prevSelected.includes(productId);
73
+      if (isSelected) {
74
+        // 如果已经选中,则取消选择
75
+        return prevSelected.filter((id) => id !== productId);
76
+      } else {
77
+        // 如果未选中,则添加到选中列表
78
+        return [...prevSelected, productId];
79
+      }
80
+    });
81
+  };
40 82
   return (
41 83
     <View className="product-list-wrap">
84
+      {isSeckill && (
85
+        <View className="seckill-icon">
86
+          <Image src={seckillIcon} mode="aspectFit" />
87
+          <Text>每日疯抢 限时秒杀</Text>
88
+        </View>
89
+      )}
42 90
       {products.map((product, index) => (
43 91
         <View key={product.id}>
44
-          <View className="product-item">
45
-            <Image className="product-img" src={product.image} mode="aspectFill" />
46
-            <View className="product-info">
47
-              <View className="product-name" style={{"WebkitBoxOrient": "vertical"}}>
48
-                <Text className="self-tag">自营</Text>
49
-                {product.name}
50
-              </View>
51
-              <View className="price-line">
52
-                <View className="price-info">
53
-                  <Text className="symbol">¥</Text>
54
-                  <Text className="price">{product.price}</Text>
55
-                  <Text className="original-price">¥{product.originalPrice}</Text>
92
+          <View onClick={() => toDetail(product.id)} className="product-item">
93
+            {isManagement && isManagementStatus && (
94
+              <AtCheckbox
95
+                options={[{ value: product.id.toString(), label: "" }]} // 确保每个复选框的 options 是独立的
96
+                selectedList={selectedProducts.map((id) => id.toString())}
97
+                onChange={(selectedList) => selectProduct(product.id)} // 传递当前 product.id
98
+              />
99
+            )}
100
+            <View className="right">
101
+              <Image
102
+                className="product-img"
103
+                src={product.image}
104
+                mode="aspectFill"
105
+              />
106
+              <View className="product-info">
107
+                <View
108
+                  className="product-name"
109
+                  style={{ WebkitBoxOrient: "vertical" }}
110
+                >
111
+                  <Text className="self-tag">
112
+                    {!isSeckill ? "自营" : "鱼市秒杀"}
113
+                  </Text>
114
+                  {product.name}
56 115
                 </View>
57
-                <View className="add-btn">
58
-                  <Image 
59
-                    className="join-store-bg" 
60
-                    src={joinStoreBg}
61
-                    mode="aspectFit"
62
-                  />
63
-                  <Text className="btn-text">加入小店</Text>
64
-                </View>
65
-              </View>
66
-              <View className="profit-line">
67
-                <View className="save-money">
68
-                  <Image className="bg" src={saveMoneyBg} mode="aspectFit" />
69
-                  <View className="content">
70
-                    <Text className="label">自购省</Text>
71
-                    <Text className="money">¥{product.saveMoney}</Text>
116
+                <View className="price-line">
117
+                  <View className="price-info">
118
+                    <Text className="symbol">¥</Text>
119
+                    <Text className="price">{product.price}</Text>
120
+                    <Text className="original-price">
121
+                      ¥{product.originalPrice}
122
+                    </Text>
72 123
                   </View>
124
+                  {!isSeckill && !isManagement && (
125
+                    <View className="add-btn">
126
+                      <Image
127
+                        className="join-store-bg"
128
+                        src={joinStoreBg}
129
+                        mode="aspectFit"
130
+                      />
131
+                      <Text className="btn-text">加入小店</Text>
132
+                    </View>
133
+                  )}
73 134
                 </View>
74
-                <View className="share-earn">
75
-                  <Image className="bg" src={shareEarnBg} mode="aspectFit" />
76
-                  <View className="content">
77
-                    <Text className="label">分享赚</Text>
78
-                    <Text className="money">¥{product.shareEarn}</Text>
135
+                <View className="profit-line">
136
+                  <View className="save-money">
137
+                    <Image className="bg" src={saveMoneyBg} mode="aspectFit" />
138
+                    <View className="content">
139
+                      <Text className="label">自购省</Text>
140
+                      <Text className="money">¥{product.saveMoney}</Text>
141
+                    </View>
142
+                  </View>
143
+                  <View className="share-earn">
144
+                    <Image className="bg" src={shareEarnBg} mode="aspectFit" />
145
+                    <View className="content">
146
+                      <Text className="label">分享赚</Text>
147
+                      <Text className="money">¥{product.shareEarn}</Text>
148
+                    </View>
79 149
                   </View>
80 150
                 </View>
81 151
               </View>
@@ -88,4 +158,8 @@ const ProductList = () => {
88 158
   );
89 159
 };
90 160
 
91
-export default ProductList; 
161
+ProductList.defaultProps = {
162
+  isSeckill: false,
163
+};
164
+
165
+export default ProductList;

+ 66 - 25
src/components/index/ProductList/index.less

@@ -3,36 +3,62 @@
3 3
   background: #FFFFFF;
4 4
   border-radius: 16px;
5 5
   position: relative;
6
-  
6
+
7 7
   .product-item {
8 8
     padding: 27px 20px 27px 17px;
9 9
     display: flex;
10
-    
10
+    align-items: center;
11
+
12
+    // 单选框内容
13
+    .at-checkbox::after,
14
+    .at-checkbox::before {
15
+      content: none;
16
+    }
17
+    .at-checkbox__option-wrap {
18
+      padding: 0 15px 0 0;
19
+    }
20
+
21
+    .at-checkbox__option {
22
+      padding: 0;
23
+    }
24
+
25
+    .at-checkbox__option--selected .at-checkbox__icon-cnt {
26
+      background-color: #f6c71a;
27
+    }
28
+
29
+    .at-checkbox__icon-cnt {
30
+      margin-right: 0;
31
+    }
32
+
33
+    .right {
34
+      display: flex;
35
+    }
36
+
11 37
     .product-img {
12 38
       width: 260px;
13 39
       height: 256px;
14 40
       margin-right: 20px;
15 41
       flex-shrink: 0;
16 42
     }
17
-    
43
+
18 44
     .product-info {
19 45
       flex: 1;
20 46
       min-width: 0; // 解决flex布局下文本溢出问题
21 47
       display: flex;
22 48
       flex-direction: column;
23 49
       justify-content: space-between;
50
+
24 51
       .product-name {
25 52
         font-size: 28px;
26
-        overflow : hidden;
53
+        overflow: hidden;
27 54
         text-overflow: ellipsis;
28 55
         display: -webkit-box;
29 56
         -webkit-line-clamp: 2;
30 57
         /* autoprefixer: ignore next */
31 58
         -webkit-box-orient: vertical;
32
-        
33
-        
59
+
60
+
34 61
         .self-tag {
35
-          display: inline-block;
36 62
           padding: 2px 8px;
37 63
           background: #FFD43A;
38 64
           border-radius: 4px;
@@ -43,40 +69,40 @@
43 69
           vertical-align: middle;
44 70
         }
45 71
       }
46
-      
72
+
47 73
       .price-line {
48 74
         display: flex;
49 75
         justify-content: space-between;
50 76
         align-items: center;
51
-        
77
+
52 78
         .price-info {
53 79
           display: flex;
54 80
           align-items: baseline;
55
-          
81
+
56 82
           .symbol {
57 83
             font-size: 22px;
58 84
             color: #FF1D17;
59 85
           }
60
-          
86
+
61 87
           .price {
62 88
             font-size: 36px;
63 89
             color: #FF1D17;
64 90
             font-weight: bold;
65 91
             margin-right: 8px;
66 92
           }
67
-          
93
+
68 94
           .original-price {
69 95
             font-size: 26px;
70 96
             color: #999999;
71 97
             text-decoration: line-through;
72 98
           }
73 99
         }
74
-        
100
+
75 101
         .add-btn {
76 102
           position: relative;
77 103
           width: 158px;
78 104
           height: 58px;
79
-          
105
+
80 106
           .join-store-bg {
81 107
             width: 100%;
82 108
             height: 100%;
@@ -84,7 +110,7 @@
84 110
             top: 0;
85 111
             left: 0;
86 112
           }
87
-          
113
+
88 114
           .btn-text {
89 115
             padding-left: 8px;
90 116
             position: absolute;
@@ -99,22 +125,25 @@
99 125
           }
100 126
         }
101 127
       }
102
-      
128
+
103 129
       .profit-line {
104 130
         display: flex;
105 131
         gap: 20px;
106
-        .save-money{
107
-            color: #F6C71A;
132
+
133
+        .save-money {
134
+          color: #F6C71A;
108 135
         }
109
-        .share-earn{
110
-            color: #fff;
136
+
137
+        .share-earn {
138
+          color: #fff;
111 139
         }
140
+
112 141
         .save-money,
113 142
         .share-earn {
114 143
           position: relative;
115 144
           width: 192px;
116 145
           height: 84px;
117
-          
146
+
118 147
           .bg {
119 148
             width: 100%;
120 149
             height: 100%;
@@ -122,7 +151,7 @@
122 151
             top: 0;
123 152
             left: 0;
124 153
           }
125
-          
154
+
126 155
           .content {
127 156
             position: relative;
128 157
             z-index: 1;
@@ -132,7 +161,7 @@
132 161
             align-items: center;
133 162
             justify-content: center;
134 163
             font-size: 28px;
135
-            
164
+
136 165
             .label,
137 166
             .money {
138 167
               line-height: 41px;
@@ -142,10 +171,22 @@
142 171
       }
143 172
     }
144 173
   }
145
-  
174
+
146 175
   .divider {
147 176
     height: 1px;
148 177
     margin: 0 17px 0 20px;
149 178
     border-top: 1px dashed #D8D8D8;
150 179
   }
151
-} 
180
+
181
+  .seckill-icon {
182
+    padding: 18px 0 0 17px;
183
+    font-size: 26px;
184
+    font-weight: bold;
185
+
186
+    Image {
187
+      height: 26px;
188
+      width: 26px;
189
+      margin-right: 10px;
190
+    }
191
+  }
192
+}

BIN
src/images/aliPayIcon.png


BIN
src/images/earningsOrder/tag.png


BIN
src/images/earningsOrder/vip.png


BIN
src/images/member/order.png


BIN
src/images/member/toDetail.png


BIN
src/images/member/vip.png


BIN
src/images/member/warning.png


BIN
src/images/member/withdrawable.png


BIN
src/images/mine/edit.png


BIN
src/images/mine/loginOut.png


BIN
src/images/mine/norm.png


BIN
src/images/productDetail/like.png


BIN
src/images/productDetail/productDetailIcon.png


BIN
src/images/productDetail/selectStep.png


BIN
src/images/productDetail/selfBuy.png


BIN
src/images/productDetail/share.png


BIN
src/images/productDetail/stepThree.png


BIN
src/images/productDetail/xianyu.png


BIN
src/images/productManagement/add.png


BIN
src/images/productManagement/back.png


BIN
src/images/productManagement/delete.png


BIN
src/images/productManagement/manger.png


BIN
src/images/productManagement/selectIcon.png


BIN
src/images/productManagement/toTop.png


BIN
src/images/seckill/seckillIcon.png


BIN
src/images/seckill/seckillTop.png


BIN
src/images/statementRecordsIcon.png


BIN
src/images/storeManagement/storeManagement.png


BIN
src/images/storeManagement/storeManagementIcon.png


BIN
src/images/wallet.png


+ 3 - 0
src/pages/Alipay/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '支付宝'
3
+})

+ 55 - 0
src/pages/Alipay/index.jsx

@@ -0,0 +1,55 @@
1
+import { Component } from "react";
2
+import { View, Text, Image } from "@tarojs/components";
3
+import { AtInput } from "taro-ui";
4
+import "./index.less";
5
+import aliPayIcon from "../../images/aliPayIcon.png";
6
+export default class Index extends Component {
7
+  state = {
8
+    name: "", // 账户姓名
9
+    account: "", // 支付宝账户
10
+  };
11
+
12
+  handleChangeName(value) {
13
+    this.setState({ name: value });
14
+  }
15
+  handleChangeAccount(value) {
16
+    this.setState({ account: value });
17
+  }
18
+  render() {
19
+    return (
20
+      <View className="index">
21
+        {/* 支付宝信息 */}
22
+        <View className="alipay-info">
23
+          <AtInput
24
+            name="value"
25
+            title="账户姓名"
26
+            type="text"
27
+            placeholder="请输入账户姓名"
28
+            value={this.state.name}
29
+            onChange={this.handleChangeName.bind(this)}
30
+          />
31
+          <AtInput
32
+            name="value"
33
+            title="支付宝账户"
34
+            type="text"
35
+            placeholder="请输入支付宝账户"
36
+            value={this.state.account}
37
+            onChange={this.handleChangeAccount.bind(this)}
38
+          />
39
+        </View>
40
+        {/* 注意 */}
41
+        <View className="attention">
42
+          <View className="attention-top">
43
+            <Image src={aliPayIcon} className="attention-icon" />
44
+            注意:
45
+          </View>
46
+          <View className="attention-bottom">
47
+            所维护的支付宝账户所有人需要与提现认证提交的自然人为同一人,避免影响提现
48
+          </View>
49
+        </View>
50
+        {/* 提交 */}
51
+        <View className="submit">提交</View>
52
+      </View>
53
+    );
54
+  }
55
+}

+ 62 - 0
src/pages/Alipay/index.less

@@ -0,0 +1,62 @@
1
+.index {
2
+    padding: 30px 16px;
3
+    background-color: #f9f9f9;
4
+    box-sizing: border-box;
5
+    min-height: 100vh;
6
+
7
+    .alipay-info {
8
+        padding: 0 17px;
9
+        border-radius: 20px;
10
+        background-color: #fff;
11
+        box-sizing: border-box;
12
+        overflow: hidden;
13
+
14
+        .at-input__title {
15
+            font-size: 28px;
16
+            color: #000000;
17
+        }
18
+
19
+        .at-input {
20
+            margin-left: 0;
21
+        }
22
+    }
23
+
24
+    // 注意
25
+    .attention {
26
+        padding: 22px 41px 22px 19px;
27
+        box-sizing: border-box;
28
+        background-color: #fdf7e7;
29
+        border-radius: 20px;
30
+        margin-top: 20px;
31
+        font-size: 26px;
32
+        color: #A0A0A0;
33
+        line-height: 38px;
34
+
35
+        .attention-top {
36
+            display: flex;
37
+            align-items: center;
38
+
39
+            .attention-icon {
40
+                width: 38px;
41
+                height: 38px;
42
+                margin-right: 10px;
43
+            }
44
+        }
45
+    }
46
+    // 提交
47
+    .submit{
48
+        background-color: #f6c71a;
49
+        margin: 0 16px;
50
+        position: fixed;
51
+        bottom: 30px;
52
+        left: 0;
53
+        right: 0;
54
+        height: 88px;
55
+        display: flex;
56
+        align-items: center;
57
+        justify-content: center;
58
+        font-size: 28px;
59
+        color: #000000;
60
+        border-radius: 70px;
61
+    }
62
+}

+ 3 - 0
src/pages/cashOut/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '提现'
3
+})

+ 54 - 0
src/pages/cashOut/index.jsx

@@ -0,0 +1,54 @@
1
+import { Component } from 'react'
2
+import { View, Text } from '@tarojs/components'
3
+import { AtList, AtListItem } from "taro-ui"
4
+import './index.less'
5
+
6
+export default class Index extends Component {
7
+
8
+  render () {
9
+    return (
10
+      <View className='index'>  
11
+      {/* 提现 */}
12
+        <View className='cash-out'>
13
+          <View className='balance-section'>
14
+          <View className='balance-info'>
15
+            <Text className='label'>可提现金额</Text>
16
+            <View className='amount'>
17
+              <Text className='integer'>¥888.</Text>
18
+              <Text className='decimal'>00</Text>
19
+            </View>
20
+          </View>
21
+          <View className='action'>
22
+            <View className='withdraw-btn'>提现</View>
23
+          </View>
24
+        </View>
25
+      </View>
26
+      {/* 提现功能 */}
27
+      <View className='cash-out-function'>
28
+        <AtList>
29
+        <AtListItem title='提现认证' extraText='认证审核中' arrow='right' />
30
+        <AtListItem title='标题记录' extraText='' arrow='right' />
31
+        <AtListItem title='支付账户' extraText='需维护支付宝账户信息' arrow='right' />
32
+        <AtListItem title='标题结算单记录' extraText='6月结算单已出' arrow='right' />
33
+        </AtList>
34
+      </View>
35
+      {/* 结算单说明 */}
36
+      <View className='settlement-statement'>
37
+        <Text className='title'>结算单说明</Text>
38
+        <View className='contentBox'>
39
+        <View className='content indent'>1. 每月 <Text className='highlight'>27</Text>号 出上月结算单</View>
40
+        <View className='content sub-content'>收益可在当月27号至30号全天申请提现</View>
41
+        <View className='content sub-content'>错过需要等下个月,提现金额会在1-5个工作日到账</View>
42
+        <View className='content indent'>2. 会员需要在提现前完成 提现认证 并审核通过</View>
43
+        <View className='content sub-content'>维护完善 支付宝账户信息,否则将影响提现进行</View>
44
+        <View className='content indent'>3. 结算单收益:订单完成时间在上个月的总收益</View>
45
+        <View className='content sub-content'>上个月【已付款】但未完成订单可在下个月提现</View>
46
+        <View className='content indent'>4. 可提现金额已扣除各项税费,提现金额需大于1元</View>
47
+        <View className='content indent'>5. 本月未提现收益不会清 0</View>
48
+        <View className='content sub-content'>会累积到账户余额,下个月合并提现</View>
49
+        </View>
50
+      </View>
51
+      </View>
52
+    )
53
+  }
54
+}

+ 118 - 0
src/pages/cashOut/index.less

@@ -0,0 +1,118 @@
1
+.index {
2
+    min-height: 100vh;
3
+    background-color: #f0f2f5;
4
+    padding: 20px 16px 0 16px;
5
+    box-sizing: border-box;
6
+
7
+}
8
+
9
+.cash-out {
10
+    .balance-section {
11
+        display: flex;
12
+        justify-content: space-between;
13
+        align-items: center;
14
+        background-color: #fff;
15
+        border-radius: 20px;
16
+        padding: 0 17px;
17
+        box-sizing: border-box;
18
+
19
+        .balance-info {
20
+            padding: 35px 0 25px 0;
21
+            box-sizing: border-box;
22
+
23
+            .label {
24
+                font-size: 28px;
25
+                color: #000000;
26
+                display: block;
27
+                margin-bottom: 11px;
28
+                line-height: 41px;
29
+                font-weight: 500;
30
+            }
31
+
32
+            .amount {
33
+                display: flex;
34
+                align-items: baseline;
35
+                font-weight: 700;
36
+                line-height: 70px;
37
+                color: #F6C71A;
38
+
39
+                .integer {
40
+                    font-size: 48px;
41
+                }
42
+
43
+                .decimal {
44
+                    font-size: 36px;
45
+                }
46
+            }
47
+        }
48
+
49
+        .action {
50
+            .withdraw-btn {
51
+                color: #F6C71A;
52
+                padding: 13px 53px;
53
+                line-height: 38px;
54
+                border-radius: 60px;
55
+                font-size: 26px;
56
+                border: 1px solid #F6C71A;
57
+            }
58
+        }
59
+    }
60
+}
61
+
62
+// 提现功能
63
+.cash-out-function {
64
+    margin-top: 20px;
65
+    border-radius: 20px;
66
+    background-color: #fff;
67
+    overflow: hidden;
68
+
69
+    .item-content__info-title {
70
+        font-weight: 500;
71
+        font-size: 28px;
72
+        color: #000000;
73
+    }
74
+    .item-extra__info{
75
+        font-size: 24px;
76
+    }
77
+    .at-list__item-extra{
78
+        max-width: 400px;
79
+    }
80
+    .at-list__item .item-extra__icon-arrow{
81
+        font-size: 32px;
82
+    }
83
+    .at-list__item{
84
+        padding: 31px 17px;
85
+    }
86
+}
87
+// 结算单说明
88
+.settlement-statement{
89
+    margin-top: 30px;
90
+    padding: 0 17px;
91
+    box-sizing: border-box;
92
+    .title{
93
+        font-size: 24px;
94
+        line-height: 35px;
95
+        color: #000000;
96
+    }
97
+    .contentBox{
98
+        margin-top: 10px;
99
+    }
100
+    .content{
101
+        font-size: 22px;
102
+        line-height: 32px;
103
+        color: #B5B5B5;
104
+        
105
+        &.indent {
106
+            padding-left: 24px;
107
+            text-indent: -24px;
108
+        }
109
+        
110
+        &.sub-content {
111
+            padding-left: 24px;
112
+        }
113
+
114
+        .highlight{
115
+            color: #EC8F2B;
116
+        }
117
+    }
118
+}

+ 3 - 0
src/pages/cashOutRecord/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '提现记录'
3
+})

+ 45 - 0
src/pages/cashOutRecord/index.jsx

@@ -0,0 +1,45 @@
1
+import { Component } from 'react'
2
+import { View, Text, Image } from '@tarojs/components'
3
+import './index.less'
4
+import wallet from '../../images/wallet.png'
5
+export default class Index extends Component {
6
+
7
+  componentWillMount () { }
8
+
9
+  componentDidMount () { }
10
+
11
+  componentWillUnmount () { }
12
+
13
+  componentDidShow () { }
14
+
15
+  componentDidHide () { }
16
+
17
+  render () {
18
+    return (
19
+      <View className='index'>
20
+        {/* 提现记录 */}
21
+        <View className='cash-out-record'>
22
+          {/* 累计提现金额 */}
23
+          <View className='total-amount'>
24
+            <View className='left'>
25
+              <Image src={wallet} className='icon' />
26
+              <Text className='title'>累计提现金额</Text>
27
+            </View>
28
+            <View className='amount'>
29
+              <Text className='integer'>¥10000.</Text>
30
+              <Text className='decimal'>00</Text>
31
+            </View>
32
+          </View>
33
+          {/* 提现记录 */}
34
+          <View className='record-item'>
35
+            <View className='item-time'>2024-06-27 10:00:00</View>
36
+            <View className='item-amount'>
37
+              <View className='amount'>¥ 10000.00</View>
38
+              <View className='status'>提现成功</View>
39
+            </View>
40
+          </View>
41
+        </View>
42
+      </View>
43
+    )
44
+  }
45
+}

+ 84 - 0
src/pages/cashOutRecord/index.less

@@ -0,0 +1,84 @@
1
+.index {
2
+    background-color: #f9f9f9;
3
+    min-height: 100vh;
4
+    padding: 30px 16px 0 16px;
5
+    box-sizing: border-box;
6
+
7
+    .cash-out-record {
8
+        .total-amount {
9
+            height: 170px;
10
+            background-color: #fff;
11
+            display: flex;
12
+            justify-content: space-between;
13
+            align-items: center;
14
+            padding: 0 17px;
15
+            box-sizing: border-box;
16
+
17
+            .left {
18
+                display: flex;
19
+                align-items: center;
20
+
21
+                .icon {
22
+                    width: 60px;
23
+                    height: 60px;
24
+                    margin-right: 10px;
25
+                }
26
+
27
+                .title {
28
+                    color: #000000;
29
+                    line-height: 41px;
30
+                    font-size: 28px;
31
+                }
32
+            }
33
+
34
+            .amount {
35
+                display: flex;
36
+                align-items: baseline;
37
+                color: #F6C71A;
38
+                font-weight: bold;
39
+
40
+                .integer {
41
+                    font-size: 48px;
42
+                }
43
+
44
+                .decimal {
45
+                    font-size: 36px;
46
+                }
47
+            }
48
+        }
49
+
50
+        // 提现记录
51
+        .record-item {
52
+            background-color: #fff;
53
+            padding: 46px 16px 0 16px;
54
+            box-sizing: border-box;
55
+            border-radius: 20px;
56
+            display: flex;
57
+            justify-content: space-between;
58
+            height: 170px;
59
+            margin-top: 26px;
60
+            .item-time {
61
+                font-size: 26px;
62
+                color: #000000;
63
+                line-height: 38px;
64
+            }
65
+
66
+            .item-amount {
67
+                display: flex;
68
+                flex-direction: column;
69
+                align-items: flex-end;
70
+                .status {
71
+                    font-size: 24px;
72
+                    color: #91A95B;
73
+                    line-height: 35px;
74
+                }
75
+
76
+                .amount {
77
+                    font-size: 28px;
78
+                    color: #000000;
79
+                    line-height: 41px;
80
+                }
81
+            }
82
+        }
83
+    }
84
+}

+ 3 - 0
src/pages/earningsDetail/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '收益详情'
3
+})

+ 65 - 0
src/pages/earningsDetail/index.jsx

@@ -0,0 +1,65 @@
1
+import { Component } from 'react'
2
+import { View, Text } from '@tarojs/components'
3
+import './index.less'
4
+
5
+export default class Index extends Component {
6
+
7
+  componentWillMount () { }
8
+
9
+  componentDidMount () { }
10
+
11
+  componentWillUnmount () { }
12
+
13
+  componentDidShow () { }
14
+
15
+  componentDidHide () { }
16
+
17
+  render () {
18
+    return (
19
+      <View className='index'>
20
+        <View className='earnings-list'>
21
+          <View className='earnings-list-item'>
22
+            <View className='item-line title-one'>
23
+              <Text className='title'>今天预估总收益</Text>
24
+              <Text className='money'>¥100.00</Text>
25
+            </View>
26
+            <View className='dotted-line'></View>
27
+            <View className='item-line title-two'>
28
+              <Text className='title'>预估推广收益</Text>
29
+              <Text className='money'>¥70.00</Text>
30
+            </View>
31
+            <View className='line'></View>
32
+            <View className='item-line title-two'>
33
+              <Text className='title'>预估推广收益</Text>
34
+              <Text className='money'>¥70.00</Text>
35
+            </View>
36
+            <View className='item-line'>
37
+              <Text className='title'>惊喜红包</Text>
38
+              <Text className='money'>¥70.00</Text>
39
+            </View>
40
+            <View className='item-line'>
41
+              <Text className='title'>惊喜红包</Text>
42
+              <Text className='money'>¥70.00</Text>
43
+            </View>
44
+            <View className='item-line'>
45
+              <Text className='title'>惊喜红包</Text>
46
+              <Text className='money'>¥70.00</Text>
47
+            </View>
48
+            <View className='item-line'>
49
+              <Text className='title'>惊喜红包</Text>
50
+              <Text className='money'>¥70.00</Text>
51
+            </View>
52
+            <View className='item-line'>
53
+              <Text className='title'>惊喜红包</Text>
54
+              <Text className='money'>¥70.00</Text>
55
+            </View>
56
+            <View className='item-line'>
57
+              <Text className='title'>惊喜红包</Text>
58
+              <Text className='money'>¥70.00</Text>
59
+            </View>
60
+          </View>
61
+        </View>
62
+      </View>
63
+    )
64
+  }
65
+}

+ 61 - 0
src/pages/earningsDetail/index.less

@@ -0,0 +1,61 @@
1
+.index {
2
+    background-color: #f9f9f9;
3
+    padding: 20px 16px;
4
+    box-sizing: border-box;
5
+    min-height: 100vh;
6
+
7
+    .earnings-list {
8
+        .dotted-line{
9
+            width: 100%;
10
+            border: 1px dashed #D8D8D8;
11
+            margin: 6px 0 30px 0;
12
+        }
13
+        .line {
14
+            width: 100%;
15
+            border: 1px solid #D8D8D8;
16
+            margin: 9px 0 30px 0;
17
+        }
18
+        .earnings-list-item {
19
+            padding: 30px 17px 7px 17px;
20
+            box-sizing: border-box;
21
+            background-color: #fff;
22
+            border-radius: 20px;
23
+
24
+            .item-line {
25
+                display: flex;
26
+                justify-content: space-between;
27
+                align-items: center;
28
+                font-size: 26px;
29
+                color: #BDBDBD;
30
+                margin-bottom: 20px;
31
+
32
+            }
33
+
34
+            .title-one {
35
+                .title {
36
+                    color: #000000;
37
+                    line-height: 43px;
38
+                    font-size: 30px;
39
+                }
40
+
41
+                .money {
42
+                    color: #FF1D17;
43
+                    font-size: 30px;
44
+                }
45
+            }
46
+
47
+            .title-two {
48
+                .title {
49
+                    color: #A19D99;
50
+                    font-size: 28px;
51
+                    line-height: 41px;
52
+                }
53
+
54
+                .money {
55
+                    color: #A19D99;
56
+                    font-size: 28px;
57
+                }
58
+            }
59
+        }
60
+    }
61
+}

+ 3 - 0
src/pages/earningsOrder/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '我的小店'
3
+})

+ 159 - 0
src/pages/earningsOrder/index.jsx

@@ -0,0 +1,159 @@
1
+import { Component } from "react";
2
+import { View, Text, Image, Picker } from "@tarojs/components";
3
+import { AtDivider } from "taro-ui";
4
+import "./index.less";
5
+import selectIcon from "../../images/productManagement/selectIcon.png";
6
+import vip from "../../images/earningsOrder/vip.png";
7
+import Taro from "@tarojs/taro";
8
+
9
+export default class Index extends Component {
10
+  state = {
11
+    current: 0,
12
+    productOptions: ["全部", "咸鱼商品", "自建商品"], //商品下拉选项
13
+    selectedProduct: "全部", //商品默认名称
14
+    timeOptions: ["全部时间", "一个月前", "一周前"], //下单时间下拉选项
15
+    selectTime: "下单时间", //下单时间
16
+    tabList: [
17
+      { title: "全部", num: 0 },
18
+      { title: "已付款", num: 0 },
19
+      { title: "已完成", num: 2 },
20
+      { title: "已结算", num: 10 },
21
+      { title: "无效", num: 0 },
22
+    ],
23
+  };
24
+
25
+  handleTabClick = (index) => {
26
+    this.setState({ current: index });
27
+  };
28
+  // 下单时间下拉选项
29
+  timeSelectOption = (e) => {
30
+    const selectTime = this.state.timeOptions[e.detail.value];
31
+    this.setState({ selectTime });
32
+  };
33
+  // 商品下拉选项
34
+  productSelectOption = (e) => {
35
+    const selectedProduct = this.state.productOptions[e.detail.value];
36
+    this.setState({ selectedProduct });
37
+  };
38
+  handleCopy = async (text) => {
39
+    try {
40
+      await Taro.setClipboardData({
41
+        data: text,
42
+      });
43
+      Taro.showToast({
44
+        title: "内容已复制",
45
+        icon: "success",
46
+        duration: 2000,
47
+      });
48
+    } catch (error) {
49
+      Taro.showToast({
50
+        title: "复制失败",
51
+        icon: "error",
52
+        duration: 2000,
53
+      });
54
+    }
55
+  };
56
+
57
+  render() {
58
+    const { current, tabList } = this.state;
59
+    return (
60
+      <View className="index">
61
+        {/* tab切换 */}
62
+        <View className="tab-container">
63
+          {tabList.map((tab, index) => (
64
+            <View
65
+              key={index}
66
+              className={`tab-item ${current === index ? "active" : ""}`}
67
+              onClick={() => this.handleTabClick(index)}
68
+            >
69
+              <Text>{tab.title}</Text>
70
+              {tab.num > 0 && <Text className="tag">{tab.num}</Text>}
71
+            </View>
72
+          ))}
73
+        </View>
74
+        {/* 下拉筛选 */}
75
+        <View className="filter-container">
76
+          <Picker
77
+            mode="selector"
78
+            range={this.state.timeOptions}
79
+            onChange={this.timeSelectOption}
80
+          >
81
+            <View className="filter-item">
82
+              <Text>{this.state.selectTime}</Text>
83
+              <Image src={selectIcon} className="select-icon" />
84
+            </View>
85
+          </Picker>
86
+          <Picker
87
+            mode="selector"
88
+            range={this.state.productOptions}
89
+            onChange={this.productSelectOption}
90
+          >
91
+            <View className="filter-item">
92
+              <Text>{this.state.selectedProduct}</Text>
93
+              <Image src={selectIcon} className="select-icon" />
94
+            </View>
95
+          </Picker>
96
+        </View>
97
+        {/* 订单列表 */}
98
+        <View className="order-list">
99
+          <View className="order-item">
100
+            {/* 头部信息 */}
101
+            <View className="order-header">
102
+              <View className="user-info">
103
+                <Image className="avatar" src="" />
104
+                <Text className="username">张三</Text>
105
+              </View>
106
+              <Text className="pay-status">已付款</Text>
107
+            </View>
108
+            <AtDivider content="" />
109
+            {/* 订单信息 */}
110
+            <View className="order-info">
111
+              <View className="order-details">
112
+                <View className="detail-item">
113
+                  <Text className="label">订单编号:</Text>
114
+                  <Text className="value">2024031512345</Text>
115
+                  <Text
116
+                    className="copy-text"
117
+                    onClick={() => this.handleCopy("2024031512345")}
118
+                  >
119
+                    复制
120
+                  </Text>
121
+                </View>
122
+                <View className="detail-item">
123
+                  <Text className="label">下单时间:</Text>
124
+                  <Text className="value">2024-03-15 12:34:56</Text>
125
+                </View>
126
+                <View className="detail-item">
127
+                  <Text className="label">订单类型:</Text>
128
+                  <Text className="value">普通订单</Text>
129
+                </View>
130
+              </View>
131
+              <View className="member-info">
132
+                <Image className="member-icon" src={vip} />
133
+                <Text className="member-text">闲鱼会员</Text>
134
+              </View>
135
+            </View>
136
+
137
+            {/* 产品信息 */}
138
+            <View className="product-info">
139
+              <Image className="product-image" src="" />
140
+              <View className="product-details">
141
+                <Text className="product-name">
142
+                  这是一个很长的产品名称这是一个很长的产品名称这是一个很长的产品名称
143
+                </Text>
144
+                <View className="promotion-info">
145
+                  <View className="tag">推广收入</View>
146
+                  <Text className="amount">¥99.99</Text>
147
+                </View>
148
+                <View className="payment-info">
149
+                  <Text className="label">实付金额:</Text>
150
+                  <Text className="amount">¥199.99</Text>
151
+                </View>
152
+              </View>
153
+            </View>
154
+          </View>
155
+        </View>
156
+      </View>
157
+    );
158
+  }
159
+}

+ 241 - 0
src/pages/earningsOrder/index.less

@@ -0,0 +1,241 @@
1
+.index {
2
+    background-color: #f9f9f9; // ... 其他样式 ...
3
+    min-height: 100vh;
4
+}
5
+
6
+// tab切换
7
+.tab-container {
8
+    display: flex;
9
+    justify-content: space-between;
10
+    background-color: #fff;
11
+    padding: 22px 34px;
12
+    box-sizing: border-box;
13
+
14
+    .tab-item {
15
+        font-size: 26px;
16
+        color: #000000;
17
+
18
+        .tag {
19
+            margin-left: 4px;
20
+            font-size: 26px;
21
+            color: #fff;
22
+            background-color: #f6c71a;
23
+            border-radius: 20px;
24
+            padding: 2px 20px;
25
+            font-weight: normal;
26
+        }
27
+    }
28
+
29
+    .tab-item.active {
30
+        color: #F6C71A;
31
+        /* 高亮颜色 */
32
+        font-size: 28px;
33
+        font-weight: bold;
34
+    }
35
+}
36
+
37
+// 下拉筛选
38
+.filter-container {
39
+    border-top: 1px solid #F4F4F4;
40
+    background-color: #fff;
41
+    height: 70px;
42
+    padding: 0 134px;
43
+    display: flex;
44
+    align-items: center;
45
+    justify-content: space-between;
46
+
47
+    .filter-item {
48
+        display: flex;
49
+        align-items: center;
50
+        font-size: 26px;
51
+        color: #000000;
52
+
53
+        .select-icon {
54
+            width: 14px;
55
+            height: 14px;
56
+            margin-left: 4px;
57
+        }
58
+    }
59
+}
60
+
61
+// 订单列表样式
62
+.order-list {
63
+    padding: 24px;
64
+
65
+    .at-divider {
66
+        height: 0;
67
+        margin-bottom: 18px;
68
+    }
69
+
70
+    .order-item {
71
+        background: #FFFFFF;
72
+        border-radius: 20px;
73
+        padding: 0 18px 34px 18px;
74
+        margin-bottom: 24px;
75
+        box-sizing: border-box;
76
+
77
+        .order-header {
78
+            display: flex;
79
+            justify-content: space-between;
80
+            align-items: center;
81
+            height: 98px;
82
+
83
+            .user-info {
84
+                display: flex;
85
+                align-items: center;
86
+
87
+                .avatar {
88
+                    width: 58px;
89
+                    height: 58px;
90
+                    background-color: red;
91
+                    border-radius: 50%;
92
+                    margin-right: 10px;
93
+                }
94
+
95
+                .username {
96
+                    font-size: 26px;
97
+                    color: #000000;
98
+                }
99
+            }
100
+
101
+            .pay-status {
102
+                color: #FB8E36;
103
+                font-size: 26px;
104
+            }
105
+        }
106
+
107
+        .order-info {
108
+            display: flex;
109
+            justify-content: space-between;
110
+            padding-bottom: 24px;
111
+
112
+            .order-details {
113
+                .detail-item {
114
+                    display: flex;
115
+                    align-items: center;
116
+                    margin-bottom: 8px;
117
+
118
+                    .label {
119
+                        color: #999;
120
+                        font-size: 22px;
121
+                        margin-right: 12px;
122
+                        line-height: 32px;
123
+                    }
124
+
125
+                    .value {
126
+                        color: #999;
127
+                        font-size: 22px;
128
+                        line-height: 32px;
129
+                    }
130
+
131
+                    .copy-text {
132
+                        color: #F6C71A;
133
+                        font-size: 22px;
134
+                        margin-left: 30px;
135
+                        line-height: 32px;
136
+                    }
137
+                }
138
+            }
139
+
140
+            .member-info {
141
+                display: flex;
142
+                flex-direction: column;
143
+                justify-content: flex-start;
144
+                align-items: center;
145
+
146
+                .member-icon {
147
+                    width: 58px;
148
+                    height: 49px;
149
+                }
150
+
151
+                .member-text {
152
+                    font-size: 18px;
153
+                    color: #E7BE78;
154
+                    line-height: 26px;
155
+                    margin-top: 4px;
156
+                }
157
+            }
158
+        }
159
+
160
+        .product-info {
161
+            display: flex;
162
+            padding-top: 20px;
163
+            height: 168px;
164
+
165
+            .product-image {
166
+                width: 297px;
167
+                height: 168px;
168
+                background-color: red;
169
+                border-radius: 8px;
170
+                margin-right: 16px;
171
+            }
172
+
173
+            .product-details {
174
+                flex: 1;
175
+                height: 100%;
176
+                display: flex;
177
+                flex-direction: column;
178
+                justify-content: space-between;
179
+
180
+                .product-name {
181
+                    font-size: 28px;
182
+                    color: #000000;
183
+                    line-height: 41px;
184
+                    overflow: hidden;
185
+                    text-overflow: ellipsis;
186
+                    display: -webkit-box;
187
+                    -webkit-line-clamp: 2;
188
+                    -webkit-box-orient: vertical;
189
+                    margin-bottom: 16px;
190
+                }
191
+
192
+                .promotion-info {
193
+                    display: flex;
194
+                    align-items: center;
195
+                    justify-content: center;
196
+                    margin-bottom: 16px;
197
+                    height: 30px;
198
+                    width: fit-content;
199
+                    border-radius: 10px;
200
+
201
+                    .tag {
202
+                        color: #F6C71A;
203
+                        font-size: 18px;
204
+                        z-index: 1;
205
+                        background-color: #fff;
206
+                        padding: 2px 6px;
207
+                        box-sizing: border-box;
208
+                        border: 1px solid #F6C71A;
209
+                    }
210
+
211
+                    .amount {
212
+                        color: #fff;
213
+                        font-size: 18px;
214
+                        z-index: 1;
215
+                        background-color: #f6c71a;
216
+                        padding: 2px 4px;
217
+                        box-sizing: border-box;
218
+                        border: 1px solid #F6C71A;
219
+                    }
220
+                }
221
+
222
+                .payment-info {
223
+                    display: flex;
224
+                    align-items: center;
225
+                    font-weight: 500;
226
+
227
+                    .label {
228
+                        color: #000000;
229
+                        font-size: 22px;
230
+                        margin-right: 10px;
231
+                    }
232
+
233
+                    .amount {
234
+                        color: #000000;
235
+                        font-size: 22px;
236
+                    }
237
+                }
238
+            }
239
+        }
240
+    }
241
+}

+ 2 - 11
src/pages/index/index.jsx

@@ -14,7 +14,6 @@ import backTopIcon from "../../images/index/back-top.png";
14 14
 export default class Index extends Component {
15 15
   state = {
16 16
     value: "",
17
-    navigationBarHeight: 0, // 添加一个状态来保存导航栏高度
18 17
     current: 0, // 添加当前选中的tab索引
19 18
     tabList: [
20 19
       // 添加模拟的tab数据
@@ -66,15 +65,7 @@ export default class Index extends Component {
66 65
       current: value,
67 66
     });
68 67
   }
69
-  componentDidMount() {
70
-    // 获取系统信息
71
-    const systemInfo = Taro.getSystemInfoSync();
72
-    // 获取 safeArea.top 作为导航栏的高度
73
-    const navigationBarHeight = systemInfo.safeArea.top;
74
-
75
-    // 设置导航栏高度到状态
76
-    this.setState({ navigationBarHeight });
77
-  }
68
+  componentDidMount() {}
78 69
 
79 70
   componentWillUnmount() {}
80 71
 
@@ -95,7 +86,7 @@ export default class Index extends Component {
95 86
       <View className="index">
96 87
         <View
97 88
           className="header"
98
-          style={{ paddingTop: this.state.navigationBarHeight + "px" }}
89
+          style={{ paddingTop: Taro.navigationBarHeight  + "px" }}
99 90
         >
100 91
           <View className="header-content">
101 92
             <Image

+ 1 - 0
src/pages/index/index.less

@@ -58,6 +58,7 @@
58 58
       .at-tabs__header {
59 59
         background-color: transparent;
60 60
         height: 100%;
61
+        text-align: left;
61 62
       }
62 63
 
63 64
       .at-tabs__item {

+ 3 - 0
src/pages/infoEdit/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '编辑个人信息'
3
+})

+ 76 - 0
src/pages/infoEdit/index.jsx

@@ -0,0 +1,76 @@
1
+import { Component } from "react";
2
+import { View, Text, Image } from "@tarojs/components";
3
+import { AtInput } from "taro-ui";
4
+import "./index.less";
5
+
6
+export default class Index extends Component {
7
+  state = {
8
+    wxAccount: "",
9
+    nickName: "",
10
+    phone: "",
11
+  };
12
+  handleAccountChange (value) {
13
+    this.setState({
14
+      wxAccount: value,
15
+    });
16
+    return value;
17
+  }
18
+  handleNickNameChange (value) {
19
+    this.setState({
20
+      nickName: value,
21
+    });
22
+    return value;
23
+  }
24
+  handlePhoneChange (value) {
25
+    this.setState({
26
+      phone: value,
27
+    });
28
+    return value;
29
+  }
30
+  render() {
31
+    return (
32
+      <View className="index">
33
+        {/* 头像 */}
34
+        <View className="info-edit">
35
+          <Image
36
+            src="https://video-img.fyshark.com/1731495433480WechatIMG674.jpg"
37
+            className="info-edit-img"
38
+          />
39
+          <Text className="info-edit-title">更换头像</Text>
40
+        </View>
41
+        {/* 内容 */}
42
+        <View className="info-edit-content">
43
+          <AtInput
44
+            name="value"
45
+            title="微信账号"
46
+            type="text"
47
+            placeholder="请输入微信账号"
48
+            value={this.state.wxAccount}
49
+            onChange={this.handleAccountChange.bind(this)}
50
+          />
51
+          <AtInput
52
+            name="value"
53
+            title="鱼市昵称"
54
+            type="text"
55
+            placeholder="请输入鱼市昵称"
56
+            value={this.state.nickName}
57
+            onChange={this.handleNickNameChange.bind(this)}
58
+          />
59
+          <AtInput
60
+          border={false}  
61
+            name="value"
62
+            title="手机号"
63
+            type="text"
64
+            placeholder="请输入手机号"
65
+            value={this.state.phone}
66
+            onChange={this.handlePhoneChange.bind(this)}
67
+          />
68
+        </View>
69
+        {/* 提交按钮 */}
70
+        <View className="info-edit-submit">
71
+          <Text className="info-edit-submit-text">提交</Text>
72
+        </View>
73
+      </View>
74
+    );
75
+  }
76
+}

+ 53 - 0
src/pages/infoEdit/index.less

@@ -0,0 +1,53 @@
1
+.index{
2
+    padding-top: 67px;
3
+    background-color: #f5f5f5;
4
+    min-height: 100vh;
5
+    // 头像
6
+    .info-edit{
7
+        display: flex;
8
+        flex-direction: column;
9
+        align-items: center;
10
+        justify-content: center;
11
+        margin-bottom: 36px;
12
+        .info-edit-img{
13
+            width: 210px;
14
+            height: 210px;
15
+            border-radius: 50%;
16
+            margin-bottom: 14px;
17
+        }
18
+        .info-edit-title{
19
+            line-height: 41px;
20
+            font-size: 28px;
21
+            color: #F09A31;
22
+        }
23
+    }
24
+    // 内容
25
+    .info-edit-content{
26
+        margin: 0 16px;
27
+        border-radius: 20px;
28
+        overflow: hidden;
29
+        padding: 0 20px;
30
+        background-color: #fff;
31
+        .at-input__title{
32
+            font-size: 28px;
33
+            color: #222222;
34
+        }
35
+    }
36
+    // 提交按钮
37
+    .info-edit-submit{
38
+        position: fixed;
39
+        bottom: 30px;
40
+        left: 0;
41
+        right: 0;
42
+        margin: 0 16px;
43
+        background-color: #f6c71a;
44
+        border-radius: 70px;
45
+        height: 88px;
46
+        font-size: 28px;
47
+        color: #000000;
48
+        font-weight: 700;
49
+        display: flex;
50
+        justify-content: center;
51
+        align-items: center;
52
+    }
53
+}

+ 103 - 14
src/pages/member/index.jsx

@@ -1,24 +1,113 @@
1
-import { Component } from 'react'
2
-import { View, Text } from '@tarojs/components'
3
-import './index.less'
4
-
1
+import { Component } from "react";
2
+import { View, Text, Image } from "@tarojs/components";
3
+import { AtIcon } from "taro-ui";
4
+import Taro from "@tarojs/taro";
5
+import "./index.less";
6
+import vip from "../../images/member/vip.png";
7
+import home from "../../images/nav/home.png";
8
+import toDetail from "../../images/member/toDetail.png";
9
+import warning from "../../images/member/warning.png";
10
+import withdrawable from "../../images/member/withdrawable.png";
11
+import order from "../../images/member/order.png";
5 12
 export default class Index extends Component {
13
+  componentWillMount() {}
6 14
 
7
-  componentWillMount () { }
8
-
9
-  componentDidMount () { }
15
+  componentDidMount() {}
10 16
 
11
-  componentWillUnmount () { }
17
+  componentWillUnmount() {}
12 18
 
13
-  componentDidShow () { }
19
+  componentDidShow() {}
14 20
 
15
-  componentDidHide () { }
21
+  componentDidHide() {}
16 22
 
17
-  render () {
23
+  render() {
18 24
     return (
19
-      <View className='index'>
20
-        <Text>会员</Text>
25
+      <View className="member">
26
+        <View className="member-bg"></View>
27
+        <View className="member-content">
28
+          {/* 会员信息卡 */}
29
+          <View className="member-info-card">
30
+            <View className="member-info-card-header">
31
+              <Image className="avatar" src="" />
32
+              <View className="member-info-card-header-text">
33
+                <Text className="user-name">会员</Text>
34
+                <View className="member-info-card-header-text-level">
35
+                  <Text className="level-text">店长</Text>
36
+                  <Image className="level-icon" src={vip} />
37
+                </View>
38
+              </View>
39
+            </View>
40
+            {/* 我的小店 */}
41
+            <View onClick={() => Taro.navigateTo({ url: `/pages/storeManagement/index?isManager=${true}` })} className="my-shop">
42
+              <Image className="my-shop-icon" src={home} />
43
+              <Text className="my-shop-text">我的小店</Text>
44
+            </View>
45
+          </View>
46
+          {/* 预估收益 */}
47
+          <View className="estimated-income">
48
+            <Text className="estimated-income-title">预估收益</Text>
49
+            <View className="estimated-income-content">
50
+              <View className="income-item">
51
+                <Text className="amount">0.00</Text>
52
+                <Text className="label">今日预估收益</Text>
53
+              </View>
54
+              <View className="divider"></View>
55
+              <View className="income-item">
56
+                <Text className="amount">0.00</Text>
57
+                <Text className="label">累计收益</Text>
58
+              </View>
59
+            </View>
60
+            <view onClick={() => Taro.navigateTo({ url: `/pages/earningsDetail/index` })} className="estimated-income-detail">
61
+              收益详情
62
+              <Image className="to-detail" src={toDetail} />
63
+            </view>
64
+          </View>
65
+          {/* 可提现金额 */}
66
+          <View className="withdrawable-amount">
67
+            <View className="withdrawable-amount-header">
68
+              <Image className="withdrawable-amount-icon" src={withdrawable} />
69
+              <Text className="withdrawable-amount-title">可提现金额</Text>
70
+            </View>
71
+            <View className="withdrawable-amount-content">
72
+              <View className="left">
73
+                <Text className="amount">¥0.00</Text>
74
+                <View className="warning-icon-box">
75
+                  <Image className="warning-icon" src={warning} />
76
+                  <Text className="warning-text">未完成提现认证</Text>
77
+                </View>
78
+              </View>
79
+              <View className="right">点击提现</View>
80
+            </View>
81
+          </View>
82
+          {/* 今日订单 */}
83
+          <View className="today-order">
84
+            <View className="today-order-header">
85
+              <View className="today-order-header-left">
86
+                <Image className="today-order-icon" src={order} />
87
+                <Text className="today-order-title">今日订单</Text>
88
+              </View>
89
+              <View className="today-order-header-right">
90
+                历史订单
91
+                <AtIcon value='chevron-right' size='10' color='#A1A1A1'></AtIcon>
92
+              </View>
93
+            </View>
94
+            <View className="today-order-content">
95
+              <View className="order-item">
96
+                <Text className="label">订单总量</Text>
97
+                <Text className="amount">0</Text>
98
+              </View>
99
+              <View className="order-item">
100
+                <Text className="label">推广订单</Text>
101
+                <Text className="amount">0</Text>
102
+              </View>
103
+              <View className="order-item">
104
+                <Text className="label">购买历史</Text>
105
+                <Text className="amount">0</Text>
106
+              </View>
107
+            </View>
108
+          </View>
109
+        </View>
21 110
       </View>
22
-    )
111
+    );
23 112
   }
24 113
 }

+ 318 - 0
src/pages/member/index.less

@@ -0,0 +1,318 @@
1
+.member {
2
+    position: relative;
3
+    min-height: 100vh;
4
+    background-color: #f9f9f9;
5
+
6
+    .member-bg {
7
+        position: absolute;
8
+        top: 0;
9
+        left: 0;
10
+        width: 750px;
11
+        height: 284px;
12
+        background: #FFE2AB;
13
+        border-radius: 0 0 0 150px;
14
+        z-index: 1;
15
+    }
16
+
17
+    .member-content {
18
+        position: relative;
19
+        padding: 0 16px;
20
+        z-index: 2;
21
+        padding-top: 18px;
22
+    }
23
+
24
+    //   会员信息卡
25
+    .member-info-card {
26
+        display: flex;
27
+        flex-direction: column;
28
+        align-items: center;
29
+        background-color: #fefaef;
30
+        border-radius: 20px;
31
+
32
+        .member-info-card-header {
33
+            height: 385px;
34
+            padding-top: 101px;
35
+            box-sizing: border-box;
36
+
37
+            .avatar {
38
+                width: 170px;
39
+                height: 170px;
40
+                border-radius: 50%;
41
+                background-color: red;
42
+            }
43
+
44
+            .member-info-card-header-text {
45
+                margin-top: 16px;
46
+                display: flex;
47
+                align-items: center;
48
+
49
+                .user-name {
50
+                    font-size: 34px;
51
+                    line-height: 40px;
52
+                    font-weight: 500;
53
+                    color: #000000;
54
+                }
55
+
56
+                .member-info-card-header-text-level {
57
+                    width: 100px;
58
+                    height: 36px;
59
+                    position: relative;
60
+                    display: flex;
61
+                    align-items: center;
62
+                    padding-left: 45px;
63
+                    box-sizing: border-box;
64
+                    margin-left: 14px;
65
+
66
+                    .level-text {
67
+                        font-size: 16px;
68
+                        line-height: 40px;
69
+                        color: #000000;
70
+                        z-index: 1;
71
+                    }
72
+
73
+                    .level-icon {
74
+                        width: 100px;
75
+                        height: 36px;
76
+                        position: absolute;
77
+                        right: 0;
78
+                        top: 0;
79
+                    }
80
+                }
81
+            }
82
+        }
83
+
84
+        // 我的小店
85
+        .my-shop {
86
+            width: 100%;
87
+            height: 92px;
88
+            background-color: #fff5dc;
89
+            display: flex;
90
+            align-items: center;
91
+            justify-content: center;
92
+
93
+            image {
94
+                height: 30px;
95
+                width: 30px;
96
+                margin-right: 10px;
97
+            }
98
+
99
+            text {
100
+                font-size: 24px;
101
+                line-height: 40px;
102
+                color: #000000;
103
+            }
104
+        }
105
+    }
106
+
107
+    // 预估收益
108
+    .estimated-income {
109
+        background: #FFFFFF;
110
+        border-radius: 20px;
111
+        padding: 24px;
112
+        margin-top: 16px;
113
+
114
+        &-title {
115
+            font-size: 28px;
116
+            color: #3D3D3D;
117
+            margin-bottom: 30px;
118
+            line-height: 40px;
119
+            font-weight: 700;
120
+        }
121
+
122
+        &-content {
123
+            display: flex;
124
+            align-items: center;
125
+            justify-content: center;
126
+            padding: 0 55px;
127
+            margin-top: 30px;
128
+
129
+            .income-item {
130
+                flex: 1;
131
+                text-align: center;
132
+                display: flex;
133
+                flex-direction: column;
134
+
135
+                .amount {
136
+                    font-size: 36px;
137
+                    font-weight: bold;
138
+                    color: #FF8119;
139
+                    line-height: 40px;
140
+
141
+                }
142
+
143
+                .label {
144
+                    font-size: 26px;
145
+                    color: #222222;
146
+                    line-height: 40px;
147
+                    margin-top: 11px;
148
+                }
149
+            }
150
+
151
+            .divider {
152
+                width: 0;
153
+                height: 80px;
154
+                border-left: 2px solid #D8D8D8;
155
+                margin: 0 20px;
156
+            }
157
+        }
158
+
159
+        &-detail {
160
+            display: flex;
161
+            align-items: center;
162
+            justify-content: center;
163
+            width: 100%;
164
+            text-align: center;
165
+            font-size: 24px;
166
+            color: #E79945;
167
+            margin-top: 40px;
168
+
169
+            .to-detail {
170
+                width: 22px;
171
+                height: 21px;
172
+                margin-left: 8px;
173
+            }
174
+        }
175
+    }
176
+
177
+    // 可提现金额
178
+    .withdrawable-amount {
179
+        margin-top: 20px;
180
+        .withdrawable-amount-header {
181
+            display: flex;
182
+            align-items: center;
183
+            margin-bottom: 12px;
184
+            .withdrawable-amount-icon {
185
+                width: 36px;
186
+                height: 36px;
187
+            }
188
+
189
+            .withdrawable-amount-title {
190
+                font-size: 28px;
191
+                color: #000000;
192
+                line-height: 40px;
193
+                font-weight: 700;
194
+                margin-left: 10px;
195
+            }
196
+        }
197
+
198
+        .withdrawable-amount-content {
199
+            height: 90px;
200
+            width: 100%;
201
+            background-color: #fff;
202
+            display: flex;
203
+            justify-content: space-between;
204
+            align-items: center;
205
+            padding: 0 23px 0 15px;
206
+            box-sizing: border-box;
207
+
208
+            .left {
209
+                display: flex;
210
+                align-items: center;
211
+
212
+                .amount {
213
+                    font-size: 24px;
214
+                    color: #000000;
215
+                    line-height: 40px;
216
+                }
217
+
218
+                .warning-icon-box {
219
+                    display: flex;
220
+                    margin-left: 10px;
221
+                    align-items: center;
222
+                    padding: 0 14px;
223
+                    box-sizing: border-box;
224
+                    background-color: #fff4e7;
225
+                    border-radius: 26px;
226
+                    .warning-text {
227
+                        font-size: 24px;
228
+                        color: #FF8119;
229
+                        line-height: 40px;
230
+                    }
231
+                    .warning-icon {
232
+                        width: 24px;
233
+                        height: 24px;
234
+                        margin-right: 10px;
235
+                    }
236
+                }
237
+            }
238
+            .right{
239
+                display: flex;
240
+                align-items: center;
241
+                justify-content: center;
242
+                width: 138px;
243
+                height: 44px;
244
+                background-color: #f7f3f3;
245
+                border-radius: 26px;
246
+                font-size: 22px;
247
+                line-height: 40px;
248
+            }
249
+        }
250
+    }
251
+
252
+    // 今日订单
253
+    .today-order {
254
+        margin-top: 20px;
255
+        .today-order-header {
256
+            display: flex;
257
+            align-items: center;
258
+            justify-content: space-between;
259
+            margin-bottom: 12px;
260
+            .today-order-header-left{
261
+                display: flex;
262
+                align-items: center;
263
+                .today-order-icon {
264
+                    width: 36px;
265
+                    height: 36px;
266
+                }
267
+    
268
+                .today-order-title {
269
+                    font-size: 28px;
270
+                    color: #000000;
271
+                    line-height: 40px;
272
+                    font-weight: 700;
273
+                    margin-left: 10px;
274
+                }
275
+            }
276
+            .today-order-header-right{
277
+                font-size: 22px;
278
+                color: #A1A1A1;
279
+                line-height: 40px;
280
+                margin-right: 10px;
281
+                display: flex;
282
+                align-items: center;
283
+            }
284
+        }
285
+        .today-order-content {
286
+            width: 100%;
287
+            height: 142px;
288
+            border-radius: 20px;
289
+            background-color: #fff;
290
+            padding: 0 20px;
291
+            box-sizing: border-box;
292
+            display: flex;
293
+            justify-content: space-between;
294
+            align-items: center;
295
+
296
+            .order-item {
297
+                flex: 1;
298
+                display: flex;
299
+                flex-direction: column;
300
+                align-items: center;
301
+                justify-content: space-between;
302
+
303
+                .label {
304
+                    font-size: 24px;
305
+                    color: #A1A1A1;
306
+                    line-height: 40px;
307
+                }
308
+
309
+                .amount {
310
+                    font-size: 28px;
311
+                    font-weight: 700;
312
+                    color: #000000;
313
+                    line-height: 40px;
314
+                }
315
+            }
316
+        }
317
+    }
318
+}

+ 1 - 1
src/pages/mine/index.config.js

@@ -1,3 +1,3 @@
1 1
 export default definePageConfig({
2
-  navigationBarTitleText: '我的'
2
+  navigationBarTitleText: '鱼市'
3 3
 })

+ 44 - 13
src/pages/mine/index.jsx

@@ -1,23 +1,54 @@
1 1
 import { Component } from 'react'
2
-import { View, Text } from '@tarojs/components'
2
+import Taro from '@tarojs/taro'
3
+import { View, Text, Image } from '@tarojs/components'
4
+import { AtList, AtListItem } from "taro-ui"
3 5
 import './index.less'
4
-
6
+import loginOut from '../../images/mine/loginOut.png'
7
+import edit from '../../images/mine/edit.png'
8
+import norm from '../../images/mine/norm.png'
5 9
 export default class Index extends Component {
6
-
7
-  componentWillMount () { }
8
-
9
-  componentDidMount () { }
10
-
11
-  componentWillUnmount () { }
12
-
13
-  componentDidShow () { }
14
-
15
-  componentDidHide () { }
10
+  handleLogout = () => {
11
+    Taro.showModal({
12
+      title: '',
13
+      content: '退出后,请重新登录!',
14
+      cancelText: '暂不退出',
15
+      confirmText: '退出登录',
16
+      cancelColor: '#000000',
17
+      confirmColor: '#F6C71A',
18
+      success: function (res) {
19
+        if (res.confirm) {
20
+          console.log('用户点击退出登录')
21
+        }
22
+      }
23
+    })
24
+  }
16 25
 
17 26
   render () {
18 27
     return (
19 28
       <View className='index'>
20
-        <Text>我的</Text>
29
+        {/* 个人信息 */}
30
+        <View className="info">
31
+          <Image src='' className="avatar" />
32
+          <View className="info-right">
33
+            <View className='user-info'>
34
+            <View className="name">张三</View>
35
+            <View className="account">138001</View>
36
+            </View>
37
+            <Image className='edit-icon' src={edit}></Image>
38
+          </View>
39
+        </View>
40
+        {/* 功能 */}
41
+        <View className='function'>
42
+          <AtList>
43
+            <AtListItem title='用户规范' arrow='right' thumb={norm}/>
44
+            <AtListItem 
45
+              title='退出登录' 
46
+              arrow='right' 
47
+              thumb={loginOut}
48
+              onClick={this.handleLogout}
49
+            />
50
+          </AtList>
51
+        </View>
21 52
       </View>
22 53
     )
23 54
   }

+ 73 - 0
src/pages/mine/index.less

@@ -0,0 +1,73 @@
1
+.index {
2
+    background-color: #f5f5f5;
3
+    padding: 0 16px;
4
+    box-sizing: border-box;
5
+    min-height: 100vh;
6
+
7
+    .info {
8
+        height: 170px;
9
+        display: flex;
10
+        align-items: center;
11
+        padding: 0 18px;
12
+        box-sizing: border-box;
13
+        justify-content: space-between;
14
+
15
+        .avatar {
16
+            width: 116px;
17
+            height: 116px;
18
+            border-radius: 50%;
19
+            margin-right: 18px;
20
+            background-color: red;
21
+        }
22
+
23
+        .info-right {
24
+            display: flex;
25
+            align-items: center;
26
+            justify-content: space-between;
27
+            flex: 1;
28
+
29
+            .user-info {
30
+                color: #000000;
31
+
32
+                .name {
33
+                    font-size: 34px;
34
+                    line-height: 49px;
35
+                }
36
+
37
+                .account {
38
+                    font-size: 28px;
39
+                    line-height: 41px;
40
+                }
41
+            }
42
+
43
+            .edit-icon {
44
+                width: 28px;
45
+                height: 28px;
46
+            }
47
+        }
48
+    }
49
+
50
+    // 功能
51
+    .function {
52
+        border-radius: 20px;
53
+        overflow: hidden;
54
+        background-color: #ffffff;
55
+
56
+        .at-list__item .item-extra__icon-arrow {
57
+            font-size: 44px;
58
+        }
59
+
60
+        .at-list__item--thumb .item-thumb {
61
+            width: 40px;
62
+            height: 40px;
63
+        }
64
+
65
+        .item-content__info-title {
66
+            font-size: 28px;
67
+            color: #000000;
68
+        }
69
+        .at-list__item{
70
+            padding: 31px 17px;
71
+        }
72
+    }
73
+}

+ 3 - 0
src/pages/productClassify/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '商品分类'
3
+})

+ 46 - 0
src/pages/productClassify/index.jsx

@@ -0,0 +1,46 @@
1
+import { Component } from "react";
2
+import { View, Text } from "@tarojs/components";
3
+import { AtTabs, AtTabsPane } from "taro-ui";
4
+import "./index.less";
5
+import Taro from "@tarojs/taro";
6
+import ProductList from '../../components/index/ProductList'
7
+
8
+export default class Index extends Component {
9
+  state = {
10
+    current: 0, // 当前选中的标签页索引
11
+    tabList: [
12
+      { title: "全部商品" },
13
+      { title: "选项2" },
14
+      { title: "选项3" },
15
+      { title: "选项4" },
16
+    ], // 标签页列表
17
+  };
18
+  handleClick(value) {
19
+    this.setState({
20
+      current: value,
21
+    });
22
+  }
23
+  render() {
24
+    return (
25
+      <View className="index">
26
+        <AtTabs
27
+          current={this.state.current}
28
+          tabList={this.state.tabList}
29
+          onClick={this.handleClick.bind(this)}
30
+        >
31
+          {this.state.tabList.map((tab, index) => (
32
+            <AtTabsPane current={this.state.current} index={index} key={index}>
33
+              <View className="tab-content">
34
+                <ProductList />
35
+              </View>
36
+            </AtTabsPane>
37
+          ))}
38
+        </AtTabs>
39
+        {/* 底部按钮 */}
40
+        <View onClick={() => Taro.navigateBack()} className="bottom-button">
41
+          返回店铺首页
42
+        </View>
43
+      </View>
44
+    );
45
+  }
46
+}

+ 37 - 0
src/pages/productClassify/index.less

@@ -0,0 +1,37 @@
1
+.index {
2
+    min-height: 100vh;
3
+    background-color: #f9f9f9;
4
+    padding-bottom: 100px;
5
+    padding-top: 80px;
6
+    .at-tabs__header{
7
+        position: fixed;
8
+        top: 0;
9
+        width: 100%;
10
+        z-index: 1;
11
+    }
12
+    .at-tabs__item {
13
+        color: #787878;
14
+    }
15
+
16
+    .at-tabs__item--active {
17
+        color: #000000 !important;
18
+    }
19
+
20
+    .at-tabs__item-underline {
21
+        background-color: #f3e801;
22
+    }
23
+
24
+    .bottom-button {
25
+        width: 100%;
26
+        height: 88px;
27
+        background-color: #F6C71A;
28
+        font-weight: 700;
29
+        font-size: 28px;
30
+        color: #3D3D3D;
31
+        display: flex;
32
+        align-items: center;
33
+        justify-content: center;
34
+        position: fixed;
35
+        bottom: 0;
36
+    }
37
+}

+ 3 - 0
src/pages/productDetail/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationStyle: 'custom'
3
+})

+ 213 - 0
src/pages/productDetail/index.jsx

@@ -0,0 +1,213 @@
1
+import { Component } from "react";
2
+import { View, Text, Swiper, SwiperItem, Image } from "@tarojs/components";
3
+import { AtIcon } from "taro-ui";
4
+import "./index.less";
5
+import Taro from "@tarojs/taro";
6
+import productDetailIcon from "../../images/productDetail/productDetailIcon.png";
7
+import like from "../../images/productDetail/like.png";
8
+import home from "../../images/nav/home.png";
9
+import selfBuy from "../../images/productDetail/selfBuy.png";
10
+import share from "../../images/productDetail/share.png";
11
+import ProductCard from "../../components/ProductCard"; //产品卡片
12
+import Modal from "../../components/Modal"; //弹窗
13
+
14
+export default class Index extends Component {
15
+  state = {
16
+    isShare: false, //是否是分享
17
+    isOpened: false, //是否打开弹窗
18
+    productList: [
19
+      {
20
+        id: 1,
21
+        name: "青岛大虾",
22
+        price: 99.9,
23
+        originalPrice: 159.9,
24
+        image: "https://example.com/img1.jpg",
25
+        sales: 1234,
26
+        tag: "热销",
27
+      },
28
+      {
29
+        id: 2,
30
+        name: "三文鱼刺身",
31
+        price: 158,
32
+        originalPrice: 198,
33
+        image: "https://example.com/img2.jpg",
34
+        sales: 856,
35
+        tag: "新品",
36
+      },
37
+      {
38
+        id: 3,
39
+        name: "帝王蟹",
40
+        price: 299,
41
+        originalPrice: 399,
42
+        image: "https://example.com/img3.jpg",
43
+        sales: 566,
44
+        tag: "限时",
45
+      },
46
+    ],
47
+  };
48
+
49
+  componentWillMount() {}
50
+
51
+  componentDidMount() {}
52
+
53
+  componentWillUnmount() {}
54
+
55
+  componentDidShow() {}
56
+
57
+  componentDidHide() {}
58
+
59
+  // 复制商品编号
60
+  handleCopy = (text) => {
61
+    Taro.setClipboardData({
62
+      data: text,
63
+      success: () => {
64
+        Taro.showToast({
65
+          title: "复制成功",
66
+          icon: "success",
67
+        });
68
+      },
69
+    });
70
+  };
71
+
72
+  // 添加跳转首页方法
73
+  handleToHome = () => {
74
+    Taro.switchTab({
75
+      url: "/pages/index/index",
76
+    });
77
+  };
78
+
79
+  // 立即购买
80
+  handleBuy = () => {
81
+    console.log(111);
82
+
83
+    this.setState({
84
+      isOpened: true,
85
+    });
86
+  };
87
+
88
+  // 添加返回方法
89
+  handleBack = () => {
90
+    const pages = Taro.getCurrentPages();
91
+    if (pages.length > 1) {
92
+      Taro.navigateBack();
93
+    }
94
+  };
95
+
96
+  render() {
97
+    return (
98
+      <View
99
+        className="index"
100
+        style={{ paddingTop: Taro.navigationBarHeight + "px" }}
101
+      >
102
+        {!this.state.isShare && (
103
+          <View className="back-btn" onClick={this.handleBack}>
104
+            <AtIcon value="chevron-left" size="24" color="#999999"></AtIcon>
105
+          </View>
106
+        )}
107
+        {/* 轮播图 */}
108
+        <Swiper className="swiper" autoplay circular>
109
+          <SwiperItem>
110
+            <Image className="swiper-img" src="图片地址1" mode="aspectFill" />
111
+          </SwiperItem>
112
+          {/* 可以添加更多 SwiperItem */}
113
+        </Swiper>
114
+
115
+        {/* 商品详情模块 */}
116
+        <View className="product-info">
117
+          {/* 商品名称 */}
118
+          <Text className="product-name">
119
+            <Text className="self-tag">自营</Text>
120
+            商品名称
121
+          </Text>
122
+
123
+          {/* 价格和标签行 */}
124
+          <View className="price-tag-row">
125
+            {/* 价格区域 */}
126
+            <View className="price-box">
127
+              <Text className="current-price">
128
+                <Text className="currency">¥</Text>
129
+                299
130
+              </Text>
131
+              <Text className="original-price">¥399</Text>
132
+            </View>
133
+            {/* 标签区域 */}
134
+            <View className="tag-box">
135
+              <Text className="tag">分享赚¥1.51</Text>
136
+            </View>
137
+          </View>
138
+
139
+          {/* 分割线 */}
140
+          <View className="divider" />
141
+
142
+          {/* 商品编号行 */}
143
+          <View className="product-number-row">
144
+            <Text className="number-label">商品编号:123456</Text>
145
+            <Text
146
+              className="copy-btn"
147
+              onClick={() => this.handleCopy("123456")}
148
+            >
149
+              复制
150
+            </Text>
151
+          </View>
152
+        </View>
153
+        {/* 商品标签模块 */}
154
+        <View className="product-tag-row">
155
+          <View className="tag-item">
156
+            <Image src={productDetailIcon} mode="aspectFit" />
157
+            <Text className="tag-text">渔市商品</Text>
158
+          </View>
159
+          <View className="tag-item">
160
+            <Image src={productDetailIcon} mode="aspectFit" />
161
+            <Text className="tag-text">品质保证</Text>
162
+          </View>
163
+          <View className="tag-item">
164
+            <Image src={productDetailIcon} mode="aspectFit" />
165
+            <Text className="tag-text">无忧售后</Text>
166
+          </View>
167
+        </View>
168
+        {/* 猜你喜欢 */}
169
+        <View className="guess-you-like">
170
+          <Image src={like} mode="aspectFit" />
171
+          <Text className="title">猜你喜欢</Text>
172
+        </View>
173
+        {/* 猜你喜欢产品列表 */}
174
+        <View className="product-card-list">
175
+          {this.state.productList.map((product) => (
176
+            <ProductCard key={product.id} product={product} />
177
+          ))}
178
+        </View>
179
+        {/* 底部购买模块 */}
180
+        <View className="bottom-buy">
181
+          <View onClick={this.handleToHome} className="bottom-buy-left">
182
+            <Image src={home} mode="aspectFit" />
183
+            <Text className="bottom-buy-text">首页</Text>
184
+          </View>
185
+          <View className="bottom-buy-right">
186
+            {!this.state.isShare ? (
187
+              <>
188
+                <View className="bottom-buy-right-self">
189
+                  <Image src={share} mode="aspectFit" />
190
+                  <Text className="bottom-buy-text">分享赚</Text>
191
+                </View>
192
+                <View className="bottom-buy-right-share">
193
+                  <Image src={selfBuy} mode="aspectFit" />
194
+                  <Text className="bottom-buy-text">自购省</Text>
195
+                </View>
196
+              </>
197
+            ) : (
198
+              <View onClick={this.handleBuy} className="bottom-buy-right-btn">
199
+                <Text className="bottom-buy-text">立即购买</Text>
200
+              </View>
201
+            )}
202
+          </View>
203
+        </View>
204
+        {/* 分享弹窗 */}
205
+        <Modal
206
+          linkText="阿拉山口监督卡监督卡就"
207
+          title="咸鱼口令已复制"
208
+          isOpened={this.state.isOpened}
209
+        />
210
+      </View>
211
+    );
212
+  }
213
+}

+ 249 - 0
src/pages/productDetail/index.less

@@ -0,0 +1,249 @@
1
+.index {
2
+    background-color: #f9f9f9;
3
+    min-height: 100vh;
4
+    padding-bottom: 140px;
5
+
6
+    .swiper {
7
+        width: 100%;
8
+        height: 730px;
9
+        background-color: red;
10
+        .swiper-img {
11
+            width: 100%;
12
+            height: 100%;
13
+        }
14
+    }
15
+
16
+    //   商品详情
17
+    .product-info {
18
+        padding: 17px;
19
+        border-radius: 20px;
20
+        background-color: #fff;
21
+        margin: 16px 16px 0 16px;
22
+
23
+        .product-name {
24
+            font-size: 32px;
25
+            line-height: 46px;
26
+            font-weight: 700;
27
+
28
+            .self-tag {
29
+                display: inline-block;
30
+                padding: 2px 8px;
31
+                background: #FFD43A;
32
+                border-radius: 4px;
33
+                color: #803A04;
34
+                font-size: 24px;
35
+                line-height: 28px;
36
+                margin-right: 8px;
37
+                vertical-align: middle;
38
+            }
39
+        }
40
+
41
+        .price-tag-row {
42
+            margin-top: 16px;
43
+            display: flex;
44
+            justify-content: space-between;
45
+            align-items: center;
46
+
47
+            .price-box {
48
+                .current-price {
49
+                    font-size: 36px;
50
+                    color: #FF1D17;
51
+                    margin-right: 7px;
52
+                    line-height: 35px;
53
+
54
+                    .currency {
55
+                        font-size: 24px;
56
+                    }
57
+                }
58
+
59
+                .original-price {
60
+                    font-size: 26px;
61
+                    line-height: 38px;
62
+                    color: #ABABAB;
63
+                    text-decoration: line-through;
64
+                }
65
+            }
66
+
67
+            .tag-box {
68
+                .tag {
69
+                    padding: 2px 17px;
70
+                    border-radius: 20px;
71
+                    font-size: 24px;
72
+                    line-height: 38px;
73
+                    border: 1px solid #FF1D17;
74
+                    color: #FF1D17;
75
+                }
76
+            }
77
+        }
78
+
79
+        .divider {
80
+            height: 1px;
81
+            background: #D8D8D8;
82
+            margin: 12px 0;
83
+        }
84
+
85
+        .product-number-row {
86
+            display: flex;
87
+            align-items: center;
88
+
89
+            .number-label {
90
+                color: #ABABAB;
91
+                font-size: 26px;
92
+                margin-right: 10px;
93
+            }
94
+
95
+            .copy-btn {
96
+                color: #FF311B;
97
+                font-size: 28px;
98
+            }
99
+        }
100
+    }
101
+
102
+    //   商品标签
103
+    .product-tag-row {
104
+        margin: 20px 16px 0 16px;
105
+        display: flex;
106
+        justify-content: space-between;
107
+        padding: 22px 17px;
108
+        box-sizing: border-box;
109
+        background-color: #fff;
110
+        border-radius: 20px;
111
+
112
+        .tag-item {
113
+            display: flex;
114
+            align-items: center;
115
+
116
+            .tag-text {
117
+                font-size: 24px;
118
+                color: #666666;
119
+                line-height: 35px;
120
+            }
121
+
122
+            image {
123
+                width: 24px;
124
+                height: 24px;
125
+                margin-right: 4px;
126
+            }
127
+        }
128
+    }
129
+
130
+    //   猜你喜欢
131
+    .guess-you-like {
132
+        display: flex;
133
+        align-items: center;
134
+        justify-content: center;
135
+        padding: 20px 0;
136
+        margin: 20px 16px 0 16px;
137
+        background-color: #fff;
138
+        border-radius: 20px;
139
+
140
+        image {
141
+            width: 34px;
142
+            height: 34px;
143
+            margin-right: 5px;
144
+        }
145
+
146
+        .title {
147
+            color: #000000;
148
+            line-height: 36px;
149
+            font-size: 31px;
150
+            font-weight: 500;
151
+        }
152
+    }
153
+
154
+    // 底部购买模块
155
+    .bottom-buy {
156
+        width: 100%;
157
+        background-color: #fff;
158
+        height: 126px;
159
+        padding: 19px 35px 19px 44px;
160
+        box-sizing: border-box;
161
+        position: fixed;
162
+        bottom: 0;
163
+        display: flex;
164
+        justify-content: space-between;
165
+        align-items: center;
166
+        .bottom-buy-left {
167
+            display: flex;
168
+            flex-direction: column;
169
+
170
+            image {
171
+                width: 38px;
172
+                height: 36px;
173
+                margin-bottom: 7px;
174
+            }
175
+
176
+            .bottom-buy-text {
177
+                font-size: 22px;
178
+                line-height: 32px;
179
+                color: #000000;
180
+            }
181
+        }
182
+        .bottom-buy-right {
183
+            width: 576px;
184
+            height: 100%;
185
+            display: flex;
186
+            border-radius: 60px;
187
+            overflow: hidden;
188
+            .bottom-buy-right-self,.bottom-buy-right-share{
189
+                line-height: 43px;
190
+                font-size: 30px;
191
+                width: 50%;
192
+                display: flex;
193
+                justify-content: center;
194
+                align-items: center;
195
+                image{
196
+                    margin-right: 9px;
197
+                }
198
+            }
199
+            .bottom-buy-right-self{
200
+                background-color: #fbe00f;
201
+                color: #000000;
202
+                image{
203
+                    width: 47px;
204
+                    height: 46px;
205
+                }
206
+            }
207
+            .bottom-buy-right-share{
208
+                background-color: #ff1c14;
209
+                color: #fff;
210
+                image{
211
+                    width: 45px;
212
+                    height: 31px;
213
+                }
214
+            }
215
+        }
216
+        .bottom-buy-right-btn{
217
+            width: 586px;
218
+            height: 100%;
219
+            background: linear-gradient(90deg, #ff881b 0%, #fe6234 100%);
220
+            border-radius: 60px;
221
+            display: flex;
222
+            justify-content: center;
223
+            align-items: center;
224
+            .bottom-buy-text{
225
+                color: #fff;
226
+                font-size: 28px;
227
+                line-height: 41px;
228
+                font-weight: 700;
229
+            }
230
+        }
231
+    }
232
+
233
+    .back-btn {
234
+        position: fixed;
235
+        left: 20px;
236
+        top: calc(20px + var(--taro-navigationBarHeight));
237
+        width: 72px;
238
+        height: 72px;
239
+        padding-right: 6px;
240
+        padding-top: 4px;
241
+        box-sizing: border-box;
242
+        background: rgba(255, 255, 255, 0.5);
243
+        border-radius: 50%;
244
+        display: flex;
245
+        align-items: center;
246
+        justify-content: center;
247
+        z-index: 100;
248
+    }
249
+}

+ 3 - 0
src/pages/productManagement/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '商品管理'
3
+})

+ 143 - 0
src/pages/productManagement/index.jsx

@@ -0,0 +1,143 @@
1
+import { Component } from "react";
2
+import { View, Picker, Image, Text } from "@tarojs/components";
3
+import { AtTabs, AtTabsPane, AtCheckbox } from "taro-ui";
4
+import Taro from "@tarojs/taro";
5
+import "./index.less";
6
+import ProductList from "../../components/index/ProductList"; //商品列表
7
+import add from "../../images/productManagement/add.png";
8
+import back from "../../images/productManagement/back.png";
9
+import manger from "../../images/productManagement/manger.png";
10
+import selectIcon from "../../images/productManagement/selectIcon.png";
11
+import deleteIcon from "../../images/productManagement/delete.png";
12
+import toTop from "../../images/productManagement/toTop.png";
13
+export default class Index extends Component {
14
+  state = {
15
+    isManagementStatus: false, //是否是管理状态
16
+    current: 0, //tabs坐标
17
+    isSelectAll: false, //是否全选
18
+    selectedOption: "全部商品", //商品默认名称
19
+    tabList: [{ title: "在售中 (20)" }], //tabs标题
20
+    options: ["全部商品", "选项2", "选项3"], //商品下拉选项
21
+    checkedList: [""], //全选
22
+    checkboxOption: [
23
+      {
24
+        value: "allValue",
25
+        label: "全选",
26
+      },
27
+    ], //全选
28
+  };
29
+  // tabs切换
30
+  handleClick(value) {
31
+    this.setState({
32
+      current: value,
33
+    });
34
+  }
35
+  // 商品下拉选项
36
+  handleSelectOption = (e) => {
37
+    const selectedOption = this.state.options[e.detail.value];
38
+    this.setState({ selectedOption });
39
+  };
40
+  // 切换管理状态
41
+  changeManagement = (type) => {
42
+    if(type === 'management'){
43
+      this.setState({
44
+        isManagementStatus: true,
45
+      });
46
+    }else{
47
+      this.setState({
48
+        isManagementStatus: false,
49
+      });
50
+    }
51
+  };
52
+  // 全选
53
+  handleChange(value) {
54
+    this.setState({
55
+      checkedList: value,
56
+      isSelectAll:!this.state.isSelectAll
57
+    });
58
+  }
59
+  render() {
60
+    return (
61
+      <View className="index">
62
+        {/* tab分类 */}
63
+        <View className="tabs-list">
64
+          <AtTabs
65
+            tabList={this.state.tabList}
66
+            current={this.state.current}
67
+            scroll
68
+          >
69
+            <AtTabsPane current={this.state.current} index={0}>
70
+              {/* 内容 */}
71
+              <View className="tabs-content">
72
+                {/* 商品下拉分类 */}
73
+                <View className="product-category">
74
+                  <Picker
75
+                    mode="selector"
76
+                    range={this.state.options}
77
+                    onChange={this.handleSelectOption}
78
+                  >
79
+                    <View className="product-category-left">
80
+                      {this.state.selectedOption}
81
+                      <Image
82
+                        className="selectIcon"
83
+                        src={selectIcon}
84
+                        mode="aspectFit"
85
+                      />
86
+                    </View>
87
+                  </Picker>
88
+                  <View className="product-category-right">
89
+                    前6款商品将推荐给直属会员
90
+                  </View>
91
+                </View>
92
+                {/* 商品列表 */}
93
+                <ProductList isSelectAll={this.state.isSelectAll} isManagement={true} isManagementStatus={this.state.isManagementStatus}/>
94
+              </View>
95
+            </AtTabsPane>
96
+          </AtTabs>
97
+        </View>
98
+        {/* 底部购买模块 */}
99
+        {!this.state.isManagementStatus ? (
100
+          <View className="bottom-buy">
101
+            <View onClick={() => Taro.navigateBack()} className="bottom-buy-left">
102
+              <Image  src={back} mode="aspectFit" />
103
+              <Text className="bottom-buy-text">返回店铺</Text>
104
+            </View>
105
+            <View className="bottom-buy-right">
106
+              <View onClick={() => this.changeManagement('management')} className="bottom-buy-right-self">
107
+                <Image src={manger} mode="aspectFit" />
108
+                <Text className="bottom-buy-text">批量管理</Text>
109
+              </View>
110
+              <View onClick={() => Taro.navigateTo({ url: '/pages/productClassify/index' })} className="bottom-buy-right-share">
111
+                <Image src={add} mode="aspectFit" />
112
+                <Text className="bottom-buy-text">添加商品</Text>
113
+              </View>
114
+            </View>
115
+          </View>
116
+        ) : (
117
+          <View className="operation-product">
118
+            <View className="operation-product-top">
119
+              <View className="left">
120
+                <AtCheckbox
121
+                  options={this.state.checkboxOption}
122
+                  selectedList={this.state.checkedList}
123
+                  onChange={this.handleChange.bind(this)}
124
+                />
125
+              </View>
126
+              <View className="right">
127
+                <View className="item">
128
+                  <Image src={toTop} mode="aspectFit" />
129
+                  <Text>移至顶部</Text>
130
+                </View>
131
+                <View className="item">
132
+                  <Image src={deleteIcon} mode="aspectFit" />
133
+                  <Text>删除</Text>
134
+                </View>
135
+              </View>
136
+            </View>
137
+            <View onClick={() => this.changeManagement('finish')} className="operation-product-bottom">完成</View>
138
+          </View>
139
+        )}
140
+      </View>
141
+    );
142
+  }
143
+}

+ 197 - 0
src/pages/productManagement/index.less

@@ -0,0 +1,197 @@
1
+.index {
2
+    background-color: #f9f9f9;
3
+    min-height: 100vh;
4
+    .tabs-list {
5
+        box-sizing: border-box;
6
+        box-sizing: border-box;
7
+        background-color: #fff;
8
+        .at-tabs__header {
9
+            background-color: transparent;
10
+            height: 57px;
11
+            text-align: left;
12
+        padding-left: 22px;
13
+
14
+        }
15
+  
16
+        .at-tabs__item {
17
+          color: #000;
18
+          font-size: 26px;
19
+          padding: 0;
20
+          margin-right: 34px;
21
+          height: 100%;
22
+          &--active {
23
+            color: #F6C71A;
24
+            font-size: 28px;
25
+          }
26
+        }
27
+  
28
+        .at-tabs__item-underline {
29
+          background-color: #F6C71A;
30
+          height: 4px;
31
+          border-radius: 2px;
32
+          bottom: 0;
33
+          width: 80px;
34
+          left: 50%;
35
+          transform: translateX(-50%);
36
+        }
37
+        .at-tabs__underline {
38
+            display: none;
39
+        }
40
+        .tabs-content{
41
+            width: 100%;
42
+            border-radius: 0 0 20px 20px;
43
+            .product-category{
44
+                height: 74px;
45
+                width: 100%;
46
+                padding: 0 16px 0 37px;
47
+                box-sizing: border-box;
48
+                display: flex;
49
+                align-items: center;
50
+                justify-content: space-between;
51
+                background-color: #f9f9f9;
52
+                .product-category-left{
53
+                    color: #666666;
54
+                    font-size: 26px;
55
+                    line-height: 38px;
56
+                    display: flex;
57
+                    align-items: center;
58
+                    .selectIcon{
59
+                        height: 16px;
60
+                        width: 16px;
61
+                        margin-left: 8px;
62
+                    }
63
+                }
64
+                .product-category-right{
65
+                    color: #E5A17C;
66
+                    line-height: 35px;
67
+                    font-size: 24px;
68
+                }
69
+            }
70
+        }
71
+      }
72
+      // 底部购买模块
73
+      .bottom-buy {
74
+        width: 100%;
75
+        background-color: #fff;
76
+        height: 126px;
77
+        padding: 19px 22px 19px 32px;
78
+        box-sizing: border-box;
79
+        position: fixed;
80
+        bottom: 0;
81
+        display: flex;
82
+        justify-content: space-between;
83
+        align-items: center;
84
+        .bottom-buy-left {
85
+            display: flex;
86
+            align-items: center;
87
+            height: 100%;
88
+            image {
89
+                width: 38px;
90
+                height: 36px;
91
+                margin-right: 8px;
92
+            }
93
+
94
+            .bottom-buy-text {
95
+                font-size: 26px;
96
+                line-height: 38px;
97
+                color: #000000;
98
+            }
99
+        }
100
+        .bottom-buy-right {
101
+            width: 513px;
102
+            height: 100%;
103
+            display: flex;
104
+            border-radius: 60px;
105
+            overflow: hidden;
106
+            .bottom-buy-right-self,.bottom-buy-right-share{
107
+                line-height: 43px;
108
+                font-size: 30px;
109
+                width: 50%;
110
+                display: flex;
111
+                justify-content: center;
112
+                align-items: center;
113
+                image{
114
+                    margin-right: 9px;
115
+                }
116
+            }
117
+            .bottom-buy-right-self{
118
+                background-color: #fbe00f;
119
+                color: #000000;
120
+                image{
121
+                    width: 28px;
122
+                    height: 26px;
123
+                }
124
+            }
125
+            .bottom-buy-right-share{
126
+                background-color: #ff1c14;
127
+                color: #fff;
128
+                image{
129
+                    width: 28px;
130
+                    height: 28px;
131
+                }
132
+            }
133
+        }
134
+    }
135
+    // 操作按钮
136
+    .operation-product{
137
+        position: fixed;
138
+        bottom: 0;
139
+        width: 100%;
140
+        height: 176px;
141
+        background-color: #fff;
142
+        .operation-product-top{
143
+            height: 50%;
144
+            display: flex;
145
+            align-items: center;
146
+            padding: 0 63px 0 37px;
147
+            box-sizing: border-box;
148
+            justify-content: space-between;
149
+            .at-checkbox::after,.at-checkbox::before{
150
+                content: none;
151
+            }
152
+            .at-checkbox__option-wrap {
153
+                padding-top: 0;
154
+                padding-bottom: 0;
155
+              }
156
+            .at-checkbox__option{
157
+                padding: 0;
158
+            }
159
+            .at-checkbox__option--selected .at-checkbox__icon-cnt{
160
+                background-color: #f6c71a;
161
+            }
162
+            .at-checkbox__icon-cnt{
163
+                margin-right: 10px;
164
+            }
165
+            .at-checkbox__title{
166
+                color: #000000;
167
+            }
168
+            .right{
169
+                display: flex;
170
+                align-items: center;
171
+                .item{
172
+                    display: flex;
173
+                    align-items: center;
174
+                    color: #000000;
175
+                    font-size: 26px;
176
+                    margin-left: 49px;
177
+                    Image{
178
+                        width: 32px;
179
+                        height: 23px;
180
+                        margin-right: 4px;
181
+                    }
182
+                }
183
+            }
184
+        }
185
+        .operation-product-bottom{
186
+            height: 50%;
187
+            background-color: #F6C71A;
188
+            font-size: 30px;
189
+            color: #3D3D3D;
190
+            font-weight: 700;
191
+            display: flex;
192
+            align-items: center;
193
+            justify-content: center;
194
+        }
195
+    }
196
+}
197
+

+ 3 - 0
src/pages/productSub/infoEdit/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '编辑个人信息'
3
+})

+ 25 - 0
src/pages/productSub/infoEdit/index.jsx

@@ -0,0 +1,25 @@
1
+import { Component } from 'react'
2
+import { View, Text, Image } from '@tarojs/components'
3
+import './index.less'
4
+import vip from '../../../images/index/back-top.png'
5
+export default class Index extends Component {
6
+
7
+  componentWillMount () { }
8
+
9
+  componentDidMount () { }
10
+
11
+  componentWillUnmount () { }
12
+
13
+  componentDidShow () { }
14
+
15
+  componentDidHide () { }
16
+
17
+  render () {
18
+    return (
19
+      <View className='index'>
20
+        <Image src='https://video-img.fyshark.com/1731495433480WechatIMG674.jpg' className='vip-icon' />
21
+        <Text>编辑个人信息</Text>
22
+      </View>
23
+    )
24
+  }
25
+}

+ 4 - 0
src/pages/productSub/infoEdit/index.less

@@ -0,0 +1,4 @@
1
+Image{
2
+    height: 200px;
3
+    width: 200px;
4
+}

+ 3 - 0
src/pages/seckillIndex/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '鱼市秒杀'
3
+})

+ 28 - 0
src/pages/seckillIndex/index.jsx

@@ -0,0 +1,28 @@
1
+import { Component } from "react";
2
+import { View, Image } from "@tarojs/components";
3
+import "./index.less";
4
+import seckillImg from "../../images/seckill/seckillTop.png";
5
+import ProductList from "../../components/index/ProductList";
6
+export default class Index extends Component {
7
+  componentWillMount() {}
8
+
9
+  componentDidMount() {}
10
+
11
+  componentWillUnmount() {}
12
+
13
+  componentDidShow() {}
14
+
15
+  componentDidHide() {}
16
+
17
+  render() {
18
+    return (
19
+      <View className="index">
20
+        <Image className="seckill" src={seckillImg} mode="aspectFill" />
21
+        {/* 商品列表 */}
22
+        <View className="product-list">
23
+          <ProductList isSeckill={true} />
24
+        </View>
25
+      </View>
26
+    );
27
+  }
28
+}

+ 11 - 0
src/pages/seckillIndex/index.less

@@ -0,0 +1,11 @@
1
+.index{
2
+    width: 100%;
3
+    .seckill{
4
+        width: 100%;
5
+        height: 300px;
6
+        background-color: yellow;
7
+    }
8
+    .product-list{
9
+        margin-top: -71px;
10
+    }
11
+}

+ 3 - 0
src/pages/statementRecords/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '结算单记录'
3
+})

+ 49 - 0
src/pages/statementRecords/index.jsx

@@ -0,0 +1,49 @@
1
+import { Component } from 'react'
2
+import { View, Text, Image } from '@tarojs/components'
3
+import './index.less'
4
+import statementRecordsIcon from '../../images/statementRecordsIcon.png'
5
+export default class Index extends Component {
6
+
7
+
8
+  state = {
9
+    records: [
10
+      { month: '2020年06月结算单', amount: '70' },
11
+      { month: '2020年05月结算单', amount: '85' },
12
+      { month: '2020年04月结算单', amount: '92' },
13
+      { month: '2020年04月结算单', amount: '92' },
14
+      { month: '2020年04月结算单', amount: '92' },
15
+      { month: '2020年04月结算单', amount: '92' },
16
+      { month: '2020年04月结算单', amount: '92' },
17
+      { month: '2020年04月结算单', amount: '92' },
18
+      { month: '2020年04月结算单', amount: '92' },
19
+      { month: '2020年04月结算单', amount: '92' },
20
+      { month: '2020年04月结算单', amount: '92' },
21
+      { month: '2020年04月结算单', amount: '92' },
22
+      { month: '2020年04月结算单', amount: '92' },
23
+      { month: '2020年04月结算单', amount: '92' },
24
+      { month: '2020年04月结算单', amount: '92' },
25
+      { month: '2020年04月结算单', amount: '92' },
26
+    ]
27
+  }
28
+
29
+  render () {
30
+    return (
31
+      <View className='index'>
32
+        {/* 结算单记录列表 */}
33
+        <View className='record-list'>
34
+          {this.state.records.map((item, index) => (
35
+            <View className='record-item' key={index}>
36
+              <View className='left'>
37
+                <Image src={statementRecordsIcon} className='icon' />
38
+                <Text className='month'>{item.month}</Text>
39
+              </View>
40
+              <View className='right'>
41
+                <Text className='amount'>¥{item.amount}</Text>
42
+              </View>
43
+            </View>
44
+          ))}
45
+        </View>
46
+      </View>
47
+    )
48
+  }
49
+}

+ 48 - 0
src/pages/statementRecords/index.less

@@ -0,0 +1,48 @@
1
+.index {
2
+    background-color: #f9f9f9;
3
+    padding: 30px 16px;
4
+    min-height: 100vh;
5
+    box-sizing: border-box;
6
+    .record-list {
7
+        background-color: #fff;
8
+        padding: 0 17px;
9
+        border-radius: 20px;
10
+        overflow: hidden;
11
+
12
+        .record-item {
13
+            display: flex;
14
+            justify-content: space-between;
15
+            align-items: center;
16
+            height: 100px;
17
+            border-bottom: 1px solid #D8D8D8;
18
+
19
+            &:last-child {
20
+                border-bottom: none;
21
+            }
22
+
23
+            .left {
24
+                display: flex;
25
+                align-items: center;
26
+
27
+                .icon {
28
+                    height: 52px;
29
+                    width: 52px;
30
+                    margin-right: 10px;
31
+                }
32
+
33
+                .month {
34
+                    color: #444444;
35
+                    font-size: 28px;
36
+                }
37
+            }
38
+
39
+            .right {
40
+                .amount {
41
+                    color: #666666;
42
+                    font-size: 28px;
43
+                    font-weight: 500;
44
+                }
45
+            }
46
+        }
47
+    }
48
+}

+ 3 - 0
src/pages/storeManagement/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '店铺管理'
3
+})

+ 115 - 0
src/pages/storeManagement/index.jsx

@@ -0,0 +1,115 @@
1
+import { Component } from "react";
2
+import { View, Text, Image } from "@tarojs/components";
3
+import { AtIcon } from "taro-ui";
4
+import "./index.less";
5
+import storeManagement from "../../images/storeManagement/storeManagement.png";
6
+import storeManagementIcon from "../../images/storeManagement/storeManagementIcon.png";
7
+import ProductCard from "../../components/ProductCard"; //卡片模块
8
+import Taro from "@tarojs/taro";
9
+
10
+export default class Index extends Component {
11
+  state = {
12
+    isManager: true,
13
+    productList: [
14
+      {
15
+        id: 1,
16
+        name: "青岛大虾",
17
+        price: 99.9,
18
+        originalPrice: 159.9,
19
+        image: "https://example.com/img1.jpg",
20
+        sales: 1234,
21
+        tag: "热销",
22
+      },
23
+      {
24
+        id: 2,
25
+        name: "三文鱼刺身",
26
+        price: 158,
27
+        originalPrice: 198,
28
+        image: "https://example.com/img2.jpg",
29
+        sales: 856,
30
+        tag: "新品",
31
+      },
32
+      {
33
+        id: 3,
34
+        name: "帝王蟹",
35
+        price: 299,
36
+        originalPrice: 399,
37
+        image: "https://example.com/img3.jpg",
38
+        sales: 566,
39
+        tag: "限时",
40
+      },
41
+    ],
42
+  };
43
+
44
+  componentWillMount() {}
45
+
46
+  componentDidMount() {
47
+    const { router } = Taro.getCurrentInstance();
48
+    const params = router.params;
49
+    this.setState({
50
+      isManager: params.isManager,
51
+    });
52
+  }
53
+
54
+  componentWillUnmount() {}
55
+
56
+  componentDidShow() {}
57
+
58
+  componentDidHide() {}
59
+
60
+  render() {
61
+    return (
62
+      <View className="index">
63
+        {/* 头部卡片 */}
64
+        <View className="header-card">
65
+          <Image className="bg-image" src={storeManagement} mode="widthFix" />
66
+          {/* 分享店铺 */}
67
+          <View className="share-shop">
68
+            <Text>分享店铺</Text>
69
+            <AtIcon value="chevron-right" size="10" color="#fff"></AtIcon>
70
+          </View>
71
+          {/* 个人信息 */}
72
+          <View className="user-info">
73
+            <View className="avatar-wrapper">
74
+              <Image className="avatar" src="" />
75
+              <View className="change-avatar-btn">更换头像</View>
76
+            </View>
77
+            <View className="info-content">
78
+              <Text className="name">张三</Text>
79
+              <Text className="desc">这里是店铺介绍文字内容</Text>
80
+            </View>
81
+          </View>
82
+        </View>
83
+        {/* 商品列表 */}
84
+        <View className="product-list">
85
+          <View className="product-list-title">
86
+            <Text className="title">店长推荐</Text>
87
+            <Text className="icon"></Text>
88
+          </View>
89
+          <View className="product-card-list">
90
+            {this.state.productList.map((product) => (
91
+              <ProductCard key={product.id} product={product} />
92
+            ))}
93
+          </View>
94
+          {/* 底部购买模块 */}
95
+          {this.state.isManager && (
96
+            <View className="bottom-buy">
97
+              <View className="bottom-buy-left">
98
+                <Image src={storeManagementIcon} mode="aspectFit" />
99
+                <Text className="bottom-buy-text">浏览店铺</Text>
100
+              </View>
101
+              <View className="bottom-buy-right">
102
+                <View className="bottom-buy-right-self">
103
+                  <Text className="bottom-buy-text">店铺模版</Text>
104
+                </View>
105
+                <View onClick={() => Taro.navigateTo({ url:'/pages/productManagement/index' })} className="bottom-buy-right-share">
106
+                  <Text  className="bottom-buy-text">商品管理</Text>
107
+                </View>
108
+              </View>
109
+            </View>
110
+          )}
111
+        </View>
112
+      </View>
113
+    );
114
+  }
115
+}

+ 184 - 0
src/pages/storeManagement/index.less

@@ -0,0 +1,184 @@
1
+.index {
2
+    padding: 18px 16px 0 16px;
3
+    box-sizing: border-box;
4
+    background-color: #f9f9f9;
5
+    padding-bottom: 150px;
6
+    .header-card {
7
+        width: 100%;
8
+        height: 256px;
9
+        position: relative;
10
+        padding: 80px 0 0 17px;
11
+        box-sizing: border-box;
12
+
13
+        .bg-image {
14
+            width: 100%;
15
+            height: 256px;
16
+            position: absolute;
17
+            top: 0;
18
+            left: 0;
19
+        }
20
+
21
+        .user-info {
22
+            position: relative;
23
+            z-index: 1;
24
+            display: flex;
25
+            align-items: center;
26
+
27
+            .avatar-wrapper {
28
+                position: relative;
29
+                width: 116px;
30
+                height: 116px;
31
+                margin-right: 28px;
32
+
33
+                .avatar {
34
+                    width: 116px;
35
+                    height: 116px;
36
+                    border-radius: 50%;
37
+                    background-color: red;
38
+                }
39
+
40
+                .change-avatar-btn {
41
+                    position: absolute;
42
+                    bottom: -6px;
43
+                    left: 50%;
44
+                    transform: translateX(-50%);
45
+                    width: 85px;
46
+                    height: 26px;
47
+                    background: #3d3d3d;
48
+                    border-radius: 13px;
49
+                    color: #FFFFFF;
50
+                    font-size: 16px;
51
+                    display: flex;
52
+                    align-items: center;
53
+                    justify-content: center;
54
+                }
55
+            }
56
+
57
+            .info-content {
58
+                display: flex;
59
+                flex-direction: column;
60
+                color: #FFFFFF;
61
+
62
+                .name {
63
+                    font-size: 34px;
64
+                    line-height: 40px;
65
+                    margin-bottom: 14px;
66
+                }
67
+
68
+                .desc {
69
+                    font-size: 18px;
70
+                    line-height: 40px;
71
+                    opacity: 0.8;
72
+                }
73
+            }
74
+        }
75
+
76
+        .share-shop {
77
+            position: absolute;
78
+            top: 20px;
79
+            right: 20px;
80
+            z-index: 1;
81
+            display: flex;
82
+            align-items: center;
83
+            color: #FFFFFF;
84
+            font-size: 14px;
85
+            justify-content: center;
86
+            align-items: center;
87
+
88
+            Text {
89
+                font-size: 22px;
90
+                line-height: 40px;
91
+                margin-right: 7px;
92
+            }
93
+        }
94
+    }
95
+
96
+    // 产品列表
97
+    .product-list {
98
+        background-color: #fff;
99
+        border-radius: 20px;
100
+        margin-top: -20px;
101
+        padding: 30px 0;
102
+        box-sizing: border-box;
103
+        position: relative;
104
+        z-index: 1;
105
+        .product-list-title {
106
+            display: flex;
107
+            flex-direction: column;
108
+            margin-bottom: 24px;
109
+            width: 100%;
110
+            justify-content: center;
111
+            align-items: center;
112
+
113
+            .title {
114
+                color: #000000;
115
+                font-size: 28px;
116
+                font-weight: 700;
117
+                line-height: 41px;
118
+                margin-bottom: 15px;
119
+            }
120
+
121
+            .icon {
122
+                width: 76px;
123
+                height: 12px;
124
+                background: linear-gradient(180deg, #FBE00F 0%, #FFCC19 100%);
125
+                border-radius: 10px 10px 0px 0px;
126
+            }
127
+        }
128
+    }
129
+        // 底部购买模块
130
+        .bottom-buy {
131
+            width: 100%;
132
+            background-color: #fff;
133
+            height: 126px;
134
+            padding: 19px 35px 19px 44px;
135
+            box-sizing: border-box;
136
+            position: fixed;
137
+            bottom: 0;
138
+            display: flex;
139
+            justify-content: space-between;
140
+            align-items: center;
141
+            .bottom-buy-left {
142
+                display: flex;
143
+                flex-direction: column;
144
+                align-items: center;
145
+                image {
146
+                    width: 36px;
147
+                    height: 36px;
148
+                    margin-bottom: 7px;
149
+                }
150
+    
151
+                .bottom-buy-text {
152
+                    font-size: 22px;
153
+                    line-height: 32px;
154
+                    color: #000000;
155
+                }
156
+            }
157
+            .bottom-buy-right {
158
+                width: 550px;
159
+                height: 100%;
160
+                display: flex;
161
+                border-radius: 60px;
162
+                overflow: hidden;
163
+                .bottom-buy-right-self,.bottom-buy-right-share{
164
+                    line-height: 43px;
165
+                    font-size: 30px;
166
+                    width: 50%;
167
+                    display: flex;
168
+                    justify-content: center;
169
+                    align-items: center;
170
+                    image{
171
+                        margin-right: 9px;
172
+                    }
173
+                }
174
+                .bottom-buy-right-self{
175
+                    background-color: #fbe00f;
176
+                    color: #000000;
177
+                }
178
+                .bottom-buy-right-share{
179
+                    background-color: #ff1c14;
180
+                    color: #fff;
181
+                }
182
+        }
183
+    }
184
+}

+ 3 - 0
src/pages/userSpecification/index.config.js

@@ -0,0 +1,3 @@
1
+export default definePageConfig({
2
+  navigationBarTitleText: '用户规范'
3
+})

+ 24 - 0
src/pages/userSpecification/index.jsx

@@ -0,0 +1,24 @@
1
+import { Component } from 'react'
2
+import { View, Text } from '@tarojs/components'
3
+import './index.less'
4
+
5
+export default class Index extends Component {
6
+
7
+  componentWillMount () { }
8
+
9
+  componentDidMount () { }
10
+
11
+  componentWillUnmount () { }
12
+
13
+  componentDidShow () { }
14
+
15
+  componentDidHide () { }
16
+
17
+  render () {
18
+    return (
19
+      <View className='index'>
20
+        <Text>用户规范</Text>
21
+      </View>
22
+    )
23
+  }
24
+}

+ 0 - 0
src/pages/userSpecification/index.less