Merge branch 'main' of https://github.com/TOPVERSE/TOPVERSE_Official
This commit is contained in:
commit
dcf2660672
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"extends": [
|
||||
"@antfu",
|
||||
"@unocss"
|
||||
],
|
||||
"rules": {
|
||||
"@typescript-eslint/ban-ts-comment":"off"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
name: Gitea Actions Demo
|
||||
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
Explore-Gitea-Actions:
|
||||
runs-on: linux
|
||||
# container: node:21
|
||||
# container:
|
||||
# image: ghcr.nju.edu.cn/catthehacker/ubuntu:act-latest
|
||||
# volumes:
|
||||
# - /run/docker.sock:/run/docker.sock
|
||||
# env:
|
||||
# DOCKER_ORG: gitea
|
||||
# DOCKER_LATEST: latest
|
||||
steps:
|
||||
# - run: echo "testseetsetsetstse"
|
||||
# - name: To Main
|
||||
# run:
|
||||
# - name: Git
|
||||
# run: git clone http://www.topverse.world:3000/huxin/TOPVERSE_Official /opt/workspace/website
|
||||
- name: Install
|
||||
run: cd /opt/workspace/TOPVERSE_Official && ./deploy.sh
|
||||
# - name: Build
|
||||
# run: cd /opt/workspace/TOPVERSE_Official && pnpm build
|
||||
# - name: Build
|
||||
# run:
|
||||
|
||||
# - name: Deploy
|
||||
# run: |
|
||||
|
||||
# - name: Checkout
|
||||
# uses: actions/checkout@v4
|
||||
# with:
|
||||
# fetch-depth: 0 # all history for all branches and tags
|
||||
|
||||
# - name: Set up QEMU
|
||||
# uses: docker/setup-qemu-action@v3
|
||||
|
||||
# - name: Set up Docker BuildX
|
||||
# uses: docker/setup-buildx-action@v3
|
||||
|
||||
# - name: Login to DockerHub
|
||||
# uses: docker/login-action@v3
|
||||
# with:
|
||||
# username: ${{ secrets.DOCKER_USERNAME }}
|
||||
# password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
# - name: Get Meta
|
||||
# id: meta
|
||||
# run: |
|
||||
# echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}') >> $GITHUB_OUTPUT
|
||||
# echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
|
||||
|
||||
# - name: Build and push
|
||||
# uses: docker/build-push-action@v5
|
||||
# with:
|
||||
# context: .
|
||||
# file: ./Dockerfile
|
||||
# platforms: |
|
||||
# linux/amd64
|
||||
# linux/arm64
|
||||
# push: true
|
||||
# tags: |
|
||||
# ${{ env.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ env.DOCKER_LATEST }}
|
||||
|
||||
# - run: docker build -t website-v1:latest "."
|
||||
# - run: docker rm -f website-v1 || true
|
||||
# - run: docker run -d -p 19555:80 --restart=unless-stopped --name website-v1 website-v1
|
||||
# - run: docker rmi $(docker images -f "dangling=true" -q) || true
|
||||
# - run: docker ps
|
|
@ -7,5 +7,54 @@
|
|||
"*.css": "postcss"
|
||||
},
|
||||
"editor.formatOnSave": false,
|
||||
"typescript.tsdk": "node_modules/typescript/lib"
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"i18n-ally.localesPaths": [
|
||||
"locales"
|
||||
],
|
||||
// Enable the ESlint flat config support
|
||||
// (remove this if your ESLint extension above v3.0.5)
|
||||
"eslint.experimental.useFlatConfig": true,
|
||||
|
||||
// Disable the default formatter, use eslint instead
|
||||
"prettier.enable": false,
|
||||
"editor.formatOnSave": false,
|
||||
|
||||
// Auto fix
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.organizeImports": "never"
|
||||
},
|
||||
|
||||
// Silent the stylistic rules in you IDE, but still auto fix them
|
||||
"eslint.rules.customizations": [
|
||||
{ "rule": "style/*", "severity": "off" },
|
||||
{ "rule": "format/*", "severity": "off" },
|
||||
{ "rule": "*-indent", "severity": "off" },
|
||||
{ "rule": "*-spacing", "severity": "off" },
|
||||
{ "rule": "*-spaces", "severity": "off" },
|
||||
{ "rule": "*-order", "severity": "off" },
|
||||
{ "rule": "*-dangle", "severity": "off" },
|
||||
{ "rule": "*-newline", "severity": "off" },
|
||||
{ "rule": "*quotes", "severity": "off" },
|
||||
{ "rule": "*semi", "severity": "off" }
|
||||
],
|
||||
|
||||
// Enable eslint for all supported languages
|
||||
"eslint.validate": [
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"typescript",
|
||||
"typescriptreact",
|
||||
"vue",
|
||||
"html",
|
||||
"markdown",
|
||||
"json",
|
||||
"jsonc",
|
||||
"yaml",
|
||||
"toml",
|
||||
"xml",
|
||||
"gql",
|
||||
"graphql",
|
||||
"astro"
|
||||
]
|
||||
}
|
||||
|
|
41
Dockerfile
41
Dockerfile
|
@ -1,20 +1,37 @@
|
|||
FROM node:lts-alpine3.17
|
||||
FROM node:21 AS build
|
||||
# 容器内的目录,通常我们会使用 app 目录
|
||||
WORKDIR /app
|
||||
# 拷贝项目文件到容器/app下
|
||||
COPY . .
|
||||
|
||||
RUN mkdir -p /web
|
||||
# ARG env_file
|
||||
|
||||
COPY . /web
|
||||
|
||||
WORKDIR /web
|
||||
|
||||
RUN npm config set registry https://registry.npm.taobao.org
|
||||
RUN npm config set registry https://registry.npmmirror.com
|
||||
RUN npm install -g pnpm
|
||||
RUN pnpm config set registry https://registry.npmmirror.com
|
||||
# 下载编译
|
||||
RUN pnpm i
|
||||
RUN pnpm build
|
||||
# RUN rm -rf node_module
|
||||
# RUN pnpm build
|
||||
RUN pnpm generate
|
||||
# RUN yarn config set registry https://registry.npmmirror.com
|
||||
# RUN yarn
|
||||
# RUN yarn build
|
||||
# RUN yarn generate
|
||||
|
||||
ENV HOST 0.0.0.0
|
||||
ENV PORT 3000
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
CMD ["pnpm", "start"]
|
||||
# nginx默认暴露80端口
|
||||
FROM nginx
|
||||
|
||||
# 更换工作目录到nginx服务目录下
|
||||
WORKDIR /usr/share/nginx/html
|
||||
|
||||
# 删除服务下可能存在的无用项目
|
||||
RUN rm -rf ./*
|
||||
|
||||
# 复制自定义的 Nginx 配置文件
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
# 拷贝打包的文件
|
||||
COPY --from=build /app/dist .
|
||||
|
|
|
@ -6,7 +6,7 @@ const footer = useFoot()
|
|||
|
||||
<template>
|
||||
<!-- <Divider /> -->
|
||||
<div class="grid-row grid-cols-2 p-20 pt-30 lg:(grid-cols-3) md:(px-30) xl:px-60">
|
||||
<div class="grid grid-cols-2 p-20 pt-30 lg:(grid-cols-3) md:(px-30) xl:px-60">
|
||||
<div
|
||||
v-for="(col, i) in footer.links"
|
||||
:key="i"
|
||||
|
|
|
@ -4,7 +4,7 @@ $defineProps<{
|
|||
topic: string
|
||||
description?: string
|
||||
href: string
|
||||
imgClass: string
|
||||
imgClass?: string
|
||||
}>()
|
||||
</script>
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ const flag: any = {
|
|||
{{ $t(nav.title) }}
|
||||
</div>
|
||||
|
||||
<div class="grid-row gap-1 sm:grid-cols-2">
|
||||
<div class="grid gap-1 sm:grid-cols-2">
|
||||
<LocaleNuxtLink v-for="(item, index) in nav.child" :key="index" :href="item.href" class="w-full overflow-hidden rounded py-1 hover:(bg-primary/20)" active-class="bg-primary/20">
|
||||
<AListItem
|
||||
class="[--a-spacing:1] max-w-300px"
|
||||
|
|
|
@ -21,7 +21,7 @@ const colors = [
|
|||
<template>
|
||||
<Section>
|
||||
<Typography :topic="$t(topic)" />
|
||||
<div class="grid-row gap-10 pt-20 md:(grid-cols-2)" :class="`lg:grid-cols-${content.length}`">
|
||||
<div class="grid gap-10 pt-20 md:(grid-cols-2)" :class="`lg:grid-cols-${content.length}`">
|
||||
<div
|
||||
v-for="(col, i) in content"
|
||||
:key="i"
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
export function useCount() {
|
||||
const count = useState('count', () => Math.round(Math.random() * 20))
|
||||
|
||||
function inc() {
|
||||
count.value += 1
|
||||
}
|
||||
function dec() {
|
||||
count.value -= 1
|
||||
}
|
||||
|
||||
return {
|
||||
count,
|
||||
inc,
|
||||
dec,
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
import { acceptHMRUpdate, defineStore } from 'pinia'
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
/**
|
||||
* Current named of the user.
|
||||
*/
|
||||
const savedName = ref('')
|
||||
const previousNames = ref(new Set<string>())
|
||||
|
||||
const usedNames = computed(() => Array.from(previousNames.value))
|
||||
const otherNames = computed(() => usedNames.value.filter(name => name !== savedName.value))
|
||||
|
||||
/**
|
||||
* Changes the current name of the user and saves the one that was used
|
||||
* before.
|
||||
*
|
||||
* @param name - new name to set
|
||||
*/
|
||||
function setNewName(name: string) {
|
||||
if (savedName.value)
|
||||
previousNames.value.add(savedName.value)
|
||||
|
||||
savedName.value = name
|
||||
}
|
||||
|
||||
return {
|
||||
setNewName,
|
||||
otherNames,
|
||||
savedName,
|
||||
}
|
||||
})
|
||||
|
||||
if (import.meta.hot)
|
||||
import.meta.hot.accept(acceptHMRUpdate(useUserStore, import.meta.hot))
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
|
||||
|
||||
|
||||
docker build -t website-v1:latest "."
|
||||
docker rm -f website-v1 || true
|
||||
docker run -d -p 19555:80 --restart=unless-stopped --name website-v1 website-v1
|
||||
docker rmi $(docker images -f "dangling=true" -q) || true
|
||||
docker ps
|
|
@ -0,0 +1,6 @@
|
|||
import antfu from '@antfu/eslint-config'
|
||||
|
||||
export default antfu({
|
||||
unocss: true,
|
||||
vue: true,
|
||||
})
|
|
@ -0,0 +1,64 @@
|
|||
# 设置运行 Nginx 的用户
|
||||
user nginx;
|
||||
|
||||
# 启动的 worker 进程数量,一般设置为 auto,Nginx 会自动根据 CPU 数量设置合适的数量
|
||||
worker_processes auto;
|
||||
|
||||
# 错误日志路径和级别
|
||||
error_log /var/log/nginx/error.log warn;
|
||||
|
||||
# PID 文件路径
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
# 定义全局事件
|
||||
events {
|
||||
# 最大连接数
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
# 定义 HTTP 服务器
|
||||
http {
|
||||
# 包含 MIME 类型的文件
|
||||
include /etc/nginx/mime.types;
|
||||
# 默认 MIME 类型
|
||||
default_type application/octet-stream;
|
||||
|
||||
# 自定义的 Nginx 配置
|
||||
server {
|
||||
# 监听的端口
|
||||
listen 80;
|
||||
# 服务器名称
|
||||
server_name localhost;
|
||||
|
||||
location / {
|
||||
# 网站根目录,此处使用容器内的路径
|
||||
root /usr/share/nginx/html;
|
||||
# 默认首页
|
||||
index index.html;
|
||||
# 尝试从磁盘找到请求的文件,如果不存在则跳转到 index.html
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# location ^~ /api/ {
|
||||
# proxy_set_header Host $host;
|
||||
# proxy_set_header X-Real-IP $remote_addr;
|
||||
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# proxy_set_header X-NginX-Proxy true;
|
||||
# #下面两个必须设置,请求头设置为ws请求方式
|
||||
# proxy_set_header Upgrade $http_upgrade;
|
||||
# proxy_set_header Connection "upgrade";
|
||||
# proxy_pass http://192.168.41.101:28003/;
|
||||
# }
|
||||
|
||||
# location /api/login/ {
|
||||
# # rewrite ^/wsUrl/(.*)$ /$1 break; #拦截标识去除
|
||||
# proxy_pass http://192.168.41.101:28003/; #这里是http不是ws,不用怀疑,代理的ip和port写ws访问的实际地址
|
||||
# proxy_http_version 1.1; #这里必须使用http 1.1
|
||||
# #下面两个必须设置,请求头设置为ws请求方式
|
||||
# proxy_set_header Upgrade $http_upgrade;
|
||||
# proxy_set_header Connection "upgrade";
|
||||
# }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -9,17 +9,11 @@ export default defineNuxtConfig({
|
|||
modules: [
|
||||
'@vueuse/nuxt',
|
||||
'@anu-vue/nuxt',
|
||||
'@unocss/nuxt',
|
||||
'@pinia/nuxt',
|
||||
'@nuxtjs/i18n',
|
||||
// '@nuxtjs/strapi',
|
||||
'@unocss/nuxt',
|
||||
'@nuxtjs/i18n',
|
||||
'@vue-macros/nuxt',
|
||||
'@nuxt/content',
|
||||
'@nuxtjs/color-mode',
|
||||
'@vite-pwa/nuxt',
|
||||
// '@aceforth/nuxt-optimized-images',
|
||||
// '@vueuse/components',
|
||||
// '@nuxt/image',
|
||||
'@nuxtjs/color-mode',
|
||||
'@nuxt/devtools',
|
||||
],
|
||||
|
||||
|
@ -28,19 +22,19 @@ export default defineNuxtConfig({
|
|||
// clientDB: true
|
||||
// }
|
||||
// },
|
||||
image: {
|
||||
// provider:"static"
|
||||
},
|
||||
// image: {
|
||||
// // provider:"static"
|
||||
// },
|
||||
// optimizedImages: {
|
||||
// optimizeImages: true
|
||||
// },
|
||||
experimental: {
|
||||
// when using generate, payload js assets included in sw precache manifest
|
||||
// but missing on offline, disabling extraction it until fixed
|
||||
payloadExtraction: false,
|
||||
inlineSSRStyles: false,
|
||||
renderJsonPayloads: true,
|
||||
},
|
||||
// experimental: {
|
||||
// // when using generate, payload js assets included in sw precache manifest
|
||||
// // but missing on offline, disabling extraction it until fixed
|
||||
// payloadExtraction: false,
|
||||
// inlineSSRStyles: false,
|
||||
// renderJsonPayloads: true,
|
||||
// },
|
||||
|
||||
components: [{
|
||||
path: '~/components',
|
||||
|
@ -160,7 +154,7 @@ export default defineNuxtConfig({
|
|||
},
|
||||
},
|
||||
|
||||
pwa,
|
||||
// pwa,
|
||||
|
||||
devtools: {
|
||||
enabled: true,
|
||||
|
|
67
package.json
67
package.json
|
@ -1,51 +1,50 @@
|
|||
{
|
||||
"private": true,
|
||||
"packageManager": "pnpm@8.2.0",
|
||||
"scripts": {
|
||||
"build": "nuxi build",
|
||||
"dev": "nuxi dev",
|
||||
"dev:pwa": "VITE_PLUGIN_PWA=true nuxi dev",
|
||||
"start": "node .output/server/index.mjs",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"lint": "eslint .",
|
||||
"postinstall": "nuxi prepare",
|
||||
"generate": "nuxi generate",
|
||||
"start:generate": "serve .output/public"
|
||||
"generate": "nuxi generate"
|
||||
},
|
||||
"type": "module",
|
||||
"main": "./nuxt.config.ts",
|
||||
"dependencies": {
|
||||
"@anu-vue/nuxt": "^0.13.1",
|
||||
"@antfu/eslint-config": "^2.18.1",
|
||||
"@anu-vue/nuxt": "^0.15.2",
|
||||
"@iconify-json/akar-icons": "^1.1.24",
|
||||
"@iconify-json/carbon": "^1.1.16",
|
||||
"@iconify-json/file-icons": "^1.1.8",
|
||||
"@iconify-json/heroicons-solid": "^1.1.11",
|
||||
"@iconify-json/icon-park-solid": "^1.1.14",
|
||||
"@iconify-json/material-symbols": "^1.1.80",
|
||||
"@iconify-json/solar": "^1.1.9",
|
||||
"@iconify-json/twemoji": "^1.1.11",
|
||||
"@jiaminghi/color": "^1.1.3",
|
||||
"@vueuse/components": "^10.1.2",
|
||||
"@nuxt/content": "^2.11.0",
|
||||
"@nuxt/image": "1.3.0",
|
||||
"@nuxtjs/color-mode": "^3.4.0",
|
||||
"@nuxtjs/i18n": "8.3.1",
|
||||
"@unocss/nuxt": "0.60.3",
|
||||
"@vue-macros/nuxt": "^1.9.33",
|
||||
"@vueuse/components": "^10.4.1",
|
||||
"@vueuse/integrations": "^10.4.1",
|
||||
"@vueuse/nuxt": "^10.4.1",
|
||||
"icons": "link:@iconify-json/ri/icons",
|
||||
"lingo3d-vue": "1.0.118",
|
||||
"sass": "^1.62.1",
|
||||
"swiper": "^9.2.4",
|
||||
"nuxt": "3.11.2",
|
||||
"swiper": "^11.1.3",
|
||||
"typescript": "^5.4.5",
|
||||
"unity-webgl": "^3.4.2",
|
||||
"vue-tsc": "^1.2.0",
|
||||
"unocss-preset-extra": "^0.5.3",
|
||||
"unocss-preset-scrollbar": "^0.3.1",
|
||||
"unocss-preset-scrollbar-hide": "^1.0.1",
|
||||
"vue": "^3.4.27",
|
||||
"vue-unity-webgl": "^1.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^0.38.4",
|
||||
"@iconify-json/carbon": "^1.1.16",
|
||||
"@iconify-json/twemoji": "^1.1.11",
|
||||
"@nuxt/content": "^2.6.0",
|
||||
"@nuxt/devtools": "^0.4.0",
|
||||
"@nuxtjs/color-mode": "^3.2.0",
|
||||
"@nuxtjs/i18n": "8.0.0-beta.11",
|
||||
"@nuxtjs/strapi": "^1.9.1",
|
||||
"@pinia/nuxt": "^0.4.8",
|
||||
"@unocss/eslint-config": "0.52.4",
|
||||
"@unocss/nuxt": "0.52.4",
|
||||
"@vite-pwa/nuxt": "^0.0.7",
|
||||
"@vue-macros/nuxt": "^1.2.8",
|
||||
"@vueuse/nuxt": "^9.13.0",
|
||||
"consola": "^3.0.1",
|
||||
"eslint": "^8.38.0",
|
||||
"nuxt": "^3.4.0",
|
||||
"pinia": "^2.0.34",
|
||||
"serve": "14.2.0",
|
||||
"typescript": "^4.9.5",
|
||||
"unocss-preset-extra": "^0.5.2",
|
||||
"unocss-preset-scrollbar": "^0.2.1",
|
||||
"unocss-preset-scrollbar-hide": "^1.0.1"
|
||||
"@unocss/eslint-plugin": "^0.60.2",
|
||||
"eslint": "9.2.0",
|
||||
"sass": "^1.77.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ const status = [
|
|||
> -->
|
||||
|
||||
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
|
||||
<div class="grid grid-rows-2 gap-y-3">
|
||||
<div class="grid grids-2 gap-y-3">
|
||||
<ACheckbox
|
||||
v-for="tag in tags"
|
||||
:key="tag.value"
|
||||
|
@ -88,7 +88,7 @@ const status = [
|
|||
> -->
|
||||
|
||||
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
|
||||
<div class="grid grid-rows-2 gap-y-3">
|
||||
<div class="grid grids-2 gap-y-3">
|
||||
<ACheckbox
|
||||
v-for="tag in tags"
|
||||
:key="tag.value"
|
||||
|
@ -115,7 +115,7 @@ const status = [
|
|||
</ACard>
|
||||
</div>
|
||||
|
||||
<div class="3xl:grid-cols-4 grid-row w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<div class="3xl:grid-cols-4 gap-4 grid w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<!-- 👉 2nd card -->
|
||||
<Card
|
||||
v-for="(item, i) in list"
|
||||
|
|
|
@ -23,7 +23,7 @@ const { data } = await useAsyncData(`content-${path}`, () => {
|
|||
> -->
|
||||
|
||||
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
|
||||
<div class="grid grid-rows-2 gap-y-3">
|
||||
<div class="grid grids-2 gap-y-3">
|
||||
<ACheckbox
|
||||
v-for="tag in tags"
|
||||
:key="tag.value"
|
||||
|
@ -64,7 +64,7 @@ const { data } = await useAsyncData(`content-${path}`, () => {
|
|||
> -->
|
||||
|
||||
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
|
||||
<div class="grid grid-rows-2 gap-y-3">
|
||||
<div class="grid grids-2 gap-y-3">
|
||||
<ACheckbox
|
||||
v-for="tag in tags"
|
||||
:key="tag.value"
|
||||
|
|
|
@ -91,7 +91,7 @@ const status = [
|
|||
</ACard>
|
||||
</div>
|
||||
|
||||
<div class="3xl:grid-cols-4 grid-row w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<div class="3xl:grid-cols-4 grid w-full gap-4 pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<!-- 👉 2nd card -->
|
||||
<Card
|
||||
v-for="(item, i) in list"
|
||||
|
|
|
@ -23,7 +23,7 @@ const { data } = await useAsyncData(`content-${path}`, () => {
|
|||
> -->
|
||||
|
||||
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
|
||||
<div class="grid grid-rows-2 gap-y-3">
|
||||
<div class="grid grids-2 gap-y-3">
|
||||
<ACheckbox
|
||||
v-for="tag in tags"
|
||||
:key="tag.value"
|
||||
|
@ -64,7 +64,7 @@ const { data } = await useAsyncData(`content-${path}`, () => {
|
|||
> -->
|
||||
|
||||
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
|
||||
<div class="grid grid-rows-2 gap-y-3">
|
||||
<div class="grid grids-2 gap-y-3">
|
||||
<ACheckbox
|
||||
v-for="tag in tags"
|
||||
:key="tag.value"
|
||||
|
|
|
@ -62,7 +62,7 @@ const sectionNine = useSectionNine()
|
|||
|
||||
<div ref="sectionThreeEl">
|
||||
<div
|
||||
class="grid-row py-10 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentPrimary.length}`"
|
||||
class="grid py-10 gap-4 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentPrimary.length}`"
|
||||
>
|
||||
<ImageHover
|
||||
v-for="(content, i) in sectionThree.contentPrimary"
|
||||
|
@ -74,7 +74,7 @@ const sectionNine = useSectionNine()
|
|||
}]"
|
||||
/>
|
||||
</div>
|
||||
<div class="grid-row pb-10 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentSecondary.length}`">
|
||||
<div class="grid gap-4 pb-10 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentSecondary.length}`">
|
||||
<ImageHover
|
||||
v-for="(content, i) in sectionThree.contentSecondary"
|
||||
:key="i"
|
||||
|
@ -85,7 +85,7 @@ const sectionNine = useSectionNine()
|
|||
}]"
|
||||
/>
|
||||
</div>
|
||||
<div class="grid-row pb-20 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentThird.length}`">
|
||||
<div class="grid gap-4 pb-20 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentThird.length}`">
|
||||
<ImageHover
|
||||
v-for="(content, i) in sectionThree.contentThird"
|
||||
:key="i"
|
||||
|
@ -115,7 +115,7 @@ const sectionNine = useSectionNine()
|
|||
<!-- Section Five -->
|
||||
<Section class="bg-gradient-blue text-white">
|
||||
<Typography :title=" $t(sectionFive.title) " :topic=" $t(sectionFive.topic) " :description=" $t(sectionFive.description) " class="pb-20 text-start" />
|
||||
<div class="grid-row gap-26 pb-10 lg:(grid-cols-3) md:(grid-cols-2)">
|
||||
<div class="grid gap-26 pb-10 lg:(grid-cols-3) md:(grid-cols-2)">
|
||||
<div
|
||||
v-for="(content, i) in sectionFive.content"
|
||||
:key="i"
|
||||
|
@ -171,7 +171,7 @@ const sectionNine = useSectionNine()
|
|||
|
||||
<!-- Section Eight -->
|
||||
<Section>
|
||||
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div
|
||||
v-for="(content, i) in sectionEight.content"
|
||||
:key="i"
|
||||
|
@ -187,7 +187,7 @@ const sectionNine = useSectionNine()
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="grid-row rounded-lg from-violet-500 to-fuchsia-500 bg-gradient-to-r p-5 text-white shadow-lg lg:(grid-cols-2)">
|
||||
<!-- <div class="grid rounded-lg from-violet-500 to-fuchsia-500 bg-gradient-to-r p-5 text-white shadow-lg lg:(grid-cols-2)">
|
||||
<ATypography
|
||||
class="text-white"
|
||||
title="Awesome mobile"
|
||||
|
|
|
@ -33,7 +33,7 @@ const list = computed(() => {
|
|||
> -->
|
||||
|
||||
<div class="a-card-body a-card-spacer">
|
||||
<div class="grid grid-rows-2 gap-y-3">
|
||||
<div class="grid grids-2 gap-y-3">
|
||||
<ACheckbox
|
||||
v-for="tag in tags"
|
||||
:key="tag.value"
|
||||
|
@ -63,7 +63,7 @@ const list = computed(() => {
|
|||
> -->
|
||||
|
||||
<div class="a-card-body a-card-spacer">
|
||||
<div class="grid grid-rows-2 gap-y-3">
|
||||
<div class="grid grids-2 gap-y-3">
|
||||
<ACheckbox
|
||||
v-for="tag in tags"
|
||||
:key="tag.value"
|
||||
|
@ -78,7 +78,7 @@ const list = computed(() => {
|
|||
</ACard>
|
||||
</div>
|
||||
|
||||
<div class="3xl:grid-cols-4 grid-row w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<div class="3xl:grid-cols-4 grid gap-4 w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<!-- 👉 2nd card -->
|
||||
<Card
|
||||
v-for="(item, i) in list"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<NuxtPage />
|
||||
|
||||
<!-- <Section>
|
||||
<div class="grid-row rounded-lg from-violet-500 to-fuchsia-500 bg-gradient-to-r p-5 text-white shadow-lg lg:(grid-cols-2)">
|
||||
<div class="grid rounded-lg from-violet-500 to-fuchsia-500 bg-gradient-to-r p-5 text-white shadow-lg lg:(grid-cols-2)">
|
||||
<ATypography
|
||||
class="text-white"
|
||||
title="联系我们"
|
||||
|
|
|
@ -9,7 +9,7 @@ const content = useAIGC()
|
|||
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
||||
|
||||
<Section>
|
||||
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div
|
||||
v-for="(item, i) in content.feature.content"
|
||||
:key="i"
|
||||
|
@ -41,7 +41,7 @@ const content = useAIGC()
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="3xl:grid-cols-4 grid-row flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<div class="3xl:grid-cols-4 grid flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<!-- 👉 2nd card -->
|
||||
<Card
|
||||
v-for="(item, i) in content.solutions.content"
|
||||
|
|
|
@ -9,7 +9,7 @@ const content = useDigitalTwin()
|
|||
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
||||
|
||||
<Section>
|
||||
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div
|
||||
v-for="(item, i) in content.feature.content"
|
||||
:key="i"
|
||||
|
@ -41,7 +41,7 @@ const content = useDigitalTwin()
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="3xl:grid-cols-4 grid-row flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<div class="3xl:grid-cols-4 grid flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<!-- 👉 2nd card -->
|
||||
<Card
|
||||
v-for="(item, i) in content.solutions.content"
|
||||
|
|
|
@ -9,7 +9,7 @@ const content = useMixedReality()
|
|||
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
||||
|
||||
<Section>
|
||||
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div
|
||||
v-for="(item, i) in content.feature.content"
|
||||
:key="i"
|
||||
|
@ -41,7 +41,7 @@ const content = useMixedReality()
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="3xl:grid-cols-4 grid-row flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<div class="3xl:grid-cols-4 grid flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<!-- 👉 2nd card -->
|
||||
<Card
|
||||
v-for="(item, i) in content.solutions.content"
|
||||
|
|
|
@ -9,7 +9,7 @@ const content = useWeb3()
|
|||
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
||||
|
||||
<Section>
|
||||
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
|
||||
<div
|
||||
v-for="(item, i) in content.feature.content"
|
||||
:key="i"
|
||||
|
@ -41,7 +41,7 @@ const content = useWeb3()
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="3xl:grid-cols-4 grid-row flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<div class="3xl:grid-cols-4 grid flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
|
||||
<!-- 👉 2nd card -->
|
||||
<Card
|
||||
v-for="(item, i) in content.solutions.content"
|
||||
|
|
|
@ -10,7 +10,7 @@ import {
|
|||
transformerDirectives,
|
||||
transformerVariantGroup,
|
||||
} from 'unocss'
|
||||
import { presetAnu, presetIconExtraProperties } from 'anu-vue'
|
||||
import { presetAnu, presetIconExtraProperties } from 'anu-vue'
|
||||
import { presetExtra } from 'unocss-preset-extra'
|
||||
import { presetScrollbar } from 'unocss-preset-scrollbar'
|
||||
import { presetScrollbarHide } from 'unocss-preset-scrollbar-hide'
|
||||
|
@ -104,10 +104,10 @@ export default defineConfig({
|
|||
presetAnu(),
|
||||
// default theme preset
|
||||
presetThemeDefault({
|
||||
shortcutOverrides: {
|
||||
'a-btn': 'ring-3 ring-primary',
|
||||
'a-base-input-root': 'ring-3',
|
||||
},
|
||||
// shortcutOverrides: {
|
||||
// 'a-btn': 'ring-3 ring-primary',
|
||||
// 'a-base-input-root': 'ring-3',
|
||||
// },
|
||||
}),
|
||||
presetUno(),
|
||||
presetMini(),
|
||||
|
@ -115,7 +115,7 @@ export default defineConfig({
|
|||
presetAttributify(),
|
||||
presetIcons({
|
||||
scale: 1.2,
|
||||
cdn: 'https://esm.sh/',
|
||||
// cdn: 'https://esm.sh/',
|
||||
// cdn:'https://cdn.skypack.dev/',
|
||||
// cdn:'https://api.iconify.design/',
|
||||
extraProperties: presetIconExtraProperties,
|
||||
|
|
Loading…
Reference in New Issue