做市状态

This commit is contained in:
2026-06-18 11:07:36 +08:00
parent 2ee6cd8695
commit fb76900a6d
11 changed files with 200 additions and 125 deletions

View File

@ -380,7 +380,7 @@ const handleDragEnd = () => {
//
const handleReset = () => {
localColumns.value = props.columns.map((col) => ({
localColumns.value = (props.columns || []).map((col) => ({
...col,
visible: col.visible !== false,
fixed: col.fixed || false,

View File

@ -143,6 +143,7 @@ const handleReset = () => {
getFundDetailList()
}
const handleExport = () => {
console.log('tableColumnsOptions.value:', tableColumnsOptions.value);
exportToExcel({
tableData: tableTree.value,
columns: tableColumnsOptions.value,

View File

@ -57,25 +57,25 @@ export const search = [
]
export const tableColumns = [
// 用户名
{ prop: 'username', label: '用户名' },
{ prop: 'username', label: '用户名', visible: true },
//单号
{ prop: 'orderNo', label: '单号' , width:'200' },
{ prop: 'account_id', label: '子账号'},
{ prop: 'orderNo', label: '单号' , width:'200', visible: true },
{ prop: 'account_id', label: '子账号', visible: true },
//操作类型
{ prop: 'type', label: '操作类型', width:'120' },
{ prop: 'type', label: '操作类型', width:'120', visible: true },
//资金流向
// { prop: 'fundDirection', label: '资金流向' },
//原有金额
{ prop: 'amount', label: '变动金额', isNumber: true , width:'120' },
{ prop: 'description', label: '描述', isNumber: true , width:'120'},
{ prop: 'amount', label: '变动金额', isNumber: true , width:'120', visible: true },
{ prop: 'description', label: '描述', isNumber: true , width:'120', visible: true },
//余额变动
{ prop: 'balance', label: '变动后余额' , isNumber: true, width:'120' },
{ prop: 'balance', label: '变动后余额' , isNumber: true, width:'120', visible: true },
//现有余额
// { prop: 'currentBalance', label: '现有余额' },
//状态
// { prop: 'status', label: '状态' },
//创建时间
{ prop: 'createTime', label: '创建时间' , width:'180' },
{ prop: 'createTime', label: '创建时间' , width:'180' , visible: true },
//钱包类型
{ prop: 'walletType', label: '钱包类型', width:'120' },
{ prop: 'walletType', label: '钱包类型', width:'120', visible: true },
]

View File

@ -1,11 +1,11 @@
// 存款列表表格列配置
export const rechangeTableColumns = [
{ prop: 'name', label: '渠道名称', align: 'center' as const },
{ prop: 'name', label: '渠道名称', align: 'center' as const , visible: true },
{
prop: 'symbol',
label: '支持货币',
align: 'center' as const
align: 'center' as const, visible: true
},
{ prop: 'channel_fee', label: '渠道费用', align: 'center' as const },
{ label: '操作', slotName: 'action', align: 'center' as const, width: 120 },
{ prop: 'channel_fee', label: '渠道费用', align: 'center' as const, visible: true },
{ label: '操作', slotName: 'action', align: 'center' as const, width: 120 , visible: true },
]

View File

@ -19,6 +19,7 @@ export const formItemsData = [
{
label: '渠道费用',
prop: 'channel_fee',
type: 'number',
min: 0,
max: 999999,
controls: false,

View File

@ -42,7 +42,7 @@ export const withdrawCheckTableColumns = [
{ prop: 'rate', label: '汇率', align: 'center' as const, width: 100 },
{ prop: 'channel_name', label: '渠道', align: 'center' as const, width: 140 },
{ prop: 'withdraw_service_fee', label: '服务费', align: 'center' as const, width: 100, isNumber: true },
{ prop: 'withdraw_head_fee', label: '总部手续费', align: 'center' as const, width: 120, isNumber: true },
{ prop: 'withdraw_head_fee', label: '头寸', align: 'center' as const, width: 120, isNumber: true },
{ prop: 'withdraw_fee_handle', label: '代理手续费', align: 'center' as const, width: 120, isNumber: true },
{ prop: 'withdraw_point_diff', label: '点差', align: 'center' as const, width: 100, isNumber: true },
{ prop: 'withdraw_risk_fee', label: '风控费', align: 'center' as const, isNumber: true , width: 180},

View File

@ -41,7 +41,7 @@ export const tableColumns = [
{ prop: 'real_amount', label: '到账金额', align: 'center' as const, width: 120, isNumber: true },
{ prop: 'channel_name', label: '渠道', align: 'center' as const, width: 140 },
{ prop: 'withdraw_service_fee', label: '服务费', align: 'center' as const, width: 100, isNumber: true },
{ prop: 'withdraw_head_fee', label: '总部手续费', align: 'center' as const, width: 120, isNumber: true },
{ prop: 'withdraw_head_fee', label: '头寸', align: 'center' as const, width: 120, isNumber: true },
{ prop: 'withdraw_fee_handle', label: '代理手续费', align: 'center' as const, width: 120, isNumber: true },
{ prop: 'withdraw_point_diff', label: '点差', align: 'center' as const, width: 100, isNumber: true },
{ prop: 'withdraw_risk_fee', label: '风控费', width: 140, align: 'center' as const, isNumber: true },

View File

@ -74,16 +74,12 @@
<context-menu-item
v-if="
([1, 2, 3, 4, 5].includes(userStore!.userInfo!.role_id) &&
userStore!.userInfo!.role_id === currentRow.role_id) || [1].includes(userStore!.userInfo!.role_id)
userStore!.userInfo!.role_id === currentRow.role_id)
"
label="取款"
divided
@click="handleAction('deposit')"
/>
<context-menu-item
v-if="
[1].includes(userStore!.userInfo!.role_id)&&[3, 4].includes(currentRow.role_id)
" label="存款" divided @click="handleAction('withdraw')" />
</context-menu>
<!-- 分页 -->

View File

@ -1,117 +1,185 @@
<template>
<div class="trade-software table_form-container">
<el-card>
<div class="left">
<el-icon>
<Monitor />
</el-icon>
<span class="title">PC端</span>
<el-icon class="download">
<Bottom />
</el-icon>
</div>
<div class="right">
<span class="text">系统要求:适用于windows 2008/7/8/10操作系统网络速度为56kbps或更高</span>
</div>
</el-card>
<el-card>
<div class="left">
<el-icon>
<svg t="1774244659320" class="icon" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="2548" width="200" height="200">
<path
d="M839.562 344.72c-30.082 0-54.476 24.771-54.476 55.326l0 216.209c0 30.558 24.393 55.328 54.476 55.328 30.087 0 54.476-24.771 54.476-55.328l0-216.209c0.001-30.555-24.387-55.326-54.476-55.326zM182.482 344.72c-30.085 0-54.476 24.771-54.476 55.326l0 216.209c0 30.558 24.391 55.328 54.476 55.328s54.476-24.771 54.476-55.328l0-216.209c0-30.555-24.391-55.326-54.476-55.326zM269.74 346.395l0 395.014c0 23.462 19.02 42.481 42.483 42.481l48.533 0 0 120.293c0 30.558 24.391 55.328 54.476 55.328 30.087 0 54.478-24.771 54.478-55.328l0-120.294 84.786 0 0 120.293c0 30.558 24.393 55.328 54.476 55.328 30.087 0 54.481-24.771 54.481-55.328l0-120.293 48.528 0c23.467 0 42.485-19.018 42.485-42.481l0-395.013-484.725 0zM625.92 141.706l44.777-64.999c2.657-3.861 1.997-8.932-1.478-11.326-3.475-2.392-8.447-1.204-11.104 2.659l-46.512 67.518c-30.65-12.075-64.707-18.805-100.581-18.805-35.874 0-69.929 6.729-100.579 18.805l-46.512-67.518c-2.659-3.863-7.631-5.05-11.106-2.659-3.475 2.395-4.134 7.466-1.476 11.326l44.777 64.999c-71.188 33.117-121.113 96.042-127.467 169.487l484.727 0c-6.355-73.445-56.28-136.37-127.466-169.487zM408.772 244.144c-14.811 0-26.819-12.005-26.819-26.819 0-14.811 12.007-26.819 26.819-26.819 14.813 0 26.819 12.007 26.819 26.819 0 14.813-12.005 26.819-26.819 26.819zM616.625 244.144c-14.811 0-26.816-12.005-26.816-26.819 0-14.811 12.004-26.819 26.816-26.819 14.816 0 26.821 12.007 26.821 26.819 0 14.813-12.004 26.819-26.821 26.819z"
fill="#272636" p-id="2549"></path>
</svg>
</el-icon>
<span class="title">Android APK</span>
<el-icon class="download">
<Bottom />
</el-icon>
</div>
<div class="right">
<span class="text">下载说明:下载后可以通过手机安装APK</span>
</div>
</el-card>
<el-card>
<div class="left">
<el-icon>
<svg t="1774244690948" class="icon" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="3750" width="200" height="200">
<path
d="M836.608 675.84q41.984 59.392 96.256 76.8-23.552 72.704-74.752 151.552-78.848 118.784-155.648 118.784-28.672 0-84.992-19.456-52.224-19.456-91.136-19.456t-86.016 20.48q-49.152 19.456-80.896 19.456-92.16 0-181.248-156.672-89.088-154.624-89.088-304.128 0-138.24 67.584-226.304 69.632-88.064 172.032-88.064 22.528 0 50.176 5.632t57.344 20.992q31.744 17.408 52.224 24.064t31.744 6.656q13.312 0 40.96-6.144t55.296-22.528q29.696-16.384 51.2-24.576t44.032-8.192q71.68 0 129.024 38.912 30.72 20.48 62.464 60.416-47.104 40.96-68.608 71.68-39.936 57.344-39.936 124.928 0 74.752 41.984 135.168z m-205.824-478.208q-35.84 33.792-65.536 44.032-10.24 3.072-26.112 5.632t-36.352 4.608q1.024-90.112 47.104-155.648T701.44 6.144q2.048 10.24 3.072 14.336v11.264q0 36.864-17.408 82.944-18.432 45.056-56.32 82.944z"
fill="#272636" p-id="3751"></path>
</svg>
</el-icon>
<span class="title">IOS</span>
<el-icon class="download">
<Bottom />
</el-icon>
</div>
<div class="right">
<span class="text">下载说明:iPhone和iPad用户可以通过 Apple App Store搜索InTrade安装</span>
</div>
</el-card>
<div class="download-wrapper table_form-container">
<!-- PC端 -->
<div class="download-item">
<div class="item-left">
<div class="icon-box pc">
<el-icon><Monitor /></el-icon>
</div>
<div class="title-wrap">
<h3 class="main-title">PC客户端</h3>
<p class="tip">Windows电脑专用安装包</p>
</div>
</div>
<div class="item-center">
<span class="desc">系统要求Windows 2008/7/8/10网络56kbps及以上</span>
</div>
<div class="item-right">
<el-button type="primary" :icon="Download" @click="handleDownload('pc')">
立即下载
</el-button>
</div>
</div>
<!-- Android -->
<div class="download-item">
<div class="item-left">
<div class="icon-box android">
<svg viewBox="0 0 1024 1024" width="32" height="32">
<path d="M839.562 344.72c-30.082 0-54.476 24.771-54.476 55.326l0 216.209c0 30.558 24.393 55.328 54.476 55.328 30.087 0 54.476-24.771 54.476-55.328l0-216.209c0.001-30.555-24.387-55.326-54.476-55.326zM182.482 344.72c-30.085 0-54.476 24.771-54.476 55.326l0 216.209c0 30.558 24.391 55.328 54.476 55.328s54.476-24.771 54.476-55.328l0-216.209c0-30.555-24.391-55.326-54.476-55.326zM269.74 346.395l0 395.014c0 23.462 19.02 42.481 42.483 42.481l48.533 0 0 120.293c0 30.558 24.391 55.328 54.476 55.328 30.087 0 54.478-24.771 54.478-55.328l0-120.294 84.786 0 0 120.293c0 30.558 24.393 55.328 54.476 55.328 30.087 0 54.481-24.771 54.481-55.328l0-120.293 48.528 0c23.467 0 42.485-19.018 42.485-42.481l0-395.013-484.725 0zM625.92 141.706l44.777-64.999c2.657-3.861 1.997-8.932-1.478-11.326-3.475-2.392-8.447-1.204-11.104 2.659l-46.512 67.518c-30.65-12.075-64.707-18.805-100.581-18.805-35.874 0-69.929 6.729-100.579 18.805l-46.512-67.518c-2.659-3.863-7.631-5.05-11.106-2.659-3.475 2.395-4.134 7.466-1.476 11.326l44.777 64.999c-71.188 33.117-121.113 96.042-127.467 169.487l484.727 0c-6.355-73.445-56.28-136.37-127.466-169.487zM408.772 244.144c-14.811 0-26.819-12.005-26.819-26.819 0-14.811 12.007-26.819 26.819-26.819 14.813 0 26.819 12.007 26.819 26.819 0 14.813-12.005 26.819-26.819 26.819zM616.625 244.144c-14.811 0-26.816-12.005-26.816-26.819 0-14.811 12.004-26.819 26.816-26.819 14.816 0 26.821 12.007 26.821 26.819 0 14.813-12.004 26.819-26.821 26.819z" fill="#fff"></path>
</svg>
</div>
<div class="title-wrap">
<h3 class="main-title">Android APK</h3>
<p class="tip">安卓手机安装包</p>
</div>
</div>
<div class="item-center">
<span class="desc">下载后传输至手机即可安装</span>
</div>
<div class="item-right">
<el-button type="success" :icon="Download" @click="handleDownload('android')">
下载APK
</el-button>
</div>
</div>
<!-- IOS -->
<div class="download-item">
<div class="item-left">
<div class="icon-box ios">
<svg viewBox="0 0 1024 1024" width="32" height="32">
<path d="M836.608 675.84q41.984 59.392 96.256 76.8-23.552 72.704-74.752 151.552-78.848 118.784-155.648 118.784-28.672 0-84.992-19.456-52.224-19.456-91.136-19.456t-86.016 20.48q-49.152 19.456-80.896 19.456-92.16 0-181.248-156.672-89.088-154.624-89.088-304.128 0-138.24 67.584-226.304 69.632-88.064 172.032-88.064 22.528 0 50.176 5.632t57.344 20.992q31.744 17.408 52.224 24.064t31.744 6.656q13.312 0 40.96-6.144t55.296-22.528q29.696-16.384 51.2-24.576t44.032-8.192q71.68 0 129.024 38.912 30.72 20.48 62.464 60.416-47.104 40.96-68.608 71.68-39.936 57.344-39.936 124.928 0 74.752 41.984 135.168z m-205.824-478.208q-35.84 33.792-65.536 44.032-10.24 3.072-26.112 5.632t-36.352 4.608q1.024-90.112 47.104-155.648T701.44 6.144q2.048 10.24 3.072 14.336v11.264q0 36.864-17.408 82.944-18.432 45.056-56.32 82.944z" fill="#fff"></path>
</svg>
</div>
<div class="title-wrap">
<h3 class="main-title">iOS客户端</h3>
<p class="tip">iPhone / iPad 专用</p>
</div>
</div>
<div class="item-center">
<span class="desc">前往App Store搜索 InTrade 安装</span>
</div>
<div class="item-right">
<el-button type="warning" :icon="Link" @click="handleDownload('ios')">
前往商店
</el-button>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { Monitor, Download, Link } from '@element-plus/icons-vue'
defineOptions({ name: 'Exe' })
defineOptions({
name: 'Exe'
})
import { Monitor, Bottom } from '@element-plus/icons-vue'
const downloadUrlMap: Record<string, string> = {
pc: 'https://adminh5.apimcapital.top/pc/Apim Capital-1.0.24.exe',
android: 'https://adminh5.apimcapital.top/app/xxxx.apk',
ios: 'https://adminh5.apimcapital.top/app/xxxx.apk'
}
const handleDownload = (type: 'pc' | 'android' | 'ios') => {
const url = downloadUrlMap[type]
const a = document.createElement('a')
a.href = url
if (type === 'pc') a.download = 'Apim Capital-1.0.24.exe'
if (type === 'android') a.download = 'ApimCapital.apk'
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
}
</script>
<style scoped lang="scss">
.trade-software {
.download-wrapper {
display: flex;
flex-direction: column;
gap: 16px;
width: 100%;
.download-item {
display: flex;
flex-direction: column;
gap: 20px;
align-items: center;
justify-content: space-between;
gap: 24px;
padding: 24px 28px;
background: #fff;
border-radius: 16px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
transition: all 0.25s ease;
.el-card {
:deep(.el-card__body) {
display: flex;
justify-content: space-between;
}
.left {
display: flex;
justify-content: center;
align-items: center;
gap: 10px;
.title {
font-weight: 500;
}
}
.right {
.text {
font-size: 14px;
}
}
.left,
.right {
.el-icon{
font-size: 30px;
}
.download {
font-size: 20px;
cursor: pointer;
&:before {
content: "";
display: block;
height: 2px;
width: 16px;
background: var(--el-text-color-primary);
position: absolute;
bottom: 0;
}
}
}
&:hover {
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1);
transform: translateY(-2px);
}
// +
.item-left {
display: flex;
align-items: center;
gap: 16px;
flex-shrink: 0;
.icon-box {
width: 56px;
height: 56px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
&.pc {
background: linear-gradient(135deg, #409eff, #2b7cd3);
}
&.android {
background: linear-gradient(135deg, #36c66c, #26a357);
}
&.ios {
background: linear-gradient(135deg, #ff9500, #e68200);
}
el-icon {
font-size: 30px;
color: #fff;
}
}
.title-wrap {
.main-title {
font-size: 18px;
font-weight: 600;
margin: 0;
color: #1d2129;
}
.tip {
font-size: 13px;
color: #86909c;
margin: 4px 0 0;
}
}
}
//
.item-center {
flex: 1;
text-align: end;
.desc {
font-size: 14px;
color: #4e5969;
}
}
//
.item-right {
flex-shrink: 0;
el-button {
padding: 0 18px;
height: 42px;
font-size: 15px;
}
}
}
}
</style>
</style>

View File

@ -3,6 +3,11 @@
<!-- 搜索 -->
<VarietySearch :search-form="searchForm" :buttonLoading="loading" :search-options="searchOptions"
@search="handleSearch" @reset="handleReset">
<template #type>
<el-select v-model="searchForm.type" placeholder="请选择类型" clearable style="width: 200px;">
<el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
<template #button="{ form }">
<el-button type="primary" :disabled="!selectedRow" @click="handleEdit()" v-auth="'contractVariety_editVariety'">
编辑
@ -98,6 +103,7 @@ import { uploadImageApi } from '@/api/modules/upload'
*/
const searchForm = ref({
varietyName: '',
type:''
})
const searchOptions = ref(search)
@ -228,6 +234,7 @@ const getVarietyList = async () => {
startLoading()
const params = {
name: searchForm.value.varietyName,
type: searchForm.value.type,
}
try {
const data = await getVarietyListApi(params)
@ -284,6 +291,7 @@ const handleSearch = async () => {
const handleReset = () => {
searchForm.value = {
varietyName: '',
type:''
}
handleSearch()
}

View File

@ -4,6 +4,7 @@
export const search = [
// 品种名称
{ prop: 'varietyName', label: '品种名称', type: 'input' as const, placeholder: '请输入品种名称' },
{ prop: 'type', label: '类型', type: 'select' as const, placeholder: '请选择类型', slot: true, },
]
/**