1 line
7.1 KiB
JavaScript
1 line
7.1 KiB
JavaScript
import{api}from"../../../scripts/api.js";import{ComfyApp,app}from"../../../scripts/app.js";import{showToast}from"./mycat.js";export const UserTokenKey="cryptocat_user_token";async function showKeygenMessageBox(e){const t=document.createElement("div");document.body.appendChild(t);const{createApp:n,ref:o}=Vue,a=n({template:'\n <el-dialog\n v-model="dialogVisible"\n :title="title"\n width="500px" \n center\n @close="handleClose"\n >\n <el-form :model="form" label-width="140px">\n <el-form-item label="Template ID">\n <el-input\n v-model="form.templateId"\n placeholder="请输入template_id"\n :disabled="loading"\n />\n </el-form-item>\n <el-form-item label="失效日期">\n <el-date-picker\n v-model="form.expireDate"\n type="date"\n placeholder="选择失效日期"\n :disabled="loading"\n :disabled-date="disabledDate"\n format="YYYY-MM-DD"\n value-format="YYYY-MM-DD"\n />\n </el-form-item>\n <el-form-item label="激活后使用天数">\n <el-input-number \n v-model="form.useDays"\n :min="0"\n :max="365"\n :disabled="loading"\n />\n <span class="hint-text">\n 0表示永久有效\n </span>\n </el-form-item>\n </el-form>\n <template v-if="result">\n <div class="key-box">\n <div class="serial-number-box" @click="copyToClipboard">\n {{ result }}\n </div>\n </div>\n </template> \n <div class="button-group">\n <el-button\n type="primary"\n @click="generateSerial"\n :loading="loading"\n >\n 生成序列号\n </el-button>\n </div>\n </el-dialog>\n ',setup(){const n=o(!0),r=o({templateId:"",expireDate:"",useDays:0}),l=o(""),i=o(!1);return{title:e,dialogVisible:n,form:r,result:l,loading:i,generateSerial:async function(){if(r.value.templateId.trim()){i.value=!0;try{const e=await async function(e,t,n){try{const o={template_id:e};t&&(o.expire_date=t),n&&(o.use_days=n);const a=await api.fetchApi("/cryptocat/keygen",{method:"POST",body:JSON.stringify(o)}),r=await a.json();if(!a.ok)throw new Error(r.error_msg||`HTTP error! status: ${a.status}`);return r.serial_number||r.error_msg||"获取失败:服务器返回数据格式错误"}catch(e){throw new Error(`获取序列号失败: ${e.message}`)}}(r.value.templateId.trim(),r.value.expireDate,r.value.useDays);l.value=e}catch(e){ElementPlus.ElMessage.error(e.message||"未知错误")}finally{i.value=!1}}else ElementPlus.ElMessage.warning("请输入template_id")},handleClose:function(){a.unmount(),t.remove()},handleClear:function(){l.value="",r.value={templateId:"",expireDate:"",useDays:0}},copyToClipboard:async function(){try{await navigator.clipboard.writeText(l.value),ElementPlus.ElMessage.success("序列号已复制到剪贴板")}catch(e){ElementPlus.ElMessage.error("复制失败")}},disabledDate:e=>e.getTime()<Date.now()-864e5}}});a.use(ElementPlus),a.mount(t)}function isValidJWTFormat(e){if("string"!=typeof e)return!1;if(e.length<50)return!1;const t=e.split(".");if(3!==t.length)return!1;const n=/^[A-Za-z0-9_-]+$/;return t.every((e=>e.length>0&&n.test(e)))}app.registerExtension({name:"CryptoCat.config",async setup(){app.ui.settings.addSetting({id:"CryptoCat.Keygen.name",name:"输入template_id,计算序列号",type:()=>{const e=document.createElement("tr"),t=document.createElement("td"),n=document.createElement("input");return n.type="button",n.value="算号器",n.style.borderRadius="8px",n.style.padding="8px 16px",n.style.fontSize="14px",n.style.cursor="pointer",n.style.border="1px solid #666",n.style.backgroundColor="#444",n.style.color="#fff",n.onmouseover=()=>{n.style.backgroundColor="#555"},n.onmouseout=()=>{n.style.backgroundColor="#444"},n.onclick=()=>{showKeygenMessageBox("算号器","算号器","question")},t.appendChild(n),e.appendChild(t),e}}),app.ui.settings.addSetting({id:"CryptoCat.User.clear",name:"清理所有数据",tooltip:"完成镜像部署前最后一步,清理所有数据",type:()=>{const e=document.createElement("tr"),t=document.createElement("td"),n=document.createElement("input");return n.type="button",n.value="清理",n.style.borderRadius="8px",n.style.padding="8px 16px",n.style.fontSize="14px",n.style.cursor="pointer",n.style.border="1px solid #666",n.style.backgroundColor="#444",n.style.color="#fff",n.onclick=async()=>{localStorage.removeItem(UserTokenKey),localStorage.removeItem("Comfy.Settings.CryptoCat.User.long_token"),app.ui.settings.setSettingValue("CryptoCat.User.long_token",""),await api.fetchApi("/cryptocat/clear"),showToast("清理成功")},t.appendChild(n),e.appendChild(t),e}}),app.ui.settings.addSetting({id:"CryptoCat.User.long_token",name:"设置长效token",type:"text",textType:"password",defaultValue:"",tooltip:"用于非本机授权登录情况,请勿泄露!提倡使用本机登录授权更安全!",onChange:async function(e){isValidJWTFormat(e)&&await api.fetchApi("/cryptocat/set_long_token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({long_token:e})})}}),app.ui.settings.addSetting({id:"CryptoCat.User.login",name:"登录RiceRound账户",type:()=>{const e=document.createElement("tr"),t=document.createElement("td"),n=document.createElement("input");return n.type="button",n.value="登录RiceRound账户",n.style.borderRadius="8px",n.style.padding="8px 16px",n.style.fontSize="14px",n.style.cursor="pointer",n.style.border="1px solid #3498db",n.style.backgroundColor="#3498db",n.style.color="#fff",n.onmouseover=()=>{n.style.backgroundColor="#2980b9"},n.onmouseout=()=>{n.style.backgroundColor="#3498db"},n.onclick=async()=>{try{const e=await api.fetchApi("/cryptocat/login",{method:"POST"}),t=await e.json();showToast(t.error_msg||"登录中...")}catch(e){showToast("登录请求失败","error")}},t.appendChild(n),e.appendChild(t),e}}),app.ui.settings.addSetting({id:"CryptoCat.Setting.auto_overwrite",name:"自动覆盖更新同id工作流",type:"boolean",defaultValue:!1,tooltip:"设置为true时,会自动覆盖已有的template_id的数据",onChange:function(e){api.fetchApi("/cryptocat/set_auto_overwrite",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({auto_overwrite:e})})}})}}); |