Compare commits
82 Commits
c71b1cace1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 967996429b | |||
| f88129f8a9 | |||
| 02ccd546bc | |||
| 4006e7f1c1 | |||
| 352f2b7bae | |||
| 1839bae545 | |||
| 93cb27238b | |||
| a0de3ce96d | |||
| 989c8468f0 | |||
| f8a864d740 | |||
| afde6d2024 | |||
| fe4b39ac97 | |||
| c25e5042dd | |||
| 27849503b3 | |||
| 5fdf071510 | |||
| ff3e62506c | |||
| 24accf803d | |||
| b5dcc80759 | |||
| a294116696 | |||
| d45f0b0ecd | |||
| 2a522e06a0 | |||
| af3bff6d80 | |||
| d9d57066fc | |||
| e34986d09d | |||
| 57adf91646 | |||
| 016c1de922 | |||
| a167d3f2ba | |||
| fb7bf53680 | |||
| cb453297be | |||
| a2f4f946ac | |||
| 67d5bb6874 | |||
| db20117500 | |||
| f3e4408dc0 | |||
| c2d13187f0 | |||
| 7155dedc8d | |||
| de8a6b9dc7 | |||
| 9c562143da | |||
| 21fb901580 | |||
| 29eb464772 | |||
| 6f5d696c2d | |||
| 14a3e467f8 | |||
| 889982f63e | |||
| 83e66ebb54 | |||
| e5f1199c45 | |||
| a2b9b8423c | |||
| b6311a5f6b | |||
| 7b322ed2b3 | |||
| 9352dff278 | |||
| 0ab41c4ce5 | |||
| a75df548be | |||
| b72cb2c3a2 | |||
| 245863ad82 | |||
| af15cd0325 | |||
| a2a85f1dd0 | |||
| 5d7a3517ee | |||
| c48eb66113 | |||
| c34397d567 | |||
| be4176e4b5 | |||
| 5711fe934e | |||
| b9663ed382 | |||
|
|
e2fe4f52a4 | ||
|
|
5a647fc92a | ||
|
|
a3bf4edeeb | ||
| 32327a9244 | |||
| d586115580 | |||
| 011ae1bf52 | |||
| dfb7156fab | |||
| 038cd24cc2 | |||
| cc365990e8 | |||
|
|
308bae1d29 | ||
|
|
985d602680 | ||
| d431e0585b | |||
| d5e0f98a6d | |||
| 8ba5dd4ffc | |||
| 19d89402dd | |||
| 73967c88ca | |||
|
|
9e0d1fdc9c | ||
| b7360d7e71 | |||
| 0657037748 | |||
| f6533e6027 | |||
|
|
7d2463d7c7 | ||
|
|
41abb2b6ff |
90
.gitea/workflows/develop_build_commit.yaml
Normal file
90
.gitea/workflows/develop_build_commit.yaml
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
name: git commit 控制 AiDA WEB-Node.js 开发分支构建部署
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- dev_vite
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: "contains(github.event.head_commit.message, '[run build]')"
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [ 18.18.0 ]
|
||||||
|
env:
|
||||||
|
REMOTE_DEPLOY_PATH: /workspace/workspace_aida/DevelopVersion/develop-aida-web-front
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 0.记录开始时间
|
||||||
|
id: build_start_time
|
||||||
|
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: 1.检出代码
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: dev_vite
|
||||||
|
|
||||||
|
- name: 2.设置 Node.js 环境
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- run: npm install
|
||||||
|
- run: npm run build:dev
|
||||||
|
- run: ls -l
|
||||||
|
|
||||||
|
- name: 3.同步文件到远程服务器
|
||||||
|
uses: appleboy/scp-action@v0.1.7
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.SERVER_HOST }}
|
||||||
|
username: ${{ secrets.SERVER_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
source: "./dist/*"
|
||||||
|
target: ${{ env.REMOTE_DEPLOY_PATH }}
|
||||||
|
ssh_options: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||||
|
strip_components: 0
|
||||||
|
|
||||||
|
- name: 4. 远程重载 Nginx 配置
|
||||||
|
uses: appleboy/ssh-action@v1.0.3
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.SERVER_HOST }}
|
||||||
|
username: ${{ secrets.SERVER_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
# 核心:执行 Nginx 重载命令
|
||||||
|
script: |
|
||||||
|
echo "尝试重载 Nginx 服务..."
|
||||||
|
# 💡 注意:执行此命令需要服务器用户具有 sudo 权限,并且配置了 NOPASSWD。
|
||||||
|
# 否则工作流可能会因为权限不足而失败。
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
echo "Nginx 重载命令已发送。"
|
||||||
|
|
||||||
|
- name: 5.发送构建结果邮件
|
||||||
|
if: always() # 无论上一步是否失败,都执行此步骤
|
||||||
|
uses: dawidd6/action-send-mail@v3
|
||||||
|
with:
|
||||||
|
|
||||||
|
from: ${{ secrets.MAIL_USERNAME }}
|
||||||
|
# --- 邮件配置 ---
|
||||||
|
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
|
||||||
|
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
|
||||||
|
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
|
||||||
|
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
|
||||||
|
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
|
||||||
|
# 收件人列表,可以根据需要更改
|
||||||
|
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
|
||||||
|
|
||||||
|
# --- 邮件正文内容 ---
|
||||||
|
body: |
|
||||||
|
项目: AiDA back-java Develop
|
||||||
|
分支: dev/3.1_release_merge
|
||||||
|
|
||||||
|
🎉 构建结果: ${{ job.status }}
|
||||||
|
|
||||||
|
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
|
||||||
|
|
||||||
|
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
|
||||||
|
|
||||||
|
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
|
||||||
|
content_type: text/plain
|
||||||
85
.gitea/workflows/develop_build_manual.yaml
Normal file
85
.gitea/workflows/develop_build_manual.yaml
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
name: 手动触发 AiDA WEB-Node.js 开发分支构建部署
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [ 18.18.0 ]
|
||||||
|
env:
|
||||||
|
REMOTE_DEPLOY_PATH: /workspace/workspace_aida/DevelopVersion/develop-aida-web-front
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 0.记录开始时间
|
||||||
|
id: build_start_time
|
||||||
|
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: 1.检出代码
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: dev_vite
|
||||||
|
|
||||||
|
- name: 2.设置 Node.js 环境
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- run: npm install
|
||||||
|
- run: npm run build:dev
|
||||||
|
- run: ls -l
|
||||||
|
|
||||||
|
- name: 3.同步文件到远程服务器
|
||||||
|
uses: appleboy/scp-action@v0.1.7
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.SERVER_HOST }}
|
||||||
|
username: ${{ secrets.SERVER_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
source: "./dist/*"
|
||||||
|
target: ${{ env.REMOTE_DEPLOY_PATH }}
|
||||||
|
ssh_options: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||||
|
strip_components: 0
|
||||||
|
|
||||||
|
- name: 4. 远程重载 Nginx 配置
|
||||||
|
uses: appleboy/ssh-action@v1.0.3
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.SERVER_HOST }}
|
||||||
|
username: ${{ secrets.SERVER_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
# 核心:执行 Nginx 重载命令
|
||||||
|
script: |
|
||||||
|
echo "尝试重载 Nginx 服务..."
|
||||||
|
# 💡 注意:执行此命令需要服务器用户具有 sudo 权限,并且配置了 NOPASSWD。
|
||||||
|
# 否则工作流可能会因为权限不足而失败。
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
echo "Nginx 重载命令已发送。"
|
||||||
|
|
||||||
|
- name: 5.发送构建结果邮件
|
||||||
|
if: always() # 无论上一步是否失败,都执行此步骤
|
||||||
|
uses: dawidd6/action-send-mail@v3
|
||||||
|
with:
|
||||||
|
|
||||||
|
from: ${{ secrets.MAIL_USERNAME }}
|
||||||
|
# --- 邮件配置 ---
|
||||||
|
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
|
||||||
|
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
|
||||||
|
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
|
||||||
|
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
|
||||||
|
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
|
||||||
|
# 收件人列表,可以根据需要更改
|
||||||
|
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
|
||||||
|
|
||||||
|
# --- 邮件正文内容 ---
|
||||||
|
body: |
|
||||||
|
项目: AiDA back-java Develop
|
||||||
|
分支: dev/3.1_release_merge
|
||||||
|
|
||||||
|
🎉 构建结果: ${{ job.status }}
|
||||||
|
|
||||||
|
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
|
||||||
|
|
||||||
|
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
|
||||||
|
|
||||||
|
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
|
||||||
|
content_type: text/plain
|
||||||
78
.gitea/workflows/prod_build_manual.yaml
Normal file
78
.gitea/workflows/prod_build_manual.yaml
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
name: AiDA WEB-Node.js 生产分支构建部署
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [ 18.18.0 ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 0.记录开始时间
|
||||||
|
id: build_start_time
|
||||||
|
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: 1.检出代码
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: StableVersion
|
||||||
|
|
||||||
|
- name: 2.设置 Node.js 环境
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- run: npm install
|
||||||
|
- run: npm run build
|
||||||
|
- run: ls -l
|
||||||
|
|
||||||
|
- name: 3.5. 手动安装 AWS CLI v2 # 新增步骤:确保 aws 命令可用
|
||||||
|
run: |
|
||||||
|
echo "安装 AWS CLI V2..."
|
||||||
|
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||||
|
unzip awscliv2.zip
|
||||||
|
sudo ./aws/install --update
|
||||||
|
aws --version
|
||||||
|
echo "AWS CLI V2 安装完成。"
|
||||||
|
|
||||||
|
- name: 4.配置 AWS 凭证
|
||||||
|
uses: aws-actions/configure-aws-credentials@main
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
aws-region: 'ap-east-1'
|
||||||
|
|
||||||
|
- name: 5.同步 dist 目录到 S3
|
||||||
|
run: |
|
||||||
|
aws s3 sync dist/ s3://${{ secrets.S3_BUCKET_NAME }}/ --acl public-read
|
||||||
|
|
||||||
|
- name: 6.发送构建结果邮件
|
||||||
|
if: always() # 无论上一步是否失败,都执行此步骤
|
||||||
|
uses: dawidd6/action-send-mail@v3
|
||||||
|
with:
|
||||||
|
|
||||||
|
from: ${{ secrets.MAIL_USERNAME }}
|
||||||
|
# --- 邮件配置 ---
|
||||||
|
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
|
||||||
|
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
|
||||||
|
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
|
||||||
|
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
|
||||||
|
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
|
||||||
|
# 收件人列表,可以根据需要更改
|
||||||
|
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
|
||||||
|
|
||||||
|
# --- 邮件正文内容 ---
|
||||||
|
body: |
|
||||||
|
项目: AiDA back-java Develop
|
||||||
|
分支: dev/3.1_release_merge
|
||||||
|
|
||||||
|
🎉 构建结果: ${{ job.status }}
|
||||||
|
|
||||||
|
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
|
||||||
|
|
||||||
|
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
|
||||||
|
|
||||||
|
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
|
||||||
|
content_type: text/plain
|
||||||
81
.gitea/workflows/prod_build_schedule.yaml
Normal file
81
.gitea/workflows/prod_build_schedule.yaml
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
name: AiDA WEB-Node.js 生产分支构建部署
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# cron为UTC时区,构建时间=部署时间-8小时 {*分 (-8)时 *日 *月 *周} ---
|
||||||
|
# 示例: 1月1日22点22分触发构建 cron写作 - '22 14 1 1 *'
|
||||||
|
- cron: '00 14 23 3 *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [ 18.18.0 ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 0.记录开始时间
|
||||||
|
id: build_start_time
|
||||||
|
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: 1.检出代码
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: StableVersion
|
||||||
|
|
||||||
|
- name: 2.设置 Node.js 环境
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- run: npm install
|
||||||
|
- run: npm run build
|
||||||
|
- run: ls -l
|
||||||
|
|
||||||
|
- name: 3.5. 手动安装 AWS CLI v2 # 新增步骤:确保 aws 命令可用
|
||||||
|
run: |
|
||||||
|
echo "安装 AWS CLI V2..."
|
||||||
|
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||||
|
unzip awscliv2.zip
|
||||||
|
sudo ./aws/install --update
|
||||||
|
aws --version
|
||||||
|
echo "AWS CLI V2 安装完成。"
|
||||||
|
|
||||||
|
- name: 4.配置 AWS 凭证
|
||||||
|
uses: aws-actions/configure-aws-credentials@main
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
aws-region: 'ap-east-1'
|
||||||
|
|
||||||
|
- name: 5.同步 dist 目录到 S3
|
||||||
|
run: |
|
||||||
|
aws s3 sync dist/ s3://${{ secrets.S3_BUCKET_NAME }}/ --acl public-read
|
||||||
|
|
||||||
|
- name: 6.发送构建结果邮件
|
||||||
|
if: always() # 无论上一步是否失败,都执行此步骤
|
||||||
|
uses: dawidd6/action-send-mail@v3
|
||||||
|
with:
|
||||||
|
|
||||||
|
from: ${{ secrets.MAIL_USERNAME }}
|
||||||
|
# --- 邮件配置 ---
|
||||||
|
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
|
||||||
|
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
|
||||||
|
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
|
||||||
|
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
|
||||||
|
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
|
||||||
|
# 收件人列表,可以根据需要更改
|
||||||
|
to: 'cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
|
||||||
|
|
||||||
|
# --- 邮件正文内容 ---
|
||||||
|
body: |
|
||||||
|
项目: AiDA WEB-Node.js 生产分支构建部署
|
||||||
|
分支: StableVersion
|
||||||
|
|
||||||
|
🎉 构建结果: ${{ job.status }}
|
||||||
|
|
||||||
|
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
|
||||||
|
|
||||||
|
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
|
||||||
|
|
||||||
|
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
|
||||||
|
content_type: text/plain
|
||||||
85
.gitea/workflows/research_build_manual.yaml
Normal file
85
.gitea/workflows/research_build_manual.yaml
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
name: 手动触发 AiDA WEB-Node.js 开发分支构建部署
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [ 18.18.0 ]
|
||||||
|
env:
|
||||||
|
REMOTE_DEPLOY_PATH: /workspace/workspace_aida/Research/research-aida-web-front
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 0.记录开始时间
|
||||||
|
id: build_start_time
|
||||||
|
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: 1.检出代码
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: research
|
||||||
|
|
||||||
|
- name: 2.设置 Node.js 环境
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- run: npm install
|
||||||
|
- run: npm run build:dev
|
||||||
|
- run: ls -l
|
||||||
|
|
||||||
|
- name: 3.同步文件到远程服务器
|
||||||
|
uses: appleboy/scp-action@v0.1.7
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.SERVER_HOST }}
|
||||||
|
username: ${{ secrets.SERVER_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
source: "./dist/*"
|
||||||
|
target: ${{ env.REMOTE_DEPLOY_PATH }}
|
||||||
|
ssh_options: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||||
|
strip_components: 0
|
||||||
|
|
||||||
|
- name: 4. 远程重载 Nginx 配置
|
||||||
|
uses: appleboy/ssh-action@v1.0.3
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.SERVER_HOST }}
|
||||||
|
username: ${{ secrets.SERVER_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
# 核心:执行 Nginx 重载命令
|
||||||
|
script: |
|
||||||
|
echo "尝试重载 Nginx 服务..."
|
||||||
|
# 💡 注意:执行此命令需要服务器用户具有 sudo 权限,并且配置了 NOPASSWD。
|
||||||
|
# 否则工作流可能会因为权限不足而失败。
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
echo "Nginx 重载命令已发送。"
|
||||||
|
|
||||||
|
- name: 5.发送构建结果邮件
|
||||||
|
if: always() # 无论上一步是否失败,都执行此步骤
|
||||||
|
uses: dawidd6/action-send-mail@v3
|
||||||
|
with:
|
||||||
|
|
||||||
|
from: ${{ secrets.MAIL_USERNAME }}
|
||||||
|
# --- 邮件配置 ---
|
||||||
|
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
|
||||||
|
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
|
||||||
|
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
|
||||||
|
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
|
||||||
|
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
|
||||||
|
# 收件人列表,可以根据需要更改
|
||||||
|
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
|
||||||
|
|
||||||
|
# --- 邮件正文内容 ---
|
||||||
|
body: |
|
||||||
|
项目: AiDA back-java Develop
|
||||||
|
分支: dev/3.1_release_merge
|
||||||
|
|
||||||
|
🎉 构建结果: ${{ job.status }}
|
||||||
|
|
||||||
|
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
|
||||||
|
|
||||||
|
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
|
||||||
|
|
||||||
|
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
|
||||||
|
content_type: text/plain
|
||||||
BIN
src/assets/images/socialMediaLogo/biliBliIcon.png
Normal file
BIN
src/assets/images/socialMediaLogo/biliBliIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 313 KiB |
BIN
src/assets/images/socialMediaLogo/instagramIcon.png
Normal file
BIN
src/assets/images/socialMediaLogo/instagramIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 370 KiB |
BIN
src/assets/images/socialMediaLogo/tikTokIcon.png
Normal file
BIN
src/assets/images/socialMediaLogo/tikTokIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 68 KiB |
BIN
src/assets/images/socialMediaLogo/xiaoHongShuIcon.png
Normal file
BIN
src/assets/images/socialMediaLogo/xiaoHongShuIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 191 KiB |
BIN
src/assets/images/socialMediaLogo/youTubeIcon.png
Normal file
BIN
src/assets/images/socialMediaLogo/youTubeIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.4 KiB |
BIN
src/assets/images/socialMediaLogo/zhiHuIcon.png
Normal file
BIN
src/assets/images/socialMediaLogo/zhiHuIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 299 KiB |
@@ -168,6 +168,7 @@ li {
|
|||||||
}
|
}
|
||||||
.ant-modal-mask {
|
.ant-modal-mask {
|
||||||
background-color: #666666;
|
background-color: #666666;
|
||||||
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
.select_block {
|
.select_block {
|
||||||
height: 4rem;
|
height: 4rem;
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ input:focus{
|
|||||||
}
|
}
|
||||||
.ant-modal-mask{
|
.ant-modal-mask{
|
||||||
background-color: #666666;
|
background-color: #666666;
|
||||||
|
opacity: .5;
|
||||||
}
|
}
|
||||||
.select_block{
|
.select_block{
|
||||||
height: 4rem;
|
height: 4rem;
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ export default defineComponent({
|
|||||||
JSON.stringify(colorData.selectDetail.color.gradient) == JSON.stringify(color?.gradient)
|
JSON.stringify(colorData.selectDetail.color.gradient) == JSON.stringify(color?.gradient)
|
||||||
&& colorData.selectDetail.color.rgba?.r
|
&& colorData.selectDetail.color.rgba?.r
|
||||||
){
|
){
|
||||||
|
console.log('---',index)
|
||||||
isNoSelect = true
|
isNoSelect = true
|
||||||
colorData.selectColor = item
|
colorData.selectColor = item
|
||||||
colorData.colorList.index = index
|
colorData.colorList.index = index
|
||||||
@@ -160,8 +161,8 @@ export default defineComponent({
|
|||||||
if(color?.gradient){
|
if(color?.gradient){
|
||||||
item.gradient = color?.gradient
|
item.gradient = color?.gradient
|
||||||
}
|
}
|
||||||
colorData.colorList.index = index
|
// colorData.colorList.index = index
|
||||||
colorData.selectColor = item
|
// colorData.selectColor = item
|
||||||
}
|
}
|
||||||
colorData.colorList.list[newVal].push(item)
|
colorData.colorList.list[newVal].push(item)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="style marginBottom" v-if="show.style">
|
<div class="style marginBottom" v-if="show.style">
|
||||||
<div class="text">{{$t('Habit.Style')}}:</div>
|
<div class="text">{{$t('Habit.Style')}}:</div>
|
||||||
<div class="center">{{ selectObject?.styleName?selectObject?.styleName:'All' }}</div>
|
<div class="center">{{ selectObject?.styleName?selectObject?.styleName:$t('Header.All') }}</div>
|
||||||
<div class="gallery_btn" @click="setStyle">{{ $t('Habit.Select') }}</div>
|
<div class="gallery_btn" @click="setStyle">{{ $t('Habit.Select') }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="style brand marginBottom">
|
<div class="style brand marginBottom">
|
||||||
|
|||||||
@@ -2,50 +2,94 @@
|
|||||||
<div class="signUp">
|
<div class="signUp">
|
||||||
<div class="selectSignUp" v-show="!isSelectSignUp">
|
<div class="selectSignUp" v-show="!isSelectSignUp">
|
||||||
<div class="titleTitle">{{ productList.Advantages }}</div>
|
<div class="titleTitle">{{ productList.Advantages }}</div>
|
||||||
<div class="selectMonthlyYearly" :class="[monthlyOrYearly == 'monthly' ? 'left' : 'right']">
|
<div
|
||||||
|
class="selectMonthlyYearly"
|
||||||
|
:class="[monthlyOrYearly == 'monthly' ? 'left' : 'right']"
|
||||||
|
>
|
||||||
<div class="bg"></div>
|
<div class="bg"></div>
|
||||||
<div class="leftText" @click="setMonthlyOrYearly('monthly')">{{ productList.Monthly }}</div>
|
<div class="leftText" @click="setMonthlyOrYearly('monthly')">
|
||||||
<div class="rightText" @click="setMonthlyOrYearly('yearl')">{{ productList.Yearly }}</div>
|
{{ productList.Monthly }}
|
||||||
|
</div>
|
||||||
|
<div class="rightText" @click="setMonthlyOrYearly('yearl')">
|
||||||
|
{{ productList.Yearly }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="gallery_list product_list">
|
<div class="gallery_list product_list">
|
||||||
<div class="gallery_item" v-for="item in productList[monthlyOrYearly]" :key="item">
|
<div
|
||||||
|
class="gallery_item"
|
||||||
|
v-for="item in productList[monthlyOrYearly]"
|
||||||
|
:key="item"
|
||||||
|
:class="[
|
||||||
|
{ recommended: item.recommended },
|
||||||
|
{ monthly: monthlyOrYearly === 'monthly' },
|
||||||
|
{ yearly: monthlyOrYearly === 'yearl' },
|
||||||
|
{ academic: item.type === 'academic' }
|
||||||
|
]"
|
||||||
|
>
|
||||||
<div class="product_signUp_box">
|
<div class="product_signUp_box">
|
||||||
<img class="img" :src="item?.img" alt="">
|
<img class="img" :src="item?.img" alt="" />
|
||||||
<div class="title">{{ item?.title }}</div>
|
<div class="title">{{ item?.title }}</div>
|
||||||
<div class="info" :class="{academic:item.type == 'academic'}">{{ item?.info }}</div>
|
<div class="info" :class="{ academic: item.type == 'academic' }">
|
||||||
|
{{ item?.info }}
|
||||||
|
</div>
|
||||||
<div class="price " v-if="item.type != 'academic'">
|
<div class="price " v-if="item.type != 'academic'">
|
||||||
<div>{{ item?.price }}</div>
|
<div>{{ item?.price }}</div>
|
||||||
<span :class="{yearl:monthlyOrYearly == 'yearl'}">{{ item?.detail }}</span>
|
<span
|
||||||
|
:class="[
|
||||||
|
{ yearl: monthlyOrYearly == 'yearl' },
|
||||||
|
{ personal: item.type === 'personal' }
|
||||||
|
]"
|
||||||
|
style="white-space: nowrap;"
|
||||||
|
>
|
||||||
|
{{ item?.detail }}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="price academic" v-if="item.type == 'academic'">
|
<div class="price academic" v-if="item.type == 'academic'">
|
||||||
<div>{{ item?.custom }}</div>
|
<div>{{ item?.custom }}</div>
|
||||||
<span style="font-size: 1.4rem;">{{ item?.customInfo }}</span>
|
<span style="font-size: 1.4rem">{{ item?.customInfo }}</span>
|
||||||
</div>
|
</div>
|
||||||
<ul class="product_detail" :class="{'academic':(item.type == 'academic' && !isSelectSuccessively)}">
|
<ul
|
||||||
|
class="product_detail"
|
||||||
|
:class="[
|
||||||
|
{ academic: item.type == 'academic' && !isSelectSuccessively },
|
||||||
|
{ chinese: isSelectSuccessively }
|
||||||
|
]"
|
||||||
|
>
|
||||||
<li v-for="detailItem in item?.detailList">{{ detailItem }}</li>
|
<li v-for="detailItem in item?.detailList">{{ detailItem }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="gallery_btn gallery_btn_radius" v-if="item?.btn != 'Contact us' && item?.btn != '联系我们'" @click="createAccount">{{ item?.btn }}</div>
|
<div
|
||||||
<div class="gallery_btn gallery_btn_radius" v-else @click="handleContactUs">{{ item?.btn }}</div>
|
class="gallery_btn gallery_btn_radius submit"
|
||||||
|
v-if="item?.btn != 'Contact us' && item?.btn != '联系我们'"
|
||||||
|
@click="createAccount"
|
||||||
|
>
|
||||||
|
{{ item?.btn }}
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="gallery_btn gallery_btn_radius submit"
|
||||||
|
v-else
|
||||||
|
@click="handleContactUs"
|
||||||
|
>
|
||||||
|
{{ item?.btn }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="highlight" v-if="item?.highlight">{{ item?.highlight }}</div>
|
<div class="highlight" v-if="item?.highlight">{{ item?.highlight }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<registerModel ref="registerModel"></registerModel>
|
<registerModel ref="registerModel"></registerModel>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { defineComponent, ref, reactive, watch, onMounted, nextTick, toRefs } from "vue";
|
import { defineComponent, ref, reactive, watch, onMounted, nextTick, toRefs } from 'vue'
|
||||||
import registerModel from './registerModel.vue'
|
import registerModel from './registerModel.vue'
|
||||||
import { message } from "ant-design-vue";
|
import { message } from 'ant-design-vue'
|
||||||
import CChargeIcon from '@/assets/icons/CCharge.svg'
|
import CChargeIcon from '@/assets/icons/CCharge.svg'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
registerModel,
|
registerModel
|
||||||
},
|
},
|
||||||
name: "login",
|
name: 'login',
|
||||||
props: ['isSelectSuccessively'],
|
props: ['isSelectSuccessively'],
|
||||||
// emits: ['close'],
|
// emits: ['close'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
@@ -62,122 +106,143 @@ import { message } from "ant-design-vue";
|
|||||||
Yearly: '年度',
|
Yearly: '年度',
|
||||||
monthly: [
|
monthly: [
|
||||||
{
|
{
|
||||||
title: "试用版",
|
title: '免费版',
|
||||||
img: CChargeIcon,
|
img: CChargeIcon,
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info: "您的AI时尚设计助手",
|
info: '您的AI时尚设计助手',
|
||||||
price: '100积分',
|
price: 'HK$0',
|
||||||
detail: "",
|
detail: '5天·50积分',
|
||||||
highlight: "",
|
highlight: '',
|
||||||
discounts: '9折优惠',
|
discounts: '9折优惠',
|
||||||
detailList: [
|
detailList: [
|
||||||
'轻松充值积分',
|
'轻松充值积分',
|
||||||
'可在公共化画廊分享设计并与设计师互动',
|
'可在公共化画廊分享设计并与设计师互动',
|
||||||
'支持月付/年付选项',
|
'支持月付/年付选项',
|
||||||
'适合个人创作者、独立设计师以及所有时尚爱好者',
|
'适合个人创作者、独立设计师以及所有时尚爱好者',
|
||||||
'客户支持',
|
'客户支持'
|
||||||
],
|
],
|
||||||
btn: '立即开始',
|
btn: '立即开始'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "个人版",
|
title: '个人版',
|
||||||
img: '/image/homeIntroduct/personal.png',
|
img: '/image/homeIntroduct/personal.png',
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info: "您的AI时尚设计助手",
|
info: '您的AI时尚设计助手',
|
||||||
price: 'HK$100',
|
price: 'HK$100',
|
||||||
detail: "每月·500积分",
|
detail: '每月·500积分',
|
||||||
highlight: "",
|
highlight: '',
|
||||||
discounts: '9折优惠',
|
discounts: '9折优惠',
|
||||||
detailList: [
|
detailList: [
|
||||||
'轻松充值积分',
|
'轻松充值积分',
|
||||||
'可在公共化画廊分享设计并与设计师互动',
|
'可在公共化画廊分享设计并与设计师互动',
|
||||||
'支持月付/年付选项',
|
'支持月付/年付选项',
|
||||||
'适合个人创作者、独立设计师以及所有时尚爱好者',
|
'适合个人创作者、独立设计师以及所有时尚爱好者',
|
||||||
'客户支持',
|
'客户支持'
|
||||||
],
|
],
|
||||||
btn: '立即开始',
|
btn: '订阅'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "个人专业版",
|
title: '个人专业版',
|
||||||
img: '/image/homeIntroduct/personal.png',
|
img: '/image/homeIntroduct/personal.png',
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info: "您的AI时尚设计助手",
|
info: '您的AI时尚设计助手',
|
||||||
price: 'HK$500',
|
price: 'HK$500',
|
||||||
detail: "每月·3500积分",
|
detail: '每月·3500积分',
|
||||||
highlight: "推荐",
|
highlight: '推荐',
|
||||||
|
recommended: true,
|
||||||
discounts: '9折优惠',
|
discounts: '9折优惠',
|
||||||
detailList: [
|
detailList: [
|
||||||
'轻松充值积分',
|
'轻松充值积分',
|
||||||
'可在公共画廊中分享设计并与设计师互动',
|
'可在公共画廊中分享设计并与设计师互动',
|
||||||
'支持月付/年付选项',
|
'支持月付/年付选项',
|
||||||
'适合个人创作者、独立设计师以及所有时尚爱好者',
|
'适合个人创作者、独立设计师以及所有时尚爱好者',
|
||||||
'客户支持',
|
'客户支持'
|
||||||
],
|
],
|
||||||
btn: '立即开始',
|
btn: '订阅'
|
||||||
},{
|
},
|
||||||
title: "教育版",
|
{
|
||||||
|
title: '教育版',
|
||||||
img: '/image/homeIntroduct/academic.png',
|
img: '/image/homeIntroduct/academic.png',
|
||||||
type: 'academic',
|
type: 'academic',
|
||||||
info: "高校多用户管理系统",
|
info: '高校多用户管理系统',
|
||||||
price: '',
|
price: '',
|
||||||
detail: "",
|
detail: '',
|
||||||
custom: '定制方案',
|
custom: '定制方案',
|
||||||
customInfo: '可提供专属教育优惠,详情请联系我们',
|
customInfo: '可提供专属教育优惠,详情请联系我们',
|
||||||
highlight: "",
|
highlight: '',
|
||||||
discounts: '',
|
discounts: '',
|
||||||
detailList: [
|
detailList: [
|
||||||
'灵活的自定义程序以满足学校需求',
|
'灵活的自定义程序以满足学校需求',
|
||||||
"项目期间每月信用额度自动续期",
|
'项目期间每月信用额度自动续期',
|
||||||
'可在用户之间灵活共享和分配账户信用额度',
|
'可在用户之间灵活共享和分配账户信用额度',
|
||||||
'AI辅助设计教学功能',
|
'AI辅助设计教学功能',
|
||||||
"从设计灵感、草图创作到完整时装系列的尖端教学工具",
|
'从设计灵感、草图创作到完整时装系列的尖端教学工具',
|
||||||
"基本3D设计功能",
|
'基本3D设计功能',
|
||||||
"客户与技术支援",
|
'客户与技术支援'
|
||||||
],
|
],
|
||||||
btn: '联系我们',
|
btn: '联系我们'
|
||||||
},
|
}
|
||||||
],
|
],
|
||||||
yearl: [
|
yearl: [
|
||||||
{
|
{
|
||||||
title: "个人版",
|
title: '免费版',
|
||||||
|
img: CChargeIcon,
|
||||||
|
type: 'personal',
|
||||||
|
info: '您的AI时尚设计助手',
|
||||||
|
price: 'HK$0',
|
||||||
|
detail: '5天·50积分',
|
||||||
|
highlight: '',
|
||||||
|
discounts: '9折优惠',
|
||||||
|
detailList: [
|
||||||
|
'轻松充值积分',
|
||||||
|
'可在公共化画廊分享设计并与设计师互动',
|
||||||
|
'支持月付/年付选项',
|
||||||
|
'适合个人创作者、独立设计师以及所有时尚爱好者',
|
||||||
|
'客户支持'
|
||||||
|
],
|
||||||
|
btn: '立即开始'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '个人版',
|
||||||
img: '/image/homeIntroduct/personal.png',
|
img: '/image/homeIntroduct/personal.png',
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info: "您的AI时尚设计助手",
|
info: '您的AI时尚设计助手',
|
||||||
price: 'HK$5,000',
|
price: 'HK$5,000',
|
||||||
detail: "每年·50000积分",
|
detail: '每年·50000积分',
|
||||||
highlight: "免费试用5天",
|
highlight: '',
|
||||||
discounts: '9折优惠',
|
discounts: '9折优惠',
|
||||||
detailList: [
|
detailList: [
|
||||||
'灵活的自定义程序以满足学校需求',
|
'灵活的自定义程序以满足学校需求',
|
||||||
'可在用户之间灵活共享和分配账户信用额度',
|
'可在用户之间灵活共享和分配账户信用额度',
|
||||||
'AI辅助设计教学功能',
|
'AI辅助设计教学功能',
|
||||||
'支持草图创意和设计灵感教学',
|
'支持草图创意和设计灵感教学',
|
||||||
'基础3D设计功能',
|
'基础3D设计功能'
|
||||||
],
|
],
|
||||||
btn: '立即开始',
|
btn: '订阅'
|
||||||
},{
|
},
|
||||||
title: "教育版",
|
{
|
||||||
|
title: '教育版',
|
||||||
img: '/image/homeIntroduct/academic.png',
|
img: '/image/homeIntroduct/academic.png',
|
||||||
type: 'academic',
|
type: 'academic',
|
||||||
info: "高校多用户管理系统",
|
info: '高校多用户管理系统',
|
||||||
price: '',
|
price: '',
|
||||||
detail: "",
|
detail: '',
|
||||||
custom: '定制方案',
|
custom: '定制方案',
|
||||||
customInfo: '可提供专属教育优惠,详情请联系我们',
|
customInfo: '可提供专属教育优惠,详情请联系我们',
|
||||||
highlight: "",
|
highlight: '',
|
||||||
discounts: '',
|
discounts: '',
|
||||||
detailList: [
|
detailList: [
|
||||||
'灵活的自定义程序以满足学校需求',
|
'灵活的自定义程序以满足学校需求',
|
||||||
"项目期间每月信用额度自动续期",
|
'项目期间每月信用额度自动续期',
|
||||||
'可在用户之间灵活共享和分配账户信用额度',
|
'可在用户之间灵活共享和分配账户信用额度',
|
||||||
'AI辅助设计教学功能',
|
'AI辅助设计教学功能',
|
||||||
"从设计灵感、草图创作到完整时装系列的尖端教学工具",
|
'从设计灵感、草图创作到完整时装系列的尖端教学工具',
|
||||||
"基本3D设计功能",
|
'基本3D设计功能',
|
||||||
"客户与技术支援",
|
'客户与技术支援'
|
||||||
],
|
|
||||||
btn: '联系我们',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
|
btn: '联系我们'
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
productListEn: {
|
productListEn: {
|
||||||
Advantages: 'Our Pricing Plan',
|
Advantages: 'Our Pricing Plan',
|
||||||
@@ -185,68 +250,70 @@ import { message } from "ant-design-vue";
|
|||||||
Yearly: 'Yearly',
|
Yearly: 'Yearly',
|
||||||
monthly: [
|
monthly: [
|
||||||
{
|
{
|
||||||
title:"Personal",
|
title: 'Free',
|
||||||
img: CChargeIcon,
|
img: CChargeIcon,
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info:"Your AI Fashion Design Assistant",
|
info: 'Your AI Fashion Design Assistant',
|
||||||
price:'100 credits',
|
price: 'HK$0',
|
||||||
detail:"",
|
detail: '5 days · 50 credits',
|
||||||
highlight:"",
|
highlight: '',
|
||||||
discounts: '10% off',
|
discounts: '10% off',
|
||||||
detailList: [
|
detailList: [
|
||||||
'Easy to Top up Credits',
|
'Easy to Top up Credits',
|
||||||
'Option to Share Design and Interact with Designers in Public Gallery',
|
'Option to Share Design and Interact with Designers in Public Gallery',
|
||||||
'Support Monthly/Annual Payment Options',
|
'Support Monthly/Annual Payment Options',
|
||||||
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
||||||
'Customer and Technical Support',
|
'Customer and Technical Support'
|
||||||
],
|
],
|
||||||
btn:'Get Started',
|
btn: 'Get Started'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title:"Personal",
|
title: 'Personal',
|
||||||
img: '/image/homeIntroduct/personal.png',
|
img: '/image/homeIntroduct/personal.png',
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info:"Your AI Fashion Design Assistant",
|
info: 'Your AI Fashion Design Assistant',
|
||||||
price: 'HK$100',
|
price: 'HK$100',
|
||||||
detail:"per month · 500 credits",
|
detail: 'per month · 500 credits',
|
||||||
highlight:"",
|
highlight: '',
|
||||||
discounts: '10% off',
|
discounts: '10% off',
|
||||||
detailList: [
|
detailList: [
|
||||||
'Easy to Top up Credits',
|
'Easy to Top up Credits',
|
||||||
'Option to Share Design and Interact with Designers in Public Gallery',
|
'Option to Share Design and Interact with Designers in Public Gallery',
|
||||||
'Support Monthly/Annual Payment Options',
|
'Support Monthly/Annual Payment Options',
|
||||||
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
||||||
'Customer and Technical Support',
|
'Customer and Technical Support'
|
||||||
],
|
],
|
||||||
btn:'Get Started',
|
btn: 'Subscribe'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title:"Personal",
|
title: 'Personal',
|
||||||
img: '/image/homeIntroduct/personal.png',
|
img: '/image/homeIntroduct/personal.png',
|
||||||
type: 'personal',
|
type: 'personal',
|
||||||
info:"Your AI Fashion Design Assistant",
|
info: 'Your AI Fashion Design Assistant',
|
||||||
price: 'HK$500',
|
price: 'HK$500',
|
||||||
detail:"per month · 3500 credits",
|
detail: 'per month · 3500 credits',
|
||||||
highlight:"Recommended",
|
highlight: 'Recommended',
|
||||||
|
recommended: true,
|
||||||
discounts: '10% off',
|
discounts: '10% off',
|
||||||
detailList: [
|
detailList: [
|
||||||
'Easy to Top up Credits',
|
'Easy to Top up Credits',
|
||||||
'Option to Share Design and Interact with Designers in Public Gallery',
|
'Option to Share Design and Interact with Designers in Public Gallery',
|
||||||
'Support Monthly/Annual Payment Options',
|
'Support Monthly/Annual Payment Options',
|
||||||
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
||||||
'Customer and Technical Support',
|
'Customer and Technical Support'
|
||||||
],
|
],
|
||||||
btn:'Get Started',
|
btn: 'Subscribe'
|
||||||
},{
|
},
|
||||||
title:"Academic",
|
{
|
||||||
|
title: 'Academic',
|
||||||
img: '/image/homeIntroduct/academic.png',
|
img: '/image/homeIntroduct/academic.png',
|
||||||
type: 'academic',
|
type: 'academic',
|
||||||
info:"Multi User Management System for Universities",
|
info: 'Multi User Management System for Universities',
|
||||||
price: '',
|
price: '',
|
||||||
detail:"",
|
detail: '',
|
||||||
custom: 'Customize',
|
custom: 'Customize',
|
||||||
customInfo: 'Special Academic rate aviable, please contact us for details.',
|
customInfo: 'Special Academic rate aviable, please contact us for details.',
|
||||||
highlight:"",
|
highlight: '',
|
||||||
discounts: '',
|
discounts: '',
|
||||||
detailList: [
|
detailList: [
|
||||||
'Flexible Customize Program to Support School Needs',
|
'Flexible Customize Program to Support School Needs',
|
||||||
@@ -255,39 +322,58 @@ import { message } from "ant-design-vue";
|
|||||||
'Al Assisted Design Teaching Function',
|
'Al Assisted Design Teaching Function',
|
||||||
'Cutting-edge Teaching Tool from Design Inspiration, Sketch Creation to Complete Fashion Collection',
|
'Cutting-edge Teaching Tool from Design Inspiration, Sketch Creation to Complete Fashion Collection',
|
||||||
'Basic 3D Design Functions',
|
'Basic 3D Design Functions',
|
||||||
'Customer and Technical Support',
|
'Customer and Technical Support'
|
||||||
],
|
],
|
||||||
btn:'Contact us',
|
btn: 'Contact us'
|
||||||
},
|
}
|
||||||
],
|
],
|
||||||
yearl: [
|
yearl: [
|
||||||
{
|
{
|
||||||
title:"Personal",
|
title: 'Free',
|
||||||
img:'/image/homeIntroduct/personal.png',
|
img: CChargeIcon,
|
||||||
type:'personal',
|
type: 'free',
|
||||||
info:"Your AI Fashion Design Assistant",
|
info: 'Your AI Fashion Design Assistant',
|
||||||
price:'HK$5,000',
|
price: 'HK$0',
|
||||||
detail:"per month · 50000 credits",
|
detail: '5 days · 50 credits',
|
||||||
highlight:"Free 5-Days Trial",
|
highlight: '',
|
||||||
discounts: '10% off',
|
discounts: '10% off',
|
||||||
detailList: [
|
detailList: [
|
||||||
'Easy to Top up Credits',
|
'Easy to Top up Credits',
|
||||||
'Option to Share Design and Interact with Designers in Public Gallery',
|
'Option to Share Design and Interact with Designers in Public Gallery',
|
||||||
'Support Monthly/Annual Payment Options',
|
'Support Monthly/Annual Payment Options',
|
||||||
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
||||||
'Customer and Technical Support',
|
'Customer and Technical Support'
|
||||||
],
|
],
|
||||||
btn:'Get Started',
|
btn: 'Get Started'
|
||||||
},{
|
},
|
||||||
title:"Academic",
|
{
|
||||||
|
title: 'Personal',
|
||||||
|
img: '/image/homeIntroduct/personal.png',
|
||||||
|
type: 'personal',
|
||||||
|
info: 'Your AI Fashion Design Assistant',
|
||||||
|
price: 'HK$5,000',
|
||||||
|
detail: 'per month · 50000 credits',
|
||||||
|
highlight: '',
|
||||||
|
discounts: '10% off',
|
||||||
|
detailList: [
|
||||||
|
'Easy to Top up Credits',
|
||||||
|
'Option to Share Design and Interact with Designers in Public Gallery',
|
||||||
|
'Support Monthly/Annual Payment Options',
|
||||||
|
'Suitable for Individual Creator, Independent Designers and Fun for all Fashion Lovers',
|
||||||
|
'Customer and Technical Support'
|
||||||
|
],
|
||||||
|
btn: 'Subscribe'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Academic',
|
||||||
img: '/image/homeIntroduct/academic.png',
|
img: '/image/homeIntroduct/academic.png',
|
||||||
type: 'academic',
|
type: 'academic',
|
||||||
info:"Multi User Management System for Universities",
|
info: 'Multi User Management System for Universities',
|
||||||
price: '',
|
price: '',
|
||||||
detail:"",
|
detail: '',
|
||||||
custom: 'Customize',
|
custom: 'Customize',
|
||||||
customInfo: 'Special Academic rate aviable, please contact us for details.',
|
customInfo: 'Special Academic rate aviable, please contact us for details.',
|
||||||
highlight:"",
|
highlight: '',
|
||||||
discounts: '',
|
discounts: '',
|
||||||
detailList: [
|
detailList: [
|
||||||
'Flexible Customize Program to Support School Needs',
|
'Flexible Customize Program to Support School Needs',
|
||||||
@@ -296,23 +382,26 @@ import { message } from "ant-design-vue";
|
|||||||
'Al Assisted Design Teaching Function',
|
'Al Assisted Design Teaching Function',
|
||||||
'Cutting-edge Teaching Tool from Design Inspiration, Sketch Creation to Complete Fashion Collection',
|
'Cutting-edge Teaching Tool from Design Inspiration, Sketch Creation to Complete Fashion Collection',
|
||||||
'Basic 3D Design Functions',
|
'Basic 3D Design Functions',
|
||||||
'Customer and Technical Support',
|
'Customer and Technical Support'
|
||||||
],
|
|
||||||
btn:'Contact us',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
|
btn: 'Contact us'
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
watch(()=>props.isSelectSuccessively,(newVal)=>{
|
watch(
|
||||||
|
() => props.isSelectSuccessively,
|
||||||
|
newVal => {
|
||||||
if (newVal) {
|
if (newVal) {
|
||||||
data.productList = data.productListCn
|
data.productList = data.productListCn
|
||||||
} else {
|
} else {
|
||||||
data.productList = data.productListEn
|
data.productList = data.productListEn
|
||||||
}
|
}
|
||||||
},{immediate: true})
|
},
|
||||||
const close = ()=>{
|
{ immediate: true }
|
||||||
}
|
)
|
||||||
const setMonthlyOrYearly = (val)=>{
|
const close = () => {}
|
||||||
|
const setMonthlyOrYearly = val => {
|
||||||
data.monthlyOrYearly = val
|
data.monthlyOrYearly = val
|
||||||
}
|
}
|
||||||
const createAccount = () => {
|
const createAccount = () => {
|
||||||
@@ -369,7 +458,7 @@ import { message } from "ant-design-vue";
|
|||||||
}, 2000)
|
}, 2000)
|
||||||
}
|
}
|
||||||
|
|
||||||
const copyToClipboard = (text) => {
|
const copyToClipboard = text => {
|
||||||
if (navigator.clipboard && window.isSecureContext) {
|
if (navigator.clipboard && window.isSecureContext) {
|
||||||
// 使用现代 Clipboard API
|
// 使用现代 Clipboard API
|
||||||
navigator.clipboard.writeText(text).catch(() => {
|
navigator.clipboard.writeText(text).catch(() => {
|
||||||
@@ -382,7 +471,7 @@ import { message } from "ant-design-vue";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const fallbackCopyToClipboard = (text) => {
|
const fallbackCopyToClipboard = text => {
|
||||||
const textArea = document.createElement('textarea')
|
const textArea = document.createElement('textarea')
|
||||||
textArea.value = text
|
textArea.value = text
|
||||||
textArea.style.position = 'fixed'
|
textArea.style.position = 'fixed'
|
||||||
@@ -399,18 +488,16 @@ import { message } from "ant-design-vue";
|
|||||||
document.body.removeChild(textArea)
|
document.body.removeChild(textArea)
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(()=>{
|
onMounted(() => {})
|
||||||
|
|
||||||
})
|
|
||||||
return {
|
return {
|
||||||
...toRefs(dom),
|
...toRefs(dom),
|
||||||
...toRefs(data),
|
...toRefs(data),
|
||||||
close,
|
close,
|
||||||
setMonthlyOrYearly,
|
setMonthlyOrYearly,
|
||||||
createAccount,
|
createAccount,
|
||||||
handleContactUs,
|
handleContactUs
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
@@ -429,7 +516,8 @@ import { message } from "ant-design-vue";
|
|||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
margin-bottom: 3rem;
|
margin-bottom: 3rem;
|
||||||
}
|
}
|
||||||
.back,.introduce>span{
|
.back,
|
||||||
|
.introduce > span {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.titleTitle {
|
.titleTitle {
|
||||||
@@ -443,19 +531,19 @@ import { message } from "ant-design-vue";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.selectMonthlyYearly {
|
.selectMonthlyYearly {
|
||||||
border: .7px solid #e7ebff;
|
border: 0.7px solid #e7ebff;
|
||||||
background: #FBFBFB;
|
background: #fbfbfb;
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
width: 18.5rem;
|
width: 18.5rem;
|
||||||
box-shadow: 0px 0.72px 3.62px 0px #566EE81A inset;
|
box-shadow: 0px 0.72px 3.62px 0px #566ee81a inset;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
position: relative;
|
position: relative;
|
||||||
--selectPadding: .58rem;
|
--selectPadding: 0.58rem;
|
||||||
padding: var(--selectPadding);
|
padding: var(--selectPadding);
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
--selectPadding: .36rem;
|
--selectPadding: 0.36rem;
|
||||||
border-radius: .58rem;
|
border-radius: 0.58rem;
|
||||||
width: 10.8rem;
|
width: 10.8rem;
|
||||||
}
|
}
|
||||||
&.left {
|
&.left {
|
||||||
@@ -475,15 +563,16 @@ import { message } from "ant-design-vue";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
> .bg {
|
> .bg {
|
||||||
border: .7px solid #E7EBFF;
|
border: 0.7px solid #e7ebff;
|
||||||
box-shadow: 0px 4.35px 26.08px 0px #B5C2FB1A;
|
box-shadow: 0px 4.35px 26.08px 0px #b5c2fb1a;
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
width: calc(50% - var(--selectPadding) * 2);
|
width: calc(50% - var(--selectPadding) * 2);
|
||||||
height: calc(100% - var(--selectPadding) * 2);
|
height: calc(100% - var(--selectPadding) * 2);
|
||||||
position: absolute;
|
position: absolute;
|
||||||
transition: all .3s;
|
transition: all 0.3s;
|
||||||
}
|
}
|
||||||
> .leftText,> .rightText{
|
> .leftText,
|
||||||
|
> .rightText {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 1.7rem;
|
font-size: 1.7rem;
|
||||||
@@ -510,33 +599,42 @@ import { message } from "ant-design-vue";
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
.gallery_list_box{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
.gallery_list {
|
.gallery_list {
|
||||||
display: flex;
|
display: flex;
|
||||||
// justify-content: center;
|
// justify-content: center;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin-top: 4.3rem;
|
margin-top: 6rem;
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
margin-top: 2.4rem;
|
margin-top: 2.4rem;
|
||||||
}
|
}
|
||||||
.gallery_item {
|
.gallery_item {
|
||||||
width: 44.1rem;
|
width: 36.2rem;
|
||||||
height: 56.9rem;
|
height: 46.8rem;
|
||||||
padding: 2.09rem;
|
padding: 2.38rem;
|
||||||
border-radius: 1.8rem;
|
border-radius: 1.55rem;
|
||||||
border: .72px solid #E7EBFF;
|
border: 0.2rem solid #e7ebff;
|
||||||
margin-right: 8rem;
|
margin-right: 8rem;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
box-shadow: 0px 15.5px 23.84px 0px #bccaff21;
|
||||||
|
|
||||||
|
&.recommended {
|
||||||
|
border-radius: 1.8rem;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
background: linear-gradient(#fff, #fff) padding-box,
|
||||||
|
linear-gradient(88.13deg, #fbd2ff 0.91%, #e6d3ff 52.5%, #b694ff 101.09%)
|
||||||
|
border-box;
|
||||||
|
background-origin: border-box;
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
}
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
border-radius: 1.3rem;
|
border-radius: 1.3rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
margin-bottom: 2.8rem;
|
margin-bottom: 2.8rem;
|
||||||
|
padding: 2rem;
|
||||||
padding-bottom: 1.3rem;
|
padding-bottom: 1.3rem;
|
||||||
}
|
}
|
||||||
.product_signUp_box {
|
.product_signUp_box {
|
||||||
@@ -549,7 +647,7 @@ import { message } from "ant-design-vue";
|
|||||||
margin-bottom: 0rem;
|
margin-bottom: 0rem;
|
||||||
}
|
}
|
||||||
.img {
|
.img {
|
||||||
margin-bottom: 1.4rem;
|
margin-bottom: 1.2rem;
|
||||||
width: 4rem;
|
width: 4rem;
|
||||||
height: 4rem;
|
height: 4rem;
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
@@ -559,35 +657,35 @@ import { message } from "ant-design-vue";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
font-size: 3.1rem;
|
font-size: 2.6rem;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 0.8rem;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
font-size: 2.3rem;
|
font-size: 2.3rem;
|
||||||
margin-bottom: .73rem;
|
margin-bottom: 0.73rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.info {
|
.info {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
color: #797878;
|
color: #797878;
|
||||||
margin-bottom: 1.7rem;
|
|
||||||
font-family: 'pingfang_regular';
|
font-family: 'pingfang_regular';
|
||||||
&.academic {
|
&.academic {
|
||||||
margin-bottom: .4rem;
|
margin-bottom: 0.4rem;
|
||||||
}
|
}
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
margin-bottom: 1.25rem;
|
// margin-bottom: 1.25rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.price {
|
.price {
|
||||||
// margin-bottom: 5.2rem;
|
// margin-bottom: 5.2rem;
|
||||||
border-bottom: .72px solid #E7EBFF;
|
border-bottom: 0.72px solid #e7ebff;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-end;
|
column-gap: 0.7rem;
|
||||||
|
align-items: center;
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
margin-bottom: 2.3rem;
|
margin-bottom: 2.3rem;
|
||||||
}
|
}
|
||||||
@@ -595,13 +693,13 @@ import { message } from "ant-design-vue";
|
|||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
> div {
|
> div {
|
||||||
margin-bottom: .9rem;
|
margin-bottom: 0.9rem;
|
||||||
font-size: 4.3rem;
|
font-size: 3.6rem;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
letter-spacing: -.072rem;
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
font-size: 3.1rem;
|
font-size: 3.1rem;
|
||||||
margin-bottom: .5rem;
|
margin-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
> span {
|
> span {
|
||||||
@@ -610,47 +708,60 @@ import { message } from "ant-design-vue";
|
|||||||
}
|
}
|
||||||
> div {
|
> div {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 4.3rem;
|
font-size: 3.6rem;
|
||||||
color: #1B223C;
|
letter-spacing: -0.06rem;
|
||||||
|
color: #1b223c;
|
||||||
|
margin: 0.3rem 0;
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
font-size: 3.14rem;
|
font-size: 3rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
> span {
|
> span {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 1.7rem;
|
font-size: 1.3rem;
|
||||||
color: #797878;
|
color: #797878;
|
||||||
margin-bottom: 1.5rem;
|
// margin-bottom: 1.5rem;
|
||||||
margin-left: 1rem;
|
// margin-left: 1rem;
|
||||||
&.yearl {
|
&.yearl {
|
||||||
font-size: 1.3rem;
|
font-size: 1.3rem;
|
||||||
}
|
}
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
margin-left: .7rem;
|
margin-top: 1rem;
|
||||||
margin-bottom: 1rem;
|
// margin-left: 0.7rem;
|
||||||
|
// margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.info,.detail,.gallery_btn{
|
.detail,
|
||||||
|
.gallery_btn {
|
||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
}
|
}
|
||||||
.highlight {
|
.highlight {
|
||||||
font-size: 1.3rem;
|
font-size: 1.4rem;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
width: 12.41rem;
|
||||||
|
line-height: 3.4rem;
|
||||||
|
text-align: center;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
background: linear-gradient(88.13deg, #FBD2FF 0.91%, #E6D3FF 52.5%, #B694FF 101.09%);
|
background: linear-gradient(
|
||||||
|
88.13deg,
|
||||||
|
#fbd2ff 0.91%,
|
||||||
|
#e6d3ff 52.5%,
|
||||||
|
#b694ff 101.09%
|
||||||
|
);
|
||||||
// border-radius: .5rem 1.5rem 0px 1.5rem;
|
// border-radius: .5rem 1.5rem 0px 1.5rem;
|
||||||
border-top-right-radius: 1.5rem;
|
border-top-right-radius: 1.5rem;
|
||||||
border-bottom-left-radius: 0.5rem;
|
border-bottom-left-radius: 0.5rem;
|
||||||
padding: .75rem .5rem;
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
padding: .55rem .36rem;
|
|
||||||
// border-radius: .46rem .36rem 0px .9rem;
|
// border-radius: .46rem .36rem 0px .9rem;
|
||||||
border-top-right-radius: 1.1rem;
|
border-top-right-radius: 1.1rem;
|
||||||
border-bottom-left-radius: 0.4rem;
|
border-bottom-left-radius: 0.4rem;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
|
line-height: 2.5rem;
|
||||||
|
font-weight: 500;
|
||||||
|
width: 9rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.product_detail {
|
.product_detail {
|
||||||
@@ -661,20 +772,17 @@ import { message } from "ant-design-vue";
|
|||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
&.academic {
|
&.academic {
|
||||||
justify-content: flex-start
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
li {
|
li {
|
||||||
list-style: disc;
|
list-style: disc;
|
||||||
margin-bottom: .3rem;
|
// margin-bottom: 0.3rem;
|
||||||
font-size: 1.6rem;
|
font-size: 1.3rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
@media (max-width: 767px) {
|
|
||||||
font-size: 1.15rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
li:last-child{
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
}
|
||||||
|
// li:last-child {
|
||||||
|
// margin-bottom: 0;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
.gallery_btn {
|
.gallery_btn {
|
||||||
line-height: 4.6rem;
|
line-height: 4.6rem;
|
||||||
@@ -683,14 +791,102 @@ import { message } from "ant-design-vue";
|
|||||||
margin-top: auto;
|
margin-top: auto;
|
||||||
font-size: 1.7rem;
|
font-size: 1.7rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
background-color: #1b223c;
|
||||||
|
&:hover {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
margin-top: 2.5rem;
|
margin-top: 2.5rem;
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
line-height: 3.4rem;
|
line-height: 3.4rem;
|
||||||
border-radius: .62rem;
|
border-radius: 0.62rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.yearly {
|
||||||
|
width: 44.1rem;
|
||||||
|
height: 56.9rem;
|
||||||
|
padding: 2.89rem 2.89rem 3.31rem;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.product_signUp_box {
|
||||||
|
.title {
|
||||||
|
font-size: 3.1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.info {
|
||||||
|
font-size: 1.7rem;
|
||||||
|
}
|
||||||
|
.price {
|
||||||
|
> div {
|
||||||
|
font-size: 4.34rem;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.product_detail {
|
||||||
|
padding-top: 3.1rem;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
li {
|
||||||
|
font-size: 1.6rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
width: 31.9rem;
|
||||||
|
height: 41.1rem;
|
||||||
|
padding: 2.09rem 2.09rem 2.11rem;
|
||||||
|
&.academic {
|
||||||
|
height: 52rem;
|
||||||
|
}
|
||||||
|
.product_signUp_box {
|
||||||
|
.img {
|
||||||
|
width: 3.4rem;
|
||||||
|
height: 3.4rem;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-size: 2.3rem;
|
||||||
|
margin-bottom: 0;
|
||||||
|
letter-spacing: 0.05rem;
|
||||||
|
}
|
||||||
|
.info {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
.price {
|
||||||
|
margin-bottom: 0;
|
||||||
|
div {
|
||||||
|
font-size: 3.1rem;
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
font-size: 1.26rem;
|
||||||
|
&.personal {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.product_detail {
|
||||||
|
padding-top: 2rem;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-bottom: 0;
|
||||||
|
&.chinese{
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
font-size: 1.15rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.submit {
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.submit {
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -453,7 +453,8 @@ export default {
|
|||||||
jsContent4: '图片必须小于5MB',
|
jsContent4: '图片必须小于5MB',
|
||||||
jsContent5: '图片已经上传是否继续上传',
|
jsContent5: '图片已经上传是否继续上传',
|
||||||
jsContent6: '输入的内容超过允许输入的最大长度',
|
jsContent6: '输入的内容超过允许输入的最大长度',
|
||||||
jsContent7: '请输入内容~'
|
jsContent7: '请输入内容~',
|
||||||
|
jsContent8: '请输入项目名字~'
|
||||||
},
|
},
|
||||||
ModelPlacement: {
|
ModelPlacement: {
|
||||||
Registration: '新增模特',
|
Registration: '新增模特',
|
||||||
|
|||||||
@@ -466,7 +466,8 @@ export default {
|
|||||||
jsContent4: 'Image must smaller than 5MB!',
|
jsContent4: 'Image must smaller than 5MB!',
|
||||||
jsContent5: 'This picture has been uploaded whether to continue uploading?',
|
jsContent5: 'This picture has been uploaded whether to continue uploading?',
|
||||||
jsContent6: 'The entered content exceeds the maximum length.',
|
jsContent6: 'The entered content exceeds the maximum length.',
|
||||||
jsContent7: 'Please enter content'
|
jsContent7: 'Please enter content',
|
||||||
|
jsContent8: 'Please enter the project name.'
|
||||||
},
|
},
|
||||||
ModelPlacement: {
|
ModelPlacement: {
|
||||||
Registration: 'Registration',
|
Registration: 'Registration',
|
||||||
|
|||||||
@@ -393,6 +393,27 @@
|
|||||||
<span class="fi fi-rr-book-user"></span>
|
<span class="fi fi-rr-book-user"></span>
|
||||||
<span class="select_item_des">{{ $t('Header.Tutorial') }}</span>
|
<span class="select_item_des">{{ $t('Header.Tutorial') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="select_item logo">
|
||||||
|
<a href="https://www.tiktok.com" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/tikTokIcon.png" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.instagram.com" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/instagramIcon.png" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.youtube.com" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/youTubeIcon.png" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.xiaohongshu.com" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/xiaoHongShuIcon.png" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.zhihu.com" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/zhiHuIcon.png" alt="">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.bilibili.com/" target="_blank" >
|
||||||
|
<img src="@/assets/images/socialMediaLogo/biliBliIcon.png" alt="">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="select_item_long"></div>
|
<div class="select_item_long"></div>
|
||||||
<div class="select_item" @click="logout()">
|
<div class="select_item" @click="logout()">
|
||||||
<span class="icon iconfont icon-tuichu"></span>
|
<span class="icon iconfont icon-tuichu"></span>
|
||||||
@@ -2013,6 +2034,25 @@ export default defineComponent({
|
|||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
margin-left: 1rem;
|
margin-left: 1rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.logo{
|
||||||
|
padding: 1rem 0.5rem;
|
||||||
|
gap: 1rem;
|
||||||
|
cursor: auto;
|
||||||
|
> a{
|
||||||
|
width: 2.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
border-radius: .5rem;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
> img{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
background: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.select_item_long {
|
.select_item_long {
|
||||||
|
|||||||
@@ -6,14 +6,14 @@
|
|||||||
@click="turnToNewPage('/')"
|
@click="turnToNewPage('/')"
|
||||||
src="@/assets/images/homePage/aidaIcon.png"
|
src="@/assets/images/homePage/aidaIcon.png"
|
||||||
/>
|
/>
|
||||||
|
<div class="gallery_btn login white" @click="setLogin">{{ t('Login.Login') }}</div>
|
||||||
|
<div class="gallery_btn" @click="signUp">{{ t('Login.SignUp') }}</div>
|
||||||
<div class="language_btn">
|
<div class="language_btn">
|
||||||
<div @click="handleChangeLanguage">
|
<div @click="handleChangeLanguage">
|
||||||
<i class="fi fi-rr-globe"></i>
|
<i class="fi fi-rr-globe"></i>
|
||||||
{{ isChinese ? 'CN' : 'EN' }}
|
{{ isChinese ? 'CN' : 'EN' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="gallery_btn login white" @click="setLogin">{{ t('Login.Login') }}</div>
|
|
||||||
<div class="gallery_btn" @click="signUp">{{ t('Login.SignUp') }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
@@ -229,8 +229,25 @@ export default defineComponent({
|
|||||||
.language_btn {
|
.language_btn {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
font-size: 2.5rem;
|
||||||
|
>div {
|
||||||
|
display: flex;
|
||||||
|
>i{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 2.5rem;
|
||||||
|
margin-right: .7rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
|
font-size: 1.5rem;
|
||||||
color: #000;
|
color: #000;
|
||||||
|
>div {
|
||||||
|
>i{
|
||||||
|
font-size: 1.5rem;
|
||||||
|
margin-right: .7rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
> .gallery_btn {
|
> .gallery_btn {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
:placeholder="t('batchGeneration.Search')"
|
:placeholder="t('batchGeneration.Search')"
|
||||||
@search="searchHistoryList"
|
@search="searchHistoryList"
|
||||||
/>
|
/>
|
||||||
<div class="history_table_content" ref="historyTable">
|
<div class="history_table_content" ref="historyTable" @click.stop>
|
||||||
<a-config-provider :locale="tableLocale">
|
<a-config-provider :locale="tableLocale">
|
||||||
<a-table
|
<a-table
|
||||||
row-class-name="history_table_row"
|
row-class-name="history_table_row"
|
||||||
@@ -28,6 +28,14 @@
|
|||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<template #bodyCell="{ column, text, record, index }">
|
<template #bodyCell="{ column, text, record, index }">
|
||||||
|
<div class="update_name" v-if="column?.key === 'collectionName'">
|
||||||
|
<div v-if="updateName.selectIndex === index">
|
||||||
|
<input type="text" v-model="updateName.currentName">
|
||||||
|
</div>
|
||||||
|
<div v-show="updateName.selectIndex !== index">{{ record.name }}</div>
|
||||||
|
<i @click="setUpdateName(record.name,index)" v-show="updateName.selectIndex !== index" class="fi fi-rr-edit"></i>
|
||||||
|
<i @click="submitUpdateName" v-show="updateName.selectIndex === index" class="fi fi-sr-check-circle"></i>
|
||||||
|
</div>
|
||||||
<div class="operate_list" v-if="column?.Operations">
|
<div class="operate_list" v-if="column?.Operations">
|
||||||
<div
|
<div
|
||||||
class="operate_item"
|
class="operate_item"
|
||||||
@@ -213,6 +221,39 @@ export default defineComponent({
|
|||||||
selectCode: selectCode,
|
selectCode: selectCode,
|
||||||
designType: ''
|
designType: ''
|
||||||
}
|
}
|
||||||
|
const updateName = ref({
|
||||||
|
currentName:'',
|
||||||
|
selectIndex:-1,
|
||||||
|
})
|
||||||
|
const clearUpdateName = () => {
|
||||||
|
updateName.value.currentName = ''
|
||||||
|
updateName.value.selectIndex = -1
|
||||||
|
document.removeEventListener('click',clearUpdateName)
|
||||||
|
}
|
||||||
|
const setUpdateName = (name,index) => {
|
||||||
|
updateName.value.currentName = name
|
||||||
|
updateName.value.selectIndex = index
|
||||||
|
document.addEventListener('click',clearUpdateName)
|
||||||
|
}
|
||||||
|
const submitUpdateName = ()=>{
|
||||||
|
if(updateName.value.currentName === collectionList.value[updateName.value.selectIndex].name){
|
||||||
|
clearUpdateName()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(updateName.value.selectIndex != -1){
|
||||||
|
if(!updateName.value.currentName)return message.info(t('HistoryPage.jsContent8'))
|
||||||
|
let data = {
|
||||||
|
id: collectionList.value[updateName.value.selectIndex].id, //library名字
|
||||||
|
name: updateName.value.currentName //history id
|
||||||
|
}
|
||||||
|
Https.axiosPost(Https.httpUrls.projectSaveOrUpdate, data)
|
||||||
|
.then(rv => {
|
||||||
|
collectionList.value[updateName.value.selectIndex].name = updateName.value.currentName
|
||||||
|
clearUpdateName()
|
||||||
|
})
|
||||||
|
.catch(res => {})
|
||||||
|
}
|
||||||
|
}
|
||||||
provide('type', type)
|
provide('type', type)
|
||||||
return {
|
return {
|
||||||
store,
|
store,
|
||||||
@@ -232,7 +273,10 @@ export default defineComponent({
|
|||||||
tableLocale,
|
tableLocale,
|
||||||
projectSetting,
|
projectSetting,
|
||||||
tableSearchBar,
|
tableSearchBar,
|
||||||
currentProjectPath
|
currentProjectPath,
|
||||||
|
updateName,
|
||||||
|
setUpdateName,
|
||||||
|
submitUpdateName,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -608,6 +652,7 @@ export default defineComponent({
|
|||||||
customTableRow(record: any) {
|
customTableRow(record: any) {
|
||||||
return {
|
return {
|
||||||
onDblclick: () => {
|
onDblclick: () => {
|
||||||
|
if(this.updateName.selectIndex !== -1)return
|
||||||
this.retrieveHome(record)
|
this.retrieveHome(record)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -726,6 +771,11 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
:deep(.ant-table-tbody > tr:hover) {
|
:deep(.ant-table-tbody > tr:hover) {
|
||||||
background: #ededed;
|
background: #ededed;
|
||||||
|
.update_name{
|
||||||
|
> .fi-rr-edit{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
:deep(.ant-table-tbody > tr > td) {
|
:deep(.ant-table-tbody > tr > td) {
|
||||||
border: none;
|
border: none;
|
||||||
@@ -780,7 +830,26 @@ export default defineComponent({
|
|||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.update_name{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
> div{
|
||||||
|
> input{
|
||||||
|
width: 12rem;
|
||||||
|
border-radius: .8rem;
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
> i{
|
||||||
|
margin-left: 1.5rem;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 2rem;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
> .fi-rr-edit{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
.operate_list {
|
.operate_list {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
@@ -13,7 +13,18 @@
|
|||||||
@click="turnToNewPage('https://www.aidlab.hk/en/')"
|
@click="turnToNewPage('https://www.aidlab.hk/en/')"
|
||||||
src="@/assets/images/loginPage/aida_Logo_login.png"
|
src="@/assets/images/loginPage/aida_Logo_login.png"
|
||||||
/> -->
|
/> -->
|
||||||
|
<div class="mobile_logo_group" v-if="isMoblie" @click="turnToNewPage('/')">
|
||||||
<img
|
<img
|
||||||
|
class="homeRecommend_logo aid"
|
||||||
|
src="@/assets/images/loginPage/aida_logo.png"
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
class="homeRecommend_logo code"
|
||||||
|
src="@/assets/images/loginPage/aida_Logo_login.png"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<img
|
||||||
|
v-else
|
||||||
class="homeRecommend_logo"
|
class="homeRecommend_logo"
|
||||||
@click="turnToNewPage('/')"
|
@click="turnToNewPage('/')"
|
||||||
src="@/assets/images/homePage/aidaIcon.png"
|
src="@/assets/images/homePage/aidaIcon.png"
|
||||||
@@ -43,61 +54,72 @@
|
|||||||
<div class="homeRecommend_right">
|
<div class="homeRecommend_right">
|
||||||
<!-- <div class="homeRecommend_right" v-if="userDetail.systemUser == -1"> -->
|
<!-- <div class="homeRecommend_right" v-if="userDetail.systemUser == -1"> -->
|
||||||
<div class="cutLangue">
|
<div class="cutLangue">
|
||||||
<div @click="()=>isSelectSuccessively = !isSelectSuccessively">
|
<div @click="() => (isSelectSuccessively = !isSelectSuccessively)">
|
||||||
<i class="fi fi-rr-globe"></i>
|
<i class="fi fi-rr-globe"></i>
|
||||||
<!-- <a-switch :checked="isSelectSuccessively" @click="()=>isSelectSuccessively = !isSelectSuccessively" checked-children="EN" un-checked-children="CN"/> -->
|
<!-- <a-switch :checked="isSelectSuccessively" @click="()=>isSelectSuccessively = !isSelectSuccessively" checked-children="EN" un-checked-children="CN"/> -->
|
||||||
{{ isSelectSuccessively ? 'CN' : 'EN' }}
|
{{ isSelectSuccessively ? 'CN' : 'EN' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="gallery_btn" @click="setLogin">{{ isSelectSuccessively?'登录':'Login' }}</div>
|
<div class="gallery_btn" @click="setLogin">
|
||||||
|
{{ isSelectSuccessively ? '登录' : 'Login' }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<signUp ref="signUp" :isSelectSuccessively="isSelectSuccessively"></signUp>
|
<signUp ref="signUp" :isSelectSuccessively="isSelectSuccessively"></signUp>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { defineComponent, toRefs, reactive, ref , nextTick,computed, onMounted, onBeforeUnmount } from "vue";
|
import {
|
||||||
import { setCookie, getCookie, WriteCookie,clonAllCookie } from "@/tool/cookie";
|
defineComponent,
|
||||||
import { Https } from "@/tool/https";
|
toRefs,
|
||||||
import { useStore } from "vuex";
|
reactive,
|
||||||
import { useRouter } from 'vue-router';
|
ref,
|
||||||
|
nextTick,
|
||||||
|
computed,
|
||||||
|
onMounted,
|
||||||
|
onBeforeUnmount,
|
||||||
|
watch
|
||||||
|
} from 'vue'
|
||||||
|
import { setCookie, getCookie, WriteCookie, clonAllCookie } from '@/tool/cookie'
|
||||||
|
import { Https } from '@/tool/https'
|
||||||
|
import { useStore } from 'vuex'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
import signUp from '@/component/mainPage/signUp/index.vue'
|
import signUp from '@/component/mainPage/signUp/index.vue'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
signUp,
|
signUp
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
const store = useStore();
|
const store = useStore()
|
||||||
const router = useRouter();
|
const router = useRouter()
|
||||||
let data = reactive({
|
let data = reactive({
|
||||||
homeRecommendMax: null,
|
homeRecommendMax: null,
|
||||||
signUp: null,
|
signUp: null,
|
||||||
isSelectSuccessively:false,
|
isSelectSuccessively: false
|
||||||
})
|
})
|
||||||
let isMoblie = ref(false)
|
let isMoblie = ref(false)
|
||||||
let userDetail = computed(() => {
|
let userDetail = computed(() => {
|
||||||
return store.state.UserHabit.userDetail
|
return store.state.UserHabit.userDetail
|
||||||
})
|
})
|
||||||
let setLogin = () => {
|
let setLogin = () => {
|
||||||
router.push("/login");
|
router.push('/login')
|
||||||
}
|
}
|
||||||
let logout = () => {
|
let logout = () => {
|
||||||
let userInfo = store.state.UserHabit.userDetail;
|
let userInfo = store.state.UserHabit.userDetail
|
||||||
let data = {
|
let data = {
|
||||||
userId: userInfo?.userId,
|
userId: userInfo?.userId
|
||||||
};
|
}
|
||||||
store.commit('createDetail')
|
store.commit('createDetail')
|
||||||
store.commit('createProbject')
|
store.commit('createProbject')
|
||||||
if (!data.userId) return
|
if (!data.userId) return
|
||||||
Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
|
Https.axiosPost(Https.httpUrls.accountLogout, data).then(rv => {
|
||||||
clonAllCookie();
|
clonAllCookie()
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
let goHome = () => {
|
let goHome = () => {
|
||||||
router.push('/home');
|
router.push('/home')
|
||||||
}
|
}
|
||||||
let time
|
let time
|
||||||
let updataIsMoblie = () => {
|
let updataIsMoblie = () => {
|
||||||
@@ -109,45 +131,59 @@ export default defineComponent({
|
|||||||
isMoblie.value = false
|
isMoblie.value = false
|
||||||
}
|
}
|
||||||
}, 500)
|
}, 500)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => data.isSelectSuccessively,
|
||||||
|
val => {
|
||||||
|
let str = ''
|
||||||
|
if (val) {
|
||||||
|
str = 'CHINESE_SIMPLIFIED'
|
||||||
|
} else {
|
||||||
|
str = 'ENGLISH'
|
||||||
|
}
|
||||||
|
localStorage.setItem('loginLanguage', str)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
updataIsMoblie()
|
||||||
|
const savedLang = localStorage.getItem('loginLanguage')
|
||||||
|
if (savedLang) {
|
||||||
|
data.isSelectSuccessively = savedLang === 'CHINESE_SIMPLIFIED'
|
||||||
|
}
|
||||||
window.addEventListener('resize', updataIsMoblie)
|
window.addEventListener('resize', updataIsMoblie)
|
||||||
})
|
})
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
window.removeEventListener('resize', updataIsMoblie);
|
window.removeEventListener('resize', updataIsMoblie)
|
||||||
|
})
|
||||||
});
|
|
||||||
return {
|
return {
|
||||||
...toRefs(data),
|
...toRefs(data),
|
||||||
userDetail,
|
userDetail,
|
||||||
setLogin,
|
setLogin,
|
||||||
logout,
|
logout,
|
||||||
goHome,
|
goHome,
|
||||||
isMoblie,
|
isMoblie
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {}
|
||||||
};
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
// credits.value(newVal,oldVal){
|
// credits.value(newVal,oldVal){
|
||||||
// console.log(String(newVal).length);
|
// console.log(String(newVal).length);
|
||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {},
|
||||||
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
turnToNewPage(url) {
|
turnToNewPage(url) {
|
||||||
window.open(url);
|
window.open(url)
|
||||||
},
|
},
|
||||||
turnToWindow(url) {
|
turnToWindow(url) {
|
||||||
window.open(url);
|
window.open(url)
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
@@ -157,7 +193,6 @@ export default defineComponent({
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
|
|
||||||
&.openSignUp {
|
&.openSignUp {
|
||||||
.homeRecommend_heade {
|
.homeRecommend_heade {
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -185,7 +220,7 @@ export default defineComponent({
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
border-bottom: 1px solid #DDD;
|
border-bottom: 1px solid #ddd;
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
padding: 1.4rem 2.1rem;
|
padding: 1.4rem 2.1rem;
|
||||||
@@ -236,7 +271,7 @@ export default defineComponent({
|
|||||||
display: flex;
|
display: flex;
|
||||||
margin-right: 1rem;
|
margin-right: 1rem;
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
margin-right: .7rem;
|
margin-right: 0.7rem;
|
||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -251,20 +286,14 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.homeRecommend_logo {
|
.homeRecommend_logo {
|
||||||
// width: 14.4rem;
|
|
||||||
height: 8rem;
|
height: 8rem;
|
||||||
// height: 4rem;
|
|
||||||
|
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-right: 2rem;
|
margin-right: 2rem;
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
// height: 1.76rem;
|
// height: 1.76rem;
|
||||||
height: 4.5rem;
|
height: 4.5rem;
|
||||||
margin-right: .9rem;
|
margin-right: 0.9rem;
|
||||||
}
|
}
|
||||||
// &:last-child{
|
|
||||||
// margin-right: 2rem;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
.login_footer_item_text {
|
.login_footer_item_text {
|
||||||
// margin-left: 5rem;
|
// margin-left: 5rem;
|
||||||
@@ -287,6 +316,22 @@ export default defineComponent({
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 3.7rem;
|
height: 3.7rem;
|
||||||
|
.mobile_logo_group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
column-gap: 0.9rem;
|
||||||
|
.homeRecommend_logo {
|
||||||
|
&.aid {
|
||||||
|
width: 8rem;
|
||||||
|
height: 1.75rem;
|
||||||
|
}
|
||||||
|
&.code {
|
||||||
|
width: 5rem;
|
||||||
|
height: 1.98rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
&.marLeft2 {
|
&.marLeft2 {
|
||||||
margin-left: 2rem;
|
margin-left: 2rem;
|
||||||
}
|
}
|
||||||
@@ -296,13 +341,13 @@ export default defineComponent({
|
|||||||
margin: 0 0.8rem;
|
margin: 0 0.8rem;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
span {
|
span {
|
||||||
margin: .7rem;
|
margin: 0.7rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.icon-xiala {
|
.icon-xiala {
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: .3s all;
|
transition: 0.3s all;
|
||||||
}
|
}
|
||||||
.icon_rotate {
|
.icon_rotate {
|
||||||
-moz-transform: rotate(180deg);
|
-moz-transform: rotate(180deg);
|
||||||
@@ -312,7 +357,6 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.content {
|
.content {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user