Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xyw_asset_console
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DaiJiezhang
xyw_asset_console
Commits
0804c22b
Commit
0804c22b
authored
Jun 30, 2026
by
DaiJiezhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update domain dialog, router, and skills lock
parent
0fc5eebc
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
176 additions
and
110 deletions
+176
-110
skills-lock.json
skills-lock.json
+89
-0
domain-add-dialog.js
src/modules/domain/domain-add-dialog.js
+87
-109
index.js
src/router/index.js
+0
-1
No files found.
skills-lock.json
0 → 100644
View file @
0804c22b
{
"version"
:
1
,
"skills"
:
{
"brandkit"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/brandkit/SKILL.md"
,
"computedHash"
:
"735007879f5110aeae1e981a53fe74a12afde70347f9773dacd50e4697a091bf"
},
"design-taste-frontend"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/taste-skill/SKILL.md"
,
"computedHash"
:
"899b84384f74f540ea5284d9b2e9234e050998b42eacc805410b518d4226c0b3"
},
"design-taste-frontend-v1"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/taste-skill-v1/SKILL.md"
,
"computedHash"
:
"0a226c13d69639553cf8a7c40aa5527b026820f8ddaf7a6b263988e32ab44a27"
},
"full-output-enforcement"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/output-skill/SKILL.md"
,
"computedHash"
:
"524f7c7950c3fde726101613f630140411c7d080e63be718687f4b38f919be81"
},
"gpt-taste"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/gpt-tasteskill/SKILL.md"
,
"computedHash"
:
"7bd1bfdda0e51016ca222693401a65fc0dd9bf9487e0bd5b1740ba510f6f963a"
},
"high-end-visual-design"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/soft-skill/SKILL.md"
,
"computedHash"
:
"f730e4132775f13eea19e3dc39afc6bb453cfc0498872b127ad8f0d47cfd802d"
},
"image-to-code"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/image-to-code-skill/SKILL.md"
,
"computedHash"
:
"3d2ac14d956fdafc5500d2108b90895e134d847f9f199e7f1d18bf1f814cf7c8"
},
"imagegen-frontend-mobile"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/imagegen-frontend-mobile/SKILL.md"
,
"computedHash"
:
"7c1d1dc59cd0df4063b8621af543bf5dea1d576b261507e17b0323c69680b048"
},
"imagegen-frontend-web"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/imagegen-frontend-web/SKILL.md"
,
"computedHash"
:
"27255c7c50181e58add156b2aa2bd5325285b85f04027e4c8b73742d98d7be0a"
},
"industrial-brutalist-ui"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/brutalist-skill/SKILL.md"
,
"computedHash"
:
"e66e5a2a8b73cef79ab6546459c665e8b983645689c5f3772f7eed8b9f1e8e0e"
},
"minimalist-ui"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/minimalist-skill/SKILL.md"
,
"computedHash"
:
"7e88897e0371184e97a82b8d9ef080323c13f21eb067b58ef71eb05173a08ac2"
},
"redesign-existing-projects"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/redesign-skill/SKILL.md"
,
"computedHash"
:
"47eced3e960a2c961d3cbee11fa1216264f589344b586a5cbd03967cd6b9c54b"
},
"shadcn"
:
{
"source"
:
"shadcn/ui"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/shadcn/SKILL.md"
,
"computedHash"
:
"0dc0edeeaec2ae491ae506806517866a3f9bd48d04e0458feb37e0252862891f"
},
"stitch-design-taste"
:
{
"source"
:
"Leonxlnx/taste-skill"
,
"sourceType"
:
"github"
,
"skillPath"
:
"skills/stitch-skill/SKILL.md"
,
"computedHash"
:
"c96b580192b34167efa01f460bbc669ff4315cf97f3cf6ff85ded8029aa720b8"
}
}
}
src/modules/domain/domain-add-dialog.js
View file @
0804c22b
(
function
initDomainAddDialog
()
{
(
function
initDomainAddDialog
()
{
const
{
createApp
,
ref
,
reactive
,
watch
}
=
window
.
Vue
;
const
{
createApp
,
ref
,
reactive
}
=
window
.
Vue
;
const
ElementPlus
=
window
.
ElementPlus
;
const
ElementPlus
=
window
.
ElementPlus
;
const
DomainAddDialog
=
{
const
DomainAddDialog
=
{
/** 代码作用(白话):创建“新增域名”弹窗的表单状态、校验规则和提交行为;关联文件:F:/Project/xyw_console/app-v2.js、F:/Project/xyw_console/index.html;关联逻辑:调用链是“页面操作按钮 -> DomainAddDialogAPI.open() -> 弹窗显示 -> handleSubmit() 提交校验”。 */
setup
()
{
setup
()
{
const
visible
=
ref
(
false
);
const
visible
=
ref
(
false
);
const
formRef
=
ref
(
null
);
const
formRef
=
ref
(
null
);
const
createDefaultFormData
=
()
=>
({
const
formData
=
reactive
({
domain
:
''
,
domain
:
''
,
websiteName
:
''
,
riskLevel
:
''
,
registrant
:
''
,
accountId
:
''
,
bindAccountId
:
''
,
phone
:
''
,
email
:
''
,
password
:
''
,
registerDate
:
''
,
expirationDate
:
''
,
expirationDate
:
''
,
autoRenewal
:
'0'
,
owner
:
''
,
renewalStatus
:
'pending'
,
project
:
''
,
sslInfo
:
''
,
registrar
:
''
,
sslExpirationDate
:
''
registerDate
:
''
,
autoRenewal
:
'manual'
,
dns
:
''
,
remark
:
''
});
});
const
formData
=
reactive
(
createDefaultFormData
());
const
rules
=
{
const
rules
=
{
domain
:
[{
required
:
true
,
message
:
'请输入域名地址'
,
trigger
:
'blur'
}]
domain
:
[{
required
:
true
,
message
:
'请输入域名'
,
trigger
:
'blur'
}],
riskLevel
:
[{
required
:
true
,
message
:
'请选择风险等级'
,
trigger
:
'change'
}],
expirationDate
:
[{
required
:
true
,
message
:
'请选择到期时间'
,
trigger
:
'change'
}],
owner
:
[{
required
:
true
,
message
:
'请输入或选择所有者'
,
trigger
:
'change'
}],
project
:
[{
required
:
true
,
message
:
'请选择所属项目'
,
trigger
:
'change'
}],
autoRenewal
:
[{
required
:
true
,
message
:
'请选择续费方式'
,
trigger
:
'change'
}]
};
};
watch
(()
=>
formData
.
autoRenewal
,
(
newVal
)
=>
{
if
(
newVal
===
'1'
)
{
formData
.
renewalStatus
=
'success'
;
}
});
/** 代码作用(白话):打开弹窗并把表单重置到初始状态,避免上一次填写内容残留;关联文件:F:/Project/xyw_console/app-v2.js、F:/Project/xyw_console/index.html;关联逻辑:消息链是“页面按钮 -> DomainAddDialogAPI.open() -> visible=true -> 弹窗展示”。 */
const
open
=
()
=>
{
const
open
=
()
=>
{
visible
.
value
=
true
;
visible
.
value
=
true
;
// reset form on open
if
(
formRef
.
value
)
{
if
(
formRef
.
value
)
{
formRef
.
value
.
resetFields
();
formRef
.
value
.
resetFields
();
}
else
{
formData
.
domain
=
''
;
formData
.
riskLevel
=
''
;
formData
.
expirationDate
=
''
;
formData
.
owner
=
''
;
formData
.
project
=
''
;
formData
.
registrar
=
''
;
formData
.
registerDate
=
''
;
formData
.
autoRenewal
=
'manual'
;
formData
.
dns
=
''
;
formData
.
remark
=
''
;
}
}
Object
.
assign
(
formData
,
createDefaultFormData
());
};
};
/** 代码作用(白话):关闭当前域名新增弹窗;关联文件:F:/Project/xyw_console/app-v2.js、F:/Project/xyw_console/index.html;关联逻辑:消息链是“取消按钮/提交成功 -> close() -> visible=false”。 */
const
close
=
()
=>
{
const
close
=
()
=>
{
visible
.
value
=
false
;
visible
.
value
=
false
;
};
};
/** 代码作用(白话):校验表单并给出保存成功提示,当前版本只做前端校验和反馈,不直接请求后端;关联文件:F:/Project/xyw_console/app-v2.js、F:/Project/xyw_console/index.html;关联逻辑:调用链是“提交按钮 -> handleSubmit() -> formRef.validate() -> ElMessage.success() -> close()”。 */
const
handleSubmit
=
()
=>
{
const
handleSubmit
=
()
=>
{
if
(
!
formRef
.
value
)
return
;
if
(
!
formRef
.
value
)
return
;
formRef
.
value
.
validate
((
valid
)
=>
{
formRef
.
value
.
validate
((
valid
)
=>
{
if
(
!
valid
)
return
false
;
if
(
valid
)
{
ElementPlus
.
ElMessage
.
success
(
'提交保存
成功'
);
ElementPlus
.
ElMessage
.
success
(
'提交
成功'
);
close
();
close
();
return
true
;
}
else
{
return
false
;
}
});
});
};
};
window
.
DomainAddDialogAPI
=
{
open
};
// expose to window so other scripts can call it
window
.
DomainAddDialogAPI
=
{
open
};
return
{
return
{
visible
,
visible
,
...
@@ -74,119 +79,92 @@
...
@@ -74,119 +79,92 @@
};
};
},
},
template
:
`
template
:
`
<el-dialog v-model="visible" width="
76
0px" top="8vh">
<el-dialog v-model="visible" width="
64
0px" top="8vh">
<template #header>
<template #header>
<div style="font-size: 18px; font-weight: bold; color: #303133;">新增域名记录</div>
<div style="
text-align: center;
font-size: 18px; font-weight: bold; color: #303133;">新增域名记录</div>
</template>
</template>
<el-form :model="formData" :rules="rules" ref="formRef" label-width="110px" label-position="right">
<el-form :model="formData" :rules="rules" ref="formRef" label-width="90px" label-position="right">
<div style="font-size: 15px; font-weight: 600; color: #303133; margin: 0 0 16px 0; line-height: 1;">基础主体信息</div>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="域名地址" prop="domain">
<el-form-item label="域名地址" prop="domain">
<el-input v-model="formData.domain" placeholder="请输入域名地址,例如 example.com"></el-input>
<el-input v-model="formData.domain" placeholder="请输入域名,例如 example.com"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="网站名称/平台" prop="websiteName">
<el-input v-model="formData.websiteName" placeholder="请输入网站名称或所属平台"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="注册主体" prop="registrant">
<el-input v-model="formData.registrant" placeholder="请输入注册主体,例如个人或企业全称"></el-input>
</el-form-item>
</el-form-item>
</el-col>
</el-row>
<
el-divider border-style="dashed" style="margin: 16px 0;"></el-divider
>
<
div style="font-size: 15px; font-weight: 600; color: #303133; margin: 24px 0 16px 0; line-height: 1;">基本配置:</div
>
<div style="font-size: 15px; font-weight: 600; color: #303133; margin: 0 0 16px 0; line-height: 1;">账户凭证管理</div>
<el-row :gutter="2
4
">
<el-row :gutter="2
0
">
<el-col :span="12">
<el-col :span="12">
<el-form-item label="账号 ID" prop="accountId">
<el-form-item label="风险等级" prop="riskLevel">
<el-input v-model="formData.accountId" placeholder="请输入托管平台账号 ID"></el-input>
<el-select v-model="formData.riskLevel" placeholder="请选择" style="width: 100%">
<el-option label="低风险" value="low"></el-option>
<el-option label="中风险" value="medium"></el-option>
<el-option label="高风险" value="high"></el-option>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col :span="12">
<el-col :span="12">
<el-form-item label="
绑定账号 ID" prop="bindAccountId
">
<el-form-item label="
到期时间" prop="expirationDate
">
<el-
input v-model="formData.bindAccountId" placeholder="请输入内部绑定账号 ID"></el-input
>
<el-
date-picker v-model="formData.expirationDate" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker
>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-row :gutter="24">
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="12">
<el-form-item label="手机号" prop="phone">
<el-form-item label="所有者" prop="owner">
<el-input v-model="formData.phone" placeholder="请输入绑定手机号"></el-input>
<el-select v-model="formData.owner" placeholder="请选择/输入" filterable allow-create style="width: 100%">
<el-option label="张三" value="张三"></el-option>
<el-option label="李四" value="李四"></el-option>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col :span="12">
<el-col :span="12">
<el-form-item label="电子邮箱" prop="email">
<el-form-item label="所属项目" prop="project">
<el-input v-model="formData.email" placeholder="请输入绑定邮箱"></el-input>
<el-select v-model="formData.project" placeholder="请选择项目" style="width: 100%">
</el-form-item>
<el-option label="主站项目" value="project1"></el-option>
</el-col>
<el-option label="活动推广" value="project2"></el-option>
</el-row>
</el-select>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="登录密码" prop="password">
<el-input v-model="formData.password" placeholder="请输入平台登录密码" show-password></el-input>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-divider border-style="dashed" style="margin: 16px 0;"></el-divider>
<el-row :gutter="20">
<div style="font-size: 15px; font-weight: 600; color: #303133; margin: 0 0 16px 0; line-height: 1;">续费周期信息</div>
<el-row :gutter="24">
<el-col :span="12">
<el-col :span="12">
<el-form-item label="注册日期" prop="registerDate">
<el-form-item label="注册商" prop="registrar">
<el-date-picker v-model="formData.registerDate" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
<el-select v-model="formData.registrar" placeholder="请选择/输入" filterable allow-create style="width: 100%">
<el-option label="阿里云" value="阿里云"></el-option>
<el-option label="腾讯云" value="腾讯云"></el-option>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col :span="12">
<el-col :span="12">
<el-form-item label="
到期日期" prop="expiration
Date">
<el-form-item label="
注册时间" prop="register
Date">
<el-date-picker v-model="formData.
expiration
Date" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
<el-date-picker v-model="formData.
register
Date" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="续费方式" prop="autoRenewal">
<el-form-item label="自动续费" prop="autoRenewal">
<el-radio-group v-model="formData.autoRenewal">
<el-radio-group v-model="formData.autoRenewal">
<el-radio label="0">未开启
</el-radio>
<el-radio label="manual">手动续费
</el-radio>
<el-radio label="1">已开启
</el-radio>
<el-radio label="auto">自动续费
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最新续费状态" prop="renewalStatus">
<el-select v-model="formData.renewalStatus" placeholder="请选择续费状态" style="width: 100%">
<el-option label="待续费" value="pending"></el-option>
<el-option label="续费成功" value="success"></el-option>
<el-option label="续费失败" value="failed"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-divider border-style="dashed" style="margin: 16px 0;"></el-divider>
<div style="font-size: 15px; font-weight: 600; color: #303133; margin: 24px 0 16px 0; line-height: 1;">网络与备注:</div>
<div style="font-size: 15px; font-weight: 600; color: #303133; margin: 0 0 16px 0; line-height: 1;">证书配置信息</div>
<el-row :gutter="24">
<el-form-item label="DNS 服务器" prop="dns">
<el-col :span="12">
<el-input type="textarea" v-model="formData.dns" :rows="2" placeholder="请输入 DNS 服务器地址,多个用逗号或回车分隔"></el-input>
<el-form-item label="SSL 证书信息" prop="sslInfo">
<el-input v-model="formData.sslInfo" placeholder="请输入证书类型或服务商,例如 Let's Encrypt"></el-input>
</el-form-item>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注信息" prop="remark">
<el-form-item label="SSL 到期时间" prop="sslExpirationDate">
<el-input type="textarea" v-model="formData.remark" :rows="3" placeholder="请输入该域名的核心用途或备注说明..."></el-input>
<el-date-picker v-model="formData.sslExpirationDate" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
</el-form-item>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-form>
<template #footer>
<template #footer>
<span class="dialog-footer">
<span class="dialog-footer">
<el-button @click="close">取消</el-button>
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="handleSubmit">
提交保存
</el-button>
<el-button type="primary" @click="handleSubmit">
确认提交
</el-button>
</span>
</span>
</template>
</template>
</el-dialog>
</el-dialog>
...
...
src/router/index.js
View file @
0804c22b
...
@@ -98,4 +98,3 @@ document.addEventListener('DOMContentLoaded', () => {
...
@@ -98,4 +98,3 @@ document.addEventListener('DOMContentLoaded', () => {
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment