1、收码
This commit is contained in:
		
							
								
								
									
										695
									
								
								cli-traffic.html
									
									
									
									
									
								
							
							
						
						
									
										695
									
								
								cli-traffic.html
									
									
									
									
									
								
							| @ -78,35 +78,51 @@ | ||||
|         <!-- 左侧菜单 --> | ||||
|         <div class="sidebar"> | ||||
|           <vs-sidebar | ||||
|             static-position | ||||
|             :hidden-background="true" | ||||
|             default-index="2" | ||||
|             color="primary" | ||||
|             spacer | ||||
|             v-model="active" | ||||
|           > | ||||
|             <vs-sidebar-item | ||||
|               index="1" | ||||
|               @click="handleActiveMenu(1)" | ||||
|               icon="settings" | ||||
|               >长效IP</vs-sidebar-item | ||||
|               static-position | ||||
|               :hidden-background="true" | ||||
|               default-index="2" | ||||
|               color="primary" | ||||
|               spacer | ||||
|               v-model="active" | ||||
|             > | ||||
|             <vs-sidebar-item | ||||
|               index="2" | ||||
|               @click="handleActiveMenu(2)" | ||||
|               icon="dashboard" | ||||
|             > | ||||
|               账密模式 | ||||
|             </vs-sidebar-item> | ||||
|             <!--  | ||||
|             <vs-sidebar-item index="3" icon="people">用户管理</vs-sidebar-item> --> | ||||
|           </vs-sidebar> | ||||
|           <vs-sidebar-group open title="代理管理"> | ||||
|              | ||||
|               <vs-sidebar-item | ||||
|                 index="1" | ||||
|                 @click="handleActiveMenu(1)" | ||||
|                 icon="settings" | ||||
|                 >长效IP</vs-sidebar-item | ||||
|               > | ||||
|               <vs-sidebar-item | ||||
|                 index="2" | ||||
|                 @click="handleActiveMenu(2)" | ||||
|                 icon="dashboard" | ||||
|               > | ||||
|                 账密模式 | ||||
|               </vs-sidebar-item> | ||||
|           </vs-sidebar-group> | ||||
|           <vs-sidebar-group open title="号码管理"> | ||||
|               <vs-sidebar-item | ||||
|                 index="3" | ||||
|                 @click="handleActiveMenu(3)" | ||||
|                 icon="settings" | ||||
|                 >短效号码</vs-sidebar-item | ||||
|               > | ||||
|               <vs-sidebar-item | ||||
|                 index="4" | ||||
|                 @click="handleActiveMenu(4)" | ||||
|                 icon="dashboard" | ||||
|               > | ||||
|                 长效号码 | ||||
|               </vs-sidebar-item> | ||||
|           </vs-sidebar-group> | ||||
|            | ||||
|         </div> | ||||
|  | ||||
|         <!-- 内容展示区 --> | ||||
|         <div class="content"> | ||||
|           <div class="content-conter"> | ||||
|             <div class="content-conter-header"> | ||||
|             <div class="content-conter-header" v-if="activeMenu === 1||activeMenu===2"> | ||||
|               <vs-select | ||||
|                 autocomplete | ||||
|                 v-model="query.area" | ||||
| @ -169,6 +185,48 @@ | ||||
|               </div> | ||||
|                | ||||
|             </div> | ||||
|              | ||||
|             <div class="content-conter-header" v-if="activeMenu === 3||activeMenu===4"> | ||||
|               <vs-select | ||||
|                 autocomplete | ||||
|                 v-model="smsQuery.serviceCode" | ||||
|                 autocomplete | ||||
|                 class="selectExample" | ||||
|                 placeholder="服务" | ||||
|                 label="服务" | ||||
|               > | ||||
|                 <vs-select-item | ||||
|                   v-for="item in smsServices" | ||||
|                   :key="'sms_service_'+item.code" | ||||
|                   :value="item.code" | ||||
|                   :text="item.name" | ||||
|                   @click="handleSmsServiceChange(item)" | ||||
|                 ></vs-select-item> | ||||
|               </vs-select> | ||||
|  | ||||
|                <div class="btn-group"> | ||||
|                 <vs-button color="primary" size="small" @click="reloadSmsList" | ||||
|                 >查询</vs-button | ||||
|               > | ||||
|               <vs-button | ||||
|                 color="primary" | ||||
|                 type="border" | ||||
|                 size="small" | ||||
|                 @click="handleResetSmsList" | ||||
|               > | ||||
|                 重置 | ||||
|               </vs-button> | ||||
|                | ||||
|               <vs-button | ||||
|                 color="primary" | ||||
|                 type="border" | ||||
|                 size="small" | ||||
|                 @click="handleShowGetSms" | ||||
|                 >租赁号码</vs-button | ||||
|               > | ||||
|               </div> | ||||
|             </div> | ||||
|  | ||||
|             <vs-row v-if="activeMenu === 2"> | ||||
|               <vs-table class="tablex" :data="proxys"> | ||||
|                 <template slot="thead"> | ||||
| @ -231,7 +289,7 @@ | ||||
|                         icon="qr_code" | ||||
|                         @click="handleShowQrCode(data[indextr],2)" | ||||
|                       ></vs-button> | ||||
|                       <vs-button | ||||
|                       <!-- <vs-button | ||||
|                         style="margin-left: 10px" | ||||
|                         class="operat-btn"  | ||||
|                         v-if="data[indextr].status === 1" | ||||
| @ -239,7 +297,7 @@ | ||||
|                         color="primary" | ||||
|                         @click="handleResetGenerateProxy(data[indextr])" | ||||
|                         >重置</vs-button | ||||
|                       > | ||||
|                       > --> | ||||
|                       <vs-button v-if="data[indextr].status === 1" | ||||
|                        color="rgb(187, 138, 200)"  | ||||
|                        class="operat-btn"  | ||||
| @ -258,7 +316,7 @@ | ||||
|               /> | ||||
|             </vs-row> | ||||
|  | ||||
|             <vs-row v-else> | ||||
|             <vs-row v-else-if="activeMenu===1"> | ||||
|               <vs-table class="tablex" :data="proxys"> | ||||
|                 <template slot="thead"> | ||||
|                   <vs-th> 国家/地区 </vs-th> | ||||
| @ -326,59 +384,121 @@ | ||||
|                 @change="getMyProxy" | ||||
|               /> | ||||
|             </vs-row> | ||||
|           </div> | ||||
|  | ||||
|           <!-- <div v-else-if="activeMenu===1" class="content-conter"> | ||||
|             <div class="content-conter-header"> | ||||
|               <vs-select | ||||
|                 v-model="query.area" | ||||
|                 autocomplete | ||||
|                 class="selectExample" | ||||
|                 placeholder="area" | ||||
|                 label="国家/地区" | ||||
|               > | ||||
|                 <vs-select-item | ||||
|                   v-for="item in traffictList" | ||||
|                   :key="'area'+item.code" | ||||
|                   :value="item.code" | ||||
|                   :text="item.name" | ||||
|                   @click="handleAreaChange(item)" | ||||
|                 ></vs-select-item> | ||||
|               </vs-select> | ||||
|               <vs-select | ||||
|                 v-model="query.state" | ||||
|                 class="selectExample" | ||||
|                 label="城市" | ||||
|                 placeholder="city" | ||||
|               > | ||||
|                 <vs-select-item | ||||
|                   v-for="(item,index) in cityList" | ||||
|                   :key="'city'+index" | ||||
|                   :value="item.state" | ||||
|                   :text="item.state" | ||||
|                 ></vs-select-item> | ||||
|               </vs-select> | ||||
|               <vs-button color="primary" size="small" @click="getMyProxy" | ||||
|                 >查询</vs-button | ||||
|               > | ||||
|               <vs-button | ||||
|                 color="primary" | ||||
|                 type="border" | ||||
|                 size="small" | ||||
|                 @click="handleGetProxy" | ||||
|                 >获取代理</vs-button | ||||
|               > | ||||
|               <vs-button | ||||
|                 color="warning" | ||||
|                 type="border" | ||||
|                 size="small" | ||||
|                 @click="handleRecharge" | ||||
|               > | ||||
|                 余额充值 | ||||
|               </vs-button> | ||||
|             </div> | ||||
|             | ||||
|           </div> --> | ||||
|             <!--短效号码--> | ||||
|             <vs-row v-else-if="activeMenu===3"> | ||||
|                 <vs-table class="tablex" :data="smsList"> | ||||
|                 <template slot="thead"> | ||||
|                   <vs-th> 服务 </vs-th> | ||||
|                   <vs-th> Phone </vs-th> | ||||
|                   <vs-th> 验证码 </vs-th> | ||||
|                   <vs-th> 状态 </vs-th> | ||||
|                   <vs-th> 操作 </vs-th> | ||||
|                 </template> | ||||
|  | ||||
|                 <template slot-scope="{data}"> | ||||
|                   <vs-tr :key="indextr" v-for="(tr, indextr) in data"> | ||||
|                     <vs-td :data="data[indextr].service"> | ||||
|                       {{data[indextr].service}} | ||||
|                     </vs-td> | ||||
|  | ||||
|                     <vs-td :data="data[indextr].phone"> | ||||
|                       {{data[indextr].phone}} | ||||
|                     </vs-td> | ||||
|                     <vs-td :data="data[indextr].code"> | ||||
|                       {{data[indextr].code}} | ||||
|                     </vs-td> | ||||
|                     <vs-td :data="data[indextr].status"> | ||||
|                        <vs-chip v-if="data[indextr].status===0" transparent color="primary">未唤醒</vs-chip> | ||||
|                        <vs-chip v-else-if="data[indextr].status===1" transparent color="primary">等待中</vs-chip> | ||||
|                        <vs-chip v-else-if="data[indextr].status===2" transparent color="success">已使用</vs-chip> | ||||
|                        <vs-chip v-else-if="data[indextr].status===3" transparent color="warning">过期</vs-chip> | ||||
|                     </vs-td> | ||||
|                      | ||||
|                     <vs-td :data="data[indextr].id"> | ||||
|                       <!-- <vs-button | ||||
|                         v-if="data[indextr].status === 1||(data[indextr].type===1&&new Date().getTime()<data[indextr].expireUnix)" | ||||
|                         color="success" | ||||
|                         type="flat" | ||||
|                         size="small" | ||||
|                         icon="qr_code" | ||||
|                         @click="handleShowQrCode(data[indextr],1)" | ||||
|                       ></vs-button> --> | ||||
|                        <vs-button color="warning" size="small" @click="handleDeleteSms(data[indextr])"> | ||||
|                         删除 | ||||
|                       </vs-button> | ||||
|                   </vs-tr> | ||||
|                 </template> | ||||
|               </vs-table> | ||||
|               <vs-pagination | ||||
|                 v-model:current-page="smsQuery.page" | ||||
|                 :total="smsQuery.total" | ||||
|                 :page-size="smsQuery.pageSize" | ||||
|                 @change="getSmsList" | ||||
|               /> | ||||
|             </vs-row> | ||||
|  | ||||
|             <!--长效--> | ||||
|             <vs-row v-else-if="activeMenu===4"> | ||||
|               <vs-table class="tablex" :data="smsList"> | ||||
|                 <template slot="thead"> | ||||
|                   <vs-th> 服务 </vs-th> | ||||
|                   <vs-th> Phone </vs-th> | ||||
|                   <vs-th> 期限(月)</vs-th> | ||||
|                   <vs-th> 验证码 </vs-th> | ||||
|                   <vs-th> 状态 </vs-th> | ||||
|                   <vs-th> 过期时间 </vs-th> | ||||
|                   <vs-th> 操作 </vs-th> | ||||
|                 </template> | ||||
|  | ||||
|                 <template slot-scope="{data}"> | ||||
|                   <vs-tr :key="indextr" v-for="(tr, indextr) in data"> | ||||
|                     <vs-td :data="data[indextr].service"> | ||||
|                       {{data[indextr].service}} | ||||
|                     </vs-td> | ||||
|  | ||||
|                     <vs-td :data="data[indextr].phone"> | ||||
|                       {{data[indextr].phone}} | ||||
|                     </vs-td> | ||||
|                     <vs-td :data="data[indextr].period"> | ||||
|                       {{data[indextr].period}} | ||||
|                     </vs-td> | ||||
|                     <vs-td :data="data[indextr].code"> | ||||
|                       {{data[indextr].code}} | ||||
|                     </vs-td> | ||||
|                     <vs-td :data="data[indextr].status"> | ||||
|                        <vs-chip v-if="data[indextr].status===0" transparent color="primary">未唤醒</vs-chip> | ||||
|                        <vs-chip v-else-if="data[indextr].status===1" transparent color="primary">等待中</vs-chip> | ||||
|                        <vs-chip v-else-if="data[indextr].status===2" transparent color="success">已使用</vs-chip> | ||||
|                        <vs-chip v-else-if="data[indextr].status===3" transparent color="warning">过期</vs-chip> | ||||
|                     </vs-td> | ||||
|  | ||||
|                     <vs-td :data="data[indextr].expireTime"> | ||||
|                         {{formatDate(data[indextr].expireTime)}} | ||||
|                     </vs-td> | ||||
|                     <vs-td :data="data[indextr].id"> | ||||
|                       <vs-button | ||||
|                         v-if="data[indextr].status !== 1&&new Date()<new Date(data[indextr].expireTime)" | ||||
|                         color="primary" | ||||
|                         size="small" | ||||
|                         @click="handleWeakUp(data[indextr],1)" | ||||
|                       >唤醒并获取</vs-button> | ||||
|                       <vs-button color="warning" size="small" @click="handleDeleteSms(data[indextr])"> | ||||
|                         删除 | ||||
|                       </vs-button> | ||||
|                   </vs-tr> | ||||
|                 </template> | ||||
|               </vs-table> | ||||
|               <vs-pagination | ||||
|                 v-model:current-page="smsQuery.page" | ||||
|                 :total="smsQuery.total" | ||||
|                 :page-size="smsQuery.pageSize" | ||||
|                 @change="getSmsList" | ||||
|               /> | ||||
|             </vs-row> | ||||
|  | ||||
|  | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
| @ -567,7 +687,37 @@ | ||||
|         :active.sync="showQrCode" | ||||
|       > | ||||
|         <div id="proxy-qrcode"></div> | ||||
|         <!-- <div style="padding-top: 15px">socks5:{{}}</div> --> | ||||
|       </vs-popup> | ||||
|  | ||||
|       <!--获取号码--> | ||||
|       <vs-popup title="租赁号码" :active.sync="showGetSms" :loading="loading"> | ||||
|         <div> | ||||
|           <vs-select | ||||
|             autocomplete | ||||
|             v-model="smsForm.serviceCode" | ||||
|             autocomplete | ||||
|             class="selectExample" | ||||
|             placeholder="请选择服务" | ||||
|             label="服务" | ||||
|           > | ||||
|             <vs-select-item | ||||
|               v-for="item in smsServices" | ||||
|               :key="'form_service'+item.code" | ||||
|               :value="item.code" | ||||
|               :text="item.name" | ||||
|             ></vs-select-item> | ||||
|           </vs-select> | ||||
|         </div> | ||||
|         <div class="form-item" v-if="smsForm.type===1"> | ||||
|           <vs-input  class="inputx" placeholder="租赁月份" label="租赁月份" v-model="smsForm.period"/> | ||||
|         </div> | ||||
|         <div class="form-item" style="text-align: right;"> | ||||
|           价格U: {{ this.smsForm.type===1&&this.smsForm.period>0? this.smsPrice*this.smsForm.period :this.smsPrice}} | ||||
|         </div> | ||||
|         <div class="form-item" style="text-align: right"> | ||||
|           <vs-button size="small" @click="getNumber" | ||||
|             >确认租赁</vs-button> | ||||
|         </div> | ||||
|       </vs-popup> | ||||
|     </div> | ||||
|   </body> | ||||
| @ -619,6 +769,21 @@ | ||||
|           trafficServer: [], | ||||
|           //可提取ip列表 | ||||
|           useList: [], | ||||
|           //短信服务列表 | ||||
|           smsServices:[], | ||||
|           //短信query | ||||
|           smsQuery:{ | ||||
|             page:1, | ||||
|             pageSize:50, | ||||
|             total:0, | ||||
|             serviceCode:"", | ||||
|           }, | ||||
|           //短信列表 | ||||
|           smsList:[], | ||||
|           showGetSms:false, | ||||
|           smsForm:{}, | ||||
|           checkSmsCodeTimer:null, | ||||
|           smsPrice:undefined | ||||
|         }; | ||||
|       }, | ||||
|       mounted() { | ||||
| @ -634,9 +799,15 @@ | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         this.resetSmsForm(); | ||||
|  | ||||
|         this.getMyProxy(); | ||||
|         this.getTraffictList(); | ||||
|         this.getTrafficServer(); | ||||
|         this.getSmsServices(); | ||||
|  | ||||
|         //定时器 | ||||
|         this.createCheckSmsCodeTimer(); | ||||
|       }, | ||||
|       watch: { | ||||
|         showGetProxy(val, oldVal) { | ||||
| @ -676,6 +847,25 @@ | ||||
|         }, | ||||
|       }, | ||||
|       methods: { | ||||
|         getSmsServices(){ | ||||
|           fetch(requestApi + "/sms-services/list", { | ||||
|             headers:{ | ||||
|               Authorization: `Bearer ${this.token}`, | ||||
|               "Content-Type": "application/json", | ||||
|               Accept: "application/json", | ||||
|             } | ||||
|           }) | ||||
|           .then((res) => res.json()) | ||||
|           .then((response) => { | ||||
|             console.log('getSmsServices',response); | ||||
|               if (response.code === 200) { | ||||
|                 this.smsServices = response.data; | ||||
|               } | ||||
|             }) | ||||
|           .catch((error) => { | ||||
|               console.log("获取服务错误:",error); | ||||
|             }); | ||||
|         }, | ||||
|         showLoading(ref) { | ||||
|           //   ref.$el.setAttribute("disabled", true); | ||||
|           this.$vs.loading(); | ||||
| @ -994,7 +1184,27 @@ | ||||
|         }, | ||||
|         handleActiveMenu(index) { | ||||
|           this.activeMenu = index; | ||||
|           this.reloadList(); | ||||
|           console.log('index',index); | ||||
|           switch(index){ | ||||
|             case 1: | ||||
|             case 2: | ||||
|               this.reloadList(); | ||||
|               break; | ||||
|             case 3: | ||||
|               this.smsForm.type=0; | ||||
|               this.smsForm.serviceCode=""; | ||||
|               this.smsForm.period=undefined; | ||||
|               this.reloadSmsList(); | ||||
|               this.handleGetPrice(this.smsForm.type); | ||||
|               break; | ||||
|             case 4: | ||||
|               this.smsForm.type=1; | ||||
|               this.smsForm.serviceCode=""; | ||||
|               this.smsForm.period=undefined; | ||||
|               this.reloadSmsList(); | ||||
|               this.handleGetPrice(this.smsForm.type); | ||||
|               break; | ||||
|           } | ||||
|         }, | ||||
|         reloadList() { | ||||
|           this.query.pageIndex = 1; | ||||
| @ -1029,8 +1239,6 @@ | ||||
|                 ); | ||||
|  | ||||
|                 this.query.total = total; | ||||
|  | ||||
|                 console.log("proxys", this.proxys); | ||||
|               } | ||||
|             }) | ||||
|             .catch((error) => { | ||||
| @ -1317,6 +1525,325 @@ | ||||
|                 this.hiddenLoading(); | ||||
|               }); | ||||
|         }, | ||||
|         //sms service切换 | ||||
|         handleSmsServiceChange(item){ | ||||
|           this.smsQuery.serviceCode=item.code; | ||||
|         }, | ||||
|         //重置sms列表 | ||||
|         handleResetSmsList(){ | ||||
|           this.smsQuery.serviceCode=""; | ||||
|           this.smsQuery.page=1; | ||||
|  | ||||
|           this.getSmsList(); | ||||
|         }, | ||||
|         //查询sms | ||||
|         reloadSmsList(){ | ||||
|           this.smsQuery.page=1; | ||||
|           this.getSmsList(); | ||||
|         }, | ||||
|         //获取sms列表 | ||||
|         getSmsList(){ | ||||
|           this.showLoading(); | ||||
|           let type=0; | ||||
|  | ||||
|           if(this.activeMenu===4){ | ||||
|             type=1 | ||||
|           } | ||||
|  | ||||
|           let query = { | ||||
|             type:type, | ||||
|             pageIndex: this.smsQuery.page, | ||||
|             pageSize: this.smsQuery.pageSize, | ||||
|             serviceCode: this.smsQuery.serviceCode, | ||||
|           }; | ||||
|  | ||||
|           const queryString = new URLSearchParams(query).toString(); | ||||
|           fetch(requestApi + "/sms-phone/list?" + queryString, { | ||||
|             headers: { | ||||
|               Authorization: `Bearer ${this.token}`, | ||||
|               "Content-Type": "application/json", | ||||
|               Accept: "application/json", | ||||
|             }}) | ||||
|             .then((res) => res.json()) | ||||
|             .then((response) => { | ||||
|               if (response.code === 200) { | ||||
|                 console.log(response); | ||||
|                 this.smsList = response.data.list; | ||||
|                 let total = Math.ceil( | ||||
|                   response.data.count / this.smsQuery.pageSize | ||||
|                 ); | ||||
|  | ||||
|                 this.smsQuery.total = total; | ||||
|               } | ||||
|             }) | ||||
|             .catch((error) => { | ||||
|               console.log(error); | ||||
|             }) | ||||
|             .finally(() => { | ||||
|               this.hiddenLoading(); | ||||
|             }); | ||||
|         }, | ||||
|         //显示租赁弹框 | ||||
|         handleShowGetSms(){ | ||||
|           this.smsForm.period=undefined; | ||||
|           this.smsForm.serviceCode=""; | ||||
|           this.showGetSms = true; | ||||
|         }, | ||||
|         resetSmsForm(){ | ||||
|           let type =0; | ||||
|  | ||||
|           if (this.activeMenu === 4) { | ||||
|             type = 1; | ||||
|           } | ||||
|           this.smsForm={ | ||||
|             serviceCode: "", | ||||
|             period:undefined, | ||||
|             type:type, | ||||
|           } | ||||
|         }, | ||||
|         //获取号码 | ||||
|         getNumber(){ | ||||
|           if(!this.smsForm.serviceCode){ | ||||
|              this.$vs.notify({ | ||||
|                     title: "提示", | ||||
|                     color: "danger", | ||||
|                     text: "请选择服务", | ||||
|                     position: "top-right", | ||||
|                   }); | ||||
|             return; | ||||
|           } | ||||
|  | ||||
|           if (this.smsForm.type===1&& (this.smsForm.period===undefined||this.smsForm.period<=0)){ | ||||
|              this.$vs.notify({ | ||||
|                     title: "提示", | ||||
|                     color: "danger", | ||||
|                     text: "请填写时间", | ||||
|                     position: "top-right", | ||||
|                   }); | ||||
|             return; | ||||
|           } | ||||
|  | ||||
|           let data = JSON.stringify({ | ||||
|             serviceCode: this.smsForm.serviceCode, | ||||
|             type: this.smsForm.type, | ||||
|             period: Number(this.smsForm.period), | ||||
|           }) | ||||
|  | ||||
|           this.showLoading(); | ||||
|  | ||||
|           fetch(requestApi + "/sms-phone/getNumber", { | ||||
|             headers: { | ||||
|               Authorization: `Bearer ${this.token}`, | ||||
|               "Content-Type": "application/json", | ||||
|               Accept: "application/json", | ||||
|             }, | ||||
|             method: "POST", | ||||
|             body: data, | ||||
|           }) | ||||
|            .then((res) => res.json()) | ||||
|            .then((response) => { | ||||
|               if (response.code === 200) { | ||||
|                 this.$vs.notify({ | ||||
|                   title: "提示", | ||||
|                   color: "success", | ||||
|                   text: "获取成功", | ||||
|                   position: "top-right", | ||||
|                 }); | ||||
|  | ||||
|                 this.showGetSms = false; | ||||
|                 this.getSmsList(); | ||||
|                 this.user.balance=response.data; | ||||
|               } else { | ||||
|                 this.$vs.notify({ | ||||
|                   title: "提示", | ||||
|                   color: "danger", | ||||
|                   text: response.msg, | ||||
|                   position: "top-right", | ||||
|                 }); | ||||
|               } | ||||
|             }) | ||||
|            .catch((error) => { | ||||
|               console.log(error); | ||||
|             }) | ||||
|            .finally(() => { | ||||
|               this.hiddenLoading(); | ||||
|             }); | ||||
|         }, | ||||
|         //查看接受中的验证码 | ||||
|         getCodeByActivationIds(){ | ||||
|           if(this.smsList&&this.smsList.length>0){ | ||||
|             let activationIds=this.smsList.filter(x=>x.status===1).map(x=>x.activationId) | ||||
|  | ||||
|             if(activationIds.length<=0){ | ||||
|               return; | ||||
|             } | ||||
|  | ||||
|             const params = new URLSearchParams(); | ||||
|             activationIds.forEach(id => { | ||||
|               params.append('activationIds', id); // Appends 'activationIds=123', 'activationIds=456', etc. | ||||
|             }); | ||||
|  | ||||
|             fetch(`${requestApi}/sms-phone/getCodeByActivationId?${params}`, { | ||||
|               headers: { | ||||
|                 Authorization: `Bearer ${this.token}`, | ||||
|                 "Content-Type": "application/json", | ||||
|                 Accept: "application/json", | ||||
|               }, | ||||
|             }) | ||||
|             .then((res) => res.json()) | ||||
|             .then((response) => { | ||||
|                 if (response.code === 200) { | ||||
|                   const codesMap = new Map(); | ||||
|                   response.data.forEach(item => { | ||||
|                       codesMap.set(item.activationId, item); | ||||
|                   }); | ||||
|                  | ||||
|                   console.log(codesMap); | ||||
|  | ||||
|                   this.smsList.forEach(item => { | ||||
|                     const newItem = codesMap.get(item.activationId); // 尝试从 Map 中获取新 code | ||||
|  | ||||
|                     if (newItem.status !== item.status) { // 如果找到了匹配的 activationId | ||||
|                         item.code = newItem.code;   // 替换 code | ||||
|                         item.status = newItem.status;       // 修改 status 为 2 | ||||
|                     }}) | ||||
|                 } | ||||
|             }) | ||||
|             .catch((error) => { | ||||
|                 console.log(error); | ||||
|             }); | ||||
|           } | ||||
|         }, | ||||
|         //定时检查等待中的验证码 | ||||
|         createCheckSmsCodeTimer() { | ||||
|           if (this.checkSmsCodeTimer) { | ||||
|             clearInterval(this.checkSmsCodeTimer); | ||||
|           } else { | ||||
|             this.checkSmsCodeTimer = setInterval(() => { | ||||
|               this.getCodeByActivationIds(this.rechargeData.orderNo); | ||||
|             }, 10000); | ||||
|           } | ||||
|         }, | ||||
|         handleWeakUp(row,index){ | ||||
|           if(row.status===1){ | ||||
|               this.$vs.notify({ | ||||
|                     title: "提示", | ||||
|                     color: "danger", | ||||
|                     text: "无需重复唤醒", | ||||
|                     position: "top-right", | ||||
|                   }); | ||||
|             return; | ||||
|           } | ||||
|  | ||||
|           this.showLoading(); | ||||
|           let data = JSON.stringify({ | ||||
|             activationId: row.activationId, | ||||
|           }); | ||||
|  | ||||
|           fetch(requestApi + "/sms-phone/weakUp", { | ||||
|             headers: { | ||||
|               Authorization: `Bearer ${this.token}`, | ||||
|               "Content-Type": "application/json", | ||||
|               Accept: "application/json", | ||||
|             }, | ||||
|             method: "POST", | ||||
|             body: data, | ||||
|           }) | ||||
|            .then((res) => res.json()) | ||||
|            .then((response) => { | ||||
|               if (response.code === 200) { | ||||
|                 this.$vs.notify({ | ||||
|                   title: "提示", | ||||
|                   color: "success", | ||||
|                   text: "唤醒成功", | ||||
|                   position: "top-right", | ||||
|                 }); | ||||
|  | ||||
|                 this.getSmsList(); | ||||
|               } else { | ||||
|                 this.$vs.notify({ | ||||
|                   title: "提示", | ||||
|                   color: "danger", | ||||
|                   text: response.msg, | ||||
|                   position: "top-right", | ||||
|                 }); | ||||
|               } | ||||
|             }) | ||||
|            .catch((error) => { | ||||
|               console.log(error); | ||||
|             }) | ||||
|            .finally(() => { | ||||
|               this.hiddenLoading(); | ||||
|            }); | ||||
|         }, | ||||
|         handleDeleteSms(row){ | ||||
|            this.$vs.dialog({ | ||||
|                 color:"primary", | ||||
|                 title: `提示`, | ||||
|                 text: `确定要删除[${row.phone}]?`, | ||||
|                 acceptText:"确定", | ||||
|                 accept:() => this.deleteSms(row) | ||||
|             }); | ||||
|         }, | ||||
|         deleteSms(row){ | ||||
|           this.showLoading(); | ||||
|  | ||||
|           let data = JSON.stringify({ | ||||
|             id:row.id}); | ||||
|             fetch(requestApi + "/sms-phone/my-number", { | ||||
|               headers: { | ||||
|                 Authorization: `Bearer ${this.token}`, | ||||
|                 "Content-Type": "application/json", | ||||
|                 Accept: "application/json", | ||||
|               }, | ||||
|               method: "DELETE", | ||||
|               body: data, | ||||
|             }) | ||||
|              .then((res) => res.json()) | ||||
|              .then((response) => { | ||||
|                 if (response.code === 200) { | ||||
|                   this.$vs.notify({ | ||||
|                     title: "提示", | ||||
|                     color: "success", | ||||
|                     text: "删除成功", | ||||
|                     position: "top-right", | ||||
|                   }); | ||||
|  | ||||
|                   this.getSmsList(); | ||||
|                 } else { | ||||
|                   this.$vs.notify({ | ||||
|                     title: "提示", | ||||
|                     color: "danger", | ||||
|                     text: response.msg, | ||||
|                     position: "top-right", | ||||
|                   }); | ||||
|                 } | ||||
|              }) | ||||
|              .catch((error) => { | ||||
|                 console.log(error); | ||||
|              }) | ||||
|              .finally(() => { | ||||
|                 this.hiddenLoading(); | ||||
|              }); | ||||
|         }, | ||||
|         handleGetPrice(type){ | ||||
|           fetch(requestApi + "/sms-services/price?type=" + type, { | ||||
|             headers: { | ||||
|               Authorization: `Bearer ${this.token}`, | ||||
|               "Content-Type": "application/json", | ||||
|               Accept: "application/json", | ||||
|             } | ||||
|           }) | ||||
|           .then((res) => res.json()) | ||||
|            .then((response) => { | ||||
|               if (response.code === 200) { | ||||
|                 this.smsPrice = response.data; | ||||
|               } | ||||
|            }) | ||||
|            .catch((error) => { | ||||
|               console.log(error); | ||||
|             }); | ||||
|         }, | ||||
|       }, | ||||
|     }); | ||||
|   </script> | ||||
| @ -1455,5 +1982,9 @@ | ||||
|     .operat-btn{ | ||||
|         margin-top: 10px; | ||||
|     } | ||||
|      | ||||
|     .form-item{ | ||||
|       padding-top:  10px | ||||
|     } | ||||
|   </style> | ||||
| </html> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user