filecat 7.22.0 → 7.22.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dist/3355.ea8a68a00145fb3347ed.js +1 -0
- package/build/dist/4598.a4129c1f9642c416a049.js +1 -0
- package/build/dist/47.31cca3ecbb1f0236ac36.js +1 -0
- package/build/dist/6097.cc18f61140ca6d36f8fd.js +1 -0
- package/build/dist/7678.33fd91fd127f794d99ee.js +1 -0
- package/build/dist/9202.7c107ee16bf7835558aa.js +1 -0
- package/build/dist/9260.17be02cb73bfc35b0db0.js +1 -0
- package/build/dist/9765.e708812437042d086ec2.js +1 -0
- package/build/dist/{991.2ff5a3ada566cb075df6.js → 991.82389c18b49e68b2a67f.js} +1 -1
- package/build/dist/index.html +1 -1
- package/build/dist/main.1859ab75795aabae2f60.js +2 -0
- package/build/main.js +1 -1
- package/package.json +1 -1
- package/build/dist/3355.221b11ae8755cb58412f.js +0 -1
- package/build/dist/4598.48aad39fc631a51c30d3.js +0 -1
- package/build/dist/47.423c0f43594850475f8d.js +0 -1
- package/build/dist/6097.3b8a75477b58137301a6.js +0 -1
- package/build/dist/7678.b2889b36fac2b90a9061.js +0 -1
- package/build/dist/9202.acca2abe478020a45f13.js +0 -1
- package/build/dist/9260.2f474cb25f7647cb995a.js +0 -1
- package/build/dist/9765.15869054c7b8e56ccc76.js +0 -1
- package/build/dist/main.19ecdddaf894b36f1a47.js +0 -2
- /package/build/dist/{main.19ecdddaf894b36f1a47.js.LICENSE.txt → main.1859ab75795aabae2f60.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkfilecat=self.webpackChunkfilecat||[]).push([[7678],{67678(e){e.exports=JSON.parse('{"title":"FileCat","修改密码":"Cambiar contraseña","自定义auth":"Autenticación personalizada","tk_exp":"Tiempo de expiración del token","目标":"Destino","目标列表":"Destinos","被同步的源目录":"Dir origen a sincronizar","成功":"Éxito","已开启":"Activado","已关闭":"Desactivado","sy_tp1":"Solo se admiten archivos pequeños, como configs y código","sy_tp2":"Los archivos no se sincronizan de inmediato por defecto, solo tras modificarse. Con sincronización completa activada, ese cliente sincroniza todos los archivos de forma recursiva en cada conexión.","sy_tp3":"Una tarea puede tener varios destinos, cada uno con su directorio y opción de sincronización completa.","立即同步":"Sincronizar ahora","已触发同步":"Sincronización iniciada","操作失败":"Operación fallida","tsk_off":"Activa y guarda la tarea primero","mnt_type":"Tipo de montaje","cred_sel":"Credencial","lcl_abs":"Ruta local absoluta","rem_dir":"Dir remoto","disp_only":"Nombre en la lista","tag_pub":"Las ediciones de etiquetas son visibles para todos","https_s":"Ajustes HTTPS","ssl_crt":"Ruta del certificado SSL","ssl_key":"Ruta de la clave privada SSL","crt_pth":"Ruta del certificado (cert.pem/fullchain.pem)","ky_pth":"Ruta de la clave privada (privkey.pem)","语言":"Idioma","文件夹路径":"Ruta de la carpeta","编号":"Número","路径":"Ruta","sub_dir":"Subdirectorio","是否默认":"¿Es el predeterminado?","备注":"Nota","编辑SQL":"Editar SQL","SQL 预设":"Preajuste SQL","耗时":"Duración","确认":"Confirmar","请输入备注":"Ingrese una nota","查询全部表":"Consultar todas las tablas","SQL预设设置":"Configuración de preajustes SQL","SQL预设":"Preajuste SQL","更新保存":"Actualizar y guardar","创建新预选项":"Crear nuevo preajuste","添加预设":"Agregar preajuste","SQL代码":"Código SQL","保存成功":"Guardado correctamente","大纲":"Esquema","新建主题":"Nuevo tema","编辑主题":"Editar tema","删除主题":"Eliminar tema","主题名称":"Nombre del tema","请输入主题名称":"Introduce el nombre del tema","主题实时预览":"Vista previa en vivo","删除成功":"Eliminado","删除失败":"Error al eliminar","cf_thm":"¿Eliminar este tema?","导出PDF":"Exportar PDF","no_head":"Aún no hay títulos","未命名标题":"Título sin nombre","更新成功":"Actualizado correctamente","创建成功":"Creado correctamente","sql_in":"Ingrese la sentencia SQL","新密码":"Nueva contraseña","新账号":"Nueva cuenta","关闭":"Cerrar","开启":"Abrir","展开":"Expandir","指定时间":"Hora especificada","永不过期":"Nunca expira","清空token":"Vaciar el token","保存":"Guardar","确定":"Confirmar","确定修改":"Confirmar la modificación","删除":"Eliminar","添加":"Agregar","系统":"Sistema","follow_sys":"Seguir ajuste del sistema","no_theme":"Sin tema","自定义页面路由":"Ruta de página personalizada","api_rt":"Ruta de API personalizada","跳转路由":"Ruta de redirección","路由":"Ruta","文件":"Archivo","自定义路由":"Rutas personalizadas","编辑":"Editar","查看":"Ver","默认配置":"Configuración predeterminada","设置":"Configuración","退出登录":"Cerrar sesión","虚拟网络":"Red virtual","系统信息":"Información del sistema","工具箱":"Caja de herramientas","索引":"Índice","文件夹":"Carpeta","客户端":"Cliente","服务器":"Servidor","服务端":"Servidor","基本信息":"Información básica","系统性能":"Rendimiento del sistema","总容量":"Capacidad total","剩余":"Restante","使用率":"Tasa de uso","内存":"Memoria","系统进程":"Proceso del sistema","doc_ct":"Contenedor Docker","物理硬盘":"Disco duro físico","文件硬盘":"Disco duro de archivos","容器":"Contenedor","名字":"Nombre","镜像":"Imagen","命令":"Comando","状态":"Estado","选择":"Seleccionar","过滤":"Filtrar","账号":"Cuenta","密码":"Contraseña","目录":"Directorio","私钥路径":"Ruta de la clave privada","连接地址":"Dirección de conexión","端口":"Puerto","port":"puerto","host":"host","key":"clave","代理":"Proxy","浏览器":"Navegador","网络唤醒":"Despertar por red","时间工具":"Herramienta de tiempo","JSON 格式转换":"Conversión de formato JSON","编解码":"Codificar / Decodificar","摘要算法":"Algoritmo hash","正则测试":"Probador de regex","开发者工具":"Herramientas de desarrollo","切换样式":"Cambiar estilo","更多":"Más","创建文件夹":"Crear carpeta","创建文件":"Crear archivo","连接":"Conectar","地址":"Dirección","目标设备":"Dispositivo objetivo","发送":"Enviar","腾讯":"Tencent","云":"Nube","厂商":"Fabricante","名称":"Nombre","厂商名称":"Nombre del fabricante","类型":"Tipo","容量":"Capacidad","挂载位置":"Punto de montaje","剩余容量":"Capacidad restante","登录":"Iniciar sesión","是":"Sí","否":"No","流量转发":"Reenvío de tráfico","点对点":"Punto a punto","模式":"Modo","虚拟":"Virtual","在线状态":"Estado en línea","物理":"Físico","账号设置":"Configuración de la cuenta","说明":"Descripción","文件系统类型":"Tipo de sistema de archivos","机械":"Mecánico","固态":"Sólido","复制":"Copiar","剪切":"Cortar","压缩":"Comprimir","下载":"Descargar","重命名":"Renombrar","创建文本文件":"Crear archivo de texto","解压":"Descomprimir","转换到":"Convertir a","自定义":"Personalizado","粘贴到此处":"Pegar aquí","创建":"Crear","制造商":"Fabricante","总内存":"Memoria total","最大":"Máximo","品牌":"Marca","逻辑核心":"Núcleo lógico","搜索当前目录":"Buscar en el directorio actual","压缩文件":"Archivo comprimido","取消":"Cancelar","环境控制":"Control de entorno","control_env_tip":"Se configura con texto clave-valor estilo env; comentar una línea la desactiva. allowed_hosts solo permite los hosts coincidentes, forbid_hosts rechaza los coincidentes. Los valores son arrays de expresiones regulares (coincidencia completa, solo el nombre del host sin puerto). Las peticiones rechazadas se desconectan sin respuesta.","只支持以下配置项":"Solo se admiten estas claves","值必须是 JSON 数组":"El valor debe ser un array JSON","正则表达式不合法":"Expresión regular no válida","运行":"Ejecutar","格式":"Formato","压缩到":"Comprimir a","进度":"Progreso","解压到":"Descomprimir a","当前目录":"Directorio actual","解压文件":"Descomprimir archivo","视频格式转换":"Conversión de formato de video","gen_dir":"El archivo objetivo generado está en este directorio","ff_fmt":"Formatos objetivo admitidos por ffmpeg","del_f":"¿Desea eliminar el archivo seleccionado?","输入目录名":"Ingrese el nombre del directorio","cut_ovr":"Confirmar corte (sobrescribir)","cp_ovr":"Confirmar copia (sobrescribir)","修改名字":"Cambiar nombre","输入新名字":"Ingrese el nuevo nombre","个文件正在上传":"archivos se están cargando","确定删除":"Confirmar eliminación","是否删除":"¿Desea eliminar?","输入文本名":"Ingrese el nombre del texto","添加索引":"Agregar índice","物理核心":"Núcleo físico","创建目录":"Crear directorio","访问目录":"Acceder al directorio","mac_dst":"Dirección MAC del dispositivo objetivo","要代理的url":"URL a proxy","系统代理端口":"Puerto de proxy del sistema","返回":"Volver","不允许为空":"No puede estar vacío","ff_none":"No se encontró ffmpeg","disk":"Disco","part":"Partición","lvm":"Volumen lógico","网址":"URL","环境":"Entorno","外部软件":"Software externo","保护路径":"Ruta protegida","软件":"Software","是否安装":"¿Está instalado?","角色管理":"Gestión de roles","用户管理":"Gestión de usuarios","角色id":"ID de rol","角色名":"Nombre de rol","用户id":"ID de usuario","用户名":"Nombre de usuario","目录范围":"Alcance del directorio","可执行的命令":"Comandos ejecutables","禁止目录范围":"Alcance del directorio prohibido","可执行命令":"Comandos ejecutables","系统进程关闭":"Cierre de procesos del sistema","dc_ctdl":"Detener y eliminar contenedores Docker","dc_idl":"Eliminar imágenes Docker","tk_time":"Modificar tiempo del token","自定义资源路由":"Ruta de recursos personalizada","磁盘挂载":"Montaje de disco","ssh_sv":"Guardar clave SSH en disco","外部软件路径":"Ruta del software externo","log_del":"Eliminar, cortar y renombrar archivos","内容更新":"Actualizar contenido","标签编辑权限":"Permisos de edición de etiquetas","ssh代理":"Proxy SSH","http代理":"Proxy HTTP","浏览器代理":"Proxy de navegador","rdp代理":"Proxy RDP","rtsp播放器":"Reproductor RTSP","角色":"Rol","文件回收站":"Papelera de reciclaje de archivos","个人保护路径":"Ruta protegida personal","系统保护路径":"Ruta protegida del sistema","小于一分钟":"Menos de un minuto","分钟前":"hace minutos","小时前":"hace horas","天前":"hace días","月前":"hace meses","年前":"hace años","挂载位置磁盘":"Disco del punto de montaje","信息":"Información","磁盘剩余":"Espacio restante en el disco","文件系统":"Sistema de archivos","文件夹数":"Cantidad de carpetas","文件数":"Cantidad de archivos","当前位置":"Ubicación actual","输入文件名":"Ingrese el nombre del archivo","o_stdo":"Abrir con studio","o_img":"Abrir con el editor de imágenes","预览图片":"Vista previa de la imagen","运行并实时查看":"Ejecutar y ver en tiempo real","实时查看":"Ver en tiempo real","输入参数运行":"Ejecutar con parámetros","以文本打开":"Abrir como texto","以日志打开":"Abrir como registro","上传":"Cargar","文件选项":"Opciones de archivo","添加类目":"Agregar categoría","全部编辑":"Editar todo","输入类目名":"Ingrese el nombre de la categoría","折叠":"Plegar","全部折叠":"Plegar todo","(无内容)":"(Sin contenido)","请求头":"Encabezado de solicitud","请求体":"Cuerpo de la solicitud","值":"Valor","上传文件":"Cargar archivo","下载到本地目录":"Descargar al directorio local","本地地址":"Dirección local","完成":"Completado","结束":"Fin","响应头":"Encabezado de respuesta","正在下载":"Descargando","输入标签名":"Ingrese el nombre de la etiqueta","frm_lm":"El formulario contiene archivos, el navegador no permite agregar","非对称密钥":"Clave asimétrica","将覆盖密钥文件":"Sobrescribirá el archivo de clave","加密算法":"Algoritmo de cifrado","输出格式":"Formato de salida","普通PEM":"PEM normal","生成":"Generar","ssh_dir":"Guardar en el directorio .ssh","私钥":"Clave privada","时间转换器":"Convertidor de tiempo","格式化时间":"Formatear tiempo","毫秒":"Milisegundo","分秒":"Minuto y segundo","实时信息":"Información en tiempo real","运行用户":"Usuario en ejecución","当前系统":"Sistema actual","进程":"Proceso","ld_wait":"Cargando, por favor espere...","选中":"Seleccionado","创建用户":"Crear usuario","升序":"Ascendente","降序":"Descendente","dc_nne":"No se detectó Docker, es posible que el host no tenga Docker instalado o los contenedores estén vacíos","过滤镜像":"Filtrar imágenes","列表更新":"Actualizar lista","执行命令":"Ejecutar comando","打印日志":"Imprimir registro","删除容器":"Eliminar contenedor","删除镜像":"Eliminar imagen","doc_img":"Imagen Docker","doc_icf":"¿Está seguro de que desea eliminar la imagen seleccionada?","系统运行于":"El sistema se ejecuta en","全局变量":"Variable global","up_conc":"Límite máximo de carga de archivos concurrentes","单用户并发数量":"Cantidad de conexiones concurrentes por usuario","系统并发数量":"Cantidad de conexiones concurrentes del sistema","big_res":"¿Habilitar reanudación de carga de archivos grandes?","big_sz":"Tamaño de juicio para archivos grandes (MB)","大文件并发数量":"Cantidad de cargas concurrentes de archivos grandes","big_ck":"Tamaño de bloque de archivos grandes (MB)","页面资源路由":"Ruta de recursos de página","wf_rt":"Ruta de activación de flujo de trabajo","过期时间(s)":"Tiempo de expiración (s)","文件路径":"Ruta del archivo","path_up":"Actualizar ruta protegida del sistema","path_md":"Modificar ruta PATH","执行用户":"Usuario de ejecución","执行":"Ejecutar","wf_api":"Modificar API de activación de flujo de trabajo","up_lim":"Modificar límite de cantidad de archivos cargados en el directorio","功能权限":"Permisos de funcionalidad","角色备注":"Nota del rol","pxy_off":"Descarga a través de proxy HTTP desactivada","工具功能":"Funciones de la herramienta","全局变量设置":"Configuración de variables globales","文件回收站修改":"Modificar papelera de reciclaje de archivos","文件权限":"Permisos de archivo","log_wr":"Crear, cargar, actualizar contenido y descomprimir archivos","只读目录范围":"Alcance del directorio de solo lectura","更新":"Actualizar","use_env":"Usar variables de entorno por defecto","sync_sv":"Sincronizar información con el servidor seleccionado","add_rot":"Agregar directorio raíz de recursos HTTP","dl_here":"Descargar recursos HTTP en este directorio","文件排序":"Ordenar archivos","系统默认":"Predeterminado del sistema","修改时间":"Hora de modificación","时间逆序":"Orden inverso de tiempo","时间顺序":"Orden cronológico","大小逆序":"Orden inverso de tamaño","大小顺序":"Orden de tamaño","文件大小":"Tamaño del archivo","网站标题":"Título del sitio web","通用设置":"Configuración general","主题":"Tema","时区":"Zona horaria","时间":"Hora","服务器时间":"Hora del servidor","在线时间":"Tiempo en línea","离线时间":"Tiempo sin conexión","在线":"En línea","离线":"Fuera de línea","功能文档":"Documentación de funciones","官网地址":"https://filecat.xiaobaidadada.fun/","远程代理":"Proxy remoto","系统管理":"Administración del sistema","网址导航":"Navegación de direcciones web","目录快捷命令":"Comando de acceso directo de directorio","文件快捷命令":"Comando de acceso directo de archivo","系统网络":"Red del sistema","复制名字":"Copiar nombre","分享":"Compartir","复制绝对路径":"Copiar ruta absoluta","复制相对路径":"Copiar ruta relativa","切换目录":"Cambiar directorio","统计信息":"Estadísticas","更新AI知识库":"Actualizar base de conocimientos de IA","exp_hr":"Tiempo restante hasta la expiración (horas)","可以为空":"Puede estar vacío","自动加载":"Carga automática","本地知识库":"Base de conocimientos local","知识库加载信息":"Información de carga de la base de conocimientos","最近一次加载":"Última carga","加载进度":"Progreso de carga","总文件数量":"Número total de archivos","总文件字符数量":"Número total de caracteres de archivos","总文件大小":"Tamaño total de archivos","总耗时":"Tiempo total consumido","上一页":"Página anterior","目标地址":"Dirección de destino","目标端口":"Puerto de destino","连接状态":"Estado de la conexión","个人设置":"Configuración personal","系统设置":"Configuración del sistema","文件后缀":"Sufijo de archivo","禁止执行的命令":"Comandos prohibidos","Ai 配置":"Configuración de IA","文件分享":"Compartir archivos","输入跳转的目录":"Ingrese el directorio al que desea saltar","文件分享列表":"Lista de archivos compartidos","过期小时":"Horas hasta la expiración","下载次数":"Número de descargas","剩余时间":"Tiempo restante","文件加载方式":"Modo de carga de archivos","全部加载文件":"Cargar todos los archivos","scrll_l":"Cargar archivos con desplazamiento paginado","剩余时间(h)":"Tiempo restante (h)","网络代理":"Proxy de red","个人":"Personal","安装方式":"Método de instalación","是否开启":"Activado","系统启动执行":"Ejecutar al iniciar el sistema","表达式":"Expresión","用户":"Usuario","详细信息":"Detalles","服务器配置":"Configuración del servidor","客户端列表":"Lista de clientes","更多服务器":"Más servidores","端口映射":"Asignación de puertos","序号":"N.º","服务器端口":"Puerto del servidor","转发客户端名称":"Nombre del cliente de reenvío","服务端口":"Puerto del servicio","转发ip":"IP de reenvío","转发端口":"Puerto de reenvío","客户端代理配置":"Configuración del proxy del cliente","客户端桥接配置":"Configuración del puente del cliente","远程地址":"Dirección remota","在线时长":"Duración en línea","fwd_nm":"Nombre del cliente de reenvío","sv_ntf":"Guardar y notificar al cliente la primera clave y el puerto","br_port":"Lista de puertos del servidor puente","输入消息":"Introducir mensaje","用户权限":"Permisos de usuario","系统管理权限":"Permisos de administración del sistema","网络功能权限":"Permisos de funciones de red","Ai 设置权限":"Permisos de configuración de IA","系统设置权限":"Permisos de configuración del sistema","系统环境设置":"Configuración del entorno del sistema","sys_env":"Página de configuración del entorno del sistema","sys_env_setting_tip":"Se usa para configurar varios entornos del sistema, incluidas algunas funciones similares a nginx","自定义路由页面":"Página de ruta personalizada","代理功能":"Funciones de proxy","其他功能":"Otras funciones","ddns":"DDNS","ai_page":"Página de chat de IA","pty cmd":"Comando PTY","wf_run":"Ejecución de flujo de trabajo","wf_user":"Usuario de ejecución del flujo de trabajo","cmd_rst":"Comando de reinicio filecat-restart","cmd_upg":"Comando de actualización filecat-upgrade","cmd_dwn":"Comando para cerrar el proceso principal filecat-down","cmd_ai":"Comando de IA (chat de IA)","个性化设置":"Configuración personalizada","lgn_usr":"Mostrar información del usuario al iniciar sesión","个人环境":"Entorno Personal","系统环境":"Entorno del Sistema","持久化":"Persistir","个人环境设置":"Configuración del entorno personal","其他参数":"Otros parámetros","父编号":"ID padre","代理配置":"Configuración de proxy","桥接配置":"Configuración del puente","brg_tip":"Establezca un puerto en el cliente. Al acceder a este puerto, el tráfico se reenvía a la primera dirección dentro del entorno de red de otro cliente.","内网穿透":"Penetración de intranet","fc_pxy":"Acceso proxy Filecat","fc_pxyw":"Acceso proxy Filecat mediante frontend de servidor","fc_pxyr":"Dirección de proxy Filecat personalizada","fc_pxyc":"Copiar URL de proxy de filecat","fc_pxyo":"Abrir URL de proxy de filecat","对端账号":"Cuenta remota","对端密码":"Contraseña remota","保存账号":"Guardar cuenta","验证登录":"Verificar inicio","已设置":"Establecido","未设置":"Sin establecer","便于辨认的名字":"Un nombre reconocible","对端 FileCat 登录名":"Usuario de FileCat remoto","留空表示不修改":"Vacío = sin cambios","请填写对端账号":"Introduce la cuenta remota","已保存":"Guardado","原客户端":"Cliente de origen","原目录":"Directorio de origen","目标客户端":"Cliente de destino","目标目录":"Directorio de destino","忽略目录":"Directorio ignorado","双向同步":"Sincronización bidireccional","客户端文件同步":"Sincronización de archivos del cliente","客户端设置":"Configuración del cliente","pxy_nln":"No usar servidor proxy para direcciones locales (Intranet)","忽略ip":"Ignorar IP","ai_ask":"Preguntar todo al servidor","本地目录":"Directorio local","响应体":"Cuerpo de la respuesta","客户端功能":"Funciones del cliente","全量同步":"Sincronización completa","公钥":"Clave pública","跟随系统":"Seguir el sistema","字符消耗统计":"Estadísticas de consumo de caracteres","加载中...":"Cargando...","对话轮次":"Turnos de conversación","AI输入字符":"Caracteres de entrada IA","AI输出字符":"Caracteres de salida IA","暂无统计数据":"No hay estadísticas disponibles","会话":"Sesiones","新会话":"Nueva sesión","提示词":"Prompt","llm_pmt":"Prompt editable por LLM","LLM编辑开关":"Interruptor de edición LLM","编辑规则":"Reglas de edición","选择系统提示词":"Seleccionar Prompt del Sistema","清空全部会话":"Borrar todas las sesiones","cf_all":"¿Confirmar eliminar todas las sesiones de chat?","cf_msgs":"¿Confirmar eliminar mensajes seleccionados?","cf_ses":"¿Confirmar eliminar sesiones seleccionadas?","cf_one":"¿Confirmar eliminar este mensaje?","批量选择":"Selección por lotes","查看所有用户会话":"Sesiones de todos los usuarios","查看全部会话时不可发送消息":"No se pueden enviar mensajes mientras se ven todas las sesiones","仅看我的会话":"Solo mis sesiones","取消批量选择":"Cancelar selección","删除选中消息":"Eliminar mensajes seleccionados","删除选中会话":"Eliminar sesiones seleccionadas","切换模型":"Cambiar modelo","添加文件":"Agregar archivo","无描述":"Sin descripción","暂无工具":"Sin herramientas","查看工具":"Ver herramientas","加载工具":"Cargar herramientas","系统会话提示词":"Prompts de sesión del sistema","删除记录":"Eliminar registro","手动加载":"Carga manual","从索引删除":"Eliminar del índice","知识库开关":"Interruptor de base de conocimientos","文本对话":"Diálogo de texto","图片生成":"Generación de imágenes","向量嵌入":"Incrustación vectorial","图片参数设置":"Configuración de parámetros de imagen","更多属性":"Más atributos","model类型":"Tipo de modelo","成为tool":"Convertirse en herramienta","操作":"Operaciones","查看Git提交":"Ver commits Git","Git":"Git","变更":"Changes","提交记录":"Commits","全选":"Select All","没有变更":"No changes","暂无提交记录":"No commits yet","分支":"Branch","git_msg":"Enter commit message...","提交":"Commit","暂存全部":"Stage All","暂存选中":"Stage Selected","取消暂存":"Unstage","已暂存":"Staged","已暂存全部":"All staged","已取消暂存":"Unstaged","请输入提交信息":"Please enter commit message","提交成功":"Commit successful","推送成功":"Push successful","拉取成功":"Pull successful","切换分支成功":"Branch switched","远程操作":"Remote Operations","拉取":"Pull","推送":"Push","强制推送":"Force Push","暂存工作区":"Stash","暂存工作区成功":"Stash successful","恢复工作区":"Stash Pop","恢复工作区成功":"Stash pop successful","刷新":"Refresh","请先选择文件":"Please select files first","提示:":"Tips:","git_stg":"Check files on the left, then use \\"Stage Selected\\" to add them to staging area","git_cmt":"Enter commit message and click \\"Commit\\"","git_cf":"If conflicts occur, please resolve them in shell before committing","git_frc":"\\"Force Push\\" will overwrite the remote branch, use with caution","配置表":"Config Table","offcal":"Dejar vacío para usar GitHub Releases oficial","def_180":"Predeterminado 180s (3 minutos)","用户配置":"Configuración de usuario","邮箱":"Correo","代理设置":"Configuración de proxy","全局代理":"Proxy global","仓库代理":"Proxy del repositorio","修改":"Editar","用户配置已保存":"Configuración de usuario guardada","代理配置已保存":"Configuración de proxy guardada","pxy_clr":"Dejar vacío para borrar el proxy","pxy_nte":"La configuración de usuario y el proxy global se aplican a todos los repositorios","pxy_url":"Dirección del proxy HTTP","端口扫描":"Escaneo de Puertos","目标主机":"Host Destino","起始端口":"Puerto Inicial","结束端口":"Puerto Final","并发数":"Concurrencia","超时(ms)":"Tiempo de Espera (ms)","扫描":"Escanear","扫描结果":"Resultados del Escaneo","扫描完成":"Escaneo completado","扫描失败":"Escaneo fallido","正在扫描...":"Escaneando...","未发现开放端口":"No se encontraron puertos abiertos","scan_in":"Ingrese los parámetros y haga clic en Escanear","hostreq":"La dirección del host no puede estar vacía","端口范围无效":"Rango de puertos no válido","portrng":"El puerto inicial no puede ser mayor que el puerto final","开放":"Abierto","总计扫描":"Total Escaneado","已发现":"Encontrado","当前":"Actual","扫描已取消":"Escaneo cancelado","自动换行":"Ajuste automático","不换行":"Sin ajuste","替换":"Reemplazar","env编辑":"Editar env","命令确认":"Confirmación de comando","命令检测开启":"Habilitar detección de comandos","命令检测关闭":"Deshabilitar detección de comandos","命令检测已开启":"Detección de comandos habilitada","命令检测已关闭":"Detección de comandos deshabilitada","此会话不再询问":"No preguntar más en esta sesión","doc_pxy":"Configuración de proxy de Docker","HTTP 代理":"Proxy HTTP","pxy_htt":"Proxy HTTPS","pxy_nne":"No Proxy","保存失败":"Error al guardar","MD编辑器":"Editor MD","行":"Fila","列":"Columna","默认":"Predeterminado","删除行":"Eliminar fila","删除列":"Eliminar columna","上方插入行":"Insertar fila arriba","切换表头行":"Alternar fila de encabezado","合并单元格":"Combinar celdas","拆分单元格":"Dividir celda","下方插入行":"Insertar fila abajo","左侧插入列":"Insertar columna a la izquierda","右侧插入列":"Insertar columna a la derecha","插入表格":"Insertar tabla","加载中":"Cargando","打开失败":"Error al abrir","重启失败":"Error al reiniciar","doc_cfg":"Configuración de Docker","名单视图":"Vista de lista","文本视图":"Vista de texto","目标(To)":"Destino (To)","动作":"Acción","fw_from":"Origen (From)","删除规则":"Eliminar regla","规则编号":"Número de regla","点击复制":"Clic para copiar","镜像加速":"Espejos de registro","不安全仓库":"Registros inseguros","开启调试":"Activar depuración","数据存储目录":"Directorio de datos","存储驱动":"Controlador de almacenamiento","日志驱动":"Controlador de registros","fw_iptb":"Habilitar iptables","lve_rst":"Restauración en vivo","添加规则":"Agregar regla","请填写端口号":"Introduzca un puerto","方向":"Dirección","协议":"Protocolo","来源地址":"Dirección de origen","获取失败":"Error al obtener","进程环境变量":"Variables de entorno del proceso","端口实例":"Instancia de puerto","srchbln":"Abrir directorio en modo de búsqueda en blanco","搜索会话":"Buscar sesiones","sw_mdl":"Permitir cambiar de modelo de IA","选择模型":"Seleccionar modelo","mv_self":"No se puede mover una carpeta dentro de sí misma","网站 Logo":"Logotipo del sitio","lclorur":"Ruta de archivo local o URL de imagen http(s)","全部":"Todo","源码模式":"Modo código fuente","实时编辑模式":"Modo de edición en vivo","编辑器设置":"Configuración del editor","正文最大宽度":"Ancho máximo del contenido","正文左右边距":"Margen lateral del contenido","正文字号":"Tamaño de fuente del contenido","行高":"Altura de línea","恢复默认":"Restaurar valores predeterminados","保存中":"Guardando","预览":"Vista previa","nprmtp":"No tiene permiso para cambiar esta configuración. A continuación se muestra la configuración actual.","md_set":"Configuración del editor MD","目录挂载":"Montaje de directorio","总开关":"Interruptor general","挂载":"Montar","挂载到网盘":"Montar en la nube","编辑挂载配置":"Editar montaje","取消挂载":"Desmontar","确认取消挂载":"Confirmar desmontaje","已取消挂载":"Desmontado","该目录尚未挂载":"Este directorio no está montado","挂载目录":"Directorio de montaje","只读":"Solo lectura","挂载类型":"Tipo de montaje","显示名称":"Nombre visible","标识色":"Color del marcador","只读模式":"Modo de solo lectura","测试连接":"Probar conexión","测试中":"Probando","连接成功":"Conexión correcta","连接失败":"Error de conexión","请选择挂载类型":"Seleccione un tipo de montaje","请填写":"Rellene: ","未授权":"No autorizado","服务地址":"Dirección del servidor","起始目录":"Directorio inicial","留空表示根目录":"Dejar vacío para el directorio raíz","主机":"Host","默认 22":"Por defecto 22","私钥内容":"Contenido de la clave privada","与私钥二选一":"Elija esto o la clave privada","与密码二选一":"Elija esto o la contraseña","存储桶":"Bucket","区域":"Región","强制路径风格":"Forzar estilo de ruta","授权账号":"Cuenta autorizada","百度网盘授权":"Autorización de Baidu Netdisk","去授权":"Autorizar","完成授权":"Completar autorización","授权码":"Código de autorización","回调地址":"URI de redirección","rqappky":"Introduzca el AppKey","rq_scrt":"Introduzca el SecretKey","请填写授权码":"Introduzca el código de autorización","svappfr":"Guarde primero la configuración de la app","授权成功":"Autorización correcta","账号可用":"La cuenta está disponible","账号不可用":"La cuenta no está disponible","校验":"Verificar","已授权账号":"Cuentas autorizadas","已删除":"Eliminado","处理中":"Procesando","AppKey":"AppKey","网盘挂载":"Montaje en la nube","凭据管理":"Credenciales","凭据":"Credencial","新增凭据":"Añadir credencial","凭据已丢失":"Credencial perdida","挂载列表":"Montajes","新增挂载":"Añadir montaje","munt_rq":"El directorio de montaje no puede estar vacío","请选择凭据":"Seleccione una credencial","请选择类型":"Seleccione un tipo","启用":"Activado","已停用":"Desactivado","确认删除":"Confirmar eliminación de","nmuntpr":"La cuenta actual no tiene permiso para montar directorios","百度网盘":"Baidu Netdisk","应用配置":"Ajustes de la app","授权":"Autorizar","授权失败":"Autorización fallida","strtdrt":"Dir inicial","ftr2rmt":"Reenviar al remoto","ftr2rmt_tip":"Las solicitudes de terminal, workflow y git en este directorio se ejecutan en el FileCat remoto","授权检测":"Comprobar autorización","scrtkep":"Deja SecretKey vacío para no modificarlo","编辑应用":"Editar app","新增授权账号":"Añadir cuenta autorizada","一键授权":"Autorizar con un clic","outh_ob":"Manual (oob)","pst_cd":"Pegue el código de autorización","确认授权":"Confirmar autorización","授权检测/刷新":"Verificar / actualizar","检测完成":"Comprobación completada","导入":"importados","账号名":"Nombre de la cuenta","百度账号":"Cuenta de Baidu","网盘昵称":"Apodo de Netdisk","授权状态":"Estado de autorización","过期时间":"Caduca el","授权时间":"Autorizado el","已授权":"Autorizado","已过期":"Caducado","停用":"Desactivar","已配置":"Configurado","未配置":"Sin configurar","网盘使用":"Uso de Netdisk","自动刷新":"Actualización automática","编辑账号":"Editar cuenta","使用":"Uso","当前为挂载目录":"Directorio montado","启用挂载":"Habilitar montajes","已启用":"Habilitado","挂载已启用":"Montajes habilitados","挂载已停用":"Montajes deshabilitados","muntont":"Montajes habilitados, clic para deshabilitar","muntoff":"Montajes deshabilitados, clic para habilitar","凭证管理":"Credenciales","授权方式":"Modo de autorización","去授权(一键)":"Autorizar (un clic)","去授权(手动)":"Autorizar (manual)","保存应用配置":"Guardar configuración","atathtp":"Un clic: volverá aquí tras la autorización y la cuenta se añadirá automáticamente","atathnt":"El modo de un clic requiere registrar /mount/baidu/callback de este servicio como URI de redirección en la consola de Baidu","pstatht":"Manual: no requiere URI de redirección. Tras autorizar, copie el código de la página de Baidu, péguelo abajo y pulse Completar","crd_tp":"Una credencial es la información de la cuenta para conectarse a un disco en la nube o a un host remoto. Puede ser compartida por varios puntos de montaje; al editarla se aplica en todos a la vez.","bidacct":"Las cuentas de Baidu Netdisk no se gestionan aquí. Autorícelas en el panel \\"Baidu Netdisk\\" de abajo; la cuenta correspondiente se crea automáticamente tras la autorización.","pwdkept":"Al editar, dejar vacío un campo de tipo contraseña mantiene el valor original.","tstbfrs":"Antes de guardar, puede pulsar \\"Probar conexión\\" para verificar que la cuenta funciona.","prtwbdv":"Un protocolo de archivos genérico compatible con Jianguoyun, Synology NAS, Nextcloud, Alist, etc. Basta una URL de servicio y una cuenta para acceder al directorio remoto.","prtsftp":"Accede a un directorio de un servidor remoto por SSH, transfiriendo archivos mediante el subsistema SFTP. Ideal para montar un directorio de otra máquina Linux.","prt_s3":"Servicios de almacenamiento de objetos accesibles por el protocolo S3, como MinIO, Alibaba Cloud OSS, Tencent COS, Qiniu y Cloudflare R2. Requiere URL de servicio, bucket y un par de claves.","深搜":"Búsqueda prof.","搜索":"Buscar","搜索中":"Buscando","范围":"Ámbito","结果过多":"Demasiados resultados, refine la palabra clave","已显示":"Mostrado","搜文件名":"Buscar nombre de archivo recursivamente","搜到该处":"Ir a su carpeta","打开所在目录":"Abrir carpeta contenedora","输入后搜":"Escribe un nombre y pulsa Enter","无匹配":"No se encontraron archivos","结果截断":"Demasiados resultados, mostrando 500","缩放调整":"Ajustar zoom","缩放调整成功":"Zoom ajustado correctamente","缩放百分比":"Porcentaje de zoom","未加载":"Sin cargar","加载成功":"Cargado","加载失败":"Error al cargar","个工具":"herramientas","No share found":"No se encontró ningún recurso compartido","Enter host first":"Introduce el host primero","下一步":"Siguiente","上一步":"Atrás","共享目录":"Carpeta compartida","prt_smb":"Carpeta compartida de Windows (SMB/CIFS). Rellena el host y la cuenta y elige el nombre del recurso.","prt_bd":"Baidu Netdisk. Crea una app en la plataforma abierta de Baidu, rellena AppKey / SecretKey y autoriza una cuenta.","没有找到共享":"No se encontraron recursos compartidos","粘贴授权码 code":"Pega el código de autorización","重新授权":"Autorizar de nuevo","请选择账号":"Seleccione una cuenta","请填写备注":"Introduzca una nota","账号已丢失":"Cuenta no encontrada","已暂存的更改":"Cambios preparados","全部暂存":"Preparar todo","全部取消暂存":"Quitar todo","暂存":"Preparar","无差异":"Sin diferencias","二进制文件":"Archivo binario","单栏":"Unificada","并排":"Lado a lado","点击左侧文件查看差异":"Haga clic en un archivo de la izquierda para ver los cambios","未跟踪文件无差异":"Los archivos sin seguimiento no tienen diferencias","请先暂存要提交的文件":"Prepare primero los archivos que desea confirmar","没有已更改的文件":"No hay archivos modificados","未暂存":"Sin preparar","逐行归属":"Autoría por línea","无法读取该文件的归属信息":"No se puede leer la autoría de este archivo","全部文件":"Todos los archivos","新建分支":"Nueva rama","删除分支":"Eliminar rama","确认删除分支":"¿Eliminar la rama?","合并到此分支":"Fusionar en esta rama","新分支名":"Nombre de la nueva rama","当前分支":"Rama actual","切换到":"Cambiar a","分支创建成功":"Rama creada","分支删除成功":"Rama eliminada","合并成功":"Fusionado","标签":"Etiquetas","新建标签":"Nueva etiqueta","标签名":"Nombre de etiqueta","暂无标签":"Sin etiquetas","标签创建成功":"Etiqueta creada","标签删除成功":"Etiqueta eliminada","标签推送成功":"Etiqueta enviada","删除标签":"Eliminar etiqueta","确认删除标签":"¿Eliminar etiqueta?","请输入标签名":"Introduce el nombre de la etiqueta","推送到远程":"Enviar al remoto","基于提交":"Basado en el commit","基于当前提交":"Basado en el commit actual","暂存工作区记录":"Registros de stash","暂无记录":"Sin registros","恢复并删除":"Aplicar y eliminar","已恢复并删除记录":"Restaurado y eliminado","已应用":"Aplicado","远程分支":"Ramas remotas","拉取远程信息":"Obtener","拉取并清理已删除分支":"Obtener y limpiar","未配置远程仓库":"Sin remoto configurado","签出到本地":"Extraer en local","拉取完成":"Obtención completada","冲突":"Conflictos","采用我方版本":"Usar la nuestra","采用对方版本":"Usar la suya","标记已解决":"Marcar como resuelto","标记全部已解决":"Finalizar fusión","放弃合并":"Abortar fusión","确认放弃当前合并并恢复到操作前状态":"¿Abortar y restaurar el estado anterior?","已解决冲突":"Conflicto resuelto","已放弃合并":"Fusión abortada","合并已完成":"Fusión finalizada","撤销提交":"Revertir commit","将生成一个反向提交来撤销":"Se creará un commit inverso para revertir","已撤销":"Revertido","摘取提交":"Cherry-pick","将该提交应用到当前分支":"Aplicar este commit a la rama actual","摘取成功":"Cherry-pick aplicado","搜索提交":"Buscar commits","提交信息关键词":"Mensaje del commit","作者":"Autor","请输入搜索条件":"Introduce criterios de búsqueda","操作历史":"Historial","回退到此处":"Restablecer aquí","强制回退(丢弃改动)":"Reset duro (descartar cambios)","此操作将永久丢弃未提交的改动":"Esto descarta permanentemente los cambios sin confirmar","已回退":"Restablecido","已强制回退":"Reset duro aplicado","子模块":"Submódulos","无子模块":"Sin submódulos","初始化并更新子模块":"Inicializar y actualizar submódulos","子模块更新完成":"Submódulos actualizados","未初始化":"No inicializado","与记录不一致":"Difiere del registro","正常":"Normal","当前提交":"Commit actual","领先上游":"Por delante del remoto","落后上游":"Por detrás del remoto","钩子":"Ganchos","停用钩子":"Desactivar gancho","确认删除并停用":"Eliminar y desactivar","保存并启用":"Guardar y activar","已保存并启用":"Guardado y activado","与工作区对比":"Comparar con el área de trabajo","仓库":"Repositorios","初始化仓库":"Inicializar repositorio","克隆仓库":"Clonar repositorio","仓库初始化成功":"Repositorio inicializado","克隆成功":"Clonado","目录名":"Nombre del directorio","请输入目录名":"Introduce el nombre del directorio","仓库地址":"URL del repositorio","请输入仓库地址":"Introduce la URL del repositorio","当前目录下没有仓库":"No hay repositorios aquí","进入":"Abrir","修改最后一次提交":"Modificar el último commit","已修改最后一次提交":"Último commit modificado","分支比较":"Comparar ramas","两个分支没有差异":"No hay diferencias entre ramas","确认删除远程分支":"Eliminar rama remota","该分支会从远程仓库删除":"Esta rama se eliminará del repositorio remoto","删除远程分支":"Eliminar rama remota","将":"Fusionar","合并到":"en","未推送":"Sin enviar","已到底部":"No hay más","没有可提交的更改":"Nada que confirmar","存在未暂存的改动,是否一并暂存并提交?":"Hay cambios sin preparar. ¿Prepararlos y confirmarlos juntos?","二进制文件无法比较":"No se puede comparar un archivo binario","请选择文件查看改动":"Selecciona un archivo para ver los cambios","clk_edt":"Clic para editar","rendering":"Renderizando…","思维导图":"Mapa mental","新窗口打开":"Abrir en nueva pestaña","已选":"Seleccionados","复制所选":"Copiar selección","删除所选":"Eliminar selección","全部复制":"Copiar todo","多选":"Seleccionar","wbvpn_allow":"Lista blanca de destinos WebVPN","wbvpn_allow_ph":"Una entrada por línea: 192.168.1.0/24 (CIDR) / 192.168.1.1 (IP) / router.local (dominio, coincidencia exacta, sin subdominios)","wbvpn_tip":"Lista blanca de destinos WebVPN. Una entrada por línea, tres formatos:\\n · Rango CIDR: 192.168.1.0/24\\n · IP exacta: 192.168.1.1 (también 10.0.0.5, fd00::/8, ::1)\\n · Dominio exacto: router.local, nas.example.com (coincidencia exacta, NO incluye subdominios)\\nLas direcciones públicas se permiten por defecto. Las privadas, loopback, link-local, metadatos en la nube (169.254.169.254) y reservadas se deniegan. Las líneas mal formadas se ignoran.","wbvpn_port_range":"Rango de puertos proxy","wbvpn_port_tip":"Cada destino ocupa un puerto independiente. Abra la URL de acceso para navegar; la ruta se mantiene limpia, el enrutado SPA funciona y los sitios quedan aislados por origen.","wbvpn_port_tip2":"El acceso requiere iniciar sesión: abrir desde aquí envía un token una vez y luego una cookie mantiene la sesión. Los destinos siguen sujetos a la lista blanca / política de direcciones.","wbvpn_port_tip3":"Los enlaces de la página que apuntan a un destino activo se reescriben automáticamente al puerto de ese destino, de modo que el clic permanece dentro del proxy; los dominios no configurados como destino no se modifican.","网页代理目标":"Destinos proxy","访问地址":"URL de acceso","打开":"Abrir","已复制":"Copiado","复制失败":"Error al copiar","添加成功":"Añadido","目标地址不能为空":"La dirección de destino no puede estar vacía","目标地址例如":"Dirección de destino, ej. 192.168.1.1:8080","网页代理":"Proxy web","当前窗口打开":"Abrir en pestaña actual","修改成功":"Modificado","浏览器代理编辑":"Edición del proxy de navegador","已禁用":"Deshabilitado","prt_local":"Directorio local. Indica una ruta absoluta existente en esta máquina como origen; tras montarlo podrás acceder a él como un enlace de directorio dentro de filecat.","移动到最上":"Mover arriba","移动到最下":"Mover abajo","会话设置":"Configuración de sesión","服务器工作目录":"Directorio de trabajo del servidor","服务器工作目录提示":"p. ej.: D:\\\\projects\\\\myapp","AI 聊天":"Chat IA","动态域名解析":"DNS dinámico","平台":"Proveedor","账号凭证":"Credenciales","域名绑定":"Vinculación de dominio","IP 来源":"Origen de IP","域名":"Dominio","多个域名用空格分隔":"Separe varios dominios con espacios","绑定":"Vinculación","填写格式":"Formato","请填写账号凭证":"Introduzca las credenciales","确定删除吗":"¿Confirmar eliminación?","ddns_help_1":"Configure DDNS para actualizar automáticamente los registros DNS con su IP pública actual.","ddns_help_2":"Los orígenes de IP incluyen interfaces locales y URL HTTP personalizadas.","请输入地址":"Introduzca la URL","IP 来源管理":"Gestionar orígenes de IP","暂无数据":"Sin datos","http_source_tip":"Añada una fuente de IP: una URL HTTP que devuelva su IP pública (p. ej. https://4.ipw.cn) o una IP fija.","同步间隔":"Intervalo de sincronización","账号状态":"Cuenta","上次同步":"Última sincronización","验证":"Verificar","未验证":"Sin verificar","失败":"Fallo","同步完成":"Sincronización completada","间隔不能小于 10 秒":"El intervalo debe ser de al menos 10 segundos","文字":"Texto","请填写完整的账号凭证":"Complete todos los campos de credenciales","加载时间线失败":"Error al cargar la línea de tiempo","展开编辑":"Mostrar edición","收起编辑":"Ocultar edición","添加阶段":"Añadir fase","上移":"Subir","下移":"Bajar","起始时间":"Hora inicio","结束时间":"Hora fin","阶段倒置":"Invertir fases","在阶段前插入":"Insertar antes","在阶段后插入":"Insertar después","拖动排序":"Arrastra para reordenar","导出 SVG":"Exportar SVG","折叠全部阶段":"Contraer todas las fases","展开全部阶段":"Expandir todas las fases","导出图片":"Exportar como imagen","导出图片失败":"Error al exportar la imagen","撤销":"Deshacer","重做":"Rehacer","缩小":"Alejar","放大":"Acercar","重置缩放":"Restablecer zoom","进入编辑模式":"Entrar en modo edición","退出编辑模式":"Salir del modo edición","事件":"Evento","标题":"Título","描述":"Descripción","日期":"Fecha","左侧":"Izquierda","右侧":"Derecha","颜色":"Color","自定义颜色":"Color personalizado","跟随阶段":"Seguir fase","拖动事件气泡可改变位置与所属阶段":"Arrastra la burbuja para cambiar su posición y fase","删除事件":"Eliminar evento","在左侧添加事件":"Añadir evento a la izquierda","在右侧添加事件":"Añadir evento a la derecha","删除阶段":"Eliminar fase","阶段":"Fase","阶段头":"Cabecera de fase","显示":"Mostrar","隐藏":"Ocultar","拖动阶段头可调整顺序":"Arrastra la cabecera para reordenar","用上移下移调整事件顺序,用左右切换事件所在侧":"Usa arriba/abajo para reordenar eventos y izquierda/derecha para cambiar de lado","拖动调整阶段高度":"Arrastra para ajustar la altura de la fase","未命名":"Sin título","有未保存的修改,确定要关闭吗?":"Hay cambios sin guardar. ¿Cerrar de todos modos?","纵向":"Vertical","横向":"Horizontal","节点样式":"Estilo de nodo","圆点":"Punto","圆形":"Círculo","方形":"Cuadrado","图片":"Imagen","卡片样式":"Estilo de tarjeta","卡片":"Tarjeta","朴素":"Simple","气泡":"Burbuja","连线风格":"Estilo de línea","实线":"Sólida","虚线":"Discontinua","点线":"Punteada","显示连线":"Mostrar conectores","上侧":"Arriba","下侧":"Abajo","添加事件":"Añadir evento","图片地址":"URL de imagen","拖动调整卡片宽度":"Arrastra para ajustar el ancho de la tarjeta","拖动调整连线长度":"Arrastra para ajustar la longitud del conector","隐藏阶段头":"Ocultar encabezado de fase","显示阶段头":"Mostrar encabezado de fase","时间线":"Línea de tiempo","添加子节点":"Añadir nodo hijo","添加同级节点":"Añadir nodo hermano","删除节点":"Eliminar nodo","插入图片":"Insertar imagen","插入图标":"Insertar icono","插入超链接":"Insertar hipervínculo","节点备注":"Nota del nodo","结构":"Estructura","逻辑结构图":"Estructura lógica","组织结构图":"Organigrama","目录组织图":"Diagrama de catálogo","时间轴(左)":"Línea de tiempo (izq.)","时间轴(下)":"Línea de tiempo (abajo)","时间轴(上)":"Línea de tiempo (arriba)","时间轴(竖)":"Línea de tiempo (vert.)","鱼骨图":"Espina de pescado","鱼骨图(右)":"Espina de pescado (der.)","曲线":"Curva","直线":"Recta","直连":"Directa","默认主题":"Predeterminado","经典":"Clásico","暗色":"Oscuro","极简":"Mínimo","缤纷":"Colorido","请先选中一个节点":"Selecciona un nodo primero","请输入链接地址":"Introduce la URL","加载思维导图失败":"Error al cargar el mapa mental","编辑器尚未就绪":"Editor no listo","中心主题":"Tema central","适应窗口":"Ajustar a ventana","插入父节点":"Insertar nodo padre","粘贴":"Pegar","节点标签":"Etiqueta del nodo","请输入节点备注":"Introduce la nota","请输入节点标签,多个用逗号分隔":"Introduce etiquetas separadas por comas","添加概要":"Añadir resumen","删除概要":"Eliminar resumen","请先选中要合并的节点(按住 Ctrl 拖框可多选)":"Selecciona los nodos a fusionar (mantén Ctrl y arrastra para multiselección)","删除图标":"Eliminar icono","删除备注":"Eliminar nota","删除超链接":"Eliminar enlace","供应商设置":"Configuración de proveedores","默认model":"Modelo por defecto","全局prompt":"Prompt global","全局":"Global","model请求参数json编写":"JSON de parámetros","额外参数设置":"Parámetros extra","编辑器自动保存":"Autoguardado del editor","自动保存间隔(秒)":"Intervalo de autoguardado (s)","请输入不小于 1 的整数(秒)":"Introduzca un entero >= 1 (segundos)","文本编辑器(ace)":"Editor de texto (Ace)","md编辑器":"Editor MD","思维导图编辑器":"Editor de mapas mentales","draw编辑器":"Editor de dibujo","时间线编辑器":"Editor de líneas de tiempo","图片编辑器":"Editor de imágenes","excel编辑器":"Editor de Excel","编辑器":"Editores","cron表达式":"Expresión Cron","系统提示词":"Prompt del sistema","不使用":"Ninguno","消息数":"Mensajes","来源":"Origen","更多操作":"Más acciones","环境变量":"Variables de entorno","暂无环境变量":"Sin variables de entorno","环境变量的 KEY 不能为空":"La KEY de la variable de entorno no puede estar vacía","重启成功":"Reiniciado correctamente","重启服务":"Reiniciar servicio","配置已保存,是否立即重启该服务让新配置生效?":"Configuración guardada. ¿Reiniciar el servicio ahora para aplicarla?","暂停中":"Pausando","discard":"Descartar cambios","discarded":"Cambios descartados","discard_untracked_tip":"Este archivo no está bajo control de versiones. Descartar lo eliminará permanentemente. ¿Continuar?","discard_modified_tip":"Los cambios locales se descartarán y se restaurará la versión del repositorio. ¿Continuar?","discard_selected_tip":"Se descartarán los cambios locales de los {{n}} archivo(s) seleccionado(s). ¿Continuar?","加载资源失败":"No se pudo cargar el recurso","网络错误":"Error de red","没有安装smartmontools":"smartmontools no está instalado","挂载文件已生效":"Archivo de montaje aplicado","刷新成功":"Actualizado","未选择转发送 client":"No se seleccionó cliente de reenvío","删除完成":"Eliminado","保护路径不能删除":"No se puede eliminar una ruta protegida","MCP工具加载成功":"Herramientas MCP cargadas","没有选中":"Nada seleccionado","不能为空":"No puede estar vacío","和原文件格式后缀一样":"Misma extensión que el archivo original","发生错误":"Se produjo un error","不支持的文件后缀":"Extensión de archivo no compatible","更新到AI知识库成功":"Añadido a la base de conocimiento de IA","文件名不能为空":"El nombre del archivo no puede estar vacío","挂载目录不能为空":"El directorio de montaje no puede estar vacío","重复挂载":"Montaje duplicado","该设备块没有具体路径":"Este dispositivo no tiene una ruta concreta","该设备块没有文件系统":"Este dispositivo no tiene sistema de archivos","路由不能为空":"La ruta no puede estar vacía","创建完成":"Creado","保存完成":"Guardado","获取进程输出失败":"No se pudo obtener la salida del proceso","进程已终止":"Proceso terminado","终止进程失败":"No se pudo terminar el proceso","账号密码不能为空":"La cuenta y la contraseña no pueden estar vacías","两次密码不一样":"Las contraseñas no coinciden","目录不能为空":"El directorio no puede estar vacío","秒数不能为空":"Los segundos no pueden estar vacíos","清理完成,重新登录":"Limpieza completada, vuelve a iniciar sesión","密钥不能为空":"La clave no puede estar vacía","保存到服务器":"Guardar en el servidor","加载资源失败,请检查文件":"No se pudo cargar el recurso, revisa el archivo","操作成功":"Hecho","未获取到路径":"No se pudo obtener la ruta","复制成功":"Copiado","暂无聊天记录":"Sin historial de chat","暂无内容":"Sin contenido","到达顶部":"Se alcanzó el inicio","范围在0-100":"El rango es 0-100","不存在的http method":"Método HTTP no admitido","不存在":"No existe","不是数字":"No es un número","已经存在的页面资源路由配置目录设置":"Este directorio de rutas de recursos de página ya está configurado","mac地址不能为空":"La dirección MAC no puede estar vacía","发送唤醒命令成功":"Comando de activación enviado","不能都为空":"Los campos no pueden estar todos vacíos","转换成":"Convertir a","转换":"Convertir","格式化":"Formatear","结果转到输入":"Mover resultado a entrada","示例":"Ejemplo","输入":"Entrada","输出":"Salida","内容为空":"El contenido está vacío","输出为空":"La salida está vacía","编码":"Codificar","解码":"Decodificar","大写":"Mayúsculas","空格分隔":"Separado por espacios","正则表达式":"Expresión regular","分组索引":"índices","忽略大小写":"ignorar mayúsculas","多行":"multilínea","含换行":"punto incluye salto","Unicode 集合":"conjuntos unicode","粘性":"sticky","匹配到":"Coincidencias","测试文本":"Texto de prueba","高亮结果":"Resultado resaltado","匹配详情":"Detalles de coincidencias","空":"vacío","位置":"posición","未匹配":"sin coincidencia","时间转换":"Conversor de marca de tiempo","时间戳":"Marca de tiempo","秒或毫秒":"segundos o milisegundos","现在":"Ahora","秒级":"Segundos","毫秒级":"Milisegundos","本地时间":"Hora local","UTC 时间":"Hora UTC","距现在":"Relativo","转时间戳":"A marca de tiempo","无效时间戳":"Marca de tiempo inválida","天":"d","小时":"h","分钟":"m","还有":"en","已过去":"hace","刚刚":"justo ahora","进制转换":"Conversor de base","输入数值":"Introduce un número","进制":"base","字节":"Bytes","位":"bits","颜色转换":"Conversor de color","复制颜色":"Copiar color","颜色格式无效":"Formato de color inválido","UUID / 随机密码":"UUID / Contraseña aleatoria","生成 UUID":"Generar UUID","生成密码":"Generar contraseña","长度":"Longitud","符号":"Símbolos","二维码生成":"Generador de código QR","尺寸":"Tamaño","纠错级别":"Corrección de errores","下载 PNG":"Descargar PNG","处":"coincidencia(s)","秒":"s","文本对比":"Comparar texto","原文本":"Texto original","新文本":"Texto nuevo","粘贴原文本":"Pega el texto original","粘贴新文本":"Pega el texto nuevo","差异":"Diferencias","输入文本后这里显示差异":"Las diferencias aparecerán aquí tras escribir","生成二维码":"Generar código QR","need_input":"Introduce contenido primero","num_invalid":"No es un número válido","date_invalid":"Formato de fecha no reconocido, ej. 2024-01-01 12:00:00","color_invalid":"Color inválido, usa #abc o #aabbcc","qr_empty":"El código QR aparecerá aquí tras escribir","qr_in_ph":"Introduce texto o URL a codificar","qr_none":"No hay código QR para descargar","codec_in_ph":"Introduce texto para codificar o decodificar","codec_out_ph":"El resultado aparece aquí y se puede editar","hash_in_ph":"Introduce texto para hashear, actualización en vivo","regex_in_ph":"Pega aquí el texto a probar","regex_empty":"El resultado resaltado aparecerá aquí","pw_need_set":"Selecciona al menos un tipo de carácter"}')}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkfilecat=self.webpackChunkfilecat||[]).push([[9202],{77481(e,t,s){s.d(t,{S:()=>l,X:()=>a});var n=s(96540),i=s(61443),o=s(74848);function a(e){const[t,s]=n.useState([]),a=(0,n.useRef)(-1),[l,r]=(0,n.useState)(-1),[c,d]=(0,n.useState)(-1);(0,n.useEffect)(()=>{e.children?s(Array.isArray(e.children)?e.children:[e.children]):s(e.rows)},[e.rows,e.children]);const u=()=>{a.current=-1,r(-1),d(-1)};return(0,o.jsxs)("table",{children:[(0,o.jsx)("thead",{children:(0,o.jsx)("tr",{children:e.headers?.map((t,s)=>{const n=!!e.filter&&(e.filter.column??0)===s;let a=t;if(n){const s=e.filter,n=s.options.find(e=>e.value===s.value);null!=s.value&&n&&(a=`${t} (${n.label})`)}return(0,o.jsx)("th",{className:n?"table-filter-col":"",children:n?(0,o.jsx)(i.l6,{value:e.filter.value,options:e.filter.options,onChange:e.filter.onChange,bare:!0,trigger_label:a}):t},s)})})}),(0,o.jsx)("tbody",{children:t.map((t,s)=>{const n=!!e.onRowDrag;return(0,o.jsx)("tr",{className:n?(l===s?"row-dragging":"")+(c===s?" row-drop-target":""):"",draggable:n,onContextMenu:()=>{e.handleContextMenu&&e.handleContextMenu(t)},onDragStart:e=>{n&&(a.current=s,r(s),e.dataTransfer.effectAllowed="move")},onDragOver:e=>{!n||a.current<0||(e.preventDefault(),e.dataTransfer.dropEffect="move",d(s))},onDrop:t=>{n&&(t.preventDefault(),(()=>{const t=a.current,s=c;u(),t<0||s<0||t===s||e.onRowDrag?.(t,s)})())},onDragEnd:u,children:t.map((s,n)=>{const i=n===t.length-1?"small":"";return(0,o.jsx)("td",{className:i,style:{width:e.width??"auto"},children:s},n)})},s)})})]})}function l(e){return(0,o.jsx)("div",{style:{display:e.isFlex?"flex":"block"},children:e.columns.map((e,t)=>(0,o.jsx)("div",{children:e},t))})}},19202(e,t,s){s.r(t),s.d(t,{default:()=>_e});var n=s(96540),i=s(75725),o=s(23430),a=s(70447),l=s(85997),r=s(61443),c=s(14284),d=s(53459),u=s(77481),h=s(22022),p=s(82893),m=s(40505),_=s(62042),x=s(21499),j=s(21469),v=s(64694),f=s(74848);function g(e){const{t}=(0,h.Bd)(),[s,o]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{if(e.getItems){const t=await e.getItems();o(t)}})()},[]);return(0,f.jsx)(i.xh,{children:(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e.title}),e.info_click&&(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{e.info_click()},title:"信息"})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:t("添加"),onClick:()=>{const t=[];for(let s=0;s<e.headers.length-1;s++)t.push("");o([t,...s])}}),(0,f.jsx)(l.rA,{icon:"save",title:t("保存"),onClick:async()=>{e.save&&await e.save(s)}})]}),children:(0,f.jsx)(u.X,{headers:e.headers,rows:s.map((n,i)=>{const a=[];for(let t=0;t<e.headers.length;t++)a.push((0,f.jsx)(r.Sm,{value:n[t],handleInputChange:e=>{n[t]=e,o([...s])},no_border:!0}));return a.push((0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"delete",title:t("删除"),onClick:()=>(e=>{s.splice(e,1),o([...s])})(i)}),n[0]&&(0,f.jsx)(l.rA,{icon:"content_copy",title:t("复制地址"),onClick:()=>{const e=(0,x.bi)(`${window.location.origin}${j.m.base_url}`,n[0]);(0,m.lW)(e),(0,_.SK)(e)}}),n[0]&&e.need_copy&&(0,f.jsx)(l.rA,{icon:"open_in_new",title:t("打开新页面"),onClick:()=>{const e=(0,x.bi)(`${window.location.origin}${j.m.base_url}`,n[0]);window.open(e)}})]})),a}),width:"10rem",onRowDrag:(e,t)=>{o((0,v.TI)(s,e,t))}})})})}var y=s(34843),w=s(78247),b=s(24659);function S(){const{t:e}=(0,h.Bd)(),[t,s]=(0,y.fp)(p.AG.prompt_card),o=(0,b.K)(),g=[e("路由"),e("auth"),e("备注")],[S,C]=(0,y.fp)(p.AG.editorSetting),[k,A]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{const e=await c.XO.get("api/customer_router");e.code===d.m.Success&&A(e.data)})()},[]);return(0,f.jsx)(i.xh,{children:(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("api_rt")})," ",(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{(()=>{let e=(0,f.jsx)("div",{children:'默认需要以 "/api" 开头的路由。'});s({open:!0,title:"信息",context_div:(0,f.jsx)("div",{children:e})})})()},title:"信息"})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{A([{note:"",needAuth:!1,router:""},...k])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{(await c.XO.post("api/customer_router/save",k)).code===d.m.Success&&(0,_.SK)(e("保存成功"))}})]}),children:(0,f.jsx)(u.X,{headers:g,rows:k.map((t,s)=>{const n=[(0,f.jsx)(r.Sm,{value:t.router,handleInputChange:e=>{t.router=e,A([...k])},no_border:!0}),(0,f.jsx)(r.l6,{defaultValue:t.needAuth,onChange:e=>{t.needAuth=e,A([...k])},options:o,no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e,A([...k])},no_border:!0}),(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{k.splice(e,1),A([...k])})(s)}),(0,f.jsx)(l.rA,{icon:"edit",title:e("编辑"),onClick:()=>(async t=>{if(!t.router)return void(0,_.zN)(e("路由不能为空"));const s=await c.XO.get(`jscode/${encodeURIComponent(t.router)}`);C({model:"ace/mode/javascript",open:!0,fileName:t.router,save:async s=>{const n={context:s,router:t.router};(await c.XO.post("jscode/save",n)).code===d.m.Success&&(w.xK.set_value_temp(""),C({open:!1,model:"",fileName:"",save:null}),(0,_.SK)(e("成功")))}}),w.xK.set_value_temp(s.data)})(t)}),t.router&&(0,f.jsx)(l.rA,{icon:"content_copy",title:e("复制地址"),onClick:()=>{(0,m.lW)((0,x.bi)(window.location.origin+j.m.base_url,t.router)),(0,_.SK)(e("已复制"))}})]})];return n}),width:"10rem",onRowDrag:(e,t)=>{A((0,v.TI)(k,e,t))}})})})}var C=s(23496),k=s(4412);function A(){const{t:e}=(0,h.Bd)(),[t,s]=(0,y.fp)(p.AG.prompt_card),[o,a]=(0,y.fp)(p.AG.router_jump),l=[e("路由"),e("路径"),e("过期时间(s)"),e("备注")],r=[e("路由"),e("文件路径"),"token","user id",e("备注")];return(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)(k.aZ,{position:"right"}),(0,f.jsxs)(i.fI,{children:[(0,f.jsxs)(i.VP,{maxWidth:"50rem",children:[(0,f.jsx)(g,{title:e("页面资源路由"),headers:l,getItems:async()=>{const t=await c.XO.get(C.s.setting_customer_router);if(t.code===d.m.Success){if(o?.page_self_router_api_data){for(const s of t.data)s[1]===o?.page_self_router_api_data[1]&&(0,_.N9)(e("已经存在的页面资源路由配置目录设置"));const s={};Object.assign(s,o?.page_self_router_api_data),t.data=[s,...t.data],a({})}return t.data}return[]},save:async e=>{(await c.XO.post(C.s.setting_customer_router_save,e)).code===d.m.Success&&(0,_.SK)("success")},info_click:()=>{let e=(0,f.jsx)("div",{children:'默认需要以 "/api" 开头的路由,会自动识别地址,将页面转到对应结果。路径支持文件路径(如果是文件夹路径的最后最后一个名字将会成为资源实际地址,整个目录将会变成一个http目录),http地址。'});s({open:!0,title:"信息",context_div:(0,f.jsx)("div",{children:e})})},need_copy:!0}),(0,f.jsx)(g,{title:e("wf_rt"),headers:r,getItems:async()=>{const e=await c.XO.get(C.s.setting_customer_workflow_router);return e.code===d.m.Success?e.data:[]},save:async t=>{(await c.XO.post(C.s.setting_customer_workflow_router_save,t)).code===d.m.Success&&(0,_.SK)(e("保存成功"))},info_click:()=>{let e=(0,f.jsx)("div",{children:'默认需要以 "/api" 开头的路由,文件路径是有效的workflow路径。token也可以是文件绝对路径,请求的时候请设置同样的authorization请求头字段。'});s({open:!0,title:"信息",context_div:(0,f.jsx)("div",{children:e})})}})]}),(0,f.jsx)(i.VP,{maxWidth:"50rem",children:(0,f.jsx)(S,{})})]})]})}var I=s(74777),N=s(18840),V=s(6960),$=s(7523);function X(){const{t:e}=(0,h.Bd)(),[,t]=(0,y.fp)(p.AG.prompt_card),[s,i]=(0,n.useState)(""),[o,m]=(0,n.useState)(5610),[x,j]=(0,n.useState)(5710);(0,n.useEffect)(()=>{(async()=>{const e=await c.XO.get("sys_option/status");if(e.code===d.m.Success){const t=e.data?.sys_env;i((t?.browser_proxy_allow||[]).join("\n")),m(t?.browser_proxy_port_start||5610),j(t?.browser_proxy_port_end||5710)}})()},[]);return(0,f.jsxs)(a.Zp,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("网页代理")}),(0,f.jsx)(l.rA,{icon:"info",title:e("信息"),onClick:()=>{t({open:!0,title:e("信息"),context_div:(0,f.jsx)("div",{children:(0,f.jsx)("div",{children:e("wbvpn_tip")})})})}})]}),rightBottomCom:(0,f.jsx)(l.C3,{text:e("确定修改"),clickFun:async()=>{const t=s.split("\n").map(e=>e.trim()).filter(e=>!!e);(await c.XO.post(C.s.setting_sys_option_status_save,{type:I.Mu.sys_env,value:{browser_proxy_allow:t,browser_proxy_port_start:Number(o)||5610,browser_proxy_port_end:Number(x)||5710}})).code===d.m.Success&&(0,_.SK)(e("修改成功"))}}),children:[(0,f.jsx)("div",{children:e("wbvpn_allow")}),(0,f.jsx)(r.Z2,{style:{minHeight:"5rem",resize:"vertical"},placeholder:e("wbvpn_allow_ph"),value:s,onChange:e=>{i(e.target.value)}}),(0,f.jsx)("div",{children:e("wbvpn_port_range")}),(0,f.jsx)(u.S,{isFlex:!0,columns:[(0,f.jsx)(r.Sm,{placeholder:"5610",value:o,handleInputChange:e=>m(e)}),(0,f.jsx)("span",{style:{padding:"0 6px"},children:"-"}),(0,f.jsx)(r.Sm,{placeholder:"5710",value:x,handleInputChange:e=>j(e)})]})]})}function K(){const[e,t]=(0,n.useState)(""),[s,o]=(0,n.useState)(""),[m,x]=(0,n.useState)(!1),[j,v]=(0,n.useState)(""),[g,b]=(0,n.useState)(!1),[S,A]=(0,n.useState)(""),[K,B]=(0,y.fp)(p.AG.prompt_card),[,F]=(0,y.fp)(p.AG.editorSetting),[z,P]=(0,n.useState)(I.aM.close),[O,T]=(0,n.useState)(!1),[E,M]=(0,n.useState)(void 0),[D,G]=(0,n.useState)(""),{t:R,i18n:W}=(0,h.Bd)(),[q,Z]=(0,y.fp)(p.AG.user_base_info),{check_user_auth:U}=(0,w.MH)(),{initUserInfo:H}=(0,n.useContext)($.F),J=async()=>{const e=await c.XO.get("sys_option/status");if(e.code===d.m.Success){b(e.data.recycle_open),A(e.data.recycle_dir);const s=e.data.sys_env;t(s?.web_site_title),o(s?.logo||""),x(s?.show_login_user_info),v(s?.http_proxy||""),G(s?.control_env_str||N.CU)}const s=await c.XO.get("token");if(s.code===d.m.Success){const e=s.data;if(!e)return;e.length&&M(e.length),e.mode&&P(e.mode),void 0!==e.persist&&T(e.persist)}};(0,n.useEffect)(()=>{J()},[]);return(0,f.jsxs)("div",{children:[(0,f.jsx)(k.aZ,{children:(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)("span",{className:"credits",children:[R("系统运行于"),": ",(0,V.s)(q.runing_time_length)]}),(0,f.jsx)("span",{className:"credits",children:(0,f.jsxs)("a",{href:"https://github.com/xiaobaidadada/filecat",target:"_blank",children:["version:7.22.0",null!=q.latest_version&&"7.22.0"!==q.latest_version?` -> ${q.latest_version}`:""]})}),(0,f.jsx)("span",{className:"credits",children:(0,f.jsx)("a",{href:R("官网地址"),target:"_blank",children:`filecat ${R("功能文档")}`})}),(0,f.jsxs)("span",{className:"credits",children:[R("安装方式")," :",q.process_env_run_env]})]})}),(0,f.jsx)(i.xh,{children:(0,f.jsxs)(i.fI,{children:[(0,f.jsxs)(i.VP,{widthPer:33,children:[(0,f.jsxs)(a.Zp,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:R("通用设置")})," ",(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{B({open:!0,title:R("信息"),context_div:(0,f.jsx)("div",{children:(0,f.jsx)("div",{children:R("sys_env_setting_tip")})})})},title:R("信息")})]}),rightBottomCom:(0,f.jsx)(l.C3,{text:R("确定修改"),clickFun:async()=>{(await c.XO.post(C.s.setting_sys_option_status_save,{type:I.Mu.sys_env,value:{web_site_title:e,show_login_user_info:m,http_proxy:j,logo:s}})).code===d.m.Success&&((0,_.SK)(R("修改成功")),H())}}),rightTopCom:(0,f.jsx)(l.rA,{icon:"tune",title:R("环境控制"),onClick:()=>{w.xK.set_value_temp(D||N.CU),F({model:"ace/mode/yaml",open:!0,fileName:"",not_auto_save:!0,save:async e=>{const t=await c.XO.post(C.s.setting_sys_option_status_save,{type:I.Mu.sys_env,value:{control_env_str:e}});t.code===d.m.Success?(G(e),(0,_.SK)(R("修改成功")),J()):(0,_.zN)(`${t.message??R("保存失败")}`)}})}}),children:[R("网站标题"),(0,f.jsx)(r.Sm,{value:e,handleInputChange:e=>{t(e)}}),R("网站 Logo"),(0,f.jsx)(r.Sm,{placeholder:R("lclorur"),value:s,handleInputChange:e=>{o(e)}}),R("lgn_usr"),(0,f.jsx)("input",{type:"checkbox",checked:m,onChange:()=>{x(!m)}})]}),(0,f.jsx)(X,{})]}),(0,f.jsxs)(i.VP,{widthPer:33,children:[(0,f.jsxs)(a.Zp,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:R("文件回收站")})," ",(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{B({open:!0,title:R("信息"),context_div:(0,f.jsx)("div",{children:R("格式:[被删除的文件所在父目录] 回收站目录 [; ...]")})})},title:R("信息")})]}),rightBottomCom:(0,f.jsx)(l.C3,{text:R("确定修改"),clickFun:async()=>{if(g&&!S)return void(0,_.zN)(R("目录不能为空"));(await c.XO.post(C.s.setting_sys_option_status_save,{type:I.Mu.cyc,value:S,open:g})).code===d.m.Success&&(0,_.SK)(R("修改成功"))}}),children:[(0,f.jsx)(r.Sm,{placeholder:R("目录"),value:S,handleInputChange:e=>{A(e)}}),(0,f.jsx)(r.l6,{value:g,onChange:e=>{b(e)},options:[{title:R("开启"),value:!0},{title:R("关闭"),value:!1}]})]}),(0,f.jsxs)(a.Zp,{title:R("tk_exp"),rightBottomCom:(0,f.jsx)(u.S,{isFlex:!0,columns:[(0,f.jsx)(l.C3,{text:R("清空token"),clickFun:async()=>{(await c.XO.get("token/clear")).code===d.m.Success&&(0,_.SK)(R("清理完成,重新登录"))}}),(0,f.jsx)(l.C3,{text:R("保存"),clickFun:async()=>{const e=new I.Gd;e.mode=z,e.persist=O,I.aM.length!==e.mode||E||(0,_.zN)(R("秒数不能为空")),e.length=parseInt(E);(await c.XO.post("token/save",e)).code===d.m.Success&&(0,_.SK)(R("保存成功"))}})]}),children:[(0,f.jsx)(u.S,{isFlex:!0,columns:[(0,f.jsx)(r.U6,{value:1,context:R("关闭"),selected:z===I.aM.close,onchange:()=>{P(I.aM.close)}}),(0,f.jsx)(r.U6,{value:1,context:R("指定时间"),selected:z===I.aM.length,onchange:()=>{P(I.aM.length)}}),(0,f.jsx)(r.U6,{value:1,context:R("永不过期"),selected:z===I.aM.forver,onchange:()=>{P(I.aM.forver)}})]}),z===I.aM.length&&(0,f.jsx)(r.Sm,{placeholder:R("秒"),value:E,handleInputChange:e=>{M(e)}}),(0,f.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:6,marginTop:8,whiteSpace:"nowrap"},children:[(0,f.jsx)("input",{type:"checkbox",checked:O,onChange:()=>T(!O)}),R("持久化")]})]})]})]})})]})}var B=s(92350),F=s(69675),z=s(32361);const P=[{key:"second",min:0,max:59,label:"秒"},{key:"minute",min:0,max:59,label:"分"},{key:"hour",min:0,max:23,label:"时"},{key:"day",min:1,max:31,label:"日"},{key:"month",min:1,max:12,label:"月"},{key:"week",min:0,max:7,label:"星期"}];function O(e){switch(e.mode){case"step":return`*/${e.step??1}`;case"range":return`${e.from??0}-${e.to??0}`;case"list":return(e.values??[]).join(",");default:return"*"}}function T(e){return[O(e.second),O(e.minute),O(e.hour),O(e.day),O(e.month),O(e.week)].join(" ")}function E(e,t,s){const n=(e??"").trim();if(!n)return null;if("*"===n)return{mode:"every"};if(n.startsWith("*/")){const e=Number(n.slice(2));return!Number.isInteger(e)||e<=0?null:{mode:"step",step:e}}if(n.includes("-")&&!n.includes(",")){const[e,i]=n.split("-").map(Number);return Number.isInteger(e)&&Number.isInteger(i)?e<t||i>s||e>i?null:{mode:"range",from:e,to:i}:null}const i=n.split(","),o=[];for(const e of i){const n=Number(e.trim());if(!Number.isInteger(n)||n<t||n>s)return null;o.push(n)}return 0===o.length?null:{mode:"list",values:o}}function M(e){const t=(e??"").trim().split(/\s+/);if(6!==t.length)return null;const s={};for(let e=0;e<6;e++){const n=P[e],i=E(t[e],n.min,n.max);if(!i)return null;s[n.key]=i}return s}function D(e){return e<10?`0${e}`:`${e}`}function G(e,t,s){switch(e.mode){case"step":return`每 ${e.step} ${t}`;case"range":return`${e.from} 到 ${e.to} ${t}`;case"list":return`${(e.values??[]).slice().sort((e,t)=>e-t).join("、")} ${t}`;default:return null}}function R(e){const{second:t,minute:s,hour:n,day:i,month:o,week:a}=e,l=(e,t)=>"list"===e.mode&&1===(e.values??[]).length&&e.values[0]===t,r=[];if("list"===n.mode&&"list"===s.mode&&l(t,0)){const e=(n.values??[]).slice().sort((e,t)=>e-t),t=(s.values??[]).slice().sort((e,t)=>e-t);e.length===t.length&&e.length>1&&t.length>1?r.push(e.map((e,s)=>`${D(e)}:${D(t[s])}`).join("、")):1===e.length&&1===t.length?r.push(`${D(e[0])}:${D(t[0])}`):r.push(`${e.map(D).join("、")} 时 ${t.join("、")} 分`)}else if("list"===n.mode&&"step"===s.mode&&l(t,0))r.push(`${(n.values??[]).map(D).join("、")} 时内每 ${s.step} 分钟`);else if("every"===n.mode&&"list"===s.mode&&l(t,0))r.push(`每小时的 ${(s.values??[]).join("、")} 分`);else if("every"===n.mode&&"step"===s.mode&&l(t,0))r.push(`每 ${s.step} 分钟`);else if("every"===n.mode&&"every"===s.mode&&l(t,0))r.push("每分钟");else if("every"===n.mode&&"every"===s.mode&&"step"===t.mode)r.push(`每 ${t.step} 秒`);else if("every"===n.mode&&"every"===s.mode&&"every"===t.mode)r.push("每秒");else if("every"===n.mode&&"every"===s.mode&&"list"===t.mode)r.push(`每分钟的第 ${(t.values??[]).join("、")} 秒`);else{const e=[],i=G(n,"时"),o=G(s,"分"),a=l(t,0)?null:G(t,"秒");i&&e.push(i),o&&e.push(o),a&&e.push(a),e.length>0&&r.push(e.join(" "))}const c="list"===i.mode&&1===(i.values??[]).length?i.values[0]:null,d="list"===o.mode&&1===(o.values??[]).length?o.values[0]:null,u="list"===a.mode&&1===(a.values??[]).length?a.values[0]:null;let h="";if(null!==d&&null!==c)h=`每年 ${d} 月 ${c} 号`;else if(null!==d)h=`每年 ${d} 月`;else if(null!==c)h=`每月 ${c} 号`;else if(null!==u)h=`每${["周日","周一","周二","周三","周四","周五","周六","周日"][u]??`星期 ${u}`}`;else{const e=[];"every"!==o.mode&&e.push(G(o,"月")),"every"!==i.mode&&e.push(G(i,"号")),"every"!==a.mode&&e.push(`星期 ${G(a,"")}`),e.length&&(h=e.join(" "))}h||(h="每天");const p=r.join(",");return/^(每|每天)/.test(p)?`${p}${"每天"===h?"":","+h} 执行`:`${h} ${p} 执行`}const W=[{label:"任意 (*)",value:"every"},{label:"每隔 (*/n)",value:"step"},{label:"区间 (a-b)",value:"range"},{label:"指定 (a,b)",value:"list"}];function q(e,t,s=!1){const n=[];for(let i=e;i<=t;i++)n.push({label:s?String(i).padStart(2,"0"):String(i),value:i});return n}const Z=({label:e,field:t,min:s,max:i,pad:o,week_label:a,onChange:l})=>{const c=(0,n.useMemo)(()=>q(s,i,o),[s,i,o]),d=(0,n.useMemo)(()=>{if(!a)return c;const e=["周日","周一","周二","周三","周四","周五","周六","周日"];return c.map(t=>({value:t.value,label:`${t.value} (${e[t.value]})`}))},[c,a]);return(0,f.jsxs)("div",{className:"cron-field",children:[(0,f.jsx)("span",{className:"cron-field__label",children:e}),(0,f.jsx)(r.l6,{value:t.mode,onChange:e=>{l("every"===e?{mode:"every"}:"step"===e?{mode:"step",step:t.step??1}:"range"===e?{mode:"range",from:t.from??s,to:t.to??i}:{mode:"list",values:t.values??[s]})},options:W,no_border:!0,width:"7.5rem"}),"step"===t.mode&&(0,f.jsxs)("div",{className:"cron-field__param",children:[(0,f.jsx)("span",{children:"每"}),(0,f.jsx)(r.l6,{value:t.step??1,onChange:e=>l({mode:"step",step:e}),options:q(1,i),no_border:!0,width:"4.5rem"}),(0,f.jsx)("span",{children:e})]}),"range"===t.mode&&(0,f.jsxs)("div",{className:"cron-field__param",children:[(0,f.jsx)(r.l6,{value:t.from??s,onChange:e=>l({mode:"range",from:e,to:t.to??i}),options:d,no_border:!0,width:"6.5rem"}),(0,f.jsx)("span",{children:"到"}),(0,f.jsx)(r.l6,{value:t.to??i,onChange:e=>l({mode:"range",from:t.from??s,to:e}),options:d,no_border:!0,width:"6.5rem"})]}),"list"===t.mode&&(0,f.jsxs)("div",{className:"cron-field__param cron-field__param--list",children:[(t.values??[]).map((e,s)=>(0,f.jsxs)("span",{className:"cron-tag",children:[(0,f.jsx)(r.l6,{value:e,onChange:e=>((e,s)=>{const n=[...t.values??[]];n[e]=s,l({mode:"list",values:n})})(s,e),options:d,no_border:!0,width:"6.5rem"}),(0,f.jsx)("i",{className:"material-icons cron-tag__del",onClick:()=>(e=>{const s=(t.values??[]).filter((t,s)=>s!==e);l(s.length?{mode:"list",values:s}:{mode:"every"})})(s),children:"close"})]},s)),(0,f.jsx)("i",{className:"material-icons cron-tag__add",onClick:()=>{const e=[...t.values??[]],n=new Set(e);let o=s;for(;n.has(o)&&o<i;)o++;l({mode:"list",values:[...e,o]})},children:"add"})]})]})};const U=[{label:"每分钟",make:()=>({second:{mode:"every"},minute:{mode:"every"},hour:{mode:"every"},day:{mode:"every"},month:{mode:"every"},week:{mode:"every"},second:{mode:"list",values:[0]}})},{label:"每 5 分钟",make:()=>({second:{mode:"every"},minute:{mode:"every"},hour:{mode:"every"},day:{mode:"every"},month:{mode:"every"},week:{mode:"every"},minute:{mode:"step",step:5},second:{mode:"list",values:[0]}})},{label:"每小时",make:()=>({second:{mode:"every"},minute:{mode:"every"},hour:{mode:"every"},day:{mode:"every"},month:{mode:"every"},week:{mode:"every"},minute:{mode:"list",values:[0]},second:{mode:"list",values:[0]}})},{label:"每天 0 点",make:()=>({second:{mode:"every"},minute:{mode:"every"},hour:{mode:"every"},day:{mode:"every"},month:{mode:"every"},week:{mode:"every"},hour:{mode:"list",values:[0]},minute:{mode:"list",values:[0]},second:{mode:"list",values:[0]}})},{label:"每天 8 点",make:()=>({second:{mode:"every"},minute:{mode:"every"},hour:{mode:"every"},day:{mode:"every"},month:{mode:"every"},week:{mode:"every"},hour:{mode:"list",values:[8]},minute:{mode:"list",values:[0]},second:{mode:"list",values:[0]}})},{label:"每周一 0 点",make:()=>({second:{mode:"every"},minute:{mode:"every"},hour:{mode:"every"},day:{mode:"every"},month:{mode:"every"},week:{mode:"every"},hour:{mode:"list",values:[0]},minute:{mode:"list",values:[0]},second:{mode:"list",values:[0]},week:{mode:"list",values:[1]}})},{label:"每月 1 号 0 点",make:()=>({second:{mode:"every"},minute:{mode:"every"},hour:{mode:"every"},day:{mode:"every"},month:{mode:"every"},week:{mode:"every"},hour:{mode:"list",values:[0]},minute:{mode:"list",values:[0]},second:{mode:"list",values:[0]},day:{mode:"list",values:[1]}})}],H=({value:e,onChange:t,no_border:s})=>{const[i,o]=(0,n.useState)(!1),a=(0,n.useRef)(null),l=(0,n.useRef)(null),r=(0,n.useMemo)(()=>M(e??"")??{second:{mode:"every"},minute:{mode:"every"},hour:{mode:"every"},day:{mode:"every"},month:{mode:"every"},week:{mode:"every"}},[e]),c=!!e&&!M(e??""),d=(0,z.r)({active:i,trigger_ref:a,floating_ref:l,width:384,max_height:26});(0,F.$)(i,[a,l],()=>o(!1));const u=e=>{t(T(e))};return(0,f.jsxs)("div",{className:"cron-input "+(i?"cron-input--open":""),children:[(0,f.jsxs)("div",{ref:a,className:"cron-input__display "+(s?"cron-input__display--no-border":""),title:c?"表达式格式不正确":`${e||""} ${R(r)}`.trim(),onClick:()=>o(!i),children:[(0,f.jsx)("span",{className:"cron-input__expr "+(c?"cron-input__expr--invalid":""),children:e||"(未设置)"}),!s&&(0,f.jsx)("span",{className:"cron-input__desc",children:c?"表达式格式不正确":R(r)}),(0,f.jsx)("i",{className:"material-icons cron-input__arrow",children:"arrow_drop_down"})]}),i&&(0,f.jsxs)("div",{ref:l,className:"cron-editor",style:{left:d.left,top:d.top,...d.css_vars,visibility:d.ready?"visible":"hidden"},children:[(0,f.jsxs)("div",{className:"cron-editor__scroll",children:[(0,f.jsxs)("div",{className:"cron-editor__row",children:[(0,f.jsx)("span",{className:"cron-editor__title",children:"常用"}),(0,f.jsx)("div",{className:"cron-editor__presets",children:U.map(e=>(0,f.jsx)("button",{className:"cron-preset",onClick:()=>u(e.make()),children:e.label},e.label))})]}),(0,f.jsx)("div",{className:"cron-editor__fields",children:P.map(e=>(0,f.jsx)(Z,{label:e.label,field:r[e.key],min:e.min,max:e.max,pad:"day"!==e.key&&"month"!==e.key&&"week"!==e.key,week_label:"week"===e.key,onChange:t=>{return s=e.key,n=t,void u({...r,[s]:n});var s,n}},e.key))})]}),(0,f.jsxs)("div",{className:"cron-editor__footer",children:[(0,f.jsx)("span",{className:"cron-editor__preview",children:T(r)}),(0,f.jsx)("button",{className:"cron-editor__done",onClick:()=>o(!1),children:"完成"})]})]})]})};function J(){const{t:e,i18n:t}=(0,h.Bd)(),{initUserInfo:s,reloadUserInfo:o}=(0,n.useContext)($.F),[m,x]=(0,n.useState)([]),[j,g]=(0,n.useState)([]),[S,C]=(0,y.fp)(p.AG.prompt_card),[,k]=(0,y.fp)(p.AG.editorSetting),[A,I]=(0,n.useState)([]),[N,V]=(0,n.useState)([]),[X,K]=(0,n.useState)([]),[F,z]=(0,n.useState)([]),[P,O]=(0,n.useState)(""),[T,E]=(0,n.useState)([]),M=(0,b.K)(),D=[e("软件"),e("是否安装"),e("路径")],G=[e("编号"),e("路径"),e("备注")],R=[e("编号"),e("路径"),e("是否开启"),e("备注")],W=[e("编号"),e("文件路径"),e("是否开启"),e("系统启动执行"),e("cron表达式"),e("用户id"),e("备注")],q=[e("编号"),e("路径"),e("单用户并发数量"),e("系统并发数量"),e("big_res"),e("big_sz"),e("大文件并发数量"),e("big_ck"),e("备注")],Z=[e("编号"),e("名称"),e("路径"),e("是否开启"),e("params"),e("备注")],{check_user_auth:U}=(0,w.MH)(),J=async()=>{const e=await c.XO.get("env/path/get");e.code===d.m.Success&&K(e.data)},Q=async()=>{const e=await c.XO.get("workflow_setting_get");e.code===d.m.Success&&z(e.data)};(0,n.useEffect)(()=>{(async()=>{const e=await c.XO.get("outside/software/get");e.code===d.m.Success&&g(e.data);const t=await c.XO.get("pty_cmd");t.code===d.m.Success&&O(t.data),J(),Q();const s=await c.XO.get("protection_dir/sys");s.code===d.m.Success&&I(s.data??[]);const n=await c.XO.get("dir_upload_max_num");n.code===d.m.Success&&V(n.data??[]);const i=await c.XO.get("plugin/list");i.code===d.m.Success&&E(i.data??[])})()},[]);const L=(0,B.Q)(),Y=async()=>{await c.XO.post("plugin/list/save",T)};return(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)(i.J,{widthPer:100,maxWidth:"100rem",children:(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("up_conc")})," ",(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{L("文件上传")},title:e("信息")})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{V([...N,{path:"",note:"",user_upload_num:2,sys_upload_num:6,ws_file_standard_size:52428800,ws_file_parallel_num:2,ws_file_block_mb_size:524288}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{for(const e of N)if(e.open_ws_file){if("number"!=typeof e.ws_file_block_mb_size)return void(0,_.zN)(`编号:${e.index??""} 文件块的大小设置有问题`);if("number"!=typeof e.ws_file_parallel_num)return void(0,_.zN)(`编号:${e.index??""} 并发数量设置有问题`);if("number"!=typeof e.ws_file_standard_size)return void(0,_.zN)(`编号:${e.index??""} 大文件size设置有问题`)}(0,v.di)(N,e=>e.index??0);(await c.XO.post("dir_upload_max_num/save",N)).code===d.m.Success&&((0,_.SK)(e("保存成功")),o())}})]}),children:(0,f.jsx)(u.X,{headers:q,rows:N.map((t,s)=>{const n=[(0,f.jsx)(r.Sm,{value:t.index,placeholder:s,handleInputChange:e=>{t.index=parseInt(e)},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.path,handleInputChange:e=>{t.path=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.user_upload_num,handleInputChange:e=>{t.user_upload_num=parseInt(e)},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.sys_upload_num,handleInputChange:e=>{t.sys_upload_num=parseInt(e)},no_border:!0}),(0,f.jsx)(r.l6,{value:!0===t.open_ws_file,onChange:e=>{t.open_ws_file=e,V([...N])},options:M,no_border:!0}),(0,f.jsx)(r.Sm,{value:"number"==typeof t.ws_file_standard_size?t.ws_file_standard_size/1024/1024:void 0,handleInputChange:e=>{t.ws_file_standard_size=1024*parseInt(e)*1024},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.ws_file_parallel_num,handleInputChange:e=>{t.ws_file_parallel_num=parseInt(e)},no_border:!0}),(0,f.jsx)(r.Sm,{value:"number"==typeof t.ws_file_block_mb_size?t.ws_file_block_mb_size/1024/1024:void 0,handleInputChange:e=>{t.ws_file_block_mb_size=1024*parseInt(e)*1024},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{N.splice(e,1),V([...N])})(s)})];return n}),width:"10rem",onRowDrag:(e,t)=>{V((0,v.TI)(N,e,t))}})})}),(0,f.jsx)(i.J,{widthPer:100,maxWidth:"100rem",children:(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("Workflow Job")}),(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{L("Workflow")},title:e("信息")})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{z([...F,{open:!1}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{(await c.XO.post("workflow_setting_save",F)).code===d.m.Success&&((0,_.SK)("ok"),Q())}})]}),children:(0,f.jsx)(u.X,{headers:W,rows:F.map((t,s)=>{const n=[(0,f.jsx)("div",{children:s}),(0,f.jsx)(r.Sm,{value:t.file_path,handleInputChange:e=>{t.file_path=e},no_border:!0}),(0,f.jsx)(r.l6,{value:!!t.open,onChange:e=>{t.open=e,z([...F])},options:M,no_border:!0}),(0,f.jsx)(r.l6,{value:!!t.sys_power_on,onChange:e=>{t.sys_power_on=e,z([...F])},options:M,no_border:!0}),(0,f.jsx)(H,{value:t.cron_str,onChange:e=>{t.cron_str=e,z([...F])},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.user_id,handleInputChange:e=>{t.user_id=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{F.splice(e,1),z([...F])})(s)})];return n}),width:"10rem",onRowDrag:(e,t)=>{z((0,v.TI)(F,e,t))}})})}),(0,f.jsxs)(i.fI,{children:[(0,f.jsx)(i.VP,{widthPer:50,maxWidth:"50rem",children:(0,f.jsxs)(i.xh,{children:[(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("PATH")}),(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{L("环境路径")},title:e("信息")})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"list",title:e("查看"),onClick:async()=>{const t=await c.XO.get("env/process/view");t.code===d.m.Success?C({open:!0,title:e("进程环境变量"),context_div:(0,f.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",maxHeight:"60vh",overflow:"auto",margin:0,fontSize:"0.85rem",lineHeight:"1.5"},children:t.data})}):(0,_.zN)(e("获取失败"))}}),(0,f.jsx)(l.rA,{icon:"edit",title:e("编辑"),onClick:async()=>{const t=await c.XO.get("env/process/get");t.code===d.m.Success?(w.xK.set_value_temp(t.data??""),k({model:"ace/mode/ini",open:!0,fileName:"",save:async e=>{await c.XO.post("env/process/save",{text:e})}})):(0,_.zN)(e("获取失败"))}}),(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{K([...X,{path:"",note:""}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{(await c.XO.post("env/path/save",{paths:X})).code===d.m.Success&&((0,_.SK)(e("保存成功")),J(),s())}})]}),children:(0,f.jsx)(u.X,{headers:R,rows:X.map((t,s)=>{const n=[(0,f.jsx)("div",{children:s}),(0,f.jsx)(r.Sm,{value:t.path,handleInputChange:e=>{t.path=e},no_border:!0}),(0,f.jsx)(r.l6,{value:!!t.open,onChange:e=>{t.open=e,K([...X])},options:M,no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{X.splice(e,1),K([...X])})(s)})];return n}),width:"10rem",onRowDrag:(e,t)=>{K((0,v.TI)(X,e,t))}})}),(0,f.jsx)(a.Zp,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("PTY CMD")}),(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{L("pty")},title:e("信息")})]}),rightBottomCom:(0,f.jsx)(l.C3,{text:e("更新"),clickFun:async()=>{(await c.XO.post("pty_cmd/save",{str:P})).code===d.m.Success&&((0,_.SK)(e("保存成功")),o())}}),children:(0,f.jsx)(r.Sm,{placeholder:e("cmd need pty env"),value:P,handleInputChange:e=>{O(e)}})}),(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("插件配置")}),(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{L("插件配置")},title:e("信息")})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{E([...T,{name:"",path:"",note:"",open:!1}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:Y})]}),children:(0,f.jsx)(u.X,{headers:Z,rows:T.map((t,s)=>{const n=[s,(0,f.jsx)(r.Sm,{value:t.name,handleInputChange:e=>{t.name=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.path,handleInputChange:e=>{t.path=e},no_border:!0}),(0,f.jsx)(r.l6,{value:!!t.open,onChange:e=>{t.open=e,E([...T])},options:M,no_border:!0}),(0,f.jsx)(l.mu,{icon:"edit",value:t.params,save:async e=>{t.params=e,await Y()},title:""}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{T.splice(e,1),E([...T])})(s)})];return n}),width:"10rem",onRowDrag:(e,t)=>{E((0,v.TI)(T,e,t))}})})]})}),(0,f.jsx)(i.VP,{widthPer:50,maxWidth:"50rem",children:(0,f.jsxs)(i.xh,{children:[(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("系统保护路径")})," ",(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{L("保护目录")},title:e("信息")})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{I([...A,{path:"",note:""}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{(await c.XO.post("protection_dir/sys/save",A)).code===d.m.Success&&((0,_.SK)(e("保存成功")),o())}})]}),children:(0,f.jsx)(u.X,{headers:G,rows:A.map((t,s)=>{const n=[(0,f.jsx)("div",{children:s}),(0,f.jsx)(r.Sm,{value:t.path,handleInputChange:e=>{t.path=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{A.splice(e,1),I([...A])})(s)})];return n}),width:"10rem",onRowDrag:(e,t)=>{I((0,v.TI)(A,e,t))}})}),(0,f.jsx)(a.uF,{title:e("外部软件"),rightTopCom:(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{(await c.XO.post("outside/software/save",j)).code===d.m.Success&&((0,_.SK)(e("保存成功")),s())}}),children:(0,f.jsx)(u.X,{headers:D,rows:j.map((t,s)=>[(0,f.jsx)("div",{children:t.id}),(0,f.jsx)(a.fq,{ok:t.installed}),(0,f.jsx)(r.Sm,{value:t.path,handleInputChange:e=>{t.path=e},no_border:!0,placeholder:e("use_env")}),(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{L(t.id)},title:e("信息")})]),width:"10rem"})})]})})]})]})}function Q(e){const{t,i18n:s}=(0,h.Bd)(),[i,a]=(0,y.fp)(p.AG.user_base_info),l=[{title:t("用户权限"),list:[{title:t("用户管理"),permission:o.oV.user_manage},{title:t("角色管理"),permission:o.oV.role_manage}]},{title:t("系统管理权限"),list:[{title:t("系统信息"),permission:o.oV.all_sys},{title:t("系统进程关闭"),permission:o.oV.sys_process_close},{title:t("dc_ctdl"),permission:o.oV.docker_container_update},{title:t("dc_idl"),permission:o.oV.docker_images_delete},{title:t("systemd管理"),permission:o.oV.systemd},{title:t("防火墙管理"),permission:o.oV.firewall}]},{title:t("网络功能权限"),list:[{title:t("系统网络"),permission:o.oV.vir_net},{title:t("内网穿透"),permission:o.oV.tcp_proxy},{title:"ddns",permission:o.oV.ddns}]},{title:t("Ai 设置权限"),list:[{title:t("Ai 配置"),permission:o.oV.ai_agent_setting},{title:t("ai_page"),permission:o.oV.ai_agent_page},{title:t("sw_mdl"),permission:o.oV.ai_model_switch}]},{title:t("文件权限"),list:[{title:t("log_del"),permission:o.oV.filecat_file_delete_cut_rename},{title:t("log_wr"),permission:o.oV.filecat_file_context_update_upload_created_copy_decompression},{title:t("内容更新"),permission:o.oV.filecat_file_context_update},{title:t("文件回收站修改"),permission:o.oV.recycle_file_save},{title:t("文件分享"),permission:o.oV.share_file}]},{title:t("系统设置权限"),list:[{title:t("系统页面"),permission:o.oV.sys_setting_page},{title:t("tk_time"),permission:o.oV.token_update},{title:t("修改密码"),permission:o.oV.update_password},{title:t("磁盘挂载"),permission:o.oV.sys_disk_mount},{title:t("通用设置"),permission:o.oV.sys_env_setting_key},{title:t("md_set"),permission:o.oV.md_editor_setting},{title:t("目录挂载"),permission:o.oV.file_mount}]},{title:t("系统环境设置"),list:[{title:t("sys_env"),permission:o.oV.sys_env_page},{title:t("up_lim"),permission:o.oV.dir_upload_max_num},{title:t("path_md"),permission:o.oV.env_path_update},{title:"pty cmd "+t("更新"),permission:o.oV.pty_cmd_update},{title:"workflow job",permission:o.oV.workflow_job},{title:t("path_up"),permission:o.oV.sys_protection_dir},{title:t("外部软件路径"),permission:o.oV.outside_software_path}]},{title:t("个人环境设置"),list:[{title:t("个性化设置"),permission:o.oV.private_sys_env}]},{title:t("自定义路由"),list:[{title:t("自定义路由页面"),permission:o.oV.auth_router_page},{title:t("wf_api"),permission:o.oV.workflow_api},{title:t("自定义资源路由"),permission:o.oV.code_resource},{title:t("api_rt"),permission:o.oV.code_api}]},{title:t("标签编辑权限"),list:[{title:t("ssh代理"),permission:o.oV.ssh_proxy_tag_update},{title:t("http代理"),permission:o.oV.http_proxy_tag_update},{title:t("浏览器代理"),permission:o.oV.browser_proxy_tag_update},{title:t("rdp代理"),permission:o.oV.rdp_proxy_tag_update},{title:t("网络唤醒"),permission:o.oV.wol_proxy_tag_update},{title:t("rtsp播放器"),permission:o.oV.rtsp_proxy_tag_update}]},{title:t("代理功能"),list:[{title:t("ssh代理"),permission:o.oV.ssh_proxy},{title:t("http代理"),permission:o.oV.http_proxy},{title:t("pxy_off"),permission:o.oV.http_proxy_download_cancel},{title:t("浏览器代理"),permission:o.oV.browser_proxy},{title:t("浏览器代理编辑"),permission:o.oV.browser_proxy_edit},{title:t("rdp代理"),permission:o.oV.rdp_proxy}]},{title:t("其他功能"),list:[{title:t("wf_run"),permission:o.oV.workflow_exe},{title:t("wf_user"),permission:o.oV.workflow_exe_user,noDisable:!0},{title:t("网络唤醒"),permission:o.oV.wol_proxy},{title:t("端口扫描"),permission:o.oV.port_scan},{title:t("rtsp播放器"),permission:o.oV.rtsp_proxy},{title:t("ssh_sv"),permission:o.oV.crypto_ssh_file},{title:t("cmd_rst"),permission:o.oV.shell_cmd_filecat_restart},{title:t("cmd_upg"),permission:o.oV.shell_cmd_filecat_upgrade},{title:t("cmd_dwn"),permission:o.oV.shell_cmd_filecat_kill_self},{title:t("cmd_ai"),permission:o.oV.ai_chat_cmd}]}];return(0,f.jsx)(n.Fragment,{children:l.map((t,s)=>(0,f.jsxs)("div",{children:[(0,f.jsx)("h3",{children:t.title}),t.list.map((t,s)=>(0,f.jsxs)("div",{children:[(0,f.jsx)("input",{type:"checkbox",disabled:!t.noDisable&&e.is_disable(t.permission),checked:e.is_selected(t.permission,t.noDisable),onChange:()=>{e.select_auth(t.permission)}}),t.title]},s))]},s))})}const L=new Map;function Y(){const{t:e,i18n:t}=(0,h.Bd)(),{initUserInfo:s,reloadUserInfo:m}=(0,n.useContext)($.F),[j,g]=(0,y.fp)(p.AG.user_base_info),[w,b]=(0,n.useState)([]),[S,C]=(0,y.fp)(p.AG.prompt_card),[k,A]=(0,n.useState)(!1),[I,N]=(0,n.useState)(!1),[V,X]=(0,y.fp)(p.AG.confirm),[K,F]=(0,n.useState)(""),[z,P]=(0,n.useState)(""),[O,T]=(0,n.useState)(""),[E,M]=(0,n.useState)([]),[D,G]=(0,n.useState)([]),[R,W]=(0,n.useState)([]),[q,Z]=(0,n.useState)(""),[U,H]=(0,n.useState)(""),[J,Y]=(0,n.useState)("en"),[ee,te]=(0,n.useState)(""),[se,ne]=(0,n.useState)([]),[ie,oe]=(0,n.useState)(""),[ae,le]=(0,n.useState)(!1),[re,ce]=(0,n.useState)(""),[de,ue]=(0,n.useState)(""),[he,pe]=(0,n.useState)({}),me=(0,B.o)(),[_e,xe]=(0,n.useState)([]),[je,ve]=(0,n.useState)(void 0),fe=[e("用户id"),e("用户名"),e("目录范围"),e("备注")],ge=async()=>{const e=await c.wm.get("all_users");if(e.code===d.m.Success){const t=e.data??[];if(je){const e=[];for(const s of t)`${s.id}${s.username}${s.cwd}${s.note}`.includes(je)&&e.push(s);b(e)}else b(t)}const t=await c.wm.get("all_roles");if(t.code===d.m.Success){xe(t.data),L.clear();for(const e of t.data)L.set(e.role_id,e)}},ye=e=>{F(e?.username??""),P(e?.password??""),T(e?.cwd??""),M(e?.access_dirs??[]),G(e?.not_access_dirs??[]),W(e?.only_read_dirs??[]),Z(e?.access_cmd??""),H(e?.not_access_cmd??""),Y(e?.language??""),te(e?.theme??""),ne(e?.auth_list??[]),oe(e?.note??""),le(e?.is_root??!1),ce(e?.id??""),e?.bind_role_id?we(e.bind_role_id,e.auth_list??[]):(ue(""),pe({}))};(0,n.useEffect)(()=>{ge()},[]);const we=(e,t=[])=>{if(!e)return ue(""),void pe({});const s=L.get(e);if(s){if(s.cwd&&T(s.cwd),s.access_dirs&&s.access_dirs.length>0&&M(s.access_dirs),s.not_access_dirs&&s.not_access_dirs.length>0&&G(s.not_access_dirs),s.only_read_dirs&&s.only_read_dirs.length>0&&W(s.only_read_dirs),s.access_cmd&&Z(s.access_cmd),s.not_access_cmd&&H(s.not_access_cmd),s.language&&Y(s.language),s.theme&&te(s.theme),s.auth_list&&s.auth_list.length>0){const e=new Set(s.auth_list);for(const s of t)e.add(s);ne(Array.from(e))}ue(e),pe(s)}},be=()=>{if(!K)return void(0,_.zN)("username not empty");if((0,x.CB)(K))return void(0,_.zN)("username not empty char");if(!O)return void(0,_.zN)("cwd not empty");const e=new o.E0;return e.language=J,e.theme=ee,e.access_dirs=E,e.username=K,e.password=z,e.not_access_dirs=D,e.only_read_dirs=R,e.cwd=O,e.note=ie,e.access_cmd=q,e.not_access_cmd=U,e.auth_list=se,e.bind_role_id=de,e};return(0,f.jsxs)(i.fI,{children:[(0,f.jsx)(i.VP,{widthPer:50,maxWidth:"40rem",children:(0,f.jsx)(i.xh,{children:(0,f.jsx)(a.uF,{self_title:(0,f.jsx)("span",{className:" div-row ",children:(0,f.jsx)("h2",{children:e("用户")})}),rightTopCom:(0,f.jsxs)("div",{className:"div-row",style:{gap:"0.5rem"},children:[(0,f.jsx)(r.Sm,{placeholder:e("过滤"),value:je,handleInputChange:e=>{ve(e)},handlerEnter:()=>{ge()}}),(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{A(!0),N(!1),ye(void 0)}})]}),children:(0,f.jsx)(u.X,{headers:fe,rows:w.map((t,s)=>{const n=[(0,f.jsx)("p",{children:t.id}),(0,f.jsx)(a.xP,{children:t.username}),(0,f.jsx)(a.xP,{children:t.cwd}),(0,f.jsx)(a.xP,{children:t.note}),(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"edit",title:e("编辑"),onClick:()=>(e=>{A(!1),N(!0),ye(e)})(t)}),!t.is_root&&(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(async t=>{X({open:!0,title:e("确定删除吗"),handle:async()=>{const s=new o.E0;s.username=t,(await c.wm.post("delete_user",s)).code===d.m.Success&&((0,_.SK)(e("删除完成")),ge(),X({open:!1,handle:null}))}})})(t.username)})]})];return n}),width:"10rem"})})})}),(0,f.jsx)(i.VP,{widthPer:50,maxWidth:"40rem",children:(k||I)&&(0,f.jsx)(i.xh,{children:(0,f.jsxs)(a.Zp,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e(""+(k?"添加":"编辑"))})," "]}),rightBottomCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"cancel",title:e("取消"),onClick:()=>{A(!1),N(!1),ye(void 0)}}),k&&(0,f.jsx)(l.rA,{icon:"add_circle",title:e("添加"),onClick:async()=>{if(!z)return void(0,_.zN)("password not empty");if((0,x.CB)(z))return void(0,_.zN)("username not empty char");const t=be(),s=await c.wm.post("create_user",t);ge(),s.code===d.m.Success&&((0,_.SK)(e("创建完成")),ge(),A(!1),N(!1),ye(void 0))}}),I&&(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{const t=be();if(!t)return;t.id=re;(await c.wm.post("save_user",t)).code===d.m.Success&&((0,_.SK)(e("保存完成")),ge())}})]}),children:[(0,f.jsx)("label",{children:e("用户名")}),(0,f.jsx)(r.Sm,{value:K,handleInputChange:e=>F(e)}),(0,f.jsx)("label",{children:e("密码")}),(0,f.jsx)(r.Sm,{type:"password",value:z,handleInputChange:e=>P(e)}),(0,f.jsxs)("label",{children:[!he?.access_dirs?.length&&(0,f.jsx)(l.rA,{icon:"add",onClick:()=>{M([...E,""])},title:"添加"}),e("目录范围")]}),(0,f.jsx)(r.Sm,{disabled:""!==he.cwd&&void 0!==he.cwd,value:O,handleInputChange:e=>T(e)}),(E??[]).map((t,s)=>(0,f.jsxs)("div",{style:{display:"flex"},children:[(0,f.jsx)("div",{style:{width:"90%"},children:(0,f.jsx)(r.Sm,{disabled:0!==he?.access_dirs?.length&&void 0!==he?.access_dirs?.length,value:t,handleInputChange:e=>{E[s]=e,M([...E])}})}),0===he?.access_dirs?.length||void 0===he?.access_dirs?.length&&(0,f.jsx)(l.rA,{icon:"delete",onClick:()=>{E.splice(s,1),M([...E])},title:e("删除")})]},s)),(0,f.jsxs)("label",{children:[!he?.not_access_dirs?.length&&(0,f.jsx)(l.rA,{icon:"add",onClick:()=>{G([...D,""])},title:e("添加")}),e("禁止目录范围")]}),(D??[]).map((t,s)=>(0,f.jsxs)("div",{style:{display:"flex"},children:[(0,f.jsx)("div",{style:{width:"90%"},children:(0,f.jsx)(r.Sm,{disabled:0!==he?.not_access_dirs?.length&&void 0!==he?.not_access_dirs?.length,value:t,handleInputChange:e=>{D[s]=e,G([...D])}})}),0===he?.not_access_dirs?.length||void 0===he?.not_access_dirs?.length&&(0,f.jsx)(l.rA,{icon:"delete",onClick:()=>{D.splice(s,1),G([...D])},title:e("删除")})]},s)),(0,f.jsxs)("label",{children:[!he?.only_read_dirs?.length&&(0,f.jsx)(l.rA,{icon:"add",onClick:()=>{W([...R,""])},title:e("添加")}),e("只读目录范围")]}),(R??[]).map((t,s)=>(0,f.jsxs)("div",{style:{display:"flex"},children:[(0,f.jsx)("div",{style:{width:"90%"},children:(0,f.jsx)(r.Sm,{disabled:0!==he?.only_read_dirs?.length&&void 0!==he?.only_read_dirs?.length,value:t,handleInputChange:e=>{R[s]=e,W([...R])}})}),0===he?.only_read_dirs?.length||void 0===he?.only_read_dirs?.length&&(0,f.jsx)(l.rA,{icon:"delete",onClick:()=>{R.splice(s,1),W([...R])},title:e("删除")})]},s)),(0,f.jsx)("label",{children:e("可执行的命令")}),(0,f.jsx)(r.Sm,{disabled:""!==he.access_cmd&&void 0!==he.access_cmd,value:q,placeholder:"use blank split",handleInputChange:e=>Z(e)}),(0,f.jsx)("label",{children:e("禁止执行的命令")}),(0,f.jsx)(r.Sm,{disabled:""!==he.not_access_cmd&&void 0!==he.not_access_cmd,value:U,placeholder:"use blank split",handleInputChange:e=>H(e)}),!ae&&(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)("label",{children:e("角色")}),(0,f.jsx)(r.l6,{value:de,onChange:e=>{we(e)},options:(()=>{const e=[];e.push({title:"NOT",value:""});for(let t of _e)e.push({title:t.role_name,value:t.role_id});return e})()})]}),(0,f.jsx)("label",{children:e("语言")}),(0,f.jsx)(r.l6,{disabled:""!==he.language&&void 0!==he.language,value:J,onChange:e=>{Y(e)},options:[{title:e("跟随系统"),value:"sys"},{title:"English",value:"en"},{title:"中文",value:"zh"}]}),(0,f.jsx)("label",{children:e("主题")}),(0,f.jsx)(r.l6,{disabled:""!==he.theme&&void 0!==he.theme,value:ee,onChange:e=>{te(e)},options:me}),(0,f.jsx)(Q,{is_disable:e=>{if(!0===ae)return!0;if(de){const t=L.get(de);if(t)return(t.auth_list??[]).includes(e)}return!1},is_selected:(e,t)=>!t&&!0===ae||void 0!==se?.find(t=>t===e),select_auth:e=>{se?se.includes(e)?((0,v.I)(se,t=>t===e),ne([...se])):ne([...se,e]):ne([e])}}),(0,f.jsx)("label",{children:e("备注")}),(0,f.jsx)(r.Sm,{value:ie,handleInputChange:e=>oe(e)})]})})})]})}function ee(){const{t:e,i18n:t}=(0,h.Bd)(),{initUserInfo:s}=(0,n.useContext)($.F),[m,x]=(0,n.useState)([]),[j,g]=(0,y.fp)(p.AG.prompt_card),[w,b]=(0,n.useState)(!1),[S,C]=(0,n.useState)(!1),[k,A]=(0,y.fp)(p.AG.confirm),[I,N]=(0,n.useState)(""),[V,X]=(0,n.useState)(""),[K,F]=(0,n.useState)([]),[z,P]=(0,n.useState)([]),[O,T]=(0,n.useState)([]),[E,M]=(0,n.useState)(""),[D,G]=(0,n.useState)(""),[R,W]=(0,n.useState)(""),[q,Z]=(0,n.useState)(""),[U,H]=(0,n.useState)([]),[J,L]=(0,n.useState)(""),[Y,ee]=(0,n.useState)(""),te=(0,B.o)(),se=[e("角色id"),e("角色名"),e("备注")],ne=async()=>{const e=await c.wm.get("all_roles");e.code===d.m.Success&&x(e.data)},ie=e=>{N(e?.role_name??""),X(e?.cwd??""),F(e?.access_dirs??[]),P(e?.not_access_dirs??[]),T(e?.only_read_dirs??[]),M(e?.access_cmd??""),G(e?.not_access_cmd??""),W(e?.language??""),Z(e?.theme??""),H(e?.auth_list??[]),L(e?.role_id??""),ee(e?.role_note??"")};(0,n.useEffect)(()=>{ne()},[]);const oe=()=>{if(!I)return void(0,_.zN)("role_name not empty");const e=new o.E0;return e.language=R,e.theme=q,e.access_dirs=K,e.role_name=I,e.not_access_dirs=z,e.only_read_dirs=O,e.cwd=V,e.access_cmd=E,e.not_access_cmd=D,e.auth_list=U,e.role_note=Y,e};return(0,f.jsxs)(i.fI,{children:[(0,f.jsx)(i.VP,{widthPer:50,maxWidth:"40rem",children:(0,f.jsx)(i.xh,{children:(0,f.jsx)(a.uF,{self_title:(0,f.jsx)("span",{className:" div-row ",children:(0,f.jsx)("h2",{children:e("角色")})}),rightTopCom:(0,f.jsx)("div",{children:(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{b(!0),C(!1),ie(void 0)}})}),children:(0,f.jsx)(u.X,{headers:se,rows:m.map((t,s)=>{const n=[(0,f.jsx)("p",{children:t.role_id}),(0,f.jsx)(a.xP,{children:t.role_name}),(0,f.jsx)(a.xP,{children:t.role_note}),(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"edit",title:e("编辑"),onClick:()=>(e=>{b(!1),C(!0),ie(e)})(t)}),!t.is_root&&(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(async t=>{A({open:!0,title:e("确定删除吗"),handle:async()=>{const s=new o.E0;s.role_id=t,(await c.wm.post("delete_role",s)).code===d.m.Success&&((0,_.SK)(e("删除完成")),ne(),A({open:!1,handle:null}))}})})(t.role_id)})]})];return n}),width:"10rem"})})})}),(0,f.jsx)(i.VP,{widthPer:50,maxWidth:"40rem",children:(w||S)&&(0,f.jsx)(i.xh,{children:(0,f.jsxs)(a.Zp,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e(""+(w?"添加":"编辑"))})," "]}),rightBottomCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"cancel",title:e("取消"),onClick:()=>{b(!1),C(!1),ie(void 0)}}),w&&(0,f.jsx)(l.rA,{icon:"add_circle",title:e("添加"),onClick:async()=>{const t=oe();if(!t)return;const s=await c.wm.post("create_role",t);ne(),s.code===d.m.Success&&((0,_.SK)(e("创建完成")),ne(),b(!1),C(!1),ie(void 0))}}),S&&(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{const t=oe();if(!t)return;t.role_id=J;(await c.wm.post("save_role",t)).code===d.m.Success&&((0,_.SK)(e("保存完成")),ne())}})]}),children:[(0,f.jsx)("label",{children:e("角色名")}),(0,f.jsx)(r.Sm,{value:I,handleInputChange:e=>N(e)}),(0,f.jsx)("label",{children:e("角色备注")}),(0,f.jsx)(r.Sm,{value:Y,handleInputChange:e=>ee(e)}),(0,f.jsxs)("label",{children:[(0,f.jsx)(l.rA,{icon:"add",onClick:()=>{F([...K,""])},title:"添加"}),e("目录范围")]}),(0,f.jsx)(r.Sm,{value:V,handleInputChange:e=>X(e)}),(K??[]).map((e,t)=>(0,f.jsxs)("div",{style:{display:"flex"},children:[(0,f.jsx)("div",{style:{width:"90%"},children:(0,f.jsx)(r.Sm,{value:e,handleInputChange:e=>{K[t]=e,F([...K])}})}),(0,f.jsx)(l.rA,{icon:"delete",onClick:()=>{K.splice(t,1),F([...K])},title:"删除"})]},t)),(0,f.jsxs)("label",{children:[(0,f.jsx)(l.rA,{icon:"add",onClick:()=>{P([...z,""])},title:"添加"}),e("禁止目录范围")]}),(z??[]).map((t,s)=>(0,f.jsxs)("div",{style:{display:"flex"},children:[(0,f.jsx)("div",{style:{width:"90%"},children:(0,f.jsx)(r.Sm,{value:t,handleInputChange:e=>{z[s]=e,P([...z])}})}),(0,f.jsx)(l.rA,{icon:"delete",onClick:()=>{z.splice(s,1),P([...z])},title:e("删除")})]},s)),(0,f.jsxs)("label",{children:[(0,f.jsx)(l.rA,{icon:"add",onClick:()=>{T([...O,""])},title:e("添加")}),e("只读目录范围")]}),(O??[]).map((e,t)=>(0,f.jsxs)("div",{style:{display:"flex"},children:[(0,f.jsx)("div",{style:{width:"90%"},children:(0,f.jsx)(r.Sm,{value:e,handleInputChange:e=>{O[t]=e,T([...O])}})}),(0,f.jsx)(l.rA,{icon:"delete",onClick:()=>{O.splice(t,1),T([...O])},title:"删除"})]},t)),(0,f.jsx)("label",{children:e("可执行的命令")}),(0,f.jsx)(r.Sm,{value:E,placeholder:"use blank split",handleInputChange:e=>M(e)}),(0,f.jsx)("label",{children:e("禁止执行的命令")}),(0,f.jsx)(r.Sm,{value:D,placeholder:"use blank split",handleInputChange:e=>G(e)}),(0,f.jsx)("label",{children:e("语言")}),(0,f.jsx)(r.l6,{value:R,onChange:e=>{W(e)},options:[{title:e("跟随系统"),value:"sys"},{title:"NOT",value:""},{title:"English",value:"en"},{title:"中文",value:"zh"}]}),(0,f.jsx)("label",{children:e("主题")}),(0,f.jsx)(r.l6,{value:q,onChange:e=>{Z(e)},options:te}),(0,f.jsx)(Q,{is_disable:()=>!1,is_selected:(e,t)=>void 0!==U?.find(t=>t===e),select_auth:e=>{U?(U.find(t=>t==e)?(0,v.I)(U,t=>t===e):U.push(e),H([...U])):H([e])}})]})})})]})}var te=s(93245);function se(e){const{t}=(0,h.Bd)(),[s,i]=(0,n.useState)((e.children_list??[]).map(e=>({path:e.path,note:e.note}))),o=[t("编号"),t("目录"),t("备注")],c=()=>{i([...s,{path:"",note:""}])};(0,n.useEffect)(()=>{s?.length||c()});return(0,f.jsx)(a.uF,{self_title:(0,f.jsx)("span",{className:" div-row ",children:(0,f.jsx)("h2",{children:t("sub_dir")})}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:t("添加"),onClick:c}),(0,f.jsx)(l.rA,{icon:"save",title:t("保存"),onClick:()=>{e.on_confirm(s.filter(e=>e.path))}}),(0,f.jsx)(l.rA,{icon:"close",title:t("取消"),onClick:e.on_cancel})]}),children:(0,f.jsx)(u.X,{headers:o,rows:s.map((e,n)=>[(0,f.jsx)("span",{children:n}),(0,f.jsx)(r.Sm,{value:e.path,handleInputChange:t=>{e.path=t},no_border:!0}),(0,f.jsx)(r.Sm,{value:e.note,handleInputChange:t=>{e.note=t},no_border:!0}),(0,f.jsx)("div",{children:(0,f.jsx)(l.rA,{icon:"delete",title:t("删除"),onClick:()=>{i(s.filter((e,t)=>t!==n))}})})]),width:"10rem"})})}function ne(){const{t:e,i18n:t}=(0,h.Bd)(),{initUserInfo:s,reloadUserInfo:m}=(0,n.useContext)($.F),[x,j]=(0,n.useState)([]),[g,w]=(0,y.fp)(p.AG.prompt_card),[S,k]=(0,n.useState)([]),[A,N]=(0,n.useState)([]),[V,X]=(0,n.useState)([]),[K,F]=(0,y.fp)(p.AG.user_base_info),z=(0,b.K)(),P=(0,B.o)(),O=[e("编号"),e("路径"),e("是否默认"),e("备注"),e("sub_dir")],T=[e("编号"),e("路径"),e("备注")],E=[e("编号"),e("命令"),e("父编号"),e("备注")],M=[e("文件后缀"),e("命令"),e("其他参数"),e("备注")],[D,G]=(0,n.useState)(""),[R,W]=(0,n.useState)(""),[q,Z]=(0,n.useState)(""),[U,H]=(0,n.useState)(!1),[J,Q]=(0,n.useState)(""),[L,Y]=(0,n.useState)(""),[ee,ne]=(0,n.useState)(""),[ie,oe]=(0,n.useState)(!1),[ae,le]=(0,n.useState)(""),[re,ce]=(0,n.useState)([]);(0,n.useEffect)(()=>{(async()=>{const e=await c.XO.get("filesSetting");e.code===d.m.Success&&(j(e.data.dirs),N(e.data.quick_cmd),X(e.data.file_quick_cmd));const t=await c.XO.get("protection_dir");t.code===d.m.Success&&k(t.data??[])})(),Q(K?.user_data?.language),Y(K?.user_data?.theme),ne(K?.user_data?.upload_file_ignore);const e=K?.user_data?.editor_auto_save;oe(!!e?.enable),le(null!=e?.interval?String(e.interval):""),ce(e?.editors??[])},[]);const de=(0,B.Q)();return(0,f.jsx)(n.Fragment,{children:(0,f.jsxs)(i.fI,{children:[(0,f.jsxs)(i.VP,{widthPer:33,children:[(0,f.jsx)(i.xh,{children:(0,f.jsxs)(a.Zp,{title:e("修改密码"),rightBottomCom:(0,f.jsx)(l.C3,{text:e("确定修改"),clickFun:async()=>{if(!D||!R)return void(0,_.zN)(e("账号密码不能为空"));if(R!==q)return void(0,_.zN)(e("两次密码不一样"));const t=new o.tl;t.username=D,t.password=R,t.confirm_password=q,t.user_id=K.user_data.id;(await c.wm.post("updatePassword",t)).code===d.m.Success&&(0,_.SK)(e("修改成功"))}}),children:[(0,f.jsx)(r.Sm,{placeholder:e("新账号"),value:D,handleInputChange:e=>{G(e)}}),(0,f.jsx)(r.cA,{placeholder:e("新密码"),handleInputChange:e=>{W(e)}}),(0,f.jsx)(r.cA,{placeholder:e("确认密码"),handleInputChange:e=>{Z(e)}})]})}),(0,f.jsx)(i.xh,{children:(0,f.jsxs)(a.Zp,{title:e("个性化设置"),rightBottomCom:(0,f.jsx)(l.C3,{text:e("确定修改"),clickFun:async()=>{(await c.XO.post(C.s.setting_sys_option_status_save,{type:I.Mu.private_sys_env,value:{language:J,theme:L,upload_file_ignore:ee}})).code===d.m.Success&&((0,_.SK)(e("修改成功")),s())}}),children:[e("语言"),(0,f.jsx)(r.l6,{value:J,onChange:e=>{Q(e)},options:[{title:e("跟随系统"),value:"sys"},{title:"English",value:"en"},{title:"中文",value:"zh"},{title:"Deutsch",value:"de"},{title:"ドイツ語",value:"ja"},{title:"독일어",value:"ko"},{title:"Немецкий язык",value:"ru"},{title:"Allemand",value:"fr"},{title:"Alemán",value:"es"}]}),e("主题"),(0,f.jsx)(r.l6,{value:L,onChange:e=>{Y(e)},options:P}),(0,f.jsx)(r.Sm,{value:ee,handleInputChange:e=>{ne(e)},placeholderOut:e("拖拽文件上传忽略列表"),placeholder:"node_modules *.js",no_border:!0})]})}),(0,f.jsx)(i.xh,{children:(0,f.jsxs)(a.Zp,{title:e("编辑器自动保存"),rightBottomCom:(0,f.jsx)(l.C3,{text:e("确定修改"),clickFun:async()=>{const t=parseInt(String(ae),10);if(isNaN(t)||t<1)return void(0,_.zN)(e("请输入不小于 1 的整数(秒)"));(await c.wm.post(C.s.user_save_private_attr,{is_editor_auto_save:!0,editor_auto_save:{enable:ie,interval:t,editors:re}})).code===d.m.Success&&((0,_.SK)(e("修改成功")),s())}}),children:[(0,f.jsx)(r.BC,{label:e("开启"),children:(0,f.jsx)(r.l6,{value:ie,onChange:e=>{oe(e)},options:z,no_border:!0})}),(0,f.jsx)(r.BC,{label:e("自动保存间隔(秒)"),children:(0,f.jsx)(r.Sm,{type:"number",value:ae,handleInputChange:e=>{le(e)},placeholder:"30",no_border:!0})}),(0,f.jsx)("h3",{children:e("编辑器")}),te.d.map(t=>(0,f.jsxs)("div",{children:[(0,f.jsx)("input",{type:"checkbox",checked:re.includes(t.id),onChange:e=>{const s=e.target.checked;ce(s?[...re,t.id]:re.filter(e=>e!==t.id))}}),e(t.label)]},t.id))]})})]}),(0,f.jsxs)(i.VP,{children:[(0,f.jsxs)(i.xh,{children:[(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("文件夹路径")})," ",(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{de("文件夹路径")},title:e("信息")})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{j([...x,{note:"",default:!1,path:""}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{for(let e=0;e<x.length;e++)x[e].index=e;(await c.XO.post("filesSetting/save",{dirs:x})).code===d.m.Success&&((0,_.SK)(e("保存成功")),m(),s())}})]}),children:(0,f.jsx)(u.X,{headers:O,rows:x.map((t,s)=>{const n=[(0,f.jsx)("div",{children:s}),(0,f.jsx)(r.Sm,{value:t.path,handleInputChange:e=>{t.path=e},no_border:!0}),(0,f.jsx)(r.l6,{value:t.default,onChange:e=>{((e,t,s)=>{const n=[];for(let e=0;e<x.length;e++)x[e].default=e===s&&t,n.push(x[e]);j(n)})(0,e,s)},options:z,no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsxs)("div",{className:"div-row",children:[(0,f.jsx)("span",{children:t.children?.length??0}),0!==s&&(0,f.jsx)(l.rA,{icon:"folder_open",title:e("sub_dir"),onClick:()=>(e=>{w({open:!0,main_context_div:(0,f.jsx)(se,{children_list:e.children,on_cancel:()=>{w({open:!1})},on_confirm:t=>{e.children=t,j([...x]),w({open:!1})}})})})(t)})]}),(0,f.jsx)("div",{children:0!==s&&(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{x.splice(e,1),j([...x])})(s)})})];return n}),width:"10rem",onRowDrag:(e,t)=>{0!==e&&0!==t&&j((0,v.TI)(x,e,t))}})}),(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("个人保护路径")})," ",(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{de("保护目录")},title:e("信息")})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{k([...S,{path:"",note:""}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{(await c.XO.post("protection_dir/save",S)).code===d.m.Success&&((0,_.SK)(e("保存成功")),m())}})]}),children:(0,f.jsx)(u.X,{headers:T,rows:S.map((t,s)=>{const n=[(0,f.jsx)("div",{children:s}),(0,f.jsx)(r.Sm,{value:t.path,handleInputChange:e=>{t.path=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{S.splice(e,1),k([...S])})(s)})];return n}),width:"10rem",onRowDrag:(e,t)=>{k((0,v.TI)(S,e,t))}})})]}),(0,f.jsxs)(i.xh,{children:[(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("目录快捷命令")}),(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{de("目录快捷命令")},title:"info"})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{N([...A,{cmd:"",note:""}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{(await c.XO.post("filesSetting/save",{quick_cmd:A})).code===d.m.Success&&((0,_.SK)(e("保存成功")),s())}})]}),children:(0,f.jsx)(u.X,{headers:E,rows:A.map((t,s)=>{const n=[(0,f.jsx)(r.Sm,{value:t.index,handleInputChange:e=>{t.index=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.cmd,handleInputChange:e=>{t.cmd=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.father_index,handleInputChange:e=>{t.father_index=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{A.splice(e,1),N([...A])})(s)})];return n}),width:"10rem",onRowDrag:(e,t)=>{N((0,v.TI)(A,e,t))}})}),(0,f.jsx)(a.uF,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("文件快捷命令")}),(0,f.jsx)(l.rA,{icon:"info",onClick:()=>{de("文件快捷命令")},title:"info"})]}),rightTopCom:(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{X([...V,{cmd:"",note:"",file_suffix:"",params:""}])}}),(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{(await c.XO.post("filesSetting/save",{file_quick_cmd:V})).code===d.m.Success&&((0,_.SK)(e("保存成功")),s())}})]}),children:(0,f.jsx)(u.X,{headers:M,rows:V.map((t,s)=>{const n=[(0,f.jsx)(r.Sm,{value:t.file_suffix,handleInputChange:e=>{t.file_suffix=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.cmd,handleInputChange:e=>{t.cmd=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.params,handleInputChange:e=>{t.params=e},no_border:!0}),(0,f.jsx)(r.Sm,{value:t.note,handleInputChange:e=>{t.note=e},no_border:!0}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(e=>{V.splice(e,1),X([...V])})(s)})];return n}),width:"10rem",onRowDrag:(e,t)=>{X((0,v.TI)(V,e,t))}})})]})]})]})})}var ie=s(45907),oe=s(17903);const ae=["password","private_key","secret_key"],le="webdav",re="@authorize",ce="@tcp_account",de={smb:[{keys:["server","username","password"],on_next:"load_shares"},{keys:["share"]}],baidu:[{keys:["app_id","app_key","secret_key"],on_next:"save_app"},{keys:[re]}],tcp_proxy:[{keys:["client_num_id"],on_next:"save_app"},{keys:[ce]}]};function ue(){const{t:e}=(0,h.Bd)(),t=(0,ie.y)(),[,s]=(0,y.fp)(p.AG.prompt_card),[i,o]=(0,n.useState)([]),[d,m]=(0,n.useState)([]),[x,j]=(0,n.useState)(!1),[v,g]=(0,n.useState)(""),[w,b]=(0,n.useState)(le),[S,C]=(0,n.useState)(""),[k,A]=(0,n.useState)({}),[I,N]=(0,n.useState)(1),[V,$]=(0,n.useState)([]),[X,K]=(0,n.useState)({}),[B,F]=(0,n.useState)("oob"),[z,P]=(0,n.useState)(""),[O,T]=(0,n.useState)(null),[E,M]=(0,n.useState)(!0),D=async()=>{try{const[e,t]=await Promise.all([c.I2.post("credential/list",{}),c.I2.post("credential/meta",{})]);o(Array.isArray(e?.data)?e.data:[]),m(Array.isArray(t?.data)?t.data:[])}catch(e){}};(0,n.useEffect)(()=>{D()},[]);const G=d.find(e=>e.type===w)?.fields??[],R=de[w],W=R?.length??1,q=()=>{j(!1),g(""),b(le),C(""),A({}),N(1),$([]),P(""),M(!0)},Z=async e=>{const t=Array.from(new Set(e.map(e=>e.options_source).filter(e=>Boolean(e)))),s={};for(const e of t){const t=await c.I2.post("credential/options",{source:e});s[e]=(t?.data??[]).map(e=>({label:e.label,value:e.value}))}K(s)},U=t=>{if(!S.trim())return e("请填写备注");for(const s of G){if(!1===t.includes(s.key))continue;const n=String(k[s.key]??"").trim()||v&&ae.includes(s.key);if(s.required&&!n)return e(s.label)}},H=async()=>{try{const e=await c.I2.post("baidu/authorize_url",{id:v,mode:B});e?.data&&window.open(e.data,"_blank","noopener,noreferrer")}catch(e){}},J=async()=>{if(z.trim())try{const t=await c.I2.post("baidu/exchange",{id:v,code:z.trim(),mode:B});(0,_.SK)(`${e("授权成功")}:${t?.data?.baidu_name??""}`),P(""),await D()}catch(e){}else(0,_.zN)(e("请填写授权码"))},Q=async()=>{if(O)if(O.account_name.trim())try{await c.I2.post("credential/account_save",{credential_id:v,account_id:O.id,note:O.note,account_name:O.account_name,password:O.password}),(0,_.SK)(e("已保存")),T(null),await D()}catch(e){}else(0,_.zN)(e("请填写对端账号"))},L=R?.[I-1]?.keys??G.map(e=>e.key),Y=L.includes(re),ee=L.includes(ce),te=I===W,se=W>1;return(0,f.jsxs)(a.Zp,{self_title:(0,f.jsxs)("span",{className:" div-row ",children:[(0,f.jsx)("h2",{children:e("凭证管理")}),(0,f.jsx)(l.rA,{icon:"info",title:e("信息"),onClick:()=>{s({open:!0,title:e("信息"),context_div:(0,f.jsxs)("div",{children:[(0,f.jsxs)("ul",{children:[(0,f.jsx)("li",{children:e("crd_tp")}),(0,f.jsx)("li",{children:e("pwdkept")}),(0,f.jsx)("li",{children:e("tstbfrs")})]}),(0,f.jsxs)("ul",{children:[(0,f.jsxs)("li",{children:[(0,f.jsx)("b",{children:"WebDAV"}),":",e("prtwbdv")]}),(0,f.jsxs)("li",{children:[(0,f.jsx)("b",{children:"SSH / SFTP"}),":",e("prtsftp")]}),(0,f.jsxs)("li",{children:[(0,f.jsx)("b",{children:"S3 兼容对象存储"}),":",e("prt_s3")]}),(0,f.jsxs)("li",{children:[(0,f.jsx)("b",{children:"SMB"}),":",e("prt_smb")]}),(0,f.jsxs)("li",{children:[(0,f.jsx)("b",{children:"百度网盘"}),":",e("prt_bd")]}),(0,f.jsxs)("li",{children:[(0,f.jsx)("b",{children:e("本地目录")}),":",e("prt_local")]})]})]})})}})]}),rightBottomCom:(0,f.jsxs)("div",{children:[!x&&(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{q(),j(!0)}}),x&&(0,f.jsxs)(f.Fragment,{children:[se&&I>1&&(0,f.jsx)(l.rA,{icon:"arrow_back",title:e("上一步"),onClick:()=>N(I-1)}),se&&!te&&(0,f.jsx)(l.rA,{icon:"arrow_forward",title:e("下一步"),onClick:async()=>{const t=U(R?.[I-1]?.keys??[]);if(t)return void(0,_.zN)(`${e("请填写")}${t}`);const s=R?.[I-1]?.on_next;try{if("load_shares"===s&&!await(async()=>{const t=await c.I2.post("share/list",{driver:w,id:v||void 0,config:{server:k.server,username:k.username,password:k.password}}),s=t?.data??[];return s.length?($(s.map(e=>({label:e.name,value:e.name}))),!0):((0,_.zN)(e("没有找到共享")),!1)})())return;if("save_app"===s&&!await(async()=>{try{const e=await c.I2.post(v?"credential/update":"credential/add",{id:v||void 0,type:w,note:S,config:k,enabled:E});return!v&&e?.data?.id&&g(e.data.id),!0}catch(e){return!1}})())return;N(I+1)}catch(e){}}}),(!se||te)&&(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{const t=U(G.map(e=>e.key));if(t)(0,_.zN)(`${e("请填写")}${t}`);else try{await c.I2.post(v?"credential/update":"credential/add",{id:v||void 0,type:w,note:S,config:k,enabled:E}),(0,_.SK)(e("保存成功")),q(),await D()}catch(e){}}}),(0,f.jsx)(l.rA,{icon:"cancel",title:e("取消"),onClick:q})]})]}),children:[x&&(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)(r.Sm,{placeholder:e("备注"),value:S,handleInputChange:C}),(0,f.jsx)(r.l6,{value:w,options:d.map(e=>({title:e.name,value:e.type})),onChange:e=>{b(e),A({}),$([]),K({}),N(1),P("");const t=d.find(t=>t.type===e)?.fields??[];t.some(e=>e.options_source)&&Z(t)}}),Y?(()=>{const s=i.find(e=>e.id===v)?.accounts??[];return(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)(r.BC,{label:e("授权方式"),label_width:"6rem",children:(0,f.jsxs)("div",{className:"div-row",children:[(0,f.jsx)(r.U6,{name:"baidu_auth_mode",value:"one_click",context:e("一键授权"),selected:"one_click"===B,onchange:()=>F("one_click")}),(0,f.jsx)(r.U6,{name:"baidu_auth_mode",value:"oob",context:e("outh_ob"),selected:"oob"===B,onchange:()=>F("oob")})]})}),"oob"===B&&(0,f.jsx)(r.BC,{label:e("授权码"),label_width:"6rem",children:(0,f.jsx)(r.Sm,{placeholder:e("粘贴授权码 code"),value:z,handleInputChange:P})}),(0,f.jsxs)("div",{className:"div-row",children:[(0,f.jsx)(l.rA,{icon:"open_in_new",title:e("去授权"),onClick:H}),"oob"===B&&(0,f.jsx)(l.rA,{icon:"check",title:e("完成授权"),onClick:J})]}),s.length>0&&(0,f.jsx)(u.X,{headers:[e("账号名"),e("百度账号"),e("授权状态"),e("使用"),e("授权时间"),e("操作")],rows:s.map(s=>[(0,f.jsx)(a.xP,{context:s.note||s.account_name||s.id}),(0,f.jsx)(a.xP,{context:s.account_name||s.id}),(0,f.jsx)(a.xP,{context:s.authorized?e("已授权"):e("未授权")}),(0,f.jsx)(a.xP,{context:!1===s.enabled?e("停用"):e("启用")}),(0,f.jsx)("p",{children:s.obtained_at?(0,oe.eK)(s.obtained_at):"-"}),(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"network_check",title:e("授权检测"),onClick:()=>(async(t,s)=>{try{const n=await c.I2.post("baidu/verify",{id:t,account_id:s}),i=n?.data??{};i.valid?(0,_.SK)(e("账号可用")):(0,_.zN)(`${e("账号不可用")}:${i.error??""}`),await D()}catch(e){}})(v,s.id)}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>((s,n)=>{t({title:e("确认删除"),sub_title:n.note||n.account_name||n.id,confirm_fun:async()=>{try{await c.I2.post("baidu/deauthorize",{id:s,account_id:n.id}),(0,_.SK)(e("已删除")),await D()}catch(e){}}})})(v,s)})]})])})]},re)})():ee?(()=>{const s=i.find(e=>e.id===v)?.accounts??[];return(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)("div",{className:"div-row",children:(0,f.jsx)(r.BC,{label:e("备注"),label_width:"6rem",children:(0,f.jsx)(r.Sm,{placeholder:e("便于辨认的名字"),value:O?.note??"",handleInputChange:e=>T({...O??{note:"",account_name:"",password:""},note:e})})})}),(0,f.jsxs)("div",{className:"div-row",children:[(0,f.jsx)(r.BC,{label:e("对端账号"),label_width:"6rem",children:(0,f.jsx)(r.Sm,{placeholder:e("对端 FileCat 登录名"),value:O?.account_name??"",handleInputChange:e=>T({...O??{note:"",account_name:"",password:""},account_name:e})})}),(0,f.jsx)(r.BC,{label:e("对端密码"),label_width:"6rem",children:(0,f.jsx)(r.Sm,{placeholder:e("留空表示不修改"),value:O?.password??"",handleInputChange:e=>T({...O??{note:"",account_name:"",password:""},password:e})})})]}),(0,f.jsxs)("div",{className:"div-row",children:[(0,f.jsx)(l.rA,{icon:"save",title:e("保存账号"),onClick:Q}),O&&(0,f.jsx)(l.rA,{icon:"close",title:e("取消"),onClick:()=>T(null)})]}),s.length>0&&(0,f.jsx)(u.X,{headers:[e("备注"),e("对端账号"),e("密码"),e("操作")],rows:s.map(s=>[(0,f.jsx)(a.xP,{context:s.note||s.account_name||s.id}),(0,f.jsx)(a.xP,{context:s.account_name||s.id}),(0,f.jsx)(a.xP,{context:s.has_password?e("已设置"):e("未设置")}),(0,f.jsxs)("div",{className:"div-row",children:[(0,f.jsx)(l.rA,{icon:"network_check",title:e("验证登录"),onClick:()=>(async t=>{const s=O?.id===t.id;try{const n=await c.I2.post("credential/account_verify",{credential_id:v,account_id:t.id,account_name:s?O.account_name:t.account_name,password:s?O.password:void 0}),i=n?.data??{};i.ok?(0,_.SK)(e("账号可用")):(0,_.zN)(`${e("账号不可用")}:${i.error??""}`)}catch(e){}})(s)}),(0,f.jsx)(l.rA,{icon:"edit",title:e("编辑"),onClick:()=>T({id:s.id,note:s.note??"",account_name:s.account_name??"",password:""})}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(s=>{t({title:e("确认删除"),sub_title:s.note||s.account_name||s.id,confirm_fun:async()=>{try{await c.I2.post("credential/account_remove",{credential_id:v,account_id:s.id}),(0,_.SK)(e("已删除")),await D()}catch(e){}}})})(s)})]})])})]},ce)})():G.filter(e=>L.includes(e.key)).map(t=>{if(t.options_source)return(0,f.jsx)(r.BC,{label:e(t.label),label_width:"6rem",children:(0,f.jsx)(r.l6,{value:k[t.key]??"",options:X[t.options_source]??[],onChange:e=>A({...k,[t.key]:e})})},t.key);if("share"===t.key&&"smb"===w)return(0,f.jsx)(r.BC,{label:e(t.label),label_width:"6rem",children:(0,f.jsx)(r.l6,{value:k[t.key]??"",options:V,onChange:e=>A({...k,[t.key]:e})})},t.key);const s="password"===t.type;return(0,f.jsx)(n.Fragment,{children:(0,f.jsx)(r.Sm,{type:s?"password":"text",placeholder:t.label,value:k[t.key]??"",handleInputChange:e=>A({...k,[t.key]:e})})},t.key)})]}),!x&&(0,f.jsx)(u.X,{headers:[e("备注"),e("类型"),e("操作")],rows:i.map(s=>{return[(0,f.jsx)(a.xP,{context:s.note}),(0,f.jsx)(a.xP,{context:(n=s.type,d.find(e=>e.type===n)?.name??n)}),(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"edit",title:e("编辑"),onClick:()=>(e=>{j(!0),g(e.id),b(e.type),C(e.note??""),A({...e.config??{}}),P(""),M(!1!==e.enabled),N(de[e.type]?.length??1),"smb"===e.type&&c.I2.post("share/list",{driver:"smb",id:e.id,config:e.config??{}}).then(e=>{$((e?.data??[]).map(e=>({label:e.name,value:e.name})))}).catch(()=>{});const t=d.find(t=>t.type===e.type)?.fields??[];t.some(e=>e.options_source)&&Z(t).catch(()=>{})})(s)}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(async s=>{t({title:e("确认删除"),sub_title:s.note,confirm_fun:async()=>{try{await c.I2.post("credential/delete",{id:s.id}),(0,_.SK)(e("已删除")),await D()}catch(e){}}})})(s)})]})];var n})})]})}function he(){const{t:e}=(0,h.Bd)(),t=(0,ie.y)(),[s,i]=(0,n.useState)([]),[o,d]=(0,n.useState)([]),[p,m]=(0,n.useState)([]),[x,j]=(0,n.useState)(!1),[v,g]=(0,n.useState)(""),[y,w]=(0,n.useState)("webdav"),[b,S]=(0,n.useState)(""),[C,k]=(0,n.useState)(""),[A,I]=(0,n.useState)(""),[N,V]=(0,n.useState)(""),[$,X]=(0,n.useState)(""),[K,B]=(0,n.useState)(!1),F=async()=>{try{const[e,t,s]=await Promise.all([c.I2.post("list",{}),c.I2.post("credential/list",{}),c.I2.post("driver/list",{})]);i(Array.isArray(e?.data)?e.data:[]),d(Array.isArray(t?.data)?t.data:[]),m(Array.isArray(s?.data)?s.data:[])}catch(e){}};(0,n.useEffect)(()=>{F()},[]);const z=(0,oe.p_)(C,o),P=z.length>0,O=()=>{j(!1),g(""),w("webdav"),S(""),k(""),I(""),V(""),X(""),B(!1)};return(0,f.jsxs)(a.Zp,{self_title:(0,f.jsx)("span",{className:" div-row ",children:(0,f.jsx)("h2",{children:e("挂载列表")})}),rightBottomCom:(0,f.jsxs)("div",{children:[!x&&(0,f.jsx)(l.rA,{icon:"add",title:e("添加"),onClick:()=>{O(),j(!0)}}),x&&(0,f.jsx)(l.rA,{icon:"network_check",title:e("测试连接"),onClick:async()=>{if(C)try{const t=await c.I2.post("test",{id:v||void 0,driver:y,credential_id:C,account_id:A,root_dir:N}),s=t?.data;s?.ok?(0,_.SK)(`${e("连接成功")}(${s.count??0})`):(0,_.zN)(`${e("连接失败")}:${s?.error??""}`)}catch(e){}else(0,_.zN)(e("请选择凭据"))}}),x&&(0,f.jsx)(l.rA,{icon:"save",title:e("保存"),onClick:async()=>{if(C)if(!P||A)if(b.trim())try{await c.I2.post(v?"update":"add",{id:v||void 0,driver:y,mount_path:b,credential_id:C,account_id:P?A:void 0,root_dir:N,note:$,color:oe.OT,readonly:!1,enabled:!0,forward_to_remote:K}),(0,_.SK)(e("保存成功")),O(),await F()}catch(e){}else(0,_.zN)(e("munt_rq"));else(0,_.zN)(e("请选择账号"));else(0,_.zN)(e("请选择凭据"))}}),x&&(0,f.jsx)(l.rA,{icon:"cancel",title:e("取消"),onClick:O})]}),children:[x&&(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)(r.BC,{label:e("挂载类型"),label_width:"6rem",children:(0,f.jsx)(r.l6,{value:y,options:p.map(e=>({title:e.name,value:e.type})),onChange:e=>{w(e),k(""),I("")}})}),(0,f.jsx)(r.BC,{label:e("凭据"),label_width:"6rem",required:!0,children:(0,f.jsx)(r.l6,{value:C,options:(T=y,(0,oe.XT)(T,o)),onChange:e=>{k(e),I("")}})}),P&&(0,f.jsx)(r.BC,{label:e("账号"),label_width:"6rem",required:!0,children:(0,f.jsx)(r.l6,{value:A,options:z,onChange:I})}),(0,f.jsx)(r.BC,{label:e("本地目录"),label_width:"6rem",required:!0,children:(0,f.jsx)(r.Sm,{placeholder:e("被挂载的本地绝对路径"),value:b,handleInputChange:S})}),(0,f.jsx)(r.BC,{label:e("strtdrt"),label_width:"6rem",children:(0,f.jsx)(r.Sm,{placeholder:e("远端目录"),value:N,handleInputChange:V})}),(0,f.jsx)(r.BC,{label:e("备注"),label_width:"6rem",children:(0,f.jsx)(r.Sm,{placeholder:e("列表显示的名称"),value:$,handleInputChange:X})}),"tcp_proxy"===y&&(0,f.jsx)(r.BC,{label:e("ftr2rmt"),label_width:"6rem",children:(0,f.jsx)(l.Ay,{checked:K,onChange:B,title:e("ftr2rmt_tip")})})]}),!x&&(0,f.jsx)(u.X,{headers:[e("备注"),e("挂载类型"),e("凭据"),e("账号"),e("操作")],rows:s.map(s=>{const n=o.find(e=>e.id===s.credential_id),i=(n?.accounts??[]).find(e=>e.id===s.account_id);return[(0,f.jsx)("p",{children:s.note}),(0,f.jsx)("p",{children:(a=s.driver,p.find(e=>e.type===a)?.name??a)}),(0,f.jsx)("p",{children:n?n.note:e("凭据已丢失")}),(0,f.jsx)("p",{children:s.account_id?i?i.note||i.account_name||i.nickname||i.id:e("账号已丢失"):"-"}),(0,f.jsxs)("div",{children:[(0,f.jsx)(l.rA,{icon:"edit",title:e("编辑"),onClick:()=>(e=>{j(!0),g(e.id),w(e.driver),S(e.mount_path??""),k(e.credential_id??""),I(e.account_id??""),V(e.root_dir??""),X(e.note??""),B(Boolean(e.forward_to_remote))})(s)}),(0,f.jsx)(l.rA,{icon:"delete",title:e("删除"),onClick:()=>(async s=>{t({title:e("确认删除"),sub_title:s.mount_path,confirm_fun:async()=>{try{await c.I2.post("delete",{id:s.id}),(0,_.SK)(e("已删除")),await F()}catch(e){}}})})(s)})]})];var a})})]});var T}function pe(){const{t:e}=(0,h.Bd)(),{check_user_auth:t}=(0,w.MH)(),s=t(o.oV.file_mount),[r,d]=(0,y.fp)(p.AG.mount_enabled);(0,n.useEffect)(()=>{s&&(async()=>{try{const e=await c.I2.post("enabled/get",{});d(!0===e?.data)}catch(e){d(!1)}})()},[s]);return s?(0,f.jsxs)(n.Fragment,{children:[(0,f.jsxs)(k.aZ,{position:"right",children:[(0,f.jsx)("span",{className:"header-label",children:e("总开关")}),(0,f.jsx)(l.rA,{icon:!0===r?"cloud_done":"cloud_off",title:e(!0===r?"muntont":"muntoff"),selected:!0===r,onClick:async()=>{const t=!r;try{const s=await c.I2.post("enabled/set",{enabled:t}),n=!0===s?.data;d(n),(0,_.SK)(e(n?"挂载已启用":"挂载已停用"))}catch(e){}}})]}),(0,f.jsx)(i.xh,{children:(0,f.jsxs)(i.fI,{children:[(0,f.jsx)(i.VP,{widthPer:50,maxWidth:"60rem",children:(0,f.jsx)(ue,{})}),(0,f.jsx)(i.VP,{widthPer:50,maxWidth:"60rem",children:(0,f.jsx)(he,{})})]})})]}):(0,f.jsx)(i.fI,{children:(0,f.jsx)(i.VP,{children:(0,f.jsx)(a.Zp,{self_title:(0,f.jsx)("h2",{children:e("网盘挂载")}),children:(0,f.jsx)("p",{children:e("nmuntpr")})})})})}var me=s(87361);function _e(){const{t:e}=(0,h.Bd)(),{check_user_auth:t}=(0,w.MH)(),s=[{index:2,name:`${e("个人环境")}`,rto:"private_env_setting",component:(0,f.jsx)(ne,{})}];return t(o.oV.sys_setting_page)&&s.unshift({index:1,name:e("系统"),rto:"password",component:(0,f.jsx)(K,{})}),t(o.oV.sys_env_page)&&s.push({index:3,name:`${e("系统环境")}`,rto:"env_setting/",component:(0,f.jsx)(J,{})}),t(o.oV.auth_router_page)&&s.push({index:4,name:e("自定义路由"),rto:"customer_router/",component:(0,f.jsx)(A,{})}),t(o.oV.file_mount)&&s.push({index:5,name:e("网盘挂载"),rto:"mount_setting/",component:(0,f.jsx)(pe,{})}),t(o.oV.user_manage)&&s.push({index:6,name:e("用户管理"),rto:"user_manager/",component:(0,f.jsx)(Y,{})}),t(o.oV.role_manage)&&s.push({index:7,name:e("角色管理"),rto:"role_manager/",component:(0,f.jsx)(ee,{})}),(0,f.jsx)(i.W1,{optionList:s,father_route:me.o.setting})}},92350(e,t,s){s.d(t,{Q:()=>u,o:()=>p});var n=s(34843),i=s(82893),o=s(74777),a=s(96540),l=s(22022),r=s(23430),c=s(14284),d=s(74848);function u(){const[e,t]=(0,n.fp)(i.AG.prompt_card),{t:s,i18n:a}=(0,l.Bd)();return e=>{let n;e===o.jk.ffmpeg?n=(0,d.jsx)("div",{children:"视频转换,rtsp播放器等媒体功能都需要这个软件。linux下你可以使用apt或者yum来安装,或者直接输入软件的位置"}):e===o.jk.smartmontools?n=(0,d.jsx)("div",{children:"磁盘检查需要这个软件。linux下你可以使用apt或者yum来安装,或者直接输入软件的位置。"}):"保护目录"===e?n=(0,d.jsxs)("div",{children:["在删除的时候保护目录会拒绝删除。",(0,d.jsxs)("ul",{children:[(0,d.jsx)("li",{children:"可以使用 /* 来表达该目录下所有文件都禁止删除"}),(0,d.jsx)("li",{children:"可以使用 /** 来表达该目录下所有子目录文件都禁止删除"})]})]}):"文件夹路径"===e?n=(0,d.jsx)("div",{children:"用于在文件夹下切换根目录"}):"环境路径"===e?n=(0,d.jsx)("div",{children:"当在不同用户环境下运行的时候由于没有执行终端去加载PATH,这里可以添加额外的PATH路径,点击这里的保存还会更新系统上的path路径"}):"pty"===e?n=(0,d.jsx)("div",{children:"一些需要Pty环境的命令"}):"文件上传"===e?n=(0,d.jsx)("div",{children:(0,d.jsxs)("ul",{children:[(0,d.jsx)("li",{children:"对于不同的目录(包括所有子目录),可能是机械或者固态硬盘,机械硬盘在处理多个小文件的时候会做随机i/o,由于一般只有一个盘头所以会影响整体效率,特别是写操作,这里提供了上传时候的最大数量限制,对于下载数量目前不做限制."}),(0,d.jsx)("li",{children:"大文件支持断点和分块并发传输,建议并发数量设置为2,分块大小设置为10MB,大文件判断为500MB,设置过大的话会上传的时候会占据较大内存"})]})}):"目录快捷命令"===e?n=(0,d.jsx)("div",{children:"右键文件夹空白处用于,打开终端快捷执行命令"}):"文件快捷命令"===e?n=(0,d.jsx)("div",{children:"用于右键特定后缀的文件,执行一些快捷命令,文件后缀可以是多个,用空格分割"}):"Workflow"===e?n=(0,d.jsx)("div",{children:(0,d.jsxs)("ul",{children:[(0,d.jsx)("li",{children:"在特定的时间启动系统中的workflow任务"}),(0,d.jsx)("li",{children:"cron表达式是定时器 格式为: 秒 分 时 日 月 星期"}),(0,d.jsxs)("li",{children:[(0,d.jsx)("li",{children:'1. "*"(通配符,所有值)'}),(0,d.jsx)("li",{children:'2. "," 是枚举: 0 0 1,15 * * *'}),(0,d.jsx)("li",{children:'3. "-" 是范围: 0 0 1-5 * * *'}),(0,d.jsx)("li",{children:'4. "/" 是步长,标识每隔n执行 */3 * * * * * 每隔三秒,必须配合 * 使用 ,/ 只能写一次 ,有了/就成了定时器,而不是指定时间执行'})]})]})}):"插件配置"===e?n=(0,d.jsx)("div",{children:s("路径可以是一个 js 文件也可以是一个node 项目目录")}):"机器人配置"===e&&(n=(0,d.jsxs)("div",{children:[(0,d.jsx)("dv",{children:"机器人功能用于开通各种第三方支持的机器人,让第三方机器人接入本地的 AI 模型。"}),(0,d.jsxs)("ul",{children:[(0,d.jsx)("li",{children:" 1. qq 机器人需要先在手机 app 中添加,然后在https://q.qq.com/qqbot/ 登录机器人配置页面,在开发管理中复制机器人的 appId,appSecret 到这里就完成了配置了。目前 qq 机器人不稳定,且创建后无法删除(2026.07.05)"}),(0,d.jsx)("li",{children:" 2. https://opensource.dingtalk.com/developerpedia/docs/explore/tutorials/stream/bot/nodejs/create-bot 这个是钉钉机器人开通教程,注意复制钉钉的 clientId 的是时候不要复制成appId 了。"}),(0,d.jsx)("li",{children:" 3. 企业微信机器人的开通甚至不需要 pc 操作,在通讯录中点击智能机器人,选择 api 模式,就创建完成了,手机上直接复制 id 和密钥。"}),(0,d.jsx)("li",{children:" 4. 飞书https://open.feishu.cn/document/develop-an-echo-bot/introduction?from=banner 登录这个开发者后台,按照这个地址教程创建机器人,使用的时候这个机器人是作为一个应用,可以在工作台内搜索你的这个机器人的名字。"})]})]})),t({open:!0,title:"信息",context_div:(0,d.jsx)("div",{children:n})})}}let h=r.Ky;function p(){const[e,t]=(0,a.useState)([]);return(0,a.useEffect)(()=>{(async()=>{try{const e=await c.XO.get("themes");if(0===e.code){const s=e.data||[];h=[...r.Ky,...s],t(h)}else console.warn("获取主题列表失败,使用默认列表"),t(h)}catch(e){t(h)}})()},[]),e}},6960(e,t,s){s.d(t,{s:()=>a});var n=s(72635);const i=1440,o=525600;function a(e){e=e>1e12?e:1e3*e;const t=Date.now(),s=Math.abs(t-e)/6e4;return s<1?n.Ay.t("小于一分钟"):s<60?`${s.toFixed(0)} ${n.Ay.t("分钟前")}`:s<i?`${(s/60).toFixed(0)} ${n.Ay.t("小时前")}`:s<43200?`${(s/i).toFixed(0)} ${n.Ay.t("天前")}`:s<o?`${(s/43200).toFixed(0)} ${n.Ay.t("月前")}`:`${(s/o).toFixed(0)} ${n.Ay.t("年前")}`}},93245(e,t,s){s.d(t,{a:()=>r,d:()=>l});var n=s(96540),i=s(34843),o=s(82893),a=s(23430);const l=[{id:a.nE.ace,label:"文本编辑器(ace)"},{id:a.nE.md,label:"md编辑器"},{id:a.nE.mind,label:"思维导图编辑器"},{id:a.nE.draw,label:"draw编辑器"},{id:a.nE.timeline,label:"时间线编辑器"},{id:a.nE.image,label:"图片编辑器"},{id:a.nE.excel,label:"excel编辑器"}];function r(e,t,s,a=!1){const[l]=(0,i.fp)(o.AG.user_base_info),r=l?.user_data?.editor_auto_save,c=(0,n.useRef)(r);c.current=r;const d=(0,n.useRef)(t);d.current=t;const u=(0,n.useRef)(s);u.current=s,(0,n.useEffect)(()=>{if(a)return;const t=c.current;if(!t?.enable||t.interval<=0||!t.editors?.includes(e))return;const s=setInterval(()=>{d.current()&&u.current(!0)},1e3*t.interval);return()=>clearInterval(s)},[r,e,a])}},24659(e,t,s){s.d(t,{K:()=>i});var n=s(22022);const i=()=>{const{t:e}=(0,n.Bd)();return[{title:e("是"),value:!0,color:"#28a745"},{title:e("否"),value:!1,color:"#666666"}]}}}]);
|