21 changed files with 810 additions and 68 deletions
@ -0,0 +1,48 @@ |
|||||
|
<template> |
||||
|
<div class="md:w-screen-xl m-auto relative sm:flex" v-infinite-scroll="load"> |
||||
|
<el-row :gutter="24" class="flex"> |
||||
|
<template v-for="(item,index) in list" :key="index"> |
||||
|
<el-col :span="6" class="mb-5 min-w-xs"> |
||||
|
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer" @click="openSpmUrl(`https://websoft.top/detail`,item,item.articleId)"> |
||||
|
<el-image :src="item.image" fit="fill" :lazy="true" class="w-full h-[150px] cursor-pointer" /> |
||||
|
<div class="flex-1 px-4 py-5 sm:p-6 !p-4"> |
||||
|
<p class="text-gray-700 dark:text-white text-base font-semibold flex items-center gap-1.5"> |
||||
|
<span class="flex-1 text-xl cursor-pointer max-h-[57px] overflow-hidden">{{ item.title }}</span> |
||||
|
</p> |
||||
|
<p class="flex items-center gap-1.5 py-2 text-gray-500"> |
||||
|
<el-avatar :src="item.avatar" :size="20" /> |
||||
|
<span>{{ item.nickname }} · {{ dayjs(item.createTime).format('MM-DD hh:mm') }}</span> |
||||
|
</p> |
||||
|
</div> |
||||
|
</el-card> |
||||
|
</el-col> |
||||
|
</template> |
||||
|
</el-row> |
||||
|
</div> |
||||
|
<div v-if="disabled" class="px-1 text-center text-gray-500 min-h-xs"> |
||||
|
没有更多了 |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import {openSpmUrl} from "~/utils/common"; |
||||
|
import dayjs from "dayjs"; |
||||
|
|
||||
|
const props = withDefaults( |
||||
|
defineProps<{ |
||||
|
list?: any[]; |
||||
|
disabled?: boolean; |
||||
|
}>(), |
||||
|
{} |
||||
|
); |
||||
|
|
||||
|
const emit = defineEmits<{ |
||||
|
(e: 'done'): void; |
||||
|
}>(); |
||||
|
|
||||
|
const load = () => { |
||||
|
if(!props.disabled){ |
||||
|
emit('done') |
||||
|
} |
||||
|
} |
||||
|
</script> |
@ -0,0 +1,165 @@ |
|||||
|
<template> |
||||
|
<PageBanner :layout="layout" /> |
||||
|
<div class="md:w-screen-xl m-auto relative sm:flex bg-white rounded-lg py-4 "> |
||||
|
<el-tabs class="px-7 bg-white"> |
||||
|
<el-tab-pane label="个人开发者认证"> |
||||
|
<el-form :model="form" label-width="auto" size="large" label-position="top" class="sm:w-screen-md w-full sm:py-2"> |
||||
|
<el-form-item label="真实姓名"> |
||||
|
<el-input v-model="form.realName" placeholder="请输入真实姓名" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="证件号码"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入证件号码" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="身份证(正面)"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="身份证(反面)"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" size="large" @click="onSubmit">提交</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<el-result |
||||
|
icon="success" |
||||
|
title="个人认证成功" |
||||
|
sub-title="认证完成时间 2024-09-30" |
||||
|
> |
||||
|
<template #extra> |
||||
|
<el-button type="text">修改认证信息</el-button> |
||||
|
</template> |
||||
|
</el-result> |
||||
|
</el-tab-pane> |
||||
|
<el-tab-pane label="企业开发者认证"> |
||||
|
<el-form :model="form" label-width="auto" size="large" label-position="top" class="sm:w-screen-md w-full sm:py-2"> |
||||
|
<el-form-item label="企业名称"> |
||||
|
<el-input v-model="form.companyName" placeholder="请输入企业名称" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="社会信用代码"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入社会信用代码" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="营业执照"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="所属行业"> |
||||
|
<el-select v-model="form.city" placeholder="请选择所属行业"> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="网站信息"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入网站信息" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="您的身份"> |
||||
|
<el-radio-group v-model="form.sex"> |
||||
|
<el-radio value="1">法定代表人</el-radio> |
||||
|
<el-radio value="2">被授权人</el-radio> |
||||
|
</el-radio-group> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="用户协议"> |
||||
|
<el-checkbox v-model="form.status">请务必提供真实信息,我司有权自行或委托第三方审查您提供的身份信息是否属真实,有效。若提供虚假信息,由此的全部后果由您承担。</el-checkbox> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" size="large" @click="onSubmit">提交</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<el-result |
||||
|
icon="success" |
||||
|
title="企业认证成功" |
||||
|
sub-title="认证完成时间 2024-09-30" |
||||
|
> |
||||
|
<template #extra> |
||||
|
<el-button type="text">修改认证信息</el-button> |
||||
|
</template> |
||||
|
</el-result> |
||||
|
</el-tab-pane> |
||||
|
</el-tabs> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import type {ApiResult, PageResult} from "~/api"; |
||||
|
import {useServerRequest} from "~/composables/useServerRequest"; |
||||
|
import {useWebsite} from "~/composables/configState"; |
||||
|
import type {Navigation} from "~/api/cms/navigation/model"; |
||||
|
import type {CompanyParam} from "~/api/system/company/model"; |
||||
|
import type {Article} from "~/api/cms/article/model"; |
||||
|
import CardList from './components/CardList.vue'; |
||||
|
|
||||
|
const route = useRoute(); |
||||
|
|
||||
|
// 页面信息 |
||||
|
const runtimeConfig = useRuntimeConfig(); |
||||
|
const list = ref<Article[]>([]); |
||||
|
const page = ref<number>(1); |
||||
|
const resultText = ref(''); |
||||
|
const layout = ref<any>(); |
||||
|
const disabled = ref<boolean>(false); |
||||
|
const activeName = ref(undefined) |
||||
|
|
||||
|
// 获取状态 |
||||
|
const form = ref<Navigation>(); |
||||
|
const website = useWebsite(); |
||||
|
|
||||
|
// 搜索表单 |
||||
|
const where = reactive<CompanyParam>({ |
||||
|
keywords: '' |
||||
|
}); |
||||
|
|
||||
|
const handleClick = (e:any) => { |
||||
|
console.log(e.index) |
||||
|
} |
||||
|
|
||||
|
const onSearch = () => { |
||||
|
if(!disabled.value){ |
||||
|
page.value++; |
||||
|
reload(route.path); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 请求数据 |
||||
|
const reload = async (path: string) => { |
||||
|
const {data: response} = await useServerRequest<ApiResult<PageResult<Article>>>('/cms/cms-article/page',{baseURL: runtimeConfig.public.apiServer, params: { |
||||
|
page: page.value, |
||||
|
limit: 8, |
||||
|
userId: 0, |
||||
|
keywords: where.keywords |
||||
|
}}) |
||||
|
if(response.value?.data){ |
||||
|
if (list.value.length < response.value?.data.count) { |
||||
|
disabled.value = false; |
||||
|
if (response.value?.data.list) { |
||||
|
list.value = list.value.concat(response.value?.data.list); |
||||
|
} |
||||
|
}else { |
||||
|
disabled.value = true; |
||||
|
} |
||||
|
if(response.value.data.count == 0){ |
||||
|
resultText.value = '暂无相关结果' |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
const { data: nav } = await useServerRequest<ApiResult<Navigation>>('/cms/cms-navigation/getNavigationByPath',{query: {path: route.path}}) |
||||
|
console.log(nav.value?.data) |
||||
|
if(nav.value?.data){ |
||||
|
form.value = nav.value?.data; |
||||
|
console.log(form.value,'form...') |
||||
|
} |
||||
|
// 页面布局 |
||||
|
if(form.value?.layout){ |
||||
|
layout.value = JSON.parse(form.value?.layout) |
||||
|
} |
||||
|
|
||||
|
useHead({ |
||||
|
title: `文档 - ${website.value.websiteName}`, |
||||
|
bodyAttrs: { |
||||
|
class: "page-container", |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
watch( |
||||
|
() => route.path, |
||||
|
(path) => { |
||||
|
reload(path); |
||||
|
}, |
||||
|
{ immediate: true } |
||||
|
); |
||||
|
</script> |
@ -0,0 +1,149 @@ |
|||||
|
<template> |
||||
|
<PageBanner :layout="layout" /> |
||||
|
<div class="login-layout mt-[100px] m-auto sm:w-screen-xl w-full"> |
||||
|
<div class="mt-[100px] m-auto flex sm:flex-row flex-col sm:p-0 p-3"> |
||||
|
<div class="flash ml-8 bg-white rounded-lg px-7 py-4 w-full"> |
||||
|
<el-tabs class="flash bg-white ml-0"> |
||||
|
<el-tab-pane label="个人开发者"> |
||||
|
<el-form :model="form" label-width="auto" size="large" label-position="top" class="sm:w-screen-md w-full sm:py-2"> |
||||
|
<el-form-item label="真实姓名"> |
||||
|
<el-input v-model="form.realName" placeholder="请输入真实姓名" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="证件号码"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入证件号码" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="身份证(正面)"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="身份证(反面)"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" size="large" @click="onSubmit">提交</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<el-result |
||||
|
icon="success" |
||||
|
title="个人认证成功" |
||||
|
sub-title="认证完成时间 2024-09-30" |
||||
|
> |
||||
|
<template #extra> |
||||
|
<el-button type="text">修改认证信息</el-button> |
||||
|
</template> |
||||
|
</el-result> |
||||
|
</el-tab-pane> |
||||
|
<el-tab-pane label="企业开发者"> |
||||
|
<el-form :model="form" label-width="auto" size="large" label-position="top" class="sm:w-screen-md w-full sm:py-2"> |
||||
|
<el-form-item label="企业名称"> |
||||
|
<el-input v-model="form.companyName" placeholder="请输入企业名称" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="社会信用代码"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入社会信用代码" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="营业执照"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="所属行业"> |
||||
|
<el-select v-model="form.city" placeholder="请选择所属行业"> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="网站信息"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入网站信息" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="您的身份"> |
||||
|
<el-radio-group v-model="form.sex"> |
||||
|
<el-radio value="1">法定代表人</el-radio> |
||||
|
<el-radio value="2">被授权人</el-radio> |
||||
|
</el-radio-group> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="用户协议"> |
||||
|
<el-checkbox v-model="form.status">请务必提供真实信息,我司有权自行或委托第三方审查您提供的身份信息是否属真实,有效。若提供虚假信息,由此的全部后果由您承担。</el-checkbox> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" size="large" @click="onSubmit">提交</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<el-result |
||||
|
icon="success" |
||||
|
title="企业认证成功" |
||||
|
sub-title="认证完成时间 2024-09-30" |
||||
|
> |
||||
|
<template #extra> |
||||
|
<el-button type="text">修改认证信息</el-button> |
||||
|
</template> |
||||
|
</el-result> |
||||
|
</el-tab-pane> |
||||
|
</el-tabs> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import {useConfigInfo, useToken, useWebsite} from "~/composables/configState"; |
||||
|
import useFormData from '@/utils/use-form-data'; |
||||
|
import type { User } from '@/api/system/user/model'; |
||||
|
import { ref } from 'vue' |
||||
|
import {useServerRequest} from "~/composables/useServerRequest"; |
||||
|
import type {ApiResult} from "~/api"; |
||||
|
|
||||
|
// 配置信息 |
||||
|
const runtimeConfig = useRuntimeConfig(); |
||||
|
const route = useRoute(); |
||||
|
const activeIndex = ref(''); |
||||
|
const website = useWebsite() |
||||
|
const config = useConfigInfo(); |
||||
|
const token = useToken(); |
||||
|
const userInfo = ref<User>(); |
||||
|
|
||||
|
// 配置信息 |
||||
|
const { form, assignFields } = useFormData<User>({ |
||||
|
userId: undefined, |
||||
|
nickname: '', |
||||
|
username: '', |
||||
|
phone: '', |
||||
|
mobile: '', |
||||
|
sex: '', |
||||
|
sexName: '', |
||||
|
email: '', |
||||
|
password: '', |
||||
|
code: '', |
||||
|
smsCode: '', |
||||
|
comments: '', |
||||
|
remember: true |
||||
|
}); |
||||
|
|
||||
|
useHead({ |
||||
|
title: `用户中心 - ${config.value?.siteName}`, |
||||
|
meta: [{ name: website.value.keywords, content: website.value.comments }] |
||||
|
}); |
||||
|
|
||||
|
const onSubmit = async () => { |
||||
|
const {data: modify } = await useServerRequest<ApiResult<User>>('/auth/user',{ |
||||
|
baseURL: runtimeConfig.public.apiServer, |
||||
|
method: 'put', |
||||
|
body: form |
||||
|
}) |
||||
|
if(modify.value?.code == 0){ |
||||
|
ElMessage.success('修改成功') |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
const reload = async () => { |
||||
|
const {data: response} = await useServerRequest<ApiResult<User>>('/auth/user',{baseURL: runtimeConfig.public.apiServer}) |
||||
|
if(response.value?.data){ |
||||
|
userInfo.value = response.value?.data; |
||||
|
assignFields(response.value?.data); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
watch( |
||||
|
() => route.path, |
||||
|
(path) => { |
||||
|
activeIndex.value = path; |
||||
|
console.log(path,'=>Path') |
||||
|
reload(); |
||||
|
}, |
||||
|
{ immediate: true } |
||||
|
); |
||||
|
</script> |
@ -0,0 +1,82 @@ |
|||||
|
<template> |
||||
|
|
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import type {ApiResult} from "~/api"; |
||||
|
import {useServerRequest} from "~/composables/useServerRequest"; |
||||
|
import {useConfigInfo, useForm, useToken, useWebsite} from "~/composables/configState"; |
||||
|
import type {BreadcrumbItem} from "~/types/global"; |
||||
|
import type {Navigation} from "~/api/cms/navigation/model"; |
||||
|
import {getIdBySpm} from "~/utils/common"; |
||||
|
|
||||
|
// 引入状态管理 |
||||
|
const route = useRoute(); |
||||
|
const user = useUser(); |
||||
|
const layout = ref<any>(); |
||||
|
const config = useConfigInfo(); |
||||
|
const token = useToken(); |
||||
|
const form = useForm(); |
||||
|
const breadcrumb = ref<BreadcrumbItem>(); |
||||
|
|
||||
|
// 请求数据 |
||||
|
const reload = async () => { |
||||
|
|
||||
|
// 存在spm(优先级高) |
||||
|
const {data: nav} = await useServerRequest<ApiResult<Navigation>>('/cms/cms-navigation/' + getIdBySpm(5)) |
||||
|
if (nav.value?.data) { |
||||
|
form.value = nav.value.data |
||||
|
} else { |
||||
|
const {data: nav} = await useServerRequest<ApiResult<Navigation>>('/cms/cms-navigation/getNavigationByPath', {query: {path: route.path}}) |
||||
|
if (nav.value?.data) { |
||||
|
form.value = nav.value?.data; |
||||
|
} |
||||
|
} |
||||
|
// 页面布局 |
||||
|
if (form.value?.layout) { |
||||
|
layout.value = JSON.parse(form.value?.layout) |
||||
|
} |
||||
|
|
||||
|
// 未登录状态(是否强制登录) |
||||
|
if (!token.value || token.value == '') { |
||||
|
if (config.value.MustLogin) { |
||||
|
navigateTo('/passport/login'); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
// 判断是否开发者身份 |
||||
|
if(!user.value?.merchantId){ |
||||
|
navigateTo('/user/auth'); |
||||
|
return false; |
||||
|
} |
||||
|
// 开发者身份者跳转控制台 |
||||
|
if(user.value.merchantId){ |
||||
|
console.log('已认证未开发者>') |
||||
|
} |
||||
|
|
||||
|
// seo |
||||
|
useHead({ |
||||
|
title: `现代Web应用开发(Vue)框架 · WEBSOFT`, |
||||
|
meta: [{name: form.value.design?.keywords, content: form.value.design?.description}], |
||||
|
bodyAttrs: { |
||||
|
class: "page-container", |
||||
|
}, |
||||
|
script: [ |
||||
|
{ |
||||
|
children: `console.log(${JSON.stringify(form.value)})`, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
// 面包屑 |
||||
|
breadcrumb.value = form.value |
||||
|
} |
||||
|
|
||||
|
watch( |
||||
|
() => route.path, |
||||
|
(path) => { |
||||
|
console.log(path, '=>Path') |
||||
|
|
||||
|
reload(); |
||||
|
}, |
||||
|
{immediate: true} |
||||
|
); |
||||
|
</script> |
@ -0,0 +1,174 @@ |
|||||
|
<template> |
||||
|
<div class="login-layout mt-[100px] m-auto sm:w-screen-xl w-full"> |
||||
|
<div class="mt-[100px] m-auto flex sm:flex-row flex-col sm:p-0 p-3"> |
||||
|
<!-- 用户菜单 --> |
||||
|
<UserMenu :activeIndex="activeIndex" @done="onDone" /> |
||||
|
<div class="flash ml-8 bg-white rounded-lg px-7 py-4 w-full"> |
||||
|
<el-tabs class="flash bg-white ml-0"> |
||||
|
<el-tab-pane label="个人认证"> |
||||
|
<el-form :model="form" label-width="auto" size="large" label-position="top" class="sm:w-screen-md w-full sm:py-2"> |
||||
|
<el-form-item label="真实姓名"> |
||||
|
<el-input v-model="form.realName" placeholder="请输入真实姓名" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="证件号码"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入证件号码" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="身份证(正面)"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="身份证(反面)"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" size="large" @click="onSubmit">提交</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</el-tab-pane> |
||||
|
<el-tab-pane label="企业认证"> |
||||
|
<el-form :model="form" label-width="auto" size="large" label-position="top" class="sm:w-screen-md w-full sm:py-2"> |
||||
|
<el-form-item label="企业名称"> |
||||
|
<el-input v-model="form.companyName" placeholder="请输入企业名称" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="社会信用代码"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入社会信用代码" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="营业执照"> |
||||
|
<Upload /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="所属行业"> |
||||
|
<el-select v-model="form.city" placeholder="请选择所属行业"> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="网站信息"> |
||||
|
<el-input v-model="form.idCard" placeholder="请输入网站信息" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="您的身份"> |
||||
|
<el-radio-group v-model="form.sex"> |
||||
|
<el-radio value="1">法定代表人</el-radio> |
||||
|
<el-radio value="2">被授权人</el-radio> |
||||
|
</el-radio-group> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="用户协议"> |
||||
|
<el-checkbox v-model="form.status">请务必提供真实信息,我司有权自行或委托第三方审查您提供的身份信息是否属真实,有效。若提供虚假信息,由此的全部后果由您承担。</el-checkbox> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" size="large" @click="onSubmit">提交</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</el-tab-pane> |
||||
|
<el-tab-pane label="个人认证成功"> |
||||
|
<el-result |
||||
|
icon="success" |
||||
|
title="个人认证成功" |
||||
|
sub-title="认证完成时间 2024-09-30" |
||||
|
> |
||||
|
<template #extra> |
||||
|
<el-button type="text">修改认证信息</el-button> |
||||
|
</template> |
||||
|
</el-result> |
||||
|
</el-tab-pane> |
||||
|
<el-tab-pane label="企业认证成功"> |
||||
|
<el-result |
||||
|
icon="success" |
||||
|
title="企业认证成功" |
||||
|
sub-title="认证完成时间 2024-09-30" |
||||
|
> |
||||
|
<template #extra> |
||||
|
<el-button type="text">修改认证信息</el-button> |
||||
|
</template> |
||||
|
</el-result> |
||||
|
</el-tab-pane> |
||||
|
</el-tabs> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import {useConfigInfo, useToken, useWebsite} from "~/composables/configState"; |
||||
|
import useFormData from '@/utils/use-form-data'; |
||||
|
import type { User } from '@/api/system/user/model'; |
||||
|
import { ref } from 'vue' |
||||
|
import { Plus } from '@element-plus/icons-vue' |
||||
|
import {useServerRequest} from "~/composables/useServerRequest"; |
||||
|
import type {ApiResult} from "~/api"; |
||||
|
import UserMenu from "~/components/UserMenu.vue"; |
||||
|
|
||||
|
// 配置信息 |
||||
|
const runtimeConfig = useRuntimeConfig(); |
||||
|
const route = useRoute(); |
||||
|
const activeIndex = ref(''); |
||||
|
const website = useWebsite() |
||||
|
const config = useConfigInfo(); |
||||
|
const token = useToken(); |
||||
|
const userInfo = ref<User>(); |
||||
|
|
||||
|
// 配置信息 |
||||
|
const { form, assignFields } = useFormData<User>({ |
||||
|
userId: undefined, |
||||
|
nickname: '', |
||||
|
username: '', |
||||
|
phone: '', |
||||
|
mobile: '', |
||||
|
sex: '', |
||||
|
sexName: '', |
||||
|
email: '', |
||||
|
password: '', |
||||
|
code: '', |
||||
|
smsCode: '', |
||||
|
comments: '', |
||||
|
remember: true |
||||
|
}); |
||||
|
|
||||
|
useHead({ |
||||
|
title: `用户中心 - ${config.value?.siteName}`, |
||||
|
meta: [{ name: website.value.keywords, content: website.value.comments }] |
||||
|
}); |
||||
|
|
||||
|
const onSubmit = async () => { |
||||
|
const {data: modify } = await useServerRequest<ApiResult<User>>('/auth/user',{ |
||||
|
baseURL: runtimeConfig.public.apiServer, |
||||
|
method: 'put', |
||||
|
body: form |
||||
|
}) |
||||
|
if(modify.value?.code == 0){ |
||||
|
ElMessage.success('修改成功') |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
const handleAvatarSuccess: UploadProps['onSuccess'] = ( |
||||
|
response, |
||||
|
uploadFile |
||||
|
) => { |
||||
|
imageUrl.value = URL.createObjectURL(uploadFile.raw!) |
||||
|
} |
||||
|
|
||||
|
const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => { |
||||
|
if (rawFile.type !== 'image/jpeg') { |
||||
|
ElMessage.error('Avatar picture must be JPG format!') |
||||
|
return false |
||||
|
} else if (rawFile.size / 1024 / 1024 > 2) { |
||||
|
ElMessage.error('Avatar picture size can not exceed 2MB!') |
||||
|
return false |
||||
|
} |
||||
|
return true |
||||
|
} |
||||
|
|
||||
|
const reload = async () => { |
||||
|
const {data: response} = await useServerRequest<ApiResult<User>>('/auth/user',{baseURL: runtimeConfig.public.apiServer}) |
||||
|
if(response.value?.data){ |
||||
|
userInfo.value = response.value?.data; |
||||
|
assignFields(response.value?.data); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
watch( |
||||
|
() => route.path, |
||||
|
(path) => { |
||||
|
activeIndex.value = path; |
||||
|
console.log(path,'=>Path') |
||||
|
reload(); |
||||
|
}, |
||||
|
{ immediate: true } |
||||
|
); |
||||
|
</script> |
Loading…
Reference in new issue