chad vor 20 Stunden
Ursprung
Commit
296543b0a5
51 geänderte Dateien mit 693 neuen und 484 gelöschten Zeilen
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/js/app.213085bd.js
  3. 0 0
      dist/static/js/app.b1d8aba3.js
  4. 0 0
      dist/static/js/chunk-02f9c298.5d449103.js
  5. 0 0
      dist/static/js/chunk-0a03a392.43278f66.js
  6. 0 0
      dist/static/js/chunk-0aac274a.47e75ca9.js
  7. 0 0
      dist/static/js/chunk-123aee3f.53dd1746.js
  8. 0 0
      dist/static/js/chunk-19adc8c2.0292e566.js
  9. 0 0
      dist/static/js/chunk-1e39b742.1835d7f2.js
  10. 0 0
      dist/static/js/chunk-2cae6263.5c881809.js
  11. 0 0
      dist/static/js/chunk-2d0a38bb.455b0c48.js
  12. 0 0
      dist/static/js/chunk-2d0b3299.2d165348.js
  13. 0 0
      dist/static/js/chunk-2d0c51f8.a3843cab.js
  14. 0 0
      dist/static/js/chunk-2d0ce753.0676e229.js
  15. 0 0
      dist/static/js/chunk-2d0cf866.b79b1161.js
  16. 0 0
      dist/static/js/chunk-2d0d2c0c.13670abe.js
  17. 0 0
      dist/static/js/chunk-2d0df1f5.bfb49b80.js
  18. 0 0
      dist/static/js/chunk-2d0e2665.2b28b106.js
  19. 0 0
      dist/static/js/chunk-2d21f0bd.29078b86.js
  20. 0 0
      dist/static/js/chunk-2d48850c.4232dc50.js
  21. 0 0
      dist/static/js/chunk-2ed9a7f2.08b0642e.js
  22. 0 0
      dist/static/js/chunk-32c60dd9.4b4a29c6.js
  23. 0 0
      dist/static/js/chunk-4acdc711.e87a7090.js
  24. 0 0
      dist/static/js/chunk-4f8b070c.82fb221c.js
  25. 0 0
      dist/static/js/chunk-5060aa1f.7645a4ff.js
  26. 0 0
      dist/static/js/chunk-50aa7159.89886004.js
  27. 0 0
      dist/static/js/chunk-5ceb28d5.69a15d8a.js
  28. 0 0
      dist/static/js/chunk-5f8bf67a.548fc4fa.js
  29. 0 0
      dist/static/js/chunk-61ef0fce.98cfbea4.js
  30. 0 0
      dist/static/js/chunk-652b9037.5bee0939.js
  31. 0 0
      dist/static/js/chunk-6a519107.b4fbeef5.js
  32. 0 0
      dist/static/js/chunk-6c0426ca.db0eafab.js
  33. 0 0
      dist/static/js/chunk-6f71201a.b3585611.js
  34. 0 0
      dist/static/js/chunk-76a9b015.71a3d846.js
  35. 0 0
      dist/static/js/chunk-840f0344.d5c9ce63.js
  36. 0 0
      dist/static/js/chunk-95b96a92.b16b5711.js
  37. 0 0
      dist/static/js/chunk-9dfebff4.dabf8fe5.js
  38. 0 0
      dist/static/js/chunk-9f332e3c.916361f5.js
  39. 0 0
      dist/static/js/chunk-a7e4976c.a088bc6a.js
  40. 0 0
      dist/static/js/chunk-b79d5444.a8b7ad4d.js
  41. 0 0
      dist/static/js/chunk-be314b56.2af319ff.js
  42. 0 0
      dist/static/js/chunk-be314b56.805580c9.js
  43. 0 0
      dist/static/js/chunk-be4cc5a6.a54b510d.js
  44. 0 0
      dist/static/js/chunk-cefe524a.45e5e9ae.js
  45. 0 0
      dist/static/js/chunk-cf51f52c.962a1d29.js
  46. 0 0
      dist/static/js/chunk-d9393032.7235c21a.js
  47. 0 0
      dist/static/js/chunk-da381582.64503d78.js
  48. 0 0
      dist/static/js/chunk-e7c9ebac.9da0799d.js
  49. 0 0
      dist/static/js/chunk-ec13446c.aa6a06e8.js
  50. 21 4
      src/api/data.js
  51. 672 480
      src/views/user/userList/index.vue

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/index.html


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/app.213085bd.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/app.b1d8aba3.js


+ 0 - 0
dist/static/js/chunk-02f9c298.f4c8c711.js → dist/static/js/chunk-02f9c298.5d449103.js


+ 0 - 0
dist/static/js/chunk-0a03a392.f6ec273f.js → dist/static/js/chunk-0a03a392.43278f66.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-0aac274a.47e75ca9.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-123aee3f.53dd1746.js


+ 0 - 0
dist/static/js/chunk-19adc8c2.e2c1e904.js → dist/static/js/chunk-19adc8c2.0292e566.js


+ 0 - 0
dist/static/js/chunk-1e39b742.a8ebd2aa.js → dist/static/js/chunk-1e39b742.1835d7f2.js


+ 0 - 0
dist/static/js/chunk-2cae6263.a3fedd90.js → dist/static/js/chunk-2cae6263.5c881809.js


+ 0 - 0
dist/static/js/chunk-2d0a38bb.9dade762.js → dist/static/js/chunk-2d0a38bb.455b0c48.js


+ 0 - 0
dist/static/js/chunk-2d0b3299.d8ef1d48.js → dist/static/js/chunk-2d0b3299.2d165348.js


+ 0 - 0
dist/static/js/chunk-2d0c51f8.6c27b15c.js → dist/static/js/chunk-2d0c51f8.a3843cab.js


+ 0 - 0
dist/static/js/chunk-2d0ce753.49bc2600.js → dist/static/js/chunk-2d0ce753.0676e229.js


+ 0 - 0
dist/static/js/chunk-2d0cf866.ab7efbcc.js → dist/static/js/chunk-2d0cf866.b79b1161.js


+ 0 - 0
dist/static/js/chunk-2d0d2c0c.8c2569f0.js → dist/static/js/chunk-2d0d2c0c.13670abe.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-2d0df1f5.bfb49b80.js


+ 0 - 0
dist/static/js/chunk-2d0e2665.bc1656b6.js → dist/static/js/chunk-2d0e2665.2b28b106.js


+ 0 - 0
dist/static/js/chunk-2d21f0bd.cb93d6e0.js → dist/static/js/chunk-2d21f0bd.29078b86.js


+ 0 - 0
dist/static/js/chunk-2d48850c.e6ec5a04.js → dist/static/js/chunk-2d48850c.4232dc50.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-2ed9a7f2.08b0642e.js


+ 0 - 0
dist/static/js/chunk-32c60dd9.6f833617.js → dist/static/js/chunk-32c60dd9.4b4a29c6.js


+ 0 - 0
dist/static/js/chunk-4acdc711.b75e3644.js → dist/static/js/chunk-4acdc711.e87a7090.js


+ 0 - 0
dist/static/js/chunk-4f8b070c.43560d67.js → dist/static/js/chunk-4f8b070c.82fb221c.js


+ 0 - 0
dist/static/js/chunk-5060aa1f.07bbc821.js → dist/static/js/chunk-5060aa1f.7645a4ff.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-50aa7159.89886004.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-5ceb28d5.69a15d8a.js


+ 0 - 0
dist/static/js/chunk-5f8bf67a.76220e4b.js → dist/static/js/chunk-5f8bf67a.548fc4fa.js


+ 0 - 0
dist/static/js/chunk-61ef0fce.d065a449.js → dist/static/js/chunk-61ef0fce.98cfbea4.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-652b9037.5bee0939.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-6a519107.b4fbeef5.js


+ 0 - 0
dist/static/js/chunk-6c0426ca.7da7bcc2.js → dist/static/js/chunk-6c0426ca.db0eafab.js


+ 0 - 0
dist/static/js/chunk-6f71201a.1360f910.js → dist/static/js/chunk-6f71201a.b3585611.js


+ 0 - 0
dist/static/js/chunk-76a9b015.54cdfe13.js → dist/static/js/chunk-76a9b015.71a3d846.js


+ 0 - 0
dist/static/js/chunk-840f0344.6835344f.js → dist/static/js/chunk-840f0344.d5c9ce63.js


+ 0 - 0
dist/static/js/chunk-95b96a92.4c4bc191.js → dist/static/js/chunk-95b96a92.b16b5711.js


+ 0 - 0
dist/static/js/chunk-9dfebff4.e17c8ad8.js → dist/static/js/chunk-9dfebff4.dabf8fe5.js


+ 0 - 0
dist/static/js/chunk-9f332e3c.8a5de29c.js → dist/static/js/chunk-9f332e3c.916361f5.js


+ 0 - 0
dist/static/js/chunk-a7e4976c.cf5d2d19.js → dist/static/js/chunk-a7e4976c.a088bc6a.js


+ 0 - 0
dist/static/js/chunk-b79d5444.cf5e2725.js → dist/static/js/chunk-b79d5444.a8b7ad4d.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-be314b56.2af319ff.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-be314b56.805580c9.js


+ 0 - 0
dist/static/js/chunk-be4cc5a6.ad42967b.js → dist/static/js/chunk-be4cc5a6.a54b510d.js


+ 0 - 0
dist/static/js/chunk-cefe524a.ed1831f6.js → dist/static/js/chunk-cefe524a.45e5e9ae.js


+ 0 - 0
dist/static/js/chunk-cf51f52c.41bcaf90.js → dist/static/js/chunk-cf51f52c.962a1d29.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/static/js/chunk-d9393032.7235c21a.js


+ 0 - 0
dist/static/js/chunk-da381582.48944b77.js → dist/static/js/chunk-da381582.64503d78.js


+ 0 - 0
dist/static/js/chunk-e7c9ebac.72cf84e9.js → dist/static/js/chunk-e7c9ebac.9da0799d.js


+ 0 - 0
dist/static/js/chunk-ec13446c.4539370f.js → dist/static/js/chunk-ec13446c.aa6a06e8.js


+ 21 - 4
src/api/data.js

@@ -4,7 +4,7 @@ export function home(data) {
   return request({
   return request({
     url: 'home',
     url: 'home',
     method: 'get',
     method: 'get',
-   params: data
+    params: data
   })
   })
 }
 }
 export function withdraw(data) {
 export function withdraw(data) {
@@ -14,6 +14,23 @@ export function withdraw(data) {
     data
     data
   })
   })
 }
 }
+
+export function sfBalance(params) {
+  return request({
+    url: 'user/thirdGame/detail',
+    method: 'get',
+    params: params
+  })
+}
+
+export function sfBalanceTransfer(data) {
+  return request({
+    url: 'user/thirdGame/recycle',
+    method: 'post',
+    data
+  })
+}
+
 export function walletdebiting(data) {
 export function walletdebiting(data) {
   return request({
   return request({
     url: 'wallet/debiting',
     url: 'wallet/debiting',
@@ -86,7 +103,7 @@ export function menucheck(uri) {
   return request({
   return request({
     url: 'menu/check',
     url: 'menu/check',
     method: 'post',
     method: 'post',
-    data: {uri}
+    data: { uri }
   })
   })
 }
 }
 
 
@@ -458,7 +475,7 @@ export function levelList(params) {
   return request({
   return request({
     url: 'level/list',
     url: 'level/list',
     method: 'get',
     method: 'get',
-     params: params
+    params: params
   })
   })
 }
 }
 
 
@@ -474,7 +491,7 @@ export function levelDelete(params) {
   return request({
   return request({
     url: 'level/delete',
     url: 'level/delete',
     method: 'get',
     method: 'get',
-  params: params
+    params: params
   })
   })
 }
 }
 
 

+ 672 - 480
src/views/user/userList/index.vue

@@ -1,8 +1,13 @@
 <template>
 <template>
   <div class="new-app-container layout-vertical">
   <div class="new-app-container layout-vertical">
-    <YMTableSearch :loading="loading" :search-form="searchForm" @onValueChange="onValueChange" @submit="onSubmit">
-      <template #dateRange="{form}">
-        <div style="margin-right: 20px;">
+    <YMTableSearch
+      :loading="loading"
+      :search-form="searchForm"
+      @onValueChange="onValueChange"
+      @submit="onSubmit"
+    >
+      <template #dateRange="{ form }">
+        <div style="margin-right: 20px">
           <el-date-picker
           <el-date-picker
             v-model="form.dateRange"
             v-model="form.dateRange"
             type="daterange"
             type="daterange"
@@ -14,15 +19,20 @@
             value-format="yyyy-MM-dd HH:mm:ss"
             value-format="yyyy-MM-dd HH:mm:ss"
             :default-time="['00:00:00', '23:59:59']"
             :default-time="['00:00:00', '23:59:59']"
             :picker-options="pickerOptions"
             :picker-options="pickerOptions"
-
-            style="width: 260px;">
+            style="width: 260px"
+          >
           </el-date-picker>
           </el-date-picker>
         </div>
         </div>
       </template>
       </template>
     </YMTableSearch>
     </YMTableSearch>
 
 
-    <div style="margin-bottom: 12px;padding-left: 16px;">
-      <el-button type="primary" :disabled="selectedMemberIds.length === 0" @click="handleBatchSetChannel">批量设置通道</el-button>
+    <div style="margin-bottom: 12px; padding-left: 16px">
+      <el-button
+        type="primary"
+        :disabled="selectedMemberIds.length === 0"
+        @click="handleBatchSetChannel"
+        >批量设置通道</el-button
+      >
     </div>
     </div>
 
 
     <YMTable
     <YMTable
@@ -43,18 +53,58 @@
       :custom-style="{ height: 'calc(100vh - 280px)' }"
       :custom-style="{ height: 'calc(100vh - 280px)' }"
     >
     >
       <template #agent="scoped">
       <template #agent="scoped">
-        <div v-if="scoped.row.agent" style="line-height: 1.5;">
-          <div style="font-weight: 500; color: #409EFF;">{{ scoped.row.agent.first_name || '--' }}</div>
-          <div style="font-size: 12px; color: #909399;">
+        <div v-if="scoped.row.agent" style="line-height: 1.5">
+          <div style="font-weight: 500; color: #409eff">
+            {{ scoped.row.agent.first_name || "--" }}
+          </div>
+          <div style="font-size: 12px; color: #909399">
             ID: {{ scoped.row.agent.member_id }}
             ID: {{ scoped.row.agent.member_id }}
           </div>
           </div>
-          <div style="font-size: 12px; color: #909399;">
+          <div style="font-size: 12px; color: #909399">
             邀请码: {{ scoped.row.agent.user_code }}
             邀请码: {{ scoped.row.agent.user_code }}
           </div>
           </div>
         </div>
         </div>
-        <span v-else style="color: #c0c4cc;">--</span>
+        <span v-else style="color: #c0c4cc">--</span>
       </template>
       </template>
     </YMTable>
     </YMTable>
+    <Dialog
+      ref="sfLog"
+      :dialog-actions="{
+        width: '800px',
+        title: '三方余额',
+        confirmButtom: false,
+      }"
+    >
+      <template slot="content">
+        <div>
+          <span style="padding-right: 10px"
+            >换算后总余额:{{ sfBalanceData.total_balance }}</span
+          >
+          <span style="padding-right: 10px"
+            >原始游戏币总余额:{{ sfBalanceData.total_game_balance }}</span
+          >
+          <span style="padding-right: 10px"
+            >当前换算比例:{{ sfBalanceData.rate }}</span
+          >
+          <el-button
+            type="primary"
+            @click="sfBalanceTransferClick(sfBalanceData.member_id)"
+            >一键转出</el-button
+          >
+          <!-- sfBalanceTransfer -->
+        </div>
+        <el-table
+          :data="sfBalanceData.list"
+          border
+          stripe
+          height="400px"
+          v-loading="logLoading"
+        >
+          <el-table-column prop="platform" label="平台名称" align="center" />
+          <el-table-column prop="balance" label="平台余额" align="center" />
+        </el-table>
+      </template>
+    </Dialog>
 
 
     <Dialog
     <Dialog
       ref="dialog"
       ref="dialog"
@@ -63,12 +113,21 @@
       @confirm="confirm"
       @confirm="confirm"
     >
     >
       <template slot="content">
       <template slot="content">
-        <el-form ref="formDataref" :rules="rulesData" :model="formData" label-width="80px">
+        <el-form
+          ref="formDataref"
+          :rules="rulesData"
+          :model="formData"
+          label-width="80px"
+        >
           <el-form-item label="扣款金额 " prop="amount">
           <el-form-item label="扣款金额 " prop="amount">
-            <el-input type="number" v-model="formData.amount" style="width: 300px"/>
+            <el-input
+              type="number"
+              v-model="formData.amount"
+              style="width: 300px"
+            />
           </el-form-item>
           </el-form-item>
           <el-form-item label="说明" prop="remark">
           <el-form-item label="说明" prop="remark">
-            <el-input v-model="formData.remark" style="width: 300px"/>
+            <el-input v-model="formData.remark" style="width: 300px" />
           </el-form-item>
           </el-form-item>
         </el-form>
         </el-form>
       </template>
       </template>
@@ -81,9 +140,18 @@
       @confirm="confirm"
       @confirm="confirm"
     >
     >
       <template slot="content">
       <template slot="content">
-        <el-form ref="formDataref" :rules="rulesData" :model="formData" label-width="80px">
+        <el-form
+          ref="formDataref"
+          :rules="rulesData"
+          :model="formData"
+          label-width="80px"
+        >
           <el-form-item label="充值类型" prop="change_type">
           <el-form-item label="充值类型" prop="change_type">
-            <el-select v-model="formData.change_type" placeholder="请选择" style="width: 300px">
+            <el-select
+              v-model="formData.change_type"
+              placeholder="请选择"
+              style="width: 300px"
+            >
               <el-option
               <el-option
                 v-for="item in listTypes"
                 v-for="item in listTypes"
                 :key="item"
                 :key="item"
@@ -94,10 +162,14 @@
             </el-select>
             </el-select>
           </el-form-item>
           </el-form-item>
           <el-form-item label="充值金额" prop="amount">
           <el-form-item label="充值金额" prop="amount">
-            <el-input type="number" v-model="formData.amount" style="width: 300px"/>
+            <el-input
+              type="number"
+              v-model="formData.amount"
+              style="width: 300px"
+            />
           </el-form-item>
           </el-form-item>
           <el-form-item label="说明" prop="remark">
           <el-form-item label="说明" prop="remark">
-            <el-input v-model="formData.remark" style="width: 300px"/>
+            <el-input v-model="formData.remark" style="width: 300px" />
           </el-form-item>
           </el-form-item>
         </el-form>
         </el-form>
       </template>
       </template>
@@ -106,15 +178,17 @@
     <Dialog
     <Dialog
       ref="dialogAddress"
       ref="dialogAddress"
       :dialog-actions="{
       :dialog-actions="{
-        width:'720px',
-        title:'提现地址',
-        confirmButtom: false
+        width: '720px',
+        title: '提现地址',
+        confirmButtom: false,
       }"
       }"
     >
     >
       <template slot="content">
       <template slot="content">
-        <div style="padding: 10px 0;">
-          <div style="margin-bottom: 24px;">
-            <h3 style="margin: 0 0 12px 0; color: #303133;">银行卡 / 支付账户</h3>
+        <div style="padding: 10px 0">
+          <div style="margin-bottom: 24px">
+            <h3 style="margin: 0 0 12px 0; color: #303133">
+              银行卡 / 支付账户
+            </h3>
             <el-table
             <el-table
               :data="listDataBank"
               :data="listDataBank"
               border
               border
@@ -131,7 +205,7 @@
           </div>
           </div>
 
 
           <div>
           <div>
-            <h3 style="margin: 0 0 12px 0; color: #303133;">数字货币地址</h3>
+            <h3 style="margin: 0 0 12px 0; color: #303133">数字货币地址</h3>
             <el-table
             <el-table
               :data="listDataAddress"
               :data="listDataAddress"
               border
               border
@@ -152,7 +226,7 @@
       :dialog-actions="{
       :dialog-actions="{
         width: '800px',
         width: '800px',
         title: '用户日志',
         title: '用户日志',
-        confirmButtom: false
+        confirmButtom: false,
       }"
       }"
     >
     >
       <template slot="content">
       <template slot="content">
@@ -171,7 +245,13 @@
             <el-button type="primary" @click="getLogList">查询</el-button>
             <el-button type="primary" @click="getLogList">查询</el-button>
           </el-form-item>
           </el-form-item>
         </el-form>
         </el-form>
-        <el-table :data="logTableData" border stripe height="400px" v-loading="logLoading">
+        <el-table
+          :data="logTableData"
+          border
+          stripe
+          height="400px"
+          v-loading="logLoading"
+        >
           <el-table-column prop="login_ip" label="IP" align="center" />
           <el-table-column prop="login_ip" label="IP" align="center" />
           <el-table-column prop="created_at" label="时间" align="center" />
           <el-table-column prop="created_at" label="时间" align="center" />
         </el-table>
         </el-table>
@@ -185,9 +265,18 @@
       @confirm="confirmChannel"
       @confirm="confirmChannel"
     >
     >
       <template slot="content">
       <template slot="content">
-        <el-form ref="channelFormRef" :rules="channelRules" :model="channelFormData" label-width="120px">
+        <el-form
+          ref="channelFormRef"
+          :rules="channelRules"
+          :model="channelFormData"
+          label-width="120px"
+        >
           <el-form-item label="通道组合" prop="recharge_channel_group_id">
           <el-form-item label="通道组合" prop="recharge_channel_group_id">
-            <el-select v-model="channelFormData.recharge_channel_group_id" placeholder="请选择通道组合" style="width: 280px">
+            <el-select
+              v-model="channelFormData.recharge_channel_group_id"
+              placeholder="请选择通道组合"
+              style="width: 280px"
+            >
               <el-option
               <el-option
                 v-for="item in channelGroupList"
                 v-for="item in channelGroupList"
                 :key="item.id"
                 :key="item.id"
@@ -207,7 +296,12 @@
       @confirm="confirmPassword"
       @confirm="confirmPassword"
     >
     >
       <template slot="content">
       <template slot="content">
-        <el-form ref="pwdFormRef" :rules="pwdRules" :model="pwdFormData" label-width="100px">
+        <el-form
+          ref="pwdFormRef"
+          :rules="pwdRules"
+          :model="pwdFormData"
+          label-width="100px"
+        >
           <el-form-item label="密码类型">
           <el-form-item label="密码类型">
             <el-radio-group v-model="pwdFormData.pwdType">
             <el-radio-group v-model="pwdFormData.pwdType">
               <el-radio label="login">登录密码</el-radio>
               <el-radio label="login">登录密码</el-radio>
@@ -215,7 +309,11 @@
             </el-radio-group>
             </el-radio-group>
           </el-form-item>
           </el-form-item>
           <el-form-item label="新密码" prop="newPassword">
           <el-form-item label="新密码" prop="newPassword">
-            <el-input v-model="pwdFormData.newPassword" placeholder="请输入新密码" style="width: 280px" />
+            <el-input
+              v-model="pwdFormData.newPassword"
+              placeholder="请输入新密码"
+              style="width: 280px"
+            />
           </el-form-item>
           </el-form-item>
         </el-form>
         </el-form>
       </template>
       </template>
@@ -224,10 +322,12 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import Dialog from '@/components/Dialog/index.vue'
+import Dialog from "@/components/Dialog/index.vue";
 import {
 import {
   getChangeTypes,
   getChangeTypes,
   menucheck,
   menucheck,
+  sfBalance,
+  sfBalanceTransfer,
   useraddress,
   useraddress,
   userbanned,
   userbanned,
   usermerge,
   usermerge,
@@ -239,151 +339,159 @@ import {
   walletBankList,
   walletBankList,
   setUserRechargeChannelGroup,
   setUserRechargeChannelGroup,
   getRechargeChannelGroupList,
   getRechargeChannelGroupList,
-  setUserPassword
-} from '@/api/data'
+  setUserPassword,
+} from "@/api/data";
 
 
 export default {
 export default {
   components: {
   components: {
-    Dialog
+    Dialog,
   },
   },
   computed: {
   computed: {
     searchForm() {
     searchForm() {
       return [
       return [
         {
         {
-          label: '用户名称',
-          type: 'input',
-          prop: 'username',
-          clearable: false
+          label: "用户名称",
+          type: "input",
+          prop: "username",
+          clearable: false,
         },
         },
         {
         {
-          label: '用户昵称',
-          type: 'input',
-          prop: 'like_first_name',
-          clearable: false
+          label: "用户昵称",
+          type: "input",
+          prop: "like_first_name",
+          clearable: false,
         },
         },
         {
         {
-          label: '会员ID',
-          type: 'input',
-          prop: 'member_id',
-          clearable: false
+          label: "会员ID",
+          type: "input",
+          prop: "member_id",
+          clearable: false,
         },
         },
         {
         {
-          label: '用户等级',
-          type: 'input',
-          prop: 'level',
-          clearable: false
+          label: "用户等级",
+          type: "input",
+          prop: "level",
+          clearable: false,
         },
         },
         {
         {
-          label: '用户邀请码',
-          labelWidth: '110px',
-          type: 'input',
-          prop: 'user_code',
-          clearable: false
+          label: "用户邀请码",
+          labelWidth: "110px",
+          type: "input",
+          prop: "user_code",
+          clearable: false,
         },
         },
         {
         {
-          label: '邀请人邀请码',
-          labelWidth: '110px',
-          type: 'input',
-          prop: 'agent_user_code',
-          clearable: false
+          label: "邀请人邀请码",
+          labelWidth: "110px",
+          type: "input",
+          prop: "agent_user_code",
+          clearable: false,
         },
         },
         {
         {
-          label: '充值通道',
-          type: 'select',
-          prop: 'recharge_channel_group_id',
-          options: this.channelGroupList.map(group => ({ label: group.name, value: group.id })),
+          label: "充值通道",
+          type: "select",
+          prop: "recharge_channel_group_id",
+          options: this.channelGroupList.map((group) => ({
+            label: group.name,
+            value: group.id,
+          })),
         },
         },
         {
         {
-          label: '注册来源',
-          type: 'select',
-          prop: 'from',
+          label: "注册来源",
+          type: "select",
+          prop: "from",
           options: [
           options: [
-            { label: 'tg用户', value: '-1' },
-            { label: '后台客服账号', value: '0' },
-            { label: '真实用户', value: '1' },
-            { label: '虚拟用户', value: '2' }
-          ]
+            { label: "tg用户", value: "-1" },
+            { label: "后台客服账号", value: "0" },
+            { label: "真实用户", value: "1" },
+            { label: "虚拟用户", value: "2" },
+          ],
         },
         },
         {
         {
-          label: '新增用户',
-          type: 'slot',
-          prop: 'dateRange',
-          slotName: 'dateRange',
+          label: "新增用户",
+          type: "slot",
+          prop: "dateRange",
+          slotName: "dateRange",
         },
         },
         {
         {
-          label: '开始时间',
-          prop: 'start_time',
-          isHide: true
+          label: "开始时间",
+          prop: "start_time",
+          isHide: true,
         },
         },
         {
         {
-          label: '结束时间',
-          prop: 'end_time',
-          isHide: true
+          label: "结束时间",
+          prop: "end_time",
+          isHide: true,
         },
         },
         {
         {
-          label: 'IP',
-          type: 'input',
-          prop: 'register_ip',
-          clearable: false
-        }
-      ]
-    }
+          label: "IP",
+          type: "input",
+          prop: "register_ip",
+          clearable: false,
+        },
+      ];
+    },
   },
   },
   data() {
   data() {
     return {
     return {
       pwdFormData: {
       pwdFormData: {
-        member_id: '',
-        pwdType: 'login',
-        newPassword: ''
+        member_id: "",
+        pwdType: "login",
+        newPassword: "",
       },
       },
+      sfBalanceData: [],
       pwdRules: {
       pwdRules: {
         newPassword: [
         newPassword: [
-          { required: true, message: '请输入新密码', trigger: 'blur' }
-        ]
+          { required: true, message: "请输入新密码", trigger: "blur" },
+        ],
       },
       },
       pickerOptions: {
       pickerOptions: {
-        shortcuts: [{
-          text: '今天',
-          onClick(picker) {
-            const start = new Date();
-            start.setHours(0, 0, 0, 0);
-            const end = new Date();
-            end.setHours(23, 59, 59, 999);
-            picker.$emit('pick', [start, end]);
-          }
-        }, {
-          text: '昨天',
-          onClick(picker) {
-            const start = new Date();
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * 1);
-            start.setHours(0, 0, 0, 0);
-            const end = new Date();
-            end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
-            end.setHours(23, 59, 59, 999);
-            picker.$emit('pick', [start, end]);
-          }
-        }, {
-          text: '7天内',
-          onClick(picker) {
-            const start = new Date();
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
-            start.setHours(0, 0, 0, 0);
-            const end = new Date();
-            end.setHours(23, 59, 59, 999);
-            picker.$emit('pick', [start, end]);
-          }
-        }]
+        shortcuts: [
+          {
+            text: "今天",
+            onClick(picker) {
+              const start = new Date();
+              start.setHours(0, 0, 0, 0);
+              const end = new Date();
+              end.setHours(23, 59, 59, 999);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "昨天",
+            onClick(picker) {
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 1);
+              start.setHours(0, 0, 0, 0);
+              const end = new Date();
+              end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
+              end.setHours(23, 59, 59, 999);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "7天内",
+            onClick(picker) {
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              start.setHours(0, 0, 0, 0);
+              const end = new Date();
+              end.setHours(23, 59, 59, 999);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+        ],
       },
       },
       selectedMemberIds: [],
       selectedMemberIds: [],
       channelGroupList: [],
       channelGroupList: [],
       channelFormData: {
       channelFormData: {
         member_ids: [],
         member_ids: [],
-        recharge_channel_group_id: ''
+        recharge_channel_group_id: "",
       },
       },
       channelRules: {
       channelRules: {
         recharge_channel_group_id: [
         recharge_channel_group_id: [
-          { required: true, message: '请选择充值通道组合', trigger: 'change' }
-        ]
+          { required: true, message: "请选择充值通道组合", trigger: "change" },
+        ],
       },
       },
 
 
       listDataBank: [],
       listDataBank: [],
@@ -393,594 +501,678 @@ export default {
       SHOW: false,
       SHOW: false,
       loading: false,
       loading: false,
       queryData: {
       queryData: {
-        order: '',
-        by: ''
+        order: "",
+        by: "",
       },
       },
       visibleBasicDrawer: false,
       visibleBasicDrawer: false,
-      renderContent: '',
+      renderContent: "",
       rowsActions: [
       rowsActions: [
         {
         {
-          key: 'upWallet',
-          label: '充值',
+          key: "upWallet",
+          label: "充值",
           method: (row) => {
           method: (row) => {
-            this.positive = true
-            this.formData.member_id = row.member_id
-            this.$refs.dialog1.open()
-            getChangeTypes()
-              .then((res) => {
-                this.listTypes = res.data
-              })
-          }
+            this.positive = true;
+            this.formData.member_id = row.member_id;
+            this.$refs.dialog1.open();
+            getChangeTypes().then((res) => {
+              this.listTypes = res.data;
+            });
+          },
         },
         },
         {
         {
-          key: 'unWallet',
-          label: '扣款',
+          key: "unWallet",
+          label: "扣款",
           method: (row) => {
           method: (row) => {
-            this.positive = false
-            this.formData.member_id = row.member_id
-            this.$refs.dialog.open()
-          }
+            this.positive = false;
+            this.formData.member_id = row.member_id;
+            this.$refs.dialog.open();
+          },
         },
         },
         {
         {
-          key: 'address',
-          label: '提现地址',
-          method: (row) => this.showWithdrawalAddress(row)
+          key: "address",
+          label: "提现地址",
+          method: (row) => this.showWithdrawalAddress(row),
         },
         },
         {
         {
-          key: 'setChannel',
-          label: '设置通道',
-          method: (row) => this.openChannelDialog([row.member_id], row.recharge_channel_group_id)
+          key: "setChannel",
+          label: "设置通道",
+          method: (row) =>
+            this.openChannelDialog(
+              [row.member_id],
+              row.recharge_channel_group_id
+            ),
         },
         },
         {
         {
-          key: 'modifyPassword',
-          label: '修改密码',
+          key: "modifyPassword",
+          label: "修改密码",
           method: (row) => {
           method: (row) => {
-            this.pwdFormData.member_id = row.member_id
-            this.pwdFormData.pwdType = 'login'
-            this.pwdFormData.newPassword = ''
-            this.$refs.dialogPassword.open()
+            this.pwdFormData.member_id = row.member_id;
+            this.pwdFormData.pwdType = "login";
+            this.pwdFormData.newPassword = "";
+            this.$refs.dialogPassword.open();
             this.$nextTick(() => {
             this.$nextTick(() => {
-              this.$refs.pwdFormRef && this.$refs.pwdFormRef.clearValidate()
-            })
-          }
+              this.$refs.pwdFormRef && this.$refs.pwdFormRef.clearValidate();
+            });
+          },
         },
         },
         {
         {
-          key: 'secret_key',
-          label: '合并用户',
+          key: "secret_key",
+          label: "合并用户",
           method: (row) => {
           method: (row) => {
-            this.$prompt('请输入被合并的用户的秘钥', '提示', {
-              confirmButtonText: '确定',
-              cancelButtonText: '取消',
+            this.$prompt("请输入被合并的用户的秘钥", "提示", {
+              confirmButtonText: "确定",
+              cancelButtonText: "取消",
               inputPattern: /^\S+$/,
               inputPattern: /^\S+$/,
-              inputErrorMessage: '请输入被合并的用户的秘钥'
+              inputErrorMessage: "请输入被合并的用户的秘钥",
             }).then(({ value }) => {
             }).then(({ value }) => {
               usermerge({
               usermerge({
                 secret_key: value,
                 secret_key: value,
-                member_id: row.member_id
-              })
-                .then((res) => {
-                  this.$message({
-                    type: 'success',
-                    message: '合并成功!'
-                  })
-                  this.onSubmit(this.queryData)
-                })
-            })
-          }
+                member_id: row.member_id,
+              }).then((res) => {
+                this.$message({
+                  type: "success",
+                  message: "合并成功!",
+                });
+                this.onSubmit(this.queryData);
+              });
+            });
+          },
         },
         },
         {
         {
-          key: 'note',
-          label: '备注',
+          key: "note",
+          label: "备注",
           method: (row) => {
           method: (row) => {
-            this.$prompt('请输入备注', '备注', {
-              confirmButtonText: '确定',
-              cancelButtonText: '取消',
+            this.$prompt("请输入备注", "备注", {
+              confirmButtonText: "确定",
+              cancelButtonText: "取消",
               inputPattern: /^\S+$/,
               inputPattern: /^\S+$/,
               inputValue: row.admin_note,
               inputValue: row.admin_note,
-              inputErrorMessage: '请输入备注'
+              inputErrorMessage: "请输入备注",
             }).then(({ value }) => {
             }).then(({ value }) => {
               usersetNote({
               usersetNote({
                 member_id: row.member_id,
                 member_id: row.member_id,
-                admin_note: value
-              })
-                .then(() => {
-                  this.onSubmit(this.queryData)
-                  this.$message({
-                    type: 'success',
-                    message: '操作成功'
-                  })
-                })
-            })
-          }
+                admin_note: value,
+              }).then(() => {
+                this.onSubmit(this.queryData);
+                this.$message({
+                  type: "success",
+                  message: "操作成功",
+                });
+              });
+            });
+          },
         },
         },
         {
         {
-          key: 'log',
-          label: '用户日志',
+          key: "log",
+          label: "用户日志",
           method: (row) => {
           method: (row) => {
-            this.logFormData.user_id = row.member_id
-            this.logFormData.dateRange = []
-            this.logTableData = []
-            this.$refs.dialogLog.open()
-            this.getLogList()
-          }
+            this.logFormData.user_id = row.member_id;
+            this.logFormData.dateRange = [];
+            this.logTableData = [];
+            this.$refs.dialogLog.open();
+            this.getLogList();
+          },
         },
         },
         {
         {
-          key: 'banned',
-          label: '封号',
+          key: "banned",
+          label: "封号",
           vIF: (row) => row.is_banned === 0,
           vIF: (row) => row.is_banned === 0,
           method: (row) => {
           method: (row) => {
-            this.$confirm('此操作将修改用户是否封号,保存封号修改?', '是否封号', {
-              distinguishCancelAndClose: true,
-              confirmButtonText: '封号',
-              cancelButtonText: '取消'
-            })
-              .then(() => {
-                userbanned({
-                  member_id: row.member_id,
-                  is_banned: 1
-                })
-                  .then((res) => {
-                    this.onSubmit(this.queryData)
-                    this.$message({
-                      type: 'warning',
-                      message: '保存修改为封号!'
-                    })
-                  })
-              })
-          }
+            this.$confirm(
+              "此操作将修改用户是否封号,保存封号修改?",
+              "是否封号",
+              {
+                distinguishCancelAndClose: true,
+                confirmButtonText: "封号",
+                cancelButtonText: "取消",
+              }
+            ).then(() => {
+              userbanned({
+                member_id: row.member_id,
+                is_banned: 1,
+              }).then((res) => {
+                this.onSubmit(this.queryData);
+                this.$message({
+                  type: "warning",
+                  message: "保存修改为封号!",
+                });
+              });
+            });
+          },
         },
         },
         {
         {
-          key: 'jiefeng',
-          label: '解封',
+          key: "jiefeng",
+          label: "解封",
           vIF: (row) => row.is_banned === 1,
           vIF: (row) => row.is_banned === 1,
           method: (row) => {
           method: (row) => {
-            this.$confirm('此操作将修改用户是否解封,保存解封修改?', '是否解封', {
-              distinguishCancelAndClose: true,
-              confirmButtonText: '正常',
-              cancelButtonText: '取消'
-            })
-              .then(() => {
-                userbanned({
-                  member_id: row.member_id,
-                  is_banned: 0
-                })
-                  .then((res) => {
-                    this.onSubmit(this.queryData)
-                    this.$message({
-                      type: 'success',
-                      message: '保存修改为正常!'
-                    })
-                  })
-              })
-          }
-        }
+            this.$confirm(
+              "此操作将修改用户是否解封,保存解封修改?",
+              "是否解封",
+              {
+                distinguishCancelAndClose: true,
+                confirmButtonText: "正常",
+                cancelButtonText: "取消",
+              }
+            ).then(() => {
+              userbanned({
+                member_id: row.member_id,
+                is_banned: 0,
+              }).then((res) => {
+                this.onSubmit(this.queryData);
+                this.$message({
+                  type: "success",
+                  message: "保存修改为正常!",
+                });
+              });
+            });
+          },
+        },
       ],
       ],
       apis: {
       apis: {
         list: {
         list: {
-          url: 'user',
-          dataParam: 'data.data',
-          resultParam: 'data',
-          init: false
-        }
+          url: "user",
+          dataParam: "data.data",
+          resultParam: "data",
+          init: false,
+        },
       },
       },
       tableOptions: {
       tableOptions: {
         add: {
         add: {
           show: false,
           show: false,
           initData: () => {
           initData: () => {
-            return { test: 'test' }
-          }
-        }
+            return { test: "test" };
+          },
+        },
       },
       },
       editForm: [
       editForm: [
         {
         {
-          body: []
-        }
+          body: [],
+        },
       ],
       ],
-      editConfig: {
-      },
+      editConfig: {},
       formData: {
       formData: {
-        amount: '',
-        member_id: '',
-        remark: '',
-        change_type: ''
+        amount: "",
+        member_id: "",
+        remark: "",
+        change_type: "",
       },
       },
       rulesData: {
       rulesData: {
-        change_type: [
-          { required: true, message: '请输入', trigger: 'blur' }
-        ],
-        amount: [
-          { required: true, message: '请输入', trigger: 'blur' }
-        ],
-        remark: [
-          { required: true, message: '请输入', trigger: 'blur' }
-        ]
+        change_type: [{ required: true, message: "请输入", trigger: "blur" }],
+        amount: [{ required: true, message: "请输入", trigger: "blur" }],
+        remark: [{ required: true, message: "请输入", trigger: "blur" }],
       },
       },
       logFormData: {
       logFormData: {
-        user_id: '',
-        dateRange: []
+        user_id: "",
+        dateRange: [],
       },
       },
       logTableData: [],
       logTableData: [],
       logLoading: false,
       logLoading: false,
       columns: [
       columns: [
         {
         {
-          label: '会员ID',
-          prop: 'member_id',
+          label: "会员ID",
+          prop: "member_id",
         },
         },
         {
         {
-          label: '邀请码',
-          prop: 'user_code',
+          label: "邀请码",
+          prop: "user_code",
         },
         },
         {
         {
-          label: '会员昵称',
+          label: "会员昵称",
           popover: true,
           popover: true,
           width: 140,
           width: 140,
-          props: ['first_name'],
-          tagType: (row) => row?.status === 1 ? 'danger' : '',
+          props: ["first_name"],
+          tagType: (row) => (row?.status === 1 ? "danger" : ""),
           options: [
           options: [
             {
             {
-              label: '会员ID',
-              value: ['member_id']
-            }, {
-              label: '用户名称',
-              value: ['username']
+              label: "会员ID",
+              value: ["member_id"],
             },
             },
             {
             {
-              label: '异常信息',
-              vShow: (row) => row?.admin_note ? true : false,
-              value: ['admin_note']
-            }
-          ]
+              label: "用户名称",
+              value: ["username"],
+            },
+            {
+              label: "异常信息",
+              vShow: (row) => (row?.admin_note ? true : false),
+              value: ["admin_note"],
+            },
+          ],
         },
         },
         {
         {
-          label: '注册来源',
-          prop: 'from',
+          label: "注册来源",
+          prop: "from",
           method: (row) => {
           method: (row) => {
             const map = {
             const map = {
-              '-1': 'tg用户',
-              '0': '后台客服账号',
-              '1': '真实用户',
-              '2': '虚拟用户'
-            }
-            return map[row.from] || '--'
-          }
+              "-1": "tg用户",
+              0: "后台客服账号",
+              1: "真实用户",
+              2: "虚拟用户",
+            };
+            return map[row.from] || "--";
+          },
         },
         },
         {
         {
-          label: '飞机账号',
-          prop: 'username',
+          label: "飞机账号",
+          prop: "username",
         },
         },
         {
         {
-          label: '上级邀请人',
-          prop: 'agent',
+          label: "上级邀请人",
+          prop: "agent",
           width: 240,
           width: 240,
         },
         },
         {
         {
-          label: '会员等级',
-          prop: 'level',
-          method: (row) => row.level?.level_name || '--'
+          label: "会员等级",
+          prop: "level",
+          method: (row) => row.level?.level_name || "--",
         },
         },
         {
         {
-          label: '钱包余额',
+          label: "钱包余额",
           link: true,
           link: true,
-          sortable: 'custom',
-          method: (row) => row.wallet ? `${Number(row.wallet.available_balance).toFixed(2)}` : '--',
+          // sortable: "custom",
+          method: (row) =>
+            row.wallet
+              ? `${Number(row.wallet.available_balance).toFixed(2)}`
+              : "--",
           click: (row) => {
           click: (row) => {
             this.$router.push({
             this.$router.push({
-              name: 'balance',
+              name: "balance",
               query: {
               query: {
-                member_id: row.member_id
-              }
-            })
-          }
+                member_id: row.member_id,
+              },
+            });
+          },
         },
         },
         {
         {
-          label: '冻结金额',
-          prop: 'wallet',
-          method: (row) => row.wallet ? Number(row.wallet.frozen_balance) : '--'
+          label: "三方余额",
+          link: true,
+          // sortable: "custom",
+          method: (row) =>
+            row.wallet
+              ? `${Number(row.third_game_total_balance).toFixed(2)}`
+              : "--",
+          click: (row) => {
+            this.$refs.sfLog.open();
+            this.getSfList(row.member_id);
+          },
         },
         },
         {
         {
-          label: '余额宝金额',
-          prop: 'yuebao',
-          method: (row) => row.wallet ? row.wallet.yuebao : '--'
+          label: "冻结金额",
+          prop: "wallet",
+          method: (row) =>
+            row.wallet ? Number(row.wallet.frozen_balance) : "--",
         },
         },
         {
         {
-          label: '打码量',
-          prop: 'total_consume',
+          label: "余额宝金额",
+          prop: "yuebao",
+          method: (row) => (row.wallet ? row.wallet.yuebao : "--"),
         },
         },
         {
         {
-          label: '充值通道',
-          prop: 'recharge_channel',
+          label: "打码量",
+          prop: "total_consume",
+        },
+        {
+          label: "充值通道",
+          prop: "recharge_channel",
           method: (row) => {
           method: (row) => {
-            return this.channelGroupList.find(group => group.id === row.recharge_channel_group_id)?.name || '--'
-          }
+            return (
+              this.channelGroupList.find(
+                (group) => group.id === row.recharge_channel_group_id
+              )?.name || "--"
+            );
+          },
         },
         },
         {
         {
-          label: '注册时间',
-          prop: 'created_at',
-          sortable: 'custom'
+          label: "注册时间",
+          prop: "created_at",
+          // sortable: "custom",
         },
         },
         {
         {
-          label: '新增用户',
-          prop: 'created_at',
+          label: "新增用户",
+          prop: "created_at",
           method: (row) => {
           method: (row) => {
-            if (!row.created_at) return '--';
-            const targetDate = new Date(row.created_at.replace(/-/g, '/'));
+            if (!row.created_at) return "--";
+            const targetDate = new Date(row.created_at.replace(/-/g, "/"));
             const targetTime = targetDate.getTime();
             const targetTime = targetDate.getTime();
 
 
             const now = new Date();
             const now = new Date();
-            const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
+            const todayStart = new Date(
+              now.getFullYear(),
+              now.getMonth(),
+              now.getDate()
+            ).getTime();
             const yesterdayStart = todayStart - 24 * 60 * 60 * 1000;
             const yesterdayStart = todayStart - 24 * 60 * 60 * 1000;
             const sevenDaysAgoStart = todayStart - 7 * 24 * 60 * 60 * 1000;
             const sevenDaysAgoStart = todayStart - 7 * 24 * 60 * 60 * 1000;
 
 
             if (targetTime >= todayStart) {
             if (targetTime >= todayStart) {
-              return '今天';
-            } else if (targetTime >= yesterdayStart && targetTime < todayStart) {
-              return '昨天';
-            } else if (targetTime >= sevenDaysAgoStart && targetTime < yesterdayStart) {
-              return '7天内';
+              return "今天";
+            } else if (
+              targetTime >= yesterdayStart &&
+              targetTime < todayStart
+            ) {
+              return "昨天";
+            } else if (
+              targetTime >= sevenDaysAgoStart &&
+              targetTime < yesterdayStart
+            ) {
+              return "7天内";
             } else {
             } else {
-              return '7天前';
+              return "7天前";
             }
             }
-          }
+          },
         },
         },
         {
         {
-          label: '活跃时间',
-          sortable: 'custom',
-          prop: 'last_active_time'
+          label: "活跃时间",
+          // sortable: "custom",
+          prop: "last_active_time",
         },
         },
         {
         {
-          label: '是否封号',
-          prop: 'is_banned',
-          method: (row) => row.is_banned === 0 ? '正常' : '封号'
+          label: "是否封号",
+          prop: "is_banned",
+          method: (row) => (row.is_banned === 0 ? "正常" : "封号"),
         },
         },
 
 
         {
         {
-          label: '秘钥',
+          label: "秘钥",
           popover: true,
           popover: true,
-          default: '秘钥',
+          default: "秘钥",
           width: 70,
           width: 70,
           options: [
           options: [
             {
             {
-              label: '找回账号的秘钥',
-              value: ['secret_key']
-            }]
+              label: "找回账号的秘钥",
+              value: ["secret_key"],
+            },
+          ],
         },
         },
         {
         {
-          label: '访客ID',
-          default: '访客ID',
+          label: "访客ID",
+          default: "访客ID",
           width: 80,
           width: 80,
           popover: true,
           popover: true,
           options: [
           options: [
             {
             {
-              label: '访客ID',
-              value: ['visitor_id']
-            }]
+              label: "访客ID",
+              value: ["visitor_id"],
+            },
+          ],
         },
         },
         {
         {
-          label: '备注',
-          prop: 'admin_note'
+          label: "备注",
+          prop: "admin_note",
         },
         },
         {
         {
-          label: '手机号',
-          prop: 'phone'
+          label: "手机号",
+          prop: "phone",
         },
         },
         {
         {
-          label: 'IP',
-          prop: 'register_ip'
-        }
-      ]
-    }
+          label: "IP",
+          prop: "register_ip",
+        },
+      ],
+    };
   },
   },
   mounted() {
   mounted() {
-    this.onSubmit()
-    menucheck('admin/wallet/topUp')
-      .then(({ code }) => {
-        this.rowsActions[0].vIF = () => code === 0
-      })
+    this.onSubmit();
+    menucheck("admin/wallet/topUp").then(({ code }) => {
+      this.rowsActions[0].vIF = () => code === 0;
+    });
 
 
-    getRechargeChannelGroupList({ page: 1, limit: 1000 }).then(res => {
-      this.channelGroupList = res.data?.data || []
-    }).catch(err => console.log('获取通道组合失败', err))
+    getRechargeChannelGroupList({ page: 1, limit: 1000 })
+      .then((res) => {
+        this.channelGroupList = res.data?.data || [];
+      })
+      .catch((err) => console.log("获取通道组合失败", err));
   },
   },
   methods: {
   methods: {
+    getSfList(member_id) {
+      this.logLoading = true;
+      const params = {
+        member_id: member_id,
+      };
+      sfBalance(params)
+        .then((res) => {
+          this.sfBalanceData = res.data;
+          console.log(this.sfBalanceData);
+          this.logLoading = false;
+        })
+        .catch(() => {
+          this.logLoading = false;
+        });
+    },
+    sfBalanceTransferClick(member_id) {
+      this.logLoading = true;
+      const params = {
+        member_id: member_id,
+      };
+      sfBalanceTransfer(params)
+        .then((res) => {
+          this.logLoading = false;
+          this.$notify({
+            title: "成功",
+            message: "操作成功",
+            type: "success",
+          });
+          this.getSfList(member_id);
+          this.onSubmit(this.queryData);
+        })
+        .catch(() => {
+          this.logLoading = false;
+        });
+    },
     confirmPassword() {
     confirmPassword() {
       this.$refs.pwdFormRef.validate((valid) => {
       this.$refs.pwdFormRef.validate((valid) => {
         if (valid) {
         if (valid) {
-          this.loading = true
+          this.loading = true;
           const payload = {
           const payload = {
-            member_id: this.pwdFormData.member_id
-          }
-          if (this.pwdFormData.pwdType === 'login') {
-            payload.password = this.pwdFormData.newPassword
+            member_id: this.pwdFormData.member_id,
+          };
+          if (this.pwdFormData.pwdType === "login") {
+            payload.password = this.pwdFormData.newPassword;
           } else {
           } else {
-            payload.payment_password = this.pwdFormData.newPassword
+            payload.payment_password = this.pwdFormData.newPassword;
           }
           }
 
 
           setUserPassword(payload)
           setUserPassword(payload)
             .then((res) => {
             .then((res) => {
-              this.loading = false
+              this.loading = false;
               if (res.code === 0) {
               if (res.code === 0) {
                 this.$notify({
                 this.$notify({
-                  title: '成功',
-                  message: '修改成功',
-                  type: 'success'
-                })
-                this.$refs.dialogPassword.close()
+                  title: "成功",
+                  message: "修改成功",
+                  type: "success",
+                });
+                this.$refs.dialogPassword.close();
               } else {
               } else {
-                this.$message.error(res.msg || '修改失败')
+                this.$message.error(res.msg || "修改失败");
               }
               }
             })
             })
             .catch(() => {
             .catch(() => {
-              this.loading = false
-            })
+              this.loading = false;
+            });
         }
         }
-      })
+      });
     },
     },
 
 
     handleSelectionChange(val) {
     handleSelectionChange(val) {
-      this.selectedMemberIds = val.map(item => item.member_id)
+      this.selectedMemberIds = val.map((item) => item.member_id);
     },
     },
 
 
     handleBatchSetChannel() {
     handleBatchSetChannel() {
-      this.openChannelDialog(this.selectedMemberIds, '')
+      this.openChannelDialog(this.selectedMemberIds, "");
     },
     },
 
 
     openChannelDialog(ids, groupId) {
     openChannelDialog(ids, groupId) {
-      this.channelFormData.member_ids = ids
-      this.channelFormData.recharge_channel_group_id = groupId || ''
-      this.$refs.dialogChannel.open()
+      this.channelFormData.member_ids = ids;
+      this.channelFormData.recharge_channel_group_id = groupId || "";
+      this.$refs.dialogChannel.open();
 
 
       if (this.channelGroupList.length === 0) {
       if (this.channelGroupList.length === 0) {
-        getRechargeChannelGroupList({ page: 1, limit: 1000 }).then(res => {
-          this.channelGroupList = res.data?.data || []
-        }).catch(err => console.log('获取通道组合失败', err))
+        getRechargeChannelGroupList({ page: 1, limit: 1000 })
+          .then((res) => {
+            this.channelGroupList = res.data?.data || [];
+          })
+          .catch((err) => console.log("获取通道组合失败", err));
       }
       }
     },
     },
 
 
     confirmChannel() {
     confirmChannel() {
       this.$refs.channelFormRef.validate((valid) => {
       this.$refs.channelFormRef.validate((valid) => {
         if (valid) {
         if (valid) {
-          this.loading = true
+          this.loading = true;
           setUserRechargeChannelGroup({
           setUserRechargeChannelGroup({
             member_id: this.channelFormData.member_ids,
             member_id: this.channelFormData.member_ids,
-            recharge_channel_group_id: this.channelFormData.recharge_channel_group_id
+            recharge_channel_group_id:
+              this.channelFormData.recharge_channel_group_id,
           })
           })
             .then((res) => {
             .then((res) => {
-              this.loading = false
+              this.loading = false;
               if (res.code === 0) {
               if (res.code === 0) {
                 this.$notify({
                 this.$notify({
-                  title: '成功',
-                  message: '设置成功',
-                  type: 'success'
-                })
-                this.$refs.dialogChannel.close()
-                this.onSubmit(this.queryData)
+                  title: "成功",
+                  message: "设置成功",
+                  type: "success",
+                });
+                this.$refs.dialogChannel.close();
+                this.onSubmit(this.queryData);
               } else {
               } else {
-                this.$message.error(res.msg || '设置失败')
+                this.$message.error(res.msg || "设置失败");
               }
               }
             })
             })
             .catch(() => {
             .catch(() => {
-              this.loading = false
-            })
+              this.loading = false;
+            });
         }
         }
-      })
+      });
     },
     },
 
 
     showWithdrawalAddress(row) {
     showWithdrawalAddress(row) {
-      this.listDataBank = []
-      this.listDataAddress = []
+      this.listDataBank = [];
+      this.listDataAddress = [];
 
 
       Promise.all([
       Promise.all([
         walletBankList({ member_id: row.member_id }),
         walletBankList({ member_id: row.member_id }),
-        walletAddress({ member_id: row.member_id })
+        walletAddress({ member_id: row.member_id }),
       ])
       ])
         .then(([bankRes, addrRes]) => {
         .then(([bankRes, addrRes]) => {
-          this.listDataBank = bankRes?.data?.list || []
-          this.listDataAddress = addrRes?.data?.list || []
-          this.$refs.dialogAddress.open()
+          this.listDataBank = bankRes?.data?.list || [];
+          this.listDataAddress = addrRes?.data?.list || [];
+          this.$refs.dialogAddress.open();
         })
         })
         .catch(() => {
         .catch(() => {
-          this.$message.error('获取提现地址失败')
-        })
+          this.$message.error("获取提现地址失败");
+        });
     },
     },
 
 
     headerClick(column) {
     headerClick(column) {
-      const order = column.order === 'ascending' ? 'asc' : column.order === 'descending' ? 'desc' : ''
-      let byValue = ''
-      if (column.label === '钱包余额') {
-        byValue = 'available_balance'
+      const order =
+        column.order === "ascending"
+          ? "asc"
+          : column.order === "descending"
+          ? "desc"
+          : "";
+      let byValue = "";
+      if (column.label === "钱包余额") {
+        byValue = "available_balance";
       }
       }
-      if (column.label === '注册时间') {
-        byValue = 'created_at'
+      if (column.label === "注册时间") {
+        byValue = "created_at";
       }
       }
-      if (column.label === '活跃时间') {
-        byValue = 'last_active_time'
+      if (column.label === "活跃时间") {
+        byValue = "last_active_time";
       }
       }
       if (order) {
       if (order) {
-        this.$set(this.queryData, 'by', byValue)
-        this.$set(this.queryData, 'order', order)
-        this.onSubmit(this.queryData)
+        this.$set(this.queryData, "by", byValue);
+        this.$set(this.queryData, "order", order);
+        this.onSubmit(this.queryData);
       } else {
       } else {
-        this.$delete(this.queryData, 'by')
-        this.$delete(this.queryData, 'order')
-        this.onSubmit(this.queryData)
+        this.$delete(this.queryData, "by");
+        this.$delete(this.queryData, "order");
+        this.onSubmit(this.queryData);
       }
       }
     },
     },
 
 
     confirm() {
     confirm() {
-      console.log('提交数据:', this.formData)
+      console.log("提交数据:", this.formData);
       this.$refs.formDataref.validate((valid) => {
       this.$refs.formDataref.validate((valid) => {
-        let fn = withdraw
+        let fn = withdraw;
         if (valid) {
         if (valid) {
-          this.loading = true
+          this.loading = true;
           if (!this.positive) {
           if (!this.positive) {
-            fn = walletdebiting
+            fn = walletdebiting;
           }
           }
           fn({
           fn({
             member_id: this.formData.member_id,
             member_id: this.formData.member_id,
             remark: this.formData.remark,
             remark: this.formData.remark,
             amount: this.formData.amount,
             amount: this.formData.amount,
-            change_type: this.formData.change_type
+            change_type: this.formData.change_type,
           })
           })
             .then((res) => {
             .then((res) => {
-              this.loading = false
+              this.loading = false;
               if (res.code === 0) {
               if (res.code === 0) {
                 this.$notify({
                 this.$notify({
-                  title: '成功',
-                  message: '操作成功',
-                  type: 'success'
-                })
-                this.$refs.dialog.close()
-                this.$refs.dialog1.close()
-                this.onSubmit(this.queryData)
-                this.$refs.formDataref.resetFields()
+                  title: "成功",
+                  message: "操作成功",
+                  type: "success",
+                });
+                this.$refs.dialog.close();
+                this.$refs.dialog1.close();
+                this.onSubmit(this.queryData);
+                this.$refs.formDataref.resetFields();
               }
               }
             })
             })
             .catch((err) => {
             .catch((err) => {
-              this.loading = false
-            })
+              this.loading = false;
+            });
         } else {
         } else {
-          console.log('error submit!!')
-          return false
+          console.log("error submit!!");
+          return false;
         }
         }
-      })
+      });
     },
     },
 
 
-    onValueChange(val) {
-
-    },
+    onValueChange(val) {},
 
 
     onSubmit(params = {}) {
     onSubmit(params = {}) {
-      this.queryData = params
+      this.queryData = params;
 
 
-      const reqData = { ...params }
+      const reqData = { ...params };
 
 
       if (reqData.dateRange && reqData.dateRange.length === 2) {
       if (reqData.dateRange && reqData.dateRange.length === 2) {
-        reqData.start_time = reqData.dateRange[0].split(' ')[0]
-        reqData.end_time = reqData.dateRange[1].split(' ')[0]
-      } else if (reqData.dateRange === null || reqData.dateRange === undefined || reqData.dateRange.length === 0) {
-        reqData.start_time = ''
-        reqData.end_time = ''
+        reqData.start_time = reqData.dateRange[0].split(" ")[0];
+        reqData.end_time = reqData.dateRange[1].split(" ")[0];
+      } else if (
+        reqData.dateRange === null ||
+        reqData.dateRange === undefined ||
+        reqData.dateRange.length === 0
+      ) {
+        reqData.start_time = "";
+        reqData.end_time = "";
       }
       }
 
 
-      delete reqData.dateRange
+      delete reqData.dateRange;
 
 
-      this.$refs.table.getList(reqData)
+      this.$refs.table.getList(reqData);
     },
     },
 
 
     getLogList() {
     getLogList() {
-      this.logLoading = true
+      this.logLoading = true;
       const params = {
       const params = {
         user_id: this.logFormData.user_id,
         user_id: this.logFormData.user_id,
-        start_time: this.logFormData.dateRange ? this.logFormData.dateRange[0] : '',
-        end_time: this.logFormData.dateRange ? this.logFormData.dateRange[1] : ''
-      }
-      userLoginLog(params).then(res => {
-        this.logTableData = res.data?.data || []
-        this.logLoading = false
-      }).catch(() => {
-        this.logLoading = false
-      })
-    }
-  }
-}
+        start_time: this.logFormData.dateRange
+          ? this.logFormData.dateRange[0]
+          : "",
+        end_time: this.logFormData.dateRange
+          ? this.logFormData.dateRange[1]
+          : "",
+      };
+      userLoginLog(params)
+        .then((res) => {
+          this.logTableData = res.data?.data || [];
+          this.logLoading = false;
+        })
+        .catch(() => {
+          this.logLoading = false;
+        });
+    },
+  },
+};
 </script>
 </script>

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.