Parcourir la source

Merge branch 'master' of https://git.ichaoj.com/MorningWhale/ams-backend

cjwen il y a 1 an
Parent
commit
515583e9d9

+ 46 - 0
front/admin-front/src/api/project.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+export function projectPage(data) {
+  return request({
+    url: '/ams/airdrop-project/page',
+    method: 'post',
+    data
+  })
+}
+
+export function projectNum() {
+  return request({
+    url:'/ams/airdrop-project/count/projectNum',
+    method: 'get'
+  })
+}
+
+export function createAirdropProject(data) {
+  return request({
+    url: '/ams/airdrop-project',
+    method: 'post',
+    data
+  })
+}
+
+export function modifyAirdropProject(data) {
+  return request({
+    url: '/ams/airdrop-project',
+    method: 'put',
+    data
+  })
+}
+
+export function deleteAirdropProject(projectId) {
+  return request({
+    url: '/ams/airdrop-project/' + projectId,
+    method: 'delete'
+  })
+}
+
+export function viewProjectDetails(data) {
+  return request({
+    url:'/ams/airdrop-project/detail/' + data,
+    method: 'get'
+  })
+}

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

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getInteractionRecord(data) {
+  return request({
+    url: '/ams/trade-record/page',
+    method: 'post',
+    data
+  })
+}

+ 36 - 0
front/admin-front/src/api/statistics.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+export function expectedInput() {
+  return request({
+    url: '/ams/statistics/predict-cost',
+    method: 'get',
+  })
+}
+
+export function countFee() {
+  return request({
+    url: '/ams/statistics/count-fee',
+    method: 'get',
+  })
+}
+
+export function dailyCost() {
+  return request({
+    url: '/ams/statistics/daily-cost',
+    method: 'get',
+  })
+}
+
+export function taskProgress() {
+  return request({
+    url: '/ams/statistics/task-progress',
+    method: 'get',
+  })
+}
+
+export function addressGroup() {
+  return request({
+    url: '/ams/statistics/address-group',
+    method: 'get',
+  })
+}

+ 32 - 0
front/admin-front/src/api/task.js

@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+
+export function taskPage() {
+  return request({
+    url: '/ams/airdrop-task/list',
+    method: 'get',
+  })
+}
+
+export function batchExecution(data) {
+  return request({
+    url: '/ams/execute',
+    method: 'post',
+    data
+  })
+}
+
+export function getExecutionRecord(data) {
+  return request({
+    url: '/ams/execute/page',
+    method: 'post',
+    data
+  })
+}
+
+export function modifyTaskInfo(data) {
+  return request({
+    url: '/ams/airdrop-task',
+    method: 'put',
+    data
+  })
+}

+ 0 - 1
front/admin-front/src/views/address/index.vue

@@ -474,7 +474,6 @@
 import {
   addPremiumAddress,
   batchAddress,
-  downloadAddress,
   getCountAddress, getEventRecord,
   getGroupList,
   pageAddress

+ 354 - 169
front/admin-front/src/views/airdrop/index.vue

@@ -21,7 +21,7 @@
         </div>
       </div>
       <div class="app-container-head-right">
-        <div class="app-container-head-right-button" @click="drawerProject = true">
+        <div class="app-container-head-right-button" @click="addItem">
           <img src="../../assets/airdrop/add.svg" alt="add">
           添加项目
         </div>
@@ -30,10 +30,7 @@
     <div class="app-container-table">
       <div class="app-container-table-title">
         <div class="app-container-table-title-left">
-          空投列表
-        </div>
-        <div class="app-container-table-title-right">
-          总计数量: {{table.totalNumber}}
+          项目列表
         </div>
       </div>
       <div class="app-container-table-screening">
@@ -49,8 +46,8 @@
       <div class="app-container-table-main">
         <el-table
           :data="tableData"
-          style="width: 100%"
-          @row-click="drawerInfo = true">
+          style="width: 100%;cursor: pointer"
+          @row-click="tableRowClick">
           <el-table-column
             label="项目名称"
             width="280">
@@ -66,10 +63,10 @@
             <template v-slot="scope">
               <div class="progress">
                 <div class="score">
-                  {{scope.row.totalNumber}} / {{scope.row.completedNumber}}
+                  {{scope.row.taskTotalCount}} / {{scope.row.taskFinishCount}}
                 </div>
                 <div class="progressBar">
-                  <el-progress :show-text="false" :stroke-width="12" :percentage="(scope.row.completedNumber/scope.row.totalNumber*100)"></el-progress>
+                  <el-progress :show-text="false" :stroke-width="12" :percentage="(scope.row.taskFinishCount/scope.row.taskTotalCount*100)"></el-progress>
                 </div>
               </div>
             </template>
@@ -78,19 +75,19 @@
             label="状态"
             width="215">
             <template v-slot="scope">
-              <div v-if="scope.row.status === 0" class="status-0" style="color: #828282">
+              <div v-if="scope.row.status === 'DROPPED'" class="status-0" style="color: #828282">
                 <img src="../../assets/airdrop/file_download_done.svg" alt="file_download_done">
                 已空投
               </div>
-              <div v-if="scope.row.status === 1" class="status-0" style="color: #EB5757">
+              <div v-if="scope.row.status === 'NOT_DROPPED'" class="status-0" style="color: #EB5757">
                 <img src="../../assets/airdrop/dangerous.svg" alt="dangerous">
                 未空投
               </div>
-              <div v-if="scope.row.status === 2" class="status-0" style="color: #2980FF">
+              <div v-if="scope.row.status === 'ONGOING'" class="status-0" style="color: #2980FF">
                 <img src="../../assets/airdrop/airplanemode_active.svg" alt="airplanemode_active">
                 进行中
               </div>
-              <div v-if="scope.row.status === 3" class="status-0" style="color: #222222">
+              <div v-if="scope.row.status === 'NOT_STARTED'" class="status-0" style="color: #222222">
                 <img src="../../assets/airdrop/airline_seat_recline_extra.svg" alt="airline_seat_recline_extra">
                 未开始
               </div>
@@ -101,7 +98,7 @@
             width="170">
             <template v-slot="scope">
               <div class="gas">
-                {{scope.row.gas}}
+                {{scope.row.totalGas}}
               </div>
             </template>
           </el-table-column>
@@ -110,26 +107,18 @@
             width="185">
             <template v-slot="scope">
               <div class="website">
-                <a target="_blank" :href="scope.row.officialWebsite">
-                  {{scope.row.officialWebsite}}
+                <a target="_blank" :href="scope.row.projectUrl">
+                  {{scope.row.projectUrl}}
                 </a>
               </div>
             </template>
           </el-table-column>
           <el-table-column
             label="开始时间"
-            width="130">
+            >
             <template v-slot="scope">
               <div class="startTime">
-                {{scope.row.startTime}}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column
-            label="结束时间">
-            <template v-slot="scope">
-              <div class="endTime">
-                {{scope.row.endTime}}
+                {{scope.row.createTime}}
               </div>
             </template>
           </el-table-column>
@@ -146,15 +135,15 @@
               添加项目
             </div>
             <div class="drawerProject-container-tip">
-              空投项目: 85
+              新增空投项目
             </div>
           </div>
           <div class="drawerProject-container-head-right">
-            <div class="cancellation">
-              <img src="../../assets/address/close.svg" alt="close">
-              取消
-            </div>
-            <div class="complete">
+<!--            <div class="cancellation">-->
+<!--              <img src="../../assets/address/close.svg" alt="close">-->
+<!--              取消-->
+<!--            </div>-->
+            <div class="complete" @click="createProject">
               <img src="../../assets/address/done_all.svg" alt="done_all">
               完成
             </div>
@@ -167,22 +156,32 @@
           <div class="info">
             <el-upload
               class="upload-demo"
-              action="https://jsonplaceholder.typicode.com/posts/"
-              :on-preview="handlePreview"
-              :on-remove="handleRemove"
-              :before-remove="beforeRemove"
-              multiple
-              :limit="3"
-              :on-exceed="handleExceed">
+              :action="upload.url + 'disk/file/upload'"
+              :headers="upload.headerMsg"
+              :data="upload.extra"
+              :on-success="handleAvatarSuccess"
+              :show-file-list="false">
               <div class="uploadImg">
                 <img src="../../assets/airdrop/add_photo_alternate.svg" alt="add_photo_alternate">
-                上传图片
               </div>
             </el-upload>
-            <el-input v-model="input" placeholder="输入项目名称"></el-input>
+            <div class="uploadImg"  v-if="createProjectParams.projectLogo">
+              <img class="uploadImg" :src="upload.url + 'disk/file/' + createProjectParams.projectLogo" alt="uploadImg">
+            </div>
           </div>
-          <el-input v-model="input" placeholder="预计投入USDT"></el-input>
-          <el-input v-model="input" placeholder="输入项目相关URL"></el-input>
+          <div style="display: flex;align-items: center;gap:40px">
+            <el-input v-model="createProjectParams.projectName" placeholder="输入项目名称"></el-input>
+            <el-select v-model="createProjectParams.status" placeholder="选择项目状态">
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <el-input v-model="createProjectParams.estimatedCost" placeholder="预计投入USDT"></el-input>
+          <el-input v-model="createProjectParams.projectUrl" placeholder="输入项目相关URL"></el-input>
         </div>
       </div>
     </el-drawer>
@@ -191,55 +190,74 @@
       :with-header="false"
       @closed="record = false">
       <div class="drawerInfo-container">
-        <div class="drawerInfo-container-head" v-if="record === false">
-          <div class="drawerInfo-container-head-left">
-            <div class="drawerInfo-container-title">
-              基本信息
+        <div class="drawerProject-container-head" v-if="record === false">
+          <div class="drawerProject-container-head-left">
+            <div class="drawerProject-container-title">
+              {{modifyProjectParams.projectName}}
             </div>
-            <div class="drawerInfo-container-projectInfo" >
-              <div class="left">
-                <div class="avatar">
-
-                </div>
-                <div class="infoBox">
-                  <div class="projectName">
-                    zkSync Era
-                  </div>
-                  <div class="link">
-                    <img src="../../assets/airdrop/language.svg" alt="language">
-                    https://zksync.io/
-                  </div>
-                </div>
-              </div>
-              <div class="right">
-                <div class="type">
-                  <img src="../../assets/airdrop/done_all.svg" alt="done_all">
-                  已空投
-                </div>
+            <div class="drawerProject-container-tip">
+              查看项目信息
+            </div>
+          </div>
+          <div class="drawerProject-container-head-right">
+            <div class="complete" @click="modifyProject">
+              <img src="../../assets/address/done_all.svg" alt="done_all">
+              完成
+            </div>
+          </div>
+        </div>
+        <div class="drawerProject-container-main" v-if="record === false">
+          <div class="title1">
+            基本信息
+          </div>
+          <div class="info">
+            <el-upload
+              class="upload-demo"
+              :action="upload.url + 'disk/file/upload'"
+              :headers="upload.headerMsg"
+              :data="upload.extra"
+              :on-success="handleAvatarSuccess"
+              :show-file-list="false">
+              <div class="uploadImg">
+                <img src="../../assets/airdrop/add_photo_alternate.svg" alt="add_photo_alternate">
               </div>
+            </el-upload>
+            <div class="uploadImg"  v-if="modifyProjectParams.projectLogo">
+              <img class="uploadImg" :src="upload.url + 'disk/file/' + modifyProjectParams.projectLogo" alt="uploadImg">
             </div>
           </div>
+          <div style="display: flex;align-items: center;gap:40px">
+            <el-input v-model="modifyProjectParams.projectName" placeholder="输入项目名称"></el-input>
+            <el-select v-model="modifyProjectParams.status" placeholder="选择项目状态">
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+          <el-input v-model="modifyProjectParams.estimatedCost" placeholder="预计投入USDT"></el-input>
+          <el-input v-model="modifyProjectParams.projectUrl" placeholder="输入项目相关URL"></el-input>
         </div>
         <div class="drawerInfo-container-main" v-if="record === false">
           <div class="title1" style="margin-bottom: 8px">
             任务
           </div>
           <div class="title2">
-            总任务数:2
+            总任务数:{{modifyProjectParams.tasks.length}}
           </div>
           <div class="list">
-            <div class="list-item" v-for="(item,index) in 3">
+            <div class="list-item" v-for="(item,index) in modifyProjectParams.tasks">
               <div class="title">
-                task
+                任务
               </div>
               <div class="infoBox">
                 <div class="one">
-                  Bridge
+                  {{item.taskType}}
                 </div>
-                <div class="two">
-                  任务名称
-                </div>
-                <div class="three" @click="record = true">
+                <el-input style="width: 50%" v-model="item.taskName" placeholder="预计任务名称"></el-input>
+                <div class="three" @click="viewExecutionHistory(item)">
                   执行记录
                 </div>
               </div>
@@ -247,11 +265,7 @@
           </div>
         </div>
         <div class="drawerInfo-container-footer" v-if="record === false">
-          <div class="item" style="color: #222222">
-            <img src="../../assets/airdrop/page_info.svg" alt="page_info">
-            管理项目
-          </div>
-          <div class="item" style="color: #EB5757">
+          <div class="item" @click="deleteProject" style="color: #EB5757">
             <img src="../../assets/airdrop/link_off.svg" alt="link_off">
             删除
           </div>
@@ -259,7 +273,7 @@
         <div class="drawerInfo-container-head" v-if="record === true">
           <div class="drawerInfo-container-head-left">
             <div class="title1" style="margin-bottom: 8px">
-              基本信息
+              执行记录
             </div>
             <div class="title2">
               交互任务批量执行记录
@@ -272,7 +286,7 @@
             交互记录
           </div>
           <div class="title2">
-            总计交互任务:3
+            总计交互任务:{{interactionRecordList.length}}
           </div>
           <div class="table-th">
             <div class="time">
@@ -289,15 +303,15 @@
             </div>
           </div>
           <div class="table-list">
-            <div class="table-item" v-for="(item,index) in recordList">
+            <div class="table-item" v-for="(item,index) in interactionRecordList">
               <div class="time">
-                {{item.time}}
+                {{item.createTime}}
               </div>
               <div class="total">
-                {{item.total}}
+                {{parseFloat(item.amount).toFixed(4)}}
               </div>
               <div class="gas">
-                {{item.gas}}
+                {{parseFloat(item.gas).toFixed(4)}}
               </div>
               <div class="status" v-if="item.status === 0">
                 <img src="../../assets/airdrop/check.svg" alt="check"> 已完成
@@ -310,13 +324,13 @@
 
         </div>
         <div class="drawerInfo-container-footer" v-if="record === true">
-          <div class="item" style="color: #222222">
-            <img src="../../assets/airdrop/page_info.svg" alt="page_info">
-            管理
-          </div>
-          <div class="item" style="color: #EB5757">
-            <img src="../../assets/airdrop/link_off.svg" alt="link_off">
-            删除
+          <div class="pagination">
+            <el-pagination
+              small
+              layout="prev, pager, next"
+              :page-size="10"
+              :total="3">
+            </el-pagination>
           </div>
         </div>
       </div>
@@ -326,93 +340,184 @@
 </template>
 
 <script>
+import {
+  projectPage,
+  createAirdropProject,
+  modifyAirdropProject,
+  projectNum,
+  viewProjectDetails,
+  deleteAirdropProject
+} from "@/api/project";
+import {getToken} from '@/utils/auth';
+import constant from "@/api/constant";
+import {getInteractionRecord} from "@/api/record";
+
 export default {
   data() {
     return {
       head: {
-        projectsNumber:85,
-        ongoingNumber:5
-      },
-      table:{
-        totalNumber:22222
+        projectsNumber:0,
+        ongoingNumber:0
       },
       tableData: [
         {
-        projectName:'Zk',
-        totalNumber:5,
-        completedNumber:2,
-        status:0,
-        gas:1,
-        officialWebsite:"https://nytimes.com",
-        startTime:'16/08/2013',
-        endTime:'16/08/2013'
+          amsProjectId:'',
+          createTime:'',
+          estimatedCost:'',
+          projectLogo:'',
+          projectName:'',
+          projectUrl:'',
+          status:'',
+          taskFinishCount:0,
+          taskTotalCount:1,
+          updateTime:''
+        }
+      ],
+      createProjectParams:{
+        projectUrl:'',
+        projectLogo:'',
+        status:'',
+        estimatedCost:'',
+        projectName:''
+      },
+      modifyProjectParams:{
+        amsProjectId:'',
+        projectUrl:'',
+        projectLogo:'',
+        status:'',
+        estimatedCost:'',
+        projectName:'',
+        tasks:[
+          {
+            taskName:'',
+            taskId:''
+          },
+        ]
+      },
+      options: [{
+        value: 'NOT_STARTED',
+        label: '未开始'
       }, {
-        projectName:'LayerZero',
-        totalNumber:4,
-        completedNumber:1,
-        status:1,
-        gas:23,
-        officialWebsite:"https://nytimes.com",
-        startTime:'16/08/2013',
-        endTime:'16/08/2013'
+        value: 'ONGOING',
+        label: '运行中'
       }, {
-        projectName:'StarkNet',
-        totalNumber:1,
-        completedNumber:0,
-        status:2,
-        gas:23,
-        officialWebsite:"https://nytimes.com",
-        startTime:'16/08/2013',
-        endTime:'16/08/2013'
+        value: 'NOT_DROPPED',
+        label: '未空投'
       }, {
-        projectName:'Sei',
-        totalNumber:3,
-        completedNumber:2,
-        status:3,
-        gas:23,
-        officialWebsite:"https://nytimes.com",
-        startTime:'16/08/2013',
-        endTime:'16/08/2013'
-      }
-      ],
+        value: 'DROPPED',
+        label: '已空投'
+      }],
+      upload:{
+        url:process.env.VUE_APP_BASE_API,
+        headerMsg:{},
+        extra:''
+      },
       drawerProject:false,
       input:'',
       drawerInfo:false,
       record:false,
-      recordList:[
-        {
-          time:'09-09',
-          total:'金额',
-          gas:'Gas',
-          status:0,
-        },
-        {
-          time:'09-09',
-          total:'金额',
-          gas:'Gas',
-          status:0,
-        },
-        {
-          time:'09-09',
-          total:'金额',
-          gas:'Gas',
-          status:1,
-        },
-      ]
+      interactionRecordList:[]
     }
   },
+  mounted() {
+    this.getProjectPage()
+    this.getProjectNum()
+  },
   methods: {
-    handleRemove(file, fileList) {
-      console.log(file, fileList);
+    handleAvatarSuccess(res){
+      this.createProjectParams.projectLogo = res.data
+      this.modifyProjectParams.projectLogo = res.data
     },
-    handlePreview(file) {
-      console.log(file);
+    getProjectPage() {
+      let params = {
+        page:1,
+        pageSize:10,
+      }
+      projectPage(params).then(res=>{
+        this.tableData = res.records
+        this.head.projectsNumber = res.total
+      })
+      this.getProjectNum()
     },
-    handleExceed(files, fileList) {
-      this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
+    createProject() {
+      let params = {
+        projectUrl:this.createProjectParams.projectUrl,
+        projectLogo:this.createProjectParams.projectLogo,
+        estimatedCost:this.createProjectParams.estimatedCost,
+        projectName:this.createProjectParams.projectName
+      }
+      createAirdropProject(params).then(()=>{
+        this.getProjectPage()
+        this.drawerProject = false
+        this.createProjectParams = {
+          projectUrl:'',
+          projectLogo:'',
+          status:'',
+          estimatedCost:'',
+          projectName:''
+        }
+      })
     },
-    beforeRemove(file, fileList) {
-      return this.$confirm(`确定移除 ${ file.name }?`);
+    modifyProject() {
+      let params = {
+        amsProjectId:this.modifyProjectParams.amsProjectId,
+        projectUrl:this.modifyProjectParams.projectUrl,
+        projectLogo:this.modifyProjectParams.projectLogo,
+        status:this.modifyProjectParams.status,
+        estimatedCost:this.modifyProjectParams.estimatedCost,
+        projectName:this.modifyProjectParams.projectName
+      }
+      modifyAirdropProject(params).then(()=>{
+        this.getProjectPage()
+        this.drawerInfo = false
+      })
+    },
+    deleteProject() {
+      let params = this.modifyProjectParams.amsProjectId
+      deleteAirdropProject(params).then(()=>{
+        this.getProjectPage()
+        this.drawerInfo = false
+      })
+    },
+    getProjectNum() {
+      projectNum().then(res=>{
+        this.head.ongoingNumber = res.runningCount
+      })
+    },
+    addItem() {
+      this.drawerProject = true
+      this.initUpload()
+    },
+    initUpload() {
+      if (getToken()) {
+        this.upload.headerMsg['X-UC-AuthToken'] = getToken()
+      }
+      this.upload.headerMsg['Accept-Language'] = 'en-US';
+      this.upload.headerMsg["X-SYSTEM-ID"] = constant.systemId ? constant.systemId : ""
+      this.upload.headerMsg["X-SYSTEM-GROUP-ID"] = constant.systemGroupId ? constant.systemGroupId : ""
+      //额外参数
+      this.upload.extra = {
+        table: 'dv_reviews_pic',
+        col: 'pic_id'
+      }
+    },
+    tableRowClick(row) {
+      this.initUpload()
+      viewProjectDetails(row.amsProjectId).then(res=>{
+        this.modifyProjectParams = res
+        this.drawerInfo = true
+      })
+    },
+    viewExecutionHistory(item) {
+      let params = {
+        page: 1,
+        pageSize: 10,
+        queryValue: item.amsTaskId
+      }
+      getInteractionRecord(params).then((res)=>{
+        this.interactionRecordList = res.records
+        this.record = true
+      })
     }
   }
 }
@@ -468,6 +573,7 @@ export default {
         font-size: 15px;
         line-height: 20px;
         color: #FFFFFF;
+        cursor: pointer;
       }
     }
   }
@@ -524,6 +630,9 @@ export default {
           font-size: 17px;
           line-height: 22px;
           color: #222222;
+          width: 60px;
+          display: flex;
+          justify-content: center;
         }
         .progressBar{
           width: 160px;
@@ -639,6 +748,7 @@ export default {
           font-size: 15px;
           line-height: 20px;
           color: #2980FF;
+          cursor: pointer;
         }
       }
 
@@ -657,17 +767,11 @@ export default {
         .uploadImg{
           display: flex;
           align-items: center;
-          gap:4px;
-          width: 124px;
-          height: 52px;
+          justify-content: center;
+          width: 68px;
+          height: 68px;
           border: 1px solid #2980FF;
           border-radius: 40px;
-          padding: 0 20px;
-          font-weight: 400;
-          font-size: 15px;
-          line-height: 20px;
-          color: #2980FF;
-          white-space: nowrap;
         }
       }
     }
@@ -676,6 +780,7 @@ export default {
     display: flex;
     flex-direction: column;
     height: 100vh;
+    overflow: auto;
     .title1{
       font-weight: 700;
       font-size: 21px;
@@ -823,6 +928,7 @@ export default {
               font-size: 15px;
               line-height: 20px;
               color: #2980FF;
+              cursor: pointer;
             }
           }
         }
@@ -891,6 +997,84 @@ export default {
       }
 
     }
+    .drawerProject-container-head{
+      padding: 56px 40px;
+      background: #FFFFFF;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .drawerProject-container-head-left{
+        .drawerProject-container-title{
+          font-weight: 700;
+          font-size: 21px;
+          line-height: 28px;
+          color: #181818;
+          margin-bottom: 8px;
+        }
+        .drawerProject-container-tip{
+          font-weight: 700;
+          font-size: 12px;
+          line-height: 16px;
+          color: #919191;
+        }
+      }
+      .drawerProject-container-head-right{
+        display: flex;
+        align-items: center;
+        gap:48px;
+        .cancellation{
+          width: 118px;
+          height: 52px;
+          background: #E0E0E0;
+          border-radius: 10px;
+          gap: 4px;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          font-weight: 700;
+          font-size: 15px;
+          line-height: 20px;
+          color: #828282;
+        }
+        .complete{
+          width: 118px;
+          height: 52px;
+          border: 2px solid #4A76FF;
+          border-radius: 10px;
+          gap:4px;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          font-weight: 700;
+          font-size: 15px;
+          line-height: 20px;
+          color: #2980FF;
+          cursor: pointer;
+        }
+      }
+
+    }
+    .drawerProject-container-main{
+      padding: 36px 40px 0 40px;
+      background: #f9fbff;
+      display: flex;
+      flex-direction: column;
+      gap:24px;
+      .info{
+        display: flex;
+        align-items: center;
+        gap:24px;
+        .uploadImg{
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          width: 68px;
+          height: 68px;
+          border: 1px solid #2980FF;
+          border-radius: 40px;
+        }
+      }
+    }
     .drawerInfo-container-footer{
       width: 100%;
       height: 84px;
@@ -906,6 +1090,7 @@ export default {
         font-weight: 700;
         font-size: 17px;
         line-height: 22px;
+        cursor: pointer;
       }
     }
   }

+ 245 - 199
front/admin-front/src/views/autoplay/index.vue

@@ -17,11 +17,11 @@
        <div class="app-container-table-main-item"  v-for="(item,index) in missionData">
          <div class="head">
             <div class="avatar">
-
+              <img class="avatar" :src="url + 'disk/file/' + item.projectLogo" alt="avatar">
             </div>
-            <div class="name" @click="drawerDetails = true">
+            <div class="name" @click="viewTaskDetails(item)">
               <div class="missionName">
-                {{item.missionName}}
+                {{item.taskName}}
                 <img src="../../assets/autoplay/arrow_forward.svg" alt="arrow_forward">
               </div>
               <div class="projectName">
@@ -29,31 +29,31 @@
               </div>
             </div>
           </div>
-         <div class="jump" @click="jumpRecord">
+         <div class="jump" @click="viewExecutionHistory(item)">
            执行记录
            <img src="../../assets/autoplay/arrow_forward.svg" alt="arrow_forward">
          </div>
          <div class="implementationStrategy">
-           <div class="item" v-if="item.implementationStrategy.length > 0" v-for="(item1,index) in item.implementationStrategy">
-             {{item1}}
-           </div>
-           <div class="item-no" v-if="item.implementationStrategy.length === 0">
+<!--           <div class="item" v-if="item.implementationStrategy.length > 0" v-for="(item1,index) in item.implementationStrategy">-->
+<!--             {{item1}}-->
+<!--           </div>-->
+           <div class="item-no" >
              暂无
            </div>
          </div>
          <div class="implementationStrategyText">
             执行策略
          </div>
-         <div class="underImplementation" v-if="item.status === 0">
+         <div class="underImplementation" v-if="item.executeStatus === 0">
            <div class="numberOfExecutions">
              <div class="text">
                当前执行/计划执行次数
              </div>
              <div class="number">
-               {{item.currentExecution}}/{{item.executionNumber}}
+               {{item.executeTimes}}/{{item.planTimes}}
              </div>
            </div>
-           <div class="progressBar">
+           <div class="progressBar" @click="progressBarDetails(item)">
              <div class="progressBar-blue">
                <img src="../../assets/autoplay/airplanemode_active.svg" alt="airplanemode_active">
                进行中
@@ -64,23 +64,23 @@
              </div>
            </div>
          </div>
-         <div class="batchExecution" v-if="item.status === 1">
+         <div class="batchExecution" v-if="item.executeStatus === 1">
            <div class="left">
              <div class="number">
-               {{item.currentExecution}}/{{item.executionNumber}}
+               {{item.executeTimes}}/{{item.planTimes}}
              </div>
              <div class="text">
                当前执行/计划执行次数
              </div>
            </div>
-           <div class="right" @click="drawerStrategy = true">
+           <div class="right" @click="batchExecution(item)">
              <img src="../../assets/autoplay/autoplay.svg" alt="autoplay">
              批量执行
            </div>
          </div>
          <div class="horizontalLine"/>
          <div class="time">
-           上次执行时间: {{item.time}}
+           上次执行时间: {{item.lastExecuteTime}}
          </div>
        </div>
     </div>
@@ -91,22 +91,22 @@
         <div class="drawerAddress-container-head">
           <div class="drawerAddress-container-head-left">
             <div class="avatar">
-
+              <img class="avatar" :src="url + 'disk/file/' + currentTaskInfo.projectLogo" alt="avatar">
             </div>
             <div class="info">
               <div class="projectName">
-                LayerZero
+                {{currentTaskInfo.projectName}}
               </div>
               <div class="id">
-                任务id
+                {{currentTaskInfo.amsTaskId}}
               </div>
             </div>
           </div>
           <div class="drawerAddress-container-head-right">
-            <div class="complete">
-              <img src="../../assets/address/done_all.svg" alt="done_all">
-              完成
-            </div>
+<!--            <div class="complete" @click="modifyTask">-->
+<!--              <img src="../../assets/address/done_all.svg" alt="done_all">-->
+<!--              完成-->
+<!--            </div>-->
           </div>
         </div>
         <div class="drawerAddress-container-main">
@@ -114,12 +114,12 @@
             任务详情
           </div>
           <div class="input">
-            <el-input v-model="input" placeholder="任务名称"></el-input>
+            <el-input v-model="currentTaskInfo.taskName" placeholder="任务名称"></el-input>
           </div>
           <div class="select">
-            <el-select style="width: 140px" v-model="chainId" placeholder="选择公链">
+            <el-select style="width: 140px" v-model="currentTaskInfo.taskType" placeholder="选择类型">
               <el-option
-                v-for="item in options"
+                v-for="item in optionsTaskType"
                 :key="item.value"
                 :label="item.label"
                 :value="item.value">
@@ -135,10 +135,7 @@
             </el-select>
           </div>
           <div class="input">
-            <el-input v-model="input" placeholder="计划任务执行次数"></el-input>
-          </div>
-          <div class="input">
-            <el-input v-model="input" placeholder="预计Gas消耗"></el-input>
+            <el-input v-model="currentTaskInfo.planTimes" placeholder="计划任务执行次数"></el-input>
           </div>
         </div>
       </div>
@@ -163,15 +160,15 @@
         <div class="drawerAddress-container-main">
           <div class="drawerAddress-container-head-left">
             <div class="avatar">
-
+              <img class="avatar" :src="url + 'disk/file/' + currentTaskInfo.projectLogo" alt="avatar">
             </div>
             <div class="info">
               <div class="projectName">
-                zkSync Era
+                {{currentTaskInfo.projectName}}
               </div>
               <div class="webLink">
                 <img src="../../assets/autoplay/language.svg" alt="language">
-                https://zksync.io/
+                {{currentTaskInfo.projectUrl}}
               </div>
             </div>
           </div>
@@ -182,7 +179,7 @@
                 执行记录
               </div>
               <div class="number">
-                累计执行: 3
+                累计执行: {{recordData.length}}
               </div>
             </div>
             <div class="right">
@@ -200,35 +197,35 @@
               :data="recordData"
               style="width: 100%">
               <el-table-column
-                prop="id"
+                prop="executeId"
                 label="执行ID">
               </el-table-column>
               <el-table-column
-                prop="time"
+                prop="createTime"
                 label="时间">
               </el-table-column>
               <el-table-column
-                prop="amount"
+                prop="totalAmount"
                 label="累计金额">
               </el-table-column>
               <el-table-column
-                prop="gas"
+                prop="totalGas"
                 label="总GAS">
               </el-table-column>
               <el-table-column
-                prop="status"
+                prop="executeStatus"
                 label="状态"
-                width="150"
+                width="120"
                 align="center">
                 <template v-slot="scope">
-                  <div class="status" v-if="scope.row.status === 0" @click="drawerRecordStatus = 1">
+                  <div class="status" v-if="scope.row.executeStatus === 0" @click="viewRecordDetails(scope.row,1)">
                     <div class="text" style="color: #2980FF;">
                       <img src="../../assets/autoplay/clock_loader_60.svg" alt="clock_loader_60">
                       进行中
                     </div>
                     <img src="../../assets/autoplay/chevron_right.svg" alt="chevron_right">
                   </div>
-                  <div class="status" v-if="scope.row.status === 1" @click="drawerRecordStatus = 2">
+                  <div class="status" v-if="scope.row.executeStatus === 1" @click="viewRecordDetails(scope.row,2)">
                     <div class="text">
                       <img src="../../assets/autoplay/check.svg" alt="check">
                       已完成
@@ -256,14 +253,14 @@
           <div class="drawerAddress-container-head-left">
             <div class="missionName">
               <div class="id">
-                执行ID-3
+                {{currentTaskInfo.amsTaskId}}
               </div>
               <div class="name">
-                任务名称
+                {{currentTaskInfo.taskName}}
               </div>
             </div>
             <div class="text" style="color: #2980FF">
-              任务交互类型: Bridge
+              任务交互类型: {{currentTaskInfo.taskType}}
             </div>
           </div>
         </div>
@@ -275,16 +272,25 @@
                 交互钱包
               </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">
-                340s
+                {{currentRecordData.intervalMax}}/分
               </div>
             </div>
             <div class="item">
@@ -293,7 +299,7 @@
                 最大 Gas fee
               </div>
               <div class="info">
-                0.34
+                {{currentRecordData.maxGas}}
               </div>
             </div>
           </div>
@@ -362,7 +368,7 @@
               当前执行进度
             </div>
             <div class="number">
-              11/12
+              {{currentTaskInfo.executeTimes}}/{{currentTaskInfo.planTimes}}
             </div>
           </div>
         </div>
@@ -372,14 +378,14 @@
           <div class="drawerAddress-container-head-left">
             <div class="missionName">
               <div class="id">
-                执行ID-3
+                {{currentTaskInfo.amsTaskId}}
               </div>
               <div class="name">
-                任务名称
+                {{currentTaskInfo.taskName}}
               </div>
             </div>
             <div class="text" style="color: #2980FF">
-              任务交互类型: Bridge
+              任务交互类型: {{currentTaskInfo.taskType}}
             </div>
           </div>
         </div>
@@ -391,16 +397,25 @@
                 交互钱包
               </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">
-                340s
+                {{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">
@@ -409,14 +424,14 @@
                 最大 Gas fee
               </div>
               <div class="info">
-                0.34
+                {{currentRecordData.maxGas}}
               </div>
             </div>
           </div>
           <div class="recordTitle">
             <div class="left">
               <div class="text">
-                正在进行中
+                已完成
               </div>
               <div class="number">
                 总计交互地址: 3/100
@@ -471,7 +486,7 @@
               执行进度已完成
             </div>
             <div class="number">
-              12/12
+              {{currentTaskInfo.executeTimes}}/{{currentTaskInfo.planTimes}}
             </div>
           </div>
         </div>
@@ -489,7 +504,7 @@
                 执行策略
               </div>
               <div class="id">
-                Swap | 交互任务名称3
+                {{currentTaskInfo.taskType}} | {{currentTaskInfo.taskName}}
               </div>
             </div>
           </div>
@@ -505,65 +520,61 @@
             <div class="title">
               交互钱包
             </div>
-            <el-select v-model="chainId" placeholder="选择交互钱包">
+            <el-select v-model="batchExecutionParams.groupName" placeholder="选择交互钱包">
               <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value">
-              </el-option>
-            </el-select>
-          </div>
-          <div class="item">
-            <div class="title">
-              目标资产(From)
-            </div>
-            <el-select v-model="chainId" placeholder="选择交互资产">
-              <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value">
-              </el-option>
-            </el-select>
-          </div>
-          <div class="item">
-            <div class="title">
-              目标资产(To)
-            </div>
-            <el-select v-model="chainId" placeholder="选择交互资产">
-              <el-option
-                v-for="item in options"
+                v-for="item in optionsAddress"
                 :key="item.value"
                 :label="item.label"
                 :value="item.value">
               </el-option>
             </el-select>
           </div>
+<!--          <div class="item">-->
+<!--            <div class="title">-->
+<!--              目标资产(From)-->
+<!--            </div>-->
+<!--            <el-select v-model="chainId" placeholder="选择交互资产">-->
+<!--              <el-option-->
+<!--                v-for="item in options"-->
+<!--                :key="item.value"-->
+<!--                :label="item.label"-->
+<!--                :value="item.value">-->
+<!--              </el-option>-->
+<!--            </el-select>-->
+<!--          </div>-->
+<!--          <div class="item">-->
+<!--            <div class="title">-->
+<!--              目标资产(To)-->
+<!--            </div>-->
+<!--            <el-select v-model="chainId" placeholder="选择交互资产">-->
+<!--              <el-option-->
+<!--                v-for="item in options"-->
+<!--                :key="item.value"-->
+<!--                :label="item.label"-->
+<!--                :value="item.value">-->
+<!--              </el-option>-->
+<!--            </el-select>-->
+<!--          </div>-->
           <div class="item">
             <div class="title">
               间隔时间
             </div>
-            <el-select v-model="chainId" placeholder="选择间隔差范围/分">
-              <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value">
-              </el-option>
-            </el-select>
+            <div style="display: flex;gap:24px">
+              <el-input v-model="batchExecutionParams.intervalMin" placeholder="输入最小间隔时间/分"></el-input>
+              <el-input v-model="batchExecutionParams.intervalMax" placeholder="输入最大间隔时间/分"></el-input>
+            </div>
           </div>
           <div class="item">
             <div class="title">
               交互金额
             </div>
-            <el-input v-model="input" placeholder="输入交互金额"></el-input>
+            <el-input v-model="batchExecutionParams.amount" placeholder="输入最大交互金额"></el-input>
           </div>
           <div class="item">
             <div class="title">
               最大 Gas fee
             </div>
-            <el-input v-model="input" placeholder="输入最大 Gas fee"></el-input>
+            <el-input v-model="batchExecutionParams.maxGas" placeholder="输入最大 Gas fee"></el-input>
           </div>
         </div>
         <div class="accountPassword" v-if="accountPassword">
@@ -573,8 +584,8 @@
           <div class="inputTitle">
             钱包密码
           </div>
-          <el-input v-model="input" placeholder="输入钱包密码"></el-input>
-          <div class="confirm">
+          <el-input type="password" :show-password="true" v-model="batchExecutionParams.password" placeholder="输入钱包密码"></el-input>
+          <div class="confirm" @click="batchExecutionTask">
             <img src="../../assets/autoplay/check1.svg" alt="check1">
             确认
           </div>
@@ -597,56 +608,14 @@
 </template>
 
 <script>
+import {batchExecution, getExecutionRecord, modifyTaskInfo, taskPage} from "@/api/task";
+import {getGroupList} from "@/api/adress";
+import {getInteractionRecord} from "@/api/record";
+
 export default {
   data() {
     return {
-      missionData:[
-        {
-          missionName:'交互任务名称',
-          projectName:'LayerZero',
-          status:0,
-          time:'04/24-12:23',
-          implementationStrategy:['执行策略','执行策略','执行策略'],
-          currentExecution:11,
-          executionNumber:12
-        },
-        {
-          missionName:'交互任务名称',
-          projectName:'LayerZero',
-          status:1,
-          time:'04/24-12:23',
-          implementationStrategy:['执行策略','执行策略','执行策略'],
-          currentExecution:1,
-          executionNumber:12
-        },
-        {
-          missionName:'交互任务名称',
-          projectName:'LayerZero',
-          status:1,
-          time:'04/24-12:23',
-          implementationStrategy:['执行策略','执行策略','执行策略'],
-          currentExecution:1,
-          executionNumber:12
-        },
-        {
-          missionName:'交互任务名称',
-          projectName:'LayerZero',
-          status:1,
-          time:'04/24-12:23',
-          implementationStrategy:['执行策略','执行策略','执行策略'],
-          currentExecution:0,
-          executionNumber:12
-        },
-        {
-          missionName:'交互任务名称',
-          projectName:'LayerZero',
-          status:1,
-          time:'04/24-12:23',
-          implementationStrategy:[],
-          currentExecution:1,
-          executionNumber:12
-        },
-      ],
+      missionData:[],
       drawerDetails:false,
       input:'',
       chainId:'',
@@ -654,70 +623,145 @@ export default {
         value: '1',
         label: 'ETH'
       }],
-      drawerRecord:false,
-      drawerRecordStatus:0,
-      value1: '',
-      recordData:[
+      optionsTaskType: [
         {
-          id:'123',
-          time:'09-09',
-          amount:'金额',
-          gas:'GAS',
-          status:1
+          value: 'BRIDGE',
+          label: 'Bridge'
         },
         {
-          id:'123',
-          time:'09-09',
-          amount:'金额',
-          gas:'GAS',
-          status:1
+          value: 'NFT',
+          label: 'NFT'
         },
         {
-          id:'123',
-          time:'09-09',
-          amount:'金额',
-          gas:'GAS',
-          status:0
-        },
-      ],
-      ongoingData:[
-        {
-          address:'交互钱包地址',
-          amount:'金额',
-          gas:'Gas',
-          txId:'TX ID',
-          status:1
-        },
-        {
-          address:'交互钱包地址',
-          amount:'金额',
-          gas:'Gas',
-          txId:'TX ID',
-          status:1
-        },
-        {
-          address:'交互钱包地址',
-          amount:'金额',
-          gas:'Gas',
-          txId:'TX ID',
-          status:1
-        },
-        {
-          address:'交互钱包地址',
-          amount:'金额',
-          gas:'Gas',
-          txId:'TX ID',
-          status:0
-        },
+          value: 'SWAP',
+          label: 'Swap'
+        }
       ],
+      optionsAddress: [],
+      drawerRecord:false,
+      drawerRecordStatus:0,
+      value1: '',
+      recordData:[],
+      ongoingData:[],//下一层
       drawerStrategy:false,
-      accountPassword:false
+      accountPassword:false,
+      batchExecutionParams:{
+        groupName:'',
+        maxGas:'',
+        intervalMax:10,
+        intervalMin:1,
+        amount:'',
+        password:'',
+        projectId:'',
+        taskId:''
+      },
+      currentTaskInfo:{
+        taskType:'',
+        taskName:'',
+        amsProjectId:'',
+        amsTaskId:'',
+        planTimes:0,
+        projectName:''
+      },
+      currentRecordData:{
+
+      },
+      url:process.env.VUE_APP_BASE_API,
     }
   },
+  mounted() {
+    this.getTaskList()
+    this.getWalletAddress()
+  },
   methods: {
-    jumpRecord() {
+    progressBarDetails(item) {
       this.drawerRecord = true
+      this.drawerRecordStatus = 1
+      this.currentTaskInfo = JSON.parse(JSON.stringify(item))
+      this.currentRecordData.groupName = item.groupName
+      this.currentRecordData.intervalMax = item.intervalMax
+      this.currentRecordData.intervalMin = item.intervalMin
+      this.currentRecordData.maxGas = item.maxGas
+      let params = {
+        page:1,
+        pageSize:10,
+        executeId:item.executeId
+      }
+      getInteractionRecord(params).then(res=>{
+        this.ongoingData = res.records
+      })
+    },
+    getTaskList() {
+      taskPage().then(res=>{
+        this.missionData = res
+      })
+    },
+    batchExecution(item) {
+      this.drawerStrategy = true
+      this.currentTaskInfo.taskName = item.taskName
+      this.currentTaskInfo.taskType = item.taskType
+      this.batchExecutionParams.projectId = item.amsProjectId
+      this.batchExecutionParams.taskId = item.amsTaskId
     },
+    getWalletAddress() {
+      getGroupList().then(res=>{
+        res.forEach((item)=>{
+          let obj = {
+            value:item,
+            label:item
+          }
+          this.optionsAddress.push(obj)
+        })
+      })
+    },
+    batchExecutionTask() {
+      batchExecution(this.batchExecutionParams).then(()=>{
+        this.accountPassword = false
+        this.drawerStrategy = false
+        this.getTaskList()
+      })
+    },
+    viewTaskDetails(item) {
+      this.currentTaskInfo = JSON.parse(JSON.stringify(item))
+      this.drawerDetails = true
+    },
+    modifyTask(){
+      let params = {
+        taskType:this.currentTaskInfo.taskType,
+        taskName:this.currentTaskInfo.taskName,
+        amsProjectId:this.currentTaskInfo.amsProjectId,
+        amsTaskId:this.currentTaskInfo.amsTaskId,
+        planTimes:this.currentTaskInfo.planTimes,
+      }
+      modifyTaskInfo(params).then(()=>{
+        this.drawerDetails = false
+        this.getTaskList()
+      })
+    },
+    viewExecutionHistory(item) {
+      this.currentTaskInfo = JSON.parse(JSON.stringify(item))
+      let params = {
+        page: 1,
+        pageSize: 10,
+        queryValue: item.amsTaskId
+      }
+      getExecutionRecord(params).then((res)=>{
+        this.drawerRecord = true
+        this.recordData = res.records
+      })
+    },
+    viewRecordDetails(item,page){
+      this.drawerRecordStatus = page
+      this.currentRecordData = item
+      let params = {
+        page:1,
+        pageSize:10,
+        executeId:item.executeId
+      }
+      getInteractionRecord(params).then(res=>{
+        this.ongoingData = res.records
+      })
+    }
   }
 }
 </script>
@@ -874,6 +918,7 @@ export default {
           display: flex;
           justify-content: space-between;
           padding-right: 6px;
+          cursor: pointer;
           .progressBar-blue{
             width: 147px;
             height: 28px;
@@ -1049,7 +1094,7 @@ export default {
           gap:8px;
           align-items: center;
           .id{
-            width: 57px;
+            padding: 0 8px;
             height: 24px;
             background: #F5F5F5;
             border: 1px solid #E0E0E0;
@@ -1374,6 +1419,7 @@ export default {
         border-radius: 6px;
         margin-top: 12px;
         margin-bottom: 20px;
+        cursor: pointer;
       }
       .tip{
         display: flex;

+ 93 - 57
front/admin-front/src/views/dashboard/index.vue

@@ -4,7 +4,7 @@
       <div class="left">
         <div class="item">
           <div class="number">
-            85
+            {{ countFee.expendGas }}
           </div>
           <div class="title">
             支出/气体
@@ -13,7 +13,7 @@
         <div class="verticalLine"/>
         <div class="item">
           <div class="number">
-            8.811k
+            {{countFee.principalBalance}}
           </div>
           <div class="title">
             剩余本金
@@ -22,21 +22,21 @@
         <div class="verticalLine"/>
         <div class="item">
           <div class="number">
-            85
+            {{countFee.predictTotalCost}}
           </div>
           <div class="title">
             预计支出总费用
           </div>
         </div>
-        <div class="verticalLine"/>
-        <div class="item">
-          <div class="number">
-            88222
-          </div>
-          <div class="title">
-            预计空投价值
-          </div>
-        </div>
+<!--        <div class="verticalLine"/>-->
+<!--        <div class="item">-->
+<!--          <div class="number">-->
+<!--            88222-->
+<!--          </div>-->
+<!--          <div class="title">-->
+<!--            预计空投价值-->
+<!--          </div>-->
+<!--        </div>-->
       </div>
       <div class="right" @click="drawerFinance = true">
         <img src="../../assets/dashboard/upload.svg" alt="upload">
@@ -94,10 +94,10 @@
               </div>
             </div>
             <div class="info">
-              共7
+              共{{echartsInputData.totalCount}}
             </div>
             <div class="info">
-              总支出:234112
+              总支出:{{echartsInputData.totalCost}}
             </div>
             <div class="progress">
               <div class="progress">
@@ -114,10 +114,10 @@
             <div class="progressBox">
               <div class="item" v-for="(item,index) in progressData">
                 <div class="name">
-                  {{ item.name }}
+                  {{ item.taskName }}
                 </div>
                 <div class="progress">
-                  <div class="progress" :style="{width:item.progress}"></div>
+                  <div class="progress" :style="{width:(item.finishCount/item.totalCount*100)+'%'}"></div>
                 </div>
               </div>
             </div>
@@ -278,33 +278,13 @@
 
 <script>
 import * as echarts from 'echarts';
+import {addressGroup, countFee, dailyCost, expectedInput, taskProgress} from "@/api/statistics";
 
 export default {
   name: "Dashboard",
   data() {
     return {
-      progressData: [
-        {
-          name: '任务名称',
-          progress: '30%',
-        },
-        {
-          name: '任务名称',
-          progress: '20%',
-        },
-        {
-          name: '任务名称',
-          progress: '0',
-        },
-        {
-          name: '任务名称',
-          progress: '0',
-        },
-        {
-          name: '任务名称',
-          progress: '0',
-        },
-      ],
+      progressData: [],
       isActive: 0,
       day: ['7D', '30D', 'All'],
       visible: false,
@@ -344,13 +324,34 @@ export default {
           }
         }]
       },
-      time:''
+      time:'',
+      countFee:{
+        expendGas:0,
+        predictTotalCost:0,
+        principalBalance:0,
+      },
+      echartsInputData:{
+        totalCost:0,
+        totalCount:0,
+        predicts:[]
+      },
+      echartsExpenseData:{
+        timeData:[],
+        seriesDataGas:[],
+        seriesDataP:[]
+      },
+      echartsAddressData:{
+        xAxisData:[],
+        seriesData:[]
+      }
     };
   },
   mounted() {
-    this.initEchartsAddress()
-    this.initEchartsInput()
-    this.initEchartsExpense()
+    this.getExpectedInput()
+    this.getCountFee()
+    this.getDailyCost()
+    this.getTaskProgress()
+    this.getAddressGroup()
   },
   methods: {
     initEchartsAddress() {
@@ -370,7 +371,7 @@ export default {
         xAxis: {
           offset: 20,
           type: 'category',
-          data: ['钱包名称', '钱包名称', '钱包名称', '钱包名称', '钱包名称', '钱包名称'],
+          data: this.echartsAddressData.xAxisData,
           axisLabel: {
             color: '#ABABAB'
           },
@@ -395,7 +396,7 @@ export default {
         ],
         series: [
           {
-            data: [30, 25, 18, 40, 26, 40],
+            data: this.echartsAddressData.seriesData,
             type: 'bar',
             barWidth: '15%',
             itemStyle: {
@@ -419,7 +420,6 @@ export default {
         },
         series: [
           {
-            name: 'Access From',
             type: 'pie',
             radius: ['40%', '70%'],
             avoidLabelOverlap: false,
@@ -430,15 +430,7 @@ export default {
             labelLine: {
               show: false
             },
-            data: [
-              {value: 1048, name: '1'},
-              {value: 735, name: '2'},
-              {value: 580, name: '3'},
-              {value: 484, name: '4'},
-              {value: 300, name: '5'},
-              {value: 300, name: '6'},
-              {value: 300, name: '7'},
-            ]
+            data: this.echartsInputData.predicts
           }
         ]
       };
@@ -479,7 +471,7 @@ export default {
             axisTick: {
               show: false
             },
-            data: ['08-05','08-06','08-07','08-08','08-09','08-10']
+            data: this.echartsExpenseData.timeData
           }
         ],
         yAxis: [
@@ -501,7 +493,7 @@ export default {
             emphasis: {
               focus: 'series'
             },
-            data: [12,9,6,12,10,12]
+            data: this.echartsExpenseData.seriesDataGas
           },
           {
             name: '本金',
@@ -515,7 +507,7 @@ export default {
             emphasis: {
               focus: 'series'
             },
-            data: [12,9,6,12,10,12]
+            data: this.echartsExpenseData.seriesDataP
           },
         ]
       };
@@ -544,6 +536,50 @@ export default {
     },
     exportingReports(){
 
+    },
+    getExpectedInput(){
+      expectedInput().then(res=>{
+        this.echartsInputData = res
+        this.echartsInputData.predicts.forEach(item=>{
+          item.value = item.estimatedCost
+          item.name = item.projectName
+        })
+        this.initEchartsInput()
+      })
+    },
+    getCountFee(){
+      countFee().then(res=>{
+        this.countFee = res
+      })
+    },
+    getDailyCost(){
+      dailyCost().then(res=>{
+        this.echartsExpenseData = {
+          timeData:[],
+          seriesDataGas:[],
+          seriesDataP:[]
+        }
+        res.forEach(item=>{
+          this.echartsExpenseData.timeData.push(item.date)
+          this.echartsExpenseData.seriesDataGas.push(item.gas)
+          this.echartsExpenseData.seriesDataP.push(item.principal)
+        })
+        this.initEchartsExpense()
+      })
+    },
+    getTaskProgress(){
+      taskProgress().then(res=>{
+        this.progressData = res
+      })
+    },
+    getAddressGroup(){
+      addressGroup().then(res=>{
+        res.forEach(item=>{
+          this.echartsAddressData.xAxisData.push(item.groupName)
+          this.echartsAddressData.seriesData.push(item.addressCount)
+        })
+        this.initEchartsAddress()
+      })
     }
   },
 };