10.10综合交易所原始源码-管理后台
1
admin
2026-01-07 e1e694369dabf557615669ce2f71e9af70277ff6
src/views/modules/sys-config/root2-sys-config.vue
New file
@@ -0,0 +1,532 @@
<template>
  <div class="mod-transport">
    <!-- <el-button @click="handle"
             style="margin-left: 20px">{{title}}</el-button>
    <br /><br /> -->
    <!-- <avue-form :option="option"
              v-model="obj"
              @submit="submit"></avue-form> -->
    <el-form :model="dataForm" ref="dataForm" label-width="auto" size="mini">
      <!-- <el-form-item label="" prop="roleName" class="item" label-width="20px">
      </el-form-item> -->
      <div class="item2">
        <div style="height: auto;position: relative;top: 25%;">
          APP
        </div>
      </div>
      <div style="background-color: white;height: 10px;"></div>
      <el-form-item label="当前版本" prop="roleName" label-width="70px">
        <el-input v-model="dataForm.sys_version" placeholder="当前APP版本"></el-input>
      </el-form-item>
      <!-- <el-form-item label="充值" prop="roleName" class="item" label-width="40px"></el-form-item> -->
      <!-- :inline="true" -->
      <div class="item2">
        <div style="height: auto;position: relative;top: 25%;">
          充值
        </div>
      </div>
      <!-- <div style="background-color: white;height: 10px;"></div> -->
      <el-form :inline="true">
          <el-form-item label="">
            <el-form-item label="充值最低数量,其他币种价值会被换算成USDT判断"></el-form-item>
            <el-input v-model="dataForm.recharge_limit_min" placeholder="USDT"></el-input>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="充值最高数量,其他币种价值会被换算成USDT判断"></el-form-item>
            <el-input v-model="dataForm.recharge_limit_max" placeholder="USDT"></el-input>
          </el-form-item>
      </el-form>
      <!-- <el-form-item label="提现" prop="roleName" class="item" label-width="40px"></el-form-item> -->
      <div class="item2">
        <div style="height: auto;position: relative;top: 25%;">
          提现
        </div>
      </div>
      <!-- <div style="background-color: white;height: 10px;"></div> -->
      <el-form :inline="true">
          <el-form-item label="">
            <el-form-item label="是否开启基础认证后才能提现"></el-form-item>
            <br/>
            <el-select v-model="dataForm.withdraw_by_kyc" placeholder="关闭">
                <el-option label="关闭" value="false"></el-option>
                <el-option label="开启" value="true"></el-option>
              </el-select>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="提现流水限制是否开启"></el-form-item>
            <br/>
            <el-select v-model="dataForm.withdraw_limit_open" placeholder="关闭">
              <el-option label="关闭" value="false"></el-option>
              <el-option label="开启" value="true"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="提现限制流水百分比"></el-form-item>
            <el-input v-model="dataForm.withdraw_limit_turnover_percent" placeholder="%"></el-input>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="单次USDT提现限额最低金额"></el-form-item>
            <el-input v-model="dataForm.withdraw_limit_dapp" placeholder="USDT"></el-input>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="单次USDT提现限额最高金额"></el-form-item>
            <el-input v-model="dataForm.withdraw_limit_max" placeholder="USDT"></el-input>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="单次BTC提现最低金额"></el-form-item>
            <el-input v-model="dataForm.withdraw_limit_btc" placeholder="BTC"></el-input>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="单次ETH提现最低金额"></el-form-item>
            <el-input v-model="dataForm.withdraw_limit_eth" placeholder="ETH"></el-input>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="单次USDC提现最低金额"></el-form-item>
            <el-input v-model="dataForm.withdraw_limit_usdc" placeholder="USDC"></el-input>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="每日可提现次数,若为0或空则不做限制"></el-form-item>
            <el-input v-model="dataForm.withdraw_limit_num" placeholder=""></el-input>
          </el-form-item>
          <el-form-item label="">
            <el-form-item label="每日可提现时间段,若为空则不做限制"></el-form-item>
            <br/>
            <el-time-picker
              is-range
              arrow-control
              v-model="dataForm.dateRange"
              type="datetimerange"
              range-separator="至"
              value-format="HH:mm:ss"
              start-placeholder="开始时间"
              end-placeholder="结束时间"
              placeholder="选择时间范围">
            </el-time-picker>
          </el-form-item>
      </el-form>
      <el-form :inline="true">
        <el-form-item label="" label-position="top">
          <!-- <el-form-item label="交割合约" prop="roleName" class="item"></el-form-item> -->
          <div class="item2" style="width: 520px;">
            <div style="height: auto;position: relative;top: -15%;">
              手续费
            </div>
          </div>
      <!-- <div style="background-color: white;height: 10px;"></div> -->
          <!-- <el-form-item label="24小时内交割合约客户最高赢率(设置了场控的不受影响),高于设定的值时客户必亏" style="display: flex;flex-wrap:wrap"></el-form-item>
          <el-form-item label="低于时则不限制(范例:10,为最高赢10%),为0则不限制" style="display: flex;flex-wrap:wrap"></el-form-item> -->
          <!-- <br /> -->
          <el-input-number v-model="dataForm.futures_most_prfit_level" :step="2"></el-input-number>
        </el-form-item>
        <el-form-item>
          <!-- <el-form-item label="永续合约" prop="roleName" class="item"></el-form-item> -->
          <div class="item2" style="width: 480px;">
            <div style="height: auto;position: relative;top: -15%;">
              永续合约
            </div>
          </div>
          <el-form-item label="交易状态" style="display: flex;flex-wrap:wrap"></el-form-item>
          <br/>
          <el-select v-model="dataForm.order_open" placeholder="关闭">
              <el-option label="关闭" value="false"></el-option>
              <el-option label="开启" value="true"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div class="item2">
        <div style="height: auto;position: relative;top: 25%;">
          币币(现货)交易
        </div>
      </div>
      <!-- <div style="background-color: white;height: 10px;"></div> -->
      <!-- <el-form-item label="币币(现货)交易" prop="roleName" class="item"></el-form-item> -->
      <el-form :inline="true" label-position="top">
        <el-form-item label="交易状态" prop="roleName">
          <el-select v-model="dataForm.exchange_order_open" placeholder="关闭">
            <el-option label="关闭" value="false"></el-option>
            <el-option label="开启" value="true"></el-option>
          </el-select>
          <!-- <el-input v-model="dataForm.roleName" placeholder="当前APP版本"></el-input> -->
        </el-form-item>
        <el-form-item label="卖出手续费" prop="exchange_apply_order_sell_fee">
          <el-input v-model="dataForm.exchange_apply_order_sell_fee" placeholder="%"></el-input>
        </el-form-item>
        <el-form-item label="买入手续费" prop="exchange_apply_order_buy_fee">
          <el-input v-model="dataForm.exchange_apply_order_buy_fee" placeholder="%"></el-input>
        </el-form-item>
      </el-form>
      <el-form label-position="top">
        <div class="item2">
          <div style="height: auto;position: relative;top: 25%;">
            在线客服
          </div>
        </div>
        <!-- <div style="background-color: white;height: 10px;"></div> -->
        <!-- <el-form-item label="在线客服" prop="roleName" class="item"></el-form-item> -->
        <el-form-item label="第三方在线客服链接地址(为空则为自研客服)" prop="roleName">
          <el-input
              type="textarea"
              placeholder="请输入内容"
              v-model="dataForm.customer_service_url"
              :autosize="{ minRows: 2, maxRows: 2}"
              show-word-limit
            >
          </el-input>
        </el-form-item>
      </el-form>
      <el-form label-position="top">
        <!-- <el-form-item label="自研客服用户名黑名单" prop="roleName" class="item"></el-form-item> -->
        <div class="item2">
          <div style="height: auto;position: relative;top: 25%;">
            自研客服用户名黑名单
          </div>
        </div>
        <!-- <div style="background-color: white;height: 10px;"></div> -->
        <el-form-item label="客服系统用户名黑名单,对多个用户名用逗号隔开,例如:aaa,bbb,ccc" prop="roleName">
          <el-input
              type="textarea"
              placeholder="请输入内容"
              v-model="dataForm.online_username_black_menu"
              :autosize="{ minRows: 8, maxRows: 8}"
              show-word-limit
            >
          </el-input>
        </el-form-item>
      </el-form>
      <el-form label-position="top">
        <div class="item2">
          <div style="height: auto;position: relative;top: 25%;">
            前端用户黑名单
          </div>
        </div>
        <!-- <el-form-item label="前端用户黑名单" prop="roleName" class="item"></el-form-item> -->
        <el-form-item label="前端用户黑名单,对多个用户名用逗号隔开,例如:aaa,bbb,ccc" prop="roleName">
          <el-input
              type="textarea"
              placeholder="请输入内容"
              v-model="dataForm.stop_user_internet"
              :autosize="{ minRows: 8, maxRows: 8}"
              show-word-limit
            >
          </el-input>
        </el-form-item>
      </el-form>
      <el-form label-position="top">
        <div class="item2">
          <div style="height: auto;position: relative;top: 25%;">
            后台系统登录IP白名单
          </div>
        </div>
        <!-- <el-form-item label="后台系统登录IP白名单" prop="roleName" class="item"></el-form-item> -->
        <el-form-item label="为空则不限制,多个IP之间以,(英文逗号)隔开,也可设置IP段,例如:127.0.*.*,192.168.0.1" prop="roleName">
          <el-input
              type="textarea"
              placeholder="请输入内容"
              v-model="dataForm.filter_ip"
              :autosize="{ minRows: 8, maxRows: 8}"
              show-word-limit
            >
          </el-input>
        </el-form-item>
      </el-form>
    </el-form>
    <el-button
      v-if="isAuth('sys:config-root2-sys-config:operate')"
      type="primary" @click="save()">保存</el-button>
    <!-- 确认弹窗-start -->
    <el-dialog title="确认修改" :visible.sync="dialogFormVisible" :append-to-body="true"  @close = 'handClose'>
      <el-form :model="dataForm2" ref="dataForm2" @keyup.enter.native="dataFormSubmit()" label-width="80px">
        <!-- <el-form-item label="登录人资金密码"  :label-width="formLabelWidth" prop="loginSafeword">
          <el-input v-model="dataForm2.loginSafeword" type="password" placeholder="登录人资金密码" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="超级谷歌验证码" :label-width="formLabelWidth" prop="superGoogleAuthCode">
          <el-input v-model="dataForm2.superGoogleAuthCode" placeholder="超级谷歌验证码" autocomplete="off"></el-input>
        </el-form-item> -->
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="dataFormSubmit()">确 定</el-button>
      </div>
    </el-dialog>
    <!-- 确认弹窗-end -->
  </div>
</template>
<script>
import { tableOption } from '@/crud/sys/root2'
import AddOrUpdate from './root2-sys-config-add-or-update'
import { encrypt } from '@/utils/crypto'
export default {
  computed: {
    title () {
      return this.option.detail ? '编 辑' : '保 存'
    }
  },
  data () {
    return {
      form: {
        // loginSafeword   : '',     //登录人资金密码
        // superGoogleAuthCode: '' //超级管理员谷歌验证码
      },
      formLabelWidth: '120px',
      dialogFormVisible:false,
      dataForm:{},
      dataForm2:{},
      dataList: [],
      dataListLoading: false,
      dataListSelections: [],
      addOrUpdateVisible: false,
      option: tableOption,
      page: {
        total: 0, // 总页数
        currentPage: 1, // 当前页数
        pageSize: 10 // 每页显示多少条
      },
      type: 0,
      obj: {}
    }
  },
  components: {
    AddOrUpdate
  },
  mounted(){
    this.getDataList()
    // 为全局事件总线绑定自定义事件
      this.$bus.$on('root2-sys-config', (data)=>{
         this.getDataList()
      })
  },
   beforeDestroy() {
      // 组件被销毁了,不能进行数据传输
      // 解绑事件
      this.$bus.$off('root2-sys-config')
   },
  methods: {
    // 获取数据列表
    getDataList (page, params, done) {
      this.dataListLoading = true
      this.$http({
        url: this.$http.adornUrl('/normal/adminSysparaAction!/toUpdate.action'),
        method: 'get',
        params: this.$http.adornParams(
          Object.assign(
            {
              current: page == null ? this.page.currentPage : page.currentPage,
              size: page == null ? this.page.pageSize : page.pageSize
            },
            params
          )
        )
      }).then(({ data }) => {
        console.log("data = " + JSON.stringify(data));
        if(data.code == 0){
          this.dataForm = data.data || {}
          this.dataList = data.data || []
          this.page.total = data.total
          this.dataForm.dateRange = []
          this.dataForm.dateRange[0] = this.dataForm.withdraw_limit_time_min;
          this.dataForm.dateRange[1] = this.dataForm.withdraw_limit_time_max;
          this.dataListLoading = false
        }else{
          this.$message.error(data.msg)
        }
        if (done) {
          done()
        }
      })
    },
    handClose(){
        this.$data.dataForm2=JSON.parse(JSON.stringify(this.$options.data().dataForm2))
     this.$nextTick(() => {
            this.$refs['dataForm2'].clearValidate() // 清除表单验证
          })
      },
    // 条件查询
    searchChange (params, done) {
      this.getDataList(this.page, params, done)
    },
    // 多选变化
    selectionChange (val) {
      this.dataListSelections = val
    },
    // 新增 / 修改
    addOrUpdateHandle (id) {
      this.addOrUpdateVisible = true
      console.log("addOrUpdateVisible = " + this.addOrUpdateVisible);
      this.$nextTick(() => {
        this.$refs.addOrUpdate.init(id)
      })
    },
    // 删除
    deleteHandle (id) {
      var userIds = id ? [id] : this.dataListSelections.map(item => {
        return item.userId
      })
      this.$confirm(`确定对[id=${userIds.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$http({
          url: this.$http.adornUrl('/sys/user'),
          method: 'delete',
          data: this.$http.adornData(userIds, false)
        }).then(({ data }) => {
          this.$message({
            message: '操作成功',
            type: 'success',
            duration: 1500,
            onClose: () => {
              this.getDataList()
            }
          })
        })
      }).catch(() => { })
    },
    handle () {
      this.option.detail = !this.option.detail
    },
    submit () {
      this.$message.success(JSON.stringify(this.obj))
    },
    save(){
      this.dialogFormVisible = true;
    },
    dataFormSubmit(){
      //
      this.dataListLoading = true
      this.$http({
        url: this.$http.adornUrl('/normal/adminSysparaAction!/updateAdmin.action'),
        method: 'post',
        data: this.$http.adornData(
          Object.assign(
            {
              "withdraw_limit_max":this.dataForm.withdraw_limit_max,
              "sys_version":this.dataForm.sys_version,//App版本
              "recharge_limit_min":this.dataForm.recharge_limit_min,//充值最低数量
              "recharge_limit_max":this.dataForm.recharge_limit_max,//充值最高数量
              "withdraw_by_kyc":this.dataForm.withdraw_by_kyc,//是否开启基础认证后才能提现
              "withdraw_limit_open":this.dataForm.withdraw_limit_open,//提现流水限制是否开启
              "withdraw_limit_turnover_percent":this.dataForm.withdraw_limit_turnover_percent,//提现限制流水百分比
              "withdraw_limit":this.dataForm.withdraw_limit_dapp,//单次USDT提现限额
              "withdraw_limit_dapp":this.dataForm.withdraw_limit_dapp,//单次USDT提现限额
              "withdraw_limit_btc":this.dataForm.withdraw_limit_btc,//单次BTC提现最低金额
              "withdraw_limit_eth":this.dataForm.withdraw_limit_eth,//单次ETH提现最低金额
              "withdraw_limit_usdc":this.dataForm.withdraw_limit_usdc,//单次ETH提现最低金额
              "withdraw_limit_num":this.dataForm.withdraw_limit_num,//每日可提现次数,若为0或空则不做限制
              "withdraw_limit_time_min":this.dataForm.withdraw_limit_time_min||"0",
              "withdraw_limit_time_max":this.dataForm.withdraw_limit_time_max||'0',//每日可提现时间段,若为空则不做限制
              "futures_most_prfit_level":this.dataForm.futures_most_prfit_level,//交割合约
              "order_open":this.dataForm.order_open,//永续合约
              "exchange_order_open":this.dataForm.exchange_order_open,//币币交易-交易状态
              "exchange_apply_order_sell_fee":this.dataForm.exchange_apply_order_sell_fee,//卖出手续费
              "exchange_apply_order_buy_fee":this.dataForm.exchange_apply_order_buy_fee,//买入手续费
              "customer_service_url":this.dataForm.customer_service_url,//在线客服链接地址
              "online_username_black_menu":this.dataForm.online_username_black_menu,//客服系统黑名单
              "stop_user_internet":this.dataForm.stop_user_internet,//前端用户黑名单
              "filter_ip":this.dataForm.filter_ip,//IP白名单
              // "login_safeword": encrypt(this.dataForm2.loginSafeword), //safePassword   资金密码
              // "super_google_auth_code": this.dataForm2.superGoogleAuthCode, //superGoogleAuthCode   超级管理员谷歌验证码      false
            }
          )
        )
      }).then(({ data }) => {
        console.log("data = " + JSON.stringify(data));
        // this.dataForm = data.data
        // this.dataList = data.data
        // this.page.total = data.total
        // this.dataListLoading = false
        if(data&&data.code == 0){
          this.$message({
            message: '操作成功',
            type: 'success',
            duration: 1500,
            onClose: () => {
              this.dialogFormVisible = false;
              this.getDataList()
            }
          })
        }else{
          this.$message({
                message: data.msg,
                type: "error",
              });
        }
      })
      //
    }
  }
}
</script>
<style scoped>
  .item{
    background-color:#4d9ec4;
    height:10px;
    margin-top: 0px;
    top:0px;
    position:relative;
  }
  .item2{
    padding-left: 20px;
    background-color:rgb(202, 205,204);
    height:30px;
    position:relative;
  }
  .item > label{
    color: #020202;
  }
  /* .el-form-item label{
    color: #14da6d;
  } */
  /* .el-form-item__label {
    word-wrap: break-word;
  } */
</style>