li.shaoyi 7 meses atrás
pai
commit
2a14347bf6
21 arquivos alterados com 109 adições e 102 exclusões
  1. 14 2
      src/packages/pc/components/modules/enum/index.vue
  2. 3 1
      src/packages/pc/views/account/fundacct/components/details/index.vue
  3. 5 2
      src/packages/pc/views/account/fundacct/components/sign/edit/index.vue
  4. 7 5
      src/packages/pc/views/investor/manage/user/components/details/view.vue
  5. 2 6
      src/packages/pc/views/investor/manage/user/components/edit/index.vue
  6. 8 7
      src/packages/pc/views/investor/user/open/components/details/index.vue
  7. 4 16
      src/packages/pc/views/investor/user/open/components/edit/index.vue
  8. 3 11
      src/packages/pc/views/member/institution/open/components/edit/index.vue
  9. 8 4
      src/packages/pc/views/member/institution/role/components/details/index.vue
  10. 2 1
      src/packages/pc/views/member/institution/role/index.vue
  11. 3 1
      src/packages/pc/views/member/institution/user/components/account/index.vue
  12. 7 3
      src/packages/pc/views/member/institution/user/components/details/index.vue
  13. 7 9
      src/packages/pc/views/member/institution/user/components/edit/index.vue
  14. 3 2
      src/packages/pc/views/member/subinstitution/addition/index.vue
  15. 5 3
      src/packages/pc/views/member/subinstitution/manage/components/details/index.vue
  16. 6 14
      src/packages/pc/views/member/subinstitution/manage/components/edit/index.vue
  17. 5 7
      src/packages/pc/views/member/subinstitution/manage/index.vue
  18. 5 6
      src/packages/pc/views/member/subinstitution/user/index.vue
  19. 10 0
      src/services/api/user/index.ts
  20. 1 1
      src/types/model/account.d.ts
  21. 1 1
      src/types/model/member.d.ts

+ 14 - 2
src/packages/pc/components/modules/enum/index.vue

@@ -1,5 +1,11 @@
 <template>
-    <el-select v-model="selectedValue" :empty-values="[null, undefined, ...emptyValues]" :placeholder="placeholder">
+    <el-radio-group v-model="selectedValue" :disabled="disabled" v-if="type === 'radio'">
+        <template v-for="item in getEnumOptions()" :key="item.autoid">
+            <el-radio :label="item.label" :value="item.value" />
+        </template>
+    </el-radio-group>
+    <el-select v-model="selectedValue" :empty-values="[null, undefined, ...emptyValues]" :placeholder="placeholder"
+        v-else>
         <template v-for="item in getEnumOptions()" :key="item.autoid">
             <el-option :label="item.label" :value="item.value" />
         </template>
@@ -7,12 +13,15 @@
 </template>
 
 <script lang="ts" setup>
-import { computed } from 'vue'
+import { computed, PropType } from 'vue'
 import { useEnum } from '@/hooks/enum'
 import { i18n } from '@/stores'
 
 const props = defineProps({
     modelValue: Number,
+    type: {
+        type: String as PropType<'radio' | 'select'>,
+    },
     code: {
         type: String,
         required: true
@@ -24,6 +33,9 @@ const props = defineProps({
     placeholder: {
         type: String,
         default: i18n.global.t('common.pleasechoice')
+    },
+    disabled: {
+        type: Boolean
     }
 })
 

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

@@ -79,6 +79,8 @@ const flagEnum = useEnum('flag')
 const buyspotrighttypeEnum = useEnum('buyspotrighttype')
 // 卖大厅权限
 const marketbstypeEnum = useEnum('marketbstype')
+// 币种
+const currencyEnum = useEnum('currency')
 
 const { data } = useRequest(queryTaAccountDetail, {
     params: {
@@ -93,7 +95,7 @@ const detailProps: CellProp[] = [
     { prop: 'accountId', label: 'account.fundacct.details.accountId' },
     { prop: 'accountName', label: 'account.fundacct.details.accountName' },
     { prop: 'isMain', label: 'account.fundacct.details.isMain', formatValue: (val) => mainaccounttypeEnum.getEnumTypeName(val) },
-    { prop: 'currency', label: 'account.fundacct.details.currency' },
+    { prop: 'currency', label: 'account.fundacct.details.currency', formatValue: (val) => currencyEnum.getEnumTypeName(val) },
     { prop: 'taAccountType', label: 'account.fundacct.details.taAccountType', formatValue: (val) => accounttypeEnum.getEnumTypeName(val) },
     { prop: 'changeFlag', label: 'account.fundacct.details.changeFlag', formatValue: (val) => flagEnum.getEnumTypeName(val) },
     { prop: 'tradeStatus', label: 'account.fundacct.details.tradeStatus', formatValue: (val) => traderstatusEnum.getEnumTypeName(val) },

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

@@ -7,7 +7,7 @@
             <fieldset class="g-fieldset el-form--horizontal">
                 <legend class="g-fieldset__legend">{{ t('common.baseinfo') }}</legend>
                 <el-form-item :label="t('account.fundacct.sign.edit.userinfotype')" v-if="userInfo">
-                    {{ getUserInfoTypeName(userInfo.userinfotype) }}
+                    {{ userinfotypeEnum.getEnumTypeName(userInfo.userinfotype) }}
                 </el-form-item>
                 <el-form-item :label="t('account.fundacct.sign.edit.cardtypeid')" v-if="userInfo">
                     {{ userInfo.cardtypeid }}
@@ -61,9 +61,10 @@ import { shallowRef, reactive, PropType, toRaw } from 'vue'
 import { ElMessage, FormInstance, FormRules } from 'element-plus'
 import { decryptAES } from '@/services/crypto'
 import { handleNoneValue } from '@/filters'
+import { useEnum } from '@/hooks/enum'
 import { useRequest } from '@/hooks/request'
 import { getSignBankById, dealAccountSignInit, queryCommonFlag, dealAccountSign } from '@/services/api/account'
-import { getUserInfoTypeName, UserInfoType } from '@/constants/member'
+import {  UserInfoType } from '@/constants/member'
 import { i18n } from '@/stores'
 import { queryBooleanForAmount } from '@/services/api/bank'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
@@ -79,6 +80,8 @@ const props = defineProps({
     }
 })
 
+const userinfotypeEnum = useEnum('userinfotype') // 所有者类型
+
 const { global: { t } } = i18n
 const formRef = shallowRef<FormInstance>()
 const show = shallowRef(true)

+ 7 - 5
src/packages/pc/views/investor/manage/user/components/details/view.vue

@@ -90,9 +90,9 @@
             </template>
             <!-- 性别 -->
             <template #sex="{ value }">
-                <p>{{ getGenderName(value) }}</p>
+                <p>{{ sexEnum.getEnumTypeName(value) }}</p>
                 <p class="g-red" v-if="newData && newData.userinfoDetailVo.sex !== value">
-                    {{ getGenderName(newData.userinfoDetailVo.sex) }}
+                    {{ sexEnum.getEnumTypeName(newData.userinfoDetailVo.sex) }}
                 </p>
             </template>
             <!-- 手机号 -->
@@ -219,7 +219,7 @@ import { ref, computed } from 'vue'
 import { handleNoneValue, formatDate, getFirstPathFullUrl } from '@/filters'
 import { decryptAES } from '@/services/crypto'
 import { useEnum } from '@/hooks/enum'
-import { UserInfoType, getGenderName } from '@/constants/member'
+import { UserInfoType } from '@/constants/member'
 import { useRequest } from '@/hooks/request'
 import { queryInvestorListDetail } from '@/services/api/investor'
 import { CellProp } from '@pc/components/base/table-details/types'
@@ -258,6 +258,8 @@ const modifystatusEnum = useEnum('modifystatus')
 const biznatureEnum = useEnum('biznature')
 // 证件类型
 const certificatetypeEnum = useEnum('certificatetype')
+// 性别
+const sexEnum = useEnum('Sex')
 
 useRequest(queryInvestorListDetail, {
     params: {
@@ -328,7 +330,7 @@ const detailProps2 = computed<CellProp[]>(() => {
             { prop: 'cardTypeId', label: 'investor.manage.user.details.cardTypeId' },
             { prop: 'cardNum', label: 'investor.manage.user.details.cardNum' },
             { prop: 'company', label: 'investor.manage.user.details.company' },
-            { prop: 'sex', label: 'investor.manage.user.details.sex', formatValue: (val) => getGenderName(val) },
+            { prop: 'sex', label: 'investor.manage.user.details.sex' },
             { prop: 'mobile', label: 'investor.manage.user.details.mobile' },
             { prop: 'telPhone', label: 'investor.manage.user.details.telPhone' },
             { prop: 'address', label: 'investor.manage.user.details.address' },
@@ -348,7 +350,7 @@ const detailProps2 = computed<CellProp[]>(() => {
             { prop: 'bizNature', label: 'investor.manage.user.details.bizNature' },
             { prop: 'legalPersonName', label: 'investor.manage.user.details.legalPersonName' },
             { prop: 'contactName', label: 'investor.manage.user.details.contactName' },
-            { prop: 'sex', label: 'investor.manage.user.details.sex', formatValue: (val) => getGenderName(val) },
+            { prop: 'sex', label: 'investor.manage.user.details.sex' },
             { prop: 'mobile', label: 'investor.manage.user.details.mobile' },
             { prop: 'telPhone', label: 'investor.manage.user.details.telPhone' },
             { prop: 'address', label: 'investor.manage.user.details.address' },

+ 2 - 6
src/packages/pc/views/investor/manage/user/components/edit/index.vue

@@ -60,11 +60,7 @@
                     </el-form-item>
                 </template>
                 <el-form-item :label="t('investor.manage.user.edit.sex')" prop="sex">
-                    <el-radio-group v-model="formData.userinfoDetailVo.sex">
-                        <template v-for="item in getGenderList()" :key="item.value">
-                            <el-radio :label="item.label" :value="item.value" />
-                        </template>
-                    </el-radio-group>
+                    <app-enum code="Sex" type="radio" v-model="formData.userinfoDetailVo.sex" />
                 </el-form-item>
                 <el-form-item :label="t('investor.manage.user.edit.company')" prop="company" v-if="isPerson">
                     <el-input v-model="formData.userinfoDetailVo.company" maxlength="50"
@@ -160,7 +156,7 @@ import { useEnum } from '@/hooks/enum'
 import { useRequest } from '@/hooks/request'
 import { getConfigValue } from '@/business/common'
 import { investorEdit, queryInvestorListDetail } from '@/services/api/investor'
-import { getGenderList, UserInfoType } from '@/constants/member'
+import { UserInfoType } from '@/constants/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 import AppUpload from '@pc/components/base/upload/index.vue'
 import AppEnum from '@pc/components/modules/enum/index.vue'

+ 8 - 7
src/packages/pc/views/investor/user/open/components/details/index.vue

@@ -61,7 +61,7 @@ import { reactive, PropType, computed } from 'vue'
 import { ElMessage } from 'element-plus'
 import { getFirstPathFullUrl, handleNoneValue } from '@/filters'
 import { decryptAES } from '@/services/crypto'
-import { getUserInfoTypeName, getGenderName, UserInfoType } from '@/constants/member'
+import { UserInfoType } from '@/constants/member'
 import { useEnum } from '@/hooks/enum'
 import { useRequest } from '@/hooks/request'
 import { queryInvestorDetail } from '@/services/api/investor'
@@ -88,10 +88,11 @@ const state = reactive({
     auditflag: 0
 })
 
-// 证件类型
-const certificatetypeEnum = useEnum('certificatetype')
-// 开户状态
-const userstateEnum = useEnum('investorOpenStatus')
+
+const certificatetypeEnum = useEnum('certificatetype') // 证件类型
+const userstateEnum = useEnum('investorOpenStatus') // 开户状态
+const sexEnum = useEnum('Sex') // 性别
+const userinfotypeEnum = useEnum('userinfotype') // 所有者类型
 
 const { data } = useRequest(queryInvestorDetail, {
     params: {
@@ -116,13 +117,13 @@ const detailProps = computed(() => {
     const isPerson = data.value?.userinfotype === UserInfoType.Personal
     const result: CellProp[] = [
         { prop: 'username', formatLabel: () => isPerson ? 'investor.user.open.details.username' : 'investor.user.open.details.username1' },
-        { prop: 'userinfotype', label: 'investor.user.open.details.userinfotype', formatValue: (val) => getUserInfoTypeName(val) },
+        { prop: 'userinfotype', label: 'investor.user.open.details.userinfotype', formatValue: (val) => userinfotypeEnum.getEnumTypeName(val) },
         { prop: 'cardtype', label: 'investor.user.open.details.cardtype', formatValue: (val) => certificatetypeEnum.getEnumTypeName(val) },
         { prop: 'cardnum', label: 'investor.user.open.details.cardnum', formatValue: (val) => decryptAES(val) },
         { prop: 'pathname', label: 'investor.user.open.details.pathname' },
         { prop: 'legalpersonname', label: 'investor.user.open.details.legalpersonname', show: !isPerson },
         { prop: 'contactname', label: 'investor.user.open.details.contactname', show: !isPerson },
-        { prop: 'sex', label: 'investor.user.open.details.sex', formatValue: (val) => getGenderName(val) },
+        { prop: 'sex', label: 'investor.user.open.details.sex', formatValue: (val) => sexEnum.getEnumTypeName(val) },
         { prop: 'mobilephone', label: 'investor.user.open.details.mobilephone', formatValue: (val) => decryptAES(val) },
         { prop: 'postalcode', label: 'investor.user.open.details.postalcode' },
         { prop: 'wechat', label: 'investor.user.open.details.wechat', formatValue: (val) => decryptAES(val) },

+ 4 - 16
src/packages/pc/views/investor/user/open/components/edit/index.vue

@@ -24,22 +24,14 @@
             </el-form-item>
             <el-form-item class="el-form-item--row" :label="t('investor.user.open.edit.userinfotype')"
                 prop="userinfotype">
-                <el-radio-group v-model="formData.userinfotype" :disabled="!!record?.userId">
-                    <template v-for="item in getUserInfoTypeList()" :key="item.value">
-                        <el-radio :label="item.label" :value="item.value" />
-                    </template>
-                </el-radio-group>
+                <app-enum code="userinfotype" type="radio" v-model="formData.userinfotype" :disabled="!!record?.userId" />
             </el-form-item>
             <template v-if="isPerson">
                 <el-form-item :label="t('investor.user.open.edit.username')" prop="username">
                     <el-input v-model="formData.username" maxlength="50" :placeholder="t('common.pleaseenter')" />
                 </el-form-item>
                 <el-form-item :label="t('investor.user.open.edit.sex')" prop="sex">
-                    <el-radio-group v-model="formData.sex">
-                        <template v-for="item in getGenderList()" :key="item.value">
-                            <el-radio :label="item.label" :value="item.value" />
-                        </template>
-                    </el-radio-group>
+                    <app-enum code="Sex" type="radio" v-model="formData.sex" />
                 </el-form-item>
             </template>
             <template v-else>
@@ -108,11 +100,7 @@
                     <el-input v-model="formData.contactname" maxlength="50" :placeholder="t('common.pleaseenter')" />
                 </el-form-item>
                 <el-form-item :label="t('investor.user.open.edit.sex')" prop="sex">
-                    <el-radio-group v-model="formData.sex">
-                        <template v-for="item in getGenderList()" :key="item.value">
-                            <el-radio :label="item.label" :value="item.value" />
-                        </template>
-                    </el-radio-group>
+                    <app-enum code="Sex" type="radio" v-model="formData.sex" />
                 </el-form-item>
             </template>
             <el-form-item :label="t('investor.user.open.edit.mobilephone')" prop="mobilephone">
@@ -154,7 +142,7 @@ import { uploadConfig } from '@/constants/common'
 import { decryptAES } from '@/services/crypto'
 import { useRequest } from '@/hooks/request'
 import { dealSunOrgan, queryInvestorDetail } from '@/services/api/investor'
-import { getUserInfoTypeList, getGenderList, UserInfoType, Gender } from '@/constants/member'
+import {   UserInfoType, Gender } from '@/constants/member'
 import { i18n, useUserStore } from '@/stores'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 import AppUpload from '@pc/components/base/upload/index.vue'

+ 3 - 11
src/packages/pc/views/member/institution/open/components/edit/index.vue

@@ -9,11 +9,7 @@
                     <el-input v-model="formData.username" maxlength="50" :placeholder="t('common.pleaseenter')" />
                 </el-form-item>
                 <el-form-item :label="t('member.institution.open.edit.userinfotype')" prop="userinfotype">
-                    <el-radio-group v-model="formData.userinfotype">
-                        <template v-for="item in getUserInfoTypeList()" :key="item.value">
-                            <el-radio :label="item.label" :value="item.value" />
-                        </template>
-                    </el-radio-group>
+                    <app-enum code="userinfotype" type="radio" v-model="formData.userinfotype" />
                 </el-form-item>
                 <el-form-item :label="t('member.institution.open.edit.referral')" prop="referral">
                     <app-select-member ref="referralRef" v-model="formData.referral" />
@@ -69,11 +65,7 @@
                     </el-form-item>
                 </template>
                 <el-form-item :label="t('member.institution.open.edit.sex')" prop="sex">
-                    <el-radio-group v-model="formData.sex">
-                        <template v-for="item in getGenderList()" :key="item.value">
-                            <el-radio :label="item.label" :value="item.value" />
-                        </template>
-                    </el-radio-group>
+                    <app-enum code="Sex" type="radio" v-model="formData.sex" />
                 </el-form-item>
                 <el-form-item :label="t('member.institution.open.edit.mobilephone')" prop="mobilephone">
                     <el-input type="number" v-model="formData.mobilephone" maxlength="50"
@@ -130,7 +122,7 @@ import { uploadConfig } from '@/constants/common'
 import { decryptAES } from '@/services/crypto'
 import { useRequest } from '@/hooks/request'
 import { wskhUserinfoAdd, queryWskhUserinfoDetail } from '@/services/api/member'
-import { getUserInfoTypeList, getGenderList, UserInfoType, Gender } from '@/constants/member'
+import { UserInfoType, Gender } from '@/constants/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 import AppUpload from '@pc/components/base/upload/index.vue'
 import AppEnum from '@pc/components/modules/enum/index.vue'

+ 8 - 4
src/packages/pc/views/member/institution/role/components/details/index.vue

@@ -25,7 +25,8 @@ import { ElMessage } from 'element-plus'
 import { handleNoneValue } from '@/filters'
 import { useRequest } from '@/hooks/request'
 import { queryDetail } from '@/services/api/admin'
-import { useRouterStore, i18n } from '@/stores'
+import { getAllMenus } from '@/services/api/user'
+import { i18n } from '@/stores'
 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'
@@ -38,7 +39,6 @@ const props = defineProps({
 })
 
 const { global: { t } } = i18n
-const routerStore = useRouterStore()
 const filteredRoutes = ref<Model.MenusRsp[]>([])
 const show = ref(true)
 
@@ -54,6 +54,8 @@ const getSensitiveWords = () => {
     return handleNoneValue(label)
 }
 
+const allMenus = getAllMenus()
+
 const { data, loading } = useRequest(queryDetail, {
     params: {
         autoId: props.record.autoid
@@ -84,8 +86,10 @@ const { data, loading } = useRequest(queryDetail, {
             }, [])
         }
 
-        // 递归过滤菜单
-        filteredRoutes.value = filterMenu(routerStore.userRoutes)
+        allMenus.then((res) => {
+            // 递归过滤菜单
+            filteredRoutes.value = filterMenu(res.data)
+        })
     },
     onError: (err) => {
         ElMessage.error(err)

+ 2 - 1
src/packages/pc/views/member/institution/role/index.vue

@@ -35,6 +35,7 @@ import AppPagination from '@pc/components/base/pagination/index.vue'
 import AppOperation from '@pc/components/base/operation/index.vue'
 
 const userstatusEnum = useEnum('userstatus') // 状态
+const roleTypeEnum = useEnum('roleType') // 角色
 
 const { componentMap, componentId, record, openComponent, closeComponent, getActionButtons } = useOperation<Model.RoleRsp>({
     onClose: () => onRefresh()
@@ -52,7 +53,7 @@ const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryR
 })
 
 const tableColumns = shallowRef<Model.TableColumn[]>([
-    { field: 'rolename', label: 'member.institution.role.rolename' },
+    { field: 'autoid', label: 'member.institution.role.rolename' , formatValue: (val) => roleTypeEnum.getEnumTypeName(val)},
     { field: 'modifiername', label: 'member.institution.role.modifiername' },
     { field: 'modifytime', label: 'member.institution.role.modifytime' },
     { field: 'rolestatus', label: 'member.institution.role.rolestatus', formatValue: (val) => userstatusEnum.getEnumTypeName(val) },

+ 3 - 1
src/packages/pc/views/member/institution/user/components/account/index.vue

@@ -67,6 +67,8 @@ const mainaccounttypeEnum = useEnum('mainaccounttype')
 const accounttypeEnum = useEnum('accounttype')
 // 交易状态
 const traderstatusEnum = useEnum('traderstatus')
+// 币种
+const currencyEnum = useEnum('currency')
 
 const selectedItem = shallowRef<Member.OrganTaaccountRsp>()
 
@@ -92,7 +94,7 @@ const tableColumns = shallowRef<Model.TableColumn[]>([
     { field: 'relatedName', label: 'member.institution.user.account.relatedName' },
     { field: 'parentAccountId', label: 'member.institution.user.account.parentAccountId' },
     { field: 'tradeStatus', label: 'member.institution.user.account.tradeStatus', formatValue: (val) => traderstatusEnum.getEnumTypeName(val) },
-    { field: 'currency', label: 'member.institution.user.account.currency' },
+    { field: 'currencyid', label: 'member.institution.user.account.currency', formatValue: (val) => currencyEnum.getEnumTypeName(val) },
     { field: 'curRiskRate', label: 'member.institution.user.account.curRiskRate' },
     { field: 'operate', label: 'common.operate', width: 180, fixed: 'right' }
 ])

+ 7 - 3
src/packages/pc/views/member/institution/user/components/details/index.vue

@@ -48,7 +48,7 @@ import { formatDate, getFirstPathFullUrl } from '@/filters'
 import { decryptAES } from '@/services/crypto'
 import { useEnum } from '@/hooks/enum'
 import { useRequest } from '@/hooks/request'
-import { UserInfoType, getGenderName, getUserInfoTypeName } from '@/constants/member'
+import { UserInfoType } from '@/constants/member'
 import { CellProp } from '@pc/components/base/table-details/types'
 import { queryOrganDetail } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
@@ -77,6 +77,10 @@ const biznatureEnum = useEnum('biznature')
 const certificatetypeEnum = useEnum('certificatetype')
 // 帐号状态
 const userstatusEnum = useEnum('userstatus')
+// 所有者类型
+const userinfotypeEnum = useEnum('userinfotype')
+// 性别
+const sexEnum = useEnum('Sex')
 
 const { data } = useRequest(queryOrganDetail, {
     params: {
@@ -102,7 +106,7 @@ const { data } = useRequest(queryOrganDetail, {
 
 const detailProps1: CellProp[] = [
     { prop: 'userid', label: 'member.institution.user.details.userid' },
-    { prop: 'userinfotype', label: 'member.institution.user.details.userinfotype', formatValue: () => getUserInfoTypeName(data.value?.userinfo.userinfotype) },
+    { prop: 'userinfotype', label: 'member.institution.user.details.userinfotype', formatValue: () => userinfotypeEnum.getEnumTypeName(data.value?.userinfo.userinfotype) },
     { prop: 'refereeusername', label: 'member.institution.user.details.refereeusername', formatValue: () => data.value?.refereeusername },
     { prop: 'accountname', label: 'member.institution.user.details.accountname' },
     { prop: 'usertype', label: 'member.institution.user.details.usertype', formatValue: (val) => usertype2Enum.getEnumTypeName(val) },
@@ -125,7 +129,7 @@ const detailProps2 = computed<CellProp[]>(() => {
         { prop: 'legalcardfrontphotourl', label: 'member.institution.user.details.legalcardfrontphotourl', show: !isPerson },
         { prop: 'legalcardbackphotourl', label: 'member.institution.user.details.legalcardbackphotourl', show: !isPerson },
         { prop: 'contactname', label: 'member.institution.user.details.contactname', show: !isPerson },
-        { prop: 'sex', label: 'member.institution.user.details.sex', formatValue: (val) => getGenderName(val) },
+        { prop: 'sex', label: 'member.institution.user.details.sex', formatValue: (val) => sexEnum.getEnumTypeName(val) },
         { prop: 'mobile', label: 'member.institution.user.details.mobile', formatValue: (val) => decryptAES(val) },
         { prop: 'telphone', label: 'member.institution.user.details.telphone', formatValue: (val) => decryptAES(val) },
         { prop: 'address', label: 'member.institution.user.details.address', formatValue: (val) => (data.value?.division ?? '') + (val ?? '') },

+ 7 - 9
src/packages/pc/views/member/institution/user/components/edit/index.vue

@@ -9,7 +9,7 @@
                     {{ handleNoneValue(data?.rspResult.userid) }}
                 </el-form-item>
                 <el-form-item :label="t('member.institution.user.edit.userinfotype')" prop="userinfotype">
-                    {{ data ? getUserInfoTypeName(data.userinfo.userinfotype) : handleNoneValue() }}
+                    {{ data ? userinfotypeEnum.getEnumTypeName(data.userinfo.userinfotype) : handleNoneValue() }}
                 </el-form-item>
                 <el-form-item :label="t('member.institution.user.edit.username')" prop="username">
                     <el-input v-model="formData.username" maxlength="50" :placeholder="t('common.pleaseenter')" />
@@ -71,11 +71,7 @@
                     </el-form-item>
                 </template>
                 <el-form-item :label="t('member.institution.user.edit.sex')" prop="sex">
-                    <el-radio-group v-model="formData.sex">
-                        <template v-for="item in getGenderList()" :key="item.value">
-                            <el-radio :label="item.label" :value="item.value" />
-                        </template>
-                    </el-radio-group>
+                    <app-enum code="Sex" type="radio" v-model="formData.sex" />
                 </el-form-item>
                 <el-form-item :label="t('member.institution.user.edit.mobile')" prop="mobile">
                     <el-input type="number" v-model="formData.mobile" maxlength="50"
@@ -143,7 +139,7 @@ import { useEnum } from '@/hooks/enum'
 import { decryptAES } from '@/services/crypto'
 import { useRequest } from '@/hooks/request'
 import { editOrgan, queryOrganDetail } from '@/services/api/member'
-import { getGenderList, UserInfoType, getUserInfoTypeName } from '@/constants/member'
+import {  UserInfoType } from '@/constants/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 import AppUpload from '@pc/components/base/upload/index.vue'
 import AppEnum from '@pc/components/modules/enum/index.vue'
@@ -158,8 +154,10 @@ const props = defineProps({
     }
 })
 
-// 机构类型
-const usertype2Enum = useEnum('usertype2')
+
+const usertype2Enum = useEnum('usertype2') // 机构类型
+const sexEnum = useEnum('Sex') 
+const userinfotypeEnum = useEnum('userinfotype') // 所有者类型
 
 const { global: { t } } = i18n
 const formRef = ref<FormInstance>()

+ 3 - 2
src/packages/pc/views/member/subinstitution/addition/index.vue

@@ -24,7 +24,6 @@
 import { shallowRef } from 'vue'
 import { ElMessage } from 'element-plus'
 import { formatDate } from '@/filters'
-import { getUserInfoTypeName } from '@/constants/member'
 import { useEnum } from '@/hooks/enum'
 import { useRequest } from '@/hooks/request'
 import { useDataFilter } from '@/hooks/datatable-v2'
@@ -44,6 +43,8 @@ const areastatusEnum = useEnum('areastatus')
 const usertype2Enum = useEnum('usertype2')
 // 类型
 const subarealevelEnum = useEnum('subarealevel')
+// 所有者类型
+const userinfotypeEnum = useEnum('userinfotype')
 
 const { componentMap, componentId, record, openComponent, closeComponent, getActionButtons } = useOperation<Member.OrganSonRsp>({
     onClose: () => onSearch()
@@ -67,7 +68,7 @@ const tableColumns = shallowRef<Model.TableColumn[]>([
     { field: 'memberusername', label: 'member.subinstitution.addition.memberusername' },
     { field: 'accountstatus', label: 'member.subinstitution.addition.accountstatus', formatValue: (val) => areastatusEnum.getEnumTypeName(val) },
     { field: 'usertype', label: 'member.subinstitution.addition.usertype', formatValue: (val) => usertype2Enum.getEnumTypeName(val) },
-    { field: 'userinfotype', label: 'member.subinstitution.addition.userinfotype', formatValue: (val) => getUserInfoTypeName(val) },
+    { field: 'userinfotype', label: 'member.subinstitution.addition.userinfotype', formatValue: (val) => userinfotypeEnum.getEnumTypeName(val) },
     { field: 'userName', label: 'member.subinstitution.addition.userName' },
     { field: 'modifytime', label: 'member.subinstitution.addition.modifytime', formatValue: (val) => formatDate(val) },
     { field: 'operate', label: 'common.operate', fixed: 'right' }

+ 5 - 3
src/packages/pc/views/member/subinstitution/manage/components/details/index.vue

@@ -61,9 +61,9 @@
             </template>
             <!-- 性别 -->
             <template #sex="{ value }">
-                <p>{{ getGenderName(value) }}</p>
+                <p>{{ sexEnum.getEnumTypeName(value) }}</p>
                 <p class="g-red" v-if="newData && newData.userinfoDetailVo.sex !== value">
-                    {{ getGenderName(newData.userinfoDetailVo.sex) }}
+                    {{ sexEnum.getEnumTypeName(newData.userinfoDetailVo.sex) }}
                 </p>
             </template>
             <!-- 手机号 -->
@@ -206,7 +206,7 @@ import { handleNoneValue, getFirstPathFullUrl } from '@/filters'
 import { decryptAES } from '@/services/crypto'
 import { useEnum } from '@/hooks/enum'
 import { useComponent } from '@/hooks/component'
-import { UserInfoType, getGenderName } from '@/constants/member'
+import { UserInfoType } from '@/constants/member'
 import { useRequest } from '@/hooks/request'
 import { organSonViewson } from '@/services/api/member'
 import { CellProp } from '@pc/components/base/table-details/types'
@@ -245,6 +245,8 @@ const biznatureEnum = useEnum('biznature')
 const certificatetypeEnum = useEnum('certificatetype')
 // 用户状态
 const userstatusEnum = useEnum('userstatus')
+// 性别
+const sexEnum = useEnum('Sex')
 
 const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => onCancel(true))
 

+ 6 - 14
src/packages/pc/views/member/subinstitution/manage/components/edit/index.vue

@@ -13,12 +13,8 @@
                         :placeholder="t('member.subinstitution.manage.edit.tips1')" v-else />
                 </el-form-item>
                 <el-form-item :label="t('member.subinstitution.manage.edit.userinfotype')" prop="userinfotype">
-                    <span v-if="record">{{ getUserInfoTypeName(formData.userinfotype) }}</span>
-                    <el-radio-group v-model="formData.userinfotype" v-else>
-                        <template v-for="item in getUserInfoTypeList()" :key="item.value">
-                            <el-radio :label="item.label" :value="item.value" />
-                        </template>
-                    </el-radio-group>
+                    <span v-if="record">{{ userinfotypeEnum.getEnumTypeName(formData.userinfotype) }}</span>
+                    <app-enum code="userinfotype" type="radio" v-model="formData.userinfotype" v-else />
                 </el-form-item>
                 <el-form-item :label="t('member.subinstitution.manage.edit.userid')" prop="userid">
                     <span v-if="record">{{ formData.userid }}</span>
@@ -88,11 +84,7 @@
                     </el-form-item>
                 </template>
                 <el-form-item :label="t('member.subinstitution.manage.edit.sex')" prop="sex">
-                    <el-radio-group v-model="formData.sex">
-                        <template v-for="item in getGenderList()" :key="item.value">
-                            <el-radio :label="item.label" :value="item.value" />
-                        </template>
-                    </el-radio-group>
+                    <app-enum code="Sex" type="radio" v-model="formData.sex" />
                 </el-form-item>
                 <el-form-item :label="t('member.subinstitution.manage.edit.mobile')" prop="mobile">
                     <el-input type="number" v-model="formData.mobile" maxlength="50"
@@ -178,7 +170,7 @@ import { decryptAES } from '@/services/crypto'
 import { useEnum } from '@/hooks/enum'
 import { useRequest } from '@/hooks/request'
 import { organSonViewson, organSonAdd, organSonSave, organSonEdit } from '@/services/api/member'
-import { getUserInfoTypeList, getUserInfoTypeName, getGenderList, UserInfoType, Gender } from '@/constants/member'
+import { UserInfoType, Gender } from '@/constants/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 import AppUpload from '@pc/components/base/upload/index.vue'
 import AppEnum from '@pc/components/modules/enum/index.vue'
@@ -196,8 +188,8 @@ const props = defineProps({
     }
 })
 
-// 机构类型
-const usertype2Enum = useEnum('usertype2')
+const usertype2Enum = useEnum('usertype2') // 机构类型
+const userinfotypeEnum = useEnum('userinfotype') // 所有者类型
 
 const { global: { t } } = i18n
 const formRef = ref<FormInstance>()

+ 5 - 7
src/packages/pc/views/member/subinstitution/manage/index.vue

@@ -36,7 +36,6 @@
 import { shallowRef, computed } from 'vue'
 import { ElMessage } from 'element-plus'
 import { formatDate, buildTree } from '@/filters'
-import { getUserInfoTypeName } from '@/constants/member'
 import { useEnum } from '@/hooks/enum'
 import { useOperation } from '@/hooks/operation'
 import { useRequest } from '@/hooks/request'
@@ -47,10 +46,9 @@ import AppTableDetails from '@pc/components/base/table-details/index.vue'
 import AppOperation from '@pc/components/base/operation/index.vue'
 import AppPagination from '@pc/components/base/pagination/index.vue'
 
-// 机构状态
-const areastatusEnum = useEnum('areastatus')
-// 机构类型
-const usertype2Enum = useEnum('usertype2')
+const areastatusEnum = useEnum('areastatus') // 机构状态
+const usertype2Enum = useEnum('usertype2') // 机构类型
+const userinfotypeEnum = useEnum('userinfotype') // 所有者类型
 
 const treeRef = shallowRef()
 const selectedParent = shallowRef<Member.AreaAndAllChildsRsp>() // 已选中的树节点
@@ -99,7 +97,7 @@ const detailProps: CellProp[] = [
     { prop: 'userid', label: 'member.subinstitution.manage.userid' },
     { prop: 'accountname', label: 'member.subinstitution.manage.accountname' },
     { prop: 'accountstatus', label: 'member.subinstitution.manage.accountstatus', formatValue: (val) => areastatusEnum.getEnumTypeName(val) },
-    { prop: 'userinfotype', label: 'member.subinstitution.manage.userinfotype', formatValue: (val) => getUserInfoTypeName(val) },
+    { prop: 'userinfotype', label: 'member.subinstitution.manage.userinfotype', formatValue: (val) => userinfotypeEnum.getEnumTypeName(val) },
     { prop: 'contactname', label: 'member.subinstitution.manage.contactname' },
     { prop: 'pathname', label: 'member.subinstitution.manage.pathname' },
 ]
@@ -109,7 +107,7 @@ const tableColumns = shallowRef<Model.TableColumn[]>([
     { field: 'accountname', label: 'member.subinstitution.manage.accountname1' },
     { field: 'accountstatus', label: 'member.subinstitution.manage.accountstatus1', formatValue: (val) => areastatusEnum.getEnumTypeName(val) },
     { field: 'usertype', label: 'member.subinstitution.manage.usertype', formatValue: (val) => usertype2Enum.getEnumTypeName(val) },
-    { field: 'userinfotype', label: 'member.subinstitution.manage.userinfotype1', formatValue: (val) => getUserInfoTypeName(val) },
+    { field: 'userinfotype', label: 'member.subinstitution.manage.userinfotype1', formatValue: (val) => userinfotypeEnum.getEnumTypeName(val) },
     { field: 'userName', label: 'member.subinstitution.manage.userName' },
     { field: 'modifytime', label: 'member.subinstitution.manage.modifytime', formatValue: (val) => formatDate(val) },
     { field: 'operate', label: 'common.operate', width: 140, fixed: 'right' }

+ 5 - 6
src/packages/pc/views/member/subinstitution/user/index.vue

@@ -28,7 +28,6 @@
 import { shallowRef } from 'vue'
 import { ElMessage } from 'element-plus'
 import { formatDate } from '@/filters'
-import { getUserInfoTypeName } from '@/constants/member'
 import { useEnum } from '@/hooks/enum'
 import { useMarket } from '@/hooks/market'
 import { useRequest } from '@/hooks/request'
@@ -43,10 +42,10 @@ import { i18n } from '@/stores'
 
 const { global: { t } } = i18n
 
-// 机构状态
-const areastatusEnum = useEnum('areastatus')
-// 机构类型
-const usertype2Enum = useEnum('usertype2')
+
+const areastatusEnum = useEnum('areastatus') // 机构状态
+const usertype2Enum = useEnum('usertype2') // 机构类型
+const userinfotypeEnum = useEnum('userinfotype') // 所有者类型
 
 const { getMarketOptions } = useMarket()
 
@@ -71,7 +70,7 @@ const tableColumns = shallowRef<Model.TableColumn[]>([
     { field: 'memberusername', label: 'member.subinstitution.user.memberusername' },
     { field: 'accountstatus', label: 'member.subinstitution.user.accountstatus', formatValue: (val) => areastatusEnum.getEnumTypeName(val) },
     { field: 'usertype', label: 'member.subinstitution.user.usertype', formatValue: (val) => usertype2Enum.getEnumTypeName(val) },
-    { field: 'userinfotype', label: 'member.subinstitution.user.userinfotype', formatValue: (val) => getUserInfoTypeName(val) },
+    { field: 'userinfotype', label: 'member.subinstitution.user.userinfotype', formatValue: (val) => userinfotypeEnum.getEnumTypeName(val) },
     { field: 'userName', label: 'member.subinstitution.user.userName' },
     { field: 'modifytime', label: 'member.subinstitution.user.modifytime', formatValue: (val) => formatDate(val) },
     { field: 'operate', label: 'common.operate', width: 200, fixed: 'right' }

+ 10 - 0
src/services/api/user/index.ts

@@ -58,4 +58,14 @@ export function dealMenus(options: CommonFetchOptions<{ request: Model.DealMenus
  */
 export function deleteMenus(options: CommonFetchOptions<{ request: Model.DeleteMenusReq; }>) {
     return httpClient.commonRequest('/funcmenulist/deleteMenus', 'post', options)
+}
+
+/**
+ * 获取菜单列表信息
+ */
+export function getAllMenus(options: CommonFetchOptions<{ response: Model.MenusRsp[]; }> = {}) {
+    options.data = {
+        menuType: 6
+    }
+    return httpClient.commonRequest('/funcmenulist/getAllMenus', 'get', options)
 }

+ 1 - 1
src/types/model/account.d.ts

@@ -45,7 +45,7 @@ declare namespace Model {
             signStatus: number; // 签约状态 - signstatus /ismain = 1 展示
         }[];
         changeFlag: number; // 变动标志
-        currency: string; // 币种
+        currency: number; // 币种
         currentBalance: number; // 期末余额
         dtype: {
             checked: number;

+ 1 - 1
src/types/model/member.d.ts

@@ -1501,7 +1501,7 @@ declare namespace Member {
         accountId: number; // 资金账号
         accountName: string; // 所属用户
         curRiskRate: number; // 风险率
-        currency: string; // 币种
+        currencyid: number; // 币种
         isMain: number; // 账户类型 0 子账户,1 母账号
         outThreshold: number; // 出金阈值
         parentAccountId: number; // 所属母账户