فهرست منبع

[edit][style and page]

zhangwei 3 سال پیش
والد
کامیت
3ea9403d21

+ 3 - 0
src/assets/svg/back-head-top.svg

@@ -0,0 +1,3 @@
+<svg width="375" height="149" viewBox="0 0 375 149" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M0 0H375V120.073C375 120.073 322 149 187.5 149C53 149 0 120.073 0 120.073V0Z" fill="#EF4545"/>
+</svg>

+ 5 - 0
src/assets/svg/icon-add.svg

@@ -0,0 +1,5 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect opacity="0.01" width="16" height="16" fill="#389AFF"/>
+<line x1="3" y1="7.81152" x2="13" y2="7.81152" stroke="#389AFF" stroke-width="1.5"/>
+<line x1="7.94922" y1="12.6992" x2="7.94922" y2="2.69922" stroke="#389AFF" stroke-width="1.5"/>
+</svg>

+ 4 - 0
src/assets/svg/icon-done.svg

@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="12" cy="12" r="12" fill="#EF4545"/>
+<path d="M6.59961 11.9992L10.7996 16.7992L17.9996 7.19922" stroke="white" stroke-width="2"/>
+</svg>

+ 60 - 0
src/assets/svg/icon-error.svg

@@ -0,0 +1,60 @@
+<svg width="160" height="160" viewBox="0 0 160 160" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g opacity="0.4">
+<g clip-path="url(#clip0_13399_130051)">
+<rect x="90.7031" y="21.9688" width="80" height="149.333" transform="rotate(20 90.7031 21.9688)" fill="white"/>
+<path d="M69.0332 81.5078C69.0332 81.5078 76.8131 90.6962 104.578 100.802C132.343 110.907 144.209 108.869 144.209 108.869L120.641 173.621L45.4657 146.259L69.0332 81.5078Z" fill="#F1F1F1"/>
+<g filter="url(#filter0_d_13399_130051)">
+<path d="M92.8926 15.9551L168.068 43.3167L146.314 103.086C146.314 103.086 133.835 104.311 106.873 94.4977C79.9096 84.684 71.1384 75.7243 71.1384 75.7243L92.8926 15.9551Z" fill="#F1F1F1"/>
+</g>
+<g clip-path="url(#clip1_13399_130051)">
+<rect x="96.6094" y="83.7129" width="26.6667" height="26.6667" rx="13.3333" transform="rotate(20 96.6094 83.7129)" fill="#BABABA"/>
+<path d="M102.837 107.489L103.237 106.391C105.822 107.106 107.731 106.34 108.485 104.269C109.124 102.513 108.48 101.073 106.565 99.8102L105.805 99.3357L107.062 95.8828C108.028 96.3854 108.481 97.3417 108.185 98.2327L110.173 98.9564C110.813 97.0693 109.853 95.2028 107.679 94.1855L108.097 93.0373L106.949 92.6194L106.531 93.7676C104.101 93.1186 102.22 93.885 101.505 95.8486C100.9 97.5127 101.536 99.0258 103.289 100.191L104.015 100.682L102.691 104.318C101.567 103.757 101.055 102.808 101.325 101.832L99.2949 101.093C98.5885 103.06 99.6606 104.929 102.083 105.99L101.689 107.072L102.837 107.489ZM106.384 103.749C106.021 104.747 105.084 105.122 103.833 104.752L105.084 101.316C106.31 102.064 106.718 102.834 106.384 103.749ZM103.613 96.4272C103.934 95.5452 104.897 95.1514 105.916 95.4566L104.744 98.6765C103.706 98.0347 103.31 97.2592 103.613 96.4272Z" fill="white"/>
+</g>
+</g>
+</g>
+<g clip-path="url(#clip2_13399_130051)">
+<rect x="40" y="23.7324" width="80" height="149.333" fill="white"/>
+<path d="M40 87.0938C40 87.0938 50.4533 93.0671 80 93.0671C109.547 93.0671 120 87.0938 120 87.0938V156H40V87.0938Z" fill="#F1F1F1"/>
+<g filter="url(#filter1_d_13399_130051)">
+<path d="M40 17.332H120V88.2654C120 88.2654 108.693 94.3092 80 94.3092C51.3067 94.3092 40 88.2654 40 88.2654L40 17.332Z" fill="#F1F1F1"/>
+</g>
+<g clip-path="url(#clip3_13399_130051)">
+<rect x="66.667" y="79.7324" width="26.6667" height="26.6667" rx="13.3333" fill="#E3E3E3"/>
+<path d="M80.6505 99.9454V98.7767C83.3244 98.5642 84.8562 97.1918 84.8562 94.9871C84.8562 93.1189 83.7583 91.9855 81.527 91.4543L80.6505 91.2684V87.5939C81.7307 87.7355 82.4833 88.4793 82.5098 89.4178H84.626C84.5817 87.4256 83.0411 86.0001 80.6505 85.7876V84.5658H79.4286V85.7876C76.9229 86.009 75.4176 87.3725 75.4176 89.4621C75.4176 91.2329 76.5333 92.4371 78.5786 92.9329L79.4286 93.1454V97.0147C78.1801 96.873 77.3744 96.1559 77.2947 95.1465H75.1343C75.1432 97.2361 76.79 98.6262 79.4286 98.7944V99.9454H80.6505ZM82.7046 95.2173C82.7046 96.2798 81.952 96.9527 80.6505 97.0324V93.3757C82.0583 93.659 82.7046 94.2434 82.7046 95.2173ZM77.5958 89.285C77.5958 88.3465 78.3661 87.647 79.4286 87.585V91.0116C78.2333 90.7637 77.5958 90.1704 77.5958 89.285Z" fill="white"/>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_13399_130051" x="56.1387" y="1.80841" width="126.93" height="117.18" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="0.853333"/>
+<feGaussianBlur stdDeviation="7.5"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13399_130051"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13399_130051" result="shape"/>
+</filter>
+<filter id="filter1_d_13399_130051" x="25" y="3.18536" width="110" height="106.977" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="0.853333"/>
+<feGaussianBlur stdDeviation="7.5"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13399_130051"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13399_130051" result="shape"/>
+</filter>
+<clipPath id="clip0_13399_130051">
+<rect x="89.2441" y="25.9785" width="67.5775" height="99.1136" rx="5.33333" transform="rotate(20 89.2441 25.9785)" fill="white"/>
+</clipPath>
+<clipPath id="clip1_13399_130051">
+<path d="M92.0491 96.2421C94.5677 89.3224 102.219 85.7546 109.139 88.2732C116.058 90.7917 119.626 98.443 117.108 105.363C114.589 112.282 106.938 115.85 100.018 113.332C93.0984 110.813 89.5305 103.162 92.0491 96.2421Z" fill="white"/>
+</clipPath>
+<clipPath id="clip2_13399_130051">
+<rect x="40" y="28" width="80" height="117.333" rx="8" fill="white"/>
+</clipPath>
+<clipPath id="clip3_13399_130051">
+<path d="M66.667 93.0658C66.667 85.702 72.6365 79.7324 80.0003 79.7324C87.3641 79.7324 93.3337 85.702 93.3337 93.0658C93.3337 100.43 87.3641 106.399 80.0003 106.399C72.6365 106.399 66.667 100.43 66.667 93.0658Z" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 4 - 0
src/assets/svg/icon-true-ed.svg

@@ -0,0 +1,4 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect opacity="0.01" width="16" height="16" fill="#389AFF"/>
+<path d="M2.5 7.5L6 11.5L12.5 3.5" stroke="#949494" stroke-width="1.3"/>
+</svg>

+ 3 - 0
src/assets/svg/icon-true.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6.5 12.5684L10.4993 16.568L17.7336 6.6461" stroke="#389AFF" stroke-width="1.8"/>
+</svg>

+ 6 - 8
src/logic/twitter.js

@@ -387,8 +387,8 @@ function parseDOMRedPacket() {
             if (item.parentNode && item.parentNode.parentNode && item.parentNode.parentNode.innerText.length > 5) {
                 let _postId = item.parentNode.parentNode.innerText || ''
                 _postId = _postId.match(/###([\s\S]*?)###/)[1];
-                _dom = item.parentNode.parentNode
-                replaceDOMRedPacket(_dom, _postId)
+                let _dom = item.parentNode.parentNode.parentNode.parentNode.parentNode
+                replaceDOMRedPacket(_dom.children[1], _postId)
             }
 
         }
@@ -396,18 +396,16 @@ function parseDOMRedPacket() {
 }
 
 function replaceDOMRedPacket(_dom, postId) {
-    if (!_dom || _dom.parentNode.parentNode.querySelector('iframe')) {
+    if (!_dom || _dom.querySelector('iframe')) {
         return
     }
-
-    // _dom.parentNode.parentNode.children[0].innerHTML
-    _dom.parentNode.parentNode.children[1].innerHTML = ''
+    _dom.innerHTML = ''
     let _iframe = document.createElement('iframe')
     _iframe.id = postId
     _iframe.src = chrome.runtime.getURL('/iframe/red-packet.html') + '?postId=' + postId;
     _iframe.style.cssText = 'border: medium none; width:375px;height:500px;'
-    _dom.parentNode.parentNode.children[1].style = 'height:500px'
-    _dom.parentNode.parentNode.children[1].appendChild(_iframe)
+    _dom.style = 'height:500px'
+    _dom.appendChild(_iframe)
 }
 
 

+ 253 - 43
src/view/red-packet.vue

@@ -2,7 +2,10 @@
   <div class="content">
     <!-- open -->
     <div v-if="data.status == 'opened'" class="opened">
-      <div class="header">
+      <div
+        class="header"
+        :style="{ 'backgroundImage': `url(${require('../assets/svg/back-head-top.svg')})` }"
+      >
         <div class="title">Awesome! You Will Get</div>
         <div class="money">
           <img :src="require('../assets/svg/icon-dollar.svg')" alt />
@@ -14,26 +17,43 @@
       <div class="list">
         <div class="item" v-for="item, i in data.detail.taskCondition" v-bind:key="i">
           <template v-if="item.type == 1">
-            <img :src="require('../assets/svg/icon-follow.svg')" alt />
             <div class="item-content">
-              <div class="item-title">Follow</div>
-              <span v-for="item2, i in item.relatedUsers" v-bind:key="i">@{{ item2.name }}</span>
+              <div class="item-follow-title">
+                <img :src="require('../assets/svg/icon-follow.svg')" alt />
+                <div class="item-title">Follow</div>
+                <img v-if="data.done.follow" :src="require('../assets/svg/icon-true.svg')" alt />
+                <div v-else class="btn" @click="clickFollowAll(item.relatedUsers)">Follow All</div>
+              </div>
+              <div class="item-follow-area">
+                <div
+                  class="item-follow"
+                  v-for="item2, i in item.relatedUsers"
+                  v-bind:key="i"
+                  @click="clickFollow(item2)"
+                >
+                  <span :class="{ finished: item2.finished }">@{{ item2.name }}</span>
+                  <img v-if="item2.finished" :src="require('../assets/svg/icon-true-ed.svg')" alt />
+                  <img v-else :src="require('../assets/svg/icon-add.svg')" alt />
+                </div>
+              </div>
             </div>
-            <div class="btn">Follow</div>
           </template>
           <template v-if="item.type == 2">
             <img :src="require('../assets/svg/icon-like.svg')" alt />
             <div class="item-content">
               <div class="item-title">Like</div>
             </div>
-            <div class="btn">Like</div>
+            <img v-if="data.done.like" :src="require('../assets/svg/icon-true.svg')" alt />
+
+            <div v-else class="btn" @click="clickBtn">Like</div>
           </template>
           <template v-if="item.type == 3">
             <img :src="require('../assets/svg/icon-retweet.svg')" alt />
             <div class="item-content">
               <div class="item-title">Retweet</div>
             </div>
-            <div class="btn">Retweet</div>
+            <img v-if="data.done.retweet" :src="require('../assets/svg/icon-true.svg')" alt />
+            <div v-else class="btn" @click="clickBtn">Retweet</div>
           </template>
         </div>
       </div>
@@ -42,9 +62,21 @@
           class="txt"
         >Total ${{ data.detail.amountValue }} USD,{{ data.detail.finishCount || 0 }}/{{ data.detail.totalCount || 0 }} People Got</div>
         <div class="right">
-          <img :src="require('../assets/svg/icon-dollar.svg')" alt />
-          <img :src="require('../assets/svg/icon-dollar.svg')" alt />
-          <img :src="require('../assets/svg/icon-dollar.svg')" alt />
+          <template v-for="item, i in data.detail.allReceived" v-bind:key="i">
+            <img :src="item.simpleUserInfoVO.avatarUrl" alt style="right: 14px;" v-if="i == 0" />
+            <img
+              :src="item.simpleUserInfoVO.avatarUrl"
+              alt
+              :style="{ right: `${i * 16 + 14}px` }"
+              v-if="i < 2 && item.simpleUserInfoVO.avatarUrl"
+            />
+            <img
+              v-else-if="i < 2"
+              :src="require('../assets/svg/icon-twitter.svg')"
+              alt
+              :style="{ right: `${i * 16 + 14}px` }"
+            />
+          </template>
           <img :src="require('../assets/svg/icon-right.svg')" alt class="road" />
         </div>
       </div>
@@ -58,12 +90,20 @@
     </div>
     <!-- success -->
     <div v-else-if="data.status == 'success'" class="success">
-      <div class="header">
+      <div
+        class="header"
+        :style="{ 'backgroundImage': `url(${require('../assets/svg/back-head-top.svg')})` }"
+      >
         <div class="money">
           <img :src="require('../assets/svg/icon-dollar.svg')" alt />
           <span class="big">{{ data.money / 100 }}</span>
           <span class="small">USD</span>
         </div>
+        <div class="done">
+          <img :src="require('../assets/svg/icon-done.svg')" alt class="icon-done" />
+          <span>Giveaways transferred to Wallet</span>
+          <img :src="require('../assets/svg/icon-right.svg')" alt class="icon-right" />
+        </div>
       </div>
       <div class="luck-list-title">
         <div>{{ data.detail.finishCount || 0 }}/{{ data.detail.totalCount || 0 }} People Got</div>
@@ -71,9 +111,15 @@
       </div>
       <div class="luck-list">
         <div class="luck-item" v-for="item, i in data.detail.allReceived" v-bind:key="i">
-          <img :src="item.simpleUserInfoVO.avatarUrl" alt />
+          <img v-if="item.simpleUserInfoVO.avatarUrl" :src="item.simpleUserInfoVO.avatarUrl" alt />
+          <img v-else :src="require('../assets/svg/icon-twitter.svg')" alt />
           <div class="luck-content">
-            <div class="luck-title">{{ item.simpleUserInfoVO.nickName }}</div>
+            <div
+              class="luck-title"
+              v-if="item.simpleUserInfoVO.nickName"
+            >{{ item.simpleUserInfoVO.nickName }}</div>
+            <div class="luck-title" v-else>Twitter User</div>
+
             <div class="luck-time">{{ moment(item.finishTimestamp).format('MM-DD hh:mm:ss') }}</div>
           </div>
           <div class="luck-money">
@@ -104,9 +150,14 @@
       </div>
       <div class="luck-list">
         <div class="luck-item" v-for="item, i in data.detail.allReceived" v-bind:key="i">
-          <img :src="item.simpleUserInfoVO.avatarUrl" alt />
+          <img v-if="item.simpleUserInfoVO.avatarUrl" :src="item.simpleUserInfoVO.avatarUrl" alt />
+          <img v-else :src="require('../assets/svg/icon-twitter.svg')" alt />
           <div class="luck-content">
-            <div class="luck-title">{{ item.simpleUserInfoVO.nickName }}</div>
+            <div
+              class="luck-title"
+              v-if="item.simpleUserInfoVO.nickName"
+            >{{ item.simpleUserInfoVO.nickName }}</div>
+            <div class="luck-title" v-else>Twitter User</div>
             <div class="luck-time">{{ moment(item.finishTimestamp).format('MM-DD hh:mm:ss') }}</div>
           </div>
           <div class="luck-money">
@@ -124,7 +175,10 @@
 
     <!-- 红包被领完了 -->
     <div v-else-if="data.status == 'close'" class="close">
-      <div class="header">
+      <div
+        class="header"
+        :style="{ 'backgroundImage': `url(${require('../assets/svg/back-head-top.svg')})` }"
+      >
         <div class="close-title">{{ data.close_title }}</div>
       </div>
       <div class="luck-list-title">
@@ -149,6 +203,15 @@
         </div>
       </div>
     </div>
+
+    <!-- error -->
+    <div v-else-if="data.status == 'error'" class="error">
+      <img :src="require('../assets/svg/icon-error.svg')" alt />
+      <div class="txt">
+        oops, new accounts cannot participate in this event,
+        better luck next time!
+      </div>
+    </div>
   </div>
 </template>
 
@@ -168,10 +231,21 @@ var moment = require('moment');
 let data = reactive({
   status: '',
   detail: {},
+  srcContentId: '',
   close_title: 'Better luck next time!',
   receiveAmount: 0,
-  money: 0
+  money: 0,
+  // 状态
+  done: {
+    follow: false,
+    like: false,
+    retweet: false
+  }
 })
+function clickBtn() {
+  // 跳转到推文详情
+  window.open(`https://twitter.com/${data.detail.postUserInfo.nickName}/status/${data.srcContentId}`)
+}
 
 
 function getValidity() {
@@ -185,6 +259,15 @@ function getValidity() {
   }, 1000)
 }
 
+function clickFollowAll(item) {
+  for (let i in item) {
+    clickFollow(item[i])
+  }
+}
+function clickFollow(item) {
+  window.open(`https://twitter.com/${item.name}`)
+}
+
 function showLastTwoPlace(n) {
   return n / 100
   // n = n / 100
@@ -234,6 +317,7 @@ function init() {
           data.detail.amountValue = showLastTwoPlace(data.detail.amountValue)
           data.detail.receiveAmountValue = showLastTwoPlace(data.detail.receiveAmountValue)
           data.money = data.detail.myReceived.amountValue
+
           console.log(data.detail)
           getValidity()
         }
@@ -241,6 +325,7 @@ function init() {
         if (res.data.postType == 2) {
           data.status = 'close'
         }
+        data.srcContentId = res.data.srcContentId
         break
 
     }
@@ -249,7 +334,6 @@ function init() {
 onMounted(() => {
   data.postId = getQueryString('postId')
   init()
-
 })
 
 function clickOpenRedPacket() {
@@ -277,31 +361,47 @@ function clickGetGiveways() {
       postId: data.postId
     }
   }).then((res) => {
-    if (res.code != 0) {
-      alert(res.msg)
-    } else {
-      if (res.data.finished) {
-        data.status = 'success'
-        data.receiveAmount = res.data.receiveAmount
-        init()
-      } else {
-        let _data = res.data.conditionResult
-        for (let i in _data) {
-          if (!_data[i].finished) {
+    switch (res.code.toString()) {
+      case '0':
+        if (res.data.finished) {
+          data.status = 'success'
+          data.receiveAmount = res.data.receiveAmount
+          init()
+        } else {
+          let _data = res.data.conditionResult
+          for (let i in _data) {
             switch (_data[i].type.toString()) {
               case '1':
-                alert('关注未完成')
+                if (_data[i].finished) {
+                  data.detail.taskCondition[0].relatedUsers = _data[i].detail
+                  data.done.follow = true
+                } else {
+                  alert('关注未完成')
+                }
                 break
               case '2':
-                alert('喜欢未完成')
+                if (_data[i].finished) {
+                  data.done.like = true
+                } else {
+                  alert('like未完成')
+                }
                 break
               case '3':
-                alert('转推未完成')
+                if (_data[i].finished) {
+                  data.done.retweet = true
+                } else {
+                  alert('转推未完成')
+                }
                 break
             }
           }
         }
-      }
+        break
+      case "2009":
+        data.status = 'error'
+        break
+      default:
+        alert(res.msg)
     }
   })
 }
@@ -328,6 +428,23 @@ body {
   border-radius: 11px;
   font-family: "SF Pro Display";
   font-style: normal;
+  .error {
+    text-align: center;
+    img {
+      width: 160px;
+      height: 160px;
+      margin-top: 80px;
+    }
+    .txt {
+      font-weight: 500;
+      font-size: 22px;
+      line-height: 26px;
+      text-align: center;
+      letter-spacing: 0.3px;
+      color: #a8a8a8;
+      margin: 34px 44px 0 44px;
+    }
+  }
   .success,
   .close,
   .luck-peopel-list {
@@ -357,9 +474,40 @@ body {
       text-align: center;
       height: 120px;
       width: 100%;
-      background: #ef4545;
+      background: #fff;
       padding-top: 30px;
+      background-size: 100% 100%;
+      position: relative;
+      .done {
+        cursor: pointer;
+        position: absolute;
+        top: 107px;
+        left: 50%;
+        margin-left: -150px;
+        width: 300px;
+        height: 60px;
+        display: flex;
+        align-items: center;
+        border-radius: 100px;
+        background: #ffffff;
+        box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1);
 
+        span {
+          color: #000000;
+          font-size: 14px;
+        }
+        .icon-done {
+          width: 24px;
+          height: 24px;
+          margin-left: 28px;
+          margin-right: 10px;
+        }
+        .icon-right {
+          margin-left: 5px;
+          width: 7px;
+          height: 14px;
+        }
+      }
       .title {
         color: #fff7e4;
         opacity: 0.6;
@@ -370,9 +518,11 @@ body {
         letter-spacing: -0.3px;
       }
       .money {
+        margin-top: 16px;
         img {
           width: 40px;
           height: 40px;
+          margin-right: 9px;
         }
         .big {
           font-weight: 700;
@@ -385,6 +535,8 @@ body {
           color: #fff8e6;
         }
         .small {
+          margin-left: 4px;
+
           font-weight: 700;
           font-size: 13px;
           line-height: 16px;
@@ -397,6 +549,7 @@ body {
       }
     }
     .luck-list-title {
+      /*      margin-top: 47px;*/
       padding: 0 16px;
       background: #fff;
       color: #9b9b9b;
@@ -477,6 +630,11 @@ body {
       }
     }
   }
+  .success{
+    .luck-list-title{
+      margin-top: 47px;
+    }
+  }
   .opened {
     filter: drop-shadow(0px 4px 94px rgba(0, 0, 0, 0.3));
     width: 100%;
@@ -488,8 +646,9 @@ body {
       text-align: center;
       height: 120px;
       width: 100%;
-      background: #ef4545;
+      background: #fff;
       padding-top: 30px;
+      background-size: 100% 100%;
       .title {
         color: #fff7e4;
         opacity: 0.6;
@@ -500,7 +659,9 @@ body {
         letter-spacing: -0.3px;
       }
       .money {
+        margin-top: 16px;
         img {
+          margin-right: 9px;
           width: 40px;
           height: 40px;
         }
@@ -515,6 +676,7 @@ body {
           color: #fff8e6;
         }
         .small {
+          margin-left: 4px;
           font-weight: 700;
           font-size: 13px;
           line-height: 16px;
@@ -542,13 +704,53 @@ body {
         }
         .item-content {
           flex: 1;
-
+          .item-follow-title {
+            display: flex;
+            align-items: center;
+            margin-top: 20px;
+            margin-bottom: 11px;
+            position: relative;
+            .btn {
+              position: absolute;
+              right: 0;
+            }
+          }
           .item-title {
+            flex: 1;
+            margin-left: 10px;
             font-weight: 500;
             font-size: 16px;
             letter-spacing: 0.3px;
             color: #000000;
           }
+          .item-follow-area {
+            display: flex;
+            margin-bottom: 13px;
+            .item-follow {
+              cursor: pointer;
+              border: 1px solid #ebebeb;
+              border-radius: 1000px;
+              height: 28px;
+              margin-right: 5px;
+              display: flex;
+              align-items: center;
+              .finished {
+                text-decoration: line-through;
+                color: #949494;
+              }
+              span {
+                margin-left: 8px;
+                margin-right: 2px;
+                color: #389aff;
+                opacity: 1;
+              }
+              img {
+                width: 16px;
+                height: 16px;
+                margin-right: 7px;
+              }
+            }
+          }
           span {
             font-weight: 400;
             font-size: 11px;
@@ -564,25 +766,22 @@ body {
           width: 72px;
           height: 29px;
           line-height: 29px;
-          background: #389aff;
+          background: rgba(56, 154, 255, 0.1);
           border-radius: 500px;
           text-align: center;
           letter-spacing: 0.3px;
-          color: #ffffff;
+          color: #389aff;
           cursor: pointer;
         }
       }
-
-      .item:last-child {
-        border: 0;
-      }
     }
     .people {
       cursor: pointer;
       padding-left: 16px;
       height: 44px;
       line-height: 44px;
-      background: #faf9f8;
+      background: #fff;
+      border-bottom: 1px solid #f0f0f0;
       box-shadow: 0px 1px 0px #f2f2f2;
       display: flex;
       align-items: center;
@@ -596,13 +795,24 @@ body {
         opacity: 0.4;
       }
       .right {
+        flex: 1;
         cursor: pointer;
         margin-right: 22px;
         display: flex;
         align-items: center;
+        position: relative;
+
         img {
+          position: absolute;
           width: 22px;
           height: 22px;
+          border: 2px solid #fff;
+          border-radius: 50%;
+        }
+        .road {
+          right: 0;
+          width: 7px;
+          height: 14px;
         }
       }
     }