Sfoglia il codice sorgente

feat: 添加执行失败情况的接口和页面

million 1 anno fa
parent
commit
ac5c9d5c7d

+ 7 - 0
front/admin-front/src/api/record.js

@@ -7,3 +7,10 @@ export function getInteractionRecord(data) {
     data
   })
 }
+
+export function retryFailed(data) {
+  return request({
+    url: '/ams/execute/'+ data.executeId +'/' + data.password + '/restart',
+    method: 'put',
+  })
+}

+ 5 - 6
front/admin-front/src/assets/autoplay/Frame.svg

@@ -1,9 +1,8 @@
-<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
-<mask id="mask0_666_968" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="12" y="12" width="20" height="20">
-<rect x="12" y="12" width="20" height="20" fill="#D9D9D9"/>
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<mask id="mask0_1177_1252" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
+<rect width="20" height="20" fill="#D9D9D9"/>
 </mask>
-<g mask="url(#mask0_666_968)">
-<path d="M16.2499 25.3752C15.9444 24.8474 15.7152 24.3057 15.5624 23.7502C15.4096 23.1946 15.3333 22.6252 15.3333 22.0418C15.3333 20.1807 15.9791 18.5974 17.2708 17.2918C18.5624 15.9863 20.1388 15.3335 21.9999 15.3335H22.1458L20.8124 14.0002L21.9791 12.8335L25.3124 16.1668L21.9791 19.5002L20.8124 18.3335L22.1458 17.0002H21.9999C20.611 17.0002 19.4305 17.4897 18.4583 18.4689C17.486 19.4481 16.9999 20.6391 16.9999 22.0418C16.9999 22.4029 17.0416 22.7571 17.1249 23.1043C17.2083 23.4516 17.3333 23.7918 17.4999 24.1252L16.2499 25.3752ZM22.0208 31.1668L18.6874 27.8335L22.0208 24.5002L23.1874 25.6668L21.8541 27.0002H21.9999C23.3888 27.0002 24.5694 26.5106 25.5416 25.5314C26.5138 24.5522 26.9999 23.3613 26.9999 21.9585C26.9999 21.5974 26.9583 21.2432 26.8749 20.896C26.7916 20.5488 26.6666 20.2085 26.4999 19.8752L27.7499 18.6252C28.0555 19.1529 28.2846 19.6946 28.4374 20.2502C28.5902 20.8057 28.6666 21.3752 28.6666 21.9585C28.6666 23.8196 28.0208 25.4029 26.7291 26.7085C25.4374 28.0141 23.861 28.6668 21.9999 28.6668H21.8541L23.1874 30.0002L22.0208 31.1668Z" fill="#2980FF"/>
+<g mask="url(#mask0_1177_1252)">
+<path d="M4.24992 13.3752C3.94436 12.8474 3.7152 12.3057 3.56242 11.7502C3.40964 11.1946 3.33325 10.6252 3.33325 10.0418C3.33325 8.18072 3.97909 6.59739 5.27075 5.29183C6.56242 3.98627 8.13881 3.3335 9.99992 3.3335H10.1458L8.81242 2.00016L9.97908 0.833496L13.3124 4.16683L9.97908 7.50016L8.81242 6.3335L10.1458 5.00016H9.99992C8.61103 5.00016 7.43047 5.48975 6.45825 6.46891C5.48603 7.44808 4.99992 8.63905 4.99992 10.0418C4.99992 10.4029 5.04159 10.7571 5.12492 11.1043C5.20825 11.4516 5.33325 11.7918 5.49992 12.1252L4.24992 13.3752ZM10.0208 19.1668L6.68742 15.8335L10.0208 12.5002L11.1874 13.6668L9.85409 15.0002H9.99992C11.3888 15.0002 12.5694 14.5106 13.5416 13.5314C14.5138 12.5522 14.9999 11.3613 14.9999 9.9585C14.9999 9.59739 14.9583 9.24322 14.8749 8.896C14.7916 8.54877 14.6666 8.2085 14.4999 7.87516L15.7499 6.62516C16.0555 7.15294 16.2846 7.69461 16.4374 8.25016C16.5902 8.80572 16.6666 9.37516 16.6666 9.9585C16.6666 11.8196 16.0208 13.4029 14.7291 14.7085C13.4374 16.0141 11.861 16.6668 9.99992 16.6668H9.85409L11.1874 18.0002L10.0208 19.1668Z" fill="#2980FF"/>
 </g>
-<rect x="0.5" y="0.5" width="43" height="43" rx="21.5" stroke="#E0E0E0"/>
 </svg>

+ 8 - 0
front/admin-front/src/assets/autoplay/retry.svg

@@ -0,0 +1,8 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<mask id="mask0_1177_1387" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
+<rect width="20" height="20" fill="#D9D9D9"/>
+</mask>
+<g mask="url(#mask0_1177_1387)">
+<path d="M8.1959 13.262V6.70159L13.2984 9.98178L8.1959 13.262ZM10.0182 18C8.70615 18 7.47608 17.6993 6.32802 17.0979C5.17995 16.4966 4.22323 15.6553 3.45786 14.574V16.5421H2V12.1686H6.37358V13.6264H4.5877C5.20729 14.5376 5.99393 15.2513 6.94761 15.7677C7.90129 16.284 8.92483 16.5421 10.0182 16.5421C11.4153 16.5421 12.6819 16.1412 13.8178 15.3394C14.9537 14.5376 15.7525 13.4746 16.2141 12.1503L17.6355 12.4784C17.0888 14.1306 16.1169 15.4639 14.7198 16.4784C13.3227 17.4928 11.7555 18 10.0182 18ZM2.03645 9.25285C2.12149 8.43888 2.31587 7.65831 2.61959 6.91116C2.92331 6.16401 3.34244 5.47456 3.87699 4.84282L4.91572 5.88155C4.52696 6.37965 4.21109 6.91116 3.96811 7.47608C3.72513 8.041 3.57327 8.63326 3.51253 9.25285H2.03645ZM5.93622 4.86105L4.89749 3.82232C5.54138 3.28778 6.23386 2.8656 6.97494 2.55581C7.71602 2.24601 8.48747 2.06074 9.28929 2V3.45786C8.6697 3.5186 8.08049 3.67046 7.52164 3.91344C6.96279 4.15642 6.43432 4.47229 5.93622 4.86105ZM14.1185 4.86105C13.6203 4.47229 13.0888 4.15642 12.5239 3.91344C11.959 3.67046 11.3667 3.5186 10.7472 3.45786V2C11.5611 2.07289 12.3417 2.2612 13.0888 2.56492C13.836 2.86864 14.5254 3.28778 15.1572 3.82232L14.1185 4.86105ZM16.5421 9.25285C16.4814 8.63326 16.3295 8.041 16.0866 7.47608C15.8436 6.91116 15.5277 6.37965 15.139 5.88155L16.1777 4.84282C16.7122 5.47456 17.1314 6.16401 17.4351 6.91116C17.7388 7.65831 17.9271 8.43888 18 9.25285H16.5421Z" fill="#EB5757"/>
+</g>
+</svg>

+ 295 - 5
front/admin-front/src/views/autoplay/index.vue

@@ -152,7 +152,7 @@
     <el-drawer
       :visible.sync="drawerRecord"
       :with-header="false"
-      @closed="drawerRecordStatus = 0">
+      @closed="drawerRecordClosed">
       <div class="drawerRecord-container" v-if="drawerRecordStatus === 0">
         <div class="drawerAddress-container-head">
           <div class="drawerAddress-container-head-left">
@@ -242,6 +242,13 @@
                     </div>
                     <img src="../../assets/autoplay/chevron_right.svg" alt="chevron_right">
                   </div>
+                  <div class="status" v-if="scope.row.executeStatus === 2" @click="viewRecordDetails(scope.row,3)">
+                    <div class="text" style="color: #EB5757">
+                      <img src="../../assets/autoplay/cancel.svg" alt="cancel">
+                      未完成
+                    </div>
+                    <img src="../../assets/autoplay/chevron_right.svg" alt="chevron_right">
+                  </div>
                 </template>
               </el-table-column>
             </el-table>
@@ -334,8 +341,12 @@
                 总计交互地址: {{ongoingDataTotal}}
               </div>
             </div>
-            <div class="right" style="cursor: pointer" @click="refresh">
+<!--            <div class="right" style="cursor: pointer" @click="refresh">-->
+<!--              <img src="../../assets/autoplay/Frame.svg" alt="Frame">-->
+<!--            </div>-->
+            <div class="button" @click="refresh">
               <img src="../../assets/autoplay/Frame.svg" alt="Frame">
+              刷新
             </div>
           </div>
           <div class="table">
@@ -520,12 +531,188 @@
               <img src="../../assets/autoplay/done_all.svg" alt="done_all">
               执行进度已完成
             </div>
-            <div class="number">
-              {{ currentTaskInfo.executeTimes }}/{{ currentTaskInfo.planTimes }}
+<!--            <div class="number">-->
+<!--              {{ currentTaskInfo.executeTimes }}/{{ currentTaskInfo.planTimes }}-->
+<!--            </div>-->
+          </div>
+        </div>
+      </div>
+      <div class="drawerRecord-container" v-if="drawerRecordStatus === 3">
+        <div class="drawerAddress-container-head">
+          <div class="drawerAddress-container-head-left">
+            <div class="back" style="cursor: pointer;" @click="drawerRecordStatus = 0">
+              <img src="../../assets/autoplay/arrow_left_alt.svg" alt="arrow_left_alt">
+              返回
+            </div>
+            <div class="missionName">
+              <div class="id">
+                {{ currentTaskInfo.amsTaskId }}
+              </div>
+              <div class="name">
+                {{ currentTaskInfo.taskName }}
+              </div>
+            </div>
+            <div class="text" style="color: #2980FF">
+              任务交互类型: {{ currentTaskInfo.taskType }}
+            </div>
+          </div>
+        </div>
+        <div class="drawerAddress-container-main">
+          <div class="interactionStrategy">
+            <div class="item">
+              <div class="title">
+                <img src="../../assets/autoplay/account_balance_wallet.svg" alt="account_balance_wallet">
+                交互钱包
+              </div>
+              <div class="info">
+                {{ currentRecordData.groupName }}
+              </div>
+            </div>
+            <div class="item">
+              <div class="title">
+                <img src="../../assets/autoplay/avg_pace.svg" alt="avg_pace">
+                最小间隔时间
+              </div>
+              <div class="info">
+                {{ currentRecordData.intervalMin }}/分
+              </div>
+            </div>
+            <div class="item">
+              <div class="title">
+                <img src="../../assets/autoplay/avg_pace.svg" alt="avg_pace">
+                最大间隔时间
+              </div>
+              <div class="info">
+                {{ currentRecordData.intervalMax }}/分
+              </div>
+            </div>
+            <div class="item">
+              <div class="title">
+                <img src="../../assets/autoplay/gas_meter.svg" alt="gas_meter">
+                最大 Gas fee
+              </div>
+              <div class="info">
+                {{ currentRecordData.maxGas }}
+              </div>
+            </div>
+            <div class="item" v-for="item in currentRecordData.airdropParams">
+              <div class="title">
+                {{item.note}}
+              </div>
+              <div class="info">
+                {{ item.value }}
+              </div>
+            </div>
+          </div>
+          <div class="recordTitle">
+            <div class="left">
+              <div class="text">
+                正在进行中
+              </div>
+              <div class="number">
+                总计交互地址: {{ongoingDataTotal}}
+              </div>
+            </div>
+            <div style="display: flex;align-items: center;gap:32px">
+              <div class="button" style="color: #EB5757" @click="retryPassword = true">
+                <img src="../../assets/autoplay/retry.svg" alt="retry">
+                重试失败
+              </div>
+              <div class="button" @click="refresh">
+                <img src="../../assets/autoplay/Frame.svg" alt="Frame">
+                刷新
+              </div>
+            </div>
+
+          </div>
+          <div class="table">
+            <el-table
+              :data="ongoingData"
+              style="width: 100%">
+              <el-table-column
+                prop="address"
+                label="地址"
+                width="150">
+              </el-table-column>
+              <el-table-column
+                label="金额"
+                prop="amount">
+              </el-table-column>
+              <el-table-column
+                label="Gas"
+                prop="gas">
+              </el-table-column>
+              <el-table-column
+                label="TX ID"
+                prop="txId">
+              </el-table-column>
+              <el-table-column
+                label="状态"
+                prop="status">
+                <template v-slot="scope">
+                  <div class="status" style="cursor: auto">
+                    <div class="text" v-if="scope.row.status === 0" style="color: #EB5757;">
+                      <img src="../../assets/autoplay/cancel.svg" alt="cancel">
+                      未完成
+                    </div>
+                    <div class="text" v-if="scope.row.status === 1">
+                      <img src="../../assets/autoplay/check.svg" alt="check">
+                      已完成
+                    </div>
+                  </div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+        <div class="drawerView-container-footer">
+          <div class="pagination">
+            <el-pagination
+              small
+              layout="prev, pager, next"
+              :page-size="10"
+              :total="3">
+            </el-pagination>
+          </div>
+        </div>
+        <div class="progressBarBox">
+          <div class="progressBar" style="background: #EB5757">
+            <div class="progressBar-two" style="background: #EB5757">
+              <img src="../../assets/autoplay/done_all.svg" alt="done_all">
+              执行进度已完成,部分失败
             </div>
+            <!--            <div class="number">-->
+            <!--              {{ currentTaskInfo.executeTimes }}/{{ currentTaskInfo.planTimes }}-->
+            <!--            </div>-->
           </div>
         </div>
+        <div class="accountPassword" v-if="retryPassword">
+          <div class="title">
+            输入钱包密码
+          </div>
+          <div class="inputTitle">
+            钱包密码
+          </div>
+          <el-input type="password" :show-password="true" v-model="retryParams.password"
+                    placeholder="输入钱包密码"></el-input>
+          <div class="confirm" @click="retry">
+            <img src="../../assets/autoplay/check1.svg" alt="check1">
+            确认
+          </div>
+          <div class="tip">
+            <div class="title">
+              <img src="../../assets/address/tips_and_updates.svg" alt="tips_and_updates">
+              提示
+            </div>
+            <div class="description">
+              此密码为您账户钱包的 Keystore 密码,请妥善保管,
+              系统无法为您找回。
+            </div>
+          </div>
+        </div>
+
       </div>
+
     </el-drawer>
     <el-drawer
       :visible.sync="drawerStrategy"
@@ -721,7 +908,7 @@
 <script>
 import {addTaskInfo, batchExecution, getExecutionRecord, modifyTaskInfo, parameterSearch, taskPage} from "@/api/task";
 import {getGroupList} from "@/api/adress";
-import {getInteractionRecord} from "@/api/record";
+import {getInteractionRecord, retryFailed} from "@/api/record";
 import {projectPage} from "@/api/project";
 
 export default {
@@ -754,6 +941,7 @@ export default {
       ongoingDataTotal:0,
       drawerStrategy: false,
       accountPassword: false,
+      retryPassword:false,
       batchExecutionParams: {
         groupName: '',
         maxGas: '',
@@ -764,6 +952,10 @@ export default {
         projectId: '',
         taskId: ''
       },
+      retryParams:{
+        executeId:'',
+        password:''
+      },
       currentTaskInfo: {
         taskType: '',
         taskName: '',
@@ -930,6 +1122,21 @@ export default {
       parameterSearch(taskCode).then(res => {
         this.paramsData = res
       })
+    },
+    retry(){
+      let params = {
+        executeId:this.currentRecordData.executeId,
+        password:this.retryParams.password
+      }
+      retryFailed(params).then(res =>{
+        console.log(res);
+        this.refresh()
+        this.retryPassword = false
+      })
+    },
+    drawerRecordClosed(){
+      this.drawerRecordStatus = 0;
+      this.retryPassword = false
     }
   }
 }
@@ -1485,6 +1692,17 @@ export default {
             color: #8e8f91;
           }
         }
+        .button{
+          display: flex;
+          align-items: center;
+          width: fit-content;
+          height: 36px;
+          gap:4px;
+          border: 1px solid #E0E0E0;
+          border-radius: 40px;
+          padding: 0 12px;
+          cursor: pointer;
+        }
       }
 
       .table {
@@ -1578,6 +1796,78 @@ export default {
         }
       }
     }
+    .accountPassword {
+      width: 440px;
+      height: 374px;
+      background: #fbfdff;
+      border-radius: 10px;
+      position: fixed;
+      margin: auto;
+      left: 0;
+      right: 0;
+      top: 0;
+      bottom: 0;
+      padding: 36px 40px;
+
+      .title {
+        font-weight: 700;
+        font-size: 21px;
+        line-height: 28px;
+        color: #212121;
+      }
+
+      .inputTitle {
+        font-weight: 500;
+        font-size: 14px;
+        line-height: 18px;
+        color: #383838;
+        margin-top: 32px;
+        margin-bottom: 12px;
+      }
+
+      .confirm {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        gap: 8px;
+        font-weight: 700;
+        font-size: 15px;
+        line-height: 20px;
+        color: #FFFFFF;
+        width: 100%;
+        height: 52px;
+        background: #2980ff;
+        border-radius: 6px;
+        margin-top: 12px;
+        margin-bottom: 20px;
+        cursor: pointer;
+      }
+
+      .tip {
+        display: flex;
+        flex-direction: column;
+        gap: 9px;
+        margin-top: 36px;
+
+        .title {
+          display: flex;
+          align-items: center;
+          gap: 4px;
+          font-weight: 700;
+          font-size: 17px;
+          line-height: 22px;
+          color: #EB5757;
+        }
+
+        .description {
+          font-weight: 400;
+          font-size: 14px;
+          line-height: 18px;
+          color: #EB5757;
+        }
+      }
+    }
+
   }
 
   .drawerStrategy-container {