Handy_Cao 11 bulan lalu
induk
melakukan
ebce8b8fa7
21 mengubah file dengan 1281 tambahan dan 28 penghapusan
  1. 40 4
      src/packages/pc/views/member/institution/broker/components/delete/index.vue
  2. 72 1
      src/packages/pc/views/member/institution/broker/components/details/index.vue
  3. 1 0
      src/packages/pc/views/member/institution/broker/index.vue
  4. 40 4
      src/packages/pc/views/member/institution/industry/components/delete/index.vue
  5. 72 1
      src/packages/pc/views/member/institution/industry/components/details/index.vue
  6. 1 0
      src/packages/pc/views/member/institution/industry/index.vue
  7. 40 4
      src/packages/pc/views/member/institution/marketer/components/delete/index.vue
  8. 72 1
      src/packages/pc/views/member/institution/marketer/components/details/index.vue
  9. 1 0
      src/packages/pc/views/member/institution/marketer/index.vue
  10. 72 1
      src/packages/pc/views/member/institution/marketing/components/details/index.vue
  11. 1 0
      src/packages/pc/views/member/institution/marketing/index.vue
  12. 40 4
      src/packages/pc/views/member/institution/operation/components/delete/index.vue
  13. 72 1
      src/packages/pc/views/member/institution/operation/components/details/index.vue
  14. 1 0
      src/packages/pc/views/member/institution/operation/index.vue
  15. 40 4
      src/packages/pc/views/member/institution/self/components/delete/index.vue
  16. 72 1
      src/packages/pc/views/member/institution/self/components/details/index.vue
  17. 1 0
      src/packages/pc/views/member/institution/self/index.vue
  18. 72 1
      src/packages/pc/views/member/institution/warehouse/components/details/index.vue
  19. 1 0
      src/packages/pc/views/member/institution/warehouse/index.vue
  20. 8 1
      src/services/api/member/index.ts
  21. 562 0
      src/types/model/member.d.ts

+ 40 - 4
src/packages/pc/views/member/institution/broker/components/delete/index.vue

@@ -1,17 +1,53 @@
 <!-- 会员机构管理-机构管理-经纪会员管理-删除 -->
 <template>
-    <app-drawer title="删除" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+    <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, defineAsyncComponent } from 'vue'
-import { i18n } from '@/stores'
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { deleteOrganRole } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
 
-const { global: { t } } = i18n
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        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
+    deleteOrganRole({
+        data: {
+            areaid: props.record.userid,
+            role: 7,
+        }
+    }).then(() => {
+        ElMessage.success(t('common.tips5'))
+        onCancel(true)
+    }).catch((err) => {
+        ElMessage.error(t('common.tips6') + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
 </script>

+ 72 - 1
src/packages/pc/views/member/institution/broker/components/details/index.vue

@@ -1,17 +1,88 @@
 <!-- 会员机构管理-机构管理-经纪会员管理-详情 -->
 <template>
     <app-drawer title="详情" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+        <app-table-details title="基本信息" :data="data?.organ" :label-width="160" :cell-props="detailProps1" :column="2" />
+        <!-- <app-table-details title="商品查询权限" :data="goodslimit" :label-width="160" :cell-props="detailProps2" :column="1">
+            
+        </app-table-details> -->
+        <span>
+            <span>商品查询权限</span>
+            <span v-for="item in goodslimit" v-bind:key="item.id">
+                <span>{{ item.title }}: </span>
+                <span>{{ item.value }}</span>
+            </span> 
+        </span>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.close') }}</el-button>
+        </template>
     </app-drawer>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, PropType, defineAsyncComponent } from 'vue'
+import { shallowRef, PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
 import { i18n } from '@/stores'
+import { useRequest } from '@/hooks/request'
+import { CellProp } from '@pc/components/base/table-details/types'
+
+import { queryRoleDetail } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppTableDetails from '@pc/components/base/table-details/index.vue'
 
 const { global: { t } } = i18n
 
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        required: true
+    }
+})
+
 const show = shallowRef(true)
 const refresh = shallowRef(false)
 const loading = shallowRef(false)
+
+const { data } = useRequest(queryRoleDetail, {
+    params: {
+        rolename: 'broker',
+        userid: props.record.userid
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const detailProps1: CellProp[] = [
+    { prop: 'accountname', label: '名称' },
+    { prop: 'userName', label: '管理员', formatValue: () => {
+        return data.value?.users.username
+    }, },
+    { prop: 'reckonaccountid', label: '资金账户' }
+]
+
+const goodslimit = computed(() => {
+    return data.value?.markets.map(e => {
+        return {
+            id: e.marketid,
+            title: e.marketname,
+            value: data.value?.operategoodsinfo?.filter(g => g.marketid === e.marketid).map(e => e.goodsname).join(','),
+        }
+    }) ?? []
+})
+
+// const detailProps2 = computed(() => {
+//     return data.value?.markets.map<CellProp>(e =>({ 
+//         prop: e.marketid.toString(), 
+//         label: e.marketname,
+//         formatValue: (val) => {
+//             return data.value?.operategoodsinfo.filter(e => e.marketid === val).map(e => e.goodsname).join(',')
+//         },
+//      }) ) ?? []
+// }) 
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
 </script>

+ 1 - 0
src/packages/pc/views/member/institution/broker/index.vue

@@ -49,6 +49,7 @@ const { componentMap, componentId, record, openComponent, closeComponent, getAct
 
 const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryRole, {
     params: {
+        orgztypes: 'broker',
         roleid: 7,
         pageNum: 1,
         pageSize: 20

+ 40 - 4
src/packages/pc/views/member/institution/industry/components/delete/index.vue

@@ -1,17 +1,53 @@
 <!-- 会员机构管理-机构管理-产业会员管理-删除 -->
 <template>
-    <app-drawer title="删除" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+    <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, defineAsyncComponent } from 'vue'
-import { i18n } from '@/stores'
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { deleteOrganRole } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
 
-const { global: { t } } = i18n
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        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
+    deleteOrganRole({
+        data: {
+            areaid: props.record.userid,
+            role: 9,
+        }
+    }).then(() => {
+        ElMessage.success(t('common.tips5'))
+        onCancel(true)
+    }).catch((err) => {
+        ElMessage.error(t('common.tips6') + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
 </script>

+ 72 - 1
src/packages/pc/views/member/institution/industry/components/details/index.vue

@@ -1,17 +1,88 @@
 <!-- 会员机构管理-机构管理-产业会员管理-详情 -->
 <template>
     <app-drawer title="详情" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+        <app-table-details title="基本信息" :data="data?.organ" :label-width="160" :cell-props="detailProps1" :column="2" />
+        <!-- <app-table-details title="商品查询权限" :data="goodslimit" :label-width="160" :cell-props="detailProps2" :column="1">
+            
+        </app-table-details> -->
+        <span>
+            <span>商品查询权限</span>
+            <span v-for="item in goodslimit" v-bind:key="item.id">
+                <span>{{ item.title }}: </span>
+                <span>{{ item.value }}</span>
+            </span> 
+        </span>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.close') }}</el-button>
+        </template>
     </app-drawer>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, PropType, defineAsyncComponent } from 'vue'
+import { shallowRef, PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
 import { i18n } from '@/stores'
+import { useRequest } from '@/hooks/request'
+import { CellProp } from '@pc/components/base/table-details/types'
+
+import { queryRoleDetail } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppTableDetails from '@pc/components/base/table-details/index.vue'
 
 const { global: { t } } = i18n
 
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        required: true
+    }
+})
+
 const show = shallowRef(true)
 const refresh = shallowRef(false)
 const loading = shallowRef(false)
+
+const { data } = useRequest(queryRoleDetail, {
+    params: {
+        rolename: 'industry',
+        userid: props.record.userid
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const detailProps1: CellProp[] = [
+    { prop: 'accountname', label: '名称' },
+    { prop: 'userName', label: '管理员', formatValue: () => {
+        return data.value?.users.username
+    }, },
+    { prop: 'reckonaccountid', label: '资金账户' }
+]
+
+const goodslimit = computed(() => {
+    return data.value?.markets.map(e => {
+        return {
+            id: e.marketid,
+            title: e.marketname,
+            value: data.value?.operategoodsinfo?.filter(g => g.marketid === e.marketid).map(e => e.goodsname).join(','),
+        }
+    }) ?? []
+})
+
+// const detailProps2 = computed(() => {
+//     return data.value?.markets.map<CellProp>(e =>({ 
+//         prop: e.marketid.toString(), 
+//         label: e.marketname,
+//         formatValue: (val) => {
+//             return data.value?.operategoodsinfo.filter(e => e.marketid === val).map(e => e.goodsname).join(',')
+//         },
+//      }) ) ?? []
+// }) 
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
 </script>

+ 1 - 0
src/packages/pc/views/member/institution/industry/index.vue

@@ -50,6 +50,7 @@ const { componentMap, componentId, record, openComponent, closeComponent, getAct
 const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryRole, {
     params: {
         roleid: 9,
+        orgztypes: 'industry',
         pageNum: 1,
         pageSize: 20
     },

+ 40 - 4
src/packages/pc/views/member/institution/marketer/components/delete/index.vue

@@ -1,17 +1,53 @@
 <!-- 会员机构管理-机构管理-做市会员管理-删除 -->
 <template>
-    <app-drawer title="删除" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+    <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, defineAsyncComponent } from 'vue'
-import { i18n } from '@/stores'
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { deleteOrganRole } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
 
-const { global: { t } } = i18n
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        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
+    deleteOrganRole({
+        data: {
+            areaid: props.record.userid,
+            role: 8,
+        }
+    }).then(() => {
+        ElMessage.success(t('common.tips5'))
+        onCancel(true)
+    }).catch((err) => {
+        ElMessage.error(t('common.tips6') + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
 </script>

+ 72 - 1
src/packages/pc/views/member/institution/marketer/components/details/index.vue

@@ -1,17 +1,88 @@
 <!-- 会员机构管理-机构管理-做市会员管理-详情 -->
 <template>
     <app-drawer title="详情" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+        <app-table-details title="基本信息" :data="data?.organ" :label-width="160" :cell-props="detailProps1" :column="2" />
+        <!-- <app-table-details title="商品查询权限" :data="goodslimit" :label-width="160" :cell-props="detailProps2" :column="1">
+            
+        </app-table-details> -->
+        <span>
+            <span>商品查询权限</span>
+            <span v-for="item in goodslimit" v-bind:key="item.id">
+                <span>{{ item.title }}: </span>
+                <span>{{ item.value }}</span>
+            </span> 
+        </span>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.close') }}</el-button>
+        </template>
     </app-drawer>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, PropType, defineAsyncComponent } from 'vue'
+import { shallowRef, PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
 import { i18n } from '@/stores'
+import { useRequest } from '@/hooks/request'
+import { CellProp } from '@pc/components/base/table-details/types'
+
+import { queryRoleDetail } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppTableDetails from '@pc/components/base/table-details/index.vue'
 
 const { global: { t } } = i18n
 
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        required: true
+    }
+})
+
 const show = shallowRef(true)
 const refresh = shallowRef(false)
 const loading = shallowRef(false)
+
+const { data } = useRequest(queryRoleDetail, {
+    params: {
+        rolename: 'marketer',
+        userid: props.record.userid
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const detailProps1: CellProp[] = [
+    { prop: 'accountname', label: '名称' },
+    { prop: 'userName', label: '管理员', formatValue: () => {
+        return data.value?.users.username
+    }, },
+    { prop: 'reckonaccountid', label: '资金账户' }
+]
+
+const goodslimit = computed(() => {
+    return data.value?.markets.map(e => {
+        return {
+            id: e.marketid,
+            title: e.marketname,
+            value: data.value?.operategoodsinfo?.filter(g => g.marketid === e.marketid).map(e => e.goodsname).join(','),
+        }
+    }) ?? []
+})
+
+// const detailProps2 = computed(() => {
+//     return data.value?.markets.map<CellProp>(e =>({ 
+//         prop: e.marketid.toString(), 
+//         label: e.marketname,
+//         formatValue: (val) => {
+//             return data.value?.operategoodsinfo.filter(e => e.marketid === val).map(e => e.goodsname).join(',')
+//         },
+//      }) ) ?? []
+// }) 
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
 </script>

+ 1 - 0
src/packages/pc/views/member/institution/marketer/index.vue

@@ -49,6 +49,7 @@ const { componentMap, componentId, record, openComponent, closeComponent, getAct
 
 const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryRole, {
     params: {
+        orgztypes: 'marketer',
         roleid: 8,
         pageNum: 1,
         pageSize: 20

+ 72 - 1
src/packages/pc/views/member/institution/marketing/components/details/index.vue

@@ -1,17 +1,88 @@
 <!-- 会员机构管理-机构管理-营销中心管理-详情 -->
 <template>
     <app-drawer title="详情" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+        <app-table-details title="基本信息" :data="data?.organ" :label-width="160" :cell-props="detailProps1" :column="2" />
+        <!-- <app-table-details title="商品查询权限" :data="goodslimit" :label-width="160" :cell-props="detailProps2" :column="1">
+            
+        </app-table-details> -->
+        <span>
+            <span>商品查询权限</span>
+            <span v-for="item in goodslimit" v-bind:key="item.id">
+                <span>{{ item.title }}: </span>
+                <span>{{ item.value }}</span>
+            </span> 
+        </span>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.close') }}</el-button>
+        </template>
     </app-drawer>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, PropType, defineAsyncComponent } from 'vue'
+import { shallowRef, PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
 import { i18n } from '@/stores'
+import { useRequest } from '@/hooks/request'
+import { CellProp } from '@pc/components/base/table-details/types'
+
+import { queryRoleDetail } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppTableDetails from '@pc/components/base/table-details/index.vue'
 
 const { global: { t } } = i18n
 
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        required: true
+    }
+})
+
 const show = shallowRef(true)
 const refresh = shallowRef(false)
 const loading = shallowRef(false)
+
+const { data } = useRequest(queryRoleDetail, {
+    params: {
+        rolename: 'marketing',
+        userid: props.record.userid
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const detailProps1: CellProp[] = [
+    { prop: 'accountname', label: '名称' },
+    { prop: 'userName', label: '管理员', formatValue: () => {
+        return data.value?.users.username
+    }, },
+    { prop: 'reckonaccountid', label: '资金账户' }
+]
+
+const goodslimit = computed(() => {
+    return data.value?.markets.map(e => {
+        return {
+            id: e.marketid,
+            title: e.marketname,
+            value: data.value?.operategoodsinfo?.filter(g => g.marketid === e.marketid).map(e => e.goodsname).join(','),
+        }
+    }) ?? []
+})
+
+// const detailProps2 = computed(() => {
+//     return data.value?.markets.map<CellProp>(e =>({ 
+//         prop: e.marketid.toString(), 
+//         label: e.marketname,
+//         formatValue: (val) => {
+//             return data.value?.operategoodsinfo.filter(e => e.marketid === val).map(e => e.goodsname).join(',')
+//         },
+//      }) ) ?? []
+// }) 
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
 </script>

+ 1 - 0
src/packages/pc/views/member/institution/marketing/index.vue

@@ -49,6 +49,7 @@ const { componentMap, componentId, record, openComponent, closeComponent, getAct
 
 const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryRole, {
     params: {
+        orgztypes: 'marketing',
         roleid: 3,
         pageNum: 1,
         pageSize: 20

+ 40 - 4
src/packages/pc/views/member/institution/operation/components/delete/index.vue

@@ -1,17 +1,53 @@
 <!-- 会员机构管理-机构管理-运营机构管理-删除 -->
 <template>
-    <app-drawer title="删除" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+    <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, defineAsyncComponent } from 'vue'
-import { i18n } from '@/stores'
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { deleteOrganRole } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
 
-const { global: { t } } = i18n
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        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
+    deleteOrganRole({
+        data: {
+            areaid: props.record.userid,
+            role: 2,
+        }
+    }).then(() => {
+        ElMessage.success(t('common.tips5'))
+        onCancel(true)
+    }).catch((err) => {
+        ElMessage.error(t('common.tips6') + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
 </script>

+ 72 - 1
src/packages/pc/views/member/institution/operation/components/details/index.vue

@@ -1,17 +1,88 @@
 <!-- 会员机构管理-机构管理-运营机构管理-详情 -->
 <template>
     <app-drawer title="详情" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+        <app-table-details title="基本信息" :data="data?.organ" :label-width="160" :cell-props="detailProps1" :column="2" />
+        <!-- <app-table-details title="商品查询权限" :data="goodslimit" :label-width="160" :cell-props="detailProps2" :column="1">
+            
+        </app-table-details> -->
+        <span>
+            <span>商品查询权限</span>
+            <span v-for="item in goodslimit" v-bind:key="item.id">
+                <span>{{ item.title }}: </span>
+                <span>{{ item.value }}</span>
+            </span> 
+        </span>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.close') }}</el-button>
+        </template>
     </app-drawer>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, PropType, defineAsyncComponent } from 'vue'
+import { shallowRef, PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
 import { i18n } from '@/stores'
+import { useRequest } from '@/hooks/request'
+import { CellProp } from '@pc/components/base/table-details/types'
+
+import { queryRoleDetail } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppTableDetails from '@pc/components/base/table-details/index.vue'
 
 const { global: { t } } = i18n
 
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        required: true
+    }
+})
+
 const show = shallowRef(true)
 const refresh = shallowRef(false)
 const loading = shallowRef(false)
+
+const { data } = useRequest(queryRoleDetail, {
+    params: {
+        rolename: 'operate',
+        userid: props.record.userid
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const detailProps1: CellProp[] = [
+    { prop: 'accountname', label: '名称' },
+    { prop: 'userName', label: '管理员', formatValue: () => {
+        return data.value?.users.username
+    }, },
+    { prop: 'reckonaccountid', label: '资金账户' }
+]
+
+const goodslimit = computed(() => {
+    return data.value?.markets.map(e => {
+        return {
+            id: e.marketid,
+            title: e.marketname,
+            value: data.value?.operategoodsinfo?.filter(g => g.marketid === e.marketid).map(e => e.goodsname).join(','),
+        }
+    }) ?? []
+})
+
+// const detailProps2 = computed(() => {
+//     return data.value?.markets.map<CellProp>(e =>({ 
+//         prop: e.marketid.toString(), 
+//         label: e.marketname,
+//         formatValue: (val) => {
+//             return data.value?.operategoodsinfo.filter(e => e.marketid === val).map(e => e.goodsname).join(',')
+//         },
+//      }) ) ?? []
+// }) 
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
 </script>

+ 1 - 0
src/packages/pc/views/member/institution/operation/index.vue

@@ -49,6 +49,7 @@ const { componentMap, componentId, record, openComponent, closeComponent, getAct
 
 const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryRole, {
     params: {
+        orgztypes: 'operate',
         roleid: 2,
         pageNum: 1,
         pageSize: 20

+ 40 - 4
src/packages/pc/views/member/institution/self/components/delete/index.vue

@@ -1,17 +1,53 @@
 <!-- 会员机构管理-机构管理-自营会员管理-删除 -->
 <template>
-    <app-drawer title="删除" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+    <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, defineAsyncComponent } from 'vue'
-import { i18n } from '@/stores'
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { deleteOrganRole } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import { i18n } from '@/stores'
 
-const { global: { t } } = i18n
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        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
+    deleteOrganRole({
+        data: {
+            areaid: props.record.userid,
+            role: 6,
+        }
+    }).then(() => {
+        ElMessage.success(t('common.tips5'))
+        onCancel(true)
+    }).catch((err) => {
+        ElMessage.error(t('common.tips6') + err)
+        onCancel()
+    }).finally(() => {
+        loading.value = false
+    })
+}
 </script>

+ 72 - 1
src/packages/pc/views/member/institution/self/components/details/index.vue

@@ -1,17 +1,88 @@
 <!-- 会员机构管理-机构管理-自营会员管理-详情 -->
 <template>
     <app-drawer title="详情" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+        <app-table-details title="基本信息" :data="data?.organ" :label-width="160" :cell-props="detailProps1" :column="2" />
+        <!-- <app-table-details title="商品查询权限" :data="goodslimit" :label-width="160" :cell-props="detailProps2" :column="1">
+            
+        </app-table-details> -->
+        <span>
+            <span>市场</span>
+            <span v-for="item in goodslimit" v-bind:key="item.id">
+                <span>{{ item.title }}: </span>
+                <span>{{ item.value }}</span>
+            </span> 
+        </span>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.close') }}</el-button>
+        </template>
     </app-drawer>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, PropType, defineAsyncComponent } from 'vue'
+import { shallowRef, PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
 import { i18n } from '@/stores'
+import { useRequest } from '@/hooks/request'
+import { CellProp } from '@pc/components/base/table-details/types'
+
+import { queryRoleDetail } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppTableDetails from '@pc/components/base/table-details/index.vue'
 
 const { global: { t } } = i18n
 
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        required: true
+    }
+})
+
 const show = shallowRef(true)
 const refresh = shallowRef(false)
 const loading = shallowRef(false)
+
+const { data } = useRequest(queryRoleDetail, {
+    params: {
+        rolename: 'selfsupport',
+        userid: props.record.userid
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const detailProps1: CellProp[] = [
+    { prop: 'accountname', label: '名称' },
+    { prop: 'userName', label: '管理员', formatValue: () => {
+        return data.value?.users.username
+    }, },
+    { prop: 'reckonaccountid', label: '资金账户' }
+]
+
+const goodslimit = computed(() => {
+    return data.value?.markets.map(e => {
+        return {
+            id: e.marketid,
+            title: e.marketname,
+            value: data.value?.operategoodsinfo?.filter(g => g.marketid === e.marketid).map(e => e.goodsname).join(','),
+        }
+    }) ?? []
+})
+
+// const detailProps2 = computed(() => {
+//     return data.value?.markets.map<CellProp>(e =>({ 
+//         prop: e.marketid.toString(), 
+//         label: e.marketname,
+//         formatValue: (val) => {
+//             return data.value?.operategoodsinfo.filter(e => e.marketid === val).map(e => e.goodsname).join(',')
+//         },
+//      }) ) ?? []
+// }) 
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
 </script>

+ 1 - 0
src/packages/pc/views/member/institution/self/index.vue

@@ -49,6 +49,7 @@ const { componentMap, componentId, record, openComponent, closeComponent, getAct
 
 const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryRole, {
     params: {
+        orgztypes: 'selfsupport',
         roleid: 6,
         pageNum: 1,
         pageSize: 20

+ 72 - 1
src/packages/pc/views/member/institution/warehouse/components/details/index.vue

@@ -1,17 +1,88 @@
 <!-- 会员机构管理-机构管理-仓库机构管理-详情 -->
 <template>
     <app-drawer title="详情" width="900" v-model:show="show" :loading="loading" :refresh="refresh">
+        <app-table-details title="基本信息" :data="data?.organ" :label-width="160" :cell-props="detailProps1" :column="2" />
+        <!-- <app-table-details title="" :data="goodslimit" :label-width="160" :cell-props="detailProps2" :column="1">
+            
+        </app-table-details> -->
+        <span>
+            <span>仓库</span>
+            <span v-for="item in warehouse" v-bind:key="item.id">
+                <span>{{ item.label }}: </span>
+                <span>{{ item.title }}</span>
+            </span> 
+        </span>
+        <template #footer>
+            <el-button @click="onCancel(false)">{{ t('operation.close') }}</el-button>
+        </template>
     </app-drawer>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, PropType, defineAsyncComponent } from 'vue'
+import { shallowRef, PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
 import { i18n } from '@/stores'
+import { useRequest } from '@/hooks/request'
+import { CellProp } from '@pc/components/base/table-details/types'
+
+import { queryRoleDetail } from '@/services/api/member'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppTableDetails from '@pc/components/base/table-details/index.vue'
 
 const { global: { t } } = i18n
 
+const props = defineProps({
+    record: {
+        type: Object as PropType<Model.OrganRoleRsp>,
+        required: true
+    }
+})
+
 const show = shallowRef(true)
 const refresh = shallowRef(false)
 const loading = shallowRef(false)
+
+const { data } = useRequest(queryRoleDetail, {
+    params: {
+        rolename: 'warehouse',
+        userid: props.record.userid
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const detailProps1: CellProp[] = [
+    { prop: 'accountname', label: '名称' },
+    { prop: 'userName', label: '管理员', formatValue: () => {
+        return data.value?.users.username
+    }, },
+    { prop: 'reckonaccountid', label: '资金账户' }
+]
+
+const warehouse = computed(() => {
+    return data.value?.warehouse.map(e => {
+        return {
+            id: e.warehousecode,
+            title: e.warehousename,
+            label: '仓库'
+        }
+    }) ?? []
+})
+
+// const detailProps2 = computed(() => {
+//     return data.value?.markets.map<CellProp>(e =>({ 
+//         prop: e.marketid.toString(), 
+//         label: e.marketname,
+//         formatValue: (val) => {
+//             return data.value?.operategoodsinfo.filter(e => e.marketid === val).map(e => e.goodsname).join(',')
+//         },
+//      }) ) ?? []
+// }) 
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
 </script>

+ 1 - 0
src/packages/pc/views/member/institution/warehouse/index.vue

@@ -49,6 +49,7 @@ const { componentMap, componentId, record, openComponent, closeComponent, getAct
 
 const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(queryRole, {
     params: {
+        orgztypes: 'warehouse',
         roleid: 4,
         pageNum: 1,
         pageSize: 20

+ 8 - 1
src/services/api/member/index.ts

@@ -172,6 +172,13 @@ export function queryRole(options: CommonFetchOptions<{ request: Model.OrganRole
 /**
  * 会员机构管理-->机构管理-->机构详情 ( rolename: 2--运营 operate * 3--营销 marketing * 4--仓库 warehouse * 5--三方 tpart * 6--自营 selfsupport * 7--经纪 broker * 8--做市 marketer * 9--产业 industry)
  */
-export function queryRoleDetail(options: CommonFetchOptions<{ request: Model.RoleDetailReq; response: Model.RoleRsp[]; }>) {
+export function queryRoleDetail(options: CommonFetchOptions<{ request: Model.OrganRoleDetailReq; response: Model.OrganRoleDetailRsp; }>) {
     return httpClient.commonRequest('/organDetail/queryroleDetail', 'get', options)
+}
+
+/**
+ * 会员机构管理-->机构管理-->机构角色删除
+ */
+export function deleteOrganRole(options: CommonFetchOptions<{ request: Model.OrganRoleDeleteReq; }>) {
+    return httpClient.commonRequest('/organDetail/del', 'get', options)
 }

+ 562 - 0
src/types/model/member.d.ts

@@ -905,4 +905,566 @@ declare namespace Model {
         // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
         usertype: number
     }
+
+    /** 会员机构管理-->机构管理-->会员机构查询-->获取列表(营销中心查看经纪会员) 请求 */
+    interface OrganRoleDetailReq {
+        rolename?: string; // rolename
+        userid?: number; // userid
+    }
+
+    // 机构角色分成配置表
+    interface AreaRoleDivideConfig {
+        // 创建时间
+        createtime: string
+        // 创建人ID
+        creatorid: number
+        // 分润值
+        dividevalue: number
+        // 费用算法 1:比率 2:固定
+        feealgorithm: number
+        // 商品ID(此项为0时,为通用设置)
+        goodsid: number
+        // 市场ID(此项为0时,为通用设置)
+        marketid: number
+        // 修改人ID
+        modifierid: number
+        // 修改时间
+        modifytime: string
+        // 角色类型 - 1:交易所 2:运营机构 3:营销中心 4:仓库机构 5:三方服务机构 6:自营会员 7:纪经会员 8:做市会员 9:产业会员 10:金融机构
+        roletype: number
+        // 费用类型 - 101建仓(买)手续费 102平仓(卖)手续费 103买递延费(仓储费) 104卖递延费 105买交割手续费 106 卖交割手续费 107 调期费
+        tradefeeid: number
+        // 机构用户ID 其他做市关系,都设置为 1
+        userid: number
+    }
+
+    // 用户默认结算账户表
+    interface UserReckonAccount {
+        // 币种ID
+        currencyid: number
+        // 默认账号类型 - 1:默认结算账号 2:默认接单账号
+        defaultaccounttype: number
+        //
+        enumdicname: string
+        // 默认结算资金账号ID(机构分润使用)
+        reckonaccountid: number
+        // 更新时间
+        updatetime: string
+        // 用户ID
+        userid: number
+    }
+
+    // 机构资料信息
+    interface UserInfoVo { 
+        // 资金账户
+        accountid: number
+        // 账户名称(机构名称)
+        accountname: string
+        // code areastatus 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:停用(注销) 7:注销(删除)
+        accountstatus: number
+        // 申请来源 - 1:管理端 2:终端
+        applysrc: number
+        // 审核备注
+        auditremark: string
+        // 审核来源 - 1:管理端 2:终端
+        auditsrc: number
+        // 审核时间
+        audittime: string
+        // 审核人
+        audituserid: number
+        // 所属经纪人ID(所属客户经理-千海金)
+        broker: number
+        // 销户时间
+        canceltime: string
+        // 销户人
+        canceluserid: number
+        //
+        cancrossadd: number
+        // 是否可推荐 - 0:不可 1;可 (是否推荐人)
+        canrecommend: number
+        // 联系人
+        contactname: string
+        // 创建时间
+        createtime: string
+        // 创建交易日(yyyyMMdd)
+        createtradedate: string
+        // 创建人
+        creatorid: number
+        // 授信额度(金瑞)分拣室服务费(广钻)
+        creditquota: number
+        // 
+        curuserid: number
+        // 是否已实名认证 - 0:未认证 1:已认证 2:已提交(待审核) 3:已拒绝
+        hasauth: number
+        // 是否已同步(千海金) 0:未同步 1;已同步
+        hasuploaded: number
+        // 是否匿名下单 - 0:否 1:是
+        isanonymous: number
+        // 子机构最大层级数
+        maxLevel: number
+        // 最大用户数(经纪会员下投资者个数)
+        maxinvestornum: number
+        // 所属会员ID
+        memberuserid: number
+        // 修改人
+        modifierid: number
+        // 变更备注
+        modifyremark: string
+        // 修改来源 - 1:管理端 2:终端
+        modifysrc: number
+        // 变更状态 1 未变更 2 变更中 3 变更待审核 4 变更待复核(投资者)
+        modifystatus: number
+        // 修改时间
+        modifytime: string
+        // 外部用户ID(千海金-外部门店ID)
+        outeruserid: string
+        // 
+        parentid: number
+        // 
+        parentname: string
+        // 上级顶级机构 [092=0,1时,默认为1, 092=2时若自已为顶级,则填入自己,自己不为顶级,填入ParentUserID的ParentTopUser]
+        parenttopuser: string
+        // 所属机构ID
+        parentuserid: number
+        // 地址
+        pathname: string
+        // 默认结算资金账号ID(机构分润使用) 作废
+        reckonaccountid: number
+        // 推荐总人数
+        refercount: number
+        // 推荐人ID
+        refereeuserid: number
+        // 推荐码
+        refernum: string
+        // 
+        roleIds: string
+        // 角色创建时间
+        rolemodifytime: string
+        // 根用户ID
+        rootuserid: number
+        // 间接推荐总人数
+        secrefercount: number
+        // 送检账户(广钻)
+        sjaccountno: string
+        // 子账户层数
+        subaccountlevel: number
+        // 
+        subarealevel: number
+        // 子机构层级路径(逗号分隔,首尾加逗号)
+        subarealevelpath: string
+        // 所属部门(业务部门)
+        subjectid: number
+        // 团队经理用户ID(千海金:门店代理)
+        teammanageruserid: number
+        // 同步时间
+        uploadedtime: string
+        // 
+        userName: string
+        // 用户ID
+        userid: number
+        // 所有者类型
+        userinfotype: number
+        // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
+        usertype: number
+    }
+
+    // 场表
+    interface Markets {
+        // 仓单类型(现货交易) - 1:无仓单 2:有仓单 3;有无仓单均可
+        auctionwrtype: number
+        // 
+        buyspotrighttype: number
+        // 确认行权是否接收行情 - 0:不接受 1:接受 [可确认权的挂牌期权市场可配置]
+        canacceptquote: number
+        // [期权]是否可现货行权- 0:否 1:是 是否交收
+        cangoodsexercise: number
+        // 可现货行权期权类型 - 1:认购 2认沽 3:认购认沽 [CanGoodsExercise = 1时可设置]
+        cangoodsexercisetype: number
+        // 是否可手动报行权价- 0:否 1:是 [期权]
+        canmanualquotestrike: number
+        // 是否可多段运行 – 0:不可 1:可 [挂牌期权]
+        canmutistage: number
+        // [期权]是否可预申报- 0:否 1:是
+        canpreexercise: number
+        // 待开市间隔(交易市场开盘前多久发市场待开市信号(单位分钟))
+        clearinterval: number
+        // 合同模板[荷兰式][竞价式][仓单贸易]
+        contracttmp: string
+        // 交收方式(50模式) 1:配对交收 2:强平日交收
+        deliverymode: number
+        // 所属交易所,可以没有
+        exchareaid: number
+        // 融资回购市场ID [仓单贸易]
+        financemarketid: number
+        // 定期强平方式 - 1:到期结 2:日结 3:周结 4:月结 [收益权] 枚举-forceCloseMode
+        forceclosemode: number
+        // 定期强平参数 [收益权](周结、月结)
+        forceclosevalue: number
+        // 商品类型 - 1:交易商品 2:仓单商品
+        goodstype: number
+        // 是否返利[竞价式] 0:不返,1:返利 – 根据系统参数088显示或隐藏
+        hasrebate: number
+        // 是否交易授信[做市收益权] - 0:不授信 1:授信
+        hastradecredit: number
+        // [竞拍]是否需要仓单 - 0:不需要 1:需要- 作废
+        haswr: number
+        // 竞拍违约是否扣除保证金[竞拍-降价式] - 0:不扣 1:扣除
+        isdeductmargin: number
+        // 交收买方是否线上支付(50模式) - 0:否 1:是
+        isdeliverybuyerpayonline: number
+        // 卖方是否可申请交收(50模式 - DeliveryMode = 2时) - 0:否 1:是
+        isdeliverysellercanapply: number
+        // 是否记录成交源 - 0:不记录 1:记录 [所有权]
+        isrecordsource: number
+        // 成交参与保证金是否释放[竞价式] - 0:不释放 1释放
+        isreleasemargin: number
+        // 输入结算价标识 - 0:系统生成 1:手工输入(自动) 2:手工输入(手动)
+        isupdatereckonprice: number
+        // 持仓保证金公式 - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
+        marginformula: number
+        // 持仓保证金公式(仅受托竞价) - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
+        marginformula2: number
+        // 市场ID正常5位,前三位固定:两位表示交易模式, 一位表示交易属性(1:收益权,2:所有权) 其它特殊市场:0-系统 1-交割服务 2-账户服务3-履约服务 4-仓单服务 5-积分服务 6-银行服务
+        marketid: number
+        // 市场名称
+        marketname: string
+        // 市场服务ID
+        marketserviceid: number
+        // 生效状态(ValidStatus枚举): 1:待生效 2:正常 3:注销
+        marketstatus: number
+        // 市场类型- 1:非交易服务 2:交易服务
+        markettype: number
+        // 指定对手模式[仓单贸易模式专用] - 1:任意对手 - 作废
+        matchermode: number
+        // 开盘模式 - 0 自动 1手动
+        openmethod: number
+        // 场外期权做市商[场外期权]
+        otcuserid: number
+        // 外部同步时间点(h24:mi:ss)[场外期权]
+        outersynctime: string
+        // 是否支持后付 - 0:不支持 1;支持 - [挂牌点选 所有权、预售挂牌支持]
+        paylaterflag: number
+        // 待开市时间标识[通道交易-对冲] - 0:当日 1:上日
+        pendingflag: number
+        // 待开市时间通道交易-对冲
+        pendingtime: string
+        // 履约计划模板ID - 作废
+        performancetempid: number
+        // 权利金报价方式 - 1:自动 2:手动
+        premiumquotemode: number
+        // 返利比率[竞价式]
+        rebateratio: number
+        // 结算顺序
+        reckonorder: number
+        // 结算价算法: 1:最后多少笔成交价加权平均 2:最后多少秒成交价加权平均 3:全天加权平均 4:最后一口价 5.买一价 6.卖一价 7.买一卖一均价 8.外部结算价
+        reckonpricealgorithm: number
+        // 结算价参数
+        reckonpriceparam: number
+        // 结算时间通道交易-对冲
+        reckontime: string
+        // 风控方式(52模式) 1:按单风控 2:按账户风控
+        riskcontrolmode: number
+        // 角色优先类型 - 1:无 2:报价商优先 3:非报价商优先 [16:挂牌点选]
+        roleprioritytype: number
+        // 
+        roletype: number
+        // 卖挂牌是否需要审核(仓单贸易) - 0:不需要 1:需要
+        selllistingauditflag: number
+        // 
+        spotrighttype: number
+        // 交易市场类型 - 1:合约市场 2:外部市场 3:仓单市场
+        trademarkettype: number
+        // 交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
+        trademode: number
+        // 交易属性 - 1:收益权(可做空) 2:所有权(不可做空) 3:期权 4:现货 5:参考行情 6:通道交易 7:币交易 8:场外期权 
+        tradeproperty: number
+        // 下单方式[通道交易] - 1:直接转单 2:净头寸下单 
+        tradetype: number
+        // 输入结算价时长(分钟) [1:手工输入(自动)]
+        updatereckonpriceinterval: number
+    }
+
+    // 用户表
+    interface UserAccount {
+        // 账户名称(机构名称)
+        accountname: string
+        // code areastatus 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:停用(注销) 7:注销(删除)
+        accountstatus: number
+        // 申请来源 - 1:管理端 2:终端
+        applysrc: number
+        // 审核备注
+        auditremark: string
+        // 审核来源 - 1:管理端 2:终端
+        auditsrc: number
+        // 审核时间
+        audittime: string
+        // 审核人
+        audituserid: number
+        // 所属经纪人ID(所属客户经理-千海金)
+        broker: number
+        // 销户时间
+        canceltime: string
+        // 销户人
+        canceluserid: number
+        // 是否可推荐 - 0:不可 1;可 (是否推荐人)
+        canrecommend: number
+        // 创建时间
+        createtime: string
+        // 创建交易日(yyyyMMdd)
+        createtradedate: string
+        // 创建人
+        creatorid: number
+        // 授信额度(金瑞)分拣室服务费(广钻)
+        creditquota: number
+        // 是否已实名认证 - 0:未认证 1:已认证 2:已提交(待审核) 3:已拒绝
+        hasauth: number
+        // 是否已同步(千海金) 0:未同步 1;已同步
+        hasuploaded: number
+        // 是否匿名下单 - 0:否 1:是
+        isanonymous: number
+        // 最大用户数(经纪会员下投资者个数)
+        maxinvestornum: number
+        // 所属会员ID
+        memberuserid: number
+        // 修改人
+        modifierid: number
+        // 变更备注
+        modifyremark: string
+        // 修改来源 - 1:管理端 2:终端
+        modifysrc: number
+        // 变更状态 1 未变更 2 变更中 3 变更待审核 4 变更待复核(投资者)
+        modifystatus: number
+        // 修改时间
+        modifytime: string
+        // 外部用户ID(千海金-外部门店ID)
+        outeruserid: string
+        // 上级顶级机构 [092=0,1时,默认为1, 092=2时若自已为顶级,则填入自己,自己不为顶级,填入ParentUserID的ParentTopUser]
+        parenttopuser: string
+        // 所属机构ID
+        parentuserid: number
+        // 默认结算资金账号ID(机构分润使用) 作废
+        reckonaccountid: number
+        // 推荐总人数
+        refercount: number
+        // 推荐人ID
+        refereeuserid: number
+        // 推荐码
+        refernum: string
+        // 根用户ID
+        rootuserid: number
+        // 间接推荐总人数
+        secrefercount: number
+        // 送检账户(广钻)
+        sjaccountno: string
+        // 子账户层数
+        subaccountlevel: number
+        // 子机构层级路径(逗号分隔,首尾加逗号)
+        subarealevelpath: string
+        // 所属部门(业务部门)
+        subjectid: number
+        // 团队经理用户ID(千海金:门店代理)
+        teammanageruserid: number
+        // 同步时间
+        uploadedtime: string
+        // 用户ID
+        userid: number
+        // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
+        usertype: number
+    }
+
+    // 	机构角色表
+    interface AreAarole {
+        // 创建时间
+        createtime: string
+        // 创建人ID
+        creatorid: number
+        // 所属机构(组织机构)( OrgType = 1时为自己, = 2时取上级机构的所属机构)
+        fromuserid: number
+        // 是否返还积分 [经纪会员-辽东湾] - 0:不返还 1:返还
+        isreturnscore: number
+        // 修改人ID
+        modifierid: number
+        // 修改时间
+        modifytime: string
+        // 组织机构类型 1:机构分支节点 2:交易员叶子节点 3:部门分支节点
+        orgtype: number
+        // 外部账户[场外期权做市商]
+        outuserid: string
+        // 上级组织机构(组织机构)
+        parentuserid: number
+        // 角色类型 - 1:交易所 2:运营机构 3:营销中心 4:仓库机构 5:三方服务机构 6:自营会员 7:经纪会员 8:做市会员 9:产业会员 10:金融机构 11:商城店铺 12:子机构 13:报价商 14:积分服务商 15:供货商 16:圈内会员 17:物流机构 18:报价配置机构 19:场外期权做市商 20:组织机构 21:顶级机构 22:业务员 23:跟单员 24:交易员 25:客户 97:客户经理 98:代理 99:门店
+        roletype: number
+        // 顶级组织机构用户ID(组织机构)
+        rootuserid: number
+        // 商城店铺登陆密码(商城店铺角色使用)
+        shoppassword: string
+        // 组织机构层级路径(逗号分隔,首尾加逗号)
+        sublevelpath: string
+        // 子机构类型(千海金) - 0:机构 1:代理(千海金) 2:门店(千海金)
+        suborgtype: number
+        // 默认交易资金账号ID(做市会员被动接单使用、商城店铺默认资金账 号、圈内会员默认资金账号) - 作废, 使用UserReckonAccount
+        tradeaccountid: number
+        // 物流地址(物流机构)
+        transurl: string
+        // 机构用户ID 其他做市关系,都设置为 1
+        userid: number
+    }
+
+    // 系统管理员表
+    interface SystemManager {
+        // 
+        accountNonExpired: boolean
+        //
+        accountNonLocked: boolean
+        // 所属机构ID
+        areauserid: number
+        // 
+        authorities: { authority: string }[]
+        // 自增ID
+        autoid: number
+        // 
+        credentialsNonExpired: boolean
+        // 
+        enabled: boolean
+        // 是否默认管理员 - 0:不是默认 1:默认管理员
+        isdefault: number
+        // 用户登录账号,唯一索引
+        logincode: string
+        // 登录失败次数
+        loginfailnum: number
+        // 登录IP
+        loginip: string
+        // 登录端口
+        loginport: number
+        // 登录状态:1未登录 2已登录
+        loginstatus: number
+        // 登录时间
+        logintime: string
+        // 用户状态: 1启用 2停用 3锁定(密码错误时锁定)
+        managerstatus: number
+        // 账号类型 - 1:管理员 2:交易员
+        managertype: number
+        // 修改时间
+        modifytime: string
+        // 是否启用MAC地址 - 0:否 1:是
+        onymac: number
+        // 加密方式采用 用户名+密码 ,采用 SHA 算法
+        password: string
+        // 密码失效日期
+        pwdexpdate: string
+        // 用户类型 - 1- 交易所管理员 2- 机构管理员 3-子机构管理员
+        reletype: number
+        // 备注
+        remark: string
+        // 修改人ID
+        uploginid: number
+        // 用户姓名
+        username: string
+    }
+
+    // 仓库信息表
+    interface WarehouseInfo {
+        // 详细地址
+        address: string
+        // 所属机构
+        areauserid: number
+        // 自增ID
+        autoid: number
+        // 市
+        cityid: number
+        // 城市(广钻)
+        citystr: string
+        // 联系人
+        contactname: string
+        // 联系电话
+        contactnum: string
+        // 国家
+        countryid: number
+        // 国家/地区(广钻)
+        countrystr: string
+        // 创建时间
+        createtime: string
+        // 区
+        districtid: number
+        // 是否有视频 - 0:无 1:有
+        hasvideo: number
+        // 省
+        provinceid: number
+        // 审核备注
+        remark: string
+        // 视频地址
+        videourl: string
+        // 仓库代码
+        warehousecode: string
+        // 仓库名称
+        warehousename: string
+        // 仓库状态 - 1:正常 2:注销 3:待审核 4:审核拒绝
+        warehousestatus: number
+        // 仓库类型 - 1 厂库 2 自有库 3 合作库
+        warehousetype: number
+    }
+
+    /** 会员机构管理-->机构管理-->会员机构查询-->获取列表(营销中心查看经纪会员) 请求 */
+    interface OrganRoleDetailRsp {
+        // 机构详情
+        customertype: {
+            // 角色类型 - 8:做市会员
+            arearoleid: number;
+            // 机构客户类别
+            customertype: number;
+            // 机构UserID
+            userid: number;
+        }
+        // dividetype
+        dividetype: number
+        // 机构角色分成配置表
+        fee: AreaRoleDivideConfig[]
+        // ishsby
+        ishsby: number
+        // 	市场表
+        markets: Markets[]
+        // mobileUrl
+        mobileUrl: string
+        // openUrl
+        openUrl: string
+        // operategoodsinfo
+        operategoodsinfo: {
+            // goodscode
+            goodscode: string
+            // goodsid
+            goodsid: number
+            // goodsname
+            goodsname: string
+            // marketid
+            marketid: number
+        }[]
+        // 市场表
+        operatemarkets: Markets[]
+        // 机构资料信息
+        organ: UserInfoVo
+        // 用户表
+        organs: UserAccount[]
+        // 机构角色分成配置表
+        pfee: AreaRoleDivideConfig[]
+        // 用户默认结算账户表
+        roleNight: UserReckonAccount[]
+        // 
+        roleid: number
+        // 
+        rolename: string
+        // 
+        sanfangUrl: string
+        // 机构角色表
+        transurl: AreAarole
+        // 系统管理员表
+        users: SystemManager
+        // 仓库信息表
+        warehouse: WarehouseInfo[]
+    }
+
+    /** 会员机构管理-->机构管理-->机构角色删除 请求 */
+    interface OrganRoleDeleteReq {
+        areaid?: number; // areaid
+        role?: number; // role
+    }
 }