Commit 0804c22b by DaiJiezhang

Update domain dialog, router, and skills lock

parent 0fc5eebc
{
"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"
}
}
}
(function initDomainAddDialog() {
const { createApp, ref, reactive, watch } = window.Vue;
(function initDomainAddDialog() {
const { createApp, ref, reactive } = window.Vue;
const ElementPlus = window.ElementPlus;
const DomainAddDialog = {
/** 代码作用(白话):创建“新增域名”弹窗的表单状态、校验规则和提交行为;关联文件:F:/Project/xyw_console/app-v2.js、F:/Project/xyw_console/index.html;关联逻辑:调用链是“页面操作按钮 -> DomainAddDialogAPI.open() -> 弹窗显示 -> handleSubmit() 提交校验”。 */
setup() {
const visible = ref(false);
const formRef = ref(null);
const createDefaultFormData = () => ({
const formData = reactive({
domain: '',
websiteName: '',
registrant: '',
accountId: '',
bindAccountId: '',
phone: '',
email: '',
password: '',
registerDate: '',
riskLevel: '',
expirationDate: '',
autoRenewal: '0',
renewalStatus: 'pending',
sslInfo: '',
sslExpirationDate: ''
owner: '',
project: '',
registrar: '',
registerDate: '',
autoRenewal: 'manual',
dns: '',
remark: ''
});
const formData = reactive(createDefaultFormData());
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 = () => {
visible.value = true;
// reset form on open
if (formRef.value) {
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 = () => {
visible.value = false;
};
/** 代码作用(白话):校验表单并给出保存成功提示,当前版本只做前端校验和反馈,不直接请求后端;关联文件:F:/Project/xyw_console/app-v2.js、F:/Project/xyw_console/index.html;关联逻辑:调用链是“提交按钮 -> handleSubmit() -> formRef.validate() -> ElMessage.success() -> close()”。 */
const handleSubmit = () => {
if (!formRef.value) return;
formRef.value.validate((valid) => {
if (!valid) return false;
ElementPlus.ElMessage.success('提交保存成功');
if (valid) {
ElementPlus.ElMessage.success('提交成功');
close();
return true;
} else {
return false;
}
});
};
window.DomainAddDialogAPI = { open };
// expose to window so other scripts can call it
window.DomainAddDialogAPI = {
open
};
return {
visible,
......@@ -74,119 +79,92 @@
};
},
template: `
<el-dialog v-model="visible" width="760px" top="8vh">
<el-dialog v-model="visible" width="640px" top="8vh">
<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>
<el-form :model="formData" :rules="rules" ref="formRef" label-width="110px" 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 :model="formData" :rules="rules" ref="formRef" label-width="90px" label-position="right">
<el-form-item label="域名地址" prop="domain">
<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-input v-model="formData.domain" placeholder="请输入域名,例如 example.com"></el-input>
</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: 0 0 16px 0; line-height: 1;">账户凭证管理</div>
<el-row :gutter="24">
<div style="font-size: 15px; font-weight: 600; color: #303133; margin: 24px 0 16px 0; line-height: 1;">基本配置:</div>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="账号 ID" prop="accountId">
<el-input v-model="formData.accountId" placeholder="请输入托管平台账号 ID"></el-input>
<el-form-item label="风险等级" prop="riskLevel">
<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-col>
<el-col :span="12">
<el-form-item label="绑定账号 ID" prop="bindAccountId">
<el-input v-model="formData.bindAccountId" placeholder="请输入内部绑定账号 ID"></el-input>
<el-form-item label="到期时间" prop="expirationDate">
<el-date-picker v-model="formData.expirationDate" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="手机号" prop="phone">
<el-input v-model="formData.phone" placeholder="请输入绑定手机号"></el-input>
<el-form-item label="所有者" prop="owner">
<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-col>
<el-col :span="12">
<el-form-item label="电子邮箱" prop="email">
<el-input v-model="formData.email" placeholder="请输入绑定邮箱"></el-input>
</el-form-item>
</el-col>
</el-row>
<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 label="所属项目" prop="project">
<el-select v-model="formData.project" placeholder="请选择项目" style="width: 100%">
<el-option label="主站项目" value="project1"></el-option>
<el-option label="活动推广" value="project2"></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: 0 0 16px 0; line-height: 1;">续费周期信息</div>
<el-row :gutter="24">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="注册日期" prop="registerDate">
<el-date-picker v-model="formData.registerDate" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
<el-form-item label="注册商" prop="registrar">
<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-col>
<el-col :span="12">
<el-form-item label="到期日期" prop="expirationDate">
<el-date-picker v-model="formData.expirationDate" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
<el-form-item label="注册时间" prop="registerDate">
<el-date-picker v-model="formData.registerDate" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
</el-form-item>
</el-col>
</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 label="0">未开启</el-radio>
<el-radio label="1">已开启</el-radio>
<el-radio label="manual">手动续费</el-radio>
<el-radio label="auto">自动续费</el-radio>
</el-radio-group>
</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: 0 0 16px 0; line-height: 1;">证书配置信息</div>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="SSL 证书信息" prop="sslInfo">
<el-input v-model="formData.sslInfo" placeholder="请输入证书类型或服务商,例如 Let's Encrypt"></el-input>
<div style="font-size: 15px; font-weight: 600; color: #303133; margin: 24px 0 16px 0; line-height: 1;">网络与备注:</div>
<el-form-item label="DNS 服务器" prop="dns">
<el-input type="textarea" v-model="formData.dns" :rows="2" placeholder="请输入 DNS 服务器地址,多个用逗号或回车分隔"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="SSL 到期时间" prop="sslExpirationDate">
<el-date-picker v-model="formData.sslExpirationDate" type="date" placeholder="请选择日期" style="width: 100%"></el-date-picker>
<el-form-item label="备注信息" prop="remark">
<el-input type="textarea" v-model="formData.remark" :rows="3" placeholder="请输入该域名的核心用途或备注说明..."></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="handleSubmit">提交保存</el-button>
<el-button type="primary" @click="handleSubmit">确认提交</el-button>
</span>
</template>
</el-dialog>
......
......@@ -98,4 +98,3 @@ document.addEventListener('DOMContentLoaded', () => {
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment