li.shaoyi 11 maanden geleden
bovenliggende
commit
f5b4eba1e9
23 gewijzigde bestanden met toevoegingen van 782 en 35 verwijderingen
  1. 1 1
      src/packages/pc/views/account/fundacct/components/bankinout/index.vue
  2. 1 1
      src/packages/pc/views/account/fundacct/components/bankstatement/index.vue
  3. 1 1
      src/packages/pc/views/account/fundacct/components/details/index.vue
  4. 8 6
      src/packages/pc/views/account/fundacct/components/password/index.vue
  5. 1 1
      src/packages/pc/views/account/fundacct/components/sign/cancel/index.vue
  6. 1 1
      src/packages/pc/views/account/fundacct/components/sign/edit/index.vue
  7. 1 1
      src/packages/pc/views/account/fundacct/components/sign/index.vue
  8. 1 1
      src/packages/pc/views/account/fundacct/index.vue
  9. 52 0
      src/packages/pc/views/account/tradingacct/components/close/index.vue
  10. 55 0
      src/packages/pc/views/account/tradingacct/components/details/index.vue
  11. 158 0
      src/packages/pc/views/account/tradingacct/components/edit/index.vue
  12. 58 0
      src/packages/pc/views/account/tradingacct/components/lock/index.vue
  13. 50 0
      src/packages/pc/views/account/tradingacct/components/password/index.vue
  14. 52 0
      src/packages/pc/views/account/tradingacct/components/recover/index.vue
  15. 99 0
      src/packages/pc/views/account/tradingacct/index.vue
  16. 5 4
      src/packages/pc/views/admin/role/components/edit/index.vue
  17. 5 4
      src/packages/pc/views/admin/user/components/edit/index.vue
  18. 3 3
      src/packages/pc/views/investor/manage/modification/components/audit/operate/index.vue
  19. 3 3
      src/packages/pc/views/investor/manage/user/components/account/edit/index.vue
  20. 5 4
      src/packages/pc/views/profitshare/institution/config/components/edit/index.vue
  21. 5 4
      src/packages/pc/views/profitshare/institution/group/components/edit/index.vue
  22. 63 0
      src/services/api/account/index.ts
  23. 154 0
      src/types/model/account.d.ts

+ 1 - 1
src/packages/pc/views/account/fundacct/components/bankinout/index.vue

@@ -1,4 +1,4 @@
-<!-- 自营管理-资金账户管理-出入金 -->
+<!-- 账号管理-资金账户管理-出入金 -->
 <template>
     <app-drawer :title="t('account.tradeacct.bankinout.title')" width="900" v-model:show="show" :refresh="refresh" :loading="loading">
         <el-form ref="formRef" class="el-form--horizontal" label-width="140px" :model="formData" :rules="formRules"

+ 1 - 1
src/packages/pc/views/account/fundacct/components/bankstatement/index.vue

@@ -1,4 +1,4 @@
-<!-- 自营管理-资金账户管理-资金流水 -->
+<!-- 账号管理-资金账户管理-资金流水 -->
 <template>
     <teleport to="#appPageTeleport">
         <app-view>

+ 1 - 1
src/packages/pc/views/account/fundacct/components/details/index.vue

@@ -1,4 +1,4 @@
-<!-- 自营管理-资金账户管理-详情 -->
+<!-- 账号管理-资金账户管理-详情 -->
 <template>
     <app-drawer :title="t('account.tradeacct.details.title')" width="900" v-model:show="show">
         <app-table-details :data="data" :label-width="160" :cell-props="detailProps" :column="2" />

+ 8 - 6
src/packages/pc/views/account/fundacct/components/password/index.vue

@@ -1,8 +1,8 @@
-<!-- 自营管理-资金账户管理-修改密码 -->
+<!-- 账号管理-资金账户管理-修改密码 -->
 <template>
-    <app-drawer :title="t('account.tradeacct.password.title')" width="480" v-model:show="show" :refresh="refresh" :loading="loading">
-        <el-form ref="formRef" class="el-form--vertical" label-width="100px" :model="formData" :rules="formRules"
-            :show-message="false">
+    <app-drawer :title="t('account.tradeacct.password.title')" width="480" v-model:show="show" :refresh="refresh"
+        :loading="loading">
+        <el-form ref="formRef" class="el-form--vertical" label-width="100px" :model="formData" :rules="formRules">
             <el-form-item :label="t('account.tradeacct.password.accountId')">
                 {{ record.accountId }}
             </el-form-item>
@@ -13,12 +13,14 @@
                 <el-popover placement="top" trigger="click" :width="244" :hide-after="0"
                     :content="validateRules.password.message">
                     <template #reference>
-                        <el-input type="password" v-model="formData.newPwd" maxlength="50" :placeholder="t('common.pleaseenter')" />
+                        <el-input type="password" v-model="formData.newPwd" maxlength="50"
+                            :placeholder="t('common.pleaseenter')" />
                     </template>
                 </el-popover>
             </el-form-item>
             <el-form-item :label="t('account.tradeacct.password.confirmPassword')" prop="confirmPassword">
-                <el-input type="password" v-model="formData.confirmPassword" maxlength="50" :placeholder="t('common.pleaseenter')" />
+                <el-input type="password" v-model="formData.confirmPassword" maxlength="50"
+                    :placeholder="t('common.pleaseenter')" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/account/fundacct/components/sign/cancel/index.vue

@@ -1,4 +1,4 @@
-<!-- 自营管理-资金账户管理-银行签约信息-解约 -->
+<!-- 账号管理-资金账户管理-银行签约信息-解约 -->
 <template>
     <app-drawer :title="t('account.tradeacct.sign.cancel.title')" width="900" v-model:show="show" :refresh="refresh" :loading="loading">
         <app-table-details :title="t('common.baseinfo')" :data="formData" :label-width="200" :cell-props="detailProps1" :column="2" />

+ 1 - 1
src/packages/pc/views/account/fundacct/components/sign/edit/index.vue

@@ -1,4 +1,4 @@
-<!-- 自营管理-资金账户管理-银行签约信息-编辑 -->
+<!-- 账号管理-资金账户管理-银行签约信息-编辑 -->
 <template>
     <app-drawer :title="t('account.tradeacct.sign.edit.title')" width="900" v-model:show="show" :refresh="refresh" :loading="loading">
         <el-form ref="formRef" class="el-form--horizontal" label-width="140px" :model="formData" :rules="formRules"

+ 1 - 1
src/packages/pc/views/account/fundacct/components/sign/index.vue

@@ -1,4 +1,4 @@
-<!-- 自营管理-资金账户管理-银行签约信息 -->
+<!-- 账号管理-资金账户管理-银行签约信息 -->
 <template>
     <teleport to="#appPageTeleport">
         <app-view>

+ 1 - 1
src/packages/pc/views/account/fundacct/index.vue

@@ -1,4 +1,4 @@
-<!-- 自营管理-资金账户管理 -->
+<!-- 账号管理-资金账户管理 -->
 <template>
     <app-view>
         <template #header>

+ 52 - 0
src/packages/pc/views/account/tradingacct/components/close/index.vue

@@ -0,0 +1,52 @@
+<!-- 账号管理-资金账户管理-注销 -->
+<template>
+    <app-drawer :title="t('common.alert')" v-model:show="show" :loading="loading" :refresh="refresh">
+        <div class="g-text-message">确认将账户停用?</div>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.cancel') }}</el-button>
+            <el-button type="primary" @click="onSubmit">{{ t('operation.confirm') }}</el-button>
+        </template>
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { tradingAccDelAccount } from '@/services/api/account'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
+
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.TradingAccRsp>,
+        required: true
+    }
+})
+
+const { global: { t } } = i18n
+const show = shallowRef(true)
+const refresh = shallowRef(false)
+const loading = shallowRef(false)
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
+const onSubmit = () => {
+    loading.value = true
+    tradingAccDelAccount({
+        data: {
+            loginid: props.record.loginid
+        }
+    }).then(() => {
+        ElMessage.success('注销成功')
+        onCancel(true)
+    }).catch((err) => {
+        ElMessage.error('注销失败:' + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
+</script>

+ 55 - 0
src/packages/pc/views/account/tradingacct/components/details/index.vue

@@ -0,0 +1,55 @@
+<!-- 账号管理-资金账户管理-详情 -->
+<template>
+    <app-drawer :title="t('account.tradeacct.details.title')" width="480" v-model:show="show">
+        <app-table-details :data="data" :label-width="120" :cell-props="detailProps" />
+        <template #footer>
+            <el-button @click="onCancel">{{ t('operation.close') }}</el-button>
+        </template>
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { formatDate } from '@/filters'
+import { useEnum } from '@/hooks/enum'
+import { useRequest } from '@/hooks/request'
+import { tradingAccView } from '@/services/api/account'
+import { CellProp } from '@pc/components/base/table-details/types'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppTableDetails from '@pc/components/base/table-details/index.vue'
+import { i18n } from '@/stores'
+
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.TradingAccRsp>,
+        required: true
+    }
+})
+
+const { global: { t } } = i18n
+
+const loginstatusEnum = useEnum('loginstatus') // 账号状态
+
+const show = shallowRef(true)
+
+const { data } = useRequest(tradingAccView, {
+    params: {
+        loginid: props.record.loginid,
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const detailProps: CellProp[] = [
+    { prop: 'loginid', label: '登录账户' },
+    { prop: 'loginstatus', label: '登录账号状态', formatValue: (val) => loginstatusEnum.getEnumTypeName(val) },
+    { prop: 'accountIdS', label: '授权资金账户', formatValue: (val) => val?.join(',') },
+    { prop: 'modifytime', label: '修改时间', formatValue: (val) => formatDate(val) }
+]
+
+const onCancel = () => {
+    show.value = false
+}
+</script>

+ 158 - 0
src/packages/pc/views/account/tradingacct/components/edit/index.vue

@@ -0,0 +1,158 @@
+<!-- 账号管理-交易账号管理-新增/修改 -->
+<template>
+    <app-drawer :title="record ? '修改' : '新增'" width="480" v-model:show="show" :refresh="refresh" :loading="loading">
+        <el-form ref="formRef" class="el-form--vertical" label-width="120px" :model="formData" :rules="formRules">
+            <el-form-item label="登录账户">
+                {{ formData.loginid }}
+            </el-form-item>
+            <el-form-item label="登录密码" prop="password" v-if="!record">
+                <el-popover placement="top" trigger="click" :width="244" :hide-after="0"
+                    :content="validateRules.password.message">
+                    <template #reference>
+                        <el-input type="password" v-model="formData.password" maxlength="50"
+                            :placeholder="t('common.pleaseenter')" />
+                    </template>
+                </el-popover>
+            </el-form-item>
+            <el-form-item label="确认密码" prop="confirmPassword" v-if="!record">
+                <el-input type="password" v-model="formData.confirmPassword" :placeholder="t('common.pleaseenter')" />
+            </el-form-item>
+            <el-form-item label="授权资金账户" prop="accountids">
+                <el-select v-model="selectedAccountIds" placeholder="请选择" multiple>
+                    <el-option v-for="item in initData?.taaccounts" :key="item.accountid" :label="item.accountid"
+                        :value="item.accountid" />
+                </el-select>
+            </el-form-item>
+        </el-form>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.cancel') }}</el-button>
+            <el-button type="primary" @click="onSubmit">{{ t('operation.submit') }}</el-button>
+        </template>
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { ref, PropType } from 'vue'
+import { ElMessage, FormInstance, FormRules } from 'element-plus'
+import { validateRules } from '@/constants/regex'
+import { useRequest } from '@/hooks/request'
+import { tradingAccView, tradingAccInitAdd, tradingAccAdd, tradingAccEdit } from '@/services/api/account'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
+
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.TradingAccRsp>
+    }
+})
+
+const { global: { t } } = i18n
+
+const formRef = ref<FormInstance>()
+const show = ref(true)
+const refresh = ref(false)
+const loading = ref(false)
+const selectedAccountIds = ref<number[]>([])
+
+const formData = ref<Model.TradingAccAddReq>({
+    accountids: '',
+    confirmPassword: '',
+    loginid: props.record?.loginid ?? 0,
+    loginusertype: 2,
+    password: ''
+})
+
+const { data: initData } = useRequest(tradingAccInitAdd, {
+    onSuccess: (res) => {
+        if (props.record) {
+            loading.value = true
+            tradingAccView({
+                data: {
+                    loginid: formData.value.loginid
+                }
+            }).then((res) => {
+                selectedAccountIds.value = res.data.accountIdS
+            }).finally(() => {
+                loading.value = false
+            })
+        } else {
+            formData.value.loginid = res.data.loginid
+        }
+    }
+})
+
+// 表单验证规则
+const formRules: FormRules = {
+    password: [{
+        required: true,
+        trigger: 'blur',
+        validator: (rule, value, callback) => {
+            if (validateRules.password.validate(value)) {
+                callback()
+            } else {
+                callback(new Error(t('account.tradeacct.password.tips1')))
+            }
+        },
+    }],
+    confirmPassword: [{
+        required: true,
+        trigger: 'blur',
+        validator: (rule, value, callback) => {
+            if (value === formData.value.password) {
+                callback()
+            } else {
+                callback(new Error(t('account.tradeacct.password.tips2')))
+            }
+        },
+    }],
+    accountids: [{
+        required: true,
+        validator: (rule, value, callback) => {
+            if (selectedAccountIds.value.length) {
+                callback()
+            } else {
+                callback(new Error(t('请选择授权资金账户')))
+            }
+        },
+    }]
+}
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
+const onSubmit = () => {
+    formRef.value?.validate((valid) => {
+        if (valid) {
+            const rawData = { ...formData.value }
+            rawData.accountids = selectedAccountIds.value.join(',')
+            loading.value = true
+
+            if (props.record) {
+                tradingAccEdit({
+                    data: rawData
+                }).then(() => {
+                    ElMessage.success('修改成功')
+                    onCancel(true)
+                }).catch((err) => {
+                    ElMessage.error('修改失败:' + err)
+                }).finally(() => {
+                    loading.value = false
+                })
+            } else {
+                tradingAccAdd({
+                    data: rawData
+                }).then(() => {
+                    ElMessage.success('新增成功')
+                    onCancel(true)
+                }).catch((err) => {
+                    ElMessage.error('新增失败:' + err)
+                }).finally(() => {
+                    loading.value = false
+                })
+            }
+        }
+    })
+}
+</script>

+ 58 - 0
src/packages/pc/views/account/tradingacct/components/lock/index.vue

@@ -0,0 +1,58 @@
+<!-- 账号管理-资金账户管理-锁定/解锁 -->
+<template>
+    <app-drawer :title="t('common.alert')" v-model:show="show" :loading="loading" :refresh="refresh">
+        <div class="g-text-message">
+            <span v-if="isLock">确认解锁该账户?</span>
+            <span v-else>确认锁定该账户?</span>
+        </div>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.cancel') }}</el-button>
+            <el-button type="primary" @click="onSubmit">{{ t('operation.confirm') }}</el-button>
+        </template>
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
+import { tradingAccLockAccount } from '@/services/api/account'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
+
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.TradingAccRsp>,
+        required: true
+    }
+})
+
+const { global: { t } } = i18n
+const show = shallowRef(true)
+const refresh = shallowRef(false)
+const loading = shallowRef(false)
+
+const isLock = computed(() => props.record.loginstatus === 2)
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
+const onSubmit = () => {
+    loading.value = true
+    tradingAccLockAccount({
+        data: {
+            loginid: props.record.loginid,
+            status: isLock.value ? 1 : 2
+        }
+    }).then(() => {
+        ElMessage.success(isLock.value ? '解锁成功' : '锁定成功')
+        onCancel(true)
+    }).catch((err) => {
+        ElMessage.error(isLock.value ? '解锁失败' : '锁定失败:' + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
+</script>

+ 50 - 0
src/packages/pc/views/account/tradingacct/components/password/index.vue

@@ -0,0 +1,50 @@
+<!-- 账号管理-资金账户管理-重置密码 -->
+<template>
+    <app-drawer :title="t('common.alert')" v-model:show="show" :loading="loading">
+        <div class="g-text-message">确认将密码重置?</div>
+        <template #footer>
+            <el-button @click="onCancel">{{ t('operation.cancel') }}</el-button>
+            <el-button type="primary" @click="onSubmit">{{ t('operation.confirm') }}</el-button>
+        </template>
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { tradingAccResetPwd } from '@/services/api/account'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
+
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.TradingAccRsp>,
+        required: true
+    }
+})
+
+const { global: { t } } = i18n
+const show = shallowRef(true)
+const loading = shallowRef(false)
+
+const onCancel = () => {
+    show.value = false
+}
+
+const onSubmit = () => {
+    loading.value = true
+    tradingAccResetPwd({
+        data: {
+            loginid: props.record.loginid
+        }
+    }).then(() => {
+        ElMessage.success('重置成功')
+        onCancel()
+    }).catch((err) => {
+        ElMessage.error('重置失败:' + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
+</script>

+ 52 - 0
src/packages/pc/views/account/tradingacct/components/recover/index.vue

@@ -0,0 +1,52 @@
+<!-- 账号管理-资金账户管理-恢复 -->
+<template>
+    <app-drawer :title="t('common.alert')" v-model:show="show" :loading="loading" :refresh="refresh">
+        <div class="g-text-message">确认恢复该登录账户?</div>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.cancel') }}</el-button>
+            <el-button type="primary" @click="onSubmit">{{ t('operation.confirm') }}</el-button>
+        </template>
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { tradingAccUndelAccount } from '@/services/api/account'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
+
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.TradingAccRsp>,
+        required: true
+    }
+})
+
+const { global: { t } } = i18n
+const show = shallowRef(true)
+const refresh = shallowRef(false)
+const loading = shallowRef(false)
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
+const onSubmit = () => {
+    loading.value = true
+    tradingAccUndelAccount({
+        data: {
+            loginid: props.record.loginid
+        }
+    }).then(() => {
+        ElMessage.success('恢复成功')
+        onCancel(true)
+    }).catch((err) => {
+        ElMessage.error('恢复失败:' + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
+</script>

+ 99 - 0
src/packages/pc/views/account/tradingacct/index.vue

@@ -0,0 +1,99 @@
+<!-- 账号管理-交易账号管理 -->
+<template>
+    <app-view>
+        <template #header>
+            <app-filter :option="filterOption" />
+        </template>
+        <app-table :data="dataList" :columns="tableColumns" :loading="loading">
+            <template #headerLeft>
+                <app-operation :data-list="getActionButtons(['account_tradingacct_add'])" @click="openComponent" />
+            </template>
+            <!-- 操作 -->
+            <template #operate="{ row }">
+                <app-operation size="small" :data-list="handleOperateButtons(row)"
+                    @click="(code: string) => openComponent(code, row)" circle />
+            </template>
+            <template #footer>
+                <app-pagination :total="total" v-model:page-size="pageSize" v-model:page-index="pageIndex"
+                    @change="onSearch" />
+            </template>
+        </app-table>
+        <component :is="componentMap.get(componentId)" v-bind="{ record }" @closed="closeComponent"
+            v-if="componentId" />
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef } from 'vue'
+import { ElMessage } from 'element-plus'
+import { formatDate } from '@/filters'
+import { useEnum } from '@/hooks/enum'
+import { useRequest } from '@/hooks/request'
+import { useDataFilter } from '@/hooks/datatable-v2'
+import { useOperation } from '@/hooks/operation'
+import { queryTradingAcc } from '@/services/api/account'
+import AppTable from '@pc/components/base/table/index.vue'
+import AppFilter from '@pc/components/base/table-filter-v2/index.vue'
+import AppPagination from '@pc/components/base/pagination/index.vue'
+import AppOperation from '@pc/components/base/operation/index.vue'
+import { i18n } from '@/stores'
+
+const loginstatusEnum = useEnum('loginstatus') // 账号状态
+
+const { global: { t } } = i18n
+
+const { componentMap, componentId, record, openComponent, closeComponent, getActionButtons } = useOperation<Model.TradingAccRsp>({
+    onClose: () => onSearch()
+})
+
+const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryTradingAcc, {
+    params: {
+        pageNum: 1,
+        pageSize: 20
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const tableColumns = shallowRef<Model.TableColumn[]>([
+    { field: 'loginid', label: '登录账号' },
+    { field: 'loginstatus', label: '账号状态', formatValue: (val) => loginstatusEnum.getEnumTypeName(val) },
+    { field: 'modifytime', label: '修改时间', formatValue: (val) => formatDate(val) },
+    { field: 'modifiername', label: '修改人' },
+    { field: 'operate', label: '操作', width: 220, fixed: 'right' }
+])
+
+const { filterOption, getQueryParams, resetFilters } = useDataFilter<Model.TradingAccReq>({
+    filters: [
+        { label: '登录账户', field: 'loginid' },
+        { label: '账户状态', field: 'loginstatus', options: () => loginstatusEnum.getEnumOptions() }
+    ],
+    buttons: [
+        { label: t('operation.search'), className: 'el-button--primary', onClick: () => onSearch() },
+        { label: t('operation.reset'), className: 'el-button--primary', onClick: () => resetFilters() }
+    ]
+})
+
+// 处理操作按钮
+const handleOperateButtons = (row: Model.TradingAccRsp) => {
+    const buttons = ['account_tradingacct_details']
+    if (row.loginstatus === 3) {
+        buttons.push('account_tradingacct_recover')
+    } else {
+        buttons.push('account_tradingacct_modify', 'account_tradingacct_password')
+        if (row.loginstatus === 1) {
+            buttons.push('account_tradingacct_lock')
+        } else {
+            buttons.push('account_tradingacct_unlock')
+        }
+        buttons.push('account_tradingacct_close')
+    }
+    return getActionButtons(buttons)
+}
+
+const onSearch = (clear = false) => {
+    const qs = getQueryParams(clear)
+    run(qs)
+}
+</script>

+ 5 - 4
src/packages/pc/views/admin/role/components/edit/index.vue

@@ -1,10 +1,11 @@
 <!-- 管理员管理-管理员角色管理-编辑 -->
 <template>
-    <app-drawer :title="t('admin.role.edit.title')" width="680" v-model:show="show" :refresh="refresh" :loading="loading">
-        <el-form ref="formRef" class="el-form--vertical" label-width="90px" :model="formData" :rules="formRules"
-            :show-message="false">
+    <app-drawer :title="t('admin.role.edit.title')" width="680" v-model:show="show" :refresh="refresh"
+        :loading="loading">
+        <el-form ref="formRef" class="el-form--vertical" label-width="90px" :model="formData" :rules="formRules">
             <el-form-item :label="t('admin.role.edit.rolename')" prop="rolename">
-                <el-input v-model="formData.rolename" :placeholder="t('common.pleaseenter')" :disabled="!!record?.autoid" />
+                <el-input v-model="formData.rolename" :placeholder="t('common.pleaseenter')"
+                    :disabled="!!record?.autoid" />
             </el-form-item>
             <el-form-item :label="t('admin.role.edit.sensitivefields')" prop="sensitivefields">
                 <el-checkbox-group v-model="checkedValue">

+ 5 - 4
src/packages/pc/views/admin/user/components/edit/index.vue

@@ -1,8 +1,8 @@
 <!-- 管理员管理-管理员管理-编辑 -->
 <template>
-    <app-drawer :title="t('admin.user.edit.title')" width="480" v-model:show="show" :refresh="refresh" :loading="loading">
-        <el-form ref="formRef" class="el-form--vertical" label-width="80px" :model="formData" :rules="formRules"
-            :show-message="false">
+    <app-drawer :title="t('admin.user.edit.title')" width="480" v-model:show="show" :refresh="refresh"
+        :loading="loading">
+        <el-form ref="formRef" class="el-form--vertical" label-width="80px" :model="formData" :rules="formRules">
             <el-form-item :label="t('admin.user.edit.logincode')" prop="logincode">
                 <el-input v-model="formData.logincode" maxlength="50" :placeholder="t('common.pleaseenter')"
                     :disabled="!!record?.autoid" />
@@ -21,7 +21,8 @@
                 </el-select>
             </el-form-item>
             <el-form-item :label="t('admin.user.edit.remark')" prop="remark">
-                <el-input type="textarea" v-model="formData.remark" maxlength="200" :rows="2" :placeholder="t('common.pleaseenter')" />
+                <el-input type="textarea" v-model="formData.remark" maxlength="200" :rows="2"
+                    :placeholder="t('common.pleaseenter')" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 3 - 3
src/packages/pc/views/investor/manage/modification/components/audit/operate/index.vue

@@ -1,8 +1,8 @@
 <!-- 交易商管理-交易商管理-交易商管理-审核-操作 -->
 <template>
-    <app-drawer :title="t('investor.manage.modification.aduit.operate.title')" width="480" v-model:show="show" :refresh="refresh" :loading="loading">
-        <el-form ref="formRef" class="el-form--vertical" label-width="100px" :model="formData" :rules="formRules"
-            :show-message="false">
+    <app-drawer :title="t('investor.manage.modification.aduit.operate.title')" width="480" v-model:show="show"
+        :refresh="refresh" :loading="loading">
+        <el-form ref="formRef" class="el-form--vertical" label-width="100px" :model="formData" :rules="formRules">
             <el-form-item :label="t('investor.manage.modification.aduit.operate.auditflag')" prop="auditflag">
                 <el-radio-group v-model="formData.auditflag">
                     <el-radio :value="1">{{ t('investor.manage.modification.aduit.operate.auditflag1') }}</el-radio>

+ 3 - 3
src/packages/pc/views/investor/manage/user/components/account/edit/index.vue

@@ -1,8 +1,8 @@
 <!-- 交易商管理-交易商管理-交易商管理-资金账户-编辑 -->
 <template>
-    <app-drawer :title="t('investor.manage.user.account.edit.title')" width="480" v-model:show="show" :refresh="refresh" :loading="loading">
-        <el-form ref="formRef" class="el-form--vertical" label-width="100px" :model="formData" :rules="formRules"
-            :show-message="false">
+    <app-drawer :title="t('investor.manage.user.account.edit.title')" width="480" v-model:show="show" :refresh="refresh"
+        :loading="loading">
+        <el-form ref="formRef" class="el-form--vertical" label-width="100px" :model="formData" :rules="formRules">
             <el-form-item :label="t('investor.manage.user.account.edit.accountid')">
                 {{ selectedItem.accountid }}
             </el-form-item>

+ 5 - 4
src/packages/pc/views/profitshare/institution/config/components/edit/index.vue

@@ -1,8 +1,8 @@
 <!-- 分润管理-机构分润配置-子机构分润配置-编辑 -->
 <template>
-    <app-drawer :title="t('profitshare.institution.config.edit.title')" width="480" v-model:show="show" :refresh="refresh" :loading="loading">
-        <el-form ref="formRef" class="el-form--vertical" label-width="100px" :model="formData" :rules="formRules"
-            :show-message="false">
+    <app-drawer :title="t('profitshare.institution.config.edit.title')" width="480" v-model:show="show"
+        :refresh="refresh" :loading="loading">
+        <el-form ref="formRef" class="el-form--vertical" label-width="100px" :model="formData" :rules="formRules">
             <el-form-item :label="t('profitshare.institution.config.edit.feeName')">
                 {{ config.feeName }}
             </el-form-item>
@@ -31,7 +31,8 @@
                 </el-radio-group>
             </el-form-item>
             <el-form-item :label="t('profitshare.institution.config.edit.dividevalue')" prop="dividevalue">
-                <el-input-number v-model="formData.dividevalue" :placeholder="t('common.pleaseenter')" :min="0" :max="100" />
+                <el-input-number v-model="formData.dividevalue" :placeholder="t('common.pleaseenter')" :min="0"
+                    :max="100" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 5 - 4
src/packages/pc/views/profitshare/institution/group/components/edit/index.vue

@@ -1,8 +1,8 @@
 <!-- 分润管理-机构分润配置-子机构分组管理-编辑 -->
 <template>
-    <app-drawer :title="t('profitshare.institution.group.edit.title')" width="480" v-model:show="show" :refresh="refresh" :loading="loading">
-        <el-form ref="formRef" class="el-form--vertical" label-width="80px" :model="formData" :rules="formRules"
-            :show-message="false">
+    <app-drawer :title="t('profitshare.institution.group.edit.title')" width="480" v-model:show="show"
+        :refresh="refresh" :loading="loading">
+        <el-form ref="formRef" class="el-form--vertical" label-width="80px" :model="formData" :rules="formRules">
             <el-form-item :label="t('profitshare.institution.group.edit.subareagrouptype')" prop="subareagrouptype">
                 <el-select v-model="formData.subareagrouptype">
                     <el-option :label="getProfitShareGroupName(ProfitShareGroup.SubInstitution)"
@@ -13,7 +13,8 @@
                 <el-input v-model="formData.subareagroupname" :placeholder="t('common.pleaseenter')" />
             </el-form-item>
             <el-form-item :label="t('profitshare.institution.group.edit.remark')" prop="remark">
-                <el-input type="textarea" v-model="formData.remark" maxlength="200" :rows="2" :placeholder="t('common.pleaseenter')" />
+                <el-input type="textarea" v-model="formData.remark" maxlength="200" :rows="2"
+                    :placeholder="t('common.pleaseenter')" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 63 - 0
src/services/api/account/index.ts

@@ -90,4 +90,67 @@ export function inOrOutAmount(options: CommonFetchOptions<{ request: Model.inOrO
  */
 export function queryesignrecord(options: CommonFetchOptions<{ request: Model.SignRecordReq; response: Model.SignRecordRsp[] }>) {
     return httpClient.commonRequest('/query/queryesignrecord', 'get', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->获取列表
+ */
+export function queryTradingAcc(options: CommonFetchOptions<{ request: Model.TradingAccReq; response: Model.TradingAccRsp; }>) {
+    return httpClient.commonRequest('/tradingAcc/query', 'get', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->新增
+ */
+export function tradingAccAdd(options: CommonFetchOptions<{ request: Model.TradingAccAddReq; }>) {
+    return httpClient.commonRequest('/tradingAcc/add', 'post', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->修改
+ */
+export function tradingAccEdit(options: CommonFetchOptions<{ request: Model.TradingAccAddReq; }>) {
+    return httpClient.commonRequest('/tradingAcc/edit', 'post', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->新增-->初始化登录账户及授权资金账户
+ */
+export function tradingAccInitAdd(options: CommonFetchOptions<{ response: Model.TradingAccInitAddRsp; }>) {
+    return httpClient.commonRequest('/tradingAcc/initAdd', 'get', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->详情
+ */
+export function tradingAccView(options: CommonFetchOptions<{ request: Model.TradingAccViewReq; response: Model.TradingAccViewRsp; }>) {
+    return httpClient.commonRequest('/tradingAcc/view', 'get', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->重置密码
+ */
+export function tradingAccResetPwd(options: CommonFetchOptions<{ request: Model.TradingAccResetPwdReq; }>) {
+    return httpClient.commonRequest('/tradingAcc/resetPwd', 'get', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->锁定
+ */
+export function tradingAccLockAccount(options: CommonFetchOptions<{ request: Model.TradingAccLockAccountReq; }>) {
+    return httpClient.commonRequest('/tradingAcc/lockAccount', 'get', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->注销
+ */
+export function tradingAccDelAccount(options: CommonFetchOptions<{ request: Model.TradingAccDelAccountReq; }>) {
+    return httpClient.commonRequest('/tradingAcc/delAccount', 'get', options)
+}
+
+/**
+ * 账号管理-->交易账号管理-->恢复
+ */
+export function tradingAccUndelAccount(options: CommonFetchOptions<{ request: Model.TradingAccUndelAccountReq; }>) {
+    return httpClient.commonRequest('/tradingAcc/undelAccount', 'get', options)
 }

+ 154 - 0
src/types/model/account.d.ts

@@ -306,4 +306,158 @@ declare namespace Model {
         operateType: number; // 操作类型
         relationOrderId: string; // 关联单号
     }
+
+    /** 账号管理-->交易账号管理-->获取列表 请求 */
+    interface TradingAccReq {
+        loginid?: number; // 登录账号
+        loginstatus?: number; // 账户状态
+        loginusertype?: number;
+        pageNum: number;
+        pageSize: number;
+        userid?: number;
+    }
+
+    /** 账号管理-->交易账号管理-->获取列表 响应 */
+    interface TradingAccRsp {
+        loginid: number; // 登录账号
+        loginstatus: number; // 账号状态
+        modifiername: number; // 修改人
+        modifytime: number; // 修改时间
+    }
+
+    /** 账号管理-->交易账号管理-->新增 请求 */
+    interface TradingAccAddReq {
+        accountids: string; // 授权资金账户
+        confirmPassword: string; // 确认密码
+        loginid: number; // 登录账号
+        loginusertype: number;
+        password: string; // 登录密码
+    }
+
+    /** 账号管理-->交易账号管理-->新增-->初始化登录账户及授权资金账户 响应 */
+    interface TradingAccInitAddRsp {
+        loginid: number;
+        taaccounts: {
+            accountflag: number; // 账户标识 - 0 (默认为0, 当上级账户与本账户的关联用户均为自己时更新为1)
+            accountid: number; // 资金账户ID
+            accountname: string; // 账户名称
+            avaiablemoney: number;
+            avaiableoutmoney: number;
+            balance: number; // 期初余额
+            capitalbalance: number; // 本金余额[外部子母账户实际出入金余额]
+            changeflag: number; // 变动标志(当前账户资金有任何变动更新为1系统结算时更新0;供清算时使用) 0:无变动 1:有变动
+            changetime: string; // 账户状态变更时间
+            children: [];
+            closepl: number; // 今日平仓盈亏
+            creditdecrease: number; // 今日授信减少
+            creditincrease: number; // 今日授信增加
+            cur_risk_rate: number;
+            curdebt: number; // 期末欠款
+            currencyid: number; // 货币ID
+            currentbalance: number; // 期末余额
+            floatnetvalue: number;
+            floatpl: number;
+            freezecharge: number; // 手续费冻结
+            freezemargin: number; // 冻结保证金
+            fromaccountid: number; // 所属上级账户
+            inamount: number; // 今日入金金额(包括三方入金)
+            ismain: number; // 是否母账号 0:不是母账户 1:是母账户
+            ismarketaccount: number; // 是否机构接单账号 0:不是 1:是
+            isreckonaccount: number; // 是否机构分润账号 0:不是 1:是
+            modifierid: number; // 修改人
+            modifysrc: number; // 修改来源 - 1:管理端 2:终端
+            modifytime: string; // 修改时间
+            mortgagecredit: number; // 授信金额
+            oridebt: number; // 期初欠款
+            orifreezecharge: number; // 期初手续费冻结
+            orifreezemargin: number; // 期初冻结保证金
+            orimortgagecredit: number; // 期初授信金额
+            oriothercredit: number; // 期初其它授信金额
+            oriotherfreezemargin: number; // 期初其他冻结保证金(出金冻结资金 交割买方冻结 申购冻结 全款买入 商城买入)
+            orioutamountfreeze: number; // 期初出金冻结
+            oriusedmargin: number; // 期初占用保证金
+            othercredit: number; // 其它授信金额
+            othercreditdecrease: number; // 今日其它授信减少
+            othercreditincrease: number; // 今日其它授信增加
+            otherfreezemargin: number; // 其他冻结保证金(交割买方冻结 申购冻结 全款买入 商城买入)
+            otherincome: number; // 其他收入(交割收款 申购收款 全款卖出 商城卖出 买家退货 会员手续费收入)
+            otherpay: number; // 其他支出(交割付款 申购付款 全款买入 商城买入 卖家退货)
+            outamount: number; // 今日出金金额(包括三方出金)
+            outamountfreeze: number; // 出金冻结
+            outthreshold: number; // 出金阈值
+            parentaccountid: number; // 所属根账号
+            password: string; // 资金密码
+            paycharge: number; // 今日手续费支出
+            relatedaccountstatus: number; // 关联用户交易权限状态 - 1:正常(可交易) 2:受限(可平仓,不可建仓) 3:冻结(不可交易)
+            relateduserid: number; // 关联用户
+            serivcegroup: number; // 服务分组
+            signstatus: number; // 签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中
+            sublevelpath: string; // 账号层级路径(逗号分隔,首尾加逗号)
+            taaccounttype: number; // 账号类型 - 1:外部账号 2:内部账号 3:内部做市自营账号 4:内部做市接单账号
+            thirdinamount: number; // 今日三方入金
+            thirdoutamount: number; // 今日三方出金
+            tradestatus: number; // 交易状态 - 1:正常 2:受限 3:冻结(停用) 4:禁止建仓(人工受限) 5:禁止交易(人工冻结) 6:待激活 7:已删除(注销)
+            tradestatuschangetime: string; // 激活时间
+            transferamount: number; // 今日划转金额(母子账号资金划转,从划入账号为正,从账号划出为负)
+            usedmargin: number; // 占用保证金
+            userid: number; // 用户ID
+        }[];
+    }
+
+    /** 账号管理-->交易账号管理-->详情 请求 */
+    interface TradingAccViewReq {
+        loginid: number;
+    }
+
+    /** 账号管理-->交易账号管理-->详情 响应 */
+    interface TradingAccViewRsp {
+        accountIdS: number[];
+        accountname: string; // 账户名称
+        canoutin: number; // 是否可出入金 - 0:不可 1:可
+        clientroleid: number; // 终端角色ID
+        haslogined: number; // 是否已登录 - 0:未登录 1:已登录
+        hasupdatedpwd: number; // 是否已更改密码 - 0:未修改 1:已修改
+        lastloginip: string; // 最新登录地址
+        lastloginmode: number; // 最新登录方式(客户端类型) - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端安卓 4:网页客户端 5:微信客户端 6:手机客户端苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江)
+        lastloginremark: string; // 最新登录描述
+        lastlogintime: string; // 最新登录时间
+        logincode: string; // 登录代码
+        loginfailnum: number; // 连续登录失败次数(登录成功时清零)
+        loginid: number; // 登陆账号
+        loginport: number; // 最新登录端口
+        loginstatus: number; // 登录账号状态 1:正常 2:冻结(停用) 3:无效(注销)
+        loginusertype: number; // 登录账号类型 - 1:投资者 2:机构交易员
+        mobile: string; // 手机号码(加密存储)
+        modifierid: number; // 修改人
+        modifysrc: number; // 修改人来源 - 1:管理端 2:终端
+        modifytime: string; // 修改时间
+        password: string; // 登陆密码
+        pwdwrongcount: number; // 密码错误次数
+        relateduserid: number; // 关联用户ID(机构)
+        subjectid: number; // 所属部门(管理部门)
+        taaccountrighttype: number; // 资金账号权限类型 - 1:不选默认为所有权限 2:不选默认为无权限
+        unfreezetime: string; // 账户解冻时间
+        userid: number; // 用户ID
+    }
+
+    /** 账号管理-->交易账号管理-->重置密码 请求 */
+    interface TradingAccResetPwdReq {
+        loginid: number;
+    }
+
+    /** 账号管理-->交易账号管理-->锁定 请求 */
+    interface TradingAccLockAccountReq {
+        loginid: number;
+        status: number;
+    }
+
+    /** 账号管理-->交易账号管理-->注销 请求 */
+    interface TradingAccDelAccountReq {
+        loginid: number;
+    }
+
+    /** 账号管理-->交易账号管理-->恢复 请求 */
+    interface TradingAccUndelAccountReq {
+        loginid: number;
+    }
 }