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"
|
"*.css": "postcss"
|
||||||
},
|
},
|
||||||
"editor.formatOnSave": false,
|
"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.npmmirror.com
|
||||||
|
|
||||||
RUN npm config set registry https://registry.npm.taobao.org
|
|
||||||
RUN npm install -g pnpm
|
RUN npm install -g pnpm
|
||||||
|
RUN pnpm config set registry https://registry.npmmirror.com
|
||||||
|
# 下载编译
|
||||||
RUN pnpm i
|
RUN pnpm i
|
||||||
RUN pnpm build
|
# RUN pnpm build
|
||||||
# RUN rm -rf node_module
|
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>
|
<template>
|
||||||
<!-- <Divider /> -->
|
<!-- <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
|
<div
|
||||||
v-for="(col, i) in footer.links"
|
v-for="(col, i) in footer.links"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
|
|
@ -4,7 +4,7 @@ $defineProps<{
|
||||||
topic: string
|
topic: string
|
||||||
description?: string
|
description?: string
|
||||||
href: string
|
href: string
|
||||||
imgClass: string
|
imgClass?: string
|
||||||
}>()
|
}>()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ const flag: any = {
|
||||||
{{ $t(nav.title) }}
|
{{ $t(nav.title) }}
|
||||||
</div>
|
</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">
|
<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
|
<AListItem
|
||||||
class="[--a-spacing:1] max-w-300px"
|
class="[--a-spacing:1] max-w-300px"
|
||||||
|
|
|
@ -21,7 +21,7 @@ const colors = [
|
||||||
<template>
|
<template>
|
||||||
<Section>
|
<Section>
|
||||||
<Typography :topic="$t(topic)" />
|
<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
|
<div
|
||||||
v-for="(col, i) in content"
|
v-for="(col, i) in content"
|
||||||
:key="i"
|
: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: [
|
modules: [
|
||||||
'@vueuse/nuxt',
|
'@vueuse/nuxt',
|
||||||
'@anu-vue/nuxt',
|
'@anu-vue/nuxt',
|
||||||
'@unocss/nuxt',
|
'@unocss/nuxt',
|
||||||
'@pinia/nuxt',
|
'@nuxtjs/i18n',
|
||||||
'@nuxtjs/i18n',
|
|
||||||
// '@nuxtjs/strapi',
|
|
||||||
'@vue-macros/nuxt',
|
'@vue-macros/nuxt',
|
||||||
'@nuxt/content',
|
'@nuxt/content',
|
||||||
'@nuxtjs/color-mode',
|
'@nuxtjs/color-mode',
|
||||||
'@vite-pwa/nuxt',
|
|
||||||
// '@aceforth/nuxt-optimized-images',
|
|
||||||
// '@vueuse/components',
|
|
||||||
// '@nuxt/image',
|
|
||||||
'@nuxt/devtools',
|
'@nuxt/devtools',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -28,19 +22,19 @@ export default defineNuxtConfig({
|
||||||
// clientDB: true
|
// clientDB: true
|
||||||
// }
|
// }
|
||||||
// },
|
// },
|
||||||
image: {
|
// image: {
|
||||||
// provider:"static"
|
// // provider:"static"
|
||||||
},
|
// },
|
||||||
// optimizedImages: {
|
// optimizedImages: {
|
||||||
// optimizeImages: true
|
// optimizeImages: true
|
||||||
// },
|
// },
|
||||||
experimental: {
|
// experimental: {
|
||||||
// when using generate, payload js assets included in sw precache manifest
|
// // when using generate, payload js assets included in sw precache manifest
|
||||||
// but missing on offline, disabling extraction it until fixed
|
// // but missing on offline, disabling extraction it until fixed
|
||||||
payloadExtraction: false,
|
// payloadExtraction: false,
|
||||||
inlineSSRStyles: false,
|
// inlineSSRStyles: false,
|
||||||
renderJsonPayloads: true,
|
// renderJsonPayloads: true,
|
||||||
},
|
// },
|
||||||
|
|
||||||
components: [{
|
components: [{
|
||||||
path: '~/components',
|
path: '~/components',
|
||||||
|
@ -160,7 +154,7 @@ export default defineNuxtConfig({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
pwa,
|
// pwa,
|
||||||
|
|
||||||
devtools: {
|
devtools: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
|
67
package.json
67
package.json
|
@ -1,51 +1,50 @@
|
||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"packageManager": "pnpm@8.2.0",
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "nuxi build",
|
"build": "nuxi build",
|
||||||
"dev": "nuxi dev",
|
"dev": "nuxi dev",
|
||||||
"dev:pwa": "VITE_PLUGIN_PWA=true nuxi dev",
|
|
||||||
"start": "node .output/server/index.mjs",
|
|
||||||
"typecheck": "vue-tsc --noEmit",
|
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"postinstall": "nuxi prepare",
|
"postinstall": "nuxi prepare",
|
||||||
"generate": "nuxi generate",
|
"generate": "nuxi generate"
|
||||||
"start:generate": "serve .output/public"
|
|
||||||
},
|
},
|
||||||
|
"type": "module",
|
||||||
|
"main": "./nuxt.config.ts",
|
||||||
"dependencies": {
|
"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",
|
"@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",
|
"lingo3d-vue": "1.0.118",
|
||||||
"sass": "^1.62.1",
|
"nuxt": "3.11.2",
|
||||||
"swiper": "^9.2.4",
|
"swiper": "^11.1.3",
|
||||||
|
"typescript": "^5.4.5",
|
||||||
"unity-webgl": "^3.4.2",
|
"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"
|
"vue-unity-webgl": "^1.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@antfu/eslint-config": "^0.38.4",
|
"@unocss/eslint-plugin": "^0.60.2",
|
||||||
"@iconify-json/carbon": "^1.1.16",
|
"eslint": "9.2.0",
|
||||||
"@iconify-json/twemoji": "^1.1.11",
|
"sass": "^1.77.2"
|
||||||
"@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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ const status = [
|
||||||
> -->
|
> -->
|
||||||
|
|
||||||
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
|
<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
|
<ACheckbox
|
||||||
v-for="tag in tags"
|
v-for="tag in tags"
|
||||||
:key="tag.value"
|
: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="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
|
<ACheckbox
|
||||||
v-for="tag in tags"
|
v-for="tag in tags"
|
||||||
:key="tag.value"
|
:key="tag.value"
|
||||||
|
@ -115,7 +115,7 @@ const status = [
|
||||||
</ACard>
|
</ACard>
|
||||||
</div>
|
</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 -->
|
<!-- 👉 2nd card -->
|
||||||
<Card
|
<Card
|
||||||
v-for="(item, i) in list"
|
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="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
|
<ACheckbox
|
||||||
v-for="tag in tags"
|
v-for="tag in tags"
|
||||||
:key="tag.value"
|
: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="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
|
<ACheckbox
|
||||||
v-for="tag in tags"
|
v-for="tag in tags"
|
||||||
:key="tag.value"
|
:key="tag.value"
|
||||||
|
|
|
@ -91,7 +91,7 @@ const status = [
|
||||||
</ACard>
|
</ACard>
|
||||||
</div>
|
</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 -->
|
<!-- 👉 2nd card -->
|
||||||
<Card
|
<Card
|
||||||
v-for="(item, i) in list"
|
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="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
|
<ACheckbox
|
||||||
v-for="tag in tags"
|
v-for="tag in tags"
|
||||||
:key="tag.value"
|
: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="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
|
<ACheckbox
|
||||||
v-for="tag in tags"
|
v-for="tag in tags"
|
||||||
:key="tag.value"
|
:key="tag.value"
|
||||||
|
|
|
@ -62,7 +62,7 @@ const sectionNine = useSectionNine()
|
||||||
|
|
||||||
<div ref="sectionThreeEl">
|
<div ref="sectionThreeEl">
|
||||||
<div
|
<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
|
<ImageHover
|
||||||
v-for="(content, i) in sectionThree.contentPrimary"
|
v-for="(content, i) in sectionThree.contentPrimary"
|
||||||
|
@ -74,7 +74,7 @@ const sectionNine = useSectionNine()
|
||||||
}]"
|
}]"
|
||||||
/>
|
/>
|
||||||
</div>
|
</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
|
<ImageHover
|
||||||
v-for="(content, i) in sectionThree.contentSecondary"
|
v-for="(content, i) in sectionThree.contentSecondary"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
@ -85,7 +85,7 @@ const sectionNine = useSectionNine()
|
||||||
}]"
|
}]"
|
||||||
/>
|
/>
|
||||||
</div>
|
</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
|
<ImageHover
|
||||||
v-for="(content, i) in sectionThree.contentThird"
|
v-for="(content, i) in sectionThree.contentThird"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
@ -115,7 +115,7 @@ const sectionNine = useSectionNine()
|
||||||
<!-- Section Five -->
|
<!-- Section Five -->
|
||||||
<Section class="bg-gradient-blue text-white">
|
<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" />
|
<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
|
<div
|
||||||
v-for="(content, i) in sectionFive.content"
|
v-for="(content, i) in sectionFive.content"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
@ -171,7 +171,7 @@ const sectionNine = useSectionNine()
|
||||||
|
|
||||||
<!-- Section Eight -->
|
<!-- Section Eight -->
|
||||||
<Section>
|
<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
|
<div
|
||||||
v-for="(content, i) in sectionEight.content"
|
v-for="(content, i) in sectionEight.content"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
@ -187,7 +187,7 @@ const sectionNine = useSectionNine()
|
||||||
</div>
|
</div>
|
||||||
</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
|
<ATypography
|
||||||
class="text-white"
|
class="text-white"
|
||||||
title="Awesome mobile"
|
title="Awesome mobile"
|
||||||
|
|
|
@ -33,7 +33,7 @@ const list = computed(() => {
|
||||||
> -->
|
> -->
|
||||||
|
|
||||||
<div class="a-card-body a-card-spacer">
|
<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
|
<ACheckbox
|
||||||
v-for="tag in tags"
|
v-for="tag in tags"
|
||||||
:key="tag.value"
|
:key="tag.value"
|
||||||
|
@ -63,7 +63,7 @@ const list = computed(() => {
|
||||||
> -->
|
> -->
|
||||||
|
|
||||||
<div class="a-card-body a-card-spacer">
|
<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
|
<ACheckbox
|
||||||
v-for="tag in tags"
|
v-for="tag in tags"
|
||||||
:key="tag.value"
|
:key="tag.value"
|
||||||
|
@ -78,7 +78,7 @@ const list = computed(() => {
|
||||||
</ACard>
|
</ACard>
|
||||||
</div>
|
</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 -->
|
<!-- 👉 2nd card -->
|
||||||
<Card
|
<Card
|
||||||
v-for="(item, i) in list"
|
v-for="(item, i) in list"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<NuxtPage />
|
<NuxtPage />
|
||||||
|
|
||||||
<!-- <Section>
|
<!-- <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
|
<ATypography
|
||||||
class="text-white"
|
class="text-white"
|
||||||
title="联系我们"
|
title="联系我们"
|
||||||
|
|
|
@ -9,7 +9,7 @@ const content = useAIGC()
|
||||||
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
||||||
|
|
||||||
<Section>
|
<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
|
<div
|
||||||
v-for="(item, i) in content.feature.content"
|
v-for="(item, i) in content.feature.content"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
@ -41,7 +41,7 @@ const content = useAIGC()
|
||||||
</div>
|
</div>
|
||||||
</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 -->
|
<!-- 👉 2nd card -->
|
||||||
<Card
|
<Card
|
||||||
v-for="(item, i) in content.solutions.content"
|
v-for="(item, i) in content.solutions.content"
|
||||||
|
|
|
@ -9,7 +9,7 @@ const content = useDigitalTwin()
|
||||||
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
||||||
|
|
||||||
<Section>
|
<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
|
<div
|
||||||
v-for="(item, i) in content.feature.content"
|
v-for="(item, i) in content.feature.content"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
@ -41,7 +41,7 @@ const content = useDigitalTwin()
|
||||||
</div>
|
</div>
|
||||||
</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 -->
|
<!-- 👉 2nd card -->
|
||||||
<Card
|
<Card
|
||||||
v-for="(item, i) in content.solutions.content"
|
v-for="(item, i) in content.solutions.content"
|
||||||
|
|
|
@ -9,7 +9,7 @@ const content = useMixedReality()
|
||||||
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
||||||
|
|
||||||
<Section>
|
<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
|
<div
|
||||||
v-for="(item, i) in content.feature.content"
|
v-for="(item, i) in content.feature.content"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
@ -41,7 +41,7 @@ const content = useMixedReality()
|
||||||
</div>
|
</div>
|
||||||
</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 -->
|
<!-- 👉 2nd card -->
|
||||||
<Card
|
<Card
|
||||||
v-for="(item, i) in content.solutions.content"
|
v-for="(item, i) in content.solutions.content"
|
||||||
|
|
|
@ -9,7 +9,7 @@ const content = useWeb3()
|
||||||
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
|
||||||
|
|
||||||
<Section>
|
<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
|
<div
|
||||||
v-for="(item, i) in content.feature.content"
|
v-for="(item, i) in content.feature.content"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
@ -41,7 +41,7 @@ const content = useWeb3()
|
||||||
</div>
|
</div>
|
||||||
</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 -->
|
<!-- 👉 2nd card -->
|
||||||
<Card
|
<Card
|
||||||
v-for="(item, i) in content.solutions.content"
|
v-for="(item, i) in content.solutions.content"
|
||||||
|
|
|
@ -10,7 +10,7 @@ import {
|
||||||
transformerDirectives,
|
transformerDirectives,
|
||||||
transformerVariantGroup,
|
transformerVariantGroup,
|
||||||
} from 'unocss'
|
} from 'unocss'
|
||||||
import { presetAnu, presetIconExtraProperties } from 'anu-vue'
|
import { presetAnu, presetIconExtraProperties } from 'anu-vue'
|
||||||
import { presetExtra } from 'unocss-preset-extra'
|
import { presetExtra } from 'unocss-preset-extra'
|
||||||
import { presetScrollbar } from 'unocss-preset-scrollbar'
|
import { presetScrollbar } from 'unocss-preset-scrollbar'
|
||||||
import { presetScrollbarHide } from 'unocss-preset-scrollbar-hide'
|
import { presetScrollbarHide } from 'unocss-preset-scrollbar-hide'
|
||||||
|
@ -104,10 +104,10 @@ export default defineConfig({
|
||||||
presetAnu(),
|
presetAnu(),
|
||||||
// default theme preset
|
// default theme preset
|
||||||
presetThemeDefault({
|
presetThemeDefault({
|
||||||
shortcutOverrides: {
|
// shortcutOverrides: {
|
||||||
'a-btn': 'ring-3 ring-primary',
|
// 'a-btn': 'ring-3 ring-primary',
|
||||||
'a-base-input-root': 'ring-3',
|
// 'a-base-input-root': 'ring-3',
|
||||||
},
|
// },
|
||||||
}),
|
}),
|
||||||
presetUno(),
|
presetUno(),
|
||||||
presetMini(),
|
presetMini(),
|
||||||
|
@ -115,7 +115,7 @@ export default defineConfig({
|
||||||
presetAttributify(),
|
presetAttributify(),
|
||||||
presetIcons({
|
presetIcons({
|
||||||
scale: 1.2,
|
scale: 1.2,
|
||||||
cdn: 'https://esm.sh/',
|
// cdn: 'https://esm.sh/',
|
||||||
// cdn:'https://cdn.skypack.dev/',
|
// cdn:'https://cdn.skypack.dev/',
|
||||||
// cdn:'https://api.iconify.design/',
|
// cdn:'https://api.iconify.design/',
|
||||||
extraProperties: presetIconExtraProperties,
|
extraProperties: presetIconExtraProperties,
|
||||||
|
|
Loading…
Reference in New Issue