Compare commits
9 Commits
1.0
...
80ddcc96d3
| Author | SHA1 | Date | |
|---|---|---|---|
| 80ddcc96d3 | |||
| 0304804057 | |||
| 9570745a94 | |||
| 241807325b | |||
| 7d62f3a9ed | |||
| 3b468e3177 | |||
| f6849b33c3 | |||
| 1335959881 | |||
| a5db05fba6 |
32
.gitignore
vendored
32
.gitignore
vendored
@@ -5,4 +5,34 @@ build_output
|
|||||||
docker/schoolNews/volumes/
|
docker/schoolNews/volumes/
|
||||||
docker/schoolNews/crawler
|
docker/schoolNews/crawler
|
||||||
docker.zip
|
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
BIN
docker/dify.zip
Normal file
Binary file not shown.
@@ -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>
|
||||||
1
docker/dify/volumes/oceanbase/init.d/vec_memory.sql
Normal file
1
docker/dify/volumes/oceanbase/init.d/vec_memory.sql
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
|
||||||
222
docker/dify/volumes/opensearch/opensearch_dashboards.yml
Normal file
222
docker/dify/volumes/opensearch/opensearch_dashboards.yml
Normal 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'
|
||||||
14
docker/dify/volumes/sandbox/conf/config.yaml
Normal file
14
docker/dify/volumes/sandbox/conf/config.yaml
Normal 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: ''
|
||||||
35
docker/dify/volumes/sandbox/conf/config.yaml.example
Normal file
35
docker/dify/volumes/sandbox/conf/config.yaml.example
Normal 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: ''
|
||||||
@@ -7,7 +7,7 @@ app:
|
|||||||
use_icon_as_answer_icon: false
|
use_icon_as_answer_icon: false
|
||||||
dependencies: []
|
dependencies: []
|
||||||
kind: app
|
kind: app
|
||||||
version: 0.4.0
|
version: 0.5.0
|
||||||
workflow:
|
workflow:
|
||||||
conversation_variables: []
|
conversation_variables: []
|
||||||
environment_variables: []
|
environment_variables: []
|
||||||
@@ -136,7 +136,16 @@ workflow:
|
|||||||
required: true
|
required: true
|
||||||
type: text-input
|
type: text-input
|
||||||
variable: query
|
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'
|
id: '1747125462435'
|
||||||
position:
|
position:
|
||||||
x: 80
|
x: 80
|
||||||
@@ -250,7 +259,7 @@ workflow:
|
|||||||
}'
|
}'
|
||||||
type: json
|
type: json
|
||||||
desc: ''
|
desc: ''
|
||||||
headers: 'Authorization:Bearer dataset-HeDK9gHBqPnI4rBZ2q2Hm7rV
|
headers: 'Authorization:Bearer {{#1747125462435.dataset_apikey#}}
|
||||||
|
|
||||||
Content-Type:application/json'
|
Content-Type:application/json'
|
||||||
isInIteration: true
|
isInIteration: true
|
||||||
@@ -260,7 +269,7 @@ workflow:
|
|||||||
params: ''
|
params: ''
|
||||||
retry_config:
|
retry_config:
|
||||||
max_retries: 3
|
max_retries: 3
|
||||||
retry_enabled: true
|
retry_enabled: false
|
||||||
retry_interval: 100
|
retry_interval: 100
|
||||||
selected: false
|
selected: false
|
||||||
ssl_verify: true
|
ssl_verify: true
|
||||||
@@ -270,9 +279,9 @@ workflow:
|
|||||||
max_write_timeout: 0
|
max_write_timeout: 0
|
||||||
title: HTTP 请求
|
title: HTTP 请求
|
||||||
type: http-request
|
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: []
|
variables: []
|
||||||
height: 157
|
height: 111
|
||||||
id: '1747125795256'
|
id: '1747125795256'
|
||||||
parentId: '1747125586388'
|
parentId: '1747125586388'
|
||||||
position:
|
position:
|
||||||
@@ -351,7 +360,7 @@ workflow:
|
|||||||
type: custom
|
type: custom
|
||||||
width: 242
|
width: 242
|
||||||
viewport:
|
viewport:
|
||||||
x: 116.27083894320822
|
x: -967.224047730792
|
||||||
y: 126.27330841264018
|
y: 147.70051636546336
|
||||||
zoom: 0.8705505632961247
|
zoom: 0.8705505632961247
|
||||||
rag_pipeline_variables: []
|
rag_pipeline_variables: []
|
||||||
|
|||||||
@@ -9,17 +9,25 @@ dependencies:
|
|||||||
- current_identifier: null
|
- current_identifier: null
|
||||||
type: marketplace
|
type: marketplace
|
||||||
value:
|
value:
|
||||||
marketplace_plugin_unique_identifier: langgenius/siliconflow:0.0.34@1c203017d8ef49fd9152696a42e6dc71ecf272b115d8caf731c99ee0d2956dce
|
marketplace_plugin_unique_identifier: anspire/anspire_search:0.0.9@a59824e9507c05c81d582cc5d8384197215d91bf5c787150d8aad723eb5d1a69
|
||||||
version: null
|
version: null
|
||||||
- current_identifier: null
|
- current_identifier: null
|
||||||
type: marketplace
|
type: marketplace
|
||||||
value:
|
value:
|
||||||
marketplace_plugin_unique_identifier: anspire/anspire_search:0.0.9@a59824e9507c05c81d582cc5d8384197215d91bf5c787150d8aad723eb5d1a69
|
marketplace_plugin_unique_identifier: langgenius/ollama:0.1.0@7c18c74b94a855de83aa66f376939d47b96a49b6dbb6904b46b267cb0213396e
|
||||||
version: null
|
version: null
|
||||||
kind: app
|
kind: app
|
||||||
version: 0.4.0
|
version: 0.5.0
|
||||||
workflow:
|
workflow:
|
||||||
conversation_variables:
|
conversation_variables:
|
||||||
|
- description: ''
|
||||||
|
id: 71e3f805-8445-46b1-bd43-8af398234527
|
||||||
|
name: dataset_apikey
|
||||||
|
selector:
|
||||||
|
- conversation
|
||||||
|
- dataset_apikey
|
||||||
|
value: ''
|
||||||
|
value_type: string
|
||||||
- description: ''
|
- description: ''
|
||||||
id: e18aacca-16a2-4d93-80c4-5a85ead53ae4
|
id: e18aacca-16a2-4d93-80c4-5a85ead53ae4
|
||||||
name: datasets
|
name: datasets
|
||||||
@@ -225,19 +233,6 @@ workflow:
|
|||||||
targetHandle: target
|
targetHandle: target
|
||||||
type: custom
|
type: custom
|
||||||
zIndex: 0
|
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:
|
- data:
|
||||||
isInIteration: false
|
isInIteration: false
|
||||||
isInLoop: false
|
isInLoop: false
|
||||||
@@ -257,6 +252,7 @@ workflow:
|
|||||||
sourceType: code
|
sourceType: code
|
||||||
targetType: iteration
|
targetType: iteration
|
||||||
id: 1762510470105-source-1762339969303-target
|
id: 1762510470105-source-1762339969303-target
|
||||||
|
selected: false
|
||||||
source: '1762510470105'
|
source: '1762510470105'
|
||||||
sourceHandle: source
|
sourceHandle: source
|
||||||
target: '1762339969303'
|
target: '1762339969303'
|
||||||
@@ -268,21 +264,11 @@ workflow:
|
|||||||
isInLoop: false
|
isInLoop: false
|
||||||
sourceType: if-else
|
sourceType: if-else
|
||||||
targetType: tool
|
targetType: tool
|
||||||
id: 1762421892949-true-1762511001734-target
|
id: 1762421892949-true-1764314675268-target
|
||||||
|
selected: false
|
||||||
source: '1762421892949'
|
source: '1762421892949'
|
||||||
sourceHandle: 'true'
|
sourceHandle: 'true'
|
||||||
target: '1762511001734'
|
target: '1764314675268'
|
||||||
targetHandle: target
|
|
||||||
type: custom
|
|
||||||
zIndex: 0
|
|
||||||
- data:
|
|
||||||
isInLoop: false
|
|
||||||
sourceType: assigner
|
|
||||||
targetType: tool
|
|
||||||
id: 1762509024795-source-1762511001734-target
|
|
||||||
source: '1762509024795'
|
|
||||||
sourceHandle: source
|
|
||||||
target: '1762511001734'
|
|
||||||
targetHandle: target
|
targetHandle: target
|
||||||
type: custom
|
type: custom
|
||||||
zIndex: 0
|
zIndex: 0
|
||||||
@@ -290,13 +276,76 @@ workflow:
|
|||||||
isInLoop: false
|
isInLoop: false
|
||||||
sourceType: tool
|
sourceType: tool
|
||||||
targetType: code
|
targetType: code
|
||||||
id: 1762511001734-source-1762510470105-target
|
id: 1764314675268-source-1762510470105-target
|
||||||
source: '1762511001734'
|
selected: false
|
||||||
|
source: '1764314675268'
|
||||||
sourceHandle: source
|
sourceHandle: source
|
||||||
target: '1762510470105'
|
target: '1762510470105'
|
||||||
targetHandle: target
|
targetHandle: target
|
||||||
type: custom
|
type: custom
|
||||||
zIndex: 0
|
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:
|
nodes:
|
||||||
- data:
|
- data:
|
||||||
selected: false
|
selected: false
|
||||||
@@ -321,14 +370,32 @@ workflow:
|
|||||||
required: true
|
required: true
|
||||||
type: text-input
|
type: text-input
|
||||||
variable: datasets
|
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'
|
id: '1762339910800'
|
||||||
position:
|
position:
|
||||||
x: -1233.1402302396395
|
x: -1704.106555788423
|
||||||
y: 149.5782401176896
|
y: 174.193204867626
|
||||||
positionAbsolute:
|
positionAbsolute:
|
||||||
x: -1233.1402302396395
|
x: -1704.106555788423
|
||||||
y: 149.5782401176896
|
y: 174.193204867626
|
||||||
selected: false
|
selected: false
|
||||||
sourcePosition: right
|
sourcePosition: right
|
||||||
targetPosition: left
|
targetPosition: left
|
||||||
@@ -354,8 +421,8 @@ workflow:
|
|||||||
model:
|
model:
|
||||||
completion_params: {}
|
completion_params: {}
|
||||||
mode: chat
|
mode: chat
|
||||||
name: deepseek-ai/DeepSeek-V3
|
name: qwen-14b
|
||||||
provider: langgenius/siliconflow/siliconflow
|
provider: langgenius/ollama/ollama
|
||||||
prompt_config:
|
prompt_config:
|
||||||
jinja2_variables:
|
jinja2_variables:
|
||||||
- value_selector:
|
- value_selector:
|
||||||
@@ -370,10 +437,14 @@ workflow:
|
|||||||
- '1762510470105'
|
- '1762510470105'
|
||||||
- result
|
- result
|
||||||
variable: result
|
variable: result
|
||||||
|
- value_selector:
|
||||||
|
- '1762339910800'
|
||||||
|
- promt
|
||||||
|
variable: promt
|
||||||
prompt_template:
|
prompt_template:
|
||||||
- edition_type: jinja2
|
- edition_type: jinja2
|
||||||
id: 5d50499d-b81d-43aa-a891-38fd349bd754
|
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\r\n{% if searchData %}\r\n结合 {{ searchData }} 回答用户\r\n{% endif %}\r\
|
||||||
\n{% if fileData %}\r\n结合文件内容 {{ fileData }} 回答用户\r\n{% endif %}\r\n"
|
\n{% if fileData %}\r\n结合文件内容 {{ fileData }} 回答用户\r\n{% endif %}\r\n"
|
||||||
role: system
|
role: system
|
||||||
@@ -394,7 +465,7 @@ workflow:
|
|||||||
- id: 23264213-e421-4449-b666-a55a0e39e561
|
- id: 23264213-e421-4449-b666-a55a0e39e561
|
||||||
role: user
|
role: user
|
||||||
text: ''
|
text: ''
|
||||||
selected: false
|
selected: true
|
||||||
title: LLM
|
title: LLM
|
||||||
type: llm
|
type: llm
|
||||||
vision:
|
vision:
|
||||||
@@ -407,7 +478,7 @@ workflow:
|
|||||||
positionAbsolute:
|
positionAbsolute:
|
||||||
x: 2674.6343495125943
|
x: 2674.6343495125943
|
||||||
y: 75.75635633814841
|
y: 75.75635633814841
|
||||||
selected: false
|
selected: true
|
||||||
sourcePosition: right
|
sourcePosition: right
|
||||||
targetPosition: left
|
targetPosition: left
|
||||||
type: custom
|
type: custom
|
||||||
@@ -496,7 +567,7 @@ workflow:
|
|||||||
variable_selector:
|
variable_selector:
|
||||||
- '1762339969303'
|
- '1762339969303'
|
||||||
- item
|
- item
|
||||||
height: 92
|
height: 104
|
||||||
id: '1762339981310'
|
id: '1762339981310'
|
||||||
parentId: '1762339969303'
|
parentId: '1762339969303'
|
||||||
position:
|
position:
|
||||||
@@ -958,7 +1029,7 @@ workflow:
|
|||||||
type: code
|
type: code
|
||||||
variables:
|
variables:
|
||||||
- value_selector:
|
- value_selector:
|
||||||
- '1762511001734'
|
- '1764314675268'
|
||||||
- text
|
- text
|
||||||
value_type: string
|
value_type: string
|
||||||
variable: text
|
variable: text
|
||||||
@@ -1034,10 +1105,44 @@ workflow:
|
|||||||
scope: null
|
scope: null
|
||||||
template: null
|
template: null
|
||||||
type: string
|
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:
|
params:
|
||||||
|
dataset_apikey: ''
|
||||||
dataset_ids: ''
|
dataset_ids: ''
|
||||||
query: ''
|
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_name: 动态知识库检索
|
||||||
provider_type: workflow
|
provider_type: workflow
|
||||||
selected: false
|
selected: false
|
||||||
@@ -1048,6 +1153,9 @@ workflow:
|
|||||||
tool_name: dynamic_dataset
|
tool_name: dynamic_dataset
|
||||||
tool_node_version: '2'
|
tool_node_version: '2'
|
||||||
tool_parameters:
|
tool_parameters:
|
||||||
|
dataset_apikey:
|
||||||
|
type: mixed
|
||||||
|
value: '{{#conversation.dataset_apikey#}}'
|
||||||
dataset_ids:
|
dataset_ids:
|
||||||
type: mixed
|
type: mixed
|
||||||
value: '{{#conversation.datasets#}}'
|
value: '{{#conversation.datasets#}}'
|
||||||
@@ -1056,20 +1164,77 @@ workflow:
|
|||||||
value: '{{#sys.query#}}'
|
value: '{{#sys.query#}}'
|
||||||
type: tool
|
type: tool
|
||||||
height: 52
|
height: 52
|
||||||
id: '1762511001734'
|
id: '1764314675268'
|
||||||
position:
|
position:
|
||||||
x: -142.91348174874167
|
x: -165.1249185156642
|
||||||
y: -247.51043561574136
|
y: -247.5444668446392
|
||||||
positionAbsolute:
|
positionAbsolute:
|
||||||
x: -142.91348174874167
|
x: -165.1249185156642
|
||||||
y: -247.51043561574136
|
y: -247.5444668446392
|
||||||
selected: true
|
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
|
sourcePosition: right
|
||||||
targetPosition: left
|
targetPosition: left
|
||||||
type: custom
|
type: custom
|
||||||
width: 242
|
width: 242
|
||||||
viewport:
|
viewport:
|
||||||
x: 863.6452676587132
|
x: -1068.6187404167313
|
||||||
y: 446.19950772630614
|
y: 347.5222255720734
|
||||||
zoom: 0.9236555375410279
|
zoom: 0.6093853943072881
|
||||||
rag_pipeline_variables: []
|
rag_pipeline_variables: []
|
||||||
|
|||||||
@@ -183,7 +183,7 @@
|
|||||||
condition_value, points, order_num, creator, updater, create_time, update_time,
|
condition_value, points, order_num, creator, updater, create_time, update_time,
|
||||||
delete_time, deleted
|
delete_time, deleted
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{ID}, #{achievementID}, #{name}, #{description}, #{icon}, #{type}, #{level},
|
#{id}, #{achievementID}, #{name}, #{description}, #{icon}, #{type}, #{level},
|
||||||
#{conditionType}, #{conditionValue}, #{points}, #{orderNum}, #{creator}, #{updater},
|
#{conditionType}, #{conditionValue}, #{points}, #{orderNum}, #{creator}, #{updater},
|
||||||
#{createTime}, #{updateTime}, #{deleteTime}, #{deleted}
|
#{createTime}, #{updateTime}, #{deleteTime}, #{deleted}
|
||||||
)
|
)
|
||||||
@@ -236,13 +236,13 @@
|
|||||||
deleted = #{deleted},
|
deleted = #{deleted},
|
||||||
</if>
|
</if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{ID}
|
WHERE id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 删除成就 -->
|
<!-- 删除成就 -->
|
||||||
<delete id="deleteAchievement" parameterType="org.xyzh.common.dto.usercenter.TbAchievement">
|
<delete id="deleteAchievement" parameterType="org.xyzh.common.dto.usercenter.TbAchievement">
|
||||||
DELETE FROM tb_achievement
|
DELETE FROM tb_achievement
|
||||||
WHERE id = #{ID}
|
WHERE id = #{id}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- 批量插入成就 -->
|
<!-- 批量插入成就 -->
|
||||||
|
|||||||
@@ -118,7 +118,7 @@
|
|||||||
INSERT INTO tb_user_achievement (
|
INSERT INTO tb_user_achievement (
|
||||||
id, user_id, achievement_id, obtain_time
|
id, user_id, achievement_id, obtain_time
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{ID}, #{userID}, #{achievementID}, #{obtainTime}
|
#{id}, #{userID}, #{achievementID}, #{obtainTime}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@
|
|||||||
obtain_time = #{obtainTime},
|
obtain_time = #{obtainTime},
|
||||||
</if>
|
</if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{ID}
|
WHERE id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 删除用户成就 -->
|
<!-- 删除用户成就 -->
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
id, user_id, achievement_id, current_value, target_value,
|
id, user_id, achievement_id, current_value, target_value,
|
||||||
progress_percentage, completed, last_update_time, create_time
|
progress_percentage, completed, last_update_time, create_time
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{ID}, #{userID}, #{achievementID}, #{currentValue}, #{targetValue},
|
#{id}, #{userID}, #{achievementID}, #{currentValue}, #{targetValue},
|
||||||
#{progressPercentage}, #{completed}, #{lastUpdateTime}, #{createTime}
|
#{progressPercentage}, #{completed}, #{lastUpdateTime}, #{createTime}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
last_update_time = #{lastUpdateTime},
|
last_update_time = #{lastUpdateTime},
|
||||||
</if>
|
</if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{ID}
|
WHERE id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 增加进度值 -->
|
<!-- 增加进度值 -->
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
<if test="updater != null">updater = #{updater},</if>
|
<if test="updater != null">updater = #{updater},</if>
|
||||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 逻辑删除智能体配置 -->
|
<!-- 逻辑删除智能体配置 -->
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
SET deleted = 1,
|
SET deleted = 1,
|
||||||
delete_time = NOW(),
|
delete_time = NOW(),
|
||||||
updater = #{updater}
|
updater = #{updater}
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 根据ID查询智能体配置 -->
|
<!-- 根据ID查询智能体配置 -->
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
status, is_favorite, is_pinned, message_count, total_tokens,
|
status, is_favorite, is_pinned, message_count, total_tokens,
|
||||||
last_message_time, create_time, update_time, deleted
|
last_message_time, create_time, update_time, deleted
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{ID}, #{userID}, #{agentID}, #{title}, #{summary}, #{difyConversationId},
|
#{id}, #{userID}, #{agentID}, #{title}, #{summary}, #{difyConversationId},
|
||||||
#{status}, #{isFavorite}, #{isPinned}, #{messageCount}, #{totalTokens},
|
#{status}, #{isFavorite}, #{isPinned}, #{messageCount}, #{totalTokens},
|
||||||
#{lastMessageTime}, #{createTime}, #{updateTime}, #{deleted}
|
#{lastMessageTime}, #{createTime}, #{updateTime}, #{deleted}
|
||||||
)
|
)
|
||||||
@@ -82,12 +82,12 @@
|
|||||||
<if test="lastMessageTime != null">last_message_time = #{lastMessageTime},</if>
|
<if test="lastMessageTime != null">last_message_time = #{lastMessageTime},</if>
|
||||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 逻辑删除会话 -->
|
<!-- 逻辑删除会话 -->
|
||||||
<update id="deleteConversation" parameterType="org.xyzh.common.dto.ai.TbAiConversation">
|
<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>
|
</update>
|
||||||
|
|
||||||
<!-- 根据ID查询会话 -->
|
<!-- 根据ID查询会话 -->
|
||||||
|
|||||||
@@ -197,7 +197,7 @@
|
|||||||
vector_id, document_count, total_chunks, status, creator, creator_dept,
|
vector_id, document_count, total_chunks, status, creator, creator_dept,
|
||||||
updater, create_time, update_time, deleted
|
updater, create_time, update_time, deleted
|
||||||
) VALUES (
|
) 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},
|
#{category}, #{tags}, #{difyDatasetId}, #{difyIndexingTechnique}, #{embeddingModel}, #{embeddingModelProvider},
|
||||||
#{rerankModel}, #{rerankModelProvider}, #{rerankingEnable}, #{retrievalTopK}, #{retrievalScoreThreshold},
|
#{rerankModel}, #{rerankModelProvider}, #{rerankingEnable}, #{retrievalTopK}, #{retrievalScoreThreshold},
|
||||||
#{vectorID}, #{documentCount}, #{totalChunks}, #{status}, #{creator}, #{creatorDept},
|
#{vectorID}, #{documentCount}, #{totalChunks}, #{status}, #{creator}, #{creatorDept},
|
||||||
@@ -235,7 +235,7 @@
|
|||||||
<if test="updater != null">updater = #{updater},</if>
|
<if test="updater != null">updater = #{updater},</if>
|
||||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- deleteKnowledge(逻辑删除知识库) -->
|
<!-- deleteKnowledge(逻辑删除知识库) -->
|
||||||
@@ -244,7 +244,7 @@
|
|||||||
SET deleted = 1,
|
SET deleted = 1,
|
||||||
delete_time = NOW(),
|
delete_time = NOW(),
|
||||||
updater = #{updater}
|
updater = #{updater}
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- selectKnowledgeById(根据ID查询知识库,不带权限校验) -->
|
<!-- selectKnowledgeById(根据ID查询知识库,不带权限校验) -->
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
file_ids, knowledge_ids, knowledge_refs, token_count,
|
file_ids, knowledge_ids, knowledge_refs, token_count,
|
||||||
dify_message_id, rating, feedback, create_time, update_time, deleted
|
dify_message_id, rating, feedback, create_time, update_time, deleted
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{ID}, #{conversationID}, #{userID}, #{agentID}, #{role}, #{content},
|
#{id}, #{conversationID}, #{userID}, #{agentID}, #{role}, #{content},
|
||||||
#{fileIDs}, #{knowledgeIDs}, #{knowledgeRefs}, #{tokenCount},
|
#{fileIDs}, #{knowledgeIDs}, #{knowledgeRefs}, #{tokenCount},
|
||||||
#{difyMessageId}, #{rating}, #{feedback}, #{createTime}, #{updateTime}, #{deleted}
|
#{difyMessageId}, #{rating}, #{feedback}, #{createTime}, #{updateTime}, #{deleted}
|
||||||
)
|
)
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<if test="feedback != null">feedback = #{feedback},</if>
|
<if test="feedback != null">feedback = #{feedback},</if>
|
||||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 逻辑删除消息 -->
|
<!-- 逻辑删除消息 -->
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
UPDATE tb_ai_message
|
UPDATE tb_ai_message
|
||||||
SET deleted = 1,
|
SET deleted = 1,
|
||||||
delete_time = NOW()
|
delete_time = NOW()
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 根据ID查询消息 -->
|
<!-- 根据ID查询消息 -->
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
chunk_count, status, error_message, enabled, display_status,
|
chunk_count, status, error_message, enabled, display_status,
|
||||||
create_time, update_time, deleted
|
create_time, update_time, deleted
|
||||||
) VALUES (
|
) 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},
|
#{fileType}, #{mimeType}, #{extractedText}, #{difyDocumentId}, #{difyBatchId}, #{difyUploadFileId},
|
||||||
#{chunkCount}, #{status}, #{errorMessage}, #{enabled}, #{displayStatus},
|
#{chunkCount}, #{status}, #{errorMessage}, #{enabled}, #{displayStatus},
|
||||||
#{createTime}, #{updateTime}, #{deleted}
|
#{createTime}, #{updateTime}, #{deleted}
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
<if test="displayStatus != null">display_status = #{displayStatus},</if>
|
<if test="displayStatus != null">display_status = #{displayStatus},</if>
|
||||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- deleteUploadFile(逻辑删除文件记录) -->
|
<!-- deleteUploadFile(逻辑删除文件记录) -->
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
UPDATE tb_ai_upload_file
|
UPDATE tb_ai_upload_file
|
||||||
SET deleted = 1,
|
SET deleted = 1,
|
||||||
delete_time = NOW()
|
delete_time = NOW()
|
||||||
WHERE id = #{ID} AND deleted = 0
|
WHERE id = #{id} AND deleted = 0
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- selectUploadFileById(根据ID查询文件) -->
|
<!-- selectUploadFileById(根据ID查询文件) -->
|
||||||
|
|||||||
@@ -671,21 +671,21 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
switch (target.getTargetType()) {
|
switch (target.getTargetType()) {
|
||||||
case "dept":
|
case "dept":
|
||||||
// 查询该部门及所有子部门的用户
|
// 查询该部门及所有子部门的用户
|
||||||
userIDs = userMapper.selectUserIdsByDeptId(target.getTargetId());
|
userIDs = userMapper.selectUserIdsByDeptId(target.getTargetID());
|
||||||
logger.info("部门 {} 解析到 {} 个用户", target.getTargetId(), userIDs.size());
|
logger.info("部门 {} 解析到 {} 个用户", target.getTargetID(), userIDs.size());
|
||||||
break;
|
break;
|
||||||
case "role":
|
case "role":
|
||||||
// 查询scopeDeptID及子部门中该角色的用户
|
// 查询scopeDeptID及子部门中该角色的用户
|
||||||
String scopeDeptID = target.getScopeDeptID();
|
String scopeDeptID = target.getScopeDeptID();
|
||||||
if (scopeDeptID == null || scopeDeptID.isEmpty()) {
|
if (scopeDeptID == null || scopeDeptID.isEmpty()) {
|
||||||
logger.warn("角色目标缺少 scopeDeptID,跳过:{}", target.getTargetId());
|
logger.warn("角色目标缺少 scopeDeptID,跳过:{}", target.getTargetID());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
userIDs = userMapper.selectUserIdsByDeptRole(scopeDeptID, target.getTargetId());
|
userIDs = userMapper.selectUserIdsByDeptRole(scopeDeptID, target.getTargetID());
|
||||||
logger.info("部门 {} 中角色 {} 解析到 {} 个用户", scopeDeptID, target.getTargetId(), userIDs.size());
|
logger.info("部门 {} 中角色 {} 解析到 {} 个用户", scopeDeptID, target.getTargetID(), userIDs.size());
|
||||||
break;
|
break;
|
||||||
case "user":
|
case "user":
|
||||||
userIDs.add(target.getTargetId());
|
userIDs.add(target.getTargetID());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-BOLD.OTF
Normal file
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-BOLD.OTF
Normal file
Binary file not shown.
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-EXTRALIGHT.OTF
Normal file
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-EXTRALIGHT.OTF
Normal file
Binary file not shown.
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-HEAVY.OTF
Normal file
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-HEAVY.OTF
Normal file
Binary file not shown.
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-LIGHT.OTF
Normal file
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-LIGHT.OTF
Normal file
Binary file not shown.
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-MEDIUM.OTF
Normal file
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-MEDIUM.OTF
Normal file
Binary file not shown.
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-NORMAL.OTF
Normal file
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-NORMAL.OTF
Normal file
Binary file not shown.
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-REGULAR.OTF
Normal file
BIN
schoolNewsWeb/public/font/siyuan/SOURCEHANSANSCN-REGULAR.OTF
Normal file
Binary file not shown.
@@ -12,8 +12,7 @@
|
|||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
#app {
|
#app {
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB',
|
font-family: 'Source Han Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||||
'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
|
|||||||
@@ -75,9 +75,17 @@ export const chatApi = {
|
|||||||
|
|
||||||
// 监听标准消息事件
|
// 监听标准消息事件
|
||||||
eventSource.addEventListener('message', (event) => {
|
eventSource.addEventListener('message', (event) => {
|
||||||
const data = event.data;
|
try {
|
||||||
fullMessage += data;
|
// 解析JSON字符串,处理Unicode转义
|
||||||
callback?.onMessage?.(data);
|
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) => {
|
eventSource.addEventListener('message', (event) => {
|
||||||
const data = event.data;
|
try {
|
||||||
fullMessage += data;
|
// 解析JSON字符串,处理Unicode转义
|
||||||
callback?.onMessage?.(data);
|
const data = JSON.parse(event.data);
|
||||||
|
fullMessage += data;
|
||||||
|
callback?.onMessage?.(data);
|
||||||
|
} catch (e) {
|
||||||
|
// 如果不是JSON,直接使用原始数据
|
||||||
|
const data = event.data;
|
||||||
|
fullMessage += data;
|
||||||
|
callback?.onMessage?.(data);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 监听结束事件
|
// 监听结束事件
|
||||||
|
|||||||
@@ -5,6 +5,55 @@
|
|||||||
* @figma https://www.figma.com/design/4aM0yqyoAjtW2jTZcqPAtN
|
* @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) ============
|
// ============ 设计令牌 (Design Tokens) ============
|
||||||
|
|
||||||
// 颜色
|
// 颜色
|
||||||
@@ -18,8 +67,8 @@ $color-bg-white: #FFFFFF; // 白色背景
|
|||||||
$color-border: #dcdfe6; // 边框
|
$color-border: #dcdfe6; // 边框
|
||||||
|
|
||||||
// 字体
|
// 字体
|
||||||
$font-family-cn: 'PingFang SC', 'Microsoft YaHei', sans-serif;
|
$font-family-cn: 'Source Han Sans SC', sans-serif;
|
||||||
$font-family-en: 'Nunito Sans', sans-serif;
|
$font-family-en: 'Source Han Sans SC', sans-serif;
|
||||||
$font-size-base: 14px;
|
$font-size-base: 14px;
|
||||||
$line-height-base: 1.571428571em;
|
$line-height-base: 1.571428571em;
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ withDefaults(defineProps<Props>(), {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.head-title {
|
.head-title {
|
||||||
font-family: 'MiSans VF', 'PingFang SC';
|
font-family: 'Source Han Sans SC', sans-serif;
|
||||||
font-weight: 630;
|
font-weight: 630;
|
||||||
font-size: 40px;
|
font-size: 40px;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
@@ -57,7 +57,7 @@ withDefaults(defineProps<Props>(), {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.breadcrumb-label {
|
.breadcrumb-label {
|
||||||
font-family: 'PingFang SC';
|
font-family: 'Source Han Sans SC', sans-serif;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
@@ -72,7 +72,7 @@ withDefaults(defineProps<Props>(), {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.breadcrumb-item {
|
.breadcrumb-item {
|
||||||
font-family: 'PingFang SC';
|
font-family: 'Source Han Sans SC', sans-serif;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
@@ -84,7 +84,7 @@ withDefaults(defineProps<Props>(), {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.separator {
|
.separator {
|
||||||
font-family: 'PingFang SC';
|
font-family: 'Source Han Sans SC', sans-serif;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #C9CDD4;
|
color: #C9CDD4;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ function handleClick(menu: SysMenu) {
|
|||||||
color: #334155;
|
color: #334155;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 500;
|
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;
|
line-height: 1.5;
|
||||||
transition: color 0.3s;
|
transition: color 0.3s;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ function handleMenuClick(menu: SysMenu) {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ input {
|
|||||||
padding: 0 90px 0 20px;
|
padding: 0 90px 0 20px;
|
||||||
border: none;
|
border: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #141F38;
|
color: #141F38;
|
||||||
|
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ function handleLogout() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.logo-text {
|
.logo-text {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 20.6px;
|
font-size: 20.6px;
|
||||||
line-height: 1.31;
|
line-height: 1.31;
|
||||||
@@ -328,7 +328,7 @@ function handleLogout() {
|
|||||||
gap: 2px;
|
gap: 2px;
|
||||||
padding: 26px 21px;
|
padding: 26px 21px;
|
||||||
color: #141F38;
|
color: #141F38;
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
@@ -380,7 +380,7 @@ function handleLogout() {
|
|||||||
gap: 8px;
|
gap: 8px;
|
||||||
padding: 12px 16px;
|
padding: 12px 16px;
|
||||||
color: #333;
|
color: #333;
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
@@ -425,7 +425,7 @@ function handleLogout() {
|
|||||||
border: none;
|
border: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
padding: 7px 20px;
|
padding: 7px 20px;
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
<el-form-item label="助手描述">
|
<el-form-item label="助手描述">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="configForm.systemPrompt"
|
v-model="configForm.description"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
:rows="8"
|
:rows="8"
|
||||||
placeholder="请输入助手描述,介绍AI助手的功能、特点和用途..."
|
placeholder="请输入助手描述,介绍AI助手的功能、特点和用途..."
|
||||||
@@ -104,7 +104,7 @@ defineOptions({
|
|||||||
const configForm = ref<AiAgentConfig>({
|
const configForm = ref<AiAgentConfig>({
|
||||||
name: '',
|
name: '',
|
||||||
avatar: '',
|
avatar: '',
|
||||||
systemPrompt: '',
|
description: '',
|
||||||
connectInternet: 0,
|
connectInternet: 0,
|
||||||
modelName: '',
|
modelName: '',
|
||||||
modelProvider: 'dify',
|
modelProvider: 'dify',
|
||||||
|
|||||||
@@ -348,7 +348,7 @@ function handleDialogClose() {
|
|||||||
|
|
||||||
.title {
|
.title {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: 'Inter', 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
@@ -366,7 +366,7 @@ function handleDialogClose() {
|
|||||||
border: none;
|
border: none;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
font-family: 'Inter', 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.43em;
|
line-height: 1.43em;
|
||||||
@@ -409,7 +409,7 @@ function handleDialogClose() {
|
|||||||
|
|
||||||
.category-title {
|
.category-title {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: 'Inter', 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
@@ -417,7 +417,7 @@ function handleDialogClose() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.category-count {
|
.category-count {
|
||||||
font-family: 'Inter', 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
@@ -462,7 +462,7 @@ function handleDialogClose() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.tag-name {
|
.tag-name {
|
||||||
font-family: 'Inter', 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
@@ -478,7 +478,7 @@ function handleDialogClose() {
|
|||||||
background: #ECEEF2;
|
background: #ECEEF2;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
font-family: 'Inter', 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 1.33em;
|
line-height: 1.33em;
|
||||||
@@ -501,7 +501,7 @@ function handleDialogClose() {
|
|||||||
background: #FFFFFF;
|
background: #FFFFFF;
|
||||||
border: 1px solid rgba(0, 0, 0, 0.1);
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
font-family: 'Inter', 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.43em;
|
line-height: 1.43em;
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ function handleClick() {
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 0.875em;
|
font-size: 0.875em;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
@@ -126,7 +126,7 @@ function handleClick() {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.article-title {
|
.article-title {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 1.25em;
|
font-size: 1.25em;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
@@ -141,7 +141,7 @@ function handleClick() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.article-desc {
|
.article-desc {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 0.875em;
|
font-size: 0.875em;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
@@ -173,7 +173,7 @@ function handleClick() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 0.875em;
|
font-size: 0.875em;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
@@ -182,7 +182,7 @@ function handleClick() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.view-count {
|
.view-count {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 0.875em;
|
font-size: 0.875em;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ function handleClick() {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.day {
|
.day {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 1.875em;
|
font-size: 1.875em;
|
||||||
line-height: 0.73;
|
line-height: 0.73;
|
||||||
@@ -123,7 +123,7 @@ function handleClick() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.month {
|
.month {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 0.875em;
|
font-size: 0.875em;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
@@ -140,7 +140,7 @@ function handleClick() {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 1.25em;
|
font-size: 1.25em;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
@@ -155,7 +155,7 @@ function handleClick() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.card-desc {
|
.card-desc {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 0.875em;
|
font-size: 0.875em;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
|
|||||||
@@ -735,7 +735,7 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
.article-title {
|
.article-title {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
@@ -753,7 +753,7 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
.meta-item {
|
.meta-item {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
@@ -780,7 +780,7 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
.article-content {
|
.article-content {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ function handleLearn() {
|
|||||||
background: #FFFFFF;
|
background: #FFFFFF;
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
border: none;
|
border: none;
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 22.4px;
|
line-height: 22.4px;
|
||||||
|
|||||||
@@ -530,7 +530,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.course-title {
|
.course-title {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
@@ -539,7 +539,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.course-desc {
|
.course-desc {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
@@ -568,7 +568,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
@@ -590,7 +590,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
gap: 14px;
|
gap: 14px;
|
||||||
|
|
||||||
.progress-label {
|
.progress-label {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.71;
|
line-height: 1.71;
|
||||||
@@ -620,7 +620,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.progress-percent {
|
.progress-percent {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.71;
|
line-height: 1.71;
|
||||||
@@ -637,7 +637,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
:deep(.el-button) {
|
:deep(.el-button) {
|
||||||
height: 42px;
|
height: 42px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding: 8px 24px;
|
padding: 8px 24px;
|
||||||
@@ -727,7 +727,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.title-text {
|
.title-text {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
@@ -772,7 +772,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.chapter-name {
|
.chapter-name {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
@@ -806,7 +806,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
.node-number {
|
.node-number {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
@@ -825,7 +825,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.node-name {
|
.node-name {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
@@ -836,7 +836,7 @@ function formatDuration(minutes?: number): string {
|
|||||||
|
|
||||||
.node-right {
|
.node-right {
|
||||||
.node-status {
|
.node-status {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.57;
|
line-height: 1.57;
|
||||||
|
|||||||
@@ -540,7 +540,7 @@ onMounted(() => {
|
|||||||
margin-top: 46.66px;
|
margin-top: 46.66px;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-family: 'Taipei Sans TC Beta', 'PingFang SC', sans-serif;
|
font-family: 'Source Han Sans SC', sans-serif;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
line-height: 1.42;
|
line-height: 1.42;
|
||||||
@@ -606,7 +606,7 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.login-title {
|
.login-title {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
@@ -762,7 +762,7 @@ onMounted(() => {
|
|||||||
border: none;
|
border: none;
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
@@ -774,7 +774,7 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.agreement-text {
|
.agreement-text {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
line-height: 1.8;
|
line-height: 1.8;
|
||||||
@@ -788,7 +788,7 @@ onMounted(() => {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.register-link {
|
.register-link {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 1.83;
|
line-height: 1.83;
|
||||||
@@ -806,7 +806,7 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.copyright {
|
.copyright {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 2;
|
line-height: 2;
|
||||||
color: #D9D9D9;
|
color: #D9D9D9;
|
||||||
|
|||||||
@@ -557,7 +557,7 @@ onUnmounted(() => {
|
|||||||
margin-top: 46.66px;
|
margin-top: 46.66px;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-family: 'Taipei Sans TC Beta', 'PingFang SC', sans-serif;
|
font-family: 'Source Han Sans SC', sans-serif;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
line-height: 1.42;
|
line-height: 1.42;
|
||||||
@@ -623,7 +623,7 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.register-title {
|
.register-title {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
@@ -718,7 +718,7 @@ onUnmounted(() => {
|
|||||||
border: none;
|
border: none;
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
@@ -730,7 +730,7 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.agreement-text {
|
.agreement-text {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
line-height: 1.8;
|
line-height: 1.8;
|
||||||
@@ -744,7 +744,7 @@ onUnmounted(() => {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.login-link {
|
.login-link {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 1.83;
|
line-height: 1.83;
|
||||||
@@ -762,7 +762,7 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.copyright {
|
.copyright {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 2;
|
line-height: 2;
|
||||||
color: #D9D9D9;
|
color: #D9D9D9;
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ function getChartOption(): EChartsOption {
|
|||||||
axisLabel: {
|
axisLabel: {
|
||||||
color: '#979797',
|
color: '#979797',
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
fontFamily: 'PingFang SC'
|
fontFamily: 'Source Han Sans SC'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
@@ -121,7 +121,7 @@ function getChartOption(): EChartsOption {
|
|||||||
axisLabel: {
|
axisLabel: {
|
||||||
color: '#979797',
|
color: '#979797',
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
fontFamily: 'PingFang SC'
|
fontFamily: 'Source Han Sans SC";'
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
@@ -221,7 +221,7 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.progress-title {
|
.progress-title {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
line-height: 38px;
|
line-height: 38px;
|
||||||
@@ -230,7 +230,7 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.update-time {
|
.update-time {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
@@ -254,7 +254,7 @@ onUnmounted(() => {
|
|||||||
background: transparent;
|
background: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
|
|||||||
@@ -512,7 +512,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.header-text {
|
.header-text {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
@@ -527,7 +527,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
|
|||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
.task-title {
|
.task-title {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
@@ -536,7 +536,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.task-description {
|
.task-description {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.5714285714285714;
|
line-height: 1.5714285714285714;
|
||||||
@@ -560,7 +560,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 7px;
|
gap: 7px;
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.5714285714285714;
|
line-height: 1.5714285714285714;
|
||||||
@@ -612,7 +612,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
|
|||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
|
||||||
.stat-label {
|
.stat-label {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5714285714285714;
|
line-height: 1.5714285714285714;
|
||||||
@@ -620,7 +620,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.stat-value {
|
.stat-value {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
@@ -654,7 +654,7 @@ function getItemStatusType(status?: number): 'info' | 'warning' | 'success' {
|
|||||||
|
|
||||||
.progress-label,
|
.progress-label,
|
||||||
.progress-value {
|
.progress-value {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.section {
|
.section {
|
||||||
max-width: 1440px;
|
// max-width: 1440px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 0 120px;
|
padding: 0 120px;
|
||||||
margin-top: 60px;
|
margin-top: 60px;
|
||||||
@@ -246,7 +246,7 @@ onMounted(() => {
|
|||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
|
|
||||||
.section-title {
|
.section-title {
|
||||||
font-family: 'PingFang SC';
|
font-family: 'Source Han Sans SC', sans-serif;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
line-height: 38px;
|
line-height: 38px;
|
||||||
@@ -262,7 +262,7 @@ onMounted(() => {
|
|||||||
transition: color 0.3s;
|
transition: color 0.3s;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-family: 'PingFang SC';
|
font-family: 'Source Han Sans SC', sans-serif;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
|||||||
@@ -347,7 +347,8 @@ onMounted(() => {
|
|||||||
|
|
||||||
.my-message-list {
|
.my-message-list {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
max-width: 1200px;
|
width: 90%;
|
||||||
|
// max-width: 1200px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
min-height: calc(100vh - 76px - 40px);
|
min-height: calc(100vh - 76px - 40px);
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -113,7 +113,8 @@ async function handleArticleNavigate(direction: 'prev' | 'next', resourceId: str
|
|||||||
padding: 20px 0;
|
padding: 20px 0;
|
||||||
|
|
||||||
:deep(.resource-search) {
|
:deep(.resource-search) {
|
||||||
width: 1200px;
|
// width: 1200px;
|
||||||
|
width: 90%;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
@@ -145,7 +146,7 @@ async function handleArticleNavigate(direction: 'prev' | 'next', resourceId: str
|
|||||||
}
|
}
|
||||||
|
|
||||||
.content-container {
|
.content-container {
|
||||||
width: 1200px;
|
width: 90%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
gap: 24px;
|
gap: 24px;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ function handleNavigate(direction: 'prev' | 'next') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.nav-link {
|
.nav-link {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ function handleCollect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
.resource-title {
|
.resource-title {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
@@ -251,7 +251,7 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
@@ -260,7 +260,7 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
.resource-summary {
|
.resource-summary {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
@@ -278,7 +278,7 @@ defineExpose({
|
|||||||
.empty {
|
.empty {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #979797;
|
color: #979797;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ function handleCategoryClick(category: Tag) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.category-name {
|
.category-name {
|
||||||
font-family: 'PingFang SC';
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
|||||||
@@ -57,4 +57,12 @@ function handleMenuClick(menu: SysMenu) {
|
|||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
background: #F9F9F9;
|
background: #F9F9F9;
|
||||||
}
|
}
|
||||||
|
:deep(.menu-container){
|
||||||
|
width: 90%;
|
||||||
|
max-width: none;
|
||||||
|
}
|
||||||
|
:deep(.main-content .container){
|
||||||
|
width: 90%;
|
||||||
|
max-width: none !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -63,14 +63,14 @@ const menus = computed(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.user-card-wrapper {
|
.user-card-wrapper {
|
||||||
width: 100%;
|
width: 90%;
|
||||||
height: 25%;
|
height: 25%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-wrapper {
|
.content-wrapper {
|
||||||
width: 100%;
|
width: 90%;
|
||||||
|
|
||||||
height: 75%;
|
height: 75%;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
@@ -130,7 +130,7 @@ onMounted(async () => {
|
|||||||
background: rgba(198, 40, 40, 0.05);
|
background: rgba(198, 40, 40, 0.05);
|
||||||
border: 1px solid #C62828;
|
border: 1px solid #C62828;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
@@ -178,7 +178,7 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.username {
|
.username {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
@@ -198,7 +198,7 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.gender-text {
|
.gender-text {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
@@ -212,7 +212,7 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.info-item {
|
.info-item {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
@@ -226,7 +226,7 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.info-label {
|
.info-label {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
@@ -239,7 +239,7 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.level-text {
|
.level-text {
|
||||||
font-family: 'PingFang SC', sans-serif;
|
font-family: "Source Han Sans SC";
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
|||||||
Reference in New Issue
Block a user