Jelajahi Sumber

客户资料

huangbin 4 tahun lalu
induk
melakukan
deb4881845
22 mengubah file dengan 2128 tambahan dan 0 penghapusan
  1. 35 0
      src/router/index.ts
  2. 362 0
      src/views/platinum/platinum_customer_info/compoments/add/index.vue
  3. 27 0
      src/views/platinum/platinum_customer_info/compoments/add/interface.ts
  4. 79 0
      src/views/platinum/platinum_customer_info/compoments/add/setup.ts
  5. 86 0
      src/views/platinum/platinum_customer_info/compoments/cancel/index.vue
  6. 117 0
      src/views/platinum/platinum_customer_info/compoments/check/index.vue
  7. 114 0
      src/views/platinum/platinum_customer_info/compoments/common-detail/index.vue
  8. 72 0
      src/views/platinum/platinum_customer_info/compoments/controlModal/index.vue
  9. 74 0
      src/views/platinum/platinum_customer_info/compoments/delete/index.vue
  10. 60 0
      src/views/platinum/platinum_customer_info/compoments/detail/index.vue
  11. 81 0
      src/views/platinum/platinum_customer_info/compoments/disable/index.vue
  12. 48 0
      src/views/platinum/platinum_customer_info/compoments/filterTable/index.vue
  13. 15 0
      src/views/platinum/platinum_customer_info/compoments/index.ts
  14. 426 0
      src/views/platinum/platinum_customer_info/compoments/modify/index.vue
  15. 78 0
      src/views/platinum/platinum_customer_info/compoments/recover/index.vue
  16. 98 0
      src/views/platinum/platinum_customer_info/list/checkpending/index.vue
  17. 6 0
      src/views/platinum/platinum_customer_info/list/index.ts
  18. 97 0
      src/views/platinum/platinum_customer_info/list/normal-use/index.vue
  19. 35 0
      src/views/platinum/platinum_customer_info/list/setup.ts
  20. 100 0
      src/views/platinum/platinum_customer_info/list/stop-use/index.vue
  21. 106 0
      src/views/platinum/platinum_customer_info/list/unsubmit/index.vue
  22. 12 0
      src/views/platinum/platinum_customer_info/setup.ts

+ 35 - 0
src/router/index.ts

@@ -629,6 +629,41 @@ const routes: Array<RouteRecordRaw> = [
                     },
                 ]
             },
+            {
+                path: '/platinum_customer_info',
+                name: 'platinum_customer_info',
+                component: Main,
+                meta: {
+                    requireAuth: true,
+                },
+                redirect: { name: 'platinum_custom_info_normal' },
+                children: [
+                    {
+                        path: '/platinum_customer_info/normal',
+                        name: 'platinum_custom_info_normal',
+                        component: () => import('@/views/platinum/platinum_customer_info/list/normal-use/index.vue'),
+                        meta: {
+                            requireAuth: true,
+                        },
+                    },
+                    {
+                        path: '/platinum_customer_info/unsubmit',
+                        name: 'platinum_customer_info_unsubmit',
+                        component: () => import('@/views/platinum/platinum_customer_info/list/unsubmit/index.vue'),
+                        meta: {
+                            requireAuth: true,
+                        },
+                    },
+                    {
+                        path: '/platinum_customer_info/stop',
+                        name: 'platinum_customer_info_stop',
+                        component: () => import('@/views/platinum/platinum_customer_info/list/stop-use/index.vue'),
+                        meta: {
+                            requireAuth: true,
+                        },
+                    },
+                ]
+            }
         ],
     },
     {

+ 362 - 0
src/views/platinum/platinum_customer_info/compoments/add/index.vue

@@ -0,0 +1,362 @@
+<template>
+  <!-- 新增客户资料 -->
+  <a-modal class="add-custom"
+           title="新增客户资料"
+           v-model:visible="visible"
+           @cancel="cancel"
+           centered
+           :maskClosable="false"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                class="cancelBtn"
+                @click="submit(1)">保存草稿
+      </a-button>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading"
+                @click="submit(2)">提交审核
+      </a-button>
+    </template>
+    <a-form class="inlineForm"
+            ref="formRef"
+            :model="formState"
+            :rules="rules">
+      <a-row :gutter="24">
+        <a-col :span="12">
+          <a-form-item label="客户类型"
+                       name="userinfotype">
+            <a-select class="typeSelect"
+                      style="width: 200px"
+                      v-model:value="formState.userinfotype"
+                      placeholder="请选择客户类型">
+              <a-select-option value="1">
+                个人
+              </a-select-option>
+              <a-select-option value="2">
+                企业
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </a-col>
+        <template v-if="!isPersonal()">
+          <a-col :span="12">
+            <a-form-item label="企业名称"
+                         name="customername">
+              <a-input class="dialogInput"
+                       v-model:value="formState.customername"
+                       style="width: 200px"
+                       placeholder="请输入企业名称" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="企业简称"
+                         name="nickname">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.nickname"
+                       placeholder="请输入企业简称" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="证件类型"
+                         name="cardtype">
+              <a-select class="inlineFormSelect"
+                        v-model:value="formState.cardtype"
+                        style="width: 200px"
+                        placeholder="请选择证件类型">
+                <a-select-option :value="item.enumitemname"
+                                 v-for="item in cardTypeList"
+                                 :key="item.autoid">
+                  {{ item.enumdicname }}
+                </a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="法定代表人"
+                         name="legalpersonname">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.legalpersonname"
+                       placeholder="请输入法定代表人" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="证件号码"
+                         name="cardnum">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.cardnum"
+                       placeholder="请输入证件号码" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="纳税人识别号"
+                         name="taxpayernum">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.taxpayernum"
+                       placeholder="请输入纳税人识别号" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="营业执照">
+              <UploadImg :visible="visible"
+                         @upload="attachmentUpLoad" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="联系人"
+                         name="contactname">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.contactname"
+                       placeholder="请输入联系人" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="联系人手机号"
+                         name="mobilephone">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.mobilephone"
+                       placeholder="请输入联系人手机号" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="联系电话"
+                         name="telphone">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.telphone"
+                       placeholder="请输入联系电话" />
+            </a-form-item>
+          </a-col>
+        </template>
+        <template v-else>
+          <a-col :span="12">
+            <a-form-item label="姓名"
+                         name="username">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.username"
+                       placeholder="请输入姓名" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="身份证号码"
+                         name="cardnum">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.cardnum"
+                       placeholder="请输入身份证号码" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="手机号码"
+                         name="mobilephone">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.mobilephone"
+                       placeholder="请输入手机号码" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="身份证正面照"
+                         name="cardbackphotourl">
+              <UploadImg :visible="visible"
+                         @upload="cardfrontphotourlUpLoad" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="邮箱"
+                         name="email">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.email"
+                       placeholder="请输入邮箱" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="身份证反面照"
+                         name="cardfrontphotourl">
+              <UploadImg :visible="visible"
+                         @upload="cardbackphotourlUpLoad" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="联系电话"
+                         name="telphone">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.telphone"
+                       placeholder="请输入联系电话" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item>
+              &nbsp;
+            </a-form-item>
+          </a-col>
+        </template>
+        <a-col :span="24">
+          <a-form-item label="通讯地址">
+            <a-select class="inlineFormSelect"
+                      style="width: 205px"
+                      v-model:value="formState.provinceid"
+                      @change="getCityList"
+                      placeholder="请选择省">
+              <a-select-option v-for="item in provinceList"
+                               :key="item.autoid"
+                               :value="item.autoid">
+                {{ item.divisionname }}
+              </a-select-option>
+            </a-select>
+            <a-select class="inlineFormSelect ml9"
+                      style="width: 205px"
+                      v-model:value="formState.cityid"
+                      @change="getDistrictList"
+                      placeholder="请选择市">
+              <a-select-option v-for="item in cityList"
+                               :key="item.autoid"
+                               :value="item.autoid">
+                {{ item.divisionname }}
+              </a-select-option>
+            </a-select>
+            <a-select class="inlineFormSelect ml9"
+                      v-model:value="formState.districtid"
+                      style="width: 205px"
+                      placeholder="请选择县(区)">
+              <a-select-option v-for="item in districtList"
+                               :key="item.autoid"
+                               :value="item.autoid">
+                {{ item.divisionname }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </a-col>
+        <a-col :span="24">
+          <a-form-item label="&nbsp;"
+                       name="cardaddress">
+            <a-input class="dialogInput"
+                     style="width: 635px"
+                     v-model:value="formState.cardaddress"
+                     placeholder="请输入详细地址" />
+          </a-form-item>
+        </a-col>
+        <a-col :span="24">
+          <a-form-item label="备注"
+                       name="remark">
+            <a-input class="dialogInput"
+                     style="width: 635px"
+                     v-model:value="formState.remark"
+                     placeholder="请输入备注" />
+          </a-form-item>
+        </a-col>
+      </a-row>
+    </a-form>
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { closeModal } from '@/common/setup/modal/index';
+import { defineComponent, ref } from 'vue';
+import { getCardType, handleForm } from './setup';
+import { AllEnums } from '@/services/go/commonService/interface';
+import { FormState } from './interface';
+import { getAddress } from '@/services/go/adress';
+import { AddUserInfoApplyReq } from '@/services/go/ermcp/customInfo/interface';
+import { getUserId } from '@/services/bus/account';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { QueryAddUserInfoApply } from '@/services/go/ermcp/customInfo';
+import { validateAction } from '@/common/setup/form';
+import UploadImg from '@/common/components/uploadImg/index.vue';
+import { getUploadImg } from '@/common/setup/upload';
+
+export default defineComponent({
+    name: 'add-custom',
+    components: { UploadImg },
+    setup(props, context) {
+        // 控制关闭弹窗
+        const { visible, cancel } = closeModal('custom_info_btn_add');
+        const loading = ref<boolean>(false);
+        // 证件类型
+        const cardTypeList = ref<AllEnums[]>(getCardType());
+        // 表单
+        const { formRef, formState, rules } = handleForm();
+        // 地址
+        const { cityList, districtList, provinceList, getCityList, getDistrictList } = getAddress();
+        // 营业执照
+        const { getFirstImg: getAttachmentImg, uploadImgAction: attachmentUpLoad } = getUploadImg();
+        // 背面证件照地址
+        const { getFirstImg: getBackImg, uploadImgAction: cardbackphotourlUpLoad } = getUploadImg();
+        // 正面证件照地址
+        const { getFirstImg: getFrontImg, uploadImgAction: cardfrontphotourlUpLoad } = getUploadImg();
+        function isPersonal(): boolean {
+            return formState.userinfotype === '1';
+        }
+
+        function submit(OperateType: 1 | 2) {
+            validateAction<FormState>(formRef, formState).then((param) => {
+                const reqParam: AddUserInfoApplyReq = {
+                    customername: Number(param.userinfotype) === 1 ? param.username : param.customername, // 必填
+                    userid: 1, // 写死 必填
+                    memberareaid: getUserId(),
+                    userinfotype: Number(param.userinfotype),
+                    username: param.username,
+                    userstate: OperateType, // 1: 保存草稿 2: 新增
+                    // 以上必填
+                    cardtype: param.cardtype, // 证件类型
+                    cardnum: param.cardnum, // 证件号码
+                    nickname: param.nickname, // 昵称
+                    remark: param.remark, // 备注
+                    mobilephone: param.mobilephone, //  手机号码
+                    telphone: param.telphone, // 电话
+                    cardfrontphotourl: getFrontImg(), // 正面照片
+                    cardbackphotourl: getBackImg(), // 背面证件照地址
+                    cardaddress: param.cardaddress, // 证件地址
+                    cityid: param.cityid, //
+                    districtid: param.districtid, // 地区
+                    // countryid: param.,9
+                    provinceid: param.provinceid, //省
+                    contactname: param.contactname, // 联系人
+                    legalpersonname: param.legalpersonname, // 法人姓名(企业)
+                    taxpayernum: param.taxpayernum, // 纳税人识别号
+                    email: param.email, // email
+                    attachment1: getAttachmentImg(), // 营业执照
+                };
+                requestResultLoadingAndInfo(QueryAddUserInfoApply, reqParam, loading, OperateType === 1 ? ['保存草稿成功', '保存草稿失败:'] : ['新增客户资料成功', '新增客户资料失败:']).then(() => {
+                    cancel();
+                    context.emit('refresh');
+                });
+            });
+        }
+        return {
+            formState,
+            rules,
+            formRef,
+            cardTypeList,
+            isPersonal,
+            visible,
+            cancel,
+            submit,
+            loading,
+            cityList,
+            districtList,
+            provinceList,
+            getCityList,
+            getDistrictList,
+            attachmentUpLoad,
+            cardbackphotourlUpLoad,
+            cardfrontphotourlUpLoad,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.add-custom {
+}
+</style
+>;

+ 27 - 0
src/views/platinum/platinum_customer_info/compoments/add/interface.ts

@@ -0,0 +1,27 @@
+export interface FormState {
+    userinfotype: string; //客户类型
+    customername: string; //客户名称(企业名称)
+    nickname: string; //企业简称
+    cardtype: number | undefined; //证件类型
+
+    cardnum: string; //证件号码 (加密存储)
+    legalpersonname: string; //法人姓名(企业)
+    taxpayernum: string; //纳税人识别号
+    attachment1: string; //附件1
+    attachment2: string; //附件2
+    attachment3: string; //附件3
+    attachment4: string; //附件4
+    attachment5: string; //附件5
+    contactname: string; //联系人
+    mobilephone: string; //手机号码 (加密存储)
+    telphone: string; //联系电话(加密存储)
+    provinceid: number | undefined; //省
+    cityid: number | undefined; //市
+    districtid: number | undefined; //地区
+    remark: string; //备注
+    cardaddress: string; //证件地址 (加密存储)
+    username: string;//用户姓名
+    cardbackphotourl: string;//背面证件照地址
+    cardfrontphotourl: string;//正面证件照地址
+    email: string;//Email地址(加密存储)
+}

+ 79 - 0
src/views/platinum/platinum_customer_info/compoments/add/setup.ts

@@ -0,0 +1,79 @@
+
+import { getCardTypeEnumList } from '@/common/constants/enumsList';
+import { validateCommon } from '@/common/setup/validate';
+import { QueryAddUserInfoApply } from '@/services/go/ermcp/customInfo';
+import { AddUserInfoApplyReq } from '@/services/go/ermcp/customInfo/interface';
+import { message } from 'ant-design-vue';
+import { RuleObject } from 'ant-design-vue/lib/form/interface';
+import { reactive, ref, UnwrapRef } from 'vue';
+import { FormState } from './interface';
+
+/**
+ * 获取证件类型
+ * @returns 
+ */
+export function getCardType() {
+    const arr = [2, 4, 18, 21];
+    return getCardTypeEnumList().filter(e => arr.includes(e.enumitemname))
+}
+
+export function handleForm() {
+    const formRef = ref();
+    const formState: UnwrapRef<FormState> = reactive(initFormState());
+    // 验证仓库类型
+    async function v_cardtype(rule: RuleObject, value: number) {
+        return validateCommon(value, '请选择证件类型')
+    }
+    const rules = {
+        userinfotype: [{ required: true, message: '请选择客户类型', trigger: 'change' }],
+        customername: [{ required: true, message: '请输入企业名称', trigger: 'blur' }],
+        nickname: [{ required: true, message: '请输入企业简称', trigger: 'blur' }],
+        cardtype: [{ required: true, validator: v_cardtype, trigger: 'change' }],
+    };
+    return { formRef, formState, rules }
+}
+
+/**
+ * 初始化表单数据
+ * @returns 
+ */
+export function initFormState(): FormState {
+    return {
+        userinfotype: '2',
+        customername: '',
+        nickname: '',
+        cardtype: undefined,
+        cardnum: '',
+        legalpersonname: '',
+        taxpayernum: '',
+        attachment1: '',
+        attachment2: '',
+        attachment3: '',
+        attachment4: '',
+        attachment5: '',
+        contactname: '',
+        mobilephone: '',
+        telphone: '',
+        provinceid: undefined,
+        cityid: undefined,
+        districtid: undefined,
+        cardaddress: '',
+        remark: '',
+        username: '',
+        cardbackphotourl: '',
+        cardfrontphotourl: '',
+        email: '',
+    }
+}
+
+export function handleApply() {
+    const loading = ref<boolean>(false);
+    function applyAction(param: AddUserInfoApplyReq) {
+        loading.value = true;
+        QueryAddUserInfoApply(param).then(res => {
+        }).catch(err => {
+            message.error(err)
+        }).finally(() => loading.value = false)
+    }
+    return { loading, applyAction }
+}

+ 86 - 0
src/views/platinum/platinum_customer_info/compoments/cancel/index.vue

@@ -0,0 +1,86 @@
+<template>
+  <!-- 撤销客户资料-->
+  <a-modal class="commonModal custom_info_btn_cancel"
+           title="撤销客户资料"
+           v-model:visible="visible"
+           @cancel="cancel"
+           centered
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                class="cancelBtn"
+                @click="cancel">取消</a-button>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading"
+                @click="submit">确认撤销</a-button>
+    </template>
+    <Detail :selectedRow="selectedRow" />
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, ref } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { Modal } from 'ant-design-vue';
+import { ModifyUserInfoReq, QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { QueryModifyUserInfo } from '@/services/go/ermcp/customInfo';
+import Detail from '../common-detail/index.vue';
+
+export default defineComponent({
+    name: 'custom_info_btn_cancel',
+    components: { Detail },
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = closeModal('custom_info_btn_cancel');
+        const loading = ref<boolean>(false);
+        function submit() {
+            loading.value = true;
+            Modal.confirm({
+                title: '是否确认撤销客户资料',
+                content: '是否撤销',
+                okText: '确认撤销',
+                cancelText: '取消',
+                onOk() {
+                    const reqParam: ModifyUserInfoReq = {
+                        userid: props.selectedRow.userid, //用户ID
+                        userstate: 1, //开户状态 - 1:未提交 2: 待初审 3:初审拒绝 4:待复审 5:复审拒绝 6:测评不通过 (必填)
+                    };
+                    requestResultLoadingAndInfo(QueryModifyUserInfo, reqParam, loading, ['撤销成功', '撤销失败:']).then(() => {
+                        cancel();
+                        context.emit('refresh');
+                    });
+                },
+                onCancel() {
+                    loading.value = false;
+                },
+                class: 'test',
+            });
+        }
+
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom_info_btn_cancel {
+    .upload {
+        .look {
+            margin-left: 0;
+        }
+    }
+}
+</style
+>;

+ 117 - 0
src/views/platinum/platinum_customer_info/compoments/check/index.vue

@@ -0,0 +1,117 @@
+<template>
+  <!-- 审核客户资料-->
+  <a-modal class="commonModal custom_info_btn_check"
+           title="审核客户资料"
+           v-model:visible="visible"
+           @cancel="cancel"
+           centered
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                class="cancelBtn"
+                @click="cancel">取消
+      </a-button>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading"
+                @click="submit">审核通过
+      </a-button>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading"
+                @click="refuseSubmit">审核拒绝
+      </a-button>
+    </template>
+    <Detail :selectedRow="selectedRow" />
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, ref } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { UserInfoCheckMangeReq } from '@/services/proto/accountinfo/interface';
+import { getUserId } from '@/services/bus/account';
+import { Modal } from 'ant-design-vue';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { userInfoCheck } from '@/services/proto/accountinfo';
+import Detail from '../common-detail/index.vue';
+
+export default defineComponent({
+    name: 'custom_info_btn_check',
+    components: { Detail },
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const loading = ref<boolean>(false);
+        const { visible, cancel } = closeModal('custom_info_btn_check');
+
+        // 审核通过
+        function submit() {
+            Modal.confirm({
+                title: '是否确认审核通过',
+                okText: '确认通过',
+                cancelText: '取消',
+                onOk() {
+                    let reqParam: UserInfoCheckMangeReq = {
+                        audituserid: getUserId(),
+                        userid: props.selectedRow.userid,
+                        auditflag: 1,
+                        remark: '',
+                    };
+                    requestResultLoadingAndInfo(userInfoCheck, reqParam, loading, ['审核成功', '审核失败:']).then(() => {
+                        cancel();
+                        context.emit('refresh');
+                    });
+                },
+                onCancel() {},
+            });
+        }
+
+        // 审核拒绝
+        function refuseSubmit() {
+            Modal.confirm({
+                title: '是否确认审核拒绝',
+                okText: '审核拒绝',
+                cancelText: '取消',
+                onOk() {
+                    let reqParam: UserInfoCheckMangeReq = {
+                        audituserid: getUserId(),
+                        userid: props.selectedRow.userid,
+                        auditflag: 2,
+                        remark: '',
+                    };
+                    requestResultLoadingAndInfo(userInfoCheck, reqParam, loading, ['审核拒绝成功', '审核拒绝失败:']).then(() => {
+                        cancel();
+                        context.emit('refresh');
+                    });
+                },
+                onCancel() {},
+            });
+        }
+
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            refuseSubmit,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom_info_btn_check {
+    .upload {
+        .look {
+            margin-left: 0;
+        }
+    }
+}
+</style
+>;

+ 114 - 0
src/views/platinum/platinum_customer_info/compoments/common-detail/index.vue

@@ -0,0 +1,114 @@
+<template>
+  <div>
+    <Des :list="desList"
+         @onClick="imgClick" />
+    <a-modal :visible="previewVisible"
+             :footer="null"
+             @cancel="cancelImg">
+      <img alt="预览附件"
+           style="width: 100%"
+           :src="previewImage" />
+    </a-modal>
+  </div>
+
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, watchEffect } from 'vue';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { getStatusName } from '@/common/constants/enumsName';
+import { formatValue } from '@/common/methods';
+import { getCardTypeEnumItemName } from '@/common/constants/enumsName';
+import { Des, DescriptionsList, handleDesList } from '@/common/components/commonDes';
+import { handlePreviewImg } from '@/common/setup/upload';
+
+export default defineComponent({
+    name: 'custom-detail-desc',
+    components: { Des },
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props) {
+        function isPersonal() {
+            return props.selectedRow.userinfotype === '1';
+        }
+        const { desList, getDesList } = handleDesList();
+        // 预览附件
+        const { previewVisible, previewImage, cancelImg, previewImg, getImgName } = handlePreviewImg();
+        //
+        function imgClick({ label }: DescriptionsList) {
+            const { attachment1, cardfrontphotourl, cardbackphotourl } = props.selectedRow;
+            switch (label) {
+                case '营业执照':
+                    previewImg(attachment1);
+                    break;
+                case '身份证正面照':
+                    previewImg(cardfrontphotourl);
+                    break;
+                case '身份证反面照':
+                    previewImg(cardbackphotourl);
+                    break;
+            }
+        }
+        watchEffect(() => {
+            if (props.selectedRow.customername) {
+                const data = props.selectedRow;
+                // 个人
+                const person = [
+                    { label: '客户类型', value: '个人' },
+                    { label: '姓名', value: data.customername },
+                    { label: '身份证号码', value: formatValue(data.cardnum) },
+                    { label: '手机号码', value: formatValue(data.mobile) },
+                    { label: '身份证正面照', value: formatValue(getImgName(data.cardfrontphotourl)), className: 'blue' },
+                    { label: '身份证反面照', value: formatValue(getImgName(data.cardbackphotourl)), className: 'blue'  },
+                    { label: '邮箱', value: formatValue(data.email) },
+                    { label: '联系电话', value: formatValue(data.telphone) },
+                    { label: '通讯地址', value: formatValue(data.address) },
+                    { label: '备注', value: formatValue(data.remark) },
+                ];
+                // 企业
+                const company = [
+                    { label: '客户类型', value: '企业' },
+                    { label: '企业名称', value: data.customername },
+                    { label: '企业简称', value: formatValue(data.nickname) },
+                    { label: '证件类型', value: getCardTypeEnumItemName(data.cardtype) },
+                    { label: '法定代表人', value: formatValue(data.legalpersonname) },
+                    { label: '证件号码', value: formatValue(data.cardnum) },
+                    { label: '纳税人识别号', value: formatValue(data.taxpayernum) },
+                    { label: '营业执照', value: formatValue(getImgName(data.attachment1)), className: 'blue'  },
+                    { label: '联系人', value: formatValue(data.contactname) },
+                    { label: '联系人手机号', value: formatValue(data.mobile) },
+                    { label: '联系电话', value: formatValue(data.telphone) },
+                    { label: '状态', value: getStatusName(data.status), className: 'green' },
+                    { label: '通讯地址', value: formatValue(data.address) },
+                    { label: '备注', value: formatValue(data.remark) },
+                ];
+                getDesList(isPersonal() ? person : company);
+            }
+        });
+        return {
+            desList,
+            previewVisible,
+            previewImage,
+            cancelImg,
+            imgClick,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom-detail {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+    .upload {
+        .look {
+            margin-left: 0;
+        }
+    }
+}
+</style>;

+ 72 - 0
src/views/platinum/platinum_customer_info/compoments/controlModal/index.vue

@@ -0,0 +1,72 @@
+<template>
+  <div>
+    <!-- 详情 -->
+    <Detail :selectedRow="selectedRow" />
+    <!-- 删除客户资料 -->
+    <Delete :selectedRow="selectedRow"
+            @refresh="refresh" />
+    <!-- 新增客户资料 -->
+    <Add @refresh="refresh" />
+    <!-- 修改 -->
+    <Modify :selectedRow="selectedRow"
+            @refresh="refresh" />
+    <!-- 恢复客户资料 -->
+    <Recover :selectedRow="selectedRow"
+             @refresh="refresh" />
+    <!-- 停用 -->
+    <Disable :selectedRow="selectedRow"
+             @refresh="refresh" />
+    <!-- 撤销 -->
+    <Cancel :selectedRow="selectedRow"
+            @refresh="refresh" />
+    <!-- 审核客户资料 -->
+    <Check :selectedRow="selectedRow"
+           @refresh="refresh" />
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType } from 'vue';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import Detail from '../detail/index.vue';
+import Delete from '../delete/index.vue';
+import Add from '../add/index.vue';
+import Modify from '../modify/index.vue';
+import Recover from '../recover/index.vue';
+import Disable from '../disable/index.vue';
+import Cancel from '../cancel/index.vue';
+import Check from '../check/index.vue';
+
+export default defineComponent({
+    name: 'custom-control-modal',
+    components: { Detail, Delete, Add, Modify, Recover, Disable, Cancel, Check },
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        function refresh() {
+            context.emit('context');
+        }
+        return {
+            refresh,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom-detail {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+    .upload {
+        .look {
+            margin-left: 0;
+        }
+    }
+}
+</style>;
+

+ 74 - 0
src/views/platinum/platinum_customer_info/compoments/delete/index.vue

@@ -0,0 +1,74 @@
+<template>
+  <!-- 删除客户资料-->
+  <a-modal class="commonModal recover-custom"
+           title="删除客户资料"
+           v-model:visible="visible"
+           @cancel="cancel"
+           centered
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading"
+                @click="submit">删除客户资料
+      </a-button>
+    </template>
+    <Detail :selectedRow="selectedRow" />
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, ref } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { DeleteUserReq, QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { Modal } from 'ant-design-vue';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { QueryDeleteUserInfoApply } from '@/services/go/ermcp/customInfo';
+import Detail from '../common-detail/index.vue';
+
+export default defineComponent({
+    name: 'recover-custom',
+    components: { Detail },
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = closeModal('custom_info_btn_delete');
+        const loading = ref<boolean>(false);
+        console.log('是否确认删除客户资料');
+        function submit() {
+            Modal.confirm({
+                title: '是否确认删除客户资料',
+                okText: '确认删除',
+                cancelText: '取消',
+                onOk() {
+                    let reqParams: DeleteUserReq = {
+                        userID: props.selectedRow.userid,
+                    };
+                    requestResultLoadingAndInfo(QueryDeleteUserInfoApply, reqParams, loading, ['删除成功', '删除失败:']).then(() => {
+                        cancel();
+                        context.emit('refresh');
+                    });
+                },
+                onCancel() {},
+            });
+        }
+
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.recover-custom {
+}
+</style
+>;

+ 60 - 0
src/views/platinum/platinum_customer_info/compoments/detail/index.vue

@@ -0,0 +1,60 @@
+<template>
+  <!-- 客户资料详情-->
+  <a-modal class="add-custom custom-detail"
+           title="客户资料详情"
+           centered
+           v-model:visible="visible"
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading.loading"
+                @click="cancel">关闭</a-button>
+    </template>
+    <Detail :selectedRow="selectedRow" />
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { computed, defineComponent, PropType, ref } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import Detail from '../common-detail/index.vue';
+
+export default defineComponent({
+    name: 'custom-detail',
+    components: { Detail },
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = closeModal('detail');
+        const loading = ref<boolean>(false);
+        const maskClosableFlag = ref<boolean>(false);
+        return {
+            cancel,
+            visible,
+            loading,
+            maskClosableFlag,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom-detail {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+    .upload {
+        .look {
+            margin-left: 0;
+        }
+    }
+}
+</style>;

+ 81 - 0
src/views/platinum/platinum_customer_info/compoments/disable/index.vue

@@ -0,0 +1,81 @@
+<template>
+  <!-- 停用客户资料-->
+  <a-modal class="commonModal warehouse-disable"
+           title="停用客户资料"
+           v-model:visible="visible"
+           centered
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                class="cancelBtn"
+                @click="cancel">取消
+      </a-button>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading"
+                @click="submit">确认停用
+      </a-button>
+    </template>
+    <Detail :selectedRow="selectedRow" />
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, ref } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType, UpdateUserAccountReq } from '@/services/go/ermcp/customInfo/interface';
+import { Modal } from 'ant-design-vue';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { UpdateUserAccountStatus } from '@/services/go/ermcp/customInfo';
+import Detail from '../common-detail/index.vue';
+
+export default defineComponent({
+    name: 'custom-disable',
+    components: { Detail },
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = closeModal('custom_info_btn_disable');
+        const maskClosableFlag = ref<boolean>(false);
+        const loading = ref<boolean>(false);
+
+        function submit() {
+            Modal.confirm({
+                title: '是否确认停用客户资料',
+                okText: '确认停用',
+                cancelText: '取消',
+                onOk() {
+                    let reqParams: UpdateUserAccountReq = {
+                        userID: props.selectedRow.userid,
+                        accountStatus: 6,
+                    };
+                    requestResultLoadingAndInfo(UpdateUserAccountStatus, reqParams, loading, ['停用成功', '停用失败:']).then(() => {
+                        cancel();
+                        context.emit('refresh');
+                    });
+                },
+                onCancel() {},
+            });
+        }
+
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            maskClosableFlag,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.warehouse-disable {
+}
+</style>

+ 48 - 0
src/views/platinum/platinum_customer_info/compoments/filterTable/index.vue

@@ -0,0 +1,48 @@
+<template>
+  <!-- 过滤客户资料表格 -->
+  <div class="filterTable">
+    <FilterOption :selectList="selectList"
+                  :inputList="inputList"
+                  :fixedBtnList="fixedBtnList" />
+    <slot></slot>
+  </div>
+</template>
+
+<script lang="ts">
+import FilterOption from '@/common/components/filter/index.vue';
+import { defineComponent } from 'vue';
+import { handleFilter, InputList, SelectList } from '@/common/setup/filter';
+
+export default defineComponent({
+    name: 'filter-custom-table',
+    components: { FilterOption },
+    setup(props, context) {
+        const select: SelectList[] = [
+            {
+                value: undefined,
+                key: 'userinfotype',
+                placeholder: '全部客户类型',
+                list: [
+                    { value: 1, lable: '个人' },
+                    { value: 2, lable: '企业' },
+                ],
+            },
+        ];
+        const input: InputList[] = [
+            { value: '', placeholder: '模糊搜索客户简称', key: 'nickname' },
+            { value: '', placeholder: '模糊搜索客户名称', key: 'name' },
+            { value: '', placeholder: '模糊搜索手机号码', key: 'phone' },
+        ];
+        const { selectList, inputList, fixedBtnList } = handleFilter(select, input, context);
+        return {
+            selectList,
+            inputList,
+            fixedBtnList,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+
+</style>;

+ 15 - 0
src/views/platinum/platinum_customer_info/compoments/index.ts

@@ -0,0 +1,15 @@
+import AddCustom from './add/index.vue';
+import Cancel from './cancel/index.vue';
+import Check from './check/index.vue';
+import DeleteCustom from './delete/index.vue';
+import CustomDetail from './detail/index.vue';
+import DisableCustom from './disable/index.vue';
+import filterCustomTable from './filterTable/index.vue';
+import ModifyCustom from './modify/index.vue';
+import RecoverCustom from './recover/index.vue';
+
+export {
+    filterCustomTable, CustomDetail, DeleteCustom, RecoverCustom, ModifyCustom,
+    DisableCustom, AddCustom, Cancel, Check
+};
+

+ 426 - 0
src/views/platinum/platinum_customer_info/compoments/modify/index.vue

@@ -0,0 +1,426 @@
+<template>
+  <!-- 修改客户资料 -->
+  <a-modal class="commonModal modify-custom"
+           title="修改客户资料"
+           v-if="visible"
+           v-model:visible="visible"
+           centered
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                class="cancelBtn"
+                @click="submit(1)">保存草稿
+      </a-button>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading"
+                @click="submit(2)">提交修改</a-button>
+    </template>
+    <a-form class="inlineForm"
+            ref="formRef"
+            :model="formState"
+            :rules="rules">
+      <a-row :gutter="24">
+        <a-col :span="12">
+          <a-form-item label="客户类型"
+                       name="userinfotype">
+            <a-select class="typeSelect"
+                      style="width: 200px"
+                      v-model:value="formState.userinfotype"
+                      placeholder="请选择客户类型">
+              <a-select-option value="1">
+                个人
+              </a-select-option>
+              <a-select-option value="2">
+                企业
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </a-col>
+        <template v-if="!isPersonal()">
+          <a-col :span="12">
+            <a-form-item label="企业名称"
+                         name="customername">
+              <a-input class="dialogInput"
+                       v-model:value="formState.customername"
+                       style="width: 200px"
+                       placeholder="请输入企业名称" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="企业简称"
+                         name="nickname">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.nickname"
+                       placeholder="请输入企业简称" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="证件类型"
+                         name="cardtype">
+              <a-select class="inlineFormSelect"
+                        v-model:value="formState.cardtype"
+                        style="width: 200px"
+                        placeholder="请选择证件类型">
+                <a-select-option :value="item.enumitemname"
+                                 v-for="item in cardTypeList"
+                                 :key="item.autoid">
+                  {{ item.enumdicname }}
+                </a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="法定代表人"
+                         name="legalpersonname">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.legalpersonname"
+                       placeholder="请输入法定代表人" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="证件号码"
+                         name="cardnum">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.cardnum"
+                       placeholder="请输入证件号码" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="纳税人识别号"
+                         name="taxpayernum">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.taxpayernum"
+                       placeholder="请输入纳税人识别号" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="营业执照">
+              <UploadImg :visible="visible"
+                         :imgList="attachmentImgList"
+                         @upload="attachmentUpload" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="联系人"
+                         name="contactname">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.contactname"
+                       placeholder="请输入联系人" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="联系人手机号"
+                         name="mobilephone">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.mobilephone"
+                       placeholder="请输入联系人手机号" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="联系电话"
+                         name="telphone">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.telphone"
+                       placeholder="请输入联系电话" />
+            </a-form-item>
+          </a-col>
+        </template>
+        <template v-else>
+          <a-col :span="12">
+            <a-form-item label="姓名"
+                         name="username">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.username"
+                       placeholder="请输入姓名" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="身份证号码"
+                         name="cardnum">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.cardnum"
+                       placeholder="请输入身份证号码" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="手机号码"
+                         name="mobilephone">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.mobilephone"
+                       placeholder="请输入手机号码" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="身份证正面照"
+                         name="cardbackphotourl">
+              <UploadImg :visible="visible"
+                         :imgList="cardfrontImgList"
+                         @upload="cardfrontUpload" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="邮箱"
+                         name="email">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.email"
+                       placeholder="请输入邮箱" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="身份证反面照"
+                         name="cardfrontphotourl">
+              <UploadImg :visible="visible"
+                         :imgList="cardbackImgList"
+                         @upload="cardbackUpload" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item label="联系电话"
+                         name="telphone">
+              <a-input class="dialogInput"
+                       style="width: 200px"
+                       v-model:value="formState.telphone"
+                       placeholder="请输入联系电话" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item>
+              &nbsp;
+            </a-form-item>
+          </a-col>
+        </template>
+        <a-col :span="24">
+          <a-form-item label="通讯地址">
+            <a-select class="inlineFormSelect"
+                      style="width: 205px"
+                      v-model:value="formState.provinceid"
+                      @change="getCityList"
+                      placeholder="请选择省">
+              <a-select-option v-for="item in provinceList"
+                               :key="item.autoid"
+                               :value="item.autoid">
+                {{ item.divisionname }}
+              </a-select-option>
+            </a-select>
+            <a-select class="inlineFormSelect ml9"
+                      style="width: 205px"
+                      v-model:value="formState.cityid"
+                      @change="getDistrictList"
+                      placeholder="请选择市">
+              <a-select-option v-for="item in cityList"
+                               :key="item.autoid"
+                               :value="item.autoid">
+                {{ item.divisionname }}
+              </a-select-option>
+            </a-select>
+            <a-select class="inlineFormSelect ml9"
+                      v-model:value="formState.districtid"
+                      style="width: 205px"
+                      placeholder="请选择县(区)">
+              <a-select-option v-for="item in districtList"
+                               :key="item.autoid"
+                               :value="item.autoid">
+                {{ item.divisionname }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </a-col>
+        <a-col :span="24">
+          <a-form-item label="&nbsp;"
+                       name="cardaddress">
+            <a-input class="dialogInput"
+                     style="width: 635px"
+                     v-model:value="formState.cardaddress"
+                     placeholder="请输入详细地址" />
+          </a-form-item>
+        </a-col>
+        <a-col :span="24">
+          <a-form-item label="备注"
+                       name="remark">
+            <a-input class="dialogInput"
+                     style="width: 635px"
+                     v-model:value="formState.remark"
+                     placeholder="请输入备注" />
+          </a-form-item>
+        </a-col>
+      </a-row>
+    </a-form>
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { closeModal } from '@/common/setup/modal/index';
+import { defineComponent, PropType, ref, watchEffect } from 'vue';
+import { getCardType, handleForm, initFormState } from '../add/setup';
+import { AllEnums } from '@/services/go/commonService/interface';
+import { FormState } from '../add/interface';
+import { getAddress } from '@/services/go/adress';
+import { ModifyUserInfoApplyReq, QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { getUserId } from '@/services/bus/account';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { QueryModifyUserInfoApply } from '@/services/go/ermcp/customInfo';
+import { mergeTwoObj } from '@/utils/objHandle';
+import { validateAction } from '@/common/setup/form';
+import { delAddress } from '@/services/socket/address';
+import UploadImg from '@/common/components/uploadImg/index.vue';
+import { getUploadImg } from '@/common/setup/upload';
+
+export default defineComponent({
+    name: 'modify-custom',
+    components: { UploadImg },
+    props: {
+        selectedRow: {
+            default: initFormState,
+            type: Object as PropType<QueryCustomInfoType>,
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = closeModal('custom_info_btn_modify');
+        const loading = ref<boolean>(false);
+        // 证件类型
+        const cardTypeList = ref<AllEnums[]>(getCardType());
+        // 表单
+        const { formRef, formState, rules } = handleForm();
+        // 地址
+        const { cityList, districtList, provinceList, getCityList, getDistrictList } = getAddress();
+        // 营业执照
+        const { uploadImgAction: attachmentUpload, uploadImgList: attachmentImgList, handleImg: attachmentHandle } = getUploadImg();
+        // 背面证件照地址
+        const { uploadImgAction: cardbackUpload, uploadImgList: cardbackImgList, handleImg: cardbackHandle } = getUploadImg();
+        // 正面证件照地址
+        const { uploadImgAction: cardfrontUpload, uploadImgList: cardfrontImgList, handleImg: cardfrontHandle } = getUploadImg();
+
+        function isPersonal(): boolean {
+            return formState.userinfotype === '1';
+        }
+
+        const userid = ref<number>(0);
+        const countryid = ref<number>(0);
+        watchEffect(() => {
+            if (visible.value) {
+                userid.value = props.selectedRow.userid;
+                countryid.value = props.selectedRow.countryid;
+                mergeTwoObj(formState, props.selectedRow);
+                if (isPersonal()) {
+                    formState.username = props.selectedRow.customername;
+                }
+                const { provinceid, cityid, address, mobile, attachment1, cardfrontphotourl, cardbackphotourl } = props.selectedRow;
+                formState.cardaddress = address;
+                formState.mobilephone = mobile;
+                provinceid ? getCityList(provinceid) : (formState.provinceid = undefined);
+                cityid ? getDistrictList(cityid) : ((formState.cityid = undefined), (formState.districtid = undefined));
+                if (attachment1) {
+                    // 营业执照
+                    attachmentImgList.value = attachmentHandle(attachment1);
+                }
+                if (cardbackphotourl) {
+                    // 背面证件照地址
+                    cardbackImgList.value = cardbackHandle(cardbackphotourl);
+                }
+                if (cardbackphotourl) {
+                    // 正面证件照地址
+                    cardfrontImgList.value = cardfrontHandle(cardbackphotourl);
+                }
+            }
+        });
+        function submit(OperateType: 1 | 2) {
+            validateAction<FormState>(formRef, formState).then((param) => {
+                const reqParam: ModifyUserInfoApplyReq = {
+                    customername: Number(param.userinfotype) === 1 ? param.username : param.customername, // 必填
+                    username: param.username,
+                    userid: userid.value,
+                    memberareaid: getUserId(),
+                    userinfotype: Number(param.userinfotype),
+                    userstate: OperateType, // 1: 保存草稿 2: 新增
+                    cardtype: param.cardtype, // 证件类型
+                    cardnum: param.cardnum, // 证件号码
+                    nickname: param.nickname, // 昵称
+                    remark: param.remark, // 备注
+                    mobilephone: param.mobilephone, //  手机号码
+                    telphone: param.telphone, // 电话
+                    cardfrontphotourl: param.cardfrontphotourl, // 正面照片
+                    cardaddress: param.cardaddress, // 证件地址
+                    cityid: param.cityid, //
+                    districtid: param.districtid, // 地区
+                    countryid: countryid.value,
+                    provinceid: param.provinceid, //省
+                    contactname: param.contactname, // 联系人
+                    legalpersonname: param.legalpersonname, // 法人姓名(企业)
+                    taxpayernum: param.taxpayernum, // 纳税人识别号
+                    email: param.email, // email
+                };
+                requestResultLoadingAndInfo(QueryModifyUserInfoApply, reqParam, loading, OperateType === 1 ? ['保存草稿成功', '保存草稿失败:'] : ['新增客户资料成功', '新增客户资料失败:']).then(() => {
+                    cancel();
+                    context.emit('refresh');
+                });
+            });
+        }
+        return {
+            formState,
+            rules,
+            formRef,
+            cardTypeList,
+            isPersonal,
+            visible,
+            cancel,
+            submit,
+            loading,
+            cityList,
+            districtList,
+            provinceList,
+            getCityList,
+            getDistrictList,
+            attachmentUpload,
+            attachmentImgList,
+            cardbackUpload,
+            cardbackImgList,
+            cardfrontUpload,
+            cardfrontImgList,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.modify-custom {
+    .upload {
+        display: inline-flex;
+        .ant-btn.uploadBtn {
+            width: 60px;
+            height: 30px;
+            background: @m-blue0;
+            border: 0;
+            padding: 0;
+            text-align: center;
+            font-size: 14px;
+            color: @m-white0;
+            .rounded-corners(3px);
+            &:hover {
+                background: rgba(@m-blue0, 0);
+                color: rgba(@m-white0, 0.8);
+            }
+        }
+        .look {
+            color: @m-blue0;
+            font-size: 14px;
+            margin-left: 10px;
+            cursor: pointer;
+        }
+    }
+}
+</style
+>;

+ 78 - 0
src/views/platinum/platinum_customer_info/compoments/recover/index.vue

@@ -0,0 +1,78 @@
+<template>
+  <!-- 恢复客户资料-->
+  <a-modal class="commonModal warehouse-disable"
+           title="恢复客户资料"
+           v-model:visible="visible"
+           @cancel="cancel"
+           centered
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                class="cancelBtn"
+                @click="cancel">取消
+      </a-button>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading"
+                @click="recover">完成
+      </a-button>
+    </template>
+    <Detail :selectedRow="selectedRow" />
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, ref } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType, UpdateUserAccountReq } from '@/services/go/ermcp/customInfo/interface';
+import { Modal } from 'ant-design-vue';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { UpdateUserAccountStatus } from '@/services/go/ermcp/customInfo';
+import Detail from '../common-detail/index.vue';
+
+export default defineComponent({
+    name: 'modify-custom',
+    components: { Detail },
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = closeModal('custom_info_btn_recover');
+        const loading = ref<boolean>(false);
+        // 恢复方法
+        function recover() {
+            Modal.confirm({
+                title: '是否确认恢复客户资料',
+                okText: '确认恢复',
+                cancelText: '取消',
+                onOk() {
+                    let reqParams: UpdateUserAccountReq = {
+                        userID: props.selectedRow.userid,
+                        accountStatus: 4,
+                    };
+                    requestResultLoadingAndInfo(UpdateUserAccountStatus, reqParams, loading, ['恢复成功', '恢复失败:']).then(() => {
+                        cancel();
+                        context.emit('refresh');
+                    });
+                },
+                onCancel() {},
+            });
+        }
+        return {
+            visible,
+            cancel,
+            recover,
+            loading,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.modify-custom {
+}
+</style
+>;

+ 98 - 0
src/views/platinum/platinum_customer_info/list/checkpending/index.vue

@@ -0,0 +1,98 @@
+<template>
+  <!-- 客户信息: 正常 -->
+  <div class="custom_info_checkpending"
+       :loading="loading">
+    <filterCustomTable @search="search">
+      <BtnList :btnList="commonBtn" />
+    </filterCustomTable>
+    <contextMenu :contextMenuList="forDataBtn">
+      <a-table :columns="columns"
+               class="topTable hiddenFirstCol"
+               :pagination="false"
+               :expandedRowKeys="expandedRowKeys"
+               :customRow="Rowclick"
+               rowKey="key"
+               :data-source="tableList">
+        <!-- 额外的展开行 -->
+        <template #expandedRowRender="{  }">
+          <BtnList :btnList="forDataBtn" />
+        </template>
+        <template #userinfotype="{ text }">
+          <a>{{ text === '2' ? '企业' : '个人' }}</a>
+        </template>
+        <template #status="{ text }">
+          <a>{{ getStatusName(text) }}</a>
+        </template>
+        <template #cardtype="{ text }">
+          <a>{{ getCardTypeEnumItemName(text) }}</a>
+        </template>
+      </a-table>
+    </contextMenu>
+    <Middle :selectedRow="selectedRow"
+            @refresh="queryTable" />
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, initData, getTableColumns, getTableEvent, getBtnList, contextMenu, BtnList } from '@/common/export/table';
+
+import { filterCustomTable } from '../../compoments';
+import { queryTableList, QueryCustomInfoType } from '../index';
+import { getStatusName } from '@/common/constants/enumsName';
+import { getCardTypeEnumItemName } from '@/common/constants/enumsName';
+import Middle from '@/views/information/custom/compoments/controlModal/index.vue';
+
+export default defineComponent({
+    name: 'custom_info_checkpending',
+    components: {
+        filterCustomTable,
+        contextMenu,
+        BtnList,
+        Middle,
+    },
+    setup() {
+        // 表头数据
+        const { columns, registerColumn, updateColumn, filteredInfo } = getTableColumns();
+        // 表格事件
+        const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<QueryCustomInfoType>({});
+        // 表格操作按钮列表
+        const { commonBtn, forDataBtn } = getBtnList('custom_info_checkpending', true);
+        // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList(2);
+        initData(() => {
+            // 获取列表数据
+            queryTable();
+            // 注册表头信息 过滤
+            registerColumn('table_pcweb_userinfo', ['userinfotype', 'nickname', 'contactname', 'mobile']);
+        });
+
+        // 查询
+        function search(value: any) {
+            filteredInfo.value = value;
+            // 更新表信息
+            updateColumn();
+        }
+
+        return {
+            columns,
+            filteredInfo,
+            expandedRowKeys,
+            selectedRow,
+            Rowclick,
+            commonBtn,
+            forDataBtn,
+            loading,
+            tableList,
+            search,
+            getStatusName,
+            getCardTypeEnumItemName,
+            queryTable,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom_info_checkpending {
+}
+</style>

+ 6 - 0
src/views/platinum/platinum_customer_info/list/index.ts

@@ -0,0 +1,6 @@
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { queryTableList } from './setup';
+
+export { queryTableList };
+export type { QueryCustomInfoType };
+

+ 97 - 0
src/views/platinum/platinum_customer_info/list/normal-use/index.vue

@@ -0,0 +1,97 @@
+<template>
+  <!-- 客户信息: 正常 -->
+  <div class="custom-normal"
+       :loading="loading">
+    <filterCustomTable @search="search">
+      <BtnList :btnList="commonBtn" />
+    </filterCustomTable>
+    <contextMenu :contextMenuList="forDataBtn">
+      <a-table :columns="columns"
+               class="topTable hiddenFirstCol"
+               :pagination="false"
+               :expandedRowKeys="expandedRowKeys"
+               :customRow="Rowclick"
+               rowKey="key"
+               :data-source="tableList">
+        <!-- 额外的展开行 -->
+        <template #expandedRowRender="{  }">
+          <BtnList :btnList="forDataBtn" />
+        </template>
+        <template #userinfotype="{ text }">
+          <a>{{ text === '2' ? '企业' : '个人' }}</a>
+        </template>
+        <template #status="{ text }">
+          <a>{{ getStatusName(text) }}</a>
+        </template>
+        <template #cardtype="{ text }">
+          <a>{{ getCardTypeEnumItemName(text) }}</a>
+        </template>
+      </a-table>
+    </contextMenu>
+    <Middle :selectedRow="selectedRow"
+            @refresh="queryTable" />
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, initData, getTableColumns, getTableEvent, getBtnList, contextMenu, BtnList } from '@/common/export/table';
+
+import { filterCustomTable } from '../../compoments';
+import { queryTableList, QueryCustomInfoType } from '../index';
+import { getStatusName } from '@/common/constants/enumsName';
+import { getCardTypeEnumItemName } from '@/common/constants/enumsName';
+import Middle from '@/views/information/custom/compoments/controlModal/index.vue';
+export default defineComponent({
+    name: 'custom-normal',
+    components: {
+        filterCustomTable,
+        contextMenu,
+        BtnList,
+        Middle,
+    },
+    setup() {
+        // 表头数据
+        const { columns, registerColumn, updateColumn, filteredInfo } = getTableColumns();
+        // 表格事件
+        const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<QueryCustomInfoType>({});
+        // 表格操作按钮列表
+        const { commonBtn, forDataBtn } = getBtnList('custom_info_normal', true);
+        // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList(3);
+        initData(() => {
+            // 获取列表数据
+            queryTable();
+            // 注册表头信息 过滤
+            registerColumn('table_pcweb_userinfo', ['userinfotype', 'nickname', 'contactname', 'mobile']);
+        });
+
+        // 查询
+        function search(value: any) {
+            filteredInfo.value = value;
+            // 更新表信息
+            updateColumn();
+        }
+
+        return {
+            columns,
+            filteredInfo,
+            expandedRowKeys,
+            selectedRow,
+            Rowclick,
+            commonBtn,
+            forDataBtn,
+            loading,
+            tableList,
+            search,
+            getStatusName,
+            getCardTypeEnumItemName,
+            queryTable,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom-normal {
+}
+</style>

+ 35 - 0
src/views/platinum/platinum_customer_info/list/setup.ts

@@ -0,0 +1,35 @@
+import { QueryCustomInfo } from '@/services/go/ermcp/customInfo';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { QueryCustomInfoEnum } from '@/services/go/ermcp/customInfo/type';
+import { message } from 'ant-design-vue';
+import { ref } from 'vue';
+
+/**
+ * 获取表格列表数据
+ * @param type 
+ * @returns 
+ */
+export function queryTableList(type: QueryCustomInfoEnum) {
+    // 加载状态
+    const loading = ref<boolean>(false);
+    // 表格数据
+    const tableList = ref<QueryCustomInfoType[]>([]);
+    function queryTable() {
+        QueryCustomInfo(type)
+            .then((res) => {
+                tableList.value = res.map((e, i) => {
+                    return { ...e, key: String(i) };
+                });
+                loading.value = false;
+                console.log('查询列表', tableList);
+            })
+            .catch((err) => {
+                message.error(err);
+                loading.value = false;
+            });
+    }
+    return { loading, tableList, queryTable }
+}
+
+
+

+ 100 - 0
src/views/platinum/platinum_customer_info/list/stop-use/index.vue

@@ -0,0 +1,100 @@
+<template>
+  <!-- 客户信息: 停用 -->
+  <div class="custom-normal"
+       :loading="loading">
+    <filterCustomTable @search="search">
+      <BtnList :btnList="commonBtn" />
+    </filterCustomTable>
+    <contextMenu :contextMenuList="forDataBtn">
+      <a-table :columns="columns"
+               class="topTable hiddenFirstCol"
+               :expandedRowKeys="expandedRowKeys"
+               :customRow="Rowclick"
+               :pagination="false"
+               rowKey="key"
+               :data-source="tableList">
+        <!-- 额外的展开行 -->
+        <template #expandedRowRender="{  }">
+          <BtnList :btnList="forDataBtn" />
+        </template>
+        <template #userinfotype="{ text }">
+          <a>{{ text === '2' ? '企业' : '个人' }}</a>
+        </template>
+        <template #status="{ text }">
+          <a>{{ getStatusName(text) }}</a>
+        </template>
+        <template #cardtype="{ text }">
+          <a>{{ getCardTypeEnumItemName(text) }}</a>
+        </template>
+      </a-table>
+    </contextMenu>
+    <Middle :selectedRow="selectedRow"
+            @refresh="queryTable" />
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, initData, getTableColumns, getTableEvent, getBtnList, contextMenu, BtnList } from '@/common/export/table';
+
+import { filterCustomTable } from '../../compoments';
+
+import { queryTableList, QueryCustomInfoType } from '../index';
+import { getStatusName } from '@/common/constants/enumsName';
+import { getCardTypeEnumItemName } from '@/common/constants/enumsName';
+import Middle from '@/views/information/custom/compoments/controlModal/index.vue';
+
+export default defineComponent({
+    name: 'custom-normal',
+    components: {
+        filterCustomTable,
+        contextMenu,
+        BtnList,
+        Middle,
+    },
+    setup() {
+        // 表头数据
+        const { columns, registerColumn, updateColumn, filteredInfo } = getTableColumns();
+        // 表格事件
+        const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<QueryCustomInfoType>({});
+        // 表格操作按钮列表
+        const { commonBtn, forDataBtn } = getBtnList('custom_info_disabled', true);
+        // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList(4);
+        initData(() => {
+            // 获取列表数据
+            queryTable();
+            // 注册表头信息 过滤
+            registerColumn('table_pcweb_userinfo', ['userinfotype', 'nickname', 'contactname', 'mobile']);
+        });
+
+        // 查询
+        function search(value: any) {
+            filteredInfo.value = value;
+            // 更新表信息
+            updateColumn();
+        }
+
+        return {
+            columns,
+            filteredInfo,
+            expandedRowKeys,
+            selectedRow,
+            Rowclick,
+            commonBtn,
+            forDataBtn,
+            loading,
+            tableList,
+            search,
+            getStatusName,
+            getCardTypeEnumItemName,
+            queryTable,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom-normal {
+}
+</style
+>;

+ 106 - 0
src/views/platinum/platinum_customer_info/list/unsubmit/index.vue

@@ -0,0 +1,106 @@
+<template>
+  <!-- 客户信息: 正常 -->
+  <div class="custom_info_unsubmit"
+       :loading="loading">
+    <filterCustomTable @search="search">
+      <BtnList :btnList="commonBtn" />
+    </filterCustomTable>
+    <contextMenu :contextMenuList="forDataBtn">
+      <a-table :columns="columns"
+               class="topTable hiddenFirstCol"
+               :pagination="false"
+               :expandedRowKeys="expandedRowKeys"
+               :customRow="Rowclick"
+               rowKey="key"
+               :data-source="tableList">
+        <!-- 额外的展开行 -->
+        <template #expandedRowRender="{  }">
+          <BtnList :btnList="forDataBtn" />
+        </template>
+        <template #userinfotype="{ text }">
+          <a>{{ text === '2' ? '企业' : '个人' }}</a>
+        </template>
+        <template #status="{ text }">
+          <a>{{ getStatusName(text) }}</a>
+        </template>
+        <template #cardtype="{ text }">
+          <a>{{ getCardTypeEnumItemName(text) }}</a>
+        </template>
+      </a-table>
+    </contextMenu>
+    <Middle :selectedRow="selectedRow"
+            @refresh="queryTable" />
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, initData, getTableColumns, getTableEvent, getBtnList, contextMenu, BtnList } from '@/common/export/table';
+
+import { filterCustomTable } from '../../compoments';
+import { queryTableList, QueryCustomInfoType } from '../index';
+import { getStatusName } from '@/common/constants/enumsName';
+import { getCardTypeEnumItemName } from '@/common/constants/enumsName';
+import Middle from '@/views/information/custom/compoments/controlModal/index.vue';
+
+export default defineComponent({
+    name: 'custom_info_unsubmit',
+    components: {
+        filterCustomTable,
+        contextMenu,
+        BtnList,
+        Middle,
+    },
+    setup() {
+        // 表头数据
+        const { columns, registerColumn, updateColumn, filteredInfo } = getTableColumns();
+        // 表格事件
+        const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<QueryCustomInfoType>({});
+        // 表格操作按钮列表
+        const { commonBtn, forDataBtn } = getBtnList('custom_info_unsubmit', true);
+        // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList(1);
+        initData(() => {
+            // 获取列表数据
+            queryTable();
+            // 注册表头信息 过滤
+            registerColumn('table_pcweb_userinfo', ['userinfotype', 'nickname', 'contactname', 'mobile']);
+        });
+
+        // 查询
+        function search(value: any) {
+            filteredInfo.value = value;
+            // 更新表信息
+            updateColumn();
+        }
+
+        return {
+            columns,
+            filteredInfo,
+            expandedRowKeys,
+            selectedRow,
+            Rowclick,
+            commonBtn,
+            forDataBtn,
+            loading,
+            tableList,
+            search,
+            getStatusName,
+            getCardTypeEnumItemName,
+            queryTable,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.custom_info_unsubmit {
+    .topTable {
+        .operBtn.ant-btn {
+            margin-top: 0;
+            margin-bottom: 0;
+            height: 26px;
+            line-height: 26px;
+        }
+    }
+}
+</style>

+ 12 - 0
src/views/platinum/platinum_customer_info/setup.ts

@@ -0,0 +1,12 @@
+import { ResultInfo } from "@/common/methods/request/interface";
+
+
+
+/************** 接口相关提示 **************** /
+ *
+ */
+
+export const ChangeCustomInfoSign = new Map<number, ResultInfo>([
+    [1, ['修改客户资料草稿成功', '修改客户资料草稿失败:']],
+    [2, ['修改客户资料成功', '修改客户资料失败:']],
+])