新大宝股票管理后台
1
PC-20250623MANY\Administrator
2025-07-19 66eff909403555bdc86d25eeec78c7b4a2f2ee59
1
10 files modified
3 files added
1949 ■■■■ changed files
.env.development 6 ●●●●● patch | view | raw | blame | history
src/api/aishares.js 73 ●●●●● patch | view | raw | blame | history
src/api/home.js 12 ●●●●● patch | view | raw | blame | history
src/config/router.config.js 37 ●●●● patch | view | raw | blame | history
src/utils/request.js 16 ●●●● patch | view | raw | blame | history
src/views/aiShares/aiShareslist.vue 397 ●●●●● patch | view | raw | blame | history
src/views/aiShares/aisharesrecord.vue 827 ●●●●● patch | view | raw | blame | history
src/views/loanmanage/index.vue 505 ●●●●● patch | view | raw | blame | history
src/views/newshares/newshareslist.vue 4 ●●●● patch | view | raw | blame | history
src/views/userlist/components/EditUserinfodialog.vue 20 ●●●●● patch | view | raw | blame | history
src/views/userlist/components/detailuserdialog.vue 7 ●●●●● patch | view | raw | blame | history
src/views/userlist/components/editCapitaluserdialog.vue 9 ●●●●● patch | view | raw | blame | history
src/views/userlist/index.vue 36 ●●●● patch | view | raw | blame | history
.env.development
@@ -5,8 +5,10 @@
# VUE_APP_API_BASE_URL=https://api.marwadi.online/
# VUE_APP_API_BASE_URL=https://www.rksv.store:8091/
# VUE_APP_API_BASE_URL=https://api.dfddgj346.xyz/
VUE_APP_API_BASE_URL=http://stockapi.yanshiz.com/
# VUE_APP_API_BASE_URL=https://api.durocaspitall.com/
# VUE_APP_API_BASE_URL=https://api.fidelityio.com/
# VUE_APP_API_BASE_URL= https://www.prudentcapitals.net/
# VUE_APP_API_BASE_URL=https://api.guosen.org/
# VUE_APP_API_BASE_URL=https://api.guosen.org/
# VUE_APP_API_BASE_URL=http://stockapi.yanshiz.com/
VUE_APP_API_BASE_URL=http://192.168.10.20:8091//
src/api/aishares.js
New file
@@ -0,0 +1,73 @@
import request from '@/utils/request'
import qs from 'qs'
const userApi = {
  getStockAiList: '/admin/stockAi/getStockAiList.do', // ai产品列表
  editStockAi: '/admin/stockAi/editStockAi.do', // ai产品新增&编辑
  getStockAiOrderList: '/admin/stockAi/getStockAiOrderList.do', // ai产品记录
  orderOperation: '/admin/stockAi/orderOperation.do', // ai产品记录操作
  openPosition: '/admin/stockAi/openPosition.do', // ai产品记录操作
  getStocksByKeyWords: '/admin/stockAi/getStocksByKeyWords.do', // 股票列表
  getPositionList: '/admin/stockAi/getPositionList.do', // 建仓记录列表
}
/**
 * login func
 * parameter: {
 *     username: '',
 *     password: '',
 *     remember_me: true,
 *     captcha: '12345'
 * }
 * @param parameter
 * @returns {*}
 */
export function getStockAiList(parameter) {
  return request({
    url: userApi.getStockAiList,
    method: 'post',
    data: qs.stringify(parameter),
  })
}
export function editStockAi(parameter) {
  return request({
    url: userApi.editStockAi,
    method: 'post',
    data: qs.stringify(parameter),
  })
}
export function getStockAiOrderList(parameter) {
  return request({
    url: userApi.getStockAiOrderList,
    method: 'post',
    data: qs.stringify(parameter),
  })
}
export function orderOperation(parameter) {
  return request({
    url: userApi.orderOperation + parameter,
    method: 'get',
    // data: qs.stringify(parameter),
  })
}
export function openPosition(parameter) {
  return request({
    url: userApi.openPosition,
    method: 'post',
    data: qs.stringify(parameter),
  })
}
export function getStocksByKeyWords(parameter) {
  return request({
    url: userApi.getStocksByKeyWords,
    method: 'post',
    data: qs.stringify(parameter),
  })
}
export function getPositionList(parameter) {
  return request({
    url: userApi.getPositionList,
    method: 'post',
    data: qs.stringify(parameter),
  })
}
src/api/home.js
@@ -36,6 +36,7 @@
  stockgetMarket: '/api/stock/getMarket.do', // 获取大盘指数行情
  adminsetSiteStyle: '/api/admin/setSiteStyle.do', // 设置网站风格
  admingetSiteStyle: '/api/admin/getSiteStyle.do', // 获取网站风格
  dksp: '/admin/dksp.do', // 通过||拒绝贷款
}
/**
@@ -79,10 +80,12 @@
  })
}
export function onedklist(parameter) {
  console.log("dadadaada",parameter);
  return request({
    url: userApi.onedklist,
    method: 'post',
    param: parameter,
    data: qs.stringify(parameter),
  })
}
export function countdata(parameter) {
@@ -316,3 +319,10 @@
    data: qs.stringify(parameter),
  })
}
export function dksp(parameter) {
  return request({
    url: userApi.dksp,
    method: 'post',
    data: qs.stringify(parameter),
  })
}
src/config/router.config.js
@@ -202,13 +202,34 @@
            path: '/newshares/dazonglist',
            name: 'dazonglist',
            component: () => import('@/views/newshares/dazonglist'),
            meta: { title: '折扣交易列表', keepAlive: true, permission: ['dazonglist'] },
            meta: { title: '大宗产品', keepAlive: true, permission: ['dazonglist'] },
          },
          {
            path: '/newshares/dazongshlist',
            name: 'dazongshlist',
            component: () => import('@/views/newshares/dazongshlist'),
            meta: { title: '折扣交易审核列表', keepAlive: true, permission: ['dazongshlist'] },
            meta: { title: '大宗交易列表', keepAlive: true, permission: ['dazongshlist'] },
          },
        ],
      },
      // ai量化交易
      {
        path: '/aiShares',
        redirect: '/aiShares/aiShareslist',
        component: RouteView,
        meta: { title: 'ai量化交易', icon: 'sliders', permission: ['aiShareslist'] },
        children: [
          {
            path: '/aiShares/aiShareslist',
            name: 'aiShareslist',
            component: () => import('@/views/aiShares/aiShareslist'),
            meta: { title: 'ai产品列表', keepAlive: true, permission: ['aiShareslist'] },
          },
          {
            path: '/aishares/aisharesrecord',
            name: 'aisharesrecord',
            component: () => import('@/views/aiShares/aisharesrecord'),
            meta: { title: 'ai产品记录', keepAlive: true, permission: ['aisharesrecord'] },
          },
        ],
      },
@@ -622,12 +643,12 @@
            component: () => import('@/views/loanmanage/index'),
            meta: { title: '贷款列表', keepAlive: true, permission: ['loanmanage'] }
          },
          {
            path: '/loanmanage/institution',
            name: 'institution',
            component: () => import('@/views/loanmanage/institution'),
            meta: { title: '贷款机构', keepAlive: true, permission: ['institution'] }
          }
          // {
          //   path: '/loanmanage/institution',
          //   name: 'institution',
          //   component: () => import('@/views/loanmanage/institution'),
          //   meta: { title: '贷款机构', keepAlive: true, permission: ['institution'] }
          // }
          // {
          //   path: '/loanmanage/institution',
          //   name: 'Institution',
src/utils/request.js
@@ -11,9 +11,9 @@
  baseURL: process.env.VUE_APP_API_BASE_URL,
  // content-type: application/x-www-form-urlencoded
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  timeout: 6000 // 请求超时时间
  timeout: 6000, // 请求超时时间
})
// 异常拦截处理器
@@ -25,13 +25,13 @@
    if (error.response.status === 403) {
      notification.error({
        message: 'Forbidden',
        description: data.msg
        description: data.msg,
      })
    }
    if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
      notification.error({
        message: 'Unauthorized',
        description: 'Authorization verification failed'
        description: 'Authorization verification failed',
      })
      if (token) {
        store.dispatch('Logout').then(() => {
@@ -64,7 +64,7 @@
  if (msg == '請先登錄,無權限訪問admin') {
    notification.error({
      message: '重新登陆',
      description: '未登录或登录过期,请重新登录'
      description: '未登录或登录过期,请重新登录',
    })
    store.dispatch('Logout').then(() => {
      setTimeout(() => {
@@ -75,7 +75,7 @@
  } else if (!res.data) {
    notification.error({
      message: '网络错误',
      description: '网络错误,请稍后刷新页面重试!'
      description: '网络错误,请稍后刷新页面重试!',
    })
  }
  return res.data
@@ -87,9 +87,9 @@
const installer = {
  vm: {},
  install (Vue) {
  install(Vue) {
    Vue.use(VueAxios, request)
  }
  },
}
export default request
src/views/aiShares/aiShareslist.vue
New file
@@ -0,0 +1,397 @@
<template>
  <page-header-wrapper>
    <a-card :bordered="false">
      <div class="table-page-search-wrapper">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item label="市场类型">
                <a-select v-model="queryParam.stockType" placeholder="请选择类型">
                  <a-select-option value="">全部</a-select-option>
                  <a-select-option value="US">美股</a-select-option>
                  <a-select-option value="MEX">墨西哥股</a-select-option>
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item label="状态">
                <a-select v-model="queryParam.status" placeholder="请选择状态">
                  <a-select-option value="">全部</a-select-option>
                  <a-select-option value="online">上线</a-select-option>
                  <a-select-option value="out">下架</a-select-option>
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item label="名称">
                <a-input v-model="queryParam.name" style="width: 100%" placeholder="请输入名称" />
              </a-form-item>
            </a-col>
          </a-row>
          <a-row :gutter="48">
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item>
                <span class="table-page-search-submitButtons">
                  <a-button @click="getqueryParam" icon="redo"> 重置</a-button>
                  <a-button
                    type="primary"
                    icon="search"
                    style="margin-left: 8px"
                    @click=";(queryParam.pageNum = 1), (pagination.current = 1), getlist()"
                    >查询
                  </a-button>
                  <a-button
                    type="primary"
                    icon="plus"
                    style="margin-left: 8px"
                    @click=";(addUserdialog = true), (currentdetail = '')"
                  >
                    添加
                  </a-button>
                </span>
              </a-form-item>
            </a-col>
          </a-row>
        </a-form>
      </div>
    </a-card>
    <a-card :bordered="false">
      <a-table
        bordered
        :loading="loading"
        :pagination="pagination"
        :columns="columns"
        :data-source="datalist"
        rowKey="newlistId"
      >
        <template slot="stockType" slot-scope="text, record">
          <div>
            <span v-if="record.stockType == 'US'">美股</span>
            <span v-else-if="record.stockType == 'MEX'">墨西哥股</span>
          </div>
        </template>
        <template slot="minPrice" slot-scope="text, record">
          <div>
            <span>{{ `${record.stockTypeName} ${record.minPrice}` }}</span>
          </div>
        </template>
        <template slot="status" slot-scope="text, record">
          <div>
            <a-tag :color="record.status == 'online' ? 'green' : record.status == 'out' ? 'red' : ''">
              {{ record.status == 'online' ? '上线' : '下架' }}
            </a-tag>
          </div>
        </template>
        <template slot="action" slot-scope="text, record">
          <a slot="action" href="javascript:;" @click="geteditStock(record)">{{ '编辑' }}</a>
        </template>
      </a-table>
    </a-card>
    <a-modal
      :title="currentdetail ? '修改' : '添加'"
      :width="700"
      :visible="addUserdialog"
      :confirmLoading="addUserDialogloading"
      @ok="OkaddUserdialog"
      @cancel="CanceladdUserdialog"
    >
      <a-form :form="addUserform" ref="addUserform">
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="股票市场" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-select
                placeholder="请选择"
                v-decorator="['stockType', { rules: [{ required: true, message: '请选择' }] }]"
              >
                <a-select-option value="US">美股</a-select-option>
                <a-select-option value="MEX">墨西哥股</a-select-option>
              </a-select>
            </a-form-item>
          </a-col>
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入名称"
                v-decorator="['stockName', { rules: [{ required: true, message: '请输入新股代码' }] }]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="最少买入金额(对应市场货币)" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入最少买入金额"
                v-decorator="['minPrice', { rules: [{ required: true, message: '请输入最少买入金额' }] }]"
              />
            </a-form-item>
          </a-col>
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="交易成功率" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入交易成功率"
                v-decorator="['successRate', { rules: [{ required: true, message: '请输入交易成功率' }] }]"
                addon-after="%"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="预期收益率" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入预期收益率"
                v-decorator="['expectedEarning', { rules: [{ required: true, message: '请输入预期收益率' }] }]"
                addon-after="%"
              />
            </a-form-item>
          </a-col>
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="周期(天)" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入"
                v-decorator="['cycle', { rules: [{ required: true, message: '请输入' }] }]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-select
                placeholder="请选择状态"
                v-decorator="['status', { rules: [{ required: true, message: '请选择' }] }]"
              >
                <a-select-option value="online">上线</a-select-option>
                <a-select-option value="out">下架</a-select-option>
              </a-select>
            </a-form-item>
          </a-col>
        </a-row>
      </a-form>
    </a-modal>
  </page-header-wrapper>
</template>
<script>
import { getStockAiList, editStockAi, subscribeadd, subscribeupdate, subscribedel } from '@/api/aishares'
import moment from 'moment'
import pick from 'lodash.pick'
export default {
  name: 'Shares',
  data() {
    return {
      columns: [
        {
          title: '名称',
          dataIndex: 'stockName',
          align: 'center',
        },
        {
          title: '所属市场',
          dataIndex: 'stockType',
          align: 'center',
          scopedSlots: { customRender: 'stockType' },
        },
        {
          title: '最低买入金额',
          dataIndex: 'minPrice',
          align: 'center',
          scopedSlots: { customRender: 'minPrice' },
        },
        {
          title: '交易成功率(%)',
          dataIndex: 'successRate',
          align: 'center',
        },
        {
          title: '预期收益率(%)',
          dataIndex: 'expectedEarning',
          align: 'center',
        },
        {
          title: '周期(天)',
          dataIndex: 'cycle',
          align: 'center',
        },
        {
          title: '状态',
          dataIndex: 'status',
          align: 'center',
          scopedSlots: { customRender: 'status' },
        },
        {
          title: '操作',
          key: 'action',
          align: 'center',
          scopedSlots: { customRender: 'action' },
        },
      ],
      disabledDate: true,
      // 表头
      pagination: {
        total: 0,
        current: 1,
        pageSize: 10, // 每页中显示10条数据
        showSizeChanger: true,
        pageSizeOptions: ['10', '20', '50', '100'], // 每页中显示的数据
        onShowSizeChange: (current, pageSize) => this.onSizeChange(current, pageSize), // 改变每页数量时更新显示
        onChange: (page, pageSize) => this.onPageChange(page, pageSize), // 点击页码事件
        showTotal: (total) => `共有 ${total} 条数据`, // 分页中显示总的数据
      },
      loading: false,
      queryParam: {
        pageNum: 1,
        pageSize: 10,
        stockType: '',
        status: '',
        name: '',
      },
      datalist: [],
      labelCol: {
        xs: { span: 8 },
        sm: { span: 8 },
        md: { span: 8 },
      },
      wrapperCol: {
        xs: { span: 14 },
        sm: { span: 14 },
        md: { span: 14 },
      },
      addUserform: this.$form.createForm(this),
      addUserdialog: false,
      addUserDialogloading: false,
      fields: ['id', 'stockType', 'stockName', 'minPrice', 'successRate', 'expectedEarning', 'cycle', 'status'],
      currentdetail: '',
      subscribeTime: '',
      subscriptionTime: '',
      listDate: '',
    }
  },
  created() {
    this.getlist()
  },
  methods: {
    getdeleteStock(val) {
      var that = this
      this.$confirm({
        title: '提示',
        content: '确认删除该新股吗?此操作不可恢复!',
        onOk() {
          var data = {
            id: val.newlistId,
          }
          subscribedel(data).then((res) => {
            if (res.status == 0) {
              that.$message.success(res.msg)
              that.getinit()
            } else {
              that.$message.error(res.msg)
            }
          })
        },
        onCancel() {
          console.log('Cancel')
        },
      })
    },
    getsubscribeTime(date, dateString) {
      this.subscribeTime = dateString
    },
    getlistDate(date, dateString) {
      this.listDate = dateString
    },
    getsubscriptionTime(date, dateString) {
      this.subscriptionTime = dateString
    },
    geteditStock(val) {
      this.currentdetail = val
      this.addUserdialog = true
      this.fields.forEach((v) => this.addUserform.getFieldDecorator(v))
      this.addUserform.setFieldsValue(pick(val, this.fields))
    },
    CanceladdUserdialog() {
      this.addUserdialog = false
      const form = this.$refs.addUserform.form
      form.resetFields()
    },
    OkaddUserdialog() {
      const form = this.$refs.addUserform.form
      form.validateFields((errors, values) => {
        if (!errors) {
          if (this.currentdetail != '') {
            this.addUserDialogloading = true
            values.id = this.currentdetail.id
            editStockAi(values).then((res) => {
              if (res.status == 0) {
                this.addUserdialog = false
                this.$message.success(res.msg)
                form.resetFields()
                this.getlist()
              } else {
                this.$message.error(res.msg)
              }
              this.addUserDialogloading = false
            })
          } else {
            this.addUserDialogloading = true
            editStockAi(values).then((res) => {
              if (res.status == 0) {
                this.addUserdialog = false
                this.$message.success(res.msg)
                form.resetFields()
                this.getinit()
              } else {
                this.$message.error(res.msg)
              }
              this.addUserDialogloading = false
            })
          }
        }
      })
    },
    getqueryParam() {
      this.queryParam = {
        pageNum: 1,
        pageSize: 10,
        stockType: '',
        status: '',
        name: '',
      }
    },
    getinit() {
      this.getqueryParam()
      this.pagination.current = 1
      this.getlist()
    },
    getlist() {
      this.loading = true
      getStockAiList(this.queryParam).then((res) => {
        this.datalist = res.data.list
        this.pagination.total = res.data.total
        this.loading = false
      })
    },
    onPageChange(page, pageSize) {
      this.queryParam.pageNum = page
      this.pagination.current = page
      this.getlist()
    },
    onSizeChange(current, pageSize) {
      this.queryParam.pageNum = current
      this.pagination.current = page
      this.queryParam.pageSize = pageSize
      this.getlist()
    },
  },
}
</script>
src/views/aiShares/aisharesrecord.vue
New file
@@ -0,0 +1,827 @@
<template>
  <page-header-wrapper>
    <a-card :bordered="false">
      <div class="table-page-search-wrapper">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item label="状态">
                <a-select v-model="queryParam.status" placeholder="请选择">
                  <a-select-option value="">全部</a-select-option>
                  <a-select-option value="wait">等待审核</a-select-option>
                  <a-select-option value="passed">已通过</a-select-option>
                  <a-select-option value="notPass">不通过</a-select-option>
                  <a-select-option value="finished">已完成</a-select-option>
                </a-select>
              </a-form-item>
            </a-col>
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item label="会员ID">
                <a-input v-model="queryParam.userId" style="width: 100%" placeholder="请输入" />
              </a-form-item>
            </a-col>
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item label="账号/手机">
                <a-input v-model="queryParam.phone" style="width: 100%" placeholder="请输入" />
              </a-form-item>
            </a-col>
          </a-row>
          <a-row :gutter="48">
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item>
                <span class="table-page-search-submitButtons">
                  <a-button @click="getqueryParam" icon="redo"> 重置</a-button>
                  <a-button
                    type="primary"
                    icon="search"
                    style="margin-left: 8px"
                    @click=";(queryParam.pageNum = 1), (pagination.current = 1), getlist()"
                    >查询
                  </a-button>
                  <!-- <a-button
                    type="primary"
                    icon="plus"
                    style="margin-left: 8px"
                    @click=";(addUserdialog = true), (currentdetail = '')"
                  >
                    添加记录</a-button
                  > -->
                </span>
              </a-form-item>
            </a-col>
          </a-row>
        </a-form>
      </div>
    </a-card>
    <a-card :bordered="false">
      <a-table
        bordered
        :loading="loading"
        :pagination="pagination"
        :columns="columns"
        :data-source="datalist"
        rowKey="id"
        :scroll="{ x: 'calc(700px + 50%)' }"
      >
        <span slot="stockTypeName" slot-scope="text, record">
          <template>
            <div>
              <span v-show="record.stockType == 'US'">美股</span>
              <span v-show="record.stockType == 'MEX'">墨西哥股</span>
            </div>
          </template>
        </span>
        <span slot="buyAmount" slot-scope="text, record">
          <template>
            <div>
              <span>{{ `${record.stockTypeName} ${record.buyAmount}` }}</span>
            </div>
          </template>
        </span>
        <span slot="status" slot-scope="text, record">
          <template>
            <div>
              <span v-show="record.status == 'wait'">等待审核</span>
              <span v-show="record.status == 'passed'">已通过</span>
              <span v-show="record.status == 'notPass'">不通过</span>
              <span v-show="record.status == 'finished'">已完成</span>
            </div>
          </template>
        </span>
        <template slot="action" slot-scope="text, record">
          <!-- <a slot="action" href="javascript:;" @click="geteditStock(record)">{{ '修改记录' }}</a>
          <a-divider type="vertical" />
          <a slot="action" href="javascript:;" @click="getdeleteStock(record)">{{ '删除记录' }}</a>
          <a-divider type="vertical" />
          <a slot="action" href="javascript:;" @click="getzhuan(record)" v-if="record.status == 4">{{ '转持仓' }}</a> -->
          <template v-if="record.status == 'wait'">
            <a-popconfirm
              title="确认通过该申请?"
              ok-text="确定"
              cancel-text="取消"
              @confirm="applicationProcedure('passed', record)"
            >
              <a href="javascript:;">{{ '通过' }}</a>
            </a-popconfirm>
            <a-divider type="vertical" />
            <a-popconfirm
              title="确认拒绝该申请?"
              ok-text="确定"
              cancel-text="取消"
              @confirm="applicationProcedure('notPass', record)"
            >
              <a href="javascript:;">{{ '拒绝' }}</a>
            </a-popconfirm>
          </template>
          <template v-if="record.status == 'passed'">
            <a href="javascript:;" @click="openPosition(record)">{{ '建仓' }}</a>
            <a-divider type="vertical" />
            <a-popconfirm
              title="确认结算该订单?"
              ok-text="确定"
              cancel-text="取消"
              @confirm="applicationProcedure('finished', record)"
            >
              <a href="javascript:;">{{ '结算' }}</a>
            </a-popconfirm>
          </template>
          <a-divider type="vertical" />
          <a slot="action" href="javascript:;" @click="pRecordOpen(record)">建仓记录</a>
        </template>
      </a-table>
    </a-card>
    <a-modal
      :title="currentdetail ? '修改记录' : '添加记录'"
      :width="700"
      :visible="addUserdialog"
      :confirmLoading="addUserDialogloading"
      @ok="OkaddUserdialog"
      @cancel="CanceladdUserdialog"
    >
      <a-form :form="addUserform" ref="addUserform">
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="用户手机号" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入用户手机号"
                v-decorator="['phone', { rules: [{ required: true, message: '请输入用户手机号' }] }]"
              />
            </a-form-item>
          </a-col>
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="新股代码" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入新股代码"
                v-decorator="['newCode', { rules: [{ required: true, message: '请输入新股代码' }] }]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="买入数量" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入买入数量"
                v-decorator="['applyNums', { rules: [{ required: true, message: '请输入买入数量' }] }]"
              />
            </a-form-item>
          </a-col>
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="中签数量" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input placeholder="请输入中签数量" v-decorator="['applyNumber', {}]" />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-select
                placeholder="请选择状态"
                v-decorator="['status', { rules: [{ required: true, message: '请选择状态' }] }]"
              >
                <a-select-option :value="1">已认购</a-select-option>
                <a-select-option :value="2">未中签</a-select-option>
                <a-select-option :value="3">已中签</a-select-option>
                <a-select-option :value="4">已缴纳</a-select-option>
                <a-select-option :value="5">转持仓</a-select-option>
              </a-select>
            </a-form-item>
          </a-col>
        </a-row>
      </a-form>
    </a-modal>
    <a-modal
      title="内部建仓(请严格按照AI交易产品市场 所属股票建仓 否则会造成实际收益不符)"
      :width="800"
      :visible="positiondialog"
      :confirmLoading="positiondialogloading"
      @ok="ppenPosition"
      @cancel="CancelPositiondialog"
    >
      <a-form :form="positionform" ref="positionform">
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="建仓股票" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-select
                show-search
                :value="stockValue"
                placeholder="请输入"
                style="width: 200px"
                :default-active-first-option="false"
                :show-arrow="false"
                :filter-option="false"
                :not-found-content="null"
                @search="handleSearch"
                @change="handleChange"
              >
                <a-select-option v-for="d in stockList" :key="d.id" :obj="d">
                  {{ d.stockName }}
                </a-select-option>
                <div slot="dropdownRender" slot-scope="menu" @mousedown="(e) => e.preventDefault()">
                  <v-nodes :vnodes="menu" />
                  <a-divider style="margin: 4px 0" />
                  <a-pagination
                    simple
                    :default-current="stockOpt.pageNum"
                    :total="stockTotal"
                    @change="(page) => (stockOpt.pageNum = page)"
                  />
                </div>
              </a-select>
            </a-form-item>
          </a-col>
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="建仓股票数量" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入"
                v-decorator="['stockNum', { rules: [{ required: true, message: '请输入' }] }]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="建仓股票单价" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入"
                v-decorator="['stockPrice', { rules: [{ required: true, message: '请输入' }] }]"
              />
            </a-form-item>
          </a-col>
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="建仓时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-date-picker
                show-time
                style="width: 100%"
                @change="getCreatDate"
                v-decorator="['creatDate', { rules: [{ required: true, message: '请填写' }] }]"
                format="YYYY-MM-DD HH:mm:ss"
              >
              </a-date-picker>
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="48">
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="平仓单价" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input
                placeholder="请输入"
                v-decorator="['coverPrice', { rules: [{ required: true, message: '请输入' }] }]"
              />
            </a-form-item>
          </a-col>
          <a-col :md="12" :lg="12" :sm="12">
            <a-form-item label="平仓时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-date-picker
                show-time
                style="width: 100%"
                @change="getCoverDate"
                v-decorator="['coverDate', { rules: [{ required: true, message: '请填写' }] }]"
                format="YYYY-MM-DD HH:mm:ss"
              >
              </a-date-picker>
            </a-form-item>
          </a-col>
        </a-row>
      </a-form>
    </a-modal>
    <a-modal
      title="建仓记录"
      :width="800"
      :visible="pRecordShow"
      @ok="pRecordShow = false"
      @cancel="pRecordShow = false"
    >
      <a-table
        bordered
        :loading="rloading"
        :pagination="rpagination"
        :columns="rcolumns"
        :data-source="rdatalist"
        rowKey="id"
        :scroll="{ x: 'calc(700px + 50%)' }"
      >
        <span slot="status" slot-scope="text, record">
          <template>
            <div>
              <span v-show="record.status == 0">持仓</span>
              <span v-show="record.status == 1">已平仓</span>
            </div>
          </template>
        </span>
      </a-table>
    </a-modal>
  </page-header-wrapper>
</template>
<script>
let timeout
import {
  getStockAiOrderList,
  orderOperation,
  openPosition,
  saveStockSubscribe,
  delStockSubscribe,
  addUserPosition,
  getStocksByKeyWords,
  getPositionList,
} from '@/api/aishares'
import pick from 'lodash.pick'
import moment from 'moment'
import notification from 'ant-design-vue/es/notification'
import { pagination } from 'ant-design-vue'
import Vue from 'vue'
Vue.use(pagination)
export default {
  name: 'Shares',
  components: {
    VNodes: {
      functional: true,
      render: (h, ctx) => ctx.props.vnodes,
    },
  },
  data() {
    return {
      columns: [
        {
          title: '会员ID',
          dataIndex: 'userId',
          align: 'center',
        },
        {
          title: '账号',
          dataIndex: 'phone',
          align: 'center',
        },
        {
          title: '会员真实姓名',
          dataIndex: 'realName',
          align: 'center',
        },
        {
          title: 'AI交易名称',
          dataIndex: 'stockName',
          align: 'center',
        },
        {
          title: '所属市场',
          dataIndex: 'stockTypeName',
          align: 'center',
          scopedSlots: { customRender: 'stockTypeName' },
        },
        {
          title: '交易成功率(%)',
          dataIndex: 'successRate',
          align: 'center',
        },
        {
          title: '预期收益(%)',
          dataIndex: 'expectedEarning',
          align: 'center',
        },
        {
          title: '交易周期(天)',
          dataIndex: 'cycle',
          align: 'center',
        },
        {
          title: '买入金额',
          dataIndex: 'buyAmount',
          align: 'center',
          scopedSlots: { customRender: 'buyAmount' },
        },
        {
          title: '剩余金额',
          dataIndex: 'remainAmount',
          align: 'center',
          customRender: (text, row, index) => {
            return 'MX$ ' + text
          },
        },
        {
          title: '买入时间',
          dataIndex: 'buyDate',
          align: 'center',
          customRender: (text, row, index) => {
            return text ? moment(text).format('YYYY-MM-DD HH:mm:ss') : ''
          },
        },
        {
          title: '实际收益',
          dataIndex: 'realEarning',
          align: 'center',
          customRender: (text, row, index) => {
            return 'MX$ ' + text
          },
        },
        {
          title: '状态',
          dataIndex: 'status',
          align: 'center',
          scopedSlots: { customRender: 'status' },
        },
        {
          title: '操作',
          key: 'action',
          align: 'center',
          fixed: 'right',
          scopedSlots: { customRender: 'action' },
        },
      ],
      // 表头
      pagination: {
        total: 0,
        current: 1,
        pageSize: 10, // 每页中显示10条数据
        showSizeChanger: true,
        pageSizeOptions: ['10', '20', '50', '100'], // 每页中显示的数据
        onShowSizeChange: (current, pageSize) => this.onSizeChange(current, pageSize), // 改变每页数量时更新显示
        onChange: (page, pageSize) => this.onPageChange(page, pageSize), // 点击页码事件
        showTotal: (total) => `共有 ${total} 条数据`, // 分页中显示总的数据
      },
      loading: false,
      queryParam: {
        pageNum: 1,
        pageSize: 10,
        status: '',
        userId: '',
        phone: '',
      },
      datalist: [],
      labelCol: {
        xs: { span: 8 },
        sm: { span: 8 },
        md: { span: 8 },
      },
      wrapperCol: {
        xs: { span: 14 },
        sm: { span: 14 },
        md: { span: 14 },
      },
      addUserform: this.$form.createForm(this),
      positionform: this.$form.createForm(this),
      addUserdialog: false,
      addUserDialogloading: false,
      positiondialog: false,
      positiondialogloading: false,
      fields: ['phone', 'newCode', 'applyNums', 'applyNumber', 'status'],
      currentdetail: '',
      positionDetail: {},
      fields2: ['id'],
      creatDate: '', // 建仓时间
      coverDate: '', // 平仓时间
      stockValue: null, // 建仓股票搜索值
      stockList: [], // 建仓股票列表
      stockOpt: {
        pageNum: 1,
        pageSize: 10,
        keyWords: '',
      },
      stockTotal: 1,
      pRecordShow: false,
      rloading: false,
      // 表头
      rpagination: {
        total: 0,
        current: 1,
        pageSize: 10, // 每页中显示10条数据
        showSizeChanger: true,
        pageSizeOptions: ['10', '20', '50', '100'], // 每页中显示的数据
        onShowSizeChange: (current, pageSize) => this.onSizeChange(current, pageSize), // 改变每页数量时更新显示
        onChange: (page, pageSize) => this.onPageChange(page, pageSize), // 点击页码事件
        showTotal: (total) => `共有 ${total} 条数据`, // 分页中显示总的数据
      },
      rcolumns: [
        {
          title: '产品订单id',
          dataIndex: 'stockAiOrderId',
          align: 'center',
        },
        {
          title: '股票名称',
          dataIndex: 'stockName',
          align: 'center',
        },
        {
          title: '建仓股票id',
          dataIndex: 'stockId',
          align: 'center',
        },
        {
          title: '建仓股票数量',
          dataIndex: 'stockNum',
          align: 'center',
        },
        {
          title: '建仓股票单价',
          dataIndex: 'stockPrice',
          align: 'center',
        },
        {
          title: '建仓时间',
          dataIndex: 'creatDate',
          align: 'center',
          customRender: (text, row, index) => {
            return text ? moment(text).format('YYYY-MM-DD HH:mm:ss') : ''
          },
        },
        {
          title: '平仓单价',
          dataIndex: 'coverPrice',
          align: 'center',
        },
        {
          title: '平仓时间',
          dataIndex: 'coverDate',
          align: 'center',
          customRender: (text, row, index) => {
            return text ? moment(text).format('YYYY-MM-DD HH:mm:ss') : ''
          },
        },
        {
          title: '收益',
          dataIndex: 'earnings',
          align: 'center',
        },
        {
          title: '建仓状态',
          dataIndex: 'status',
          align: 'center',
          scopedSlots: { customRender: 'status' },
        },
        {
          title: '类型',
          dataIndex: 'stockType',
          align: 'center',
        },
      ],
      rdatalist: [],
    }
  },
  created() {
    this.getlist()
  },
  watch: {
    'stockOpt.pageNum': {
      handler(val) {
        this.getStockList()
      },
    },
  },
  methods: {
    getzhuan(val) {
      var that = this
      this.$confirm({
        title: '提示',
        content: '确认转入持仓吗?此操作不可恢复!',
        onOk() {
          var data = {
            id: val.id,
          }
          addUserPosition(data).then((res) => {
            if (res.status == 0) {
              that.$message.success(res.msg)
              that.getlist()
            } else {
              that.$message.error(res.msg)
            }
          })
        },
        onCancel() {
          console.log('Cancel')
        },
      })
    },
    getdeleteStock(val) {
      var that = this
      this.$confirm({
        title: '提示',
        content: '确认删除该新股吗?此操作不可恢复!',
        onOk() {
          var data = {
            id: val.id,
          }
          delStockSubscribe(data).then((res) => {
            if (res.status == 0) {
              that.$message.success(res.msg)
              that.getinit()
            } else {
              that.$message.error(res.msg)
            }
          })
        },
        onCancel() {
          console.log('Cancel')
        },
      })
    },
    geteditStock(val) {
      this.currentdetail = val
      this.addUserdialog = true
      this.fields.forEach((v) => this.addUserform.getFieldDecorator(v))
      this.addUserform.setFieldsValue(pick(val, this.fields))
    },
    CanceladdUserdialog() {
      this.addUserdialog = false
      const form = this.$refs.addUserform.form
      form.resetFields()
    },
    OkaddUserdialog() {
      const form = this.$refs.addUserform.form
      form.validateFields((errors, values) => {
        if (!errors) {
          if (this.currentdetail != '') {
            values.id = this.currentdetail.id
          }
          this.addUserDialogloading = true
          saveStockSubscribe(values).then((res) => {
            if (res.status == 0) {
              this.addUserdialog = false
              this.$message.success(res.msg)
              form.resetFields()
              this.getlist()
            } else {
              this.$message.error(res.msg)
            }
            this.addUserDialogloading = false
          })
        }
      })
    },
    getCreatDate(date, dateString) {
      this.creatDate = dateString
    },
    getCoverDate(date, dateString) {
      this.coverDate = dateString
    },
    // 打开建仓记录
    pRecordOpen(val) {
      this.positionDetail = val
      this.rpagination.current = 1
      this.pRecordShow = true
      this.getpRecord()
    },
    // 获取建仓记录
    async getpRecord() {
      this.rloading = true
      let opt = {
        pageNum: this.rpagination.current,
        pageSize: this.rpagination.pageSize,
        id: this.positionDetail.id,
      }
      let res = await getPositionList(opt)
      this.rdatalist = res.data.list
      this.rpagination.total = res.data.total
      this.rloading = false
    },
    // 打开建仓
    openPosition(val) {
      this.positiondialog = true
      this.positionDetail = val
      this.fields2.forEach((v) => this.positionform.getFieldDecorator(v))
      this.positionform.setFieldsValue(pick(val, this.fields2))
    },
    // 建仓
    ppenPosition() {
      const form = this.$refs.positionform.form
      form.validateFields((errors, values) => {
        if (!errors) {
          values.creatDate = this.creatDate
          values.coverDate = this.coverDate
          values.stockAiOrderId = this.positionDetail.id
          values.stockId = this.stockValue
          this.positiondialogloading = true
          openPosition(values).then((res) => {
            if (res.status == 0) {
              this.positiondialog = false
              this.$message.success(res.msg)
              form.resetFields()
              this.getlist()
            } else {
              this.$message.error(res.msg)
            }
            this.positiondialogloading = false
          })
        }
      })
      form.validateFields((errors, values) => {
        if (!errors) {
          if (this.currentdetail != '') {
            values.id = this.currentdetail.id
          }
          this.addUserDialogloading = true
          saveStockSubscribe(values).then((res) => {
            if (res.status == 0) {
              this.addUserdialog = false
              this.$message.success(res.msg)
              form.resetFields()
              this.getlist()
            } else {
              this.$message.error(res.msg)
            }
            this.addUserDialogloading = false
          })
        }
      })
    },
    CancelPositiondialog() {
      this.positiondialog = false
      const form = this.$refs.positionform.form
      form.resetFields()
    },
    getqueryParam() {
      this.queryParam = {
        pageNum: 1,
        pageSize: 10,
        status: '',
        userId: '',
        phone: '',
      }
    },
    getinit() {
      this.getqueryParam()
      this.pagination.current = 1
      this.getlist()
    },
    getlist() {
      this.loading = true
      getStockAiOrderList(this.queryParam).then((res) => {
        this.datalist = res.data.list
        this.pagination.total = res.data.total
        this.loading = false
      })
    },
    onPageChange(page, pageSize) {
      this.queryParam.pageNum = page
      this.pagination.current = page
      this.getlist()
    },
    onSizeChange(current, pageSize) {
      this.queryParam.pageNum = current
      this.pagination.current = page
      this.queryParam.pageSize = pageSize
      this.getlist()
    },
    // 操作
    applicationProcedure(status, n) {
      this.loading = true
      orderOperation(`?id=${n.id}&status=${status}`)
        .then((res) => {
          if (res.status != 0) {
            notification.error({
              message: res.data.msg,
            })
            return
          }
          this.getlist()
          this.loading = false
        })
        .catch((err) => {
          this.loading = false
        })
    },
    // 搜索股票列表
    handleSearch(value) {
      if (timeout) {
        clearTimeout(timeout)
        timeout = null
      }
      this.stockOpt.keyWords = value
      timeout = setTimeout(() => {
        this.getStockList()
      }, 500)
    },
    getStockList() {
      getStocksByKeyWords(this.stockOpt).then((res) => {
        console.log('res', res)
        this.stockList = res.data.list
        this.stockTotal = res.data.total
      })
    },
    // 选择股票
    handleChange(value, opt) {
      let item = opt.data.attrs.obj
      const form = this.$refs.positionform.form
      this.stockValue = value
      form.setFieldsValue({
        stockPrice: item.nowPrice, // 股票价格
      })
    },
  },
}
</script>
src/views/loanmanage/index.vue
@@ -7,277 +7,366 @@
        :pagination="pagination"
        :columns="columns"
        :data-source="agentlist"
        rowKey="id">
        <span slot="id" slot-scope="text,record">
        rowKey="id"
      >
        <span slot="id" slot-scope="text, record">
          <template>
            <div>
              <span>{{ record.id }}</span>
            </div>
          </template>
        </span>
        <span slot="dkJg" slot-scope="text,record">
        <span slot="dkJg" slot-scope="text, record">
          <template>
            <div>
              <span>{{ record.dkJgName }}</span>
            </div>
          </template>
        </span>
        <span slot="dkUserId" slot-scope="text,record">
        <span slot="dkUserId" slot-scope="text, record">
          <template>
            <div>
              <span>{{ record.dkUserId }}</span>
            </div>
          </template>
        </span>
        <span slot="dkUserName" slot-scope="text,record">
        <span slot="dkUserName" slot-scope="text, record">
          <template>
            <div>
              <span>{{ record.dkUserName }}</span>
            </div>
          </template>
        </span>
        <span slot="dkPhone" slot-scope="text,record">
        <span slot="dkPhone" slot-scope="text, record">
          <template>
            <div>
              <span>{{ record.dkPhone }}</span>
            </div>
          </template>
        </span>
        <span slot="createTime" slot-scope="text,record">
        <span slot="createTime" slot-scope="text, record">
          <template>
            <div>
              <span>{{ record.createTime }}</span>
            </div>
          </template>
        </span>
        <span slot="dkMoney" slot-scope="text,record">
        <span slot="dkMoney" slot-scope="text, record">
          <template>
            <div>
              <span>{{ record.dkMoney }}</span>
            </div>
          </template>
        </span>
        <!-- <span slot="dkState" slot-scope="text,record">
        <span slot="dkState" slot-scope="text, record">
          <template>
            <div>
              <span v-if="record.dkState==1">123</span>
              <span v-if="record.dkState == 0">申请中</span>
              <span v-else-if="record.dkState == 1">审批通过</span>
              <span v-else-if="record.dkState == 2">审核拒绝</span>
            </div>
          </template>
        </span> -->
        <!-- <template slot="action" slot-scope="text,record">
        </span>
        <span slot="dkRefundState" slot-scope="text, record">
          <template>
            <div>
              <span v-if="record.dkState == 0 && record.dkState == 1">未还款</span>
              <span v-else-if="record.dkState == 1 && record.dkState == 1">已还款</span>
            </div>
          </template>
        </span>
        <template slot="action" slot-scope="text, record">
          <!-- <a slot="action" href="javascript:;" @click="$refs.EditAgentinfodialog.getEditorder(record)">修改机构</a>
          <a-divider type="vertical" />
          <a
            slot="action"
            href="javascript:;"
            @click="$refs.EditAgentinfodialog.getEditorder(record)">修改机构</a>
            <a-divider type="vertical" />
          <a slot="action" href="javascript:;" @click="getDelagent(record)">删除机构</a>
          <a slot="action" href="javascript:;" @click="getDelagent(record)">删除机构</a> -->
        </template> -->
          <template v-if="record.dkState == 0">
            <a href="javascript:;" @click="byOpen(record, 1)">通过</a>
            <a-divider type="vertical" />
            <a href="javascript:;" @click="byOpen(record, 2)">拒绝</a>
          </template>
        </template>
      </a-table>
    </a-card>
    <!-- <editCapitalAgentdialog ref="editCapitalAgentdialog" :getinit="geteditinit"></editCapitalAgentdialog> -->
    <!-- <EditAgentinfodialog ref="EditAgentinfodialog" :getinit="geteditinit"></EditAgentinfodialog> -->
    <!-- <addagentdialog ref="addagentdialog" :getinit="getinit"></addagentdialog> -->
    <a-modal
      :title="optObj.state == 1 ? '通过审核' : '拒绝审核'"
      :width="400"
      :visible="byShow"
      :confirmLoading="byloading"
      @ok="by"
      @cancel="canceBy"
    >
      <a-form :form="byFrom" ref="byFrom">
        <a-form-item label="申请金额" v-if="optObj.state == 1" :labelCol="labelCol" :wrapperCol="wrapperCol">
          <span>{{ optObj.dkMoney }}</span>
        </a-form-item>
        <a-form-item label="贷款金额" v-if="optObj.state == 1" :labelCol="labelCol" :wrapperCol="wrapperCol">
          <a-input placeholder="请输入" v-decorator="['spMoney', { rules: [{ required: true, message: '请输入' }] }]" />
        </a-form-item>
        <a-form-item label="拒绝理由" v-if="optObj.state == 2" :labelCol="labelCol" :wrapperCol="wrapperCol">
          <a-input placeholder="请输入" v-decorator="['message', { rules: [{ required: true, message: '请输入' }] }]" />
        </a-form-item>
      </a-form>
    </a-modal>
  </page-header-wrapper>
</template>
<script>
// import editCapitalAgentdialog from './agentcomponents/editCapitalAgentdialog'
import EditAgentinfodialog from './agentcomponents/EditAgentinfodialog'
import addagentdialog from './agentcomponents/addagentdialog'
import { onedklist } from '@/api/home'
import { onedklist, dksp } from '@/api/home'
import moment from 'moment'
export default {
    // name: 'AgentList',
    // components: {
    //     // editCapitalAgentdialog,
    //     EditAgentinfodialog,
    //     addagentdialog
    // },
    data () {
        return {
            columns: [
                {
                    title: 'Id',
                    scopedSlots: { customRender: 'id' },
                    align: 'center'
                },
                {
                    title: '机构名称',
                    dataIndex: 'dkJgName',
                    align: 'center'
                }, {
                    title: '贷款人Id',
                    dataIndex: 'dkUserId',
                    align: 'center'
                },
                {
                    title: '贷款人姓名',
                    dataIndex: 'dkUserName',
                    align: 'center'
                },
                {
                    title: '联系电话',
                    dataIndex: 'dkPhone',
                    align: 'center'
                },
                {
                    title: '申请时间',
                    dataIndex: 'createTime',
                    align: 'center',
                    customRender: (text, row, index) => {
                        return moment(text).format('YYYY-MM-DD HH:mm:ss')
                    }
                }, {
                    title: '贷款金额',
                    dataIndex: 'dkMoney',
                    align: 'center',
                    scopedSlots: { customRender: 'dkMoney' }
                }
                // {
                //     title: '贷款状态',
                //     dataIndex: 'dkState',
                //     align: 'center',
                //     scopedSlots: { customRender: 'dkState' }
                // },
                // {
                //     title: '代理手机号',
                //     dataIndex: 'agentPhone',
                //     align: 'center'
                // },
  // name: 'AgentList',
  // components: {
  //     // editCapitalAgentdialog,
  //     EditAgentinfodialog,
  //     addagentdialog
  // },
  data() {
    return {
      columns: [
        {
          title: 'Id',
          scopedSlots: { customRender: 'id' },
          align: 'center',
        },
        // {
        //     title: '机构名称',
        //     dataIndex: 'dkJgName',
        //     align: 'center'
        // },
        {
          title: '贷款人Id',
          dataIndex: 'dkUserId',
          align: 'center',
        },
        // {
        //   title: '贷款人姓名',
        //   dataIndex: 'dkUserName',
        //   align: 'center',
        // },
        {
          title: '贷款人账户',
          dataIndex: 'dkUserName',
          align: 'center',
        },
        {
          title: '联系电话',
          dataIndex: 'dkPhone',
          align: 'center',
        },
        {
          title: '申请时间',
          dataIndex: 'createTime',
          align: 'center',
          customRender: (text, row, index) => {
            return moment(text).format('YYYY-MM-DD HH:mm:ss')
          },
        },
        {
          title: '贷款金额',
          dataIndex: 'dkMoney',
          align: 'center',
          scopedSlots: { customRender: 'dkMoney' },
        },
        {
          title: '贷款状态',
          dataIndex: 'dkState',
          align: 'center',
          scopedSlots: { customRender: 'dkState' },
        },
        {
          title: '还款状态',
          dataIndex: 'dkRefundState',
          align: 'center',
          scopedSlots: { customRender: 'dkRefundState' },
        },
        // {
        //     title: '代理手机号',
        //     dataIndex: 'agentPhone',
        //     align: 'center'
        // },
                // {
                //     title: '总资金',
                //     dataIndex: 'totalMoney',
                //     align: 'center',
                //     customRender: (text, row, index) => {
                //         return text
                //     }
                // },
                // {
                //     title: '代理状态',
                //     dataIndex: 'isLock',
                //     align: 'center',
                //     scopedSlots: { customRender: 'isLock' }
                // },
                // {
                //     title: '注册时间',
                //     dataIndex: 'addTime',
                //     align: 'center',
                //     customRender: (text, row, index) => {
                //         return moment(text).format('YYYY-MM-DD HH:mm:ss')
                //     }
                // },
                // {
                //     title: '操作',
                //     key: 'action',
                //     align: 'center',
                //     scopedSlots: { customRender: 'action' }
                // }
            ],
            // 表头
            pagination: {
                total: 0,
                current: 1,
                pageSize: 10, // 每页中显示10条数据
                showSizeChanger: true,
                pageSizeOptions: ['10', '20', '50', '100'], // 每页中显示的数据
                onShowSizeChange: (current, pageSize) => this.onSizeChange(current, pageSize), // 改变每页数量时更新显示
                onChange: (page, pageSize) => this.onPageChange(page, pageSize), // 点击页码事件
                showTotal: total => `共有 ${total} 条数据` // 分页中显示总的数据
            },
            loading: false,
            agentqueryParam: {
                id: undefined,
                phone: '',
                realName: '',
                pageNum: 1,
                pageSize: 10
            },
            agentloading: false,
            agentlist: [],
            clickagentlist: []
        }
    },
    created () {
        this.getagentlist()
    },
    methods: {
        getDelagent (val) {
            var that = this
            this.$confirm({
                title: '提示',
                content: '确认删除机构?此操作不可恢复',
                onOk () {
                    var data = {
                        id: val.id
                    }
                    dldkjg(data).then(res => {
                        if (res.status == 0) {
                            that.$message.success({ content: '删除成功', duration: 2 })
                            that.getinit()
                        } else {
                            that.$message.error({ content: '删除失败' })
                        }
                    })
                },
                onCancel () {
                    console.log('Cancel')
                }
            })
        // {
        //     title: '总资金',
        //     dataIndex: 'totalMoney',
        //     align: 'center',
        //     customRender: (text, row, index) => {
        //         return text
        //     }
        // },
        // {
        //     title: '代理状态',
        //     dataIndex: 'isLock',
        //     align: 'center',
        //     scopedSlots: { customRender: 'isLock' }
        // },
        // {
        //     title: '注册时间',
        //     dataIndex: 'addTime',
        //     align: 'center',
        //     customRender: (text, row, index) => {
        //         return moment(text).format('YYYY-MM-DD HH:mm:ss')
        //     }
        // },
        {
          title: '操作',
          key: 'action',
          align: 'center',
          scopedSlots: { customRender: 'action' },
        },
        getinit () {
            this.queryParam = {
                id: undefined,
                phone: '',
                realName: '',
                pageNum: 1,
                pageSize: 10
            }
            this.pagination.current = 1
            this.getagentlist()
        },
        geteditinit () {
            this.getagentlist()
        },
        getagentlist () {
            var that = this
            this.loading = true
            // dklist(this.agentqueryParam).then(res => {
              onedklist().then(res => {
                this.agentlist = res.data
                // this.pagination.total = res.data.total
                setTimeout(() => {
                    that.loading = false
                }, 500)
            })
        },
        getclickagentlist () {
            var that = this
            this.agentloading = true
            var data = {
                pageNum: 1,
                pageSize: 100
            }
            nextagent(data).then(res => {
                this.clickagentlist = res.data.list
                setTimeout(() => {
                    that.agentloading = false
                }, 500)
            })
        },
        onPageChange (page, pageSize) {
            this.agentqueryParam.pageNum = page
            this.pagination.current = page
            this.getagentlist()
        },
        onSizeChange (current, pageSize) {
            this.agentqueryParam.pageNum = current
            this.pagination.current = page
            this.agentqueryParam.pageSize = pageSize
            this.getagentlist()
        }
      ],
      // 表头
      pagination: {
        total: 0,
        current: 1,
        pageSize: 10, // 每页中显示10条数据
        showSizeChanger: true,
        pageSizeOptions: ['10', '20', '50', '100'], // 每页中显示的数据
        onShowSizeChange: (current, pageSize) => this.onSizeChange(current, pageSize), // 改变每页数量时更新显示
        onChange: (page, pageSize) => this.onPageChange(page, pageSize), // 点击页码事件
        showTotal: (total) => `共有 ${total} 条数据`, // 分页中显示总的数据
      },
      loading: false,
      agentqueryParam: {
        id: undefined,
        pageNum: 1,
        pageSize: 10,
      },
      labelCol: {
        xs: { span: 8 },
        sm: { span: 8 },
        md: { span: 8 },
      },
      wrapperCol: {
        xs: { span: 14 },
        sm: { span: 14 },
        md: { span: 14 },
      },
      agentloading: false,
      agentlist: [],
      clickagentlist: [],
      byShow: false,
      byloading: false,
      optObj: {}, // 选择的对象
      byFrom: this.$form.createForm(this), // 表单
    }
  },
  created() {
    this.getagentlist()
  },
  methods: {
    getDelagent(val) {
      var that = this
      this.$confirm({
        title: '提示',
        content: '确认删除机构?此操作不可恢复',
        onOk() {
          var data = {
            id: val.id,
          }
          dldkjg(data).then((res) => {
            if (res.status == 0) {
              that.$message.success({ content: '删除成功', duration: 2 })
              that.getinit()
            } else {
              that.$message.error({ content: '删除失败' })
            }
          })
        },
        onCancel() {
          console.log('Cancel')
        },
      })
    },
    getinit() {
      this.agentqueryParam = {
        id: undefined,
        pageNum: 1,
        pageSize: 10,
      }
      this.pagination.current = 1
      this.getagentlist()
    },
    geteditinit() {
      this.getagentlist()
    },
    getagentlist() {
      var that = this
      this.loading = true
      onedklist(this.agentqueryParam).then((res) => {
        this.agentlist = res.data.list
        this.pagination.total = res.data.total
        setTimeout(() => {
          that.loading = false
        }, 500)
      })
    },
    getclickagentlist() {
      var that = this
      this.agentloading = true
      var data = {
        pageNum: 1,
        pageSize: 100,
      }
      nextagent(data).then((res) => {
        this.clickagentlist = res.data.list
        setTimeout(() => {
          that.agentloading = false
        }, 500)
      })
    },
    onPageChange(page, pageSize) {
      this.agentqueryParam.pageNum = page
      this.pagination.current = page
      this.getagentlist()
    },
    onSizeChange(current, pageSize) {
      this.agentqueryParam.pageNum = current
      this.pagination.current = page
      this.agentqueryParam.pageSize = pageSize
      this.getagentlist()
    },
    // 审核窗口打开
    byOpen(val, state) {
      this.optObj = { ...val, state }
      this.byShow = true
    },
    // 关闭审核窗口
    canceBy() {
      this.byShow = false
      const form = this.$refs.byFrom.form
      form.resetFields()
    },
    // 审核通过||拒绝
    by() {
      const form = this.$refs.byFrom.form
      form.validateFields((errors, values) => {
        if (!errors) {
          this.byloading = true
          values.state = this.optObj.state
          values.dkId = this.optObj.id
          dksp(values).then((res) => {
            if (res.status == 0) {
              this.byShow = false
              this.$message.success(res.msg)
              form.resetFields()
              this.getagentlist()
            } else {
              this.$message.error(res.msg)
            }
            this.byloading = false
          })
        }
      })
    },
  },
}
</script>
src/views/newshares/newshareslist.vue
@@ -220,8 +220,8 @@
                placeholder="请选择新股市场"
                v-decorator="['stockType', { rules: [{ required: true, message: '新股市场' }] }]"
              >
                <a-select-option value="nse">nse</a-select-option>
                <a-select-option value="bse">bse</a-select-option>
                <a-select-option value="US">US</a-select-option>
                <a-select-option value="MEX">MEX</a-select-option>
              </a-select>
            </a-form-item>
          </a-col>
src/views/userlist/components/EditUserinfodialog.vue
@@ -46,6 +46,12 @@
            <a-select-option :value="1">不可交易</a-select-option>
          </a-select>
        </a-form-item>
        <a-form-item label="信用分" :labelCol="labelCol" :wrapperCol="wrapperCol">
          <a-input placeholder="请输入" v-decorator="['creditScore', {}]" />
        </a-form-item>
        <a-form-item label="贷款额度" :labelCol="labelCol" :wrapperCol="wrapperCol">
          <a-input placeholder="请输入" v-decorator="['loanLimit', {}]" />
        </a-form-item>
      </a-form>
    </a-modal>
  </div>
@@ -77,7 +83,19 @@
      editUserform: this.$form.createForm(this),
      editUserdialog: false,
      editUserDialogloading: false,
      fields: ['agentId', 'phone', 'realName', 'userPwd', 'idCard', 'isLogin', 'isLock', 'fundRatio', 'lever'],
      fields: [
        'agentId',
        'phone',
        'realName',
        'userPwd',
        'idCard',
        'isLogin',
        'isLock',
        'fundRatio',
        'lever',
        'creditScore',
        'loanLimit',
      ],
      currentDetails: {},
    }
  },
src/views/userlist/components/detailuserdialog.vue
@@ -54,6 +54,13 @@
        <a-descriptions-item label="注册时间">
          {{ currentDetails.regTime | moment }}
        </a-descriptions-item>
        <a-descriptions-item label="信用分">
          {{ currentDetails.creditScore ? currentDetails.creditScore : '--' }}
        </a-descriptions-item>
        <a-descriptions-item label="贷款额度">
          {{ currentDetails.loanLimit ? currentDetails.loanLimit : '--' }}
        </a-descriptions-item>
        <!-- <a-descriptions-item label="总资金(¥)">
          {{ Number(currentDetails.userAmt + currentDetails.userIndexAmt).toFixed(2) }}
        </a-descriptions-item> -->
src/views/userlist/components/editCapitaluserdialog.vue
@@ -35,9 +35,8 @@
            v-decorator="['accectType', { rules: [{ required: true, message: '请选择账户' }] }]"
          >
            <a-select-option v-for="item in activeArr" :key="item.id" :value="item.accectType">
            {{
              item | formatDate
            }}</a-select-option>
              {{ item | formatDate }}
            </a-select-option>
          </a-select>
        </a-form-item>
      </a-form>
@@ -66,6 +65,8 @@
          return `沙特(${value.symbol} ${value.availableBalance})`
        case 'USDT':
          return `USDT( ${value.availableBalance})`
        case 'MEX':
          return `MEX( ${value.availableBalance})`
        default:
          break
      }
@@ -109,7 +110,7 @@
  },
  methods: {
    getEditorder(val) {
      val.accectType = 'ST'
      val.accectType = 'MEX'
      this.currentDetails = val
      this.editUserdialog = true
      this.fields.forEach((v) => this.editUserform.getFieldDecorator(v))
src/views/userlist/index.vue
@@ -22,14 +22,14 @@
            </a-col>
            <a-col :md="12" :lg="6" :sm="24">
              <a-form-item label="注册时间">
                 <a-date-picker
                   show-time
                   style="width: 50%"
                   @change="getregTime"
                   v-model="regTime"
                   format="YYYY-MM-DD HH:mm:ss"
                 >
                 </a-date-picker>
                <a-date-picker
                  show-time
                  style="width: 50%"
                  @change="getregTime"
                  v-model="regTime"
                  format="YYYY-MM-DD HH:mm:ss"
                >
                </a-date-picker>
              </a-form-item>
            </a-col>
            <a-col :md="12" :lg="6" :sm="24">
@@ -147,7 +147,7 @@
          <a-divider type="vertical" />
          <a slot="action" href="javascript:;" @click="$refs.EditUserinfodialog.getEditorder(record)">编辑</a>
          <a-divider type="vertical" />
<!--          <a slot="action" href="javascript:;" @click="$refs.editUserbankdialog.getbankinfo(record)">银行卡</a>
          <!--          <a slot="action" href="javascript:;" @click="$refs.editUserbankdialog.getbankinfo(record)">银行卡</a>
          <a-divider type="vertical" /> -->
          <a slot="action" href="javascript:;" @click="getMoneyzj(record)">资金</a>
          <a-divider type="vertical" />
@@ -198,15 +198,15 @@
  },
  data() {
    return {
      regTime:'',
      regTime: '',
      queryParam: {
        agentId: undefined,
        realName: '',
        isLock:'',
        isLogin:'',
        isActive:'',
        isLock: '',
        isLogin: '',
        isActive: '',
        phone: '',
        regTime:'',
        regTime: '',
        pageNum: 1,
        pageSize: 10,
        accountType: 0,
@@ -381,11 +381,11 @@
      this.queryParam = {
        agentId: undefined,
        realName: '',
        isLock:'',
        isLogin:'',
        isActive:'',
        isLock: '',
        isLogin: '',
        isActive: '',
        phone: '',
        regTime:'',
        regTime: '',
        pageNum: 1,
        pageSize: 10,
        accountType: 0,