Browse Source

兼容移动端样式

master
科技小王子 7 months ago
parent
commit
6c0cdc6960
  1. 2
      components/AppFooter.vue
  2. 6
      pages/components/Flash.vue
  3. 27
      pages/detail/components/LikeArticle.vue
  4. 2
      pages/detail/index.vue
  5. 4
      pages/developer/index.vue
  6. 52
      pages/down/components/CardList.vue
  7. 85
      pages/down/index.vue

2
components/AppFooter.vue

@ -40,7 +40,7 @@
</div>
</div>
<div class="flex pt-1 w-full ">
<div class="flex pt-1 w-auto sm:hidden px-4 sm:px-0">
<el-divider><span class="text-gray-400">Footer</span></el-divider>
</div>
<div class="mx-3 sm:hidden p-5 bg-white rounded-xl">

6
pages/components/Flash.vue

@ -96,10 +96,10 @@
<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(`/passport/login`, {},0)">立即开始</el-button>
<el-button size="large" type="primary" v-if="!token" :icon="ElIconArrowRight" @click="openSpmUrl(`/developer`, {},0)">立即开始</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(`http://git.gxwebsoft.com/gxwebsoft/websoft-cms.git`, {},0,true)">下载源码</el-button>
<el-button size="large" type="warning" :icon="ElIconShoppingCart">商业版授权</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>
</div>
</div>
</div>

27
pages/detail/components/LikeArticle.vue

@ -1,5 +1,6 @@
<template>
<el-affix v-if="form" :offset="offset" @change="onAffix">
<!-- PC -->
<el-affix class="hidden-sm-and-down" v-if="form" :offset="offset" @change="onAffix">
<el-button type="text" color="gray">
<div class="text-xl text-gray-600 ">你可能还喜欢</div>
<el-icon class="el-icon--right text-gray-600" color="#999999">
@ -22,6 +23,30 @@
</el-card>
</template>
</el-affix>
<!-- H5 -->
<div class="hidden-xs-and-up p-3">
<el-button type="text" color="gray">
<div class="text-xl text-gray-600 ">你可能还喜欢</div>
<el-icon class="el-icon--right text-gray-600" color="#999999">
<ArrowRightBold/>
</el-icon>
</el-button>
<template v-for="(item,index) in list" :key="index">
<el-card shadow="hover" :body-style="{ padding: '0px' }" class="hover:bg-gray-50 cursor-pointer mt-3"
@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">
<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>
</template>
</div>
</template>
<script setup lang="ts">
import { ArrowRightBold } from '@element-plus/icons-vue'

2
pages/detail/index.vue

@ -8,7 +8,7 @@
<div class="p-6 leading-7 bg-white md:rounded-lg text-lg line-height-loose text-gray-600 content"
v-html="form?.content">
</div>
<div class="page md:gap-xl gap-xs m-auto my-[30px] md:p-0 p-4 flex justify-between">
<div class="page md:gap-xl gap-xs md:mt-4 m-auto md:p-0 p-4 flex justify-between">
<div v-if="previousArticle" class="bg-white text-gray-600 hover:shadow hover:text-gray-800 hover:font-bold rounded-lg p-4 cursor-pointer w-[50%]"
@click="openSpmUrl(`/detail`,previousArticle,previousArticle?.articleId)">
<span>上一篇{{ previousArticle?.title }}</span>

4
pages/developer/index.vue

@ -1,7 +1,7 @@
<template>
<PageBanner :layout="layout" title="入驻成为开发者" />
<div class="md:w-screen-xl m-auto relative sm:flex bg-white rounded-lg py-4 ">
<el-tabs class="px-7 bg-white">
<div class="md:w-screen-xl md:px-0 px-4 m-auto relative sm:flex bg-white rounded-lg py-4 ">
<el-tabs class="px-4 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="真实姓名">

52
pages/down/components/CardList.vue

@ -0,0 +1,52 @@
<template>
<div class="md:w-screen-xl m-auto relative sm:flex md:p-0 p-4" v-infinite-scroll="load">
<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-image :src="`${item.image}`" 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">
<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>
</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" size="large" :icon="ElIconView" @click="openSpmUrl(`/item`, item, item.productId,true)">在线体验</el-button>
<el-button type="primary" size="large" class="w-full" :icon="ElIconShoppingCart">下载源码</el-button>
</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";
import type {CmsProduct} from "~/api/cms/cmsProduct/model";
const props = withDefaults(
defineProps<{
list?: CmsProduct[];
disabled?: boolean;
}>(),
{}
);
const emit = defineEmits<{
(e: 'done'): void;
}>();
const load = () => {
if(!props.disabled){
emit('done')
}
}
</script>

85
pages/down/index.vue

@ -0,0 +1,85 @@
<template>
<PageBanner :layout="layout" :title="`开源版免费下载`" desc="`拥抱开源、坚守品质;致力于打造安全稳定高可用的WEB应用!`" />
<CardList :list="list" :disabled="disabled" @done="onSearch" />
</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 CardList from './components/CardList.vue';
import type {CmsProduct} from "~/api/cms/cmsProduct/model";
const route = useRoute();
//
const runtimeConfig = useRuntimeConfig();
const list = ref<CmsProduct[]>([]);
const page = ref<number>(1);
const resultText = ref('');
const layout = ref<any>();
const disabled = ref<boolean>(false);
//
const form = ref<Navigation>();
const website = useWebsite();
//
const where = reactive<CompanyParam>({
keywords: ''
});
const onSearch = () => {
if(!disabled.value){
page.value++;
reload(route.path);
}
}
//
const reload = async (path: string) => {
const {data: response} = await useServerRequest<ApiResult<PageResult<CmsProduct>>>('/cms/cms-product/page',{baseURL: runtimeConfig.public.apiServer, params: {
page: page.value,
limit: 8,
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}})
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",
}
});
watch(
() => route.path,
(path) => {
reload(path);
},
{ immediate: true }
);
</script>
Loading…
Cancel
Save