Browse Source

修复已知问题

master
科技小王子 7 months ago
parent
commit
8f6c9518a5
  1. 17
      components/AppHeader.vue
  2. 11
      components/PageBanner.vue
  3. 4
      composables/configState.ts
  4. 2
      nuxt.config.ts
  5. 11
      pages/article/components/CardList.vue
  6. 22
      pages/ask/components/CardList.vue
  7. 109
      pages/case/[id].vue
  8. 29
      pages/case/components/CardList.vue
  9. 113
      pages/case/components/PageBanner.vue
  10. 2
      pages/case/index.vue
  11. 14
      pages/components/Flash.vue
  12. 18
      pages/index.vue
  13. 25
      pages/market/components/PageBanner.vue
  14. 2
      pages/user/auth.vue
  15. 2
      pages/user/components/UserMenu.vue
  16. 2
      pages/user/index.vue
  17. 6
      pages/user/order.vue
  18. 2
      pages/user/password.vue

17
components/AppHeader.vue

@ -57,12 +57,19 @@
<ClientOnly>
<template v-if="token">
<el-dropdown @command="handleCommand">
<el-avatar class="cursor-pointer" :src="user?.avatar" :size="30"/>
<div class="flex items-center cursor-pointer">
<el-avatar class="cursor-pointer" :src="user?.avatar" :size="30">
<el-button circle :icon="ElIconUserFilled" color="#155FAA"></el-button>
</el-avatar>
<span class="tenant-name pl-1">{{ user?.mobile }}</span>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="user">账户中心</el-dropdown-item>
<el-dropdown-item divided command="logOut" @click="navigateTo('/user/logout')">退出
<el-dropdown-item command="user" @click="openSpmUrl(`/user`)">账户中心</el-dropdown-item>
<el-dropdown-item command="password" @click="openSpmUrl(`/user/password`)">修改密码</el-dropdown-item>
<el-dropdown-item command="auth" @click="openSpmUrl(`/user/auth`)">实名认证</el-dropdown-item>
<el-dropdown-item command="order" @click="openSpmUrl(`/user/order`)">我的订单</el-dropdown-item>
<el-dropdown-item divided command="logOut" @click="openSpmUrl('/user/logout')">退出登录
</el-dropdown-item>
</el-dropdown-menu>
</template>
@ -182,12 +189,14 @@ const reload = async () => {
if (response.value?.data) {
user.value = response.value?.data;
}
//
//
const {data: company} = await useServerRequest<ApiResult<Company>>('/system/company/profile', {baseURL: runtimeConfig.public.apiServer})
console.log(company.value,'>>>>90')
if (company.value?.data?.domain) {
sysDomain.value = company.value?.data?.domain;
user.value.tenantName = company.value?.data?.tenantName;
localStorage.setItem('SysDomain', `${company.value?.data?.domain}`);
localStorage.setItem('tenantName', `${company.value?.data?.tenantName}`)
}
}

11
components/PageBanner.vue

@ -127,13 +127,14 @@ const checkPassword = async () => {
}
}
//
const {data: nav} = await useServerRequest<ApiResult<Navigation>>('/cms/cms-navigation/getNavigationByPath', {
const reload = async () => {
//
const {data: nav} = await useServerRequest<ApiResult<Navigation>>('/cms/cms-navigation/getNavigationByPath', {
query: {
path: route.path
}
})
if (nav.value?.data) {
})
if (nav.value?.data) {
form.value = nav.value?.data;
console.log('PageBanner.vue => ', form.value)
//
@ -155,5 +156,7 @@ if (nav.value?.data) {
if (form.value?.permission === 2) {
dialogVisible.value = true;
}
}
}
reload();
</script>

4
composables/configState.ts

@ -53,7 +53,9 @@ export const useUser = () =>
phone: '',
nickname: '',
gradeId: 0,
gradeName: ''
gradeName: '',
tenantId: 0,
tenantName: '',
};
});

2
nuxt.config.ts

@ -36,7 +36,7 @@ export default defineNuxtConfig({
// apiServer: 'http://127.0.0.1:30000/api',
// 生产环境
apiServer: 'https://common-api.websoft.top/api',
apiServer: 'https://server.gxwebsoft.com/api',
globalTitle: '网宿软件',
domain: 'websoft.top'
},

11
pages/article/components/CardList.vue

@ -6,11 +6,16 @@
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer" @click="openSpmUrl(`/detail`,item,item.articleId,true)">
<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">
<div 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="line-clamp-2 font-semibold text-gray-700 dark:text-white text-base gap-1.5 text-xl">
<el-icon v-if="item.permission > 0"><Lock class="text-gray-400 pr-1"/></el-icon>
{{ item.title }}
</div>
<div class="flex items-center gap-1.5 py-2 text-gray-500 justify-between">
<div class="text-gray-500">{{ item.comments }}</div>
<div class="text-gray-500 line-clamp-3">{{ item.comments }}</div>
</div>
<div 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>
</div>
</div>
</el-card>

22
pages/ask/components/CardList.vue

@ -3,17 +3,21 @@
<el-row :gutter="24" class="flex">
<template v-for="(item,index) in list" :key="index">
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb-5 min-w-xs">
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer" @click="openSpmUrl(`/detail`,item,item.articleId,true)">
<el-image :src="item.image" fit="fill" :lazy="true" class="w-full md:h-[150px] h-[199px] cursor-pointer" />
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer"
@click="openSpmUrl(`/detail`,item,item.articleId,true)">
<el-image :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">
<div 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>
<!-- <div class="text-gray-700 dark:text-white text-base font-semibold flex items-center gap-1.5">-->
<!-- <div class="flex items-center text-xl cursor-pointer max-w-md line-clamp-2"><el-icon-->
<!-- v-if="item.permission > 0"><Lock class="text-gray-400 pr-1"/></el-icon>{{ item.title }}</div>-->
<!-- </div>-->
<div class="line-clamp-2 font-semibold text-gray-700 dark:text-white text-base gap-1.5 text-xl">
<el-icon v-if="item.permission > 0"><Lock class="text-gray-400 pr-1"/></el-icon>
{{ item.title }}
</div>
<div class="flex items-center gap-1.5 py-2 text-gray-500">
<el-avatar :src="item.avatar" :size="20" />
<el-avatar :src="item.avatar" :size="20"/>
<span>{{ item.nickname }} · {{ dayjs(item.createTime).format('MM-DD hh:mm') }}</span>
<el-icon v-if="item.permission > 0"><Lock /></el-icon>
</div>
</div>
</el-card>
@ -29,7 +33,7 @@
<script setup lang="ts">
import {openSpmUrl} from "~/utils/common";
import dayjs from "dayjs";
import { Lock } from '@element-plus/icons-vue'
import {Lock} from '@element-plus/icons-vue'
const props = withDefaults(
defineProps<{
@ -44,7 +48,7 @@ const emit = defineEmits<{
}>();
const load = () => {
if(!props.disabled){
if (!props.disabled) {
emit('done')
}
}

109
pages/case/[id].vue

@ -1,109 +0,0 @@
<template>
<!-- Banner -->
<Banner :layout="layout" />
<div class="container md:w-screen-xl m-auto">
<div class="flex flex-col" v-if="company">
<Breadcrumb :data="form" :title="`插件详情`" />
<div :class="company" class="page-main w-full bg-white rounded-lg">
<div class="p-4 leading-7">
<div class="goods-info flex">
<el-avatar :src="company.companyLogo" size="large" />
<div class="flex flex-col ml-2">
<div class="text-lg">{{ company.tenantName }}</div>
<div class="text-gray-400">{{ company.comments }}</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 空白页 -->
<div class="mt-[60px]" v-if="!company">
<el-empty description="404 页面不存在"></el-empty>
</div>
</template>
<script setup lang="ts">
import { Search } from '@element-plus/icons-vue'
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 {getIdByParam, getPath} from "~/utils/common";
import type {Company, CompanyParam} from "~/api/system/company/model";
import type {Tenant} from "~/api/system/tenant/model";
import {navigateTo} from "#imports";
import type {Website} from "~/api/cms/website/model";
import PageContainer from "~/components/PageContainer.vue";
import Breadcrumb from "~/components/Breadcrumb.vue";
const route = useRoute();
//
const runtimeConfig = useRuntimeConfig();
const list = ref<Company[]>([]);
const activeName = ref('web');
const page = ref<number>(1);
const resultText = ref('');
const layout = ref<any>();
//
const form = ref<Navigation>();
const website = useWebsite();
const company = ref<Company>()
//
const where = reactive<CompanyParam>({
keywords: ''
});
const navTo = (item: Company) => {
navigateTo(`/market/${item.companyId}`)
}
//
const reload = async () => {
const { data: nav } = await useServerRequest<ApiResult<Navigation>>('/cms/cms-navigation/getNavigationByPath',{query: {path: getPath()}})
if(nav.value?.data){
form.value = nav.value?.data;
}
//
if(form.value?.layout){
layout.value = JSON.parse(form.value?.layout)
}
useHead({
title: `搜索结果 - ${website.value.websiteName}`,
bodyAttrs: {
class: "page-container",
}
});
await handleClick()
}
//
const handleClick = async () => {
if(activeName.value == 'web'){
const {data: response} = await useServerRequest<ApiResult<Company>>(`/system/company/profileAll/${getIdByParam()}`,{baseURL: runtimeConfig.public.apiServer})
if(response.value?.data){
if (response.value.data) {
company.value = response.value.data
}
if(!response.value){
resultText.value = '暂无相关结果'
}
}
}
}
watch(
() => route,
() => {
reload();
},
{ immediate: true }
);
</script>

29
pages/case/components/CardList.vue

@ -2,20 +2,26 @@
<div class="xl:w-screen-xl sm:flex xl:p-0 p-4 m-auto relative" v-infinite-scroll="load">
<el-row :gutter="24" class="flex">
<template v-for="(item,index) in list" :key="index">
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb-5 min-w-xs">
<el-col :span="8" class="mb-5 min-w-xs">
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer" @click="openSpmUrl(`/item`,item,item.appId,true)">
<el-image :src="item.appIcon" fit="contain" :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">
<div 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>
<div class="text-gray-700 dark:text-white flex items-center gap-2">
<div class="avatar">
<el-avatar :src="item.appIcon" shape="square" :lazy="true" :size="48" />
</div>
<div class="app-name flex flex-col pb-2">
<span class="flex-1 text-xl font-bold">{{ item.appName }}</span>
<span class="text-gray-400 text-xs">{{ item.appUrl || item.appCode }}</span>
</div>
</div>
<div class="flex items-center gap-1.5 py-2 text-gray-500 justify-between">
<span class="text-gray-500">{{ item.comments }} </span>
<span class="text-gray-400 min-h-[50px] overflow-hidden">{{ item.comments }} </span>
</div>
<div class="button-group flex justify-center mt-3">
<el-button class="w-full" :icon="ElIconView" @click.stop="openSpmUrl(`/item`,item,item.appId,true)">查看详情</el-button>
<el-button v-if="item.price && item.price > 0" class="w-full" :icon="ElIconShoppingCart">购买</el-button>
<el-button v-else class="w-full" :icon="ElIconSetting" @click="openSpmUrl(`https://${item.tenantId}.websoft.top`,item,item.appId,true)">控制台</el-button>
<el-button class="w-full" @click.stop="addFavorite(item)">加入收藏</el-button>
<el-button class="w-full" @click.stop="openSpmUrl(`/item`,item,item.appId,true)">查看详情</el-button>
<el-button v-if="item.appUrl" class="w-full" @click="openSpmUrl(`https://${item.tenantCode}.websoft.top`,item,item.appId,true)">产品控制台</el-button>
<el-button v-else class="w-full" @click="openSpmUrl(`https://${item.tenantCode}.websoft.top`,item,item.appId,true)">产品控制台</el-button>
</div>
</div>
</el-card>
@ -31,10 +37,11 @@
<script setup lang="ts">
import {openSpmUrl} from "~/utils/common";
import dayjs from "dayjs";
import type {App} from "~/api/oa/app/model";
const props = withDefaults(
defineProps<{
list?: any[];
list?: App[];
disabled?: boolean;
}>(),
{}
@ -44,6 +51,10 @@ const emit = defineEmits<{
(e: 'done'): void;
}>();
const addFavorite = () => {
}
const load = () => {
if(!props.disabled){
emit('done')

113
pages/case/components/PageBanner.vue

@ -0,0 +1,113 @@
<template>
<div class="banner m-auto relative sm:flex">
<svg viewBox="0 0 1440 181" fill="none" xmlns="http://www.w3.org/2000/svg"
class="pointer-events-none absolute w-full top-[-2px] transition-all text-green-5 flex-shrink-0 opacity-100 duration-[400ms] opacity-80 -z-10">
<mask id="path-1-inside-1_414_5526" fill="white">
<path d="M0 0H1440V181H0V0Z"></path>
</mask>
<path d="M0 0H1440V181H0V0Z" fill="url(#paint0_linear_414_5526)" fill-opacity="0.22"></path>
<path d="M0 2H1440V-2H0V2Z" fill="url(#paint1_linear_414_5526)" mask="url(#path-1-inside-1_414_5526)"></path>
<defs>
<linearGradient id="paint0_linear_414_5526" x1="720" y1="0" x2="720" y2="181" gradientUnits="userSpaceOnUse">
<stop stop-color="currentColor"></stop>
<stop offset="1" stop-color="currentColor" stop-opacity="0"></stop>
</linearGradient>
<linearGradient id="paint1_linear_414_5526" x1="0" y1="90.5" x2="1440" y2="90.5" gradientUnits="userSpaceOnUse">
<stop stop-color="currentColor" stop-opacity="0"></stop>
<stop offset="0.395" stop-color="currentColor"></stop>
<stop offset="1" stop-color="currentColor" stop-opacity="0"></stop>
</linearGradient>
</defs>
</svg>
<div class="md:w-screen-xl m-auto md:p-0 px-4">
<div class="py-8 sm:py-16" _path="/templates" _dir="" _draft="false" _partial="false" _locale=""
_id="content:4.templates.yml" _type="yaml" _source="content" _file="4.templates.yml" _stem="4.templates"
_extension="yml">
<div v-if="layout">
<div class="banner w-full">
<h1
class="text-3xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-4xl lg:text-5xl">
<span v-if="layout.title">{{ layout.title }}</span>
<span v-if="layout.name">{{ layout.name }}</span>
</h1>
<div class="mt-4 text-lg text-gray-500 dark:text-gray-400 gap-8 sm:gap-y-16 grid lg:grid-cols-2 lg:items-center">
{{ layout.description }}
</div>
<div class="flex justify-between w-full items-center mt-4">
<el-space>
<div class="w-[500px] pr-10">
<el-input
v-model="where.keywords"
placeholder="搜索"
:prefix-icon="Search"
@keydown.enter="handleClick"
>
<template #append>
<el-button size="large" type="primary" @click="handleClick">搜索</el-button>
</template>
</el-input>
</div>
</el-space>
<el-space>
<el-button size="large">我的收藏</el-button>
<el-button size="large">热门推荐</el-button>
</el-space>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { Search } from '@element-plus/icons-vue'
import {useConfigInfo} from "~/composables/configState";
import {openSpmUrl} from "~/utils/common";
import type {CompanyParam} from "~/api/system/company/model";
const token = useToken();
const sysDomain = useSysDomain();
withDefaults(
defineProps<{
layout?: any;
title?: string;
desc?: string;
buyUrl?: string;
}>(),
{
title: 'Templates',
desc: 'Explore community templates to get up and running in a few seconds.',
demoUrl: '/product/website',
buyUrl: 'https://github.com/websoft9/ansible-templates'
}
);
//
const where = reactive<CompanyParam>({
keywords: ''
});
const config = useConfigInfo();
//
const handleClick = async () => {
if (where.keywords == '') {
return false;
}
if(activeName.value == 'web'){
const {data: response} = await useServerRequest<ApiResult<PageResult<Website>>>('/cms/cms-website/page',{baseURL: runtimeConfig.public.apiServer, params: {
page: page.value, keywords: where.keywords
}})
if(response.value?.data){
if (response.value?.data.list) {
websites.value = response.value?.data.list;
}
if(response.value.data.count == 0){
resultText.value = '暂无相关结果'
}
}
}
}
</script>

2
pages/case/index.vue

@ -9,6 +9,7 @@ import {useWebsite} from "~/composables/configState";
import type {Navigation} from "~/api/cms/navigation/model";
import type {CompanyParam} from "~/api/system/company/model";
import CardList from './components/CardList.vue';
import PageBanner from "./components/PageBanner.vue";
import type {App} from "~/api/oa/app/model";
const route = useRoute();
@ -47,6 +48,7 @@ const reload = async (path: string) => {
const {data: response} = await useServerRequest<ApiResult<PageResult<App>>>('/oa/oa-app/page',{baseURL: runtimeConfig.public.apiServer, params: {
page: page.value,
limit: 8,
showCase: 1,
keywords: where.keywords
}})
if(response.value?.data){

14
pages/components/Flash.vue

@ -88,18 +88,20 @@
<el-tag type="warning" round @click="openSpmUrl(`/detail`, {},730,true)">v3.0 版本发布
</el-tag>
</div>
<h1 class="text-5xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-7xl"> 现代Web应用 <br><span
class="text-primary block lg:inline-block text-green-500">Vue 框架</span></h1>
<div class="mt-6 text-lg tracking-tight text-gray-600 dark:text-gray-300"> WebSoft是一个基于Vue3和Nuxt构建的web框架使web开发更直观而强大<br>
自信地创建高性能和生产级的全栈web应用程序和网站
<h1 class="text-5xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-7xl">
<span>构建现代Web应用</span><br/>
<span class="text-primary block lg:inline-block text-green-500">Vue 框架</span>
</h1>
<div class="mt-6 text-lg tracking-tight text-gray-600 dark:text-gray-300"> WEBSOFT是一个基于Vue和Nuxt构建的web框架使web开发更直观而强大<br>
自信地创建高性能和生产级的全栈web应用程序和网站
</div>
<div class="mt-10 flex flex-wrap gap-x-6 gap-y-3 justify-center">
<div class="flex flex-col gap-4">
<div class="flex items-center">
<el-button size="large" type="primary" v-if="!token" :icon="ElIconArrowRight" @click="openSpmUrl(`/developer`, {},0)">立即开始</el-button>
<el-button size="large" type="primary" v-if="!token" :icon="ElIconArrowRight" @click="openSpmUrl(`/passport/login`)">立即开始</el-button>
<el-button size="large" type="primary" v-else :icon="ElIconArrowRight" @click="loginAdminByToken">进入控制台</el-button>
<el-button size="large" type="success" :icon="ElIconDownload" @click="openSpmUrl(`/down`, {},0,true)">源码下载</el-button>
<el-button size="large" type="warning" :icon="ElIconShoppingCart">购买授权</el-button>
<el-button size="large" type="warning" :icon="ElIconShoppingCart" @click="openSpmUrl(`/item`, {},124)">购买授权</el-button>
</div>
</div>
</div>

18
pages/index.vue

@ -10,21 +10,15 @@
</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";
import Flash from './components/Flash.vue';
import ProductList from "./components/ProductList.vue";
import ArticleList from './components/ArticleList.vue';
//
const route = useRoute();
const website = useWebsite();
const layout = ref<any>();
const config = useConfigInfo();
const token = useToken();
const form = useForm();
const breadcrumb = ref<BreadcrumbItem>();
@ -32,16 +26,6 @@ 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)
@ -57,7 +41,7 @@ const reload = async () => {
// seo
useHead({
title: `现代Web应用开发(Vue)框架 · WEBSOFT`,
title: `构建现代WEB应用 · WEBSOFT`,
meta: [{name: form.value.design?.keywords, content: form.value.design?.description}],
bodyAttrs: {
class: "page-container",

25
pages/market/components/PageBanner.vue

@ -36,25 +36,9 @@
</div>
<div class="flex justify-between w-full items-center mt-4">
<el-space>
<el-button
:icon="ElIconView"
size="large"
v-if="layout.demoUrl"
@click="openSpmUrl(layout.demoUrl)"
>
演示地址
</el-button>
<el-button
v-if="token && layout.buyUrl"
size="large"
@click="openSpmUrl(`https://${sysDomain}/token-login`)"
>
创建应用
</el-button>
<div class="w-[500px]">
<el-input
v-model="where.keywords"
class="sm:w-[360px] w-full"
size="large"
placeholder="搜索"
:prefix-icon="Search"
@keydown.enter="handleClick"
@ -63,6 +47,13 @@
<el-button size="large" type="primary" @click="handleClick">搜索</el-button>
</template>
</el-input>
</div>
<el-button
size="large"
@click="openSpmUrl(`https://${sysDomain}/token-login`)"
>
创建应用
</el-button>
</el-space>
</div>
</div>

2
pages/user/auth.vue

@ -18,7 +18,7 @@ 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";
import UserMenu from "./components/UserMenu.vue";
import Auth from './components/Auth.vue';
//

2
components/UserMenu.vue → pages/user/components/UserMenu.vue

@ -45,7 +45,7 @@ const activities = [
path: '/user/auth'
},
{
name: '订单列表',
name: '我的订单',
path: '/user/order'
},
{

2
pages/user/index.vue

@ -20,7 +20,7 @@ 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 UserMenu from "./components/UserMenu.vue";
import Base from './components/Base.vue';
//

6
pages/user/order.vue

@ -18,13 +18,9 @@ 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 {getCaptcha} from "~/api/passport/login";
import {useServerRequest} from "~/composables/useServerRequest";
import type {ApiResult} from "~/api";
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 UserMenu from "./components/UserMenu.vue";
import Order from './components/Order.vue';
//

2
pages/user/password.vue

@ -20,7 +20,7 @@ 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 UserMenu from "./components/UserMenu.vue";
import Password from './components/Password.vue';
import type {CaptchaResult} from "~/api/passport/login/model";

Loading…
Cancel
Save