Browse Source

兼容移动端样式

master
科技小王子 7 months ago
parent
commit
b17d8efe4f
  1. 17
      components/AppFooter.vue
  2. 2
      components/AppHeader.vue
  3. 2
      components/PageBanner.vue
  4. 9
      components/UserMenu.vue
  5. 8
      nuxt.config.ts
  6. 6
      pages/components/CardList.vue
  7. 6
      pages/components/PlugList.vue
  8. 10
      pages/components/ProductList.vue
  9. 13
      pages/item/components/PageBanner.vue
  10. 6
      pages/item/index.vue
  11. 14
      pages/market/components/CardList.vue
  12. 55
      pages/market/components/CardList2.vue
  13. 6
      pages/product/components/CardList.vue
  14. 82
      pages/user/auth.vue
  15. 92
      pages/user/components/Auth.vue
  16. 40
      pages/user/components/Base.vue
  17. 27
      pages/user/components/Order.vue
  18. 31
      pages/user/components/Password.vue
  19. 39
      pages/user/index.vue
  20. 18
      pages/user/order.vue
  21. 28
      pages/user/password.vue

17
components/AppFooter.vue

@ -1,9 +1,11 @@
<template>
<footer class="overflow-hidden">
<footer class="overflow-hidden pt-4">
<!-- 间隔 -->
<div class="sm:h-[3px] h-[15px]" v-if="getPath().startsWith('/passport/login')"></div>
<div class="sm:h-[30px] h-[15px]" v-else></div>
<div class=" bg-white my-3 w-3/4 m-auto" v-if="config.copyrightForDemoData">
<el-alert :title="config.copyrightForDemoData" center show-icon type="warning" />
</div>
@ -38,6 +40,9 @@
</div>
</div>
<div class="flex pt-1 w-full ">
<el-divider><span class="text-gray-400">Footer</span></el-divider>
</div>
<div class="mx-3 sm:hidden p-5 bg-white rounded-xl">
<el-collapse v-model="activeNames" accordion>
<template v-for="(item,index) in subMenu">
@ -84,10 +89,8 @@
<script setup lang="ts">
//
import {getPath, useConfigInfo} from "#imports";
import { UserOutlined } from '@ant-design/icons-vue';
import {useSubMenu, useWebsite} from "~/composables/configState";
import Breadcrumb from "~/components/Breadcrumb.vue";
import UnderMaintenance from "~/components/UnderMaintenance.vue";
import { StarFilled } from '@element-plus/icons-vue'
const config = useConfigInfo();
const website = useWebsite();
@ -101,5 +104,9 @@ const activeNames = ref(['1'])
</script>
<style lang="scss">
.el-divider__text{
display: block;
margin-top: -1px;
--el-bg-color: #ffffff;
}
</style>

2
components/AppHeader.vue

@ -12,7 +12,7 @@
:src="config.siteLogo"
shape="square"
fit="fill"
class="sm:h-7 sm: pb-2 h-5 sm:w-auto"
class="lg:h-7 lg:w-auto pb-2 h-5 w-[90px] h-[28px]"
:alt="config.siteName"
:title="config.siteName"
/>

2
components/PageBanner.vue

@ -92,7 +92,7 @@ if(nav.value?.data){
}
//
if(form.value.permission === 1){
navigateTo(`/passport/login`)
// navigateTo(`/passport/login`)
}
}

9
components/UserMenu.vue

@ -1,15 +1,15 @@
<template>
<div class="sm:w-[170px] sm:flex sm:mb-0 mb-5 justify-center w-full rounded-lg">
<el-menu
class="full-width-menu rounded-lg"
class="full-width-menu bg-white w-full"
background-color="transparent"
text-color="#606266"
style="border: none; width: 100%"
:default-active="activeIndex"
style="border: none;"
@select="handleSelect"
>
<el-menu-item v-for="(item,index) in activities" :index="`${item.path}`" :key="index" class="custom-menu-item hover:rounded-lg sm:w-[170px] w-full">
<span class="text-center w-full" @click="navigateTo(item.path)">{{ item.name }}</span>
<span class="text-center w-full hover:bg-white rounded-lg" @click="navigateTo(item.path)">{{ item.name }}</span>
</el-menu-item>
</el-menu>
</div>
@ -62,6 +62,7 @@ const handleSelect = (index: string) => {
</script>
<style lang="scss">
.custom-menu-item:hover{
background-color: #dee3e8;
background-color: #ffffff;
}
</style>

8
nuxt.config.ts

@ -33,12 +33,12 @@ export default defineNuxtConfig({
public: {
// 开发环境配置
// tenantId: '5',
apiBase: 'http://127.0.0.1:9090/api',
apiServer: 'http://127.0.0.1:9090/api',
// apiBase: 'http://127.0.0.1:9090/api',
// apiServer: 'http://127.0.0.1:9090/api',
// 生产环境
// apiBase: 'https://server.gxwebsoft.com/api',
// apiServer: 'https://server.gxwebsoft.com/api',
apiBase: 'https://server.gxwebsoft.com/api',
apiServer: 'https://server.gxwebsoft.com/api',
globalTitle: '网宿软件',
domain: 'websoft.top'
},

6
pages/components/CardList.vue

@ -26,12 +26,12 @@
<div class="text-gray-500">{{ item.comments }}</div>
</p>
<div class="button-group flex justify-center mt-3">
<el-button class="w-full" :icon="ElIconView" @click="openSpmUrl('/item', item,item.goodsId,true)">
<el-button class="w-full" size="large" :icon="ElIconView" @click="openSpmUrl('/item', item,item.goodsId,true)">
查看详情
</el-button>
<el-button type="primary" v-if="item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买
<el-button type="primary" size="large" v-if="item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买
</el-button>
<el-button v-else class="w-full" :icon="ElIconShoppingCart">下载</el-button>
<el-button v-else class="w-full" size="large" :icon="ElIconShoppingCart">下载</el-button>
</div>
</div>
</el-card>

6
pages/components/PlugList.vue

@ -26,10 +26,10 @@
<div class="text-gray-500">{{ item.comments }}</div>
</p>
<div class="button-group flex justify-center mt-3">
<el-button class="w-full" :icon="ElIconView" @click="openSpmUrl(`/item`, item,item.plugId,true)">查看详情</el-button>
<el-button type="primary" v-if="item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买
<el-button class="w-full" size="large" :icon="ElIconView" @click="openSpmUrl(`/item`, item,item.plugId,true)">查看详情</el-button>
<el-button type="primary" size="large" v-if="item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买
</el-button>
<el-button v-else class="w-full" :icon="ElIconShoppingCart">下载</el-button>
<el-button v-else class="w-full" size="large" :icon="ElIconShoppingCart">下载</el-button>
</div>
</div>
</el-card>

10
pages/components/ProductList.vue

@ -15,23 +15,23 @@
<el-col :span="6" :xs="24" class="mb-5 min-w-xs">
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer">
<el-image
:src="`https://oss.wsdns.cn/20240925/e5e47100f4b6471395b3b81f834d2902.jpg?x-oss-process=image/resize,m_fixed,w_750/quality,Q_90`"
:src="`${item.image}`"
fit="fill" :lazy="true" class="w-full md:h-[150px] h-[199px] 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 flex-col gap-1.5">
<div class="flex-1 text-xl cursor-pointer">{{ item.title }}</div>
<div class="text-red-500">{{ item.price }}</div>
</p>
<p v-if="item.price > 0" class="flex items-center gap-1.5 py-2 text-gray-500 justify-between">
<p v-if="item.price && item.price > 0" class="flex items-center gap-1.5 py-2 text-gray-500 justify-between">
<div class="text-gray-500">{{ item.comments }}</div>
</p>
<div class="button-group flex justify-center mt-3">
<el-button class="w-full" :icon="ElIconView" @click="openSpmUrl('/item', item,item.goodsId,true)">
<el-button class="w-full" size="large" :icon="ElIconView" @click="openSpmUrl('/item', item,item.productId,true)">
查看详情
</el-button>
<el-button type="primary" v-if="item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买
<el-button type="primary" size="large" v-if="item.price && item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买
</el-button>
<el-button v-else class="w-full" :icon="ElIconShoppingCart">下载</el-button>
<el-button v-else class="w-full" size="large" :icon="ElIconShoppingCart">下载</el-button>
</div>
</div>
</el-card>

13
pages/item/components/PageBanner.vue

@ -25,15 +25,16 @@
_id="content:4.templates.yml" _type="yaml" _source="content" _file="4.templates.yml" _stem="4.templates"
_extension="yml">
<div class="gap-8 sm:gap-y-16 lg:items-center" v-if="form">
<div class="w-full">
<div class="flex">
<el-avatar :src="form.image" shape="square" :size="180" class="rounded-avatar shadow-sm hover:shadow mr-4" />
<div class="w-full sm:px-0 px-4">
<div class="flex flex-1">
<el-avatar :src="form.image" shape="square" :size="180" class="hidden-sm-and-down rounded-avatar shadow-sm hover:shadow mr-4" />
<el-avatar :src="form.image" shape="square" :size="80" class="hidden-sm-and-up rounded-avatar-xs shadow-sm hover:shadow mr-4" />
<div class="title flex flex-col">
<h1
class="text-2xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-3xl lg:text-4xl">
<span v-if="form.title">{{ form.title }}</span>
</h1>
<div class="my-1 text-sm text-gray-500 dark:text-gray-400">
<div class="my-1 text-sm text-gray-500 w-auto sm:max-w-3xl max-w-xs flex-1 dark:text-gray-400">
{{ form?.comments || desc }}
</div>
<a class="company-name text-sm my-1">
@ -45,6 +46,7 @@
<el-button
:icon="ElIconView"
size="large"
class="hidden-sm-and-down"
@click="openSpmUrl(form.demoUrl)"
>
演示地址
@ -99,4 +101,7 @@ withDefaults(
.rounded-avatar{
border-radius: 30px;
}
.rounded-avatar-xs{
border-radius: 20px;
}
</style>

6
pages/item/index.vue

@ -2,9 +2,9 @@
<template>
<PageBanner :form="form" />
<div class="page-main md:w-screen-xl m-auto">
<div class="page-main md:w-screen-xl m-auto p-3">
<el-row :gutter="24">
<el-col :span="18">
<el-col :span="18" :xs="24">
<el-card shadow="hover" class="hover:border-green-50 hover:border-2 mb-5">
<template #header>
<div class="card-header font-bold text-xl">
@ -49,7 +49,7 @@
</template>
</el-card>
</el-col>
<el-col :span="6">
<el-col :span="6" :xs="24">
<el-card shadow="hover" class="hover:border-green-50 hover:border-2 mb-5">
<template #header>
<div class="card-header font-bold text-xl">

14
pages/market/components/CardList.vue

@ -3,23 +3,23 @@
<el-row :gutter="24" class="flex">
<template v-for="(item,index) in list" :key="index">
<el-col :span="6" :xs="24" class="mb-5 min-w-xs">
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer">
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer" @click="openSpmUrl(`/item`, item, item.productId,true)">
<el-image
:src="`https://oss.wsdns.cn/20240925/e5e47100f4b6471395b3b81f834d2902.jpg?x-oss-process=image/resize,m_fixed,w_750/quality,Q_90`"
fit="fill" :lazy="true" class="w-full md:h-[150px] h-[199px] cursor-pointer"/>
:src="item.image"
fit="scale-down" :lazy="true" class="w-full md:h-[150px] h-[199px] 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">{{ item.plugName }}</span>
<span class="flex-1 text-xl cursor-pointer">{{ item.title }}</span>
<div class="text-red-500" v-if="item.price > 0">{{ item.price }}</div>
</p>
<p class="flex items-center gap-1.5 py-2 text-gray-500 justify-between">
<div class="text-gray-500">{{ item.comments }}</div>
</p>
<div class="button-group flex justify-center mt-3">
<el-button class="w-full" @click="openSpmUrl(`/item`, item, item.plugId,true)">查看详情</el-button>
<el-button type="primary" v-if="item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买
<el-button class="w-full" size="large" @click.stop="openSpmUrl(`/item`, item, item.productId,true)">查看详情</el-button>
<el-button type="primary" v-if="item.price > 0" size="large" class="w-full" :icon="ElIconShoppingCart" @click.stop="openSpmUrl(`/item`, item, item.productId,true)">购买
</el-button>
<el-button v-else class="w-full">下载插件</el-button>
<el-button v-else class="w-full" size="large">下载插件</el-button>
</div>
</div>
</el-card>

55
pages/market/components/CardList2.vue

@ -1,55 +0,0 @@
<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="24" class="mb-5 min-w-xs">
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer" @click="openSpmUrl(`/market/detail`,item,item.articleId)">
<div class="flex">
<el-image :src="item.appIcon" fit="fill" :lazy="true" class="w-[150px] 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">{{ item.appName }}</span>
</p>
<p class="flex flex-col gap-1.5 py-2 text-gray-500 justify-between">
<span class="text-red-500">{{ item.price }} </span>
<span class="text-gray-500">{{ item.comments }} </span>
</p>
<div class="button-group flex mt-3">
<el-button class="">演示</el-button>
<el-button class="">购买</el-button>
</div>
</div>
</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>

6
pages/product/components/CardList.vue

@ -14,9 +14,9 @@
<div class="text-gray-500">{{ item.comments }}</div>
</p>
<div class="button-group flex justify-center mt-3">
<el-button class="w-full" :icon="ElIconView" @click="openSpmUrl(`/item`, item, item.productId,true)">查看详情</el-button>
<el-button type="primary" v-if="item.price && item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买</el-button>
<el-button v-else class="w-full" :icon="ElIconShoppingCart">下载</el-button>
<el-button class="w-full" size="large" :icon="ElIconView" @click="openSpmUrl(`/item`, item, item.productId,true)">查看详情</el-button>
<el-button type="primary" size="large" v-if="item.price && item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买</el-button>
<el-button v-else class="w-full" size="large" :icon="ElIconShoppingCart">下载</el-button>
</div>
</div>
</el-card>

82
pages/user/auth.vue

@ -1,87 +1,12 @@
<template>
<PageBanner title="实名认证" desc="Authentication" />
<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="login-layout m-auto sm:w-screen-xl w-full">
<div class="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>
<Auth :form="form" @done="onDone" />
</div>
</div>
</div>
</template>
@ -94,6 +19,7 @@ import { Plus } from '@element-plus/icons-vue'
import {useServerRequest} from "~/composables/useServerRequest";
import type {ApiResult} from "~/api";
import UserMenu from "~/components/UserMenu.vue";
import Auth from './components/Auth.vue';
//
const runtimeConfig = useRuntimeConfig();

92
pages/user/components/Auth.vue

@ -0,0 +1,92 @@
<template>
<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>
</template>
<script setup lang="ts">
withDefaults(
defineProps<{
form?: any;
title?: string;
desc?: string;
}>(),
{}
);
</script>
<style scoped lang="less">
</style>

40
pages/user/components/Base.vue

@ -0,0 +1,40 @@
<template>
<el-form :model="form" label-width="auto" size="large" label-position="top">
<el-form-item label="手机号码" class="px-4">
<el-input disabled v-model="form.mobile"/>
</el-form-item>
<el-form-item label="昵称" class="px-4">
<el-input v-model="form.nickname"/>
</el-form-item>
<el-form-item label="邮箱账号" class="px-4">
<el-input v-model="form.email" placeholder="邮箱账号"/>
</el-form-item>
<el-form-item label="性别" class="px-4">
<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="个人签名" class="px-4">
<el-input v-model="form.comments" type="textarea" placeholder="个人签名" :rows="4"/>
</el-form-item>
<el-form-item class="px-4">
<el-button type="primary" class="sm:w-auto w-full" size="large" @click="onSubmit">保存</el-button>
</el-form-item>
</el-form>
</template>
<script setup lang="ts">
withDefaults(
defineProps<{
form?: any;
title?: string;
desc?: string;
}>(),
{}
);
</script>
<style scoped lang="less">
</style>

27
pages/user/components/Order.vue

@ -0,0 +1,27 @@
<template>
<el-table :data="tableData" class="sm:py-2 w-full">
<el-table-column prop="date" label="下单日期" width="180" />
<el-table-column prop="name" label="产品名称" width="180" />
<el-table-column prop="address" label="订单信息" />
</el-table>
</template>
<script setup lang="ts">
import {ref} from "vue";
withDefaults(
defineProps<{
form?: any;
title?: string;
desc?: string;
}>(),
{}
);
const tableData = ref<any[]>();
</script>
<style scoped lang="less">
</style>

31
pages/user/components/Password.vue

@ -0,0 +1,31 @@
<template>
<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.oldPassword" placeholder="请输入旧密码" />
</el-form-item>
<el-form-item label="新密码">
<el-input v-model="form.password" type="password" placeholder="请输入新密码" />
</el-form-item>
<el-form-item label="确认密码">
<el-input v-model="form.password2" type="password" placeholder="请确认新密码" />
</el-form-item>
<el-form-item>
<el-button type="primary" size="large" @click="onSubmit">保存</el-button>
</el-form-item>
</el-form>
</template>
<script setup lang="ts">
withDefaults(
defineProps<{
form?: any;
title?: string;
desc?: string;
}>(),
{}
);
</script>
<style scoped lang="less">
</style>

39
pages/user/index.vue

@ -1,53 +1,32 @@
<template>
<PageBanner title="账户中心" desc="Account Center" />
<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="login-layout m-auto sm:w-screen-xl w-full">
<div class="m-auto flex sm:flex-row flex-col sm:px-0 px-3">
<!-- 用户菜单 -->
<UserMenu :activeIndex="activeIndex" @done="onDone" class="sm:flex hidden" />
<div class="flash md:ml-8 ml-0 bg-white rounded-lg p-3 w-full">
<div class="title text-xl text-gray-700 px-4 py-2 mb-4 font-500">账号信息</div>
<el-form :model="form" label-width="auto" size="large" label-position="top" class="sm:w-screen-md w-full sm:px-4 sm:py-2">
<el-form-item label="手机号码">
<el-input disabled v-model="form.mobile" />
</el-form-item>
<el-form-item label="昵称">
<el-input v-model="form.nickname" />
</el-form-item>
<el-form-item label="邮箱账号">
<el-input v-model="form.email" 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-input v-model="form.comments" type="textarea" placeholder="个人签名" :rows="4" />
</el-form-item>
<el-form-item>
<el-button type="primary" size="large" @click="onSubmit">保存</el-button>
</el-form-item>
</el-form>
<div class="flash bg-white rounded-lg w-full">
<div class="title text-xl text-gray-700 md:px-8 p-4 md:mt-3 font-500">账号信息</div>
<div class="sm:w-screen-md w-full sm:px-4 sm:py-2">
<Base :form="form" />
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import {useConfigInfo, useToken, useWebsite} from "~/composables/configState";
import {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";
import UserMenu from "~/components/UserMenu.vue";
import Base from './components/Base.vue';
//
const runtimeConfig = useRuntimeConfig();
const route = useRoute();
const website = useWebsite()
const config = useConfigInfo();
const token = useToken();
const userInfo = ref<User>();
const activeIndex = ref('');

18
pages/user/order.vue

@ -1,18 +1,13 @@
<template>
<PageBanner title="订单列表" desc="Order List" />
<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="login-layout m-auto sm:w-screen-xl w-full">
<div class="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 p-3 w-full">
<div class="title text-xl text-gray-700 px-4 py-2 mb-4 font-500">订单列表</div>
<div class="px-3">
<el-table :data="tableData" class="sm:py-2 w-full">
<el-table-column prop="date" label="下单日期" width="180" />
<el-table-column prop="name" label="产品名称" width="180" />
<el-table-column prop="address" label="订单信息" />
</el-table>
<div class="flash bg-white rounded-lg w-full">
<div class="title text-xl text-gray-700 md:px-8 p-4 md:mt-3 font-500">订单列表</div>
<div class="sm:w-screen-md w-full sm:px-4 sm:py-2">
<Order :form="form" />
</div>
</div>
</div>
@ -30,6 +25,7 @@ import type {Website} from "~/api/cms/website/model";
import type {CaptchaResult, LoginResult} from "~/api/passport/login/model";
import {getPath, navigateTo} from "#imports";
import UserMenu from "~/components/UserMenu.vue";
import Order from './components/Order.vue';
//
const runtimeConfig = useRuntimeConfig();

28
pages/user/password.vue

@ -1,30 +1,15 @@
<template>
<PageBanner title="修改密码" desc="Change Password" />
<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="login-layout m-auto sm:w-screen-xl w-full">
<div class="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 p-3 w-full">
<div class="title text-xl text-gray-700 px-4 py-2 mb-4 font-500">修改密码</div>
<div class="sm:px-4">
<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.oldPassword" placeholder="请输入旧密码" />
</el-form-item>
<el-form-item label="新密码">
<el-input v-model="form.password" type="password" placeholder="请输入新密码" />
</el-form-item>
<el-form-item label="确认密码">
<el-input v-model="form.password2" type="password" placeholder="请确认新密码" />
</el-form-item>
<el-form-item>
<el-button type="primary" size="large" @click="onSubmit">保存</el-button>
</el-form-item>
</el-form>
<div class="flash bg-white rounded-lg w-full">
<div class="title text-xl text-gray-700 md:px-8 p-4 md:mt-3 font-500">修改密码</div>
<div class="sm:w-screen-md w-full sm:px-4 sm:py-2">
<Password :form="form" />
</div>
</div>
</div>
</div>
</template>
@ -36,6 +21,7 @@ import { ref } from 'vue'
import {useServerRequest} from "~/composables/useServerRequest";
import type {ApiResult} from "~/api";
import UserMenu from "~/components/UserMenu.vue";
import Password from './components/Password.vue';
import type {CaptchaResult} from "~/api/passport/login/model";
//

Loading…
Cancel
Save