|
|
@@ -3,15 +3,17 @@
|
|
|
<app-view>
|
|
|
<template #header>
|
|
|
<el-form ref="formRef" class="el-form--filter" :model="qs" :rules="formRules" :show-message="false">
|
|
|
- <el-form-item label="交易商" prop="usergroupid">
|
|
|
- <el-select v-model="selectedInvestor" value-key="id" :validate-event="false" @change="onGroupChange">
|
|
|
+ <el-form-item label="交易商" prop="userid">
|
|
|
+ <el-select v-model="selectedInvestor" value-key="id" :validate-event="false"
|
|
|
+ @change="onGroupChange">
|
|
|
<template v-for="item in investorList" :key="item.id">
|
|
|
<el-option :label="item.name" :value="item" />
|
|
|
</template>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="资金账户" prop="marketid">
|
|
|
- <el-select v-model="selectedAccount" value-key="id" :validate-event="false" @change="onMarketChange">
|
|
|
+ <el-form-item label="资金账户" prop="accountid">
|
|
|
+ <el-select v-model="selectedAccount" value-key="id" :validate-event="false"
|
|
|
+ @change="onMarketChange">
|
|
|
<template v-for="item in accountList" :key="item.id">
|
|
|
<el-option :label="item.name" :value="item" />
|
|
|
</template>
|
|
|
@@ -30,30 +32,36 @@
|
|
|
</el-form>
|
|
|
</template>
|
|
|
<div style="display: flex;justify-content: space-between;">
|
|
|
- <app-operation :data-list="getActionButtons(['investor_custom_tradecfg_add'])" @click="openComponent" />
|
|
|
+ <app-operation :data-list="getActionButtons(['investor_custom_accountcfg_add'])" @click="openComponent" />
|
|
|
<app-operation
|
|
|
- :data-list="getActionButtons(['investor_custom_tradecfg_modify', 'investor_custom_tradecfg_delete'])"
|
|
|
+ :data-list="getActionButtons(['investor_custom_accountcfg_modify', 'investor_custom_accountcfg_delete'])"
|
|
|
@click="openComponent" v-if="data" />
|
|
|
</div>
|
|
|
<template v-if="data">
|
|
|
- <app-table-details :title="t('common.baseinfo')" :data="data" :label-width="160" :cell-props="detailProps"
|
|
|
- :column="3" />
|
|
|
+ <app-table-details title="基本信息设置" :data="data" :label-width="160" :cell-props="detailProps" :column="2" />
|
|
|
<app-table :data="data.druleList" :columns="ruleColumns">
|
|
|
<template #headerLeft>
|
|
|
- <b>{{ t('investor.custom.tradecfg.subtitle') }}</b>
|
|
|
+ <b>交易规则设置</b>
|
|
|
</template>
|
|
|
- <!-- 商品设置值 -->
|
|
|
+ <!-- 平台 -->
|
|
|
<template #paramvalue="{ row }">
|
|
|
<span v-if="row.ruleid === 105">{{ feetypeEnum.getEnumTypeName(row.paramvalue) }}</span>
|
|
|
<span v-else>{{ row.paramvalue || 0 }}</span>
|
|
|
</template>
|
|
|
- <!-- 会员设置值 -->
|
|
|
+ <!-- 会员 -->
|
|
|
<template #dvalue="{ row }">
|
|
|
<span v-if="row.ruleid === 105">
|
|
|
{{ handleNoneValue(feetypeEnum.getEnumTypeName(row.dvalue)) }}
|
|
|
</span>
|
|
|
<span v-else>{{ handleNoneValue(row.dvalue) }}</span>
|
|
|
</template>
|
|
|
+ <!-- 分组 -->
|
|
|
+ <template #gvalue="{ row }">
|
|
|
+ <span v-if="row.ruleid === 105">
|
|
|
+ {{ handleNoneValue(feetypeEnum.getEnumTypeName(row.gvalue)) }}
|
|
|
+ </span>
|
|
|
+ <span v-else>{{ handleNoneValue(row.gvalue) }}</span>
|
|
|
+ </template>
|
|
|
<!-- 个性化 -->
|
|
|
<template #cvalue="{ row }">
|
|
|
<span v-if="row.ruleid === 105">
|
|
|
@@ -64,23 +72,33 @@
|
|
|
</app-table>
|
|
|
<app-table :data="data.dfeeList" :columns="feeColumns">
|
|
|
<template #headerLeft>
|
|
|
- <b>{{ t('investor.custom.tradecfg.subtitle1') }}</b>
|
|
|
+ <b>交易服务费设置</b>
|
|
|
</template>
|
|
|
- <!-- 商品设置值 -->
|
|
|
+ <!-- 平台 -->
|
|
|
<template #exchangevalue="{ row }">
|
|
|
<template v-if="row.feealgorithm">
|
|
|
- <span v-if="row.feealgorithm === 1">{{ parseTenThousand(row.exchangevalue) }}</span>
|
|
|
- <span v-else>{{ row.exchangevalue }}</span>
|
|
|
+ <span>{{ scfRiskMode.getEnumTypeName(row.feealgorithm) }}:</span>
|
|
|
+ <span>{{ row.exchangevalue + (row.feealgorithm === 1 && '‱') }}</span>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
{{ handleNoneValue() }}
|
|
|
</template>
|
|
|
</template>
|
|
|
- <!-- 会员设置值 -->
|
|
|
+ <!-- 会员 -->
|
|
|
<template #dvalue="{ row }">
|
|
|
<template v-if="row.drithm">
|
|
|
- <span v-if="row.drithm === 1">{{ parseTenThousand(row.dvalue) }}</span>
|
|
|
- <span v-else>{{ row.dvalue }}</span>
|
|
|
+ <span>{{ scfRiskMode.getEnumTypeName(row.drithm) }}:</span>
|
|
|
+ <span>{{ row.dvalue + (row.drithm === 1 && '‱') }}</span>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ {{ handleNoneValue() }}
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ <!-- 分组 -->
|
|
|
+ <template #gvalue="{ row }">
|
|
|
+ <template v-if="row.grithm">
|
|
|
+ <span>{{ scfRiskMode.getEnumTypeName(row.grithm) }}:</span>
|
|
|
+ <span>{{ row.gvalue + (row.grithm === 1 && '‱') }}</span>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
{{ handleNoneValue() }}
|
|
|
@@ -89,8 +107,8 @@
|
|
|
<!-- 个性化 -->
|
|
|
<template #cvalue="{ row }">
|
|
|
<template v-if="row.crithm">
|
|
|
- <span v-if="row.crithm === 1">{{ parseTenThousand(row.cvalue) }}</span>
|
|
|
- <span v-else>{{ row.cvalue }}</span>
|
|
|
+ <span>{{ scfRiskMode.getEnumTypeName(row.crithm) }}:</span>
|
|
|
+ <span>{{ row.cvalue + (row.crithm === 1 && '‱') }}</span>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
{{ handleNoneValue() }}
|
|
|
@@ -107,26 +125,27 @@
|
|
|
<script lang="ts" setup>
|
|
|
import { shallowRef, computed, nextTick, toRaw } from 'vue'
|
|
|
import { ElMessage, FormInstance, FormRules } from 'element-plus'
|
|
|
-import { parseTenThousand, handleNoneValue } from '@/filters'
|
|
|
-import { getFeeAlgorithmName } from '@/constants/order'
|
|
|
+import { handleNoneValue } from '@/filters'
|
|
|
import { useEnum } from '@/hooks/enum'
|
|
|
import { useRequest } from '@/hooks/request'
|
|
|
import { useOperation } from '@/hooks/operation'
|
|
|
-import { getAccTradeTree, tradeConfigView } from '@/services/api/investor'
|
|
|
+import { getAccTradeTree, accTradeConfigView } from '@/services/api/investor'
|
|
|
import { CellProp } from '@pc/components/base/table-details/types'
|
|
|
import AppTable from '@pc/components/base/table/index.vue'
|
|
|
import AppOperation from '@pc/components/base/operation/index.vue'
|
|
|
import AppTableDetails from '@pc/components/base/table-details/index.vue'
|
|
|
import { i18n } from '@/stores'
|
|
|
|
|
|
-const { componentMap, componentId, openComponent, closeComponent, getActionButtons } = useOperation<Model.TradeConfigViewRsp>({
|
|
|
+const { componentMap, componentId, openComponent, closeComponent, getActionButtons } = useOperation<Model.AccTradeConfigViewRsp>({
|
|
|
onClose: (componentId) => {
|
|
|
getNodeList()
|
|
|
- if (componentId === 'investor_custom_tradecfg_modify') {
|
|
|
+ if (componentId === 'investor_custom_accountcfg_modify') {
|
|
|
onSearch()
|
|
|
}
|
|
|
- if (componentId === 'investor_custom_tradecfg_delete') {
|
|
|
- qs.value = {}
|
|
|
+ if (componentId === 'investor_custom_accountcfg_delete') {
|
|
|
+ selectedInvestor.value = undefined
|
|
|
+ selectedAccount.value = undefined
|
|
|
+ selectedGoods.value = undefined
|
|
|
data.value = undefined
|
|
|
}
|
|
|
}
|
|
|
@@ -134,19 +153,21 @@ const { componentMap, componentId, openComponent, closeComponent, getActionButto
|
|
|
|
|
|
const customerTypeEnum = useEnum('customerType')
|
|
|
const feetypeEnum = useEnum('feetype')
|
|
|
+const scfRiskMode = useEnum('SCFRiskMode')
|
|
|
|
|
|
const { global: { t } } = i18n
|
|
|
const formRef = shallowRef<FormInstance>()
|
|
|
-const qs = shallowRef<Partial<Model.TradeConfigViewReq>>({})
|
|
|
+const qs = shallowRef<Partial<Model.AccTradeConfigViewReq>>({})
|
|
|
+
|
|
|
const info = shallowRef<Partial<{
|
|
|
- groupName: string,
|
|
|
- marketName: string,
|
|
|
+ userName: string,
|
|
|
+ accountName: string,
|
|
|
goodsName: string
|
|
|
}>>({})
|
|
|
|
|
|
-const selectedInvestor = shallowRef<Model.InvestorTreeRsp>() // 选中的交易商对象
|
|
|
-const selectedAccount = shallowRef<Model.InvestorTreeRsp>() // 选中的资金账户对象
|
|
|
-const selectedGoods = shallowRef<Model.InvestorTreeRsp>() // 选中的商品对象
|
|
|
+const selectedInvestor = shallowRef<Model.AccTradeTreeRsp>() // 选中的交易商对象
|
|
|
+const selectedAccount = shallowRef<Model.AccTradeTreeRsp>() // 选中的资金账户对象
|
|
|
+const selectedGoods = shallowRef<Model.AccTradeTreeRsp>() // 选中的商品对象
|
|
|
|
|
|
// 交易商列表
|
|
|
const investorList = computed(() => nodeList.value.filter((e) => e.pid === '-1'))
|
|
|
@@ -161,7 +182,7 @@ const { dataList: nodeList, run: getNodeList } = useRequest(getAccTradeTree, {
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-const { data, run } = useRequest(tradeConfigView, {
|
|
|
+const { data, run } = useRequest(accTradeConfigView, {
|
|
|
manual: true,
|
|
|
onError: (err) => {
|
|
|
ElMessage.error(err)
|
|
|
@@ -169,32 +190,50 @@ const { data, run } = useRequest(tradeConfigView, {
|
|
|
})
|
|
|
|
|
|
const detailProps: CellProp[] = [
|
|
|
- { prop: 'usergroupid', label: 'investor.custom.tradecfg.usergroupid1', formatValue: () => info.value.groupName },
|
|
|
- { prop: 'marketid', label: 'investor.custom.tradecfg.marketid1', formatValue: () => info.value.marketName },
|
|
|
- { prop: 'goodsid', label: 'investor.custom.tradecfg.goodsid1', formatValue: () => info.value.goodsName },
|
|
|
- { prop: 'paramid', label: 'investor.custom.tradecfg.paramid', formatValue: (val) => customerTypeEnum.getEnumTypeName(val) },
|
|
|
- { prop: 'marketmarginvaluedisplay', label: 'investor.custom.tradecfg.marketmarginvaluedisplay' },
|
|
|
+ { prop: 'usergroupid', label: '交易商', formatValue: () => info.value.userName },
|
|
|
+ { prop: 'usergroupid', label: '资金账户', formatValue: () => info.value.accountName },
|
|
|
+ { prop: 'usergroupid', label: '商品', formatValue: () => info.value.goodsName },
|
|
|
+ { prop: 'paramid', label: '保证金类别', formatValue: (val) => customerTypeEnum.getEnumTypeName(val) },
|
|
|
]
|
|
|
|
|
|
const ruleColumns = computed<Model.TableColumn[]>(() => [
|
|
|
- { field: 'rulename', label: 'investor.custom.tradecfg.rulename' },
|
|
|
- { field: 'paramvalue', label: 'investor.custom.tradecfg.paramvalue' },
|
|
|
- { field: 'dvalue', label: 'investor.custom.tradecfg.dvalue', show: qs.value.usergroupid !== 0 },
|
|
|
- { field: 'cvalue', label: 'investor.custom.tradecfg.cvalue' },
|
|
|
+ { field: 'rulename', label: '扩展项' },
|
|
|
+ { field: 'paramvalue', label: '平台' },
|
|
|
+ { field: 'dvalue', label: '会员' },
|
|
|
+ { field: 'gvalue', label: '分组' },
|
|
|
+ { field: 'cvalue', label: '个性化' },
|
|
|
])
|
|
|
|
|
|
const feeColumns = computed<Model.TableColumn[]>(() => [
|
|
|
- { field: 'tradefeename', label: 'investor.custom.tradecfg.tradefeename' },
|
|
|
- { field: 'feealgorithm', label: 'investor.custom.tradecfg.feealgorithm', formatValue: (val) => getFeeAlgorithmName(val) },
|
|
|
- { field: 'exchangevalue', label: 'investor.custom.tradecfg.exchangevalue' },
|
|
|
- { field: 'dvalue', label: 'investor.custom.tradecfg.dvalue', show: qs.value.usergroupid !== 0 },
|
|
|
- { field: 'cvalue', label: 'investor.custom.tradecfg.cvalue' },
|
|
|
+ { field: 'tradefeename', label: '费用项' },
|
|
|
+ { field: 'exchangevalue', label: '平台' },
|
|
|
+ { field: 'dvalue', label: '会员' },
|
|
|
+ { field: 'gvalue', label: '分组' },
|
|
|
+ { field: 'cvalue', label: '个性化' },
|
|
|
])
|
|
|
|
|
|
// 表单验证规则
|
|
|
const formRules: FormRules = {
|
|
|
- usergroupid: [{ required: true }],
|
|
|
- marketid: [{ required: true }],
|
|
|
+ userid: [{
|
|
|
+ required: true,
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ if (selectedInvestor.value) {
|
|
|
+ callback()
|
|
|
+ } else {
|
|
|
+ callback(new Error('请选择交易商'))
|
|
|
+ }
|
|
|
+ },
|
|
|
+ }],
|
|
|
+ accountid: [{
|
|
|
+ required: true,
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ if (selectedAccount.value) {
|
|
|
+ callback()
|
|
|
+ } else {
|
|
|
+ callback(new Error('请选择资金账户'))
|
|
|
+ }
|
|
|
+ },
|
|
|
+ }],
|
|
|
goodsid: [{ required: true }],
|
|
|
}
|
|
|
|
|
|
@@ -211,16 +250,18 @@ const onMarketChange = () => {
|
|
|
|
|
|
const onSearch = () => {
|
|
|
qs.value = {
|
|
|
- usergroupid: selectedInvestor.value?.usergroupid,
|
|
|
- marketid: selectedAccount.value?.marketid,
|
|
|
+ userid: selectedGoods.value?.userid,
|
|
|
+ accountid: selectedGoods.value?.accountid,
|
|
|
+ marketid: selectedGoods.value?.marketid,
|
|
|
goodsid: selectedGoods.value?.goodsid,
|
|
|
+ tradetype: selectedGoods.value?.tradetype
|
|
|
}
|
|
|
nextTick(() => {
|
|
|
formRef.value?.validate((valid) => {
|
|
|
if (valid) {
|
|
|
info.value = {
|
|
|
- groupName: selectedInvestor.value?.name,
|
|
|
- marketName: selectedAccount.value?.name,
|
|
|
+ userName: selectedInvestor.value?.name,
|
|
|
+ accountName: selectedAccount.value?.name,
|
|
|
goodsName: selectedGoods.value?.name,
|
|
|
}
|
|
|
run(qs.value)
|