Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
f7b136a
fix(ui): distribute header menu across the available width
qianmoQ Sep 19, 2026
42de614
feat(ui): redesign notification settings page
qianmoQ Sep 19, 2026
61e53c8
feat(ui): rebuild notification settings with real channels and scenarios
qianmoQ Sep 19, 2026
34fb901
fix(ui): filter and clean polluted notification channel entries
qianmoQ Sep 19, 2026
1628b00
fix(ui): align settings layout with prototype spacing
qianmoQ Sep 19, 2026
e55ea1c
build(ui): require node 20 or later for the frontend
qianmoQ Sep 19, 2026
2ec577e
feat(ui): add global header search per prototype
qianmoQ Sep 19, 2026
3742c90
feat(ui): redesign modify-username page with backend validation
qianmoQ Sep 19, 2026
6cdb01c
fix(ui): narrow checkUsername mapping with a params condition
qianmoQ Sep 19, 2026
ff6a2c8
fix(ui): clean up username form placeholder and required marks
qianmoQ Sep 19, 2026
3435754
feat(ui): redesign change-password page per prototype
qianmoQ Sep 19, 2026
ad9d87e
feat(ui): redesign AI assistant page per prototype
qianmoQ Sep 19, 2026
f0c768b
i18n(ui): update AI assistant field tips per prototype
qianmoQ Sep 19, 2026
81ece9d
fix(ui): header uses two-group space-between layout per prototype
qianmoQ Sep 19, 2026
4d215cd
fix(ui): close the header left group so space-between applies
qianmoQ Sep 19, 2026
b79ba31
feat(ui): rebuild runtime configure page with sidebar layout
qianmoQ Sep 19, 2026
b47032c
feat(ui): upgrade generic DataTable to prototype spec
qianmoQ Sep 19, 2026
d081f77
fix(ui): restore missing styles and default source selection in wizard
qianmoQ Sep 19, 2026
f22c577
i18n(ui): add source wizard text keys
qianmoQ Sep 19, 2026
a354b16
feat(ui): redesign dataset adhoc query page per prototype
qianmoQ Sep 19, 2026
64ee132
fix(ui): restore missing utilities and use theme tokens for accents
qianmoQ Sep 19, 2026
4582e55
feat(ui): theme horizontal and vertical scrollbars with dc tokens
qianmoQ Sep 19, 2026
ba038f7
fix(service): guard null pipeline fields in convertFieldBody
qianmoQ Sep 19, 2026
9664359
fix(spi): fall back to JDBC metadata when information_schema is unava…
qianmoQ Sep 19, 2026
370cf70
fix(spi): extend JDBC metadata fallback to tables and columns
qianmoQ Sep 19, 2026
39b4836
fix(captcha): make verification code expression clearly readable
qianmoQ Sep 19, 2026
02a010a
fix(spi): guard JDBC url construction against parameter injection
qianmoQ Sep 19, 2026
56e3514
fix(security): restrict plugin install to admins and flag default JWT…
qianmoQ Sep 19, 2026
84829cb
test(service): cover pipeline executor matching null guard
qianmoQ Sep 19, 2026
deaf401
test(spi): cover url guard integration and metadata fallback wiring
qianmoQ Sep 19, 2026
fe8f4c5
test(captcha): cover expression readability regression
qianmoQ Sep 19, 2026
aaa7b03
fix(condor): delete all rows on null condition and unquote literals
qianmoQ Sep 19, 2026
e367a3c
fix(ci): execute the test stage unconditionally
qianmoQ Sep 19, 2026
5b3ffd3
test: skip container and external-resource tests when unavailable
qianmoQ Sep 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions .github/workflows/bofore_checker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set Node.js 18.x
- name: Set Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 18.x
node-version: 20.x
- run: cd core/datacap-ui && npm install pnpm@9.13.2 -g && pnpm install && pnpm run build

before_checker_style:
Expand Down Expand Up @@ -97,8 +97,10 @@ jobs:
echo "QINIU_ENDPOINT is set: ${{ secrets.QINIU_ENDPOINT != '' }}"
echo "QINIU_ENDPOINT length: ${#QINIU_ENDPOINT}"

# 对象存储密钥仅通过 -D 系统属性透传(当前无测试消费)。
# 注意:step 的 if 中读取不到自身 env 映射,原来的
# `if: ${{ env.QINIU_ENDPOINT != '' }}` 恒为空,导致测试被静默跳过。
- name: Run Tests
if: ${{ env.QINIU_ENDPOINT != '' }}
env:
QINIU_ACCESS: ${{ secrets.QINIU_ACCESS }}
QINIU_SECRET: ${{ secrets.QINIU_SECRET }}
Expand Down
158 changes: 153 additions & 5 deletions configure/etc/conf/i18n/messages_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -484,10 +484,10 @@ user.tip.editor=This section mainly shows editor configuration information, such
user.tip.fontSize=You can modify the font size here, with a default of 12.
user.tip.theme=You can modify themes here, including various styles.
user.tip.assistant=This section mainly shows AI assistant configuration information, such as operators and proxies.
user.tip.host=Used to configure the host address of the AI assistant.
user.tip.token=Used to configure the token of the AI assistant.
user.tip.timeout=Used to configure the timeout of the AI assistant.
user.tip.contentCount=Used to configure the context count of the AI assistant.
user.tip.host=The address of the AI assistant service; supports self-hosted or third-party services such as OpenAI, Claude, DeepSeek, etc.
user.tip.token=The API Key for accessing the AI service; keep it safe
user.tip.timeout=Request timeout; 30-120 seconds recommended
user.tip.contentCount=Number of context rounds kept in the conversation history; 1-20
user.tip.modifyUsername=Used to modify the username of the user.
user.tip.oldUsername=Used to modify the old username of the user.
user.tip.newUsername=Used to modify the new username of the user.
Expand Down Expand Up @@ -796,4 +796,152 @@ user.common.lastLogin=Last Login
user.tip.fromIp=From {ip}
user.common.stateNormal=Normal

common.help=Help
common.help=Help
notify.tip.page=Choose the notification types and channels you want to receive and stay informed of important updates.
notify.common.channels=Notification Channels
notify.tip.channels=Choose how you receive notifications
notify.common.scenarios=Trigger Scenarios
notify.tip.scenarios=Choose what content you want to be notified about
notify.common.batch=Batch Settings
notify.tip.batch=Apply the selected scenarios to the selected channels
notify.common.sendChannels=Send Channels
notify.common.apply=Apply
notify.common.enable=Enable
notify.state.enabled=Enabled
notify.state.disabled=Not Enabled
notify.tip.internal=Receive via the in-app message center
notify.tip.dingtalk=Receive notifications via the DingTalk bot
notify.tip.channelFallback=Receive notifications via this channel
notify.text.dynamic=Activity
notify.tip.created=Notify when datasets are created
notify.tip.updated=Notify when datasets are updated
notify.tip.deleted=Notify when datasets are deleted
notify.tip.dynamic=Notify when new activities are generated
notify.tip.syncData=Notify when data synchronization completes


common.searchPlaceholder=Search datasets, tables, documents...
user.tip.modifyUsernamePage=Set a new username to represent your identity across the system
user.common.currentUsername=Current Username
user.common.currentPassword=Current Password
user.common.saveChanges=Save Changes
user.tip.newUsernameFormat=4-20 characters, letters, numbers and underscores, cannot start with a digit
user.tip.passwordConfirm=Enter your current password for security confirmation
user.common.modifyUsernameTip=About Username Change
user.tip.renameInfo1=Your username is the unique identifier in DataCap, shown in community, comment and contribution records.
user.tip.renameInfo2=After renaming, historical data (contributions, published content, etc.) will be linked to the new username automatically.
user.tip.renameInfo3=It may take a few minutes for the new username to take effect across all services.
user.tip.renameInfo4=If you have any problems, contact the administrator.
user.tip.renameFailed=This username cannot be used

user.tip.passwordPage=For your account security, please change your password regularly
user.placeholder.currentPassword=Enter your current password
user.placeholder.newPassword=Enter your new password
user.placeholder.confirmNewPassword=Enter your new password again
user.tip.currentPasswordLive=Enter the password you are currently using
user.tip.newPasswordFormat=8-32 characters, containing at least two of letters, numbers and special characters
user.tip.confirmNewPassword=Enter the new password again to confirm
user.common.passwordStrength=Password Strength
user.password.weak=Weak
user.password.medium=Medium
user.password.strong=Strong
user.password.ruleLength=At least 8 characters
user.password.ruleUppercase=Contains uppercase (A-Z)
user.password.ruleDigit=Contains a digit (0-9)
user.password.ruleSpecial=Contains a special character (e.g. !@#$%^&*)
user.common.securityTips=Security Tips
user.tip.securityInfo1=Use a strong password with uppercase, lowercase, numbers and special characters
user.tip.securityInfo2=Do not reuse passwords from other websites
user.tip.securityInfo3=Changing your password regularly helps protect your account
user.tip.securityInfo4=If you suspect your account has been compromised, change the password immediately
user.tip.securityInfo5=If you have any problems, contact the system administrator
user.common.protectAccount=Protect Your Account
user.tip.protectAccount=A strong password is the first line of defense for your data security

user.tip.assistantPage=Configure the AI assistant runtime parameters so it better understands your business
user.common.basicConfig=Basic Configuration
user.tip.basicConfig=Configure the basic runtime parameters of the AI assistant
user.common.apiToken=API Token
user.common.timeoutSeconds=Timeout (seconds)
user.common.contextCount=Context Count
user.common.configGuide=Configuration Guide
user.tip.guideHost=Enter the API address of your AI provider; supports OpenAI, Claude, DeepSeek, etc.
user.tip.guideToken=Enter a valid API Key; it will be stored encrypted.
user.tip.guideTimeout=Set the request timeout to avoid long waits caused by network issues.
user.tip.guideContext=Set how many conversation rounds are kept so the AI understands the context better.
user.common.quickConfig=Quick Configuration
user.tip.quickConfig=Choose a common AI provider to fill the configuration quickly
user.provider.custom=Custom
user.tip.quickConfigHint=After selecting, the host address format will be filled automatically; you still need to enter the API token.
user.common.saveConfig=Save Configuration
user.common.testConnection=Test Connection
user.tip.testSuccess=Connection successful
user.tip.testFailed=Connection failed
user.placeholder.host=https://api.openai.com/v1

configure.runtime.desc=Configure the runtime execution environment and parameters to optimize data processing performance
configure.runtime.guide=Guide
configure.runtime.basicConfig=Basic Settings
configure.runtime.basicConfigTip=Choose the executor type and the dataset target storage
configure.runtime.executor=Executor
configure.runtime.datasetStorage=Dataset Target Storage
configure.runtime.bandTip=The executor determines the runtime environment; the dataset target storage specifies where processing results are stored.
configure.runtime.params=Parameters
configure.runtime.paramsTip=Configure the runtime parameters of this executor
configure.runtime.queryOptimize=Query Optimization
configure.runtime.queryOptimizeTip=Configure pre-query statistics and timeout control
configure.runtime.off=Off
configure.runtime.on=On
configure.runtime.save=Save Configuration

configure.runtime.testConfig=Test
configure.runtime.testOk=Configuration is complete and valid
configure.runtime.testMissing={count} field(s) are not filled

dataTable.selected={count} selected
dataTable.total=Total {count} items

source.wizard.desc=选择数据源类型并配置连接信息
source.wizard.stepTypeDesc=选择数据源类型
source.wizard.stepConfigureDesc=填写连接信息
source.wizard.stepAuthDesc=配置访问权限
source.wizard.stepAdvancedDesc=高级选项(可选)
source.wizard.previous=Previous
source.wizard.next=Next
source.wizard.notFound=找不到需要的数据源?
source.catalog.all=All
source.category.rdb=Relational Databases
source.category.bigdata=Big Data
source.category.cloud=Cloud Platforms
source.category.nosql=NoSQL
source.category.file=File Storage
source.category.api=API & Apps
source.category.mq=Message Queues
source.category.other=Other
source.search.placeholder=搜索数据源(如:MySQL、PostgreSQL、Oracle...)
source.filter.popular=Popular
source.filter.database=Databases
source.filter.cloud=Cloud
source.filter.other=Other
source.badge.popular=Popular
source.common.features=Key Features
source.common.scenes=Use Cases
source.common.viewDocs=View Docs
source.common.requestNew=Request a New Data Source

dataset.adhoc.title=Ad-hoc Query
dataset.adhoc.desc=Build queries by dragging fields and view analysis results in real time
dataset.adhoc.clear=Clear
dataset.adhoc.preview=Preview
dataset.adhoc.query=Query
dataset.adhoc.dropMetric=Drag metric fields here
dataset.adhoc.dropDimension=Drag dimension fields here
dataset.adhoc.dropFilter=Drag fields here to set filter conditions
dataset.adhoc.resultTab=Query Results
dataset.adhoc.logTab=Execution Logs
dataset.adhoc.export=Export
dataset.adhoc.totalRows=Total {limit} rows shown
dataset.search.fields=Search fields...
dataset.adhoc.all=All
dataset.adhoc.dimensions=Dimensions
dataset.adhoc.measures=Measures
Loading
Loading