Compare commits

...

9 Commits

Author SHA1 Message Date
80ddcc96d3 宽度修正 2025-12-02 10:58:15 +08:00
0304804057 字体 2025-12-02 10:29:25 +08:00
9570745a94 字体,样式宽度修改 2025-12-01 18:37:43 +08:00
241807325b gitignore更新 2025-12-01 17:02:43 +08:00
7d62f3a9ed 转移字符渲染 2025-12-01 14:56:14 +08:00
3b468e3177 更新打包 2025-12-01 14:51:14 +08:00
f6849b33c3 更新id 2025-12-01 14:01:04 +08:00
1335959881 工作流修改 2025-12-01 13:39:16 +08:00
a5db05fba6 更新 2025-12-01 10:33:06 +08:00
54 changed files with 756 additions and 189 deletions

32
.gitignore vendored
View File

@@ -5,4 +5,34 @@ build_output
docker/schoolNews/volumes/
docker/schoolNews/crawler
docker.zip
docker/dify/volumes
# docker/dify/volumes
docker/dify/volumes/app/storage/*
docker/dify/volumes/certbot/*
docker/dify/volumes/db/data/*
docker/dify/volumes/redis/data/*
docker/dify/volumes/weaviate/*
docker/dify/volumes/qdrant/*
docker/dify/tidb/volumes/*
docker/dify/volumes/etcd/*
docker/dify/volumes/minio/*
docker/dify/volumes/milvus/*
docker/dify/volumes/chroma/*
docker/dify/volumes/opensearch/data/*
docker/dify/volumes/myscale/data/*
docker/dify/volumes/myscale/log/*
docker/dify/volumes/unstructured/*
docker/dify/volumes/pgvector/data/*
docker/dify/volumes/pgvecto_rs/data/*
docker/dify/volumes/couchbase/*
docker/dify/volumes/oceanbase/*
docker/dify/volumes/plugin_daemon/*
docker/dify/volumes/matrixone/*
docker/dify/volumes/mysql/*
docker/dify/volumes/seekdb/*
!docker/dify/volumes/oceanbase/init.d
docker/dify/nginx/conf.d/default.conf
docker/dify/nginx/ssl/*
!docker/dify/nginx/ssl/.gitkeep
docker/dify/middleware.env
docker/dify/docker-compose.override.yaml

BIN
docker/dify.zip Normal file

Binary file not shown.

View File

@@ -0,0 +1,17 @@
<clickhouse>
<users>
<default>
<password></password>
<networks>
<ip>::1</ip> <!-- change to ::/0 to allow access from all addresses -->
<ip>127.0.0.1</ip>
<ip>10.0.0.0/8</ip>
<ip>172.16.0.0/12</ip>
<ip>192.168.0.0/16</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
<access_management>1</access_management>
</default>
</users>
</clickhouse>

View File

@@ -0,0 +1 @@
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;

View File

@@ -0,0 +1,222 @@
---
# Copyright OpenSearch Contributors
# SPDX-License-Identifier: Apache-2.0
# Description:
# Default configuration for OpenSearch Dashboards
# OpenSearch Dashboards is served by a back end server. This setting specifies the port to use.
# server.port: 5601
# Specifies the address to which the OpenSearch Dashboards server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
# server.host: "localhost"
# Enables you to specify a path to mount OpenSearch Dashboards at if you are running behind a proxy.
# Use the `server.rewriteBasePath` setting to tell OpenSearch Dashboards if it should remove the basePath
# from requests it receives, and to prevent a deprecation warning at startup.
# This setting cannot end in a slash.
# server.basePath: ""
# Specifies whether OpenSearch Dashboards should rewrite requests that are prefixed with
# `server.basePath` or require that they are rewritten by your reverse proxy.
# server.rewriteBasePath: false
# The maximum payload size in bytes for incoming server requests.
# server.maxPayloadBytes: 1048576
# The OpenSearch Dashboards server's name. This is used for display purposes.
# server.name: "your-hostname"
# The URLs of the OpenSearch instances to use for all your queries.
# opensearch.hosts: ["http://localhost:9200"]
# OpenSearch Dashboards uses an index in OpenSearch to store saved searches, visualizations and
# dashboards. OpenSearch Dashboards creates a new index if the index doesn't already exist.
# opensearchDashboards.index: ".opensearch_dashboards"
# The default application to load.
# opensearchDashboards.defaultAppId: "home"
# Setting for an optimized healthcheck that only uses the local OpenSearch node to do Dashboards healthcheck.
# This settings should be used for large clusters or for clusters with ingest heavy nodes.
# It allows Dashboards to only healthcheck using the local OpenSearch node rather than fan out requests across all nodes.
#
# It requires the user to create an OpenSearch node attribute with the same name as the value used in the setting
# This node attribute should assign all nodes of the same cluster an integer value that increments with each new cluster that is spun up
# e.g. in opensearch.yml file you would set the value to a setting using node.attr.cluster_id:
# Should only be enabled if there is a corresponding node attribute created in your OpenSearch config that matches the value here
# opensearch.optimizedHealthcheckId: "cluster_id"
# If your OpenSearch is protected with basic authentication, these settings provide
# the username and password that the OpenSearch Dashboards server uses to perform maintenance on the OpenSearch Dashboards
# index at startup. Your OpenSearch Dashboards users still need to authenticate with OpenSearch, which
# is proxied through the OpenSearch Dashboards server.
# opensearch.username: "opensearch_dashboards_system"
# opensearch.password: "pass"
# Enables SSL and paths to the PEM-format SSL certificate and SSL key files, respectively.
# These settings enable SSL for outgoing requests from the OpenSearch Dashboards server to the browser.
# server.ssl.enabled: false
# server.ssl.certificate: /path/to/your/server.crt
# server.ssl.key: /path/to/your/server.key
# Optional settings that provide the paths to the PEM-format SSL certificate and key files.
# These files are used to verify the identity of OpenSearch Dashboards to OpenSearch and are required when
# xpack.security.http.ssl.client_authentication in OpenSearch is set to required.
# opensearch.ssl.certificate: /path/to/your/client.crt
# opensearch.ssl.key: /path/to/your/client.key
# Optional setting that enables you to specify a path to the PEM file for the certificate
# authority for your OpenSearch instance.
# opensearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ]
# To disregard the validity of SSL certificates, change this setting's value to 'none'.
# opensearch.ssl.verificationMode: full
# Time in milliseconds to wait for OpenSearch to respond to pings. Defaults to the value of
# the opensearch.requestTimeout setting.
# opensearch.pingTimeout: 1500
# Time in milliseconds to wait for responses from the back end or OpenSearch. This value
# must be a positive integer.
# opensearch.requestTimeout: 30000
# List of OpenSearch Dashboards client-side headers to send to OpenSearch. To send *no* client-side
# headers, set this value to [] (an empty list).
# opensearch.requestHeadersWhitelist: [ authorization ]
# Header names and values that are sent to OpenSearch. Any custom headers cannot be overwritten
# by client-side headers, regardless of the opensearch.requestHeadersWhitelist configuration.
# opensearch.customHeaders: {}
# Time in milliseconds for OpenSearch to wait for responses from shards. Set to 0 to disable.
# opensearch.shardTimeout: 30000
# Logs queries sent to OpenSearch. Requires logging.verbose set to true.
# opensearch.logQueries: false
# Specifies the path where OpenSearch Dashboards creates the process ID file.
# pid.file: /var/run/opensearchDashboards.pid
# Enables you to specify a file where OpenSearch Dashboards stores log output.
# logging.dest: stdout
# Set the value of this setting to true to suppress all logging output.
# logging.silent: false
# Set the value of this setting to true to suppress all logging output other than error messages.
# logging.quiet: false
# Set the value of this setting to true to log all events, including system usage information
# and all requests.
# logging.verbose: false
# Set the interval in milliseconds to sample system and process performance
# metrics. Minimum is 100ms. Defaults to 5000.
# ops.interval: 5000
# Specifies locale to be used for all localizable strings, dates and number formats.
# Supported languages are the following: English - en , by default , Chinese - zh-CN .
# i18n.locale: "en"
# Set the allowlist to check input graphite Url. Allowlist is the default check list.
# vis_type_timeline.graphiteAllowedUrls: ['https://www.hostedgraphite.com/UID/ACCESS_KEY/graphite']
# Set the blocklist to check input graphite Url. Blocklist is an IP list.
# Below is an example for reference
# vis_type_timeline.graphiteBlockedIPs: [
# //Loopback
# '127.0.0.0/8',
# '::1/128',
# //Link-local Address for IPv6
# 'fe80::/10',
# //Private IP address for IPv4
# '10.0.0.0/8',
# '172.16.0.0/12',
# '192.168.0.0/16',
# //Unique local address (ULA)
# 'fc00::/7',
# //Reserved IP address
# '0.0.0.0/8',
# '100.64.0.0/10',
# '192.0.0.0/24',
# '192.0.2.0/24',
# '198.18.0.0/15',
# '192.88.99.0/24',
# '198.51.100.0/24',
# '203.0.113.0/24',
# '224.0.0.0/4',
# '240.0.0.0/4',
# '255.255.255.255/32',
# '::/128',
# '2001:db8::/32',
# 'ff00::/8',
# ]
# vis_type_timeline.graphiteBlockedIPs: []
# opensearchDashboards.branding:
# logo:
# defaultUrl: ""
# darkModeUrl: ""
# mark:
# defaultUrl: ""
# darkModeUrl: ""
# loadingLogo:
# defaultUrl: ""
# darkModeUrl: ""
# faviconUrl: ""
# applicationTitle: ""
# Set the value of this setting to true to capture region blocked warnings and errors
# for your map rendering services.
# map.showRegionBlockedWarning: false%
# Set the value of this setting to false to suppress search usage telemetry
# for reducing the load of OpenSearch cluster.
# data.search.usageTelemetry.enabled: false
# 2.4 renames 'wizard.enabled: false' to 'vis_builder.enabled: false'
# Set the value of this setting to false to disable VisBuilder
# functionality in Visualization.
# vis_builder.enabled: false
# 2.4 New Experimental Feature
# Set the value of this setting to true to enable the experimental multiple data source
# support feature. Use with caution.
# data_source.enabled: false
# Set the value of these settings to customize crypto materials to encryption saved credentials
# in data sources.
# data_source.encryption.wrappingKeyName: 'changeme'
# data_source.encryption.wrappingKeyNamespace: 'changeme'
# data_source.encryption.wrappingKey: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
# 2.6 New ML Commons Dashboards Feature
# Set the value of this setting to true to enable the ml commons dashboards
# ml_commons_dashboards.enabled: false
# 2.12 New experimental Assistant Dashboards Feature
# Set the value of this setting to true to enable the assistant dashboards
# assistant.chat.enabled: false
# 2.13 New Query Assistant Feature
# Set the value of this setting to false to disable the query assistant
# observability.query_assist.enabled: false
# 2.14 Enable Ui Metric Collectors in Usage Collector
# Set the value of this setting to true to enable UI Metric collections
# usageCollection.uiMetric.enabled: false
opensearch.hosts: [https://localhost:9200]
opensearch.ssl.verificationMode: none
opensearch.username: admin
opensearch.password: 'Qazwsxedc!@#123'
opensearch.requestHeadersWhitelist: [authorization, securitytenant]
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.preferred: [Private, Global]
opensearch_security.readonly_mode.roles: [kibana_read_only]
# Use this setting if you are running opensearch-dashboards without https
opensearch_security.cookie.secure: false
server.host: '0.0.0.0'

View File

@@ -0,0 +1,14 @@
app:
port: 8194
debug: True
key: dify-sandbox
max_workers: 4
max_requests: 50
worker_timeout: 5
python_path: /usr/local/bin/python3
enable_network: True # please make sure there is no network risk in your environment
allowed_syscalls: # please leave it empty if you have no idea how seccomp works
proxy:
socks5: ''
http: ''
https: ''

View File

@@ -0,0 +1,35 @@
app:
port: 8194
debug: True
key: dify-sandbox
max_workers: 4
max_requests: 50
worker_timeout: 5
python_path: /usr/local/bin/python3
python_lib_path:
- /usr/local/lib/python3.10
- /usr/lib/python3.10
- /usr/lib/python3
- /usr/lib/x86_64-linux-gnu
- /etc/ssl/certs/ca-certificates.crt
- /etc/nsswitch.conf
- /etc/hosts
- /etc/resolv.conf
- /run/systemd/resolve/stub-resolv.conf
- /run/resolvconf/resolv.conf
- /etc/localtime
- /usr/share/zoneinfo
- /etc/timezone
# add more paths if needed
python_pip_mirror_url: https://pypi.tuna.tsinghua.edu.cn/simple
nodejs_path: /usr/local/bin/node
enable_network: True
allowed_syscalls:
- 1
- 2
- 3
# add all the syscalls which you require
proxy:
socks5: ''
http: ''
https: ''

View File

@@ -7,7 +7,7 @@ app:
use_icon_as_answer_icon: false
dependencies: []
kind: app
version: 0.4.0
version: 0.5.0
workflow:
conversation_variables: []
environment_variables: []
@@ -136,7 +136,16 @@ workflow:
required: true
type: text-input
variable: query
height: 114
- default: ''
hint: ''
label: dataset_apikey
max_length: 100
options: []
placeholder: ''
required: true
type: text-input
variable: dataset_apikey
height: 161
id: '1747125462435'
position:
x: 80
@@ -250,7 +259,7 @@ workflow:
}'
type: json
desc: ''
headers: 'Authorization:Bearer dataset-HeDK9gHBqPnI4rBZ2q2Hm7rV
headers: 'Authorization:Bearer {{#1747125462435.dataset_apikey#}}
Content-Type:application/json'
isInIteration: true
@@ -260,7 +269,7 @@ workflow:
params: ''
retry_config:
max_retries: 3
retry_enabled: true
retry_enabled: false
retry_interval: 100
selected: false
ssl_verify: true
@@ -270,9 +279,9 @@ workflow:
max_write_timeout: 0
title: HTTP 请求
type: http-request
url: http://192.168.0.64:7700/v1/datasets/{{#1747125586388.item#}}/retrieve
url: http://nginx:80/v1/datasets/{{#1747125586388.item#}}/retrieve
variables: []
height: 157
height: 111
id: '1747125795256'
parentId: '1747125586388'
position:
@@ -351,7 +360,7 @@ workflow:
type: custom
width: 242
viewport:
x: 116.27083894320822
y: 126.27330841264018
x: -967.224047730792
y: 147.70051636546336
zoom: 0.8705505632961247
rag_pipeline_variables: []

View File

@@ -9,17 +9,25 @@ dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/siliconflow:0.0.34@1c203017d8ef49fd9152696a42e6dc71ecf272b115d8caf731c99ee0d2956dce
marketplace_plugin_unique_identifier: anspire/anspire_search:0.0.9@a59824e9507c05c81d582cc5d8384197215d91bf5c787150d8aad723eb5d1a69
version: null
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: anspire/anspire_search:0.0.9@a59824e9507c05c81d582cc5d8384197215d91bf5c787150d8aad723eb5d1a69
marketplace_plugin_unique_identifier: langgenius/ollama:0.1.0@7c18c74b94a855de83aa66f376939d47b96a49b6dbb6904b46b267cb0213396e
version: null
kind: app
version: 0.4.0
version: 0.5.0
workflow:
conversation_variables:
- description: ''
id: 71e3f805-8445-46b1-bd43-8af398234527
name: dataset_apikey
selector:
- conversation
- dataset_apikey
value: ''
value_type: string
- description: ''
id: e18aacca-16a2-4d93-80c4-5a85ead53ae4
name: datasets
@@ -225,19 +233,6 @@ workflow:
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: start
targetType: if-else
id: 1762339910800-source-1762421892949-target
selected: false
source: '1762339910800'
sourceHandle: source
target: '1762421892949'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
@@ -257,6 +252,7 @@ workflow:
sourceType: code
targetType: iteration
id: 1762510470105-source-1762339969303-target
selected: false
source: '1762510470105'
sourceHandle: source
target: '1762339969303'
@@ -268,21 +264,11 @@ workflow:
isInLoop: false
sourceType: if-else
targetType: tool
id: 1762421892949-true-1762511001734-target
id: 1762421892949-true-1764314675268-target
selected: false
source: '1762421892949'
sourceHandle: 'true'
target: '1762511001734'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: tool
id: 1762509024795-source-1762511001734-target
source: '1762509024795'
sourceHandle: source
target: '1762511001734'
target: '1764314675268'
targetHandle: target
type: custom
zIndex: 0
@@ -290,13 +276,76 @@ workflow:
isInLoop: false
sourceType: tool
targetType: code
id: 1762511001734-source-1762510470105-target
source: '1762511001734'
id: 1764314675268-source-1762510470105-target
selected: false
source: '1764314675268'
sourceHandle: source
target: '1762510470105'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: tool
id: 1762509024795-source-1764314675268-target
selected: false
source: '1762509024795'
sourceHandle: source
target: '1764314675268'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: start
targetType: if-else
id: 1762339910800-source-1764314703864-target
selected: false
source: '1762339910800'
sourceHandle: source
target: '1764314703864'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: assigner
id: 1764314703864-false-1764314714879-target
selected: false
source: '1764314703864'
sourceHandle: 'false'
target: '1764314714879'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: if-else
id: 1764314714879-source-1762421892949-target
selected: false
source: '1764314714879'
sourceHandle: source
target: '1762421892949'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: if-else
id: 1764314703864-true-1762421892949-target
selected: false
source: '1764314703864'
sourceHandle: 'true'
target: '1762421892949'
targetHandle: target
type: custom
zIndex: 0
nodes:
- data:
selected: false
@@ -321,14 +370,32 @@ workflow:
required: true
type: text-input
variable: datasets
height: 114
- default: ''
hint: ''
label: dataset_apikey
max_length: 100
options: []
placeholder: ''
required: true
type: text-input
variable: dataset_apikey
- default: ''
hint: ''
label: promt
max_length: 2000
options: []
placeholder: ''
required: true
type: paragraph
variable: promt
height: 187
id: '1762339910800'
position:
x: -1233.1402302396395
y: 149.5782401176896
x: -1704.106555788423
y: 174.193204867626
positionAbsolute:
x: -1233.1402302396395
y: 149.5782401176896
x: -1704.106555788423
y: 174.193204867626
selected: false
sourcePosition: right
targetPosition: left
@@ -354,8 +421,8 @@ workflow:
model:
completion_params: {}
mode: chat
name: deepseek-ai/DeepSeek-V3
provider: langgenius/siliconflow/siliconflow
name: qwen-14b
provider: langgenius/ollama/ollama
prompt_config:
jinja2_variables:
- value_selector:
@@ -370,10 +437,14 @@ workflow:
- '1762510470105'
- result
variable: result
- value_selector:
- '1762339910800'
- promt
variable: promt
prompt_template:
- edition_type: jinja2
id: 5d50499d-b81d-43aa-a891-38fd349bd754
jinja2_text: "你是一个专业的思政学习助手,致力于帮助用户学习思想政治理论知识。请基于提供的知识库内容{{ result }},为用户提供准确、简洁的回答。\r\
jinja2_text: "{{ promt }}\r\n\r\n请基于提供的知识库内容{{ result }},为用户提供准确、简洁的回答。\r\
\n\r\n{% if searchData %}\r\n结合 {{ searchData }} 回答用户\r\n{% endif %}\r\
\n{% if fileData %}\r\n结合文件内容 {{ fileData }} 回答用户\r\n{% endif %}\r\n"
role: system
@@ -394,7 +465,7 @@ workflow:
- id: 23264213-e421-4449-b666-a55a0e39e561
role: user
text: ''
selected: false
selected: true
title: LLM
type: llm
vision:
@@ -407,7 +478,7 @@ workflow:
positionAbsolute:
x: 2674.6343495125943
y: 75.75635633814841
selected: false
selected: true
sourcePosition: right
targetPosition: left
type: custom
@@ -496,7 +567,7 @@ workflow:
variable_selector:
- '1762339969303'
- item
height: 92
height: 104
id: '1762339981310'
parentId: '1762339969303'
position:
@@ -958,7 +1029,7 @@ workflow:
type: code
variables:
- value_selector:
- '1762511001734'
- '1764314675268'
- text
value_type: string
variable: text
@@ -1034,10 +1105,44 @@ workflow:
scope: null
template: null
type: string
- auto_generate: null
default: ''
form: llm
human_description:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
label:
en_US: dataset_apikey
ja_JP: dataset_apikey
pt_BR: dataset_apikey
zh_Hans: dataset_apikey
llm_description: ''
max: null
min: null
name: dataset_apikey
options: []
placeholder:
en_US: ''
ja_JP: ''
pt_BR: ''
zh_Hans: ''
precision: null
required: true
scope: null
template: null
type: string
params:
dataset_apikey: ''
dataset_ids: ''
query: ''
provider_id: 019a5dd7-5f2b-7767-b2df-82bfda84c7ec
plugin_id: null
plugin_unique_identifier: null
provider_icon:
background: '#FFEAD5'
content: 🤖
provider_id: e7e4453f-0667-47fe-be4c-62accfbc7cc6
provider_name: 动态知识库检索
provider_type: workflow
selected: false
@@ -1048,6 +1153,9 @@ workflow:
tool_name: dynamic_dataset
tool_node_version: '2'
tool_parameters:
dataset_apikey:
type: mixed
value: '{{#conversation.dataset_apikey#}}'
dataset_ids:
type: mixed
value: '{{#conversation.datasets#}}'
@@ -1056,20 +1164,77 @@ workflow:
value: '{{#sys.query#}}'
type: tool
height: 52
id: '1762511001734'
id: '1764314675268'
position:
x: -142.91348174874167
y: -247.51043561574136
x: -165.1249185156642
y: -247.5444668446392
positionAbsolute:
x: -142.91348174874167
y: -247.51043561574136
selected: true
x: -165.1249185156642
y: -247.5444668446392
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: not empty
id: 3123b598-113d-453f-b3fc-d04b6e83a35e
value: ''
varType: string
variable_selector:
- conversation
- dataset_apikey
id: 'true'
logical_operator: and
selected: false
title: 条件分支 3
type: if-else
height: 124
id: '1764314703864'
position:
x: -1295.7675522246373
y: -98.76989654474232
positionAbsolute:
x: -1295.7675522246373
y: -98.76989654474232
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '1762339910800'
- dataset_apikey
variable_selector:
- conversation
- dataset_apikey
write_mode: over-write
selected: false
title: 变量赋值 2
type: assigner
version: '2'
height: 84
id: '1764314714879'
position:
x: -988.84455927465
y: -5.23303049498395
positionAbsolute:
x: -988.84455927465
y: -5.23303049498395
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
viewport:
x: 863.6452676587132
y: 446.19950772630614
zoom: 0.9236555375410279
x: -1068.6187404167313
y: 347.5222255720734
zoom: 0.6093853943072881
rag_pipeline_variables: []

View File

@@ -183,7 +183,7 @@
condition_value, points, order_num, creator, updater, create_time, update_time,
delete_time, deleted
) VALUES (
#{ID}, #{achievementID}, #{name}, #{description}, #{icon}, #{type}, #{level},
#{id}, #{achievementID}, #{name}, #{description}, #{icon}, #{type}, #{level},
#{conditionType}, #{conditionValue}, #{points}, #{orderNum}, #{creator}, #{updater},
#{createTime}, #{updateTime}, #{deleteTime}, #{deleted}
)
@@ -236,13 +236,13 @@
deleted = #{deleted},
</if>
</set>
WHERE id = #{ID}
WHERE id = #{id}
</update>
<!-- 删除成就 -->
<delete id="deleteAchievement" parameterType="org.xyzh.common.dto.usercenter.TbAchievement">
DELETE FROM tb_achievement
WHERE id = #{ID}
WHERE id = #{id}
</delete>
<!-- 批量插入成就 -->

View File

@@ -118,7 +118,7 @@
INSERT INTO tb_user_achievement (
id, user_id, achievement_id, obtain_time
) VALUES (
#{ID}, #{userID}, #{achievementID}, #{obtainTime}
#{id}, #{userID}, #{achievementID}, #{obtainTime}
)
</insert>
@@ -136,7 +136,7 @@
obtain_time = #{obtainTime},
</if>
</set>
WHERE id = #{ID}
WHERE id = #{id}
</update>
<!-- 删除用户成就 -->

View File

@@ -65,7 +65,7 @@
id, user_id, achievement_id, current_value, target_value,
progress_percentage, completed, last_update_time, create_time
) VALUES (
#{ID}, #{userID}, #{achievementID}, #{currentValue}, #{targetValue},
#{id}, #{userID}, #{achievementID}, #{currentValue}, #{targetValue},
#{progressPercentage}, #{completed}, #{lastUpdateTime}, #{createTime}
)
</insert>
@@ -90,7 +90,7 @@
last_update_time = #{lastUpdateTime},
</if>
</set>
WHERE id = #{ID}
WHERE id = #{id}
</update>
<!-- 增加进度值 -->

View File

@@ -64,7 +64,7 @@
<if test="updater != null">updater = #{updater},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</set>
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- 逻辑删除智能体配置 -->
@@ -73,7 +73,7 @@
SET deleted = 1,
delete_time = NOW(),
updater = #{updater}
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- 根据ID查询智能体配置 -->

View File

@@ -61,7 +61,7 @@
status, is_favorite, is_pinned, message_count, total_tokens,
last_message_time, create_time, update_time, deleted
) VALUES (
#{ID}, #{userID}, #{agentID}, #{title}, #{summary}, #{difyConversationId},
#{id}, #{userID}, #{agentID}, #{title}, #{summary}, #{difyConversationId},
#{status}, #{isFavorite}, #{isPinned}, #{messageCount}, #{totalTokens},
#{lastMessageTime}, #{createTime}, #{updateTime}, #{deleted}
)
@@ -82,12 +82,12 @@
<if test="lastMessageTime != null">last_message_time = #{lastMessageTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</set>
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- 逻辑删除会话 -->
<update id="deleteConversation" parameterType="org.xyzh.common.dto.ai.TbAiConversation">
DELETE FROM tb_ai_conversation WHERE id = #{ID}
DELETE FROM tb_ai_conversation WHERE id = #{id}
</update>
<!-- 根据ID查询会话 -->

View File

@@ -197,7 +197,7 @@
vector_id, document_count, total_chunks, status, creator, creator_dept,
updater, create_time, update_time, deleted
) VALUES (
#{ID}, #{title}, #{avatar}, #{description}, #{content}, #{sourceType}, #{sourceID}, #{fileName}, #{filePath},
#{id}, #{title}, #{avatar}, #{description}, #{content}, #{sourceType}, #{sourceID}, #{fileName}, #{filePath},
#{category}, #{tags}, #{difyDatasetId}, #{difyIndexingTechnique}, #{embeddingModel}, #{embeddingModelProvider},
#{rerankModel}, #{rerankModelProvider}, #{rerankingEnable}, #{retrievalTopK}, #{retrievalScoreThreshold},
#{vectorID}, #{documentCount}, #{totalChunks}, #{status}, #{creator}, #{creatorDept},
@@ -235,7 +235,7 @@
<if test="updater != null">updater = #{updater},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</set>
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- deleteKnowledge逻辑删除知识库 -->
@@ -244,7 +244,7 @@
SET deleted = 1,
delete_time = NOW(),
updater = #{updater}
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- selectKnowledgeById根据ID查询知识库不带权限校验 -->

View File

@@ -50,7 +50,7 @@
file_ids, knowledge_ids, knowledge_refs, token_count,
dify_message_id, rating, feedback, create_time, update_time, deleted
) VALUES (
#{ID}, #{conversationID}, #{userID}, #{agentID}, #{role}, #{content},
#{id}, #{conversationID}, #{userID}, #{agentID}, #{role}, #{content},
#{fileIDs}, #{knowledgeIDs}, #{knowledgeRefs}, #{tokenCount},
#{difyMessageId}, #{rating}, #{feedback}, #{createTime}, #{updateTime}, #{deleted}
)
@@ -70,7 +70,7 @@
<if test="feedback != null">feedback = #{feedback},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</set>
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- 逻辑删除消息 -->
@@ -78,7 +78,7 @@
UPDATE tb_ai_message
SET deleted = 1,
delete_time = NOW()
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- 根据ID查询消息 -->

View File

@@ -73,7 +73,7 @@
chunk_count, status, error_message, enabled, display_status,
create_time, update_time, deleted
) VALUES (
#{ID}, #{userID}, #{knowledgeId}, #{conversationID}, #{messageID}, #{sysFileId}, #{fileName}, #{filePath}, #{fileSize},
#{id}, #{userID}, #{knowledgeId}, #{conversationID}, #{messageID}, #{sysFileId}, #{fileName}, #{filePath}, #{fileSize},
#{fileType}, #{mimeType}, #{extractedText}, #{difyDocumentId}, #{difyBatchId}, #{difyUploadFileId},
#{chunkCount}, #{status}, #{errorMessage}, #{enabled}, #{displayStatus},
#{createTime}, #{updateTime}, #{deleted}
@@ -105,7 +105,7 @@
<if test="displayStatus != null">display_status = #{displayStatus},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</set>
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- deleteUploadFile逻辑删除文件记录 -->
@@ -113,7 +113,7 @@
UPDATE tb_ai_upload_file
SET deleted = 1,
delete_time = NOW()
WHERE id = #{ID} AND deleted = 0
WHERE id = #{id} AND deleted = 0
</update>
<!-- selectUploadFileById根据ID查询文件 -->

View File

@@ -671,21 +671,21 @@ public class MessageServiceImpl implements MessageService {
switch (target.getTargetType()) {
case "dept":
// 查询该部门及所有子部门的用户
userIDs = userMapper.selectUserIdsByDeptId(target.getTargetId());
logger.info("部门 {} 解析到 {} 个用户", target.getTargetId(), userIDs.size());
userIDs = userMapper.selectUserIdsByDeptId(target.getTargetID());
logger.info("部门 {} 解析到 {} 个用户", target.getTargetID(), userIDs.size());
break;
case "role":
// 查询scopeDeptID及子部门中该角色的用户
String scopeDeptID = target.getScopeDeptID();
if (scopeDeptID == null || scopeDeptID.isEmpty()) {
logger.warn("角色目标缺少 scopeDeptID跳过{}", target.getTargetId());
logger.warn("角色目标缺少 scopeDeptID跳过{}", target.getTargetID());
break;
}
userIDs = userMapper.selectUserIdsByDeptRole(scopeDeptID, target.getTargetId());
logger.info("部门 {} 中角色 {} 解析到 {} 个用户", scopeDeptID, target.getTargetId(), userIDs.size());
userIDs = userMapper.selectUserIdsByDeptRole(scopeDeptID, target.getTargetID());
logger.info("部门 {} 中角色 {} 解析到 {} 个用户", scopeDeptID, target.getTargetID(), userIDs.size());
break;
case "user":
userIDs.add(target.getTargetId());
userIDs.add(target.getTargetID());
break;
}

View File

@@ -12,8 +12,7 @@
<style lang="scss">
#app {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB',
'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-family: 'Source Han Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
height: 100vh;

View File

@@ -75,9 +75,17 @@ export const chatApi = {
// 监听标准消息事件
eventSource.addEventListener('message', (event) => {
const data = event.data;
fullMessage += data;
callback?.onMessage?.(data);
try {
// 解析JSON字符串处理Unicode转义
const data = JSON.parse(event.data);
fullMessage += data;
callback?.onMessage?.(data);
} catch (e) {
// 如果不是JSON直接使用原始数据
const data = event.data;
fullMessage += data;
callback?.onMessage?.(data);
}
});
// 监听结束事件
@@ -335,9 +343,17 @@ export const chatApi = {
// 监听标准消息事件
eventSource.addEventListener('message', (event) => {
const data = event.data;
fullMessage += data;
callback?.onMessage?.(data);
try {
// 解析JSON字符串处理Unicode转义
const data = JSON.parse(event.data);
fullMessage += data;
callback?.onMessage?.(data);
} catch (e) {
// 如果不是JSON直接使用原始数据
const data = event.data;
fullMessage += data;
callback?.onMessage?.(data);
}
});
// 监听结束事件

View File

@@ -5,6 +5,55 @@
* @figma https://www.figma.com/design/4aM0yqyoAjtW2jTZcqPAtN
*/
// ============ 字体声明 ============
@font-face {
font-family: 'Source Han Sans SC';
src: url('/font/siyuan/SOURCEHANSANSCN-EXTRALIGHT.OTF') format('opentype');
font-weight: 200;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Source Han Sans SC';
src: url('/font/siyuan/SOURCEHANSANSCN-LIGHT.OTF') format('opentype');
font-weight: 300;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Source Han Sans SC';
src: url('/font/siyuan/SOURCEHANSANSCN-REGULAR.OTF') format('opentype');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Source Han Sans SC';
src: url('/font/siyuan/SOURCEHANSANSCN-MEDIUM.OTF') format('opentype');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Source Han Sans SC';
src: url('/font/siyuan/SOURCEHANSANSCN-BOLD.OTF') format('opentype');
font-weight: 700;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Source Han Sans SC';
src: url('/font/siyuan/SOURCEHANSANSCN-HEAVY.OTF') format('opentype');
font-weight: 900;
font-style: normal;
font-display: swap;
}
// ============ 设计令牌 (Design Tokens) ============
// 颜色
@@ -18,8 +67,8 @@ $color-bg-white: #FFFFFF; // 白色背景
$color-border: #dcdfe6; // 边框
// 字体
$font-family-cn: 'PingFang SC', 'Microsoft YaHei', sans-serif;
$font-family-en: 'Nunito Sans', sans-serif;
$font-family-cn: 'Source Han Sans SC', sans-serif;
$font-family-en: 'Source Han Sans SC', sans-serif;
$font-size-base: 14px;
$line-height-base: 1.571428571em;

View File

@@ -41,7 +41,7 @@ withDefaults(defineProps<Props>(), {
}
.head-title {
font-family: 'MiSans VF', 'PingFang SC';
font-family: 'Source Han Sans SC', sans-serif;
font-weight: 630;
font-size: 40px;
line-height: 1.2;
@@ -57,7 +57,7 @@ withDefaults(defineProps<Props>(), {
}
.breadcrumb-label {
font-family: 'PingFang SC';
font-family: 'Source Han Sans SC', sans-serif;
font-weight: 500;
font-size: 14px;
line-height: 22px;
@@ -72,7 +72,7 @@ withDefaults(defineProps<Props>(), {
}
.breadcrumb-item {
font-family: 'PingFang SC';
font-family: 'Source Han Sans SC', sans-serif;
font-weight: 500;
font-size: 14px;
line-height: 22px;
@@ -84,7 +84,7 @@ withDefaults(defineProps<Props>(), {
}
.separator {
font-family: 'PingFang SC';
font-family: 'Source Han Sans SC', sans-serif;
font-size: 14px;
color: #C9CDD4;
}

View File

@@ -196,7 +196,7 @@ function handleClick(menu: SysMenu) {
color: #334155;
font-size: 16px;
font-weight: 500;
font-family: 'PingFang SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
font-family: 'Source Han Sans SC', sans-serif;
line-height: 1.5;
transition: color 0.3s;
user-select: none;

View File

@@ -63,7 +63,7 @@ function handleMenuClick(menu: SysMenu) {
display: flex;
align-items: center;
justify-content: center;
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
line-height: 1.5em;

View File

@@ -55,7 +55,7 @@ input {
padding: 0 90px 0 20px;
border: none;
outline: none;
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-size: 14px;
color: #141F38;

View File

@@ -256,7 +256,7 @@ function handleLogout() {
}
.logo-text {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 700;
font-size: 20.6px;
line-height: 1.31;
@@ -328,7 +328,7 @@ function handleLogout() {
gap: 2px;
padding: 26px 21px;
color: #141F38;
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
line-height: 1.5;
@@ -380,7 +380,7 @@ function handleLogout() {
gap: 8px;
padding: 12px 16px;
color: #333;
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.5;
@@ -425,7 +425,7 @@ function handleLogout() {
border: none;
outline: none;
padding: 7px 20px;
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.57;

View File

@@ -47,7 +47,7 @@
<el-form-item label="助手描述">
<el-input
v-model="configForm.systemPrompt"
v-model="configForm.description"
type="textarea"
:rows="8"
placeholder="请输入助手描述介绍AI助手的功能、特点和用途..."
@@ -104,7 +104,7 @@ defineOptions({
const configForm = ref<AiAgentConfig>({
name: '',
avatar: '',
systemPrompt: '',
description: '',
connectInternet: 0,
modelName: '',
modelProvider: 'dify',

View File

@@ -348,7 +348,7 @@ function handleDialogClose() {
.title {
margin: 0;
font-family: 'Inter', 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 16px;
line-height: 1.5em;
@@ -366,7 +366,7 @@ function handleDialogClose() {
border: none;
border-radius: 8px;
color: #FFFFFF;
font-family: 'Inter', 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 14px;
line-height: 1.43em;
@@ -409,7 +409,7 @@ function handleDialogClose() {
.category-title {
margin: 0;
font-family: 'Inter', 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 18px;
line-height: 1.5em;
@@ -417,7 +417,7 @@ function handleDialogClose() {
}
.category-count {
font-family: 'Inter', 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.5em;
@@ -462,7 +462,7 @@ function handleDialogClose() {
}
.tag-name {
font-family: 'Inter', 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 16px;
line-height: 1.5em;
@@ -478,7 +478,7 @@ function handleDialogClose() {
background: #ECEEF2;
border: 1px solid transparent;
border-radius: 8px;
font-family: 'Inter', 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 12px;
line-height: 1.33em;
@@ -501,7 +501,7 @@ function handleDialogClose() {
background: #FFFFFF;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 8px;
font-family: 'Inter', 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 14px;
line-height: 1.43em;

View File

@@ -111,7 +111,7 @@ function handleClick() {
justify-content: center;
box-sizing: border-box;
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 0.875em;
line-height: 1.57;
@@ -126,7 +126,7 @@ function handleClick() {
flex-direction: column;
.article-title {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 1.25em;
line-height: 1.4;
@@ -141,7 +141,7 @@ function handleClick() {
}
.article-desc {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 0.875em;
line-height: 1.57;
@@ -173,7 +173,7 @@ function handleClick() {
}
span {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 0.875em;
line-height: 1.57;
@@ -182,7 +182,7 @@ function handleClick() {
}
.view-count {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 0.875em;
line-height: 1.57;

View File

@@ -113,7 +113,7 @@ function handleClick() {
box-sizing: border-box;
.day {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 1.875em;
line-height: 0.73;
@@ -123,7 +123,7 @@ function handleClick() {
}
.month {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 0.875em;
line-height: 1.57;
@@ -140,7 +140,7 @@ function handleClick() {
flex-direction: column;
.card-title {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 1.25em;
line-height: 1.4;
@@ -155,7 +155,7 @@ function handleClick() {
}
.card-desc {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 0.875em;
line-height: 1.57;

View File

@@ -735,7 +735,7 @@ defineExpose({
}
.article-title {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 28px;
line-height: 28px;
@@ -753,7 +753,7 @@ defineExpose({
}
.meta-item {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 28px;
@@ -780,7 +780,7 @@ defineExpose({
}
.article-content {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 16px;
line-height: 30px;

View File

@@ -69,7 +69,7 @@ function handleLearn() {
background: #FFFFFF;
border-radius: 12px;
border: none;
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 16px;
line-height: 22.4px;

View File

@@ -530,7 +530,7 @@ function formatDuration(minutes?: number): string {
}
.course-title {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 20px;
line-height: 1.4;
@@ -539,7 +539,7 @@ function formatDuration(minutes?: number): string {
}
.course-desc {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.57;
@@ -568,7 +568,7 @@ function formatDuration(minutes?: number): string {
}
span {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.57;
@@ -590,7 +590,7 @@ function formatDuration(minutes?: number): string {
gap: 14px;
.progress-label {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 14px;
line-height: 1.71;
@@ -620,7 +620,7 @@ function formatDuration(minutes?: number): string {
}
.progress-percent {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 14px;
line-height: 1.71;
@@ -637,7 +637,7 @@ function formatDuration(minutes?: number): string {
:deep(.el-button) {
height: 42px;
border-radius: 8px;
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
padding: 8px 24px;
@@ -727,7 +727,7 @@ function formatDuration(minutes?: number): string {
}
.title-text {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 16px;
line-height: 1.5;
@@ -772,7 +772,7 @@ function formatDuration(minutes?: number): string {
}
.chapter-name {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
line-height: 1.5;
@@ -806,7 +806,7 @@ function formatDuration(minutes?: number): string {
flex: 1;
.node-number {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.57;
@@ -825,7 +825,7 @@ function formatDuration(minutes?: number): string {
}
.node-name {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.57;
@@ -836,7 +836,7 @@ function formatDuration(minutes?: number): string {
.node-right {
.node-status {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.57;

View File

@@ -540,7 +540,7 @@ onMounted(() => {
margin-top: 46.66px;
p {
font-family: 'Taipei Sans TC Beta', 'PingFang SC', sans-serif;
font-family: 'Source Han Sans SC', sans-serif;
font-weight: 700;
font-size: 50px;
line-height: 1.42;
@@ -606,7 +606,7 @@ onMounted(() => {
}
.login-title {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 16px;
line-height: 1.5;
@@ -762,7 +762,7 @@ onMounted(() => {
border: none;
border-radius: 12px;
color: #FFFFFF;
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
line-height: 1.4;
@@ -774,7 +774,7 @@ onMounted(() => {
}
.agreement-text {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 10px;
line-height: 1.8;
@@ -788,7 +788,7 @@ onMounted(() => {
width: 100%;
.register-link {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 12px;
line-height: 1.83;
@@ -806,7 +806,7 @@ onMounted(() => {
}
.copyright {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-size: 12px;
line-height: 2;
color: #D9D9D9;

View File

@@ -557,7 +557,7 @@ onUnmounted(() => {
margin-top: 46.66px;
p {
font-family: 'Taipei Sans TC Beta', 'PingFang SC', sans-serif;
font-family: 'Source Han Sans SC', sans-serif;
font-weight: 700;
font-size: 50px;
line-height: 1.42;
@@ -623,7 +623,7 @@ onUnmounted(() => {
}
.register-title {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 16px;
line-height: 1.5;
@@ -718,7 +718,7 @@ onUnmounted(() => {
border: none;
border-radius: 12px;
color: #FFFFFF;
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
line-height: 1.4;
@@ -730,7 +730,7 @@ onUnmounted(() => {
}
.agreement-text {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 10px;
line-height: 1.8;
@@ -744,7 +744,7 @@ onUnmounted(() => {
width: 100%;
.login-link {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 12px;
line-height: 1.83;
@@ -762,7 +762,7 @@ onUnmounted(() => {
}
.copyright {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-size: 12px;
line-height: 2;
color: #D9D9D9;

View File

@@ -104,7 +104,7 @@ function getChartOption(): EChartsOption {
axisLabel: {
color: '#979797',
fontSize: 14,
fontFamily: 'PingFang SC'
fontFamily: 'Source Han Sans SC'
}
},
yAxis: {
@@ -121,7 +121,7 @@ function getChartOption(): EChartsOption {
axisLabel: {
color: '#979797',
fontSize: 14,
fontFamily: 'PingFang SC'
fontFamily: 'Source Han Sans SC";'
},
splitLine: {
lineStyle: {
@@ -221,7 +221,7 @@ onUnmounted(() => {
}
.progress-title {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 20px;
line-height: 38px;
@@ -230,7 +230,7 @@ onUnmounted(() => {
}
.update-time {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 22px;
@@ -254,7 +254,7 @@ onUnmounted(() => {
background: transparent;
border: none;
border-radius: 6px;
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 14px;
line-height: 22px;

View File

@@ -512,7 +512,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
}
.header-text {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 16px;
line-height: 1.5;
@@ -527,7 +527,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
padding: 10px;
.task-title {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 20px;
line-height: 1.4;
@@ -536,7 +536,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
}
.task-description {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.5714285714285714;
@@ -560,7 +560,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
display: flex;
align-items: center;
gap: 7px;
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 1.5714285714285714;
@@ -612,7 +612,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
gap: 8px;
.stat-label {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 16px;
line-height: 1.5714285714285714;
@@ -620,7 +620,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
}
.stat-value {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 32px;
line-height: 1;
@@ -654,7 +654,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
.progress-label,
.progress-value {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
line-height: 1.5;

View File

@@ -234,7 +234,7 @@ onMounted(() => {
}
.section {
max-width: 1440px;
// max-width: 1440px;
margin: 0 auto;
padding: 0 120px;
margin-top: 60px;
@@ -246,7 +246,7 @@ onMounted(() => {
margin-bottom: 24px;
.section-title {
font-family: 'PingFang SC';
font-family: 'Source Han Sans SC', sans-serif;
font-weight: 600;
font-size: 28px;
line-height: 38px;
@@ -262,7 +262,7 @@ onMounted(() => {
transition: color 0.3s;
span {
font-family: 'PingFang SC';
font-family: 'Source Han Sans SC', sans-serif;
font-weight: 400;
font-size: 16px;
line-height: 24px;

View File

@@ -347,7 +347,8 @@ onMounted(() => {
.my-message-list {
padding: 20px;
max-width: 1200px;
width: 90%;
// max-width: 1200px;
margin: 0 auto;
min-height: calc(100vh - 76px - 40px);
display: flex;

View File

@@ -113,7 +113,8 @@ async function handleArticleNavigate(direction: 'prev' | 'next', resourceId: str
padding: 20px 0;
:deep(.resource-search) {
width: 1200px;
// width: 1200px;
width: 90%;
height: 60px;
padding: 0;
@@ -145,7 +146,7 @@ async function handleArticleNavigate(direction: 'prev' | 'next', resourceId: str
}
.content-container {
width: 1200px;
width: 90%;
display: flex;
align-items: flex-start;
gap: 24px;

View File

@@ -48,7 +48,7 @@ function handleNavigate(direction: 'prev' | 'next') {
}
.nav-link {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
line-height: 24px;

View File

@@ -60,7 +60,7 @@ function handleCollect() {
}
span {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 24px;

View File

@@ -231,7 +231,7 @@ defineExpose({
}
.resource-title {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 28px;
line-height: 28px;
@@ -251,7 +251,7 @@ defineExpose({
}
span {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 24px;
@@ -260,7 +260,7 @@ defineExpose({
}
.resource-summary {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 16px;
line-height: 24px;
@@ -278,7 +278,7 @@ defineExpose({
.empty {
text-align: center;
padding: 20px;
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-size: 14px;
color: #979797;
}

View File

@@ -107,7 +107,7 @@ function handleCategoryClick(category: Tag) {
}
.category-name {
font-family: 'PingFang SC';
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 16px;
line-height: 24px;

View File

@@ -57,4 +57,12 @@ function handleMenuClick(menu: SysMenu) {
min-height: 100vh;
background: #F9F9F9;
}
:deep(.menu-container){
width: 90%;
max-width: none;
}
:deep(.main-content .container){
width: 90%;
max-width: none !important;
}
</style>

View File

@@ -63,14 +63,14 @@ const menus = computed(() => {
}
.user-card-wrapper {
width: 100%;
width: 90%;
height: 25%;
display: flex;
justify-content: center;
}
.content-wrapper {
width: 100%;
width: 90%;
height: 75%;
display: flex;

View File

@@ -117,7 +117,7 @@ onMounted(async () => {
}
.title {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 20px;
line-height: 28px;
@@ -130,7 +130,7 @@ onMounted(async () => {
background: rgba(198, 40, 40, 0.05);
border: 1px solid #C62828;
border-radius: 4px;
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 16px;
line-height: 24px;
@@ -178,7 +178,7 @@ onMounted(async () => {
}
.username {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 600;
font-size: 20px;
line-height: 24px;
@@ -198,7 +198,7 @@ onMounted(async () => {
}
.gender-text {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 24px;
@@ -212,7 +212,7 @@ onMounted(async () => {
}
.info-item {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 22px;
@@ -226,7 +226,7 @@ onMounted(async () => {
}
.info-label {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 400;
font-size: 14px;
line-height: 22px;
@@ -239,7 +239,7 @@ onMounted(async () => {
}
.level-text {
font-family: 'PingFang SC', sans-serif;
font-family: "Source Han Sans SC";
font-weight: 500;
font-size: 12px;
line-height: 24px;