个人中心

This commit is contained in:
songyang 2023-12-05 17:05:54 +08:00
parent 054edc96ff
commit 7284d749cf
10 changed files with 638 additions and 69 deletions

2
components.d.ts vendored
View File

@ -37,6 +37,8 @@ declare module 'vue' {
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
TableComponent: typeof import('./src/components/TableComponent/index.vue')['default']
UploadCom: typeof import('./src/components/uploadComponent/uploadCom.vue')['default']
UploadComponent: typeof import('./src/components/uploadComponent/index.vue')['default']
UploadImg: typeof import('./src/components/uploadImg.vue')['default']
}
}

11
env/.env.dev vendored
View File

@ -7,5 +7,14 @@ VITE_API_URL = '/proxyApi'
# 开发环境接口地址
# VITE_proxyTarget = 'http://10.40.92.66:9205' #盛旭
VITE_proxyTarget = 'http://10.40.92.185:9200' # 赵福海
# VITE_proxyTarget = 'http://10.40.92.185:9200' # 赵福海 (登录)
# VITE_proxyTarget = 'http://10.40.92.185:9301' # 赵福海 (商品分类)
VITE_proxyTarget = 'http://10.40.92.253:8080' # 牛 (个人中心 基础信息企业申请认证)

View File

@ -0,0 +1,225 @@
<template>
<div>
<!--action="/api/abk/web/v1/resource/file" -->
<el-upload
:action="actionUrl"
:auto-upload="autoUpload"
style="width: 100%"
:on-success="(response, file) => successUpload(response, file)"
:on-error="errorUpload"
:accept="acceptTypeList.join(',')"
:before-upload="beforeUpload"
:multiple="multiple"
:limit="maxLimit"
:on-exceed="handleExceed"
:file-list="fileList"
:disabled="disabledFlag"
:on-remove="(file, fileList) => removeFile(file, fileList)"
:on-preview="(file) => preview(file)"
:on-progress="(event, file, fileList) => onProgressFn(event, file, fileList)"
list-type="picture-card">
<!-- 上传的按钮 或者 icon 通过具名插槽的方式 -->
<slot name="uploadBtn"></slot>
</el-upload>
<el-progress v-if="showProcessFlag && processFlag" :percentage="loadProcess"></el-progress>
</div>
</template>
<script lang="ts" setup>
import { ref, nextTick } from 'vue'
import { ElMessage } from 'element-plus'
import { Base64 } from 'js-base64'
const props = defineProps({
actionUrl: {
//
type: String,
default: ''
},
autoUpload: {
//
type: Boolean,
default: false
},
acceptTypeList: {
//
type: Array,
default: () => {
return ['.jpg', '.jpeg', '.png']
// ['doc', 'docx', 'xlsx', 'xls', 'txt', 'pdf','jpg','jpeg','png','zip,'rar']
}
},
multiple: {
//
type: Boolean,
default: false
},
maxLimit: {
//
type: Number || String,
default: 1
},
maxSize: {
// M
type: Number || String,
default: 4
},
disabledFlag: {
//
type: Boolean,
default: false
},
fileList: {
//
type: Array,
default: () => {
return []
}
},
listType: {
type: String, //'text' | 'picture' | 'picture-card'
default: 'picture'
},
extraData: {}, // name
/*
{
name:'12321'
}
*/
dragFlag: {
type: Boolean,
default: true // element
},
downLoadTypeList: {
//
type: Array,
default: () => {
return ['doc', 'docx', 'xlsx', 'xls', 'txt']
}
},
preveiwTypeList: {
//
type: Array,
default: () => {
return ['pdf', 'jpg', 'jpeg', 'png']
}
},
officePreviewFlag: {
//office线
type: Boolean,
default: false
},
showProcessFlag: {
//
type: Boolean,
default: false
}
})
// office
// https://view.officeapps.live.com/op/view.aspx?src=
// https://view.officeapps.live.com/op/view.aspx?src=
//
const officeOnlineAddress = 'https://view.officeapps.live.com/op/view.aspx?src='
const officeType = ['doc', 'docx', 'xlsx', 'xls']
let processFlag = ref(false) //
let loadProcess = ref(0) //
//
const successUpload = (response: any, file: any) => {
console.log('successUpload', response, file)
if (response.rt.status === 200) {
props.fileList.push({
url: response.data,
name: file.name
})
} else {
ElMessage({
type: 'warning',
message: response.data
})
}
}
const errorUpload = (res: any) => {
ElMessage({
type: 'warning',
message: '上传失败请重试!'
})
}
const beforeUpload = (file) => {
const { name = '', size } = file
if (size > props.maxSize * 1024 * 1000) {
ElMessage({
type: 'warning',
message: `文件最大仅支持${props.maxSize}M`
})
return false
}
if (!props.acceptTypeList.includes(name.split('.').pop()) + '.') {
ElMessage({
type: 'warning',
message: `文件格式仅支持${props.acceptTypeList.join(',')}M`
})
return false
}
}
const handleExceed = (files, fileList) => {
ElMessage({
type: 'warning',
message: `当前限制选择 10 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件`
})
}
//
const removeFile = (file, data) => {
console.log(file, data)
props.fileList = data
}
//
const preview = (data) => {
const { url, response = {} } = data || {}
let name = data.name
const downLoadTypeList = props.downLoadTypeList
const preveiwTypeList = props.preveiwTypeList
if (!name) {
name = ''
}
const suffixFileType = name.split('.').pop()
if (downLoadTypeList.includes(suffixFileType)) {
// 'doc', 'docx', 'xlsx', 'xls', 'txt'
name = name.replace(/&/g, '') // &
const target = encodeURIComponent(
Base64.encode(
`${location.origin}/api/abk/web/v1/resource/file?fileId=${
url || response.data
}&fullfilename=${name}&sid=4AC67ADB4E264AB0A8B899A671072875`
)
)
if (props.officePreviewFlag && officeType.includes(suffixFileType)) {
// office
const preveiewURL = officeOnlineAddress + target
window.open(preveiewURL)
} else {
// office
window.open(`https://test/preview/onlinePreview?url=${target}`, '_blank')
}
} else if (preveiwTypeList.includes(suffixFileType)) {
//
window.open('/api/abk/web/v1/resource/file?fileId=' + (url || response.data), '_blank')
}
}
const onProgressFn = (event, file, fileList) => {
processFlag.value = true
loadProcess.value = event.percent.toFixed(2)
if (loadProcess.value >= 100) {
loadProcess.value = 100
nextTick(() => {
processFlag.value = false
})
}
}
</script>
<style lang="scss" scoped></style>

View File

@ -0,0 +1,5 @@
import { get, post } from '../../index'
export const getGoodsClassListApi = () => {
return get('/maType/getEquipmentType', {})
}

View File

@ -0,0 +1,9 @@
// 个人中心 基础信息模块
import { get, post } from '../../index'
// 申请企业信息认证接口
export const applyAttestationApi = (data: any) => {
return post('/company_info/addCompanyInfo', data)
}

View File

@ -1,3 +1,5 @@
import { get, post } from 'http/index'
export const useStore = defineStore('myUser', {
state: () => {
return {
@ -7,7 +9,13 @@ export const useStore = defineStore('myUser', {
{ title: '基础信息', name: 'baseInfo' },
{ title: '订单管理', name: 'orderManagement' },
{ title: '子账号管理', name: 'subAccount' }
]
],
provinceList: [], // 省份信息
marketList: [], // 市级信息
areaList: [], // 区级信息
idTypeList: [], // 证件类型
companyTypeList: [],//企业类型
companyLtdList: [] //企业所属
}
},
getters: {
@ -26,6 +34,43 @@ export const useStore = defineStore('myUser', {
editcurrentMenuList(val: any) {
this.menuList = val
},
// 获取省份信息
async getprovinceList() {
const res: any = await post('/baseAddress/selectAddress', {})
this.provinceList = res.data
},
// 获取市级信息
async getmarketList(val: any) {
const res: any = await post('/baseAddress/selectAddress', { code: val })
console.log(res, '市区信息');
this.marketList = res.data
},
// 获取区级信息
async getareaList(val: any) {
const res: any = await post('/baseAddress/selectAddress', { code: val })
this.areaList = res.data
},
// 获取证件类型
async getIdTypeList() {
const res: any = await post('/company_type/selectIdCard', {})
console.log(res, '证件类型');
this.idTypeList = res.rows
},
// 获取企业类型
async getcompanyTypeList() {
const res: any = await post('/company_type/selectCompanyTypeList', {})
console.log(res, '企业类型');
this.companyTypeList = res.rows
},
// 获取企业所属
async getcompanyLtdList() {
const res: any = await post('/company_type/selectCompanyLtd', {})
console.log(res, '企业所属');
this.companyLtdList = res.rows
}
},
persist: {
enabled: true, // 开启数据缓存

View File

@ -227,7 +227,7 @@
}
.erweima {
// display: none;
display: none;
width: 100px;
height: 80px;
margin-left: -20px;

View File

@ -12,81 +12,149 @@
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="企业名称">
<el-input placeholder=""></el-input>
<el-input
placeholder="输入企业名称"
clearable
v-model.trim="applyParams.companyName"></el-input>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="统一社会信用代码">
<el-input placeholder=""></el-input>
<el-col :span="6">
<el-form-item label="企业类型">
<el-select
placeholder="请选择企业类型"
clearable
v-model="applyParams.companyType"
@change="changeProvince">
<el-option
v-for="item in selcompanyTypeList"
:key="item.id"
:label="item.name"
:value="item.name"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="企业所属">
<el-select
placeholder="请选择企业所属"
clearable
v-model="applyParams.companyLtd"
@change="changeProvince">
<el-option
v-for="item in selcompanyLtdList"
:key="item.id"
:label="item.name"
:value="item.name"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="统一社会信用代码">
<el-input
placeholder="请输入统一社会信用代码"
clearable
v-model.trim="applyParams.creditCode"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="注册地址">
<el-row :gutter="10">
<el-col :span="3">
<el-select v-model="thisValue" placeholder="请选择省份">
<el-row :gutter="20">
<el-col :span="5">
<el-select
placeholder="请选择省份"
clearable
v-model="applyParams.registerAddress"
@change="changeProvince">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
v-for="item in selProvinceList"
:key="item.id"
:label="item.name"
:value="item.code + ',' + item.name"></el-option>
</el-select>
</el-col>
<el-col :span="3">
<el-select v-model="thisValue" placeholder="请选择市">
<el-col :span="5">
<el-select
v-model="applyParams.registerAddressProvince"
placeholder="请选择市"
@change="changeMarket"
clearable>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
v-for="item in selMarketList"
:key="item.id"
:label="item.name"
:value="item.code + ',' + item.name"></el-option>
</el-select>
</el-col>
<el-col :span="3">
<el-select v-model="thisValue" placeholder="请选择区">
<el-col :span="5">
<el-select
v-model="applyParams.registerAddressArea"
placeholder="请选择区"
clearable
@change="changeArea">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
v-for="item in selAreaList"
:key="item.id"
:label="item.name"
:value="item.code + ',' + item.name"></el-option>
</el-select>
</el-col>
<el-col :span="15">
<el-input placeholder="请输入实际办公地址"></el-input>
<el-col :span="6">
<el-input
v-model="applyParams.registerRealityAddress"
placeholder="请输入实际办公地址"
clearable></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="经营地址">
<el-row :gutter="10">
<el-col :span="3">
<el-select v-model="thisValue" placeholder="请选择省份">
<el-row :gutter="20">
<el-col :span="5">
<el-select
placeholder="请选择省份"
clearable
v-model="applyParams.operateAddress"
@change="opeChangeProvince">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
v-for="item in selProvinceList"
:key="item.id"
:label="item.name"
:value="item.code + ',' + item.name"></el-option>
</el-select>
</el-col>
<el-col :span="3">
<el-select v-model="thisValue" placeholder="请选择市">
<el-col :span="5">
<el-select
v-model="applyParams.operateAddressProvince"
placeholder="请选择市"
@change="opeChangeMarket">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
v-for="item in selMarketList"
:key="item.id"
:label="item.name"
:value="item.code + ',' + item.name"></el-option>
</el-select>
</el-col>
<el-col :span="3">
<el-select v-model="thisValue" placeholder="请选择区">
<el-col :span="5">
<el-select
v-model="applyParams.operateAddressArea"
placeholder="请选择区"
@change="opeChangeArea">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
v-for="item in selAreaList"
:key="item.id"
:label="item.name"
:value="item.code + ',' + item.name"></el-option>
</el-select>
</el-col>
<el-col :span="15">
<el-input placeholder="请输入实际办公地址"></el-input>
<el-col :span="6">
<el-input
v-model="applyParams.operateRealityAddress"
clearable
placeholder="请输入实际办公地址"></el-input>
</el-col>
</el-row>
</el-form-item>
@ -94,19 +162,25 @@
<el-row :gutter="20">
<el-col :span="5">
<el-form-item label="法人证件类型">
<el-select v-model="thisValue" placeholder="请选择省份">
<el-select
v-model="applyParams.certificatetype"
clearable
placeholder="请选法人证件类型">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"></el-option>
v-for="item in selIdTypeList"
:key="item.id"
:label="item.name"
:value="item.name"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="法人证件号码">
<el-input></el-input>
<el-input
placeholder="请输入法人证件号码"
v-model.trim="applyParams.idNumber"
clearable></el-input>
</el-form-item>
</el-col>
@ -144,24 +218,40 @@
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="法人姓名">
<el-input></el-input>
<el-input
placeholder="请输入法人姓名"
v-model.trim="applyParams.legalPerson"
clearable>
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="邀请码">
<el-input></el-input>
<el-input
placeholder="请输入邀请码"
v-model.trim="applyParams.invitationCode"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="邀请企业名称">
<el-input></el-input>
<el-input
placeholder="请输入邀请企业名称"
v-model.trim="applyParams.invitationCoName"
clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="经营范围">
<el-input type="textarea" :rows="5"></el-input>
<el-input
placeholder="请输入经营范围"
v-model.trim="applyParams.businessScope"
clearable
type="textarea"
:rows="5"></el-input>
</el-form-item>
</el-col>
</el-row>
@ -177,18 +267,27 @@
<el-row :gutter="20">
<el-col :span="5">
<el-form-item label="被授权人姓名">
<el-input></el-input>
<el-input
placeholder="请输入被授权人姓名"
v-model.trim="applyParams.authPerson"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="被授权人身份证">
<el-input></el-input>
<el-input
placeholder="请输入被授权人身份证"
v-model.trim="applyParams.authIdNumber"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="被授权人手机号">
<div class="phone">
<el-input></el-input>
<el-input
placeholder="请输入被授权人手机号"
v-model.trim="applyParams.authPhone"
clearable></el-input>
<div class="tip">
被授权人手机号修改且运营审核通过后企业系统管理员权限将同步到修改后被授权手机号的登录账号
</div>
@ -280,11 +379,166 @@
</el-col>
</el-row>
</div>
<el-row style="padding-top: 15px">
<el-form-item>
<el-button @click="handlerSubmitBtn"> </el-button>
<el-button @click="handlerCloseBtn"> </el-button>
</el-form-item>
</el-row>
</div>
</template>
<script lang="ts" setup>
import uploadImg from 'components/uploadImg.vue'
import { ElMessage } from 'element-plus'
import { reactive, ref } from 'vue'
import { useStore } from 'store/user'
const store = useStore()
import { applyAttestationApi } from 'http/api/usercenter/baseinfo'
onMounted(() => {
//
store.getprovinceList()
//
store.getIdTypeList()
//
store.getcompanyTypeList()
//
store.getcompanyLtdList()
})
//
const AssemblyRegisterAddress: any = reactive([])
//
const AssemblyOperateAddress: any = reactive([])
//
const applyParams: any = reactive({
companyName: '', //
companyType: '', //
companyLtd: '', //
creditCode: '', //
registerAddress: '', //
registerAddressProvince: '', // ()
registerAddressArea: '', // ()
registerRealityAddress: '', // ()
operateAddress: '', //
operateAddressProvince: '', // ()
operateAddressArea: '', // ()
operateRealityAddress: '', // ()
certificatetype: '', //
idNumber: '', //
businessLicense: '', //
// idNationUrl: '', //
// idFaceUrl: '', //
legalPerson: '', //
invitationCode: '', //
invitationCoName: '', //
businessScope: '', //
authPerson: '', //
authIdNumber: '', //
authPhone: '', //
authDocument:
'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png', //
idNationUrl:
'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png', //
idFaceUrl:
'vhttps://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png' //
})
//
const selProvinceList: any = computed(() => {
return store.provinceList
})
//
const changeProvince = (val: any) => {
// console.log(val, '**')
store.getmarketList(val.split(',')[0])
AssemblyRegisterAddress[0] = val.split(',')[1]
}
const opeChangeProvince = (val: any) => {
// console.log(val, '**')
store.getmarketList(val.split(',')[0])
AssemblyOperateAddress[0] = val.split(',')[1]
}
//
const selMarketList: any = computed(() => {
return store.marketList
})
//
const changeMarket = (val: any) => {
store.getareaList(val.split(',')[0])
AssemblyRegisterAddress[1] = val.split(',')[1]
}
const opeChangeMarket = (val: any) => {
store.getareaList(val.split(',')[0])
AssemblyOperateAddress[1] = val.split(',')[1]
}
//
const selAreaList: any = computed(() => {
return store.areaList
})
//
const changeArea = (val: any) => {
AssemblyRegisterAddress[2] = val.split(',')[1]
}
const opeChangeArea = (val: any) => {
AssemblyOperateAddress[2] = val.split(',')[1]
}
//
const selIdTypeList: any = computed(() => {
return store.idTypeList
})
//
const selcompanyTypeList: any = computed(() => {
return store.companyTypeList
})
//
const selcompanyLtdList: any = computed(() => {
return store.companyLtdList
})
const emit = defineEmits(['closeAuthenticationDialog'])
//
const handlerSubmitBtn = async () => {
AssemblyRegisterAddress[3] = applyParams.registerRealityAddress
AssemblyOperateAddress[3] = applyParams.operateRealityAddress
applyParams.registerAddress = AssemblyRegisterAddress.join(',')
applyParams.operateAddress = AssemblyOperateAddress.join(',')
const res: any = await applyAttestationApi({
bmCompanyInfo: applyParams,
bmCoBank: {}
})
if (res.code === 200) {
ElMessage({
type: 'success',
message: '申请成功'
})
//
emit('closeAuthenticationDialog', false)
}
}
//
const handlerCloseBtn = () => {
emit('closeAuthenticationDialog', false)
}
const options = reactive([
{

View File

@ -1,9 +1,17 @@
<script setup lang="ts">
import EquipCard from 'components/equipCard.vue'
import Navmenu from 'components/Navmenu/index.vue'
import NavMenu from 'components/Navmenu/index.vue'
import { getGoodsClassListApi } from 'http/api/home'
import { useStore } from 'store/main'
const userStore = useStore()
onMounted(() => {})
//
const getGoodsClassList = async () => {
const res = await getGoodsClassListApi()
console.log(res, '商品分类列表')
}
getGoodsClassList()
const leftNavList = [
{
@ -222,7 +230,7 @@
</ul>
<div class="right-content">
<!-- 轮播图上方导航按钮 -->
<Navmenu />
<NavMenu />
<!-- 轮播图 -->
<div class="swpier-img">
<el-carousel :interval="5000" arrow="always" height="437px">
@ -326,11 +334,12 @@
justify-content: space-around;
.item-nav {
text-align: left;
padding-left: 50px;
// text-align: left;
// padding-left: 50px;
color: #8b8b8b;
height: 36px;
line-height: 36px;
text-align: center;
&:hover {
cursor: pointer;

View File

@ -1,7 +1,14 @@
<script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus'
import EnterpriseCertification from '../../EnterpriseCertification.vue'
import { el } from 'element-plus/es/locale'
import { applyAttestationApi } from 'http/api/usercenter/baseinfo'
const applyParams: any = reactive({})
//
const applyAttestation = async () => {
const res = await applyAttestationApi(applyParams.value)
}
//
const oldPhoneNumber = ref('15336652321')
//
@ -93,6 +100,10 @@
orderConunt: 1
}
])
//
const closeAuthenticationDialog = (val: any) => {
certificationVisible.value = val
}
const getImg = (imgUrl: string) => {
return new URL(imgUrl, import.meta.url).href
@ -175,7 +186,7 @@
<!-- 申请企业认证弹框 -->
<el-dialog v-model="certificationVisible" title="申请企业认证" width="80%" align-center>
<EnterpriseCertification />
<EnterpriseCertification @closeAuthenticationDialog="closeAuthenticationDialog" />
</el-dialog>
</div>
</template>