feat: 设计制作新的首页;设计新的LOGO;登录注册优化UI交互;页头页脚改造;意见反馈页改造;

This commit is contained in:
mixtan 2025-06-06 22:07:32 +08:00
parent 3bb1de8008
commit 136bb433c8
16 changed files with 600 additions and 698 deletions

View File

@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="icon" href="/favicon.ico"> <link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<title>小发同城</title> <title>小发同城</title>
</head> </head>
<body> <body>

View File

@ -4,8 +4,21 @@
padding: 0; padding: 0;
box-sizing: border-box; box-sizing: border-box;
} }
a{
text-decoration: none;
}
ul{
list-style: none;
}
body{
font-size: 12px;
overflow-x: hidden;
}
:root { :root {
--bgcolor: #409eff; --bgcolor: #ea4322;
} }
html{ html{
@ -15,7 +28,7 @@ html{
/* 按钮样式 */ /* 按钮样式 */
.btn { .btn {
background: #7354ff; background: #ea4322;
border: medium none; border: medium none;
color: #fff; color: #fff;
cursor: pointer; cursor: pointer;
@ -50,13 +63,13 @@ html{
.btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled):active,
:focus { :focus {
color: #7354ff; color: #ea4322;
} }
.btn:focus { .btn:focus {
background: #000b22; background: #ea4322;
color: #7354ff; color: #fff;
border-color: #000b22; border-color: #fff;
} }
.btn:active { .btn:active {
@ -70,9 +83,6 @@ html{
} }
/* 固定定位*/ /* 固定定位*/
.header-list { .header-list {
position: fixed;
top: 0;
left: 0;
width: 100%; width: 100%;
height: 70px; height: 70px;
background-color: #fff; background-color: #fff;
@ -100,9 +110,10 @@ html{
padding-left: 20px; padding-left: 20px;
} }
.logo a { .logo a {
background: url("../../assets/image/xiaofa_logo.png"); background: url("../../assets/image/logo.jpg") no-repeat;
width: 48px; width: 48px;
height: 48px; height: 48px;
border-radius: 5px;
display: inline-block; display: inline-block;
background-size: contain; background-size: contain;
outline: none; outline: none;
@ -229,26 +240,6 @@ html{
padding: 50px 0; padding: 50px 0;
} }
.index-title {
text-align: center;
}
.index-title h3 {
padding-top: 30px;
font-size: 42px;
font-weight: 700;
}
.index-title p {
font-size: 20px;
color: #666;
padding: 20px;
text-align: center;
font-weight: 500;
max-width: 580px;
margin: 15px auto 0px auto;
}
.service-contain { .service-contain {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -289,7 +280,7 @@ html{
transition: 0.3s; transition: 0.3s;
} }
.service-list ul li:hover { .service-list ul li:hover {
background: linear-gradient(90.54deg, #7354ff 0.42%, #000b22 102.71%); background: linear-gradient(90.54deg, #ec4b2b 0.42%, #f85535 102.71%);
} }
.service-list ul li:hover i::before { .service-list ul li:hover i::before {
color: #fff; color: #fff;
@ -300,76 +291,3 @@ html{
.service-list ul li:hover i::before p { .service-list ul li:hover i::before p {
color: #fff; color: #fff;
} }
/*页脚*/
.footer {
display: flex;
width: 100%;
flex-direction: column;
align-items: center;
background: #000b22;
padding: 20px;
}
.footer .row .el-row{
width: 100%;
}
.footer .row {
display: flex;
width: 100%;
max-width: 1200px;
margin: auto;
justify-content: center;
align-items: center;
}
.footer .row p {
padding-left: 10px;
}
.footer .row ul {
padding-left: 10px;
}
.footer .logo_text p {
color: #fff;
font-size: 30px;
padding: 20px;
font-weight: 800;
}
.footer .row .about {
display: flex;
flex-direction: column;
justify-content: center;
align-items: start;
line-height: 38px;
}
.footer .row .contact {
display: flex;
flex-direction: column;
justify-content: center;
align-items: start;
line-height: 38px;
}
.footer .row .contact span {
color: #b6b6b6;
}
.footer .row a {
color: #b6b6b6;
text-decoration: none;
}
.footer p {
color: #fff;
}
.footer li {
list-style: none;
color: #fff;
}
.footer .copyright {
margin: 10px 0px;
}
.footer .copyright p {
color: #fff;
}
.footer .copyright a {
color: #808080;
text-decoration: none;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

BIN
src/assets/image/logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<HeadMenu @open-login-form="showLoginForm = true" @open-register-form="showRegisterForm = true" /> <HeadMenu @open-login-form="showLoginForm = true" @open-register-form="showRegisterForm = true" />
<div class="contain"> <div class="main">
<slot /> <slot />
<Feedback/> <Feedback/>
<Footer/> <Footer/>
@ -26,12 +26,5 @@
</script> </script>
<style lang="scss"> <style lang="scss">
.contain {
min-height: calc(100vh - 70px);
display: flex;
flex-direction: column;
.routerView {
flex: 1;
}
}
</style> </style>

View File

@ -1,68 +1,78 @@
<template> <template>
<div class="login-box" v-if="isVisible"> <div class="login-box" v-if="isVisible">
<el-form <div class="login-container">
:model="formData" <div class="login-close" @click="closeLoginForm">
:rules="rules" <el-icon color="#333" size="24" class="btn_close"><Close /></el-icon>
ref="formRef"
label-width="88px"
:hide-required-asterisk="true"
>
<div class="login-container">
<div class="login-close" @click="closeLoginForm">
<el-icon color="#333" size="24" class="btn_close"><Close /></el-icon>
</div>
<h4>欢迎登录</h4>
<div class="passwordLogin">
<div class="login-phone">
<el-form-item label="账号" prop="phoneNumber">
<el-input
size="large"
v-model="formData.phoneNumber"
placeholder="请输入账号"
/>
</el-form-item>
</div>
<div class="login_password">
<el-form-item label="密码" prop="password">
<el-input
size="large"
type="password"
v-model="formData.password"
placeholder="请输入密码"
/>
</el-form-item>
</div>
<div class="pic_verifyCode">
<el-form-item label="验证码" prop="captchaCode">
<el-input
size="large"
type="text"
v-model="formData.captchaCode"
placeholder="请输入验证码"
maxlength="4"
>
<template #append>
<img class="captcha" :src="captchaUrl" alt="验证码" @click="refreshCaptcha" />
</template>
</el-input>
</el-form-item>
</div>
<div class="foot">
<el-button class="btn_sumit" size="large" round type="primary" @click="handleLogin">登录</el-button>
</div>
<div class="tool">
没有账号
<el-button
class="btn_sumit"
type="primary"
link
@click="openRegisterForm"
>立即入驻</el-button
>
</div>
</div>
</div> </div>
</el-form> <h4>欢迎登录</h4>
<el-form
:model="formData"
:rules="rules"
ref="formRef"
label-width="88px"
:hide-required-asterisk="true"
>
<el-form-item label="账号" prop="phoneNumber">
<el-input
size="large"
v-model="formData.phoneNumber"
placeholder="请输入账号"
/>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input
size="large"
type="password"
v-model="formData.password"
placeholder="请输入密码"
/>
</el-form-item>
<el-form-item label="验证码" prop="captchaCode">
<el-input
size="large"
type="text"
v-model="formData.captchaCode"
placeholder="请输入验证码"
maxlength="4"
>
<template #append>
<img
class="captcha"
:src="captchaUrl"
alt="验证码"
@click="refreshCaptcha"
/>
</template>
</el-input>
</el-form-item>
</el-form>
<div class="foot">
<el-button
color="#ea4322"
class="btn_sumit"
size="large"
round
@click="handleLogin"
:disabled="
!formData.phoneNumber || !formData.password || !formData.captchaCode
"
>登录</el-button
>
</div>
<div class="tool">
没有账号
<el-button
class="btn_sumit"
type="danger"
text
@click="openRegisterForm"
>立即入驻</el-button
>
</div>
</div>
</div> </div>
</template> </template>
@ -84,7 +94,7 @@ import {
GetAccountLogin, GetAccountLogin,
} from "@/api/login"; } from "@/api/login";
import { ElMessage } from "element-plus/es"; import { ElMessage } from "element-plus/es";
import { Close } from '@element-plus/icons-vue' import { Close } from "@element-plus/icons-vue";
const props = defineProps({ const props = defineProps({
isVisible: { isVisible: {
@ -111,8 +121,8 @@ const closeLoginForm = () => {
}; };
const openRegisterForm = () => { const openRegisterForm = () => {
closeLoginForm() closeLoginForm();
emits('open-register-form'); emits("open-register-form");
}; };
const refreshCaptcha = async () => { const refreshCaptcha = async () => {
@ -197,11 +207,11 @@ onUnmounted(() => {
<style lang="scss" scoped> <style lang="scss" scoped>
.login-box { .login-box {
position: fixed; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
right: 0; width: 100%;
bottom: 0; height: 100vh;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
@ -233,9 +243,9 @@ onUnmounted(() => {
position: absolute; position: absolute;
top: 10px; top: 10px;
right: 10px; right: 10px;
.btn_close{ .btn_close {
cursor: pointer; cursor: pointer;
&:hover{ &:hover {
color: #409efc; color: #409efc;
} }
} }
@ -254,17 +264,17 @@ onUnmounted(() => {
} }
} }
:deep(.el-input-group__append){ :deep(.el-input-group__append) {
padding: 0 !important; padding: 0 !important;
} }
.captcha{ .captcha {
cursor: pointer; cursor: pointer;
border: 1px solid #dcdfe6; border: 1px solid #dcdfe6;
border-left: none; border-left: none;
} }
.tool{ .tool {
padding-top: 25px; padding-top: 25px;
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -274,5 +284,4 @@ onUnmounted(() => {
color: #666; color: #666;
} }
} }
</style> </style>

View File

@ -1,17 +1,17 @@
<template> <template>
<div class="register-box" v-if="isVisible"> <div class="register-box" v-if="isVisible">
<el-form <div class="register-container">
:model="formData" <div class="register-close" @click="closeRegisterForm">
:rules="rules" <el-icon color="#333" size="24" class="btn_close"><Close /></el-icon>
ref="formRef" </div>
label-width="88px" <h4>欢迎入驻开店</h4>
:hide-required-asterisk="true" <el-form
> :model="formData"
<div class="register-container"> :rules="rules"
<div class="register-close" @click="closeRegisterForm"> ref="formRef"
<el-icon color="#333" size="24" class="btn_close"><Close /></el-icon> label-width="88px"
</div> :hide-required-asterisk="true"
<h4>欢迎入驻开店</h4> >
<el-form-item label="手机号" prop="phoneNumber"> <el-form-item label="手机号" prop="phoneNumber">
<el-input <el-input
v-model="formData.phoneNumber" v-model="formData.phoneNumber"
@ -49,30 +49,25 @@
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-form>
<div class="foot"> <div class="foot">
<el-button <el-button
class="btn_sumit" class="btn_sumit"
type="primary" color="#ea4322"
size="large" size="large"
:disabled="!formData.phoneNumber || !formData.verificationCode" :disabled="!formData.phoneNumber || !formData.verificationCode"
round round
@click="handleRegister" @click="handleRegister"
>确定</el-button >确定</el-button
> >
</div>
<div class="tool">
已有账号
<el-button
class="btn_sumit"
type="primary"
link
@click="openLoginForm"
>立即登录</el-button
>
</div>
</div> </div>
</el-form> <div class="tool">
已有账号
<el-button class="btn_sumit" type="danger" text @click="openLoginForm"
>立即登录</el-button
>
</div>
</div>
</div> </div>
</template> </template>
@ -83,7 +78,7 @@ import { useRouter } from "vue-router";
import { GetSmsCode, GetLogin } from "@/api/login"; import { GetSmsCode, GetLogin } from "@/api/login";
import { getApproval_status } from "@/api/login"; import { getApproval_status } from "@/api/login";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { Close } from '@element-plus/icons-vue' import { Close } from "@element-plus/icons-vue";
const props = defineProps({ const props = defineProps({
isVisible: { isVisible: {
@ -91,7 +86,7 @@ const props = defineProps({
default: false, default: false,
}, },
}); });
const emits = defineEmits(['open-login-form', "close-register-form"]); const emits = defineEmits(["open-login-form", "close-register-form"]);
const formData = ref({ const formData = ref({
phoneNumber: "", phoneNumber: "",
verificationCode: "", verificationCode: "",
@ -111,8 +106,8 @@ const closeRegisterForm = () => {
}; };
const openLoginForm = () => { const openLoginForm = () => {
closeRegisterForm() closeRegisterForm();
emits('open-login-form'); emits("open-login-form");
}; };
const getVerify_code = async () => { const getVerify_code = async () => {
@ -232,80 +227,80 @@ onUnmounted(() => {
}); });
</script> </script>
<style lang="scss" scoped> <style lang="scss">
.register-box { .register-box {
position: fixed; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
right: 0; width: 100%;
bottom: 0; height: 100vh;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
background-color: rgba(0, 0, 0, 0.75); background-color: rgba(0, 0, 0, 0.75);
z-index: 1000101; z-index: 1000101;
}
.el-message { .el-message {
z-index: 1000102 !important; // z-index z-index: 1000102 !important; // z-index
}
.foot {
padding-top: 20px;
.btn_sumit {
display: block;
width: 100%;
} }
.btn_code { .foot {
display: block; padding-top: 20px;
width: 60px; .btn_sumit {
} display: block;
} width: 100%;
}
.register-container { .btn_code {
padding: 25px; display: block;
border-radius: 10px; width: 60px;
background-color: #fff;
width: 500px;
position: relative;
h4 {
color: #666;
text-align: center;
margin-bottom: 30px;
font-size: 24px;
}
.el-input {
width: 100%;
}
.verifyAndButton {
display: flex;
width: 100%;
}
.register-close {
position: absolute;
top: 10px;
right: 10px;
.btn_close{
cursor: pointer;
&:hover{
color: #409efc;
}
} }
} }
.tool{ .register-container {
padding-top: 25px; padding: 25px;
display: flex; border-radius: 10px;
justify-content: center; background-color: #fff;
align-items: center; width: 500px;
text-align: center; position: relative;
font-size: 14px;
color: #666; h4 {
color: #666;
text-align: center;
margin-bottom: 30px;
font-size: 24px;
}
.el-input {
width: 100%;
}
.verifyAndButton {
display: flex;
width: 100%;
}
.register-close {
position: absolute;
top: 10px;
right: 10px;
.btn_close {
cursor: pointer;
&:hover {
color: #409efc;
}
}
}
.tool {
padding-top: 25px;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
font-size: 14px;
color: #666;
}
} }
} }
</style> </style>

View File

@ -1,16 +1,15 @@
<template> <template>
<div class="footer"> <div class="footer">
<div class="foot_menu">
<div class="row"> <el-row :gutter="20" class="box">
<el-row> <el-col :span="4" class="col1">
<el-col :xs="6" :sm="6" :md="8" :lg="8" :xl="8" class="col1">
<div class="logo_text"> <div class="logo_text">
<img src="@/assets/image/xiaofa_logo.png" alt="Android版本下载"> <img src="@/assets/image/logo.jpg" alt="Android版本下载" />
</div> </div>
</el-col> </el-col>
<el-col :xs="6" :sm="6" :md="8" :lg="8" :xl="8"> <el-col :span="10">
<div class="about"> <div class="about">
<p>关于</p> <h3>关于</h3>
<ul> <ul>
<li v-for="a in aboutList" :key="a.id"> <li v-for="a in aboutList" :key="a.id">
<router-link :to="{ name: a.name }">{{ a.title }}</router-link> <router-link :to="{ name: a.name }">{{ a.title }}</router-link>
@ -18,9 +17,9 @@
</ul> </ul>
</div> </div>
</el-col> </el-col>
<el-col :xs="18" :sm="18" :md="8" :lg="8" :xl="8"> <el-col :span="10">
<div class="contact"> <div class="contact">
<p>联系我们</p> <h3>联系我们</h3>
<ul> <ul>
<li v-for="c in contactList" :key="c.id"> <li v-for="c in contactList" :key="c.id">
<span>{{ c.title }}</span> <span>{{ c.title }}</span>
@ -29,26 +28,29 @@
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
<div class="copyright"> <div class="copyright">
<p>&copy;桂平发发网络有限公司版权所有&nbsp; copyright@ 桂平发发网络有限公司
<a href="https://beian.miit.gov.cn" target="_blank">桂ICP备2024040484号-1</a>&nbsp;&nbsp; <a href="https://beian.miit.gov.cn" target="_blank"
<a href="https://beian.miit.gov.cn" target="_blank">经营许可证编号:桂B2-20240661</a>&nbsp;&nbsp; >桂ICP备2024040484号-1</a
<a @click.prevent="openLicenseImage">营业执照</a> >
</p> <a href="https://beian.miit.gov.cn" target="_blank"
>桂公网安备45088105000134号</a
>
<a href="https://beian.miit.gov.cn" target="_blank"
>经营许可证编号:桂B2-20240661</a
>
<a target="_blank" href="https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/media/media/plantform/default/20250407/dcd90acd12634546b46a701698af30a1.png">营业执照</a>
</div>
</div> </div>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
let aboutList = [ let aboutList = [
{ id: 1, title: "关于我们", name: 'about' }, { id: 1, title: "关于我们", name: "about" },
{ id: 2, title: "加入我们" , name: 'about' }, { id: 2, title: "加入我们", name: "about" },
{ id: 3, title: "商户入驻隐私协议" , name: 'AusinessAgreementPrivacy' } { id: 3, title: "商户入驻隐私协议", name: "AusinessAgreementPrivacy" },
]; ];
let contactList = [ let contactList = [
@ -57,26 +59,56 @@ let contactList = [
{ id: 3, title: "地址:广西贵港市桂平市西山镇桂南路盐业大厦对面4楼" }, { id: 3, title: "地址:广西贵港市桂平市西山镇桂南路盐业大厦对面4楼" },
]; ];
const openLicenseImage = () => {
const toUrl = "https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/media/media/plantform/default/20250407/dcd90acd12634546b46a701698af30a1.png"
window.open()?.document.write(`<!DOCTYPE html><html><body><img src='${toUrl}'/></body></html>`);
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.copyright a { .footer {
cursor: pointer; background: #000b22;
padding: 20px;
color: #999;
font-size: 14px;
a {
display: inline-block;
margin:0 5px;
color: #999;
&:hover {
color: #fff;
}
}
} }
.col1{
.foot_menu {
width: 1200px;
margin: auto;
}
.col1 {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.logo_text{
img{ .logo_text {
width: 96px; img {
border-radius: 100%; width: 48px;
border-radius: 10px;
} }
} }
</style>
.copyright {
padding-top: 10px;
text-align: center;
}
@media (max-width: 768px) {
.foot_menu {
display: none;
}
.copyright{
width: 100%;
}
}
</style>

View File

@ -19,13 +19,13 @@
<div class="header-right"> <div class="header-right">
<!-- 免费开店按钮始终可见 --> <!-- 免费开店按钮始终可见 -->
<div class="start"> <div class="start">
<el-button type="primary" @click="handleOpenStartPage"> <el-button color="#ea4322" @click="handleOpenStartPage">
立即入驻 立即入驻
</el-button> </el-button>
</div> </div>
<!-- 根据登录状态显示不同按钮 --> <!-- 根据登录状态显示不同按钮 -->
<div class="login"> <div class="login">
<el-button plain type="primary" @click="openLoginForm" class="login-button"> <el-button plain color="#f85535" @click="openLoginForm" class="login-button">
商家登录 商家登录
</el-button> </el-button>
</div> </div>
@ -39,12 +39,14 @@
</div> </div>
</el-row> </el-row>
</div> </div>
<div class="login-register-module"> <div class="login-register-module">
<span @click="handleOpenStartPage">立即入驻</span> <span @click="handleOpenStartPage">立即入驻</span>
<span>|</span> <span>|</span>
<span @click="openLoginForm">商家登录</span> <span @click="openLoginForm">商家登录</span>
<span v-if="isLoggedIn" @click="logout">退出</span> <span v-if="isLoggedIn" @click="logout">退出</span>
</div> </div>
<!-- 汉堡菜单 --> <!-- 汉堡菜单 -->
<div class="hamburger-menu" @click="toggleMenu"> <div class="hamburger-menu" @click="toggleMenu">
<span :class="{ 'hamburger-icon': true, 'rotate-top': isMenuOpen, }"></span> <span :class="{ 'hamburger-icon': true, 'rotate-top': isMenuOpen, }"></span>
@ -266,6 +268,9 @@ onUnmounted(() => {
.header-menu { .header-menu {
display: none; display: none;
} }
/* .header-menu {
display: none;
}
.mobile-menu{ .mobile-menu{
padding: 32px 24px; padding: 32px 24px;
border-top: 2px solid #DCDCDC; border-top: 2px solid #DCDCDC;
@ -280,6 +285,6 @@ onUnmounted(() => {
.login-register-module { .login-register-module {
display: flex; display: flex;
} } */
} }
</style> </style>

View File

@ -1,68 +1,100 @@
<template> <template>
<div class="feedback-container"> <div class="feedback-container">
<h1>意见反馈</h1> <div class="main">
<div class="feedback-form"> <div class="title">
<el-form :model="feedbackObj" label-width="auto" style="max-width: 600px"> 意见反馈
<el-form-item label="描述问题"> </div>
<el-input v-model="feedbackObj.describe" :rows="6" type="textarea" />
</el-form-item> <el-form
<el-form-item label="上传图片"> :model="feedbackObj"
<el-upload ref="uploadRef" multiple :limit="3" list-type="picture-card" :http-request="uploadSubmit" label-width="150px"
:auto-upload="false"> >
<el-icon class="avatar-uploader-icon"> <el-form-item label="描述问题">
<Plus /> <el-input
</el-icon> v-model="feedbackObj.describe"
</el-upload> :rows="6"
</el-form-item> type="textarea"
<el-form-item label="您的联系方式"> style="width: 95%"
<el-input v-model="feedbackObj.contact" style="width: 200px;" /> />
</el-form-item> </el-form-item>
</el-form> <el-form-item label="上传图片">
<el-button type="primary" size="default" @click="uploadRef.submit()">提交反馈</el-button> <el-upload
</div> ref="uploadRef"
multiple
:limit="3"
list-type="picture-card"
:http-request="uploadSubmit"
:auto-upload="false"
>
<el-icon class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
</el-form-item>
<el-form-item label="您的联系方式">
<el-input v-model="feedbackObj.contact" style="width: 95%" />
</el-form-item>
</el-form>
<div class="submit">
<el-button color="#f34d2c" plain @click="uploadRef.submit()"
>提交反馈</el-button
>
</div>
</div> </div>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref } from 'vue'; import { reactive, ref } from "vue";
import { Plus } from '@element-plus/icons-vue'; import { Plus } from "@element-plus/icons-vue";
import { uploadFile } from '@/api/upload'; // API import { uploadFile } from "@/api/upload"; // API
const feedbackObj = reactive({ const feedbackObj = reactive({
describe: '', describe: "",
img: '', img: "",
contact: '', contact: "",
}); });
const uploadRef = ref(); const uploadRef = ref();
const uploadSubmit = ({ file }) => { const uploadSubmit = ({ file }) => {
const params = { const params = {
// //
}; };
uploadFile(file, params) uploadFile(file, params)
.then(response => { .then((response) => {
console.log(response); console.log(response);
// //
}) })
.catch(error => { .catch((error) => {
console.error(error); console.error(error);
// //
}); });
}; };
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.feedback-container { .feedback-container {
width: 100%; width: 100%;
max-width: 1200px; min-height: calc(100vh - 70px - 150px);
display: flex; background: #eee;
flex-direction: column; padding: 20px;
align-items: center; .main {
justify-content: start; width: 1200px;
margin: auto; margin:0 auto;
h1 { background: #fff;
margin: 30px 0px; border-radius: 10px;
.title{
font-size: 24px;
padding: 30px 30px 60px 30px;
} }
.submit{
padding: 50px 0;
text-align: center;
}
}
} }
</style> </style>

View File

@ -1,12 +1,14 @@
<template> <template>
<div class="help_container"> <div class="help_container">
<el-row> <div class="main">
<el-row>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<div class="help_img"> <div class="help_img">
<img src="../../assets/image/help/help_temp.png"> <img src="../../assets/image/help/help_temp.png">
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
</div>
</div> </div>
</template> </template>
@ -16,11 +18,22 @@
<style lang="scss"> <style lang="scss">
.help_container { .help_container {
width: 100%; width: 100%;
max-width: 1200px; min-height: calc(100vh - 70px - 150px);
margin: auto; background: #eee;
display: flex; padding: 20px;
justify-content: center;
align-items: center; .main {
width: 1200px;
margin:0 auto;
background: #fff;
border-radius: 10px;
padding: 20px;
min-height: 600px;
display: flex;
align-items: center;
justify-content: center;
}
.el-row{ .el-row{
width: 100%; width: 100%;
} }

View File

@ -32,6 +32,11 @@
] ]
</script> </script>
<style lang="scss"> <style lang="scss">
.banner{
padding-top: 20px;
}
.banner-list{
margin-top: 15px;
}
</style> </style>

View File

@ -1,51 +1,92 @@
<template> <template>
<div class="index-title"> <div class="index-title">
<h3>公司简介</h3> <h3>公司简介</h3>
<p>我们是一家专注于同城服务的公司致力于为同城居民提供便捷高效优质的服务我们拥有专业的团队和丰富的经验为您解决生活中的各种问题</p> </div>
</div> <div class="company-detail">
<div class="company-detail"> <el-row>
<el-row> <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12"> <img <img src="../../assets/image/index/company.jpg"
src="../../assets/image/index/company.jpg"></el-col> /></el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12"> <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
<div class="company-introduce"> <div class="company-introduce">
<p>小发同城专注于打造本地生活服务平台我们聚焦同城零售企业招聘租赁服务以及二手交易等核心业务旨在全方位满足您的生活与工作需求</p> <p>
<p>在同城零售领域小发同城凭借先进的技术手段成功打通超市数据库给超市提供实现线上线下商品价格库存等信息的实时同步独特价值在于为消费者提供无缝购物体验让消费者无论是在线上商城浏览下单还是在实体超市选购商品都能享受一致的商品选择价格体系与库存保障市场定位为本地生活服务的创新引领者致力于解决传统零售线上线下脱节的痛点</p> 小发同城专注于打造本地生活服务平台我们聚焦同城零售企业招聘租赁服务以及二手交易等核心业务旨在全方位满足您的生活与工作需求
<p>对于企业招聘我们搭建了高效的人才对接桥梁精准匹配企业与求职者需求助力本地企业广纳贤才推动地方经济发展</p> </p>
<p>在租赁服务方面涵盖住房办公场地设备等多元租赁选项为您解决生活与经营中的租赁难题</p> <p>
<p>在二手交易板块则为闲置物品提供了流通渠道让资源得以循环利用为环保助力</p> 在同城零售领域小发同城凭借先进的技术手段成功打通超市数据库给超市提供实现线上线下商品价格库存等信息的实时同步独特价值在于为消费者提供无缝购物体验让消费者无论是在线上商城浏览下单还是在实体超市选购商品都能享受一致的商品选择价格体系与库存保障市场定位为本地生活服务的创新引领者致力于解决传统零售线上线下脱节的痛点
<router-link :to="{ name: 'about' }" class="router-link-button">了解更多</router-link> </p>
</div> <p>
</el-col> 对于企业招聘我们搭建了高效的人才对接桥梁精准匹配企业与求职者需求助力本地企业广纳贤才推动地方经济发展
</el-row> </p>
</div> <p>
在租赁服务方面涵盖住房办公场地设备等多元租赁选项为您解决生活与经营中的租赁难题
</p>
<p>
在二手交易板块则为闲置物品提供了流通渠道让资源得以循环利用为环保助力
</p>
<router-link :to="{ name: 'about' }" class="router-link-button"
>了解更多</router-link
>
</div>
</el-col>
</el-row>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts"></script>
</script>
<style lang="scss"> <style lang="scss">
.router-link-button { .router-link-button {
padding: 3px 5px; padding: 3px 5px;
border: none; border: none;
border-radius: 4px; border-radius: 4px;
background-color: #42b983; background-color: #ec4b2b;
color: white; color: white;
font-size: 16px; font-size: 16px;
text-align: center; text-align: center;
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
transition: background-color 0.3s ease; transition: background-color 0.3s ease;
margin-top: 25px; margin-top: 25px;
float: right; float: right;
} }
.router-link-button:hover { .router-link-button:hover {
background-color: #36a675; background-color: #f85535;
} }
.company-introduce p { .company-introduce p {
font-size: 20px; font-size: 20px;
text-indent: 2em; text-indent: 2em;
} }
</style>
.index-title {
width: 1200px;
text-align: center;
margin: auto;
h3 {
font-size: 40px;
}
p{
font-size: 20px;
}
}
.company-detail {
width: 1200px;
margin: 15px auto 0;
}
@media (max-width: 768px) {
.index-title {
width: auto;
}
.company-detail {
width: auto;
}
}
</style>

View File

@ -1,22 +1,24 @@
<template> <template>
<Slider/> <Slider @open-register-form="showRegisterForm = true" />
<div class="container"> <Company />
<div class="container-bg"> <Banner />
<Company/> <Service />
<Banner/> <Login :isVisible="showLoginForm" @open-register-form="showRegisterForm = true" @close-login-form="showLoginForm = false" />
<Service/> <Register :isVisible="showRegisterForm" @open-login-form="showLoginForm = true" @close-register-form="showRegisterForm = false" />
</div> </template>
</div>
</template>
<script setup lang="ts">
import Slider from './slider.vue';
import Banner from './banner.vue';
import Service from './service.vue';
import Company from './company.vue';
</script>
<style lang="scss"> <script setup lang="ts">
</style> import { ref } from 'vue';
import Slider from "./slider.vue";
import Banner from "./banner.vue";
import Service from "./service.vue";
import Company from "./company.vue";
import Register from '@/components/register.vue';
const showRegisterForm = ref(false);
const showLoginForm = ref(false);
</script>
<style lang="scss"></style>

View File

@ -32,7 +32,16 @@
</div> </div>
</template> </template>
<style> <style lang="scss">
.service-list{
width: 1200px;
margin: 15px 0;
}
@media (max-width: 768px) {
.service-list{
width: auto;
}
}
</style> </style>

View File

@ -1,118 +1,70 @@
<template> <template>
<div class="slider"> <div class="slider">
<div class="slider-container"> <div class="slider-container">
<el-row> <div class="box">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12"> <div class="sub">
<div class="slider-container-left"> <el-button :icon="Promotion" color="#ffc114" round size="large" @click="openRegisterForm">
<div> 立即入驻
<h1> </el-button>
加入小发同城把握无限商机 <el-button :icon="Download" round size="large" @click="downAndroid">
</h1> Android版本下载
<p>JOIN XIAOFA SHOP</p> </el-button>
</div> </div>
<div class="slider-button"> </div>
<el-button type="danger" round size="large">
立即入驻
</el-button>
<el-button type="success" round size="large">
Android版本下载
</el-button>
<!-- <div class="btn slider-btn service">Android版本下载
<div class="qr-code">
<img src="../../assets/image/down_android.png" alt="Android版本下载">
</div>
</div> -->
<!-- <div class="btn slider-btn active-btn">关注抖音号
<div class="qr-code">
<img src="../../assets/image/down_android.png" alt="抖音二维码">
</div>
</div> -->
</div>
</div>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<div class="slider-container-right">
<img src="../../assets/image/xiaofa_logo.png">
</div>
</el-col>
</el-row>
</div> </div>
<!--移动端的界面-->
<div class="slider-container-mobile">
<el-row>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl ="24">
<div class="mobile-text">
<h1>让更多人</h1>
<h1>享受本地美好生活</h1>
</div>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl ="24">
<div class="slider-container-right">
<img src="../../assets/image/xiaofa_logo.png">
</div>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl ="24">
<p>"小发同城在手,本地生活无忧"</p>
<div class="slider-button">
<div class="btn slider-btn service">APP下载
<!-- 二维码容器 -->
<div class="qr-code">
<img src="../../assets/image/xiaofa_logo.png" alt="APP二维码">
</div>
</div>
<div class="btn slider-btn active-btn">关注抖音号
<!-- 二维码容器 -->
<div class="qr-code">
<img src="../../assets/image/xiaofa_logo.png" alt="抖音二维码">
</div>
</div>
</div>
</el-col>
</el-row>
</div>
</div> </div>
<div class="counter_wrapper" data-aos="fade-up"> <div class="counter_wrapper" data-aos="fade-up">
<div class="container"> <div class="container">
<!-- 使用 el-row 作为行容器 --> <el-row :gutter="10">
<el-row :gutter="20"> <el-col :span="6">
<!-- 第一个统计项 -->
<el-col :xs="12" :sm="12" :md="12" :lg="6" :xl="6">
<div class="count_box box_hover"> <div class="count_box box_hover">
<i class="iconfont icon-employee1"></i> <i class="iconfont icon-employee1"></i>
<h3> <h3>
<el-statistic :value="businessmanValue" :formatter="formatter" :value-style="{ fontSize: '35px' }" /> <el-statistic
:value="businessmanValue"
:formatter="formatter"
:value-style="{ fontSize: '35px' }"
/>
</h3> </h3>
<p>商家数量</p> <p>商家数量</p>
</div> </div>
</el-col> </el-col>
<!-- 第二个统计项 --> <el-col :span="6">
<el-col :xs="12" :sm="12" :md="12" :lg="6" :xl="6">
<div class="count_box box_center"> <div class="count_box box_center">
<i class="iconfont icon-baobei"></i> <i class="iconfont icon-baobei"></i>
<h3> <h3>
<el-statistic :value="productValue" :formatter="formatter2" :value-style="{ fontSize: '35px' }" /> <el-statistic
:value="productValue"
:formatter="formatter2"
:value-style="{ fontSize: '35px' }"
/>
</h3> </h3>
<p>商品数量</p> <p>商品数量</p>
</div> </div>
</el-col> </el-col>
<!-- 第三个统计项 --> <el-col :span="6">
<el-col :xs="12" :sm="12" :md="12" :lg="6" :xl="6">
<div class="count_box box_hover"> <div class="count_box box_hover">
<i class="iconfont icon-vip"></i> <i class="iconfont icon-vip"></i>
<h3> <h3>
<el-statistic :value="memberValue" :formatter="formatter" :value-style="{ fontSize: '35px' }" /> <el-statistic
:value="memberValue"
:formatter="formatter"
:value-style="{ fontSize: '35px' }"
/>
</h3> </h3>
<p>会员数量</p> <p>会员数量</p>
</div> </div>
</el-col> </el-col>
<!-- 第四个统计项 --> <el-col :span="6">
<el-col :xs="12" :sm="12" :md="12" :lg="6" :xl="6">
<div class="count_box box_hover"> <div class="count_box box_hover">
<i class="iconfont icon-dingdan"></i> <i class="iconfont icon-dingdan"></i>
<h3> <h3>
<el-statistic :value="orderValue" :formatter="formatter2" :value-style="{ fontSize: '35px' }" /> <el-statistic
:value="orderValue"
:formatter="formatter2"
:value-style="{ fontSize: '35px' }"
/>
</h3> </h3>
<p>订单数量</p> <p>订单数量</p>
</div> </div>
@ -122,14 +74,27 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { useTransition } from '@vueuse/core' import { useTransition } from "@vueuse/core";
import { ref, onMounted } from 'vue'; import { ref, onMounted, defineEmits } from "vue";
import { Promotion, Download } from "@element-plus/icons-vue";
import { ElMessage } from 'element-plus'
const businessman = ref(0); const businessman = ref(0);
const product = ref(0); const product = ref(0);
const member = ref(0); const member = ref(0);
const order = ref(0); const order = ref(0);
const emits = defineEmits(["open-register-form"]);
const openRegisterForm = () => {
console.log(1111);
emits("open-register-form");
};
const downAndroid = ()=>{
ElMessage.error('敬请期待~')
}
const businessmanValue = useTransition(businessman, { const businessmanValue = useTransition(businessman, {
duration: 1500, duration: 1500,
}); });
@ -156,137 +121,35 @@ const formatter2 = (value: number) => {
}; };
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
/*slider*/
.slider { .slider {
width: 100%; width: 100%;
background: linear-gradient(90.54deg, #7354ff 0.42%, #000b22 102.71%);
-webkit-background: linear-gradient(90.54deg, #7354ff 0.42%, #000b22 102.71%);
-moz-background: linear-gradient(90.54deg, #7354ff 0.42%, #000b22 102.71%);
position: relative;
padding-top: 100px;
padding-bottom: 130px;
}
.slider:before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
background-position: center center;
bottom: 0;
z-index: 0;
}
.slider .slider-container {
display: flex;
width: 100%;
max-width: 1200px;
margin: auto;
align-items: center;
justify-content: center;
}
.slider .slider-container .el-row{
display: flex;
width: 100%;
align-items: center;
justify-content: center;
}
.slider .slider-container-mobile {
display: none;
width: 100%;
max-width: 1200px;
margin: auto;
align-items: center;
justify-content: center;
text-align: center;
}
.slider .slider-container-mobile h1{
color: #fff;
font-size: 40px;
font-weight: 700;
margin: 10px 0;
}
.slider .slider-container-mobile p {
color: #fff;
font-size: 20px;
font-weight: 400;
margin: 10px 0;
}
.slider .slider-container-left {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
gap: 25px;
}
.slider .slider-container-left h1 {
color: #fff;
font-size: 40px;
font-weight: 700;
font-style: italic;
}
.slider .slider-container-left p {
color: rgba(255,255,255,.3);
font-size: 40px;
font-weight: 400;
line-height: 36px;
letter-spacing: 10px;
font-style: italic;
}
.slider .slider-container-right {
display: flex;
justify-content: center;
align-self: center;
}
.slider .slider-container-right img {
width: 50%;
height: 50%;
}
.slider-button {
display: flex;
justify-content: center;
}
.slider-button .slider-btn {
margin-top: 30px;
padding: 12px 30px;
position: relative; position: relative;
} }
.slider-button .service { .slider-container {
margin-right: 14px; display: flex;
} width: 100%;
height: calc(100vh - 200px);
background: url("@/assets/image/banner1.jpg") no-repeat 50% 50%;
background-size: 100% 100%;
margin: auto;
align-items: center;
justify-content: center;
/* 二维码容器初始样式 */ .box {
.qr-code { width: 1000px;
display: none; margin: auto;
position: absolute; height: calc(100vh - 200px);
top: 100%; position: relative;
left: 50%;
transform: translateX(-50%);
z-index: 30;
background-color: white;
padding: 10px;
border: 1px solid #ccc;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
/* 鼠标悬停时显示二维码 */ .sub {
.slider-btn:hover .qr-code { position: absolute;
display: block; top: 65%;
} transform: translateY(65%);
left: 150px;
.qr-code img { }
width: 150px; }
height: 150px;
} }
.counter_wrapper { .counter_wrapper {
@ -298,7 +161,7 @@ const formatter2 = (value: number) => {
.counter_wrapper .count_box { .counter_wrapper .count_box {
width: 100%; width: 100%;
padding: 15px 0; padding: 15px 0;
border-radius: 5px 5px 30px 30px; border-radius: 10px;
text-align: center; text-align: center;
margin-bottom: 40px; margin-bottom: 40px;
background: #fff; background: #fff;
@ -337,11 +200,10 @@ const formatter2 = (value: number) => {
.counter_wrapper .count_box:hover .el-statistic__content { .counter_wrapper .count_box:hover .el-statistic__content {
color: #ffffff; color: #ffffff;
/* 悬停时数值变为白色 */
} }
.counter_wrapper .count_box:hover { .counter_wrapper .count_box:hover {
background: #7354ff; background: #f34d2c;
} }
.container { .container {
@ -354,53 +216,39 @@ const formatter2 = (value: number) => {
width: 100%; width: 100%;
} }
/* 小屏幕样式 */
@media (max-width: 768px) { @media (max-width: 768px) {
.container { .slider-container {
width: 100%; background: url("/src/assets/image/banner1.jpg") no-repeat 83.5% 100%;
margin: auto; background-size: cover;
} height: calc(100vh - 100px);
.slider{
padding-top: 0px; .box {
} width: 100%;
.container .el-row { margin: auto;
width: 100%; height: calc(100vh - 100px);
padding-left: 20px; position: relative;
.sub {
position: absolute;
top: 78%;
left: 0;
transform: translateY(75%);
text-align: center;
width: 100%;
button {
margin-bottom: 12px;
}
}
}
} }
/* 大屏幕隐藏 */ .counter_wrapper {
.slider .slider-container { margin-top: -20px;
.container {
display: none; display: flex;
} justify-content: center;
}
/* 小屏幕显示 */
.slider .slider-container-mobile {
display: flex;
}
.slider .slider-container-left p {
margin-top: 20px;
} }
} }
</style>
/* 大屏幕样式 */
@media (min-width: 769px) {
/* 小屏幕隐藏 */
.slider .slider-container-mobile {
display: none;
}
/* 大屏幕显示 */
.slider .slider-container {
display: flex;
}
}
.slider-button{
display: flex;
align-items: center;
}
</style>